Перейти к публикации
Форум - ComputerCraft

Поиск по сайту

Результаты поиска по тегам 'OC'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип публикаций


Блоги

Нет результатов для отображения.

Нет результатов для отображения.

Категории и разделы

  • Программирование
    • База знаний
    • Библиотеки
    • Робототехника
    • Сетевые технологии
    • Игры
    • Операционные системы
    • Графика
    • Инфраструктура
    • Программы новичков
    • За пределами Minecraft
    • Всякое-Разное
    • Чулан
    • Стол заказов
    • Конкурсы
  • Игровой раздел
    • Игровые сервера
    • Предложения игроков по улучшению игрового процесса
    • Моды и плагины
    • Гайды, обзоры по модам
    • Жалобы на игроков
    • Заявки на разбан
    • Ивенты
  • Общение
    • Ответы на частые вопросы
    • Вопрос-ответ
    • Вопросник по Lua и модам Opencomputers и ComputerCraft
    • Беседка для программистов
    • Беседка-флудилка
    • Шкатулка
  • Технический раздел
    • Новости проекта
    • Предложения по улучшению работы форума и игровых серверов
    • Проблемы в работе игрового сервера, клиента, форума и их решение
    • Дубль аккаунты
    • Обратная связь
    • Архив
  • Новости Независимое государство
  • Беседка Независимое государство

Категории

Нет результатов для отображения.

Нет результатов для отображения.


Искать результаты в...

Искать результаты, содержащие...


Дата создания

  • Начать

    Конец


Последнее обновление

  • Начать

    Конец


Фильтр по количеству...

Зарегистрирован

  • Начать

    Конец


Группа


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


Gtalk


Facebook


Twitter


Город


Интересы

Найдено 106 результатов

  1. Автокрафт на роботе. Программа не имет GUI. Всё управление осуществляется через командную строку. Для работы вам потребуется робот и сундук. Сундук должен стоять перед роботом. Робот должен иметь следующие улучшения: Улучшение «Контроллер инвентаря» Улучшение «Инвентарь» Улучшение «Создание» Улучшение «База данных (1-ый уровень)» Процессор уровня 2 и выше. Необходимый объём памяти и жёсткого диска зависит от количества предметов в сундуке и сложности рецепта. При тестировании использовался робот со следующими характеристиками: см. скриншот. Базу данных программа сохраняет в текущем каталоге. Поэтому для работы программы нужно создать отдельный каталог. Недостатки. Предварительный подсчёт достаточности ресурсов для выполнения сложного крафта не выполняется. Планируется исправить в будущих версиях. Инструкция с картинками. Man Скачать Версия 0.10.8 Старая версия
  2. Здрассьте, господа, у нас тут превесёлая вещь случилась: спустя полгода разработки (причём круглым числом; 28 мая стартанули) у нас отрелизился репозиторий! Обозвали мы его Hel. В репозитории мы собрали и воплотили в жизнь все хорошие идеи и концепции, которые обсуждались здесь, чтобы получился максимально кавайный способ дистрибуции пакетов. Пользоваться репозиторием не сложнее, чем ставить программы с Pastebin. Для этого нужно знать только название пакета. Одна команда: $ hpm install <нужный пакет> И вуаля! Он уже установлен в нужную папку, все нужные библиотеки загружены и распиханы по системе. Можно запускать и работать. Но по сравнению с OPPM или Pastebin, hel несравненно удобнее. Он легковесный. Простой. Не требует регистрации. И СМС. Чем мы гордимся, безусловно. Установка программ производится с помощью одного легкого клиента (как у Pastebin), но в то же самое время, вам не нужно волноваться о библиотеках или версиях программы. Вы всегда можете найти и установить самую свежую версию (и даже не самую свежую), зная только название пакета (как в OPPM). Кстати, раз уж мы заговорили про OPPM. У нас клиент получился настолько охренительным, что вы можете теперь выкинуть oppm в помойку, наконец-то! В стандартный комплект поставки включён oppm-модуль с кэшированием (иными словами, вам не нужно будет ждать пару минут, пока пробрутфорсятся репозитории, сразу всё качается). Всё быстро, чётко, ясно. Юзается оно так: $ hpm oppm:install <имя пакета> Об остальных фичах читайте уже в мануале hpm, там всё есть.
  3. Охайо! Полгода назад мы проводили второй этап Unreal Tournament (топик). Это был трейнврек, но весёлый, — этап звался Deathmatch, к слову. Роботы пытались друг друга перестрелять (могли ещё взорвать, но никто так и не заюзал бомбы). Но четверо участников пришло, был треш, угар и много стрельбы. :P Пришло время открывать обсуждение третьего этапа Unreal Tournament: Resurrection — и он будет последним в трилогии. Этап 3: Dominance Feat. drones! Проводить будем зимой (февраль?). На подготовку тогда имеем 5 месяцев. Участники третьего этапа: @Totoro, @FluttyProger. Зареквестить участие можно: в ЛС @Fingercomp или @Totoro; в этой теме; сообщением в IRC (#cc.ru или в ЛС fingercomp или Totoro). Команда UT#3: @Totoro — дизайнер, специалист по связям с правительством, пиарщик и просто очень хороший человек. @Fingercomp — кодер, горе-строитель, админ серва, прожект-менеджер. @Fiender — хостер, админ серва. @LeshaInc — кодер. Правила Правила третьего этапа нереально просты. В общих чертах TL;DR: Захват и удержание карты дронами. Арена для этого этапа представляет собой просторную закрытую карту. Карта поделена на условные секторы. В каждом секторе стоит контрольная точка, представляющая собою микроконтроллер, в котором установлена беспроводная сетевая карта с небольшой силой сигнала. В раунде участвуют четыре игрока. Каждый игрок управляет командой из четырёх дронов. За командой закреплен какой-то цвет. Дроны имеют возможность захватывать контроль над секторами карты. Для этого им необходимо завладеть контрольной точкой сектора. После захвата точки она окрашивается в цвет команды, также как и весь сектор. Победные места распределяются по количеству захваченных точек. То есть по проценту территории, которую команда удерживает за собой на карте. За порядком на арене и игровым процессом, как всегда, следит игровой Сервер. Координаты всех важных объектов на карте обозначаются вейпоинтами. Захват точки Для захвата точки дрон должен подлететь к ней на достаточно близкое расстояние и послать сообщение Серверу. Процесс захвата разбивается на несколько пакетов. На который сервер будет отвечать с некоторым делеем. Это даст шанс другим дронам помешать захвату. Например, если у точки висят два дрона и шлют пакеты с одинаковой скоростью, то захват замирает. Дроны взаимно уничтожают прогресс друг друга. Теперь дело можно сдвинуть с мёртвой точки только подогнав ещё одного дрона на помощь. Зарядка В качестве дополнительной геймплейной фишки, можно добавить станции зарядки — места, где дроны должны будут восполнить запас энергии. Иначе дроны сдохнут, и команда проиграет. Визуализация рейтинга Для того чтобы наблюдать за процессом было интереснее, можно повесить на видном месте динамическую карту локации. На ней отрисовать схему арены. Отобразить контрольные точки и сектора, окрашенные в цвета команд, которые их в данный момент удерживают. Точки, которые подвергаются захвату, отобразить мерцающими. Опционально добавить к этому топ команд по количеству секторов и проценты захвата. Условия конца игры Будет три раунда. Раунд завершается при любом из этих событий: Прошло 15 минут и командами захвачены все точки. Три из четырёх команд успешно сдохли. Прошло 30 минут с начала раунда (это на случай пьяных дронов). Технические детали На сервере ждите из модоверсий: Ядрёные моды MC 1.12.2 SpongeForge 7.what.ever Регулярные моды OpenComputers 1.7.0 OpenGlasses 3.3.3 Computronics 1.6.5 Chisel 0.0.13.23 Плагины Antimony LuckPerms Арена будет доступна заранее, контрольные точки будут находиться в фиксированных позициях. С поиском пути в этот раз париться не нужно: дроны двигаются по прямой. Дроны будут иметь одинаковую конфигурацию. Прошивка на дронах будет скачивать саму программу с сервера, куда, в свою очередь, код будет заливаться с компьютеров участников в их кабинках. To Do Как обычно, перед ивентом нужно основательно поработать над его подготовкой. Доработать правила. Помогайте, оставляя свои мысли в постах в этом топике. Собрать игровой сервер. Это означает договориться с хостом, закончить пляски со сборкой и выложить её. Построить арену. Написать софтверную часть. Набрать участников. Провести игру. Проблемные вопросы Остаются ещё несколько проблемных вопросов, которые нужно будет решить по мере разработки проекта. 1. Какая прошивка будет на дронах? Она не должна ограничиваться тупо скачкой проги с сервера. Нужно написать какие-нибудь дебаг-инструменты (например, рестарт). 2. Какая комплектация у дронов? Нужно основательно продумать её, потому что дроны довольно лимитированы по компонентам. 3. Какие настройки энергии установить? Дроны не должны мочь без подзарядки летать весь раунд, иначе не будет толка в зарядниках, но и вырубаться после минуты полёта — это крайность. Нужно отрегулировать скорость зарядки, чтобы не висеть там всю игру. Все программы должны в среднем есть схожее количество энергии. Q&A В топике задают очень важные вопросы, которые поясняют концепт, но ответ на них бывает трудно встроить в текст так, чтобы было заметно. Поэтому ниже будем писать их вместе с ответами. Могут ли участники самостоятельно контролировать дронов во время игры? Нет. После старта дроны становятся полностью автономными. Мы не собираемся менять это — автономность является ключевой фишкой UT:R. Не исключено, однако, что дронами можно будет управлять в других ивентах и сериях ивентов, которые мы, может быть, будем проводить. Будет ли возможен перезахват сектора? Да, конечно же. В этом и весь интерес и интрига. Команда может дружно спать, а за минуту до финала внезапно вылететь и перезахватить все контрольные точки на карте. Разные чудеса случаются, да. Можно ли захватывать одну точку всей командой? Да, можно. Так процесс пойдёт куда шустрее. Как определять цвет дронов и их наличие для статистики на главном мониторе? Цвет дронов определяем перекличкой в начале игры. Сервер запоминает соответствие цвета к модему, с которого прилетело сообщение. Наличие определяется периодическим пингом дронов. Как будут захватываться секторы арены, конкретно? Мы берём концепцию @eu_tomat. Каждая точка имеет уровень захвата. Если он равен нулю (а при старте игры именно так и будет), точка считается нейтральной. У точки небольшой радиус модема, поэтому дроны должны быть очень близко к ней. Для начала захвата дрон должен поймать сообщение от точки (оно регулярно броадкастится) с кодом и отправить его назад, указав свою команду. За каждое сообщение от команды-захватчика уровень захвата точки увеличивается на единицу, но если точка поймает сообщение от другой команды, то уровень захвата уменьшается на единицу до тех пор, пока она не станет снова нейтральной. Для каждого дрона есть кулдаун. Например, дрон отправил сообщение — новое точка примет только через несколько секунд. Однако дрон может вызвать подкрепление: если несколько дронов одной команды будут отсылать коды, то точка может быть захвачена быстрее. После достижения некоторого уровня захвата точка становится собственностью команды. Дрон может продолжить отправлять коды, чтобы увеличивать уровни сопротивления — прежде чем другая команда сможет разблокировать уровни захвата и перезахватить точку, она должна сначала довести уровни сопротивления до нуля. Как дроны узнают, что другая команда начала захват их точки? Если какой-то дрон разблокирует уровни захвата, сообщение об этом отправится всем дронам команды, у которой точка была в собственности. Однако до того сообщения не посылаются. Чтобы заранее узнать, что вражеский дрон начинает разрушать уровни сопротивления, нужно патрулировать территорию. Как будет защищаться территория арены от вмешательства игроков и дронов? Используем мод Conventional: оборачиваем арену в область, где нельзя кликать, и радуемся. Арену сделаем из дрононепробиваемых блоков — тех, что рукой разбить нельзя. Откуда дронам узнавать информацию о состоянии точки? Сообщение о характеристиках будет периодически (раз в 5 секунд, например) броадкаститься точкой на небольшой радиус. Таким образом, поймать его смогут только те дроны, что будут поблизости. Оно будет содержать: текущую принадлежность точки; код захвата уровни захвата и сопротивления. Обновления Так как бампать один и тот же пост на данном форуме — очень невесёлое занятие (да и никто толком не заметит изменение), в топике мы будем писать дополнения. Ниже нарисован список ссылок на обновления. Если вы собираетесь участвовать, обязательно прочитайте их в хронологическом порядке. 2017-10-23: Финализация правил. 2017-11-21: У нас всё медленно и печально. 2017-12-02: Движение началось. Посражаемся?
  4. За основу был взят код : "Miner 3x3" http://pastebin.com/hzJZtAWA (Спасибо Programist135 за любезно предоставленную программу). При "ковырянии" были замечены закономерности, которые превратились в функцию Dig(). (Позже увидел, что не один я использую такой приём). Далее ... ну не устроило меня, движение робота со многими разворотами - решил выбрать движение "змейкой" или "зигзагом". И понял ... что интуиция меня - не подвела. Количество ходов уменьшилось на 2 (а с учётом выбрасывания комманды Around, можно сказать, что почти на 3) за каждые вскопанные 9 блоков. Код : Версия 2-я :http://pastebin.com/M9zBTNyy (сырая старая версия.) Версия 5-я : https://pastebin.com/L8kKTPzp (доработанная с учётом сыпучих блоков, мобов и лагов сервера) Скрины : https://yadi.sk/d/XwlHrvnchMXpS Программа писалась, конкретно - под работу с алмазным буром(или иным "универсальным инструментом, копающим всё.) Минимальная комплектация робота : P.S. Данный "продукт", выложен с целью ознакомления, с вариантом решения конкретной проблемы. Автор кода(т.е. ваш покорный слуга) - не несёт ответственности, за любой ущерб в игре, от использования данного кода в работе ваших роботов , а также негативно относится : к создания фанклубов или религиозных течений "моего имени".
  5. Часто необходимо писать программы для серверов. Это могут быть сервера для чатов, или файловые облака или что то еще, но всегда приходится писать велосипеды. Подумав об этом я решил написать программу для сервера. Программа работает просто. Подгружает модули из папки проекта, а потом начинает слушать все event'ы и обрабатывать. Представляю вам саму программу: Servercore v0.2.1 Исходный код: http://pastebin.com/NASX9sX0 Использование: Создаем папку проекта Создаем в этой папке файл .servercore Запускаем servercore указывая первым аргументом папку которую мы создали. Если не указывать аргумент то servercore запустится в рабочей директории. Наслаждаемся рабочим сервером, который пока ничего не делает. Любые файлы (кроме .servercore) которые находятся в папке проекта будут загружены как модули. Если модуль содержит ошибку наш сервер не полетит, а просто выведет тест ошибки на экран. При создании модулей можно использовать специальные функции, которые находятся в _G.sc. Описание этих функций: sc.info(info_type:string, message:string) - выводит информацию со временем и раскрашивает как на скринах. Принимает тип информации и само сообщение. Типов информации всего 4: ok,err,warn и info. sc.getTime() - возвращает время в формате unix timestamp. sc.on(event_name:string,handler:function) - добавляет слушателя на сигнал. Циклом слушаются все сигналы а потом запускают функцию обработчик для того сигнала который пришел. Пример простейшего модуля: sc.on("touch",function (e) sc.info("info","you touched!")end) Изменения в версии: Патч 1: убрана обязательная поддержка модемов. Старые версии: Произведение «Servercore» созданное автором по имени LeshaInc, публикуется на условиях лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» («Атрибуция — Некоммерческое использование — Без производных произведений») 4.0 Всемирная. PS: Название проги звучит как поджанр метала)))
  6. Перенос статьи Эта тема была перенесена из блока "Статьи". Автор оригинала: ShuraGamer. Сначала выскажу огромное спасибо @Totoro, @Alex, @Fingercomp, @LeshaInc за их программы, благодаря которым более-менее смог разобраться в очках. Небольшая предыстория(кому неинтересно, основной текст ниже): Началось все с дверного замка Тоторо, в котором использовались неведомые мне до этого очки для вывода информации под названием Terminal Glasses. Мне захотелось побольше узнать о них, но увы-ни в каких, даже англоязычных источниках подробного гайда я не нашел. Спросил на форуме, может кто знает? Кибер предложил написать гайд самому, на халяву вайт получить. Тут-то , немного покопавшись в документации,я и осознал весь размер подложенной мне свинки... Я, наивная душа, подумал, а, фигня, тут же только вывод данных! OpenPeripheral оказался отдельным модом, и писать гайд только по одной его части не имеет особого смысла. Так что придется разбираться полностью. А пока что-держите первую часть гайда по моду OpenPeripheral - Terminal Glasses! Приятного ознакомления! Итак, начнем мы с физической части нашей парочки - Terminal Glasses и Terminal Glasses Bridge. В дальнейшем я буду называть их "очки" и "мост" для простоты. Методы API одинаковы как в ОС, так и в СС Начнем с принципа работы очков. Он достачно прост: информация передается с компьютера на мост, а с моста уже на очки(прим. Можно подключить несколько очков). Если честно, я хз, как данные передаются на очки, видимо тут квантовая зависимость поиграла... Итак, мы ставим мост рядом с компьютером. Далее мы подключаем очки к мосту, просто райткликнув ими по блоку. Готово! Все подготовления завершены, можем начинать программировать! Сначала подключаем мост к компу: OC -- com = require('component') bridge = com.openperipheral_bridge CC -- bridge = peripheral.wrap(сторона подключения к компьютеру) Или bridge=peripheral.wrap("bridge") Теперь мы разбираемся с API: brige.addBox([X-координата], [Y-координата] , [Размер по вертикали] , [Размер по горизонтали], [Хексадецимальный код*], [Прозрачность**]) -- добавляет прямоугольник по заданным параметрам. *Хексадецимальный код - цветовой код, подробнее - гугл. Малая таблица цветов: Черный #000000 Белый #FFFFFF Красный #FF0000 Зеленый #00FF00 Синий #0000FF Желтый #FFFF00 Морская волна #00FFFF Розовый #00FF00 Подробная таблица цветовых кодов:Тык! Цвета подаются в программу в виде 0xКОД, например 0x000000 **Прозрачность: 1 - полностью видимый; 0 - еле заметный(Дробные числа работают) bridge.addText([X-координата], [Y-координата] , [Строка] , [Хексадецимальный код]) - выводит строку в нужных координатах. bridge.clear() - сбрасывает все данные в мосте. Итак, вы все еще помните принцип передачи данных? Так вот, сами собой данные в очках не появятся, мы должны вручную "отправлять" картинку с моста на очки(При отправлении данных с моста на очки вся предыдущая информация сбрасывается) В этом нам поможет bridge.sync(). Для ясности мы напишем небольшую программку, которая показывала бы нам точное время(Напишем ее на OC): --TIMEONGLASSES-- com = require('component') bridge = com.openperipheral_bridge function addbox() bridge.addBox(1,1,80,10,0xFFFFFF,0.2) end function addtime() datetime = os.date("!*t",os.time()) time ="TIME"..datetime.hour..":"..datetime.min bridge.addText(5,2,time,0xFF0000) end --MAIN-- while true do bridge.clear() addbox() addtime() bridge.sync() os.sleep(0.1) end Итак, господа, разберем по полочкам вышенаписанную программу Функция addbox() создает почти прозрачный прямоугольник слева сверху на экране Функция addtime() выводит текущее время, кому интересна строчка: datetime = os.date("!*t",os.time()), прошу по ссылке: Тык! Далее мы смотрим на главный цикл. Разберем его построчно while true do и end - бесконечный цикл bridge.clear() - очищаем мост для новой информации addbox(),addtime() - добавляем табличку со временем bridge.sync() - отсылаем табличку на очки os.sleep(0.1) - ждем десятую секунды Всем спасибо за внимание, надеюсь, помидоры будут не сильно тухлыми :/ P.S. BB-зло!
  7. краткое введение в курс наномашин : После моего ужасного эксперимента надо мной, меня пришлось спасать админам. Я решил что хватит это тепеть! и написал прогу которая выдаёт все доступные для ваших нанороботов эффекты. Просто пьём наномашины,запускаем эту прогу и ждём. Во время сканирования желательно стоять на месте и выпить зелье регенерации. После завершения сканирования программа выдаст вам список эффектов и их индексов. Далее можете включать и выключать понравившиеся вам эффекты используя эту программу. видео ВНИМАНИЕ! есть эффект мгновенного урона. он может убить вас при сканировании.
  8. Привет игроки форумчане! Сегодня я дописал свой биос для OC. Он позволяет выбирать конкретную файловую систему для загрузки и показывает основные параметры этих систем. Я хотел засунуть больше функционала в виде фейкового init'a но место на eeprom'ке очень мало. Код и так весит 4094 байта из 4096 доступных. Не рекомендуется использовать этот биос в OC 1.5 из-за кривого шрифта. Вот так он выглядит в эмуляторе OC 1.6 команда для загрузки: pastebin run gG0ppTD7 Вот смотрю я на наш форум и вижу одни темы по типу "Есть ли правила на этом форуме?". Это же форум от lua прогеров для lua прогеров. Так давайте проги писать, а не разбираться куда делись правила.
  9. Ходя по интернету, я не встречал более удобную программу для редактирования воксельных моделей чем MagicaVoxel. Я уже использовал ее для крутых черепах, и теперь она пригодится нам всем и для принтов. Я сделал конвертер для переноса бинарного формата .vox в текстовый. Использование: 1 https://ephtracy.github.io/ Скачайте и установите MagicaVoxel. Сделайте модель своей мечты. Не забудьте следить за размерами в правом верхнем углу - размер одного печатного блока 16х16х16. Можно превысить размеры - конвертер просто сделает список больше чем из одного блока. 2 http://codepen.io/Krutoy242/full/xGOgJG/ Сохраните и откройте модель в моем модном конвертере. Настройки такие же как в принте - название, подсказка, пару флагов и свечение. Так же, после загрузки модели можно будет выбрать текстурки и цвета каждого типа блоков. Флажек "Split to states" разделит вашу модель пополам по оси X что бы из второй части сделать изменение модели при нажатии\подаче редстоун сигнала. Например, для калитки вам нужно в MagicaVoxel задать размер 32 16 16, в одном квадратике нарисовать закрытую калитку, а во втором - открытую. Вот и всё! Полученный текст можно вставить в файлик и отпечатать по гайду Тоторо. Позже добавлю программу, позволяющую печатать по очереди сразу несколько моделей. Конвертер написан на JavaScript. Он читает бинарный файл и объединяет воксели в группы. Программа в какой то степени оптимизирована. Например эти стержни конвертировались автоматически со 100% эффективностью. Но в некоторых случаях, конечно, при создании модели человеком можно будет сэкономить 2-3 шейпа из 23х максимальных. Пишите свои отзывы и пожелания по улучшению конвертера.
  10. Так как GET запросы, например, к http://www.timeapi.org/utc/now , требуют на выполнение определенного времени, до нескольких секунд, наличия интернет карты и кучи телодвижений, есть еще один вариант получения астрономического времени. Точное оно настолько, насколько точно его настроил админ на хосте. Стандартные функции date +%s в консоли и в интерпретаторе os.date() выдают пока черти что, 1970 год и время с потолка. Всякие счетчики работы Луа машины и ПК нам тоже не подходят, типа os.clock() и прочих. Но есть один способ. В ОС можно получить дату модификации файла методом lastModified('filename') из библиотеки filesystem в формате UNIX Ним и воспользуемся. Модифицируем вспомагательный файл и получим время модификации тут же. Вот функция получения времени: -- ======машинное время (время хоста)======= -- раскомментируйте библиотеку, если она не подключена в вашем коде --local fs = require("filesystem") --(установить для своего часового пояса, -12 : +13, например: -2 или 6) local TIME_ZONE = 2 --(не изменять!) local t_correction = TIME_ZONE * 3600 local function getTimeHost() local file = io.open('/tmp/unix.tmp', 'w') file:write('') file:close() local lastmod = tonumber(string.sub(fs.lastModified('UNIX.tmp'), 1, -4)) + t_correction --print(lastmod) -- Вариант 1 --local data = os.date('%x', lastmod) --local time = os.date('%X', lastmod) --return data, time -- Вариант 2, eсли нужно все по отдельности --local year = os.date('%Y', lastmod) --local month = os.date('%m', lastmod) --local day = os.date('%d', lastmod) --local weekday = os.date('%A', lastmod) --local hour = os.date('%H', lastmod) --local minute = os.date('%M', lastmod) --local sec = os.date('%S', lastmod) --return year, month, day, weekday, hour, minute, sec -- Вариант 3, но есть нюанс, если число минут(часов) 5, то и будет выдано 5, а не 05! --local dt = os.date('*t', lastmod) --return dt.year, dt.month, dt.day, dt.hour, dt.min, dt.sec -- Вариант 4, все в куче, как мы привыкли, в правильном формате local dt = os.date('%Y.%m.%d %H:%M:%S', lastmod) return dt end print(getTimeHost()) Вот выдержка из Советской Энциклопедии о UNIX времени. Часовой пояс установите, как Вам угодно (например, сейчас 2 на ИТ - это время Киев, 3 - МСК). Формат, который возвращает функция, тоже выберите, какой Вам удобно. Лишние закомментированные строки (--) удалите. Теперь легко можно в лог записать любое событие и приписать ему время. Так же можно легко узнать дату и день недели через 234 часов, 36 мин, 40 сек, например, предварительно переведя временной интервал в секунды и потом вернуть астрономическое время. Например вы хотите узнать, через сколько на ИТ вы скрафтите 100К ведер жидкой материи. Это например, 2256 год, 1 апреля, 12:50:12, если не останавливать "генмат" не на секунду Вот ретурн функции: Вариант 1: string, string 04/22/15 09:05:56 Вариант 2: number, number, number, string, number, number, number 2015 04 22 Wednesday 09 05 56 Вариант 3: number, number, number, number, number, number 2015 04 22 9 5 56 Вариант 4: string 2015.04.22 09:05:56 и т.п. По сути вся функция, это 7 строчек. Не нужно никаких гетзапросов выполнять, библ всяких и интернет карт. Подробнее о форматах os.date() здесь.
  11. Небольшая темка. Смысл уже понятен из заголовка, надеюсь. Возродить OpenNet на ИТ. Зачем? Демонстрировать виртуозность программистов: @Zer0Galaxy и @Krutoy. Повспоминать старый ИТ. Скептикам назло. А вообще — я это просто по рынку прогулялся и увидел аж 10 стэков совершенно ненужных алмазов. Так как они не нужны, можно пустить на такое благое дело. Ваши мысли?
  12. Я вот тут задумался, а как быть с интернационализацией (и локализацией) программ? Когда программа становится достаточно большой и популярной, возникает мысль выложить её на каком-нибудь иностранном ресурсе. Ну или просто какой-нибудь чувак приходит и говорит: "I like your program very much, but I don't understand russian at all". Свой голографический редактор, например, я поддерживаю в двух версиях одновременно - русской и английской. По сути два отдельных клона программы. Это не очень удобно. Отсюда вопрос - как запилить удобную систему локализации программ? 1) Клоны программы на разных языках Самый дубовый способ. То как я делал до недавнего времени. Выпускаете программу, делаете несколько копий, каждую переводите на разные языки. Не очень удобно для вас - потому что надо клонировать и переводить каждую новую версию. Не очень удобно для тех, кто хотел бы вам помочь с переводом - они не разбираются в вашем коде, и искать в нём, что надо перевести им будет не удобно. Эту задачу можно облегчить, если вынести все фразы в табличку в начале программы: local text = { greetings = "Приветствую!", ... } Тогда можно будет не копаться в поисках отдельных строк по всему коду, а только перевести эту табличку. 2) Файлы локализации Делаем отдельный файлик, наподобие конфига. В него записываем такие же пары значений, например: greetings = Приветствую! И потом считываем его из программы при старте. Можно сделать дефолтные значения, которые прописаны прямо в коде, и будут использоваться, если программа не нашла файлы локализации. Сами файлики могут лежать рядом с программой, или в папке /etc/my-project/..., или ещё где-то. Если заливать программу в репозиторий, тоже возникают варианты. Мы может создать несколько пакетов, например: holo-ru, holo-en. Это как-то немного нелогично. Установка программы будет выглядеть так: hpm install holo-en Другой способ - это дублировать версии пакета, и дописывать им языковой суффикс: 0.1.0-en, 0.1.0-fr. Вроде получше. Установка будет выглядеть так: hpm install holo@0.7.1-ru Недостаток - нам всегда придётся указывать версию полностью. То есть нельзя будет как раньше - просто указать название пакета, а репозиторий сам выдаст самую свежую версию. Ещё один способ - это держать файлы локализации отдельными пакетами от основного проекта: проект holo и локализационный пакет holo-lang-en например. Тогда саму программу можно будет установить как раньше. Но если мы захотим сменить дефолтный язык, придётся указывать дополнительный пакет: hpm install holo, holo-lang-en Тоже не совсем юзерфрендли. Предлагаю обсудить эту тему, и придти к какому-нибудь удобному стандарту. Какие варианты решения проблемы приходят вам на ум?
  13. Прога для тех, кто прочитал мой прошлый гайд по звуковой карте в моём блоге и теперь хочет творить звуки. Потому что вслепую набирать код очень скучно. Synth - это, наконец-то, внятная гуишка для звуковой карты. Она не умеет сохранять полученную конфигурацию в файл и считывать её оттуда, например. Зато можно с лёгкостью создать что-то монстрообразное и потом перенести настройки себе в код. Довольно прелюдий. Это прога является огромным монстром, поэтому ниже я расскажу, как ею пользоваться. 1. Установка Установить прогу можно с помощью oppm или, что лучше (ибо быстрее), hpm. $ hpm oppm:cache update $ hpm oppm:install synth Прога весит 40 кБ, но с ней идут 160 кБ либ, поэтому установка займёт энное время. 2. Запуск Запускать командой synth. Появится красивенькая юишка. 3. Использование Первоначально на поле (а эта синь как раз является полем) ничего нет. Исправить это недоразумение можно с помощью тыка правкой кнопкой по полю. Внизу кнопа для закрытия меню, сверху комбобокс, в котором можно выбрать желаемую карточку. Начнём, пожалуй, с канала ("Channel"). После нажатия по нужному пункту появится карточка в месте, где тыкнули пкм. Таким же образом я создаю карточки "Wave", "Volume", "Frequency". Сами карточки белые, но у них есть цветные штуки. Эти цветные штуки называются пинами. Те пины, которые находятся снаружи карточки, - выходы (на них обычно ">" или "v" написано); которые внутри карточки, - входы. Разноцветные они не просто потому, что мне захотелось, а для помощи. Каждый выход можно подключить ко входу только с таким же цветом. А как подключать-то? Изи: сначала тыкнуть по выходному пину и затем по любому подсвеченному входу. Таким же образом можно отцепить два пина, если они уже подключены друг к другу. Соединения видны глазом даже без какого-либо вооружения. Настройки, которые мы скормили каналу, не особо впечатляют, прямо скажем. Синусоида, 99.99% громкости, 440 Гц частота. Пф. И это недоразумение тоже фиксится правым кликом! Только теперь по карточке. Например, по карточке "Wave". Внизу кнопки удаления объекта (т.е. карточки) и закрытия меню. На большинстве карт этим всё не ограничивается и можно настроить настройки, покрутить крутилки. Вот, например, на скрине выше для карточки "Wave" можно задать тип волны, тыкнув по комбобоксу. После этого можно выйти из меню и наблюдать изменения. Так-так-так, что-то скучновато просто цеплять и отцеплять картонки. Во-первых, их можно таскать по полю: зажать по белой части и потом двигать в тёплые страны. Во-вторых, можно таскать поле: зажать по его свободной части и подвигать. В-третьих, мы можем создать карточку "Sound card". Как ни странно, эта карточка смотрит, что вы к ней подключили, и на основе увиденного ужаса генерирует звук. Для этого её заспавним где-нибудь, а затем к любому из пинов (не столь важно, к какому именно, это ни на что не влияет) подключить канал. Слева у этой карты есть пин громкости - выставит для всех подключенных каналов сразу такую. Но её можно и не ставить. Сразу после этого вы услышите свой звук. Можно таким же образом поставить и второй канал. Если долго эту какофонию слушать, могут отпасть уши, поэтому вместо звуковой карты - её безжалостно удаляем - саммоним график. Особо тут расписывать нечего, вообще. Так же без разницы, куда подключены каналы; через пкм можно настроить зум. Попробуем теперь поиграться с модуляцией. Сначала амплитудная: она попроще. Подключаем канал, который будет модулировать (например, первый), к пину "AM" другого канала. Красота. Даже на график не влезает. Хотя особой проблемы тут нет: как видно, рисуется график не очень красиво (я потом надеюсь это как-нибудь поправить), но представление о виде волны есть. Неплохо, на первый взгляд. Ровно до того, как вы подключите оба канала к звуковой карте. Теперь давайте устроим тотальную частотную модуляцию. Саммоним частотный модулятор, к вернему пину подключаем модулирующий канал, а выхлоп ведём к пину "FM" на другом канале. Звучать оно сразу стало иначе. Можно поменять интенсивность модуляции и частоты на каналах. Последняя карточка в программе - это ADSR. Особого толка в ней, вообще, нет, потому что при подключении её услышите какую-то дичь, но зато на ней есть миленький график изменения амплитуды со временем (вся шкала - это 6 секунд). Так можно наглядно подобрать желаемые значения для этой огибающей. Собственно, это и все карточки, которые есть в этой программе. Ставьте, играйтесь и радуйтесь. А как наиграетесь со звуковой картой, можно выйти из программы (через Ctrl-C) и заняться серьёзными вещами. P. S. Сырцы лежат на OpenPrograms (где б им ещё быть?): https://github.com/OpenPrograms/Fingercomp-Programs/tree/master/synth
  14. Перенос статьи Эта тема была перенесена из блока "Статьи". Автор оригинала: Semoro. В этом видео я и Сябро рассказываем про настройку файловой системы диска для работы
  15. Перенос статьи Эта тема была перенесена из блока "Статьи". Автор оригинала: Semoro. В этом видео я и Сябро рассказываем о компонентах мода Open Computers
  16. Перенос статьи Эта тема была перенесена из блока "Статьи". Автор оригинала: fenixrus. Здравствуйте с вами Fenixrus и я начинаю серию гайдов по API мода OpenComputers. Начнем мы с Component API. Вообщем смотрим, изучаем, пробуем, комментируем! https://www.youtube.com/watch?v=hStnB3hCpFs
  17. Перенос статьи Эта тема была перенесена из блока "Статьи". Автор оригинала: cloud. Нужно: Комп. Датчик движения (лучше несколько). Сирена из Nuclear Control (можно и что-нибудь другое). Котэ При обнаружении движения злоумышленника, программа выводит его имя на экран и смотрит в вайтлист, если такая фамилия там не числится - включается сирена. Тут код.
  18. Перенос статьи Эта тема была перенесена из блока "Статьи". Эта простая программа служит в основном для декора. С её помощью вы сможете с лёгкостью выводить список цистерн, подключённых к компьютеру, с подробной информацией о каждой. Скачать её можно с pastebin CAUxJx2T. Как запустить Я подумал, что для такой программы не нужна система, поэтому для работы вам необходимо установить её на EEPROM. Комплектация компьютера - минимальная, необходим процессор первого уровня, видеокарта (желательно второго уровня), монитор (тоже желательно второго уровня), адаптеры с расширением tank controller с подключёнными цистернами. Как работает Программа ищет всё подключённые к компьютеру адаптеры с модулем tank controller. Более того вы можете спокойно присоединять цистерны ко всем её сторонам, и они все будут отображаться, главное не делайте это во время работы программы. Когда всё подключено, просто запустите компьютер. В конечном итоге всё должно выглядеть примерно так: Вверху каждой ячейки на мониторе название жидкости, по середине её количество в цистерне, снизу же располагается максимальный объём. Вы также можете прописать каждому типу жидкости свой цвет. У меня это проделано только для воды лавы и молока, что можно увидеть на скриншоте. Для этого откройте файл любым редактором и найдите первую локальную таблицу fluids в ней название каждой жидкости соответствует цвету, вам следует просто продолжить таблицу, также вы можете изменить надпись на верху, для этого придайте переменной name значение любой строки, но старайтесь не использовать 2-байтовые символы. Программа работает на компьютере не переставая, способ выключения я не придумал, т.к. зачем это надо. Обновление Я постарался учесть все ваши пожелания в коментариях и обновил программу. Ниже перечислены все изменения. Если размер каждой цистерны на экране меньше 15 в ширину, то он фиксируется на 15, другие же цистерны, которые не попали на экран можно увидеть, тыкнув в правую часть экрана, при этом экран будет прокручиваться вправо на одну ячейку цистерны. Если необходимо вернуться назад тыкните в левую часть экрана. Plug-and-Play добавлен, но плохо работает или вообще не работает с компонентами tank controller. Подключение новых цистерн и отключение работает без проблем. Теперь программа также может работать с OpenOS, но лучше использовать EEPROM.
  19. Играя на серверах с OpenComputers, мне часто удавалось нелегально заполучить карту отладки, поэтому для упрощения её использования грех было не написать соответствующую софтинку. Также реализовано использование следующих улучшений: чатбокс, радар, карта эффектов частиц, если таковые имеются. Советую пихать всё в креативный планшет, так как он не требует подзарядки и спокойно вместит все выше перечисленные улучшения... Собсна сам быдлокод на растерзание: https://pastebin.com/8zapX0En и описание его работы: При первом запуске, нужно определить владельца программы кликом по экрану. Овнер может быть только один, поэтому реализована защита от чужаков, если кто либо другой влезет в меню, то его хп слетит на 0, почистится инвентарь и произойдёт кик с сервера. Эту защиту можно отключить в меню настроек убрав USER PROTECT. > Главное меню (MAIN) WORLD - меню работы с миром. PLAYER - меню работы с игроками. WARPS - меню варпов. NOCLIP - хождение через блоки. PEX ADD, PEX REM - добавление и удаление своих прав на сервере (через командный блок). GM1, GM0 - переключатели гейм мода (через командный блок). PARTS - меню работы с картой эффектов частиц (если доступна). CHAT - меню чатбокса (если доступен). CONSOLE COMMAND - ввод команды (выполняется не через runCommand() а через командный блок (если он включён на сервере)). HIDE - шторка, которая спрячет меню от посторонних глаз. ADMS - выводит игроков и расстояние до них, добавленных в чёрный список. Звёздочка - меню настроек программы. MAIN - возврат в главное меню. EXIT - выход. > Меню игрока (PLAYER) INFO - подробная инфа об игроке. TPA - телепорт выбранного игрока по кордам. TPAME - телепорт овнера по кордам. TPAMETO - телепорт овнера к выбранному игроку. FREEZE - "застывание" выбранного игрока. TPAHERE - телепорт игрока к овнеру. TPAPTOP - телепорт игрока к игроку. SETHP - установка здоровья игроку. TELLRAW - можно выводить отформатированное сообщение выбранному игроку. KICK - кик с сервера выбранного игрока. Так выглядит меню выбора игроков (табуляция поддерживается): > Меню работы с миром (WORLD) SETBLOCK - установка блока по кордам (можно также выбрать координаты по отдельному игроку). SETBLOCKS - заполняет куб выбранным блоком, ограниченный двумя точками координат. REMITEM - удаляет предмет из слота хранилища. INSITTEM/INSITEMS - вводит в хранилище предметы (требует строковый айди, например "minecraft:stone"). DAYRAIN - если идёт дождь, убирает его, либо инвертирует время суток. SUMMON - спавнит выбранную сущность по кордам (можно также выбрать координаты по отдельному игроку). NBTS - меню работы с НБТ тегами блоков. SIGNS - меню работы с табличками (для редактирования табличек необходимо стоять в блоке вместе с ней). IMBPOTION - встав на сундук и нажав эту кнопку, в него дропнется зелька с ооочень имбовыми эффектами. SOUNDS - проигрывает выбранный звук по координатам (можно также выбрать координаты по отдельному игроку). > Меню варпов (WARPS) Здесь всё просто: [+] для добавления варпа, клик по названию варпа - телепортация на него, а жмяк по крестику удалит варп. > Хождение через блоки (NOCLIP) Управление - W, A, S, D, SPACE, SHIFT. ENTER - выход. Направление движения на восток (EAST) > Меню чатбокса (CHAT) Сообщение отправляется прямо из этого меню, либо можно ввести следующие команды: rename - новое имя чатбокса. cons - писать в чат от имени сервера. nick - ваш ник как имя чатбокса. cr - краш клиентов в небольшом радиусе частицами smoke, если установлена карта эффектов частиц (чтобы не крашило, нужно выключить частицы дыма в настройках графона). kk/kk2 - кик игроков с сервера в радиусе действия чатбокса (чтобы не кикало, нужно выключить чат в сетевых настройках игры). spam - спам в чат. joke - шутник3000. main - возврат в главное меню. > Спавн частиц картой эффектов частиц (PARTS) Здесь я думаю ничего объяснять не стоит. > Чекадмин (ADMS) Меню чека админов на сервере. Показывает их текущее местоположение и расстояние до овнера программки (чтобы не палиться во время своих злодеяний) EDIT - редактирование чёрного списка. SCAN - сканирует игроков сервера и если находит "креативщика" - добавит его в ЧС. Нажать "A" чтобы обновить... > Настройки (Звёздочка в правом верхнем углу) AUTORUN - запилит скрипт в автозапуск девайса. USER PROTECT - вкл/выкл защиты от чужаков. Y + 100 (TPA) - вкл/выкл подкидывания овнера на 100 блоков вверх при телепортации к игроку (если хочется напасть с воздуха). KEYBINDS - список быстрых клавиш программы: Также написав в локал чат "whereON" при наличии чатбокса и радара - включится радар, оповещающий в чат о находящихся в радиусе 7 блоков игроках. Для выключения радара - написать в чат "whereOFF". Для разовой проверки - написать в чат "who". P.S. Все необходимые переменные (список варпов, чёрный список, настройки) сохраняются в конфиг, поэтому перезапуски программе не страшны) В общем то и усё. Вроде бы охватил все основные фичи скрипта. Спасибо за внимание! Надеюсь кому нибудь пригодится :3
  20. Подмена computer.pullSignal или методика построения резидентных программ в OpenOS Допустим, захотелось нам иметь резидентную программу, которая будет работать на фоне OpenOS и, периодически, или по какому либо событию, что-то полезное делать. Воспользуемся нашим маленьким bibi, а в качестве boot.lua напишем такой код: local cl=component.list local gp=component.proxy(cl("gpu")()) --сохраняем исходные функции из _G.computer, для внутреннего пользования local cp={} for k,v in pairs(computer) do cp[k]=v end --подменяем функцию computer.pullSignal computer.pullSignal = function (...) local e={cp.pullSignal(...)} --для примера, по тильде (~) будем ребутать компьютер if e[1]=='key_down' and e[4]==41 then cp.shutdown(true) end --а по lAlt будем выводить список компонентов используя определенную в OpenOS функцию print и сохраненную cl if e[1]=='key_down' and e[4]==56 then for k,v in cl() do print(k,v) end end --OpenOS периодически сама дергает эвенты (чтобы курсор мигал и прочее) подробнее смотрите в lib/event.lua --поэтому мы можем выводить свои часики, куда-ж без них то ) и прочие полезности, например инфу о памяти local s=tostring(math.floor(cp.freeMemory()/1024))..'/'..tostring(cp.totalMemory()/1024)..' kb free '..os.date('!%R') local w,h = gp.maxResolution() gp.set(w-#s+1,1,s) --в конце мы должны вернуть событие ничего не подозревающей OpenOS return table.unpack(e) end --функцию мы подменили, теперь загружаем, компилируем и выполняем init.lua local fs=component.proxy(computer.getBootAddress()) local h=fs.open('init.lua') local s,r='','' while r do r=fs.read(h,math.huge) s=s..(r or "") end fs.close(h) load(s)() Запускаем компьютер, bibi пискнув и подождав секундочку, выполняет наш boot.lua, который хитро подменив pullSignal выполнит init.lua и после загрузки OpenOS в углу экрана радостно затикают часики. Теперь мы можем нажать lAlt и лицезреть список компонентов, или нажать тильду, и компьютер перезапустится. --==-- Конечно, вы можете сказать, что вывод списка компонентов портит экран, что перед выводом хорошо бы сохранять состояние экрана каким-нибудь gpu.get, вывод делать в свой интерфейс, а после, восстанавливать экран. И часики у меня никудышние. При скролле вниз (например в редакторе edit.lua) скроллируются вместе с текстом, вместо того, чтобы оставаться там где им положено. Но моя задача, показать метод на простейших примерах, а не переопределяя gpu строить интерфейсы. На основе этого метода можно построить API для TSR программ, а комбинируя его с перехватом component.proxy, component.invoke и последующей подменой gpu на виртуальный терминал, и вовсе, написать свою операционную систему. Для которой, кстати говоря, было бы неплохо уметь запускать OpenOS в окошке, но самое главное, в изолированной среде, чтобы труд программистов писавших ПО под OpenOS не пропадал зря. Я бы даже сказал, что изоляция OpenOS, на данном этапе, более важная задача, чем построение интерфейсов. Поэтому мы попробуем разобрать эту проблему в следующей статье. Посмотрим что выйдет. --==-- Небольшое дополнение: Если вам не охота играть с bibi, но нужно запустить резидентную программу прямо из-под OpenOS, то это сделать еще проще. local component = require("component") local cp = require("computer") local gpu = component.gpu local pullSignal = cp.pullSignal cp.pullSignal = function (...) local e={pullSignal(...)} if e[1]=='key_down' and e[4]==41 then cp.shutdown(true) end if e[1]=='key_down' and e[4]==56 then for k,v in component.list() do print(k,v) end end local s=' '..math.floor(cp.freeMemory()/1024)..'/'..(cp.totalMemory()/1024)..' kb free '..os.date('!%R') local w,h = gpu.maxResolution() gpu.set(w-#s+1,1,s) return table.unpack(e) end Сохраняем этот код в файл, допустим tsr.lua и запускаем его под OpenOSПрограмма выполнится, завершится, а резидентный участок останется в памяти. --==-- Если выбросить все что относится к демонстрации работы, у нас останется маленькая обертка local cp = require("computer") local pullSignal = cp.pullSignal cp.pullSignal = function (...) local e={pullSignal(...)} --код TSR программы return table.unpack(e) end Заключив в которую код своей TSR программы мы получим резидента, который будет выполнять TSR-код, где-то раз в пол секунды.
  21. Не знаю, как вы, а я периодически сталкивался с проблемой нехватки угля/дерева. Поэтому сделал вот такую небольшую программку для робота Требуемые улучшения: - Притягивающий луч - Контроллер инвентаря - Геолизёр - Большой топор из тинкера Остальное по желанию Чтобы скачать программу, пишем pastebin get FQeCHETF woodman https://pastebin.com/FQeCHETF Чтобы получить помощь, пишем woodman help http://imgur.com/a/EbydN Перед запуском программы уясним сразу: первые 4 слота - обязательно саженцы, слева от робота(если смотреть в лицо) - сундук, также не помешает зарядник, ибо если уровень зарядки опустится меньше 25%, он будет ждать зарядник. Когда зарядник подключен, а уровень заряда меньше 25% - заряжается до 50% и продолжает работу Также, если во время работы кончаются саженцы, он замораживается и ждет, пока их положат, периодически издавая писк. На старте может подвисать, но ненадолго Чтобы запустить робота, пишем woodman start X Y delay layers layer_h IsCoal где X и Y - размер фермы по X и Y(вид сверху), delay - задержка в секундах, layers - количество слоев, layer_h - высота одного слоя(только если слоев больше, чем 1! Если слой только 1, этот пункт не писать), IsCoal(true/false) - угольная ли ферма(просто изменяет количество tb.suck() после рубки дерева, для экономии времени). Например: woodman start 10 8 3600 3 10 false woodman start 10 8 1800 1 true Также планируется добавить сохранение данных в файл и запуск программы с использованием сохраненных данных, а не вводить каждый раз Еще скрин: http://imgur.com/a/xvcKi В случае, если робот разрядится меньше 25%, то система просто не даст ему поехать, а будет ждать зарядник, либо, если он подключен, ждет, пока робот не зарядится до 50% Если робот встретится с мобом, он не собьется, а будет бить, пока не сможет пройти дальше Требуемое расстояние между деревьями - 1 Не рекомендую использовать мультислойность, если размер сетки - 1*1. Он просто завершит работу ._. P.S. Также, если надо, могу записать кратенький видеогайдик А зачем я вообще спрашиваю? Все равно когда-нибудь я запишу
  22. Что приписывается в этих файлах? (Я просто для практики свою ос делаю)
  23. Затеял строить машинный зал, но вручную копать было лень. Поэтому я набросал небольшую (на 100 строк) программку. Всё что она умеет - это копать ямы. Я думаю все мы писали такие программки время от времени, чтобы помочь со строительством или добычей. И эта программа не представляет из себя ничего особенного нового. Я попробовал слегка оптимизировать процесс выемки породы, но не более. Предлагайте свои улучшения по коду и алгоритму, чтобы создать THE BEST ULTIMATE DIGGER EVER и возвести стандарты рытья ям на новый уровень! Код: https://pastebin.com/rQ71KRND Установка: 1) Вручную. Копируем текст программы, открываем новый файл командой edit dwarf, нажимаем Insert чтобы вставить код, а затем Ctrl+S и Ctrl+W чтобы сохранить и закрыть файл. 2) С Pastebin. Выполняем команду pastebin get rQ71KRND dwarf. 3) С Hel. Выполняем команду hpm install dwarf.
  24. Идея/заказ.Не важно. Нужен простенький чат,без GUI,с дублированием по google glass.Единственное что просится-это передача сообщений не на одном сервере,а на разных. Пример:Я,сижу где нибудь в одиночке в аду. Допустим мой друг/знакомый сидит на другом сервере,одиночке. Цель-передать ему сообщение.Не нужен пафосный чат,главное чтобы работало.
  25. Krutoy

    Пишу браузер-арбузер

    Новости! Теперь мой браузер будет называться "Арбузер", и будет выполнен в зеленоватых тонах. Zer0Galaxy мне помогает, и уже набросал парсинг и поиск по самым простым селекторам в CSS. Думаю, ему для полной работы с CSS нужно будет написать еще разов в 6 больше кода. Готовы первые наброски самого браузера без страниц. Закладки, навигация, строка пути. Кстати, вы можете посмотреть эмулятор экрана компьютера из OC, который можно открыть в браузере и даже посмотреть исходный код. Ядро написано примерно на 15% пока что. В следующий раз буду отрисовывать элементы страниц, подгружая их стили.
×