LeshaInc
Пользователи-
Публикации
777 -
Зарегистрирован
-
Посещение
-
Победитель дней
68
Тип публикации
Блоги
Профили
Форум
Багтрекер
Магазин
Все публикации пользователя LeshaInc
-
Да в общем то нельзя запустить сервер SSH на любой системе под OpenComputers, как минимум потому что открытие TCP-слушателя невозможно. Да, можно мост, но это уже совсем другая история.
- 64 ответа
-
- Многопоточность
- LunaOS
- (и ещё 3 )
-
Теме сто лет. А за некропост ругать. А еще руки оторвать. За глобальную переменную, os.sleep(0) который нужно было заменить на event.pull(), за использование цикла где можно было сделать простой print(...), за отсутствие пробела после запятой, за незначимые имена функций и переменных и за пренебрежение пагаграфированием кода. На этот раз без штрафа, впредь будьте бдительны.
-
(?
?:\r\n)?[ \t])*(?
?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?
?:(?:\r\n)?[ \t] )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?
?:\r\n)?[ \t]))*"(?
?: \r\n)?[ \t])*)(?:\.(?
?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?
?:( ?:... -
руки оторвать за такой стиль, надо так: local function onKeyDown() -- ... end event.lister("key_down", onKeyDown) -- устанавливаем обработчик while true do -- ... os.sleep(0.25) -- 1 секунда слишком долго end event.ignore("key_down", onKeyDown) -- убираем обработчик я лично оторву
-
А как же тотора?
-
глаза болят
-
да
-
реклама на скрине
-
не нужно.
-
Прошло уже достаточно времени, так что пора подводить итоги. Правильный ответ - 125. А теперь объяснение. СИ определяет десятичные приставки кило, мега, гига, тера... соответственно 10^3, 10^6, 10^9, 10^12... Выходит по СИ: +----------+----------------+-------------+ | Название | Размер (байты) | Обозначение | +----------+----------------+-------------+ | килобайт | 10^3 | КБайт (KB) | +----------+----------------+-------------+ | мегабайт | 10^6 | МБайт (MB) | +----------+----------------+-------------+ | гигабайт | 10^9 | ГБайт (GB) | +----------+----------------+-------------+ | терабайт | 10^12 | ТБайт (TB) | +----------+----------------+-------------+ Точно так же в километре 1000 метров, а в киловатте 1000 ватт (как сказал @NEO). Неверно считать что в килобайте 1024 байт, потому как это противоречит СИ. Если мы хотим считать по 1024 байта нам помогут двоичные приставки. Придумали их 17 лет назад в МЭК (IEC). Пруфлинкen +----------+----------------+-------------+ | Название | Размер (байты) | Обозначение | +----------+----------------+-------------+ | кибибайт | 2^10 | КиБ (KiB) | +----------+----------------+-------------+ | мебибайт | 2^20 | МиБ (MiB) | +----------+----------------+-------------+ | гибибайт | 2^30 | ГиБ (GiB) | +----------+----------------+-------------+ | тибибайт | 2^40 | ТиБ (TiB) | +----------+----------------+-------------+ Точно так же считает IEEE. Пруфлинк Пока к сожалению далеко не все перешли на такой формат. По ГОСТу к примеру в килобайте 1024 байта, когда должно быть 1000. Мы считаем себя сообществом о программировании, АйТи. Так что давайте придерживаться стандартов, придуманных нашими соратниками. Не попрем же против IEEE и IEC. 1 мегабит = 1 000 килобит 1 000 000 / 1 000 = 1 000 1 000 килобит = 125 килобайт 1 000 / 8 = 125 Результат: 125 Или как сделал @NEO: 1 мегабит = 125 000 мегабайт 1 000 000 / 8 = 125 000 125 000 мегабайт = 125 килобайт 125 000 / 1000 = 125 Результат: 125
-
Задаю вопрос, не потому что я не знаю ответа, а потому что мне интересны результаты и реакция сообщества. Сколько килобайт в одном мегабите?
-
Зачем оно нужно рядовому Васе Пупкину который вчера изучил луа и хочет программулек понаписывать? Объясните.
-
Насколько я знаю финнгер перешел на другую библиотеку. Хранить числа в виде строки — неэффективно. Куда лучше держать число в массиве чисел. Скорость критична. Быстрая реализация тут. В ней нет реализации битовых операций, но даже эмулируя их умножением все работает куда быстрее чем с метачислами. PS: Да, она только для целыз чисел PPS: Нет, я не мультиакк фингера
-
Раз пошла такая пьянка, напишу и я свою идейку по этому поводу. В общем всем надоел привычный ик, таум и прочая фигня банальная. Так что я подумал (нет) и придумал такую лепешку: Ну всякая мелочь, опенкомпы, компутероникс и прочая дребедень естественно. Чизель, куда же без него. Immersing Engineering (тот самый который добавляет лагопечки крутые ветряные мельницы и куча механизмов которые можно интегрировать с опенкомпами. Термалочка, как жи так. ЕндерЙошка. RFTools, RFDrills, надо же куда то все девать. ЕхНихило, раз летать на островах норкомагических захотели. BigReactors, строить лагореакторы которые само собой интегрировать с компами. Можно влепить MineFactoryReloaded, Forestry, Agricraft, опционально. Лепешка неплохая думаю получилась бы, главное назначить какого нибудь админа (мецопайку например) на проверку островов и регена лагулек.
-
Раз в чате скинули ссылку на эту тему, покажу как можно оптимизировать способ @Doob. code = code .. dataНу вобщем, тут каждый на каждый чанк вызывается конкатенацтя строк. Но в луа неэффективно много раз конкатенировать строки. Вместо этого лучше создать буффер-таблицу и вставлять в него чанки испоьзуя table.insert, и уже потом получить из таблицы строку через table.concat. Например так: local code = {} ... table.insert(code, data) ... print(table.concat(code)) =)
-
OpenComputers умеет только открывать TCP сокеты, а вот создавать TCP слушателя он не может, к сожалению. Я думаю такое искусственное ограничение создано дабы облегчить нагрузку на сервер. Он и так держит соеденение с кучей клиентов, если к этому добавить OpenComputers он вообще грохнется. =) Как то не подумал об этом >_<. Ну вобщем будет что то вроде такого когда я буду налаживать кроссплатформеность OpenFTP. А имено: plan9k. На этой операционке клиент запускается, но багает прогрессбар и цветной-убер вывод. Пока правда, к сожалению прогрессбар не получаается починить, тут уж проблема в самой plan9k - не может он выводить юникод из за бага. (Говорил об этом с создателем plan9k). telnet реализовать будет не так уж и сложно, а вот с ssh проблемы обеспечены. ssh работае поверх tls сокетов, кои OpenComputers не поддерживает. Потому нужно с ними разбираться, курить тонны rfc-шек и просить помощи у "больших дяденек". =) Да и скорее всего ssh такой будет требовать дата-карту, ибо tls использует aes шифрование.
-
OpenFTP Иногда нужно скачать большое количество файлов с FTP сервера. Это затруднительно, когда дело доходит до OpenComputers, потому что FTP клиента попросту нет. Приходится изощряться, заливать файлы на HTTP сервер, pastebin или вовсе вставлять их из буфера обмена. И все было бы хорошо, если бы были эти способы удобными. Потому написал я FTP клиент для OpenComputers. Название ему — OpenFTP. Он поддерживает большинство функций, как и старшие братья OpenFTP, такие как FileZilla и bsd FTP. Интерфейс схож с таковым из bsd FTP. Приятная командная строка, команды похожи на *NIX команды, например rm, ls, rename, mkdir. Скорость для OpenComputers бомбезная. Почти 50 кб в секунду на чтение, и в 10 раз больше на запись. Учитывая вместимость дисков, это очень хорошие показатели. Скачать: pastebin get UPcwLA9ep /bin/ftp.lua Для подключения к серверу набираем ftp <хост сервера> [порт сервера (по умолчанию 21)]. После этого OpenFTP попросит имя пользователя и пароль. Увидели ftp> — соединение успешно налажено. Теперь мы можем писать команды для общения с сервером. Команды cd <путь> — перейти в директорию по указанному пути. Работает аналогично таковой в OpenOS оболочке. .. — перейти в директорию-родитель. Результат будет таким же, как в cd ... Например, если мы были в директории /home/peter/programs, после применения команды мы окажемся в директории /home/peter. pwd — указывает директорию в которой мы находимся. ls [-s] [путь] — указывает список файлов в указанной директории (по умолчанию — текущая директория). Флаг -s применяется в том случае, если мы хотим неполный вывод, без полезной информации вроде даты изменения и автора. rm [-d] <путь> — удаляет файл или папку. Если мы хотим удалить папку, добавляем ключик -d. mkdir <путь> — создать новую директорию по указанному пути. rename <было> <стало> — переименовать файл или директорию. После выполнения команды, если все пройдет успешно, было сменится на стало. Алиас: rn. ascii — переходит в ASCII режим передачи файлов. Использовать не рекомендуется, т.к. возможны последующие искажения файлов. binary — переходит в бинарный режим передачи файлов. Рекомендуется использовать именно его, таким образом абсолютно все символы передадутся без потерь. По умолчанию, к слову, используется именно он. Ох, и самое главное: get <путь до файла на сервере> [путь до файла на клиенте] — скачивает указанный файл с сервера. put <путь до файла на клиенте> [путь до файла на сервере] — загружает указанный файл на сервер. nop — команда которая ничего не сделает. (не шучу, в FTP протоколе правда есть команда такая, правда называется она NOOP = No Operation) У каждой команды есть также флаг --help, который показывает помощь (на английском) Хочу также сказать спасибо @Fingercomp за предоставленный прогресс-бар. Без него жизнь малиной не казалась бы =). Также спасибо ему за доступ на свой FTP сервер, где я мог спокойно тестировать программу. Enjoy! PS:
-
MoonJam — джем с привкусом луны // завершён
LeshaInc прокомментировал Fingercomp запись в блоге в Fingercomp's Playground
стив победит -
Поддерживаю мнение @@Fingercomp. Игра офигеннейшая. P.S: Должна победить в конкурсе. P.P.S: Да я на стива поставил 2 тортика! 100% победит!
-
MoonyLambda Вы наверное знаете что сейчас проходит конкурс MoonJam. В общем суть в том что бы написать что-нибудь на MoonScript за неделю. Как говорил уже тотора, что-то серьезное за неделю не написать, но попробовать, поразвлечься, и написать что-нибудь интересное можно. В общем в этой теме буду показывать мой проект. И это... Библиотека для функционального программирования (далее просто - ФП)! Луа не предоставляет стандартных средств для ФП, потому я написал свою библиотеку. Чем то она похожа на реализацию такового функционала в языке Python, а чем то нет. Суть в том что функциональное программирование очень сильно упрощает работу с данными, например вместо пяти строк мы напишем одну строку. Все примеры в MoonScript, но в спойлерах будет эквивалент на луа. f - библиотека подключенная через require Начнем с самого простого, сложить массив чисел. f.reduce f.add, {1, 2, 3} --> 6 Точно таким же образом, мы можем перемножить все числа f.mul вместо f.add, или соответственно разделить, вычесть или возвести в степень - f.div, f.sub и f.pow А если, к примеру, нам нужно взять массив и выкинуть из него все нечетные числа. Это тоже возможно. f.filter f.even, {1, 2, 3, 4} --> {2, 4} А теперь, достанем все числа которые одновременно и меньше пяти, и четные. Это не составит труда f.filter f.even, f.filter ((a) -> a < 5), {1, 2, 4, 5, 6, 7} --> {2, 4} Хочу отметить, что нам не обязательно постоянно писать огромные цепочки из вызовов. Все функции в библиотеке каррированы. selectEven = f.filter f.even selectEven {1, 2, 3, 4, 5} --> {2, 4} ...Но мы можем каррировать свою функцию! pow = f.curry (a, b) -> a ^ b pow2 = pow 2 pow 3, 3 --> 27 pow2 3 --> 8 К слову, именно так определена в библиотеке функция f.pow. Каррированная функция сама определяет, что ей вернуть, функцию которая примет недостающие аргументы, или результат. Мы можем каррировать функцию с любым количеством аргументов, так просто! Реверс таблицы - легко, расплющить таблицу - легко, изменить таблицу - легко. Но самое главное... Все функции чистые. Ни одна функция этой библиотеки не изменяет данные, и не зависит от внешних данных. Вполне продакшен-ready пример: first_letter = (a) -> a\sub 1, 1 f.group first_letter, {"Miku Chan", "Mayonnaise", "LeshaInc", "Loli", "Totoro"} --> {M: {"Miku Chan", "Mayonnaise"}, L: {"LeshaInc", "Loli"}, T: {"Totoro"}} И все это становится таким простым используя библиотеку MoonyLambda. Скачать Исходный код: pastebin.com/fFEFvX5D Скомпилированная и минифицированная версия: pastebin.com/K4b9sREs Документация ...будет постепенно писаться в этой теме. Ссылки будут тут. Функциональный стиль выглядит гораздо читаймей, чем императивней стиль. Когда в императивном стиле мы пишем непонятный цикл, который непонятно что делает, тут мы пишем несколько строк кода, который понятен с первого взгляда.
-
Я кажется понял почему ракеты так падают часто. 10^6 = 1 000 000 "спим миллион секунд" вместо "спим 10 микросекунд" Минус потерял ты, os.sleep(10^-6)
-
MoonJam — джем с привкусом луны // завершён
LeshaInc прокомментировал Fingercomp запись в блоге в Fingercomp's Playground
Кхм-кхм. Мой джем на подходе! В общем это будет крутая библиотека для ФП. К примеру, посмотрим на такой безобидный кусок кода: result = {} for v in *table table.insert result, v if v % 2 == 0 Можете сказать сразу что он делает? Нет. А я скажу, этот кусок кода выбирает все четные значения из таблицы. Код написан в императивном стиле. А теперь посмотрим на код используя мою библиотеку: even = (a) -> a % 2 == 0 result = f.select even, table Тут все сразу понятно, если вы знаете английский. Мы выбираем все четные значения. Проще некуда! Алсо, поддерживается каррирование. Все функции библиотеки каррированы. Например: odd = (a) -> a % 2 ~= 0 select_odd = f.select odd select_odd {1, 2, 3, 4} -- {1, 3} По сути каррированная функция в случае если функция не получит все нужные ей аргументы возвратит еще одну функцию которая будет принимать оставшиеся аргументы. Проще понять из примера: add = (a, b) -> if b a + b else (b) -> a + b add 1, 2 -- 3 addOne = add 1 -- function addOne 2 -- 3 Все очень просто. Каррировать свою функцию можно используя встроенную функцию curry: add = f.curry (a, b) -> a + b add 1, 2 -- 3 addOne = add 1 -- function addOne 2 -- 3 Все работает точно так же, как и должно. Удачи всем! :P -
local component = require("component") local os = require("os") local term = require("term") term.clear() os.execute("resolution 1 1") while true do print("█") term.clear() end посмотрел код танцпола (вот он ^)... кто мне объяснит зачем он, и зачем цикл тут. кто мешает взять серые блоки? или у нас нанотехнологии тут?
