Fingercomp
Гуру-
Публикации
1 629 -
Зарегистрирован
-
Посещение
-
Победитель дней
283
Тип публикации
Блоги
Профили
Форум
Багтрекер
Магазин
Все публикации пользователя Fingercomp
-
Я тоже качал программки напрямую с HTTP-сервера на локальном компе. А для отправки на сервер при наличии NAT можно заиспользовать какой-нибудь Stem. Сетап простой. На линуксе: Вотчить файлы через inotifywait. Если хочется обновлять не при сохранении, а по команде вручную — тоже не проблема. (Возможно, прогнать линтеры или ещё что-нибудь.) Отправлять в стем файлы через ncat. На опенкомпе: Читать сообщения стема через либу. Стопать программу. Обновлять файлы. Запускать программу — в процессе, чтобы легко было стопать. Разумеется, можно ещё озаботиться и сделать живую перезагрузку, чтобы между обновлениями не терять стейт, но это уже не так просто.
-
После того как клубы канули в могилу, записи были перемещены в мой блог. Ничего против не имею, но получилось, что у некоторых записей автор постов не я. Поэтому некоторые действия, которые я могу совершать со своими записями, недоступны для этих. Например, нельзя добавить сообщение к ним. Прошу дать полные права на модерирование записей в моём блоге вне зависимости от их авторов. Хотелка: позволить выбрать, кому ещё разрешить публиковать в моём блоге, кроме меня.
-
Ответ.
-
Код верен, действительно. Проблема вот в чём. Таблицу arg добавляет стэндалонный интерпретатор. А в OpenOS не озаботились этим. Но есть другой способ. Путь к программе хранится в переменной окружения _. Получается она вызовом os.getenv("_"). Выдаст что-то вроде /bin/lua.lua. К слову, другие аргументы можно получить через .... Это варарг-выражение, которое должно быть описано где-то дальше в учебнике.
-
Ну, devfs в OpenOS уже давно есть. А это то же самое по своей сути. Если сделать таблицу, в которой заимплементить все функции прокси filesystem, её можно будет примонтировать и использовать.
-
Хотелось бы возможности вставить произвольный файл с гиста ембедом. Я когда-то в блог вставлял уже так статью про звуковую карту, ибо что тогда, что сейчас форумный редактор неудобный (а теперь ещё и тормозит). У меня есть на гисте ещё несколько потенциальных статей, и их бы мне тоже таким же образом на форуме опубликовать хотелось.
-
Ещё можно вызвать req.finishConnect(). Эта функция выдаст true только тогда, когда установится соединение. Если там ошибка будет, эта же функция ошибку эту выкинет. Очень удобно. Можно в цикле со слипом её вызвать и ждать, пока не установится. А потом уже читать можно будет. Заявления, что "никогда такого не было", ложны. Такое было давно, минимум три года. Я безумно счастлив за тех, кому не приходилось сталкиваться с этой проблемой, но на самом деле нормально работающая геталка с интернета выглядит весьма сложнее, чем код от @Alex. Если делать по-простому, то вы в свою программу добавляете бесплатное состояние гонки. Что, как известно, дебажить очень весело и интересно. Ещё замечание. Чтобы не нужно было в цикле нерационально расходовать процессорное время, лучше не слип делать, а event.pull("internet_ready"). Если совсем круто хочется, то можно даже event.pull("internet_ready", req.id()). internet_ready — это сигнал, который посылается компьютеру, если на сокете появляются новые непрочтённые данные. Например, прочла прога сначала 5 байтов с сокета, а потом на него сервер ещё двадцать отправил — тогда-то и получит прога ивент этот и снова считать данные сможет. Так как особо крутые кодеры могут жонглировать сразу десятью интернет-соединениями на одном компьютере, полезно фильтровать ивенты по идшнику соединения, как во втором варианте у меня. P. S. Все эти функции доступны при создании соединения через компонент интернет-платы. Не через либу internet. Это предельно важно. Поэтому я советую всегда не юзать либу, а помучаться, но сделать нормальную считывалку через апи компонента.
-
Говорить о ненужности программы, так как ею нельзя копать "картошечку", не ахинея ли великая? Проснись, народ! Майнкрафт не на одной картошке повязан! Не пропустили ли вы "sandbox" у игры в описании? Так можно говорить, что и OC не нужен, и кубики не нужны, и вообще всё не нужно и бессмысленно. А такое уже лечить нужно. Стримы нужны! Но не всякие: Сеть должна иметь нормальную топологию. Работать внутри <=400 блоках модема — ненормально. Потоки лучше тем, что юзеру не нужно мучаться с делением большого контента на пакеты, которые влезают в maxPacketSize. Если такого нет, это ненормально. На получателе последовательность пакетов должна быть такой же, как и на сервере. Если сначала придут 3 байта конца, а потом 8192 байта начала, это ненормально. Получатель должен получить все пакеты, которые отсылает отправитель. Если половина потеряется, а сеть не оповестит даже об этом получателя, это ненормально. Получатель не должен получать дубликаты пакетов. Если сообщение вдруг вырастает в 2 раза по размеру, это ненормально. В сети нужна какая-то защита от дудоса. Если кто-то в пещере делает вайл-тру-ду-сенд, и из-за этого никто другой не может юзать сеть, это ненормально. Наконец, необходимость набирать огромную кучу лишнего кода, есть тоже ненормально. Если для ответа так или иначе надо создать свой стрим, так почему ж не сделать это сразу в либе и отдать аргументом функции-листнеру? Да и одним бы стримом можно было бы справиться, как мне кажется, смысла во втором не вижу. Возможно, что-то из пунктов выше уже реализовано или реализовывается, пока я пишу этот пост. Я, к сожалению, знать об этом не могу, потому что качать какой-то архив с яндекс-диска — это близко к издевательству, а потому я этого и не делал. P. S. Если кто-то обижен тоном этого поста, прошу прощения. Очень понравилось это выступление.
-
Как передать файл по сети на другой компьютер и запустить его?
Fingercomp ответил в вопрос GNT в Общие
Авторитетно заявляю, что запрос абсолютно непонятен, и требую переформулировки в развёрнутом виде. Дам пару поинтеров к тому, что, возможно, связано с предложениями в первом посте. Компьютеры не могут устанавливать соединения с клиентами извне, работая как сервер. Понятнее говоря, нельзя поставить слушателя на порт из-под опенкомпьютера. Компьютеры могут устанавливать соединения исключительно как клиент к серверу. Внутри игры средствами OpenComputers нельзя получить любое из перечисленого: список компьютеров; список компьютеров с интернет-картой; список компьютеров с интернет-картой, находящихся в загруженных чанках; список работающих в текущее время компьютеров с интернет-картой; список компьютеров с интернет-картой, которые установили хотя бы одно соединение со внешним сервером; список установленных всеми компьютерами соединений со внешними серверами. -
Сэнгар выдал самому себе и некоторым друзьям из #oc этого роботика. А мод, который их добавляет, как ни странно, — OpenComputers. Сырцы.
-
Какая интересная программа. А что она делает?
-
Отличный модик. Я, конечно, могу понять автора OC, который ограничился минисумочками в качестве сундуков и солнечной "батарейкой" из калькулятора (баланс соблюдать), но для удобства, особенно на, как я понимаю, кастомном компьютерном сервере с нетривиальной игрой этот мод действительно очень полезен. Иначе просто компы не составят конкуренции другим модам.
-
io.lines хочет путь к файлу, а в коде даётся сразу хендл на него. Вот и ругается. for line in io.lines("f.txt") do print(line) end
- 3 ответа
-
- 2
-
-
-
Эта беспрецедентно короткая запись имеет начало своих ног в запросе @Laine_prikol, как-то спросивший в нашей ирке, можно ли стэктрейс сделать не таким тупым. Меня это заинтересовало, и спустя часик выросла очень короткая программка, которая рисует вот такие стэктрейсы: # 0: C field function yield(...) (defined in [C]) # 1: Lua local function f(f=function: 0x559402b83590, a=42, b=24, vararg test, nil):109 (defined in trace.lua at L108) # 2: Lua local function outer(f=function: 0x5594040b2230, g=function: 0x559402b83590, a=42, b=24, <... (1 arg)>):105 (defined in trace.lua at L103) # 3: Lua function <anon>():113 (defined in trace.lua at L102) Заметили что-то необычное? Наконец-то пишется, какие аргументы имеются у функции, потому что это куда информативнее беглому взгляду, чем описание расположения и строки. Код лежит на гисте: https://gist.github.com/Fingercomp/a688d221356cb371d940b947d0ca90a8. Использованы функции debug.getinfo и debug.getlocal. Аргументы должны писаться даже внутри OC, но уже без значений.
-
А я костылял си апи в луа для опенкомпов. Нет, плюсы даже я костылять не стал — мне и си хватило. Ситуация была такова. Я тогда ещё пилил свою гуи-либу-убийцу-всего-живого-своей-охрененностью, и она как-то подозрительно тормозила. А когда программы подозрительно тормозят, юзают профилятор. Который желательно писать на си, дабы минимизировать задержки. Что я и сделал, после чего последовали долгие недели попыток прицепить си-модуль к луа на OC. Ну, прежде всего, я чутка пропатчил мод: внёс внутрь песочницуы дебаг-либу родную и не менее родной модуль package, который умеет запускать си-модули. Затем я всяко-разно пытался скомпилировать свой профилятор так, что при загрузке его он подхватывал бы символы луа. Не получилось. Поэтому я взял сырцы луа, которые юзаются в OC. Я их взял, всунул туда свой профилятор и сцомпилировал их вместе так, будто профилятор был встроенной либой луа. Костыли страшные, да. Получившимся подменил то, что лежало стандартно внутри мода, и пересобрал последний. Такими шаманствами я таки осилил получить свой ненаглядный профилятор внутри опенкомпа, и потому смог пропрофилировать свою гуи-либу-убийцу-всего-живого-своей-охрененностью. Это мне, конечно, ни о чём не поведало новом и ничем не помогло, да и гуи-либу эту я таки забросил, но это уже другая история. А можно без костылей? Не, без костылей не получится. Не потому, что плюсы — это уже костыль. Хотя это тоже справедливо (то есть, нет, конечно, не будем холивар разводить). А потому, что авторам мода и в голову не приходило, что кто-то чем-то подобным будет заниматься, и, более того, намеренно всяко-разно отрезали куски луа так, чтобы это оказалось в принципе невозможным. Потому как всем известно, как просто в си выстрелить в ногу вне зависимости от желаний владельца этой ноги, что недопустимо на публичных серверах всяких. Поэтому остаётся учить Луа. Язык это хороший, простой, минималистичный, красивый и полезный, хотя и чутка неудобный порою, как минимум, для заядлого заплюсневевшего программиста из-за динамической типизации.
-
Ну, ссылки я не постов набива ради кидал. Баг найден, пофикшен. bufferChanges=false — опция полезная, и ставить её вне зависимости от багов удобно бывает, но правильнее всё же будет скачать OC 1.7.4, вышедший дня три назад, и юзать его. Там бага этого нет — быть не должно, как минимум.
-
https://github.com/MightyPirates/OpenComputers/issues/3038 https://github.com/MightyPirates/OpenComputers/issues/3031
-
О, самая сложная часть уже осилена? Ну, что сказать, все кактусы это взрывает напрочь. Буду следить — но не беспокойтесь: дальше этой темы слежку проводить не стану.
-
string.gsub, безусловно. Забудь про какие-то жутчайшие костыли с string.find и прочим. Гсаб тут просто рулит и педали от пола не отрывает. Он может поменять одно слово на другое. string.gsub("abc", "a", "d") == "dbc" Он может поменять один паттерн на что-то другое. string.gsub("hello world", "%w+", [["%1"]]) == [["hello" "world"]] Он может поменять один паттерн на табличное значение. local greek = { l = "λ", o = "ο", g = "γ", i = "ι", k = "κ", e = "ή", } string.gsub([[logic derives from Ancient Greek $l$o$g$i$k$e]], "$(%w+)", greek) == "logic derives from Ancient Greek λογική" И самое крутое: он может менять один паттерн по функции, вызывая её для каждого матча. string.gsub([[breaking news: title case considered stupid]], "(%w)(%w*)", function(head, tail) return head:upper() .. tail end) == [[Breaking News: Title Case Considered Stupid]] Читайте подробнее вот где-то тут.
-
Продолжить позволю себе. Луа принимает спокойно сокращённые версии масок: `"*a"`, например. Окроме этого есть ещё и фича Lua 5.3: звёздочку можно не писать. В 5.2 работать не будет, разумеется. Помимо этого, слишком часто ты юзаешь `component.proxy`. Каждый вызов создаётся совершенно новая таблица, хоть и пустая. Не особо оптимальное использование. Для прямого вызова по адресу лучше использовать `component.invoke(address, methodName, arguments...)`. Наконец, советую чаще использовать пустые строки. Они очень полезны, как ни странно. Я, например, отделяю каждый блок пустой строкой, кроме тех, которые в начале или в конце, — читать такое гораздо проще. По той же причине, кстати, и на форуме стараюсь абзацы короткими делать и отделять их \n\n. Примеры кода: local function recurse(g) return (function(f) return g(function(x) return f(f)(x) end) end)(function(f) return g(function(x) return f(f)(x) end) end) end print(recurse(function(rec) return function(n) if n == 0 then return 1 else return n * rec(n - 1) end end end)(10)) --> 3628800 while true do t.write("> ", true) local tcom = t.read() if not tcom then os.exit() end local com, arg = tcom:match("(%w+)%s(%w+)") if arg == "all" then turn(0, coms[com], at) else turn(at[tonumber(arg)], coms[com]) end end
- 11 ответов
-
- 3
-
-
- opencomputers
- инфраструктура
- (и ещё 2 )
-
Мост Фингера после очередного апдейта Кибером куда-то пропал и назад не вернулся. Не знаю зачем, не знаю почему. Так как играть я в принципе не собираюсь пока, то и не особо интересовался даже.
-
[OC] [Tutorial] Туториал по наноботам!
Fingercomp прокомментировал Fingercomp запись в блоге в Fingercomp's Playground
@eu_tomat как уже описано выше, такое поведение имеет место быть с давних пор. И следуя логике наименования команды, это таки больше фича. -
Предлагаю своё решение. local f = io.open("/etc/program.cfg", "r") local content = f:read("*a") f:close() local cfg = {} assert(load(content, "=program.cfg", "t", cfg))() print(cfg.player) Соответствующий конфиг будет выглядеть тогда так: player = "Robot" robot = "Player" age = 39 alive = false С синтаксисом Луа. Что, согласитесь, выглядит приятно. И не надо запятые ставить, как в таблице сериализованной.
-
@Alex с моей авой всё в порядке, насколько мне отсюда видно. Очень даже. Если же удаление её каждую полночь было знаком приветствия или ещё чем-то, я прошу описывать сентименты словами, а не заставлять меня каждое утро идти в профиль и снова загружать свою аву. 🤔😮
-
это не сентименты. войд-авы запрещены. Поставь себе там черный или розовый кружок или все что угодно. Белая ава твоя создает иллюзию того, что она отвалилась вообще или что-то не так с версткой сайта. Ты не особенный какой-то на форуме, чтобы в сайдбаре мозолить глаза отсутствующей авой. Твои публикации в сайдбаре отображаются просто заголовком публикации. А это не по феншую. Не нравятся тебе круглые авы, значит пускай будет дефолтная. Но это не повод быть революционером и творить какую-то херабру, и сливать свою аву с бэкграундом.
-
Строго говоря, на форуме сейчас ВООБЩЕ нет правил.
Не говоря уже о каких-то запретах на аватару. Я правил про воид авы точно не видел, когда последний раз их перечитывал.
P.S. Ну и по хорошему пометка должна быть, при заливе аватары, что белая аватара запрещена.
А то что это за тихие войны, подковерные.
-
@Alex вот нравится мне это тайнополицейское молчание. Месяц висела ава, но триггерился на неё лишь один-единственный человек. Потом этот человек куда-то исчез, а затем, вернувшись, начинает каждое утро с понедельника этой недели лезть ко мне в профиль и упорно тыкать на "удалить".
- Прошу показать скриншотик, где на видном месте будет видна ссылочка на правила. Чтобы даже я мог туда в теории зайти в понедельник и прочесть, чтобы подумать.
- Пункта правил такого также никогда не было. В том числе и сейчас (я проверил, перейдя вручную на страницу, где раньше правила).
- Обвинения в "особенности", "революционерстве" не принимаю по причине того, что таких намерений при установке авы не имелось.
- Просьбу "выражать словами" я дублирую.
В общем, меня эта ситуация сильно смущает. Я воздержусь от крепких высказываний из-за угрозы потерять не только аву, но и доступ к сайту. У меня вопрос остаётся один лишь: с какой степени белоты с авой начинают бороться (с доселе не виданной кому-либо яростью)? Интересуюсь с целью прояснить проблему и формализовать новорожденное правило.
P. S. Согласно прошению, поставил на аву розовый квадратик со стороною в один пиксель.
- Показать следующий комментарий 18 больше
-
-
Можно наныть прав блоговодам? Я захожу в блог с целью навести там порядок и ещё что-то написать, а там такую печальку застал, что теперь даже скрыть запись нельзя (спасибо, что хоть кнопку добавления записи оставили). И, соответственно, всё уже скрытое мне тоже не видно. А здесь вообще в меню 4 пункта всего осталось. К слову, весь код, который я в блогпосты свои пихал, съехал в одну строку.
