Перейти к содержанию

D-side

Пользователи
  • Публикаций

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

  • Посещение

  • Победитель дней

    1

D-side стал победителем дня 5 августа 2014

D-side имел наиболее популярный контент!

Репутация

10 Обычный

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

  1. Директория и папка это одно и то же. Разные названия. С концепцией файлов и папок же ты знаком (я надеюсь)? Значит и с этим проблем возникнуть не должно. Про какие бины ты говоришь, я не знаю, а API относится уже к Lua. Ты пока толком не научился управлять операционной системой. Прояви последовательность, и разберись сначала с этим.
  2. Пару с лишним десятков лет назад ты бы не смог пользоваться компьютерами. А OpenComputers примерно ту эпоху и имитирует, причём в упрощённом виде. Здесь у нас хотя бы вместо ассемблера крутой "высокоуровневый" и современный язык Lua, который по сравнению с ассемблером гораздо понятнее выглядит. Когда-то давно Джобс и Возняк поняли, что простые людишки не умеют пользоваться компьютерами потому, что для этого нужно слишком много изучить. Некоторые считают то время возникновением в управлении компом понятия "user-friendly". В общем и целом, при таком подходе свобода действий несколько ограничивается, зато оставшиеся доступные действия упаковываются в понятные и объяснённые "обёртки". Но я вспомню не о таких древних временах. Я вспомню о DOS. Эта операционная система на вид очень напоминает наши OpenOS и CraftOS, способ управления ею точно такой же: белые магические команды на чёрном фоне, которые что-то делают. В моём детстве (мне было лет 5) у нас был компьютер под DOS, и им можно было пользоваться именно в таком режиме. Но пользоваться этим, к счастью, необходимости не было: у меня на компьютере был Norton Commander, который выглядел куда более понятно. Я шастал по компу просто из любопытства. Не зная никаких команд. Мне показали несколько кнопок, объяснили реакцию на них, всё несложно - всё, можно ехать. По факту, такая же штука есть и у нас в ComputerCraft (Zer0Galaxy, твоё творение, кажется?), просто о ней почти никто не знает, она почти не упоминается в гайдах. Побочный эффект - она ест лишние ресурсы системы, но если всё настолько плохо, почему нет? Знаешь о Windows Server? Так вот, у большинства версий этой ОС есть возможность установки в режиме Server Core, при загрузке в которую ты не получишь никаких панелей задач, прикладного софта или красивых окошек: просто аккуратное аскетичное окошко... с чёрным экраном и белыми буквами. Зачем это надо? Есть меньше ресурсов системы и не давать лишних лазеек для взлома. Да, в 2014 году такой интерфейс всё ещё актуален! Вот у нас все компы такие, практически без удобств для незнающего. Если их снабдить соответствующим программным обеспечением, они станут вполне удобны и знания команд почти не потребуют. Но в состав мода это не входит. Сделать это - вполне себе "челлендж" для игроков, который интересно решать. Хотя эти задачи были решены не один десяток лет назад (NC выпущен в 1986, вроде), решить их самому - хорошая зарядка для мозгов и пинок в сторону саморазвития. А если тебе интересно просто пользоваться удобствами автоматизации, которые предоставляют компы - тебе нужно искать программные пакеты для компа, которые превратят твой комп в то, что тебе нужно. Только велика вероятность, что эти пакеты ещё не написаны. Можешь написать на форуме. Даром что ли проект на программистов ориентирован. В общем, не расстраивайся. Просто ты - пользователь, а не программист. Вот и всё.
  3. Этот момент считаю нужным пояснить. Потому что он не нужен.Во многих файловых системах сейчас в каждой папке есть две дополнительные записи, которых вы не видите. Это . и .. (одна точка и две точки). Они, соответственно, обозначают "эта папка" и "папка уровнем выше". Пруф: создаю новую папку, вот её содержимое, которого... нет? Оказывается, кое-что всё равно есть. Но это означает вот что. Команда cd . не делает ничего полезного, она переходит в ту же самую папку. А вот команда cd .. переходит "выше" по файловой системе, наружу. Соответственно, тот факт, что относительные пути можно начинать с ./ обычно не используется - это просто следствие того факта, что в каждой папке есть запись ".", в которой указана эта же самая папка. Замечание: это Linux, а не OpenOS. Команды в OpenOS, насколько я вижу, не умеют использовать флаги, поэтому ls -al там может не сработать, и это нормально. Трюк с . и .. используется во всех известных мне (изнутри) файловых системах.
  4. По-моему, прежде чем конструировать язык разметки, необходимо собрать "рендерер", делающий интерфейс пользователя из некоего дерева (или списка) элементов. А потом уже придумывать сериализацию этого дерева (или списка) в некий язык разметки и обратно. В любом случае, использование в качестве прототипа HTML мне видится неудачным выбором. Нам нужно скорее нечто вроде Markdown, похожий лёгкий по объёму и в обработке синтаксис.
  5. Всегда срабатывает - подсчёт циклом. local count = 0 for k, v in pairs(tab) do count = count + 1 end Способа поумнее я не нашёл, и не уверен, что таковой вообще существует. Есть вариант поддержания длины таблицы в отдельном поле, но это не всегда годится.
  6. Возможно, может помочь это, хотя это скорее ультракороткий обзор всего языка: http://learnxinyminutes.com/docs/lua/
  7. Там, где объект будет использоваться, та внешняя переменная может уже быть недоступна. Скажем, это поле можно использовать для вывода файла на экран при наличии только объекта на этом файле.
  8. Можно. Во-первых, определение user наверху достаточно свести к {}, строчку с __index перенести внутрь new (self.__index = self), а методы, описанные в user'е, для экономии памяти лучше реализовать на нотации с двоеточием. Она работает предельно просто: вызов X:m(args) превращается в X.m(X, args) Ну и user лучше написать с большой буквы, т. к. это класс, а из названия это не очевидно. User - гораздо лучше. Как-то так: function User:getPassword() return self.password end function User:setPassword(password) self.password = password end Обращаю внимание, что если методы getX и setX написаны с такой логикой, то они нафиг не нужны. Вот в этой шпаргалке есть неплохой раздел по "ООП". Рекомендую.
  9. В синтаксисе определения таблиц слева от = не переменная, а строковый ключ, написание которого подчиняется тем же правилам, что и переменные - чтобы его можно было вызывать через точку. Это короткая запись чуть более длинной: {["filename"] = filename, <...>} Это зависит от программиста и определяется при создании объекта. Смысл можно заложить в само название переменной, куда он записан. Скажем, logfile.delete() - да, я однозначно пойму, что это, т. к. название переменной осмысленное. В символах может и нет. Но по смыслу - это короче. Удалить сущность "файл" мы можем только из файловой системы. Но тут у нас в языке такой сущности нет - она косвенно выводится из того факта, что строка (!) обрабатывается функциями для файловой системы (!), значит это файл. В этом отношении код с привязкой даже нагляднее - независимо от того, с какими файлами мы работаем (а мы можем о них ничего не знать), мы можем отвести в коде осмысленное имя. Справедливости ради стоит приложить аналогичный код на классе File, который я пока не написал, т. к. сегодня (буквально часа два назад) поставил свежий Linux Mint и накатил среду разработки в Lua.
  10. В особо сложных программах бывает необходимость сократить вызов функции от некоторого числа аргументов, зафиксировав значение некоторых (или всех) из них, если другие значения в этом контексте использоваться будут редко. Подобные штуки есть в куче языков. В стандартную библиотеку C++0x для этого (в том числе) ввели std::function, в Haxe и Haskell это просто часть языка. Многие считают такой приём чертой функционального стиля программирования, который я ещё не освоил, но стараюсь. Работает это очень просто и код очень короткий. Берём функцию, указываем ей несколько первых аргументов - получаем функцию, которой надо указать только оставшиеся (если таковые есть): function bind(f, ...) local higherArg = arg return function(...) return f( unpack(higherArg), unpack(arg) ) end end Т. е. эта штука возвращает функцию, которая возвращает результат указанной вами функции, аргументами к которой выступает то, что вы указали при привязке (вызове bind), а затем то, что вы указали при вызове возвращённой из привязки функцией. Ещё ничего не закипело от обилия функций? Привожу пример. Можете посмотреть сразу в интерпретаторе Lua. Это не слишком практичный пример, поэтому вот кое-что поинтереснее. Допустим, вы хотите получить таблицу, содержащую путь к файлу и ряд команд, которые с ним можно выполнить без указания лишних данных. Примерно как у обычного объекта. Да, можно собрать класс "файл", но это не единственный способ, и у него свои недостатки. С биндом подобная штука записывается очень коротко: filename = "file" file = { filename = filename, run = bind(shell.run, filename), -- Можно смешивать функции из разных API delete = bind(fs.delete, filename) -- вообще без проблем } -- И эти операции можно вызывать без аргументов, забыв про API: file.run() -- Запускаем файл file.delete() -- Стираем файл Конечно, в случае больших задач "нормальный" класс (с вызовами методов через двоеточие) предпочтительнее, поскольку даёт больше контроля над возвращаемыми значениями и обработкой возможных ошибок. Но если это не требуется, можно сэкономить время с помощью привязки. Есть и другие способы применения, на которые вы, может быть, наткнётесь сами. Чаще всего это способ сэкономить на объёме кода, уложив повторяющийся аргумент. Компактнее, чем это делает вынесение в переменную, хотя потребляет несколько больше оперативной памяти, ведь такие "методы" будут создаваться каждый раз на каждую привязку. Осторожней с этим. Это часть более крупной библиотеки, которую я пишу вот тут, на гитхабе. Потом перейду к каркасику для приложений, состоящих из менюшек (что покрывает на удивление много случаев). Получить эту штуку на ComputerCraft'овский комп можно вот так: openp/github get D-side/luaCC/master/bind.lua bind Такие дела. Развлекайтесь! Надеюсь, скоро принесу ещё каких-нибудь плюшек.
  11. Это вы меня не поняли =)Меня интересует конкретный способ получения данных компьютером. Функция в API, например. Формат данных. Устройство. Ссылка тоже сгодится, даже на английском. Меня интересует технический состав проблемы. А решение - это уже второй этап.
  12. Подключить можно хоть редстоуновым проводом, но какие данные это даст? Редстоун позволит в произвольный момент выключать реактор, например. В сочетании с софтиной, поддерживающей цикл вкл/выкл, это обеспечит более-менее стабильную работу, но потребует предварительных расчётов/оценок. Никаких данных с реактора таким способом не получить.Я делал на СС выключатель для реактора, под энергохранилище - оно давало сигнал редстоуном при заполнении, реактор выключался на время, и не включался, пока хранилище не переставало давать сигнал или не истекала задержка.
  13. Это всё круто, но с какой аппаратуры эти показатели получать? Измерительные приборы соответствующие есть?
  14. Эм, привет. Давай конкретнее - какое аппаратное обеспечение есть, под какой комп, за чем следить, что делать?
×
×
  • Создать...