Totoro
Гуру-
Публикации
1 950 -
Зарегистрирован
-
Посещение
-
Победитель дней
289
Тип публикации
Блоги
Профили
Форум
Багтрекер
Магазин
Все публикации пользователя Totoro
-
Это заглушка. На странице будет Semantic UI. Ну и да, Леха уже высказался на эту тему =) Но поскольку сам Леха занят всякой ерундой и участия в судьбе проекта не принимает, то его мнение особого веса не имеет. Ибо сам я так себе веб-дизайнер. UPD спустя пол года: Репозиторий из этой темы обрёл духовного продолжателя в виде Hel Repository. Там мы постарались гармонично реализовать все крутые идеи высказанные здесь, в других темах а также в чате.
-
Потому что это не форк. Это самостоятельный проект. Я где-то в этой теме излагал свое виденье идеального репозитория. И собственно это он и будет. Интеграция это хорошо. Но я не хочу привязывать аккаунты к серверным (да и невозможно это сейчас, во время разработки). Чтобы репозиторием могли пользоваться другие люди с интернета. Или, чем черт не шутит, наши зарубежные коллеги. Из этих соображений, лучше всего сделать самостоятельную авторизацию.
-
А вот забегал бы ты в IRC, и не было бы таких мыслей. https://github.com/MoonlightOwl/hel
-
Не надо нам такого, ИМХО. Если система делает что-то без ведома пользователя, это плохо.
-
Нет, ты посылаешь сообщения в неизвестность. Ты не можешь узнать, слушает ли кто-то. Функция send или broadcast вернет true если сообщение было удачно послано. Но о приеме оно ничего не может сказать. Если нужно удостовериться, что прием произошел, нужно посылать ответную мессагу. Типа "хандшейк".
-
Поговорим о Луне! #0. Угадываем числа.
Totoro прокомментировал Totoro запись в блоге в Totoro Cookies
Рад, что получилось понятно. Как всегда пишу по ночам, в состоянии легкого красноглазия, поэтому сам оценить не могу. P.S. За тапок спасибо, долетел, если подгоните второй - будет здорово. =)- 6 комментариев
-
- программирование
- lua
-
(и ещё 1 )
Теги:
-
На днях я рассказывал об интересном языке для OpenComputers (и не только). MoonScript Но одно дело - прочитать об языке где-то. А совсем другое - попробовать язык самому. Именно этим я и предлагаю заняться. Для разогрева, начнем с чего-нибудь несложного. Например "Угадай число". Думаю все знают эту игру. Компьютер загадывает число, мы пытаемся угадать. На каждую нашу попытку, компьютер злорадно сообщает - "больше!", "меньше!" или "у вас закончились попытки!" и "вы проиграли!". Немного модифицируем исходную идею, и перенесем ее на 2d поле. Просто, чтобы не было скучно. ТЗ Что нам потребуется? 1) Отрисовать сетку Тут мы просто возьмем текущий размер дисплея, и разметим его на клеточки. 2) Загадать число 3) Слушать команды пользователя Юзер будет тыкать на клеточки. Нам надо будет слушать эвент touch. 4) Обновлять игровое поле в ответ Собственно после тыка, будем открывать клетку. Если это не та клетка - рисовать на ней стрелочку. Если та - рисовать победный баннер. Если закончились ходы - рисовать что-нибудь обидное. За дело Первым делом надо подключить все, что мы будем использовать. В Lua обычно мы при помощи команды require пишем все в локальные переменные. В MoonScript все переменные по дефолту локальны. Поэтому использовать ключевое слово local нет необходимости. Для подключения же, используется ключевое слово import: import getResolution setForeground setBackground set fill from require('component').gpuimport pull from require 'event'import ceil, random from mathimport rep from string Мы вытащили из нужных библиотек нужные функции. Ничего лишнего. Теперь объявим переменные, которые будут использоваться в коде. - Размеры экранаwidth, height = getResolution()width /= 2 -- потому что по горизонтали наши клетки займут 2 символаheight -= 1 -- потому что внизу будет статус-- Цветаwhite = 0xFFFFFFblack = 0x000000gray = 0x222222green = 0x00BB33yellow = 0xFFC04Cred = 0xFF0000pink = 0xFF0074violet = 0xD600FFblue = 0x4E5AFFcyan = 0x4ED7FFteal = 0x00CC99-- Заготовка для сетки - один ряд клетокgrid_line = rep("▒▒ ", ceil(width / 2))-- Наша цельtarget = { x: 0, y: 0 }-- Количество попытокmaxAttemts = ceil(width * height / 150) -- 150 - магический коэффициент сложности, больше - сложнее, меньше - легчеattempts = maxAttemts Тут тоже присутствует несколько новых фич MoonScript. Во-первых - это сдвоенные операции. Конструкции a /= b или a -= b означают тоже самое, что a = a / b и a = a - b. Во-вторых это новый синтаксис создания таблиц. Названия полей и их значения отделены двоеточиями. (Такое обозначение будет знакомо тем, кто владеет JavaScript). Для реализации геймплея и отрисовки всякой всячины, потребуется определить несколько функций. Тут мы столкнемся еще с несколькими новшествами, по сравнению с Луа. Первое, в MoonScript нету ключевого слова end. Блоки кода обозначаются отступом разной величины. Так что вам придется тщательно следить за тем, на каком уровне вы пишете команды. (Это чертовски полезно, и вырабатывает красивый стиль написания кода =), а не эти кошмарные простыни, где нельзя разобрать начал и хвостов.) Второе, функции объявляются конструкцией вида (a, b, c) -> .... Тут слева - набор аргументов, потом стрелочка - разделитель и блок кода, который собственно является телом функции. -- Очищаем экранclear = () -> setForeground white setBackground black fill 1, 1, width * 2, height + 1, ' '-- Рисуем сеткуgrid = -> setForeground gray setBackground black for y = 1, height set (if y % 2 == 0 then 1 else 3), y, grid_line Пустой набор аргументов можно опустить, как в функции grid. Кроме того, как несложно заметить, MoonScript позволяет вызывать функции, не используя скобочки. Продолжим. -- Открываем одну клеткуsign = (x, y) -> if x == target.x and y == target.y then black, white, "[]" elseif x == target.x and y < target.y then white, green, "▼▼" -- по неведомой мне причине, стрелки вниз в новом шрифте ОС 1.6 нету =) elseif x == target.x and y > target.y then white, violet, "↑↑" elseif x < target.x and y < target.y then white, teal, "↘↘" elseif x < target.x and y == target.y then white, cyan, "→→" elseif x < target.x and y > target.y then white, blue, "↗↗" elseif x > target.x and y < target.y then white, yellow, "↙↙" elseif x > target.x and y == target.y then white, red, "←←" elseif x > target.x and y > target.y then white, pink, "↖↖"cell = (x, y) -> fore, back, text = sign x, y setForeground fore setBackground back set x * 2 - 1, y, text Здесь функция sign сконструирована так, чтобы отдавать три переменных разом. Следует заметить, что в MoonScript можно не пользоваться оператором return. Функция автоматически вернет значение последнего оператора в теле. Кроме функций, значения умеют возвращать и условия. Поэтому в данном случае, функция возвращает значение условия, а условие возвращает три значения из той ветки, которая выполнится. Функция cell просто берет эти значения и отрисовывает в нужном месте клетку. Далее. -- Рисуем статусstatus = (state) -> setForeground white setBackground black fill 1, height + 1, width * 2, height + 1, ' ' set 2, height + 1, "[Угадай, где клад!]" switch state when 'win' setForeground green set 24, height + 1, "Вы победили!" when 'lose' setForeground red set 24, height + 1, "Вы проиграли!" else set 24, height + 1, "Попыток осталось: #{attempts}" set width * 2 - 10, height + 1, "[R] [Q]" Здесь тоже используются две новые конструкции. Первая - это switch. Наверняка многие уже знакомы с ним. По сути, это просто удобный вариант длинных условий, со множеством elseif. Свитч получает значение, а потом сравнивает с ним все ветки when. Какая совпадет - та и выполнится. Вторая - это интерполяция строк. В строку в двойных кавычках можно встраивать значения перменных (или даже кусочки кода), используя диез и фигурные скобки, как в функции выше. Последние приготовления: -- Генерируем цельsetTarget = -> target = { x: random(1, width), y: random(1, height) }-- Инициализируем игруnewGame = -> attempts = maxAttemts setTarget! clear! grid! status! Функция newGame использует специальный синтаксис для вызова функции, которой не нужны аргументы. Вместо того, чтобы писать setTarget(), MoonScript советует использовать восклицательный знак. setTarget!. Это довольно весело смотрится в коде. =) Ну чтож, все готово. Давайте соберем все написанное, и запилим немного игровой логики! -- Поехали!newGame!while true -- Ждем события event, _, x, y = pull! -- Обрабатываем его switch event when 'touch' -- Если был клик -- Открываем клетку, если остались попытки if attempts > 0 x = ceil(x / 2) cell x, y attempts -= 1 -- Обновляем инфу if x == target.x and y == target.y attempts = 0 status('win') elseif attempts == 0 status('lose') else status! when 'key_down' switch x when 113 -- Q: выход из игры break when 114 -- R: перезапуск newGame!clear! Вуаля! Оно работает. И даже можно поиграть. И даже победить =) Круто, правда? Не надо делать такое выражение лица, я знаю что на самом деле, вы со мной согласны. =) А вы, да-да, вы! - на задних рядах, хватит кидаться тапками! Полный код игрушки доступен тут: http://pastebin.com/M0sxk1QH Enjoy!
- 6 комментариев
-
- 12
-
-
- программирование
- lua
-
(и ещё 1 )
Теги:
-
Рад что он все еще актуален )
- 21 комментарий
-
- 1
-
-
- eeprom
- контроллер
-
(и ещё 1 )
Теги:
-
Мне прямо что-то Светлячок вспомнился. Серия 12 "Мусор", где они на лету взламывали прошивку транспортного корабля.
-
Ну ты как-то черезчур пессимистично на это смотришь. Буквально пять минут назад вышеупомянутый Крутой (и evgkul) зарелизил транслятор MoonScript для OpenComputers У меня лично становится меньше времени, и в свободные часы я занят репозиторием (работаем вместе с Фингером). Ты прямо ждешь какого-то конвеера. Программирование - это искусство )
-
Если честно, я в этом вопросе солидарен с Алексом. Кодить надо в сингле. А сервак - полигон. Ну и завлекалочка для новичков. Ну и что-то типа коллективного места для дружеского AFK. P.S. Поскольку я не играю на проекте, и сижу исключительно на форуме, вы можете с чистой совестью объявить мое мнение "пристрастным" и "субъективным".
-
Ну, вот эта хрень же работает: http://moonscript.org/compiler/ Можно попробовать на серверную часть то же самое свалить. UPD. Хотя да, ты прав. Будет лагуче.
- 28 ответов
-
- moonscript
- power
- (и ещё 4 )
-
Я имею ввиду, что один из вариантов - поднять на стороннем серваке "компилятор" MoonScript. По ссылке что я кидал как раз его реализация на JS. То есть поднять вообще ноль проблем. А на компе OC написать несложный клиент, который будет стучаться на сервак и получать транслированный код.
- 28 ответов
-
- moonscript
- power
- (и ещё 4 )
-
Если выносить на сторонний сервак, то можно тогда вообще заюзать https://github.com/leafo/moonscript-javascript
- 28 ответов
-
- moonscript
- power
- (и ещё 4 )
-
Вот я в ту же тему думаю сейчас. Хочу почитать исходники и подумать, как этом можно сделать. В идеале надо будет собрать в виде пакета для OPPM или нашей новой репы. В общем, будет желание - подрубайся к IRC (http://webchat.esper.net/?channels=cc.ru ), я там почти каждый день. Ну, это просто частный случай же. Я показал, какие действия нужны для того чтобы это поднять на локальной машине, и какие потенциальные грабли могут встретиться. Если ставить это все под Lua 5.1, то ошибок вообще не должно быть. А вообще можно и скрипт соорудить. Если сделаешь что-нибудь такое, кидай ссылку, я прикнопаю к первому посту. =)
- 28 ответов
-
- moonscript
- power
- (и ещё 4 )
-
Итак, устройтесь поудобнее у ваших голубых экранов. Сегодня я научу вас програмировать во Имя Луны! Мы привыкли писать программы для OpenComputers на Луа. И при этом не задумываемся о том, что язык Луа в OpenComputers - это по сути "язык низкого уровня". На нем мы пишем все - начиная от прошивок BIOS и операционных систем, и заканчивая чатиками для OpenGlasses. Однако, когда объем кода не имеет решающей роли, и есть время для медитации, программист может дать душе отдохнуть, используя красивые конструкции высокоуровневых языков. И таким языком сегодня станет MoonScript. # Что это такое? MoonScript - это язык с интересным и лаконичным синтаксисом. Он позволяет использовать привычные конструкции ООП (объектно-ориентированное программирование) и ФП (функциональное программирование) в сеттинге Луа. Сам автор называет его "CoffeeScript for Lua". Код на MoonScript хранится в файликах с расширением *.moon и транслируется в обычный код Lua. Который может затем быть выполнен на компьютерах или роботах OpenComputers. Плюсы: * краткий и красивый код (субъективно) * изучение нового, интересного (объективно) Минусы: * Транслированный код хуже читаем, и немного объемнее, чем аналогичный код, написанный изначально на Луа # Установка Приведу пример установки для Debian + Lua5.3. Если у вас другая OS - смотрите соответствующие инструкции по ссылкам. 1) Lua (https://www.lua.org/start.html) $ sudo apt-get install lua5.3 2) Пакетный менеджер LuaRocks (https://luarocks.org/#quick-start) Для его установки возможно потребуется пакет liblua5.3-dev. Установим его командой: $ sudo apt-get install liblua5.3-dev Далее следуем инструкциям с официального сайта: $ wget http://luarocks.org/releases/luarocks-2.3.0.tar.gz $ tar zxpf luarocks-2.3.0.tar.gz $ cd luarocks-2.3.0 $ ./configure; sudo make bootstrap 3) Ставим пакеты MoonScript (http://moonscript.org/#installation) $ sudo luarocks install moonscript Теперь в системе появятся программы moon и moonc. Ура! К слову, при их запуске может вылетать ошибка типа /usr/local/share/lua/5.3/alt_getopt.lua:24: attempt to call a nil value (global 'module') Это происходит потому, что moonscript давненько уже не обновлялся, и использует устаревшее ключевое слово module. Фиксится при помощи правки файликов alt_getopt.lua и moon. В файле alt_getopt.lua необходимо закомментировать 24 строку (module ("alt_getopt")) и дописать в самый конец строку return {get_opts = get_opts, get_ordered_opts = get_ordered_opts} В файле moon исправляем вторую строку на local alt_getopt = require("alt_getopt") Все это в нашем случае можно сделать командами: $ sudo gedit /usr/local/share/lua/5.3/alt_getopt.lua $ sudo gedit /usr/local/lib/luarocks/rocks/moonscript/0.4.0-1/bin/moon Все! MoonScript установлен, пропатчен и готов к работе. # Подсветка синтаксиса Очень рекомендую писать код в редакторе заточенном под код. Чертовски удобно, поверьте. Для MoonScript существуют пакеты подсветки синтаксиса для разных редакторов. 1) Sublime Text / Text Mate - https://github.com/leafo/moonscript-tmbundle 2) vim - https://github.com/leafo/moonscript-vim 3) Atom - https://atom.io/packages/language-moonscript 4) Textadept - https://github.com/leafo/moonscript-textadept # А теперь - магия! Для примера, я переписал код библиотечки Braille Bicycle с использованием MoonScript. Теперь она использует ООП подход (привет, @Krutoy ). http://pastebin.com/NQc7JCH3 Этот файлик я потом "откомпилировал" в Lua простой командой: $ moonc braille.moon И получил на выходе рабочую библиотеку braille.lua. Далее, заливаем ее в OC и пишем простой тестовый код: local gpu = require('component').gpu local braille = require('braille') local matrix = braille.Matrix(8, 8) matrix:line(1, 1, 8, 1) matrix:set(1, 2); matrix:line(4, 2, 5, 2); matrix:set(8, 2) matrix:set(1, 3); matrix:line(4, 3, 5, 3); matrix:set(8, 3) matrix:line(1, 4, 3, 4); matrix:line(6, 4, 8, 4) matrix:line(1, 5, 2, 5); matrix:line(7, 5, 8, 5) matrix:line(1, 6, 2, 6); matrix:line(7, 6, 8, 6) matrix:line(1, 7, 2, 7); matrix:line(4, 7, 5, 7); matrix:line(7, 7, 8, 7) matrix:line(1, 8, 8, 8) gpu.setForeground(0xC61331) matrix:render(gpu, 14, 12) matrix:render(gpu, 46, 12) gpu.setForeground(0xFFFFFF) matrix:render(gpu, 30, 12) matrix:render(gpu, 62, 12) И вуаля! Работает. # Игровая трансляция Все это хорошо, но иногда может быть полезна возможность использовать *.moon исходники прямо из OC, без предварительной компиляции. Уже поздно, поэтому расскажу об этом как-нибудь в другой раз. Скажу лишь, что помимо всего прочего, у MoonScript есть такая любопытная тулза, как онлайн "компилятор". Его можно найти вот здесь: http://moonscript.org/compiler/ # UPD Товарищи @Krutoy и @evgkul выпустили транслятор MoonScript на чистом Луа, что позволяет запускать и "компилировать" программы MoonScript прямо из OpenOS. Заценить и потестить можно по этой ссылке: https://github.com/evgkul/moonscript-opencomputers Пишите багрепорты (сюда или на GitHub), и отправляйте свои пуллреквесты, чтобы улучшить программу. # UPD 3 Добавил MoonScript в репозиторий. Теперь можно установить его и потестить всего одной командой: hpm install moon
- 28 ответов
-
- 12
-
-
- moonscript
- power
- (и ещё 4 )
-
Братья монополисты! Нашу свободу душат! Восстанем против произвола и за свободу монополизма!
-
Свободная торговля - это красная тряпка для монополиста ) В ком-нибудь спит монополист-энтузиаст? Предлагаю идею: создать бренд, монополизировать торговлю на серве, задушить конкурентов и завладеть экономикой.
-
Долой ванильно-няшный майн! Даешь темное фентези!
-
Тут надо хорошенько подумать. Можно сделать так: при оцифровке предмета пакет подписывается уникальным ключом. Этот ключ запоминает мод. Далее пакет с таким ключом может быть один раз материализован, после чего мод удаляет / деактивирует этот ключ. Это позволит избежать дюпов. А вот чтобы твои кровные алмазики не увели злобные хакеры - уже надо будет беспокоиться игроку. Делать шифрование, защищенные сети, передавать на дискетах и т.п.
-
Это было бы интереснее в виде мода на оцифровку предметов. Кладешь в "оцифрователь" стак железа, тратишь N гигаватт энергии и шлешь пакетом по сети. А с другой стороны Вася подрубает "молекулярный принтер", тратит еще N гигаватт и "материализует" себе стак обратно. Апишку к этим блоками написать. Под такое дело и сети бы пробрасывались активнее. ) Идет такой Петя по дороге от спавна, а над ним - по WiFi летают гигабайты урановой руды.
