Перейти к содержимому
Farlang

Автоматизированная запись дискет

Рекомендуемые сообщения

Что?

Данный автомат может принимать дискеты у пользователя, записывать на них что угодно (предоставляя пользователю выбор, что именно записывать) и возвращать их ему. Также автомат может и не предоставлять выбор пользователю, становясь таким образом полностью автоматизированным (хотя вряд ли его получится включить в АЕ систему, ведь и на входе, и на выходе дискеты).

 

Зачем?

Идея у меня появилась после чтения публикации в блоге Totoro "Как собрать шахтерского робота" (http://computercraft.ru/blog/11/entry-338-kak-sobrat-shakhterskogo-robota/) а именно следующих строк:

Также можно поискать игрока с ником Totoro и подоставать его, чтобы дал дискету с программой нахаляву. Тогда и компьютер не нужен.

Я подумал, что данную задачу (раздача дискет с определенными данными) можно легко автоматизировать. Так и вышло - программа занимает чуть более ста строк, но все-таки полезна. Так можно избавить новичков от необходимости крафтить еще один мануал - выданный в начале игры будет израсходован на Lua BIOS (кстати, их запись тоже можно автоматизировать), а для OpenOS пришлось бы скрафтить еще. Но не теперь.

 

Как?

Пользователь бросает дискету в воронку, откуда она, пройдя воронковый конвейер, попадает в дисковод. После этого пользователь нажимает на мониторе кнопку желаемой программы или кнопку извлечения дискеты (отключается). В полностью автоматизированном режиме компьютер каждые n (задается) секунд проверяет, не попала ли к нему дискета, и пишет на нее данные по предварительно заданному пути. Поиск файловой системы дискеты проверяется методом исключения - те файловые системы, что были на момент запуска программы, считаются не дискетами. Поэтому важно запускать программу лишь убедившись, что в дисководе пусто.  Дискета форматируется и на нее пишутся новые данные. Далее компьютер отключает редстоун-сигнал от выходной воронки, которая подключена к дисководу, и она забирает дискету из него. По воронковому конвейеру дискета попадает к роботу, единственная задача которого - выкидывать все из инвентаря (код робота на EEPROM не приведен ввиду его очевидности) (про диспенсер вспомнил только пока эту тему писал). в диспенсер и попадает. Так дискета возвращается к пользователю.

 

Предварительная настройка

Можно настроить:

  • Режим работы: спрашивать что писать или нет (переменная ASK).
  • Адрес до директории с данными для записи (в режиме полной автоматизации) или с поддиректориями, список которых будет выведен для выбора пользователю (переменная DISKS).
  • Период проверки наличия дискеты в полностью автоматизированном режиме (переменная SLEEP_TIME).
  • Сторона, c которой проведен редстоун-кабель до выходной воронки (переменная HOPPER_SIDE).
  • Включение/выключение подгонки разрешения экрана под количество кнопок в режиме частичной автоматизации (переменная CHANGE_RES).
  • Возможность извлечения дискеты без её форматирования и записи новых данных в режиме частичной автоматизации. Для включения этой возможности создайте директорию _[EJECT] по адресу, который был задан переменной DISKS, т.е. DISKS/_[EJECT].
  • Названия кнопок. Они задаются названиями поддиректорий DISKS. В названиях нельзя использовать: звездочки, слеши, пробелы и прочие сомнительные символы, а также кириллицу. Подчеркивание _ будет удалено, если оно идет первым (как в _[EJECT]).

Инструкция конечному пользователю

В основном не нужна. Однако могут пригодиться значения мигания кнопок:

  • Если кнопка мигнула очень быстро, то это значит, что дискета не найдена. Если вы уверены, что бросили ее, то нажмите кнопку снова - скорее всего она просто не успела дойти.
  • Медленное мигание означает, что дискета была записана и возвращена пользователю. Если ее нет, то она потерялась (см. далее). Этого практически не происходит в правильно построенных автоматах.

Возможные проблемы

Злоумышленник может забить весь входной воронковый конвейер каким-нибудь мусором или readonly дискетами.

Решение: не будьте злоумышленниками.

 

Робот выбрасывает дискету куда-то не туда, и пользователь не может её забрать.

Решение: минимизируйте количество полостей в автомате. Блоки с некубической геометрией (кабеля, например) и свободные для прохода блоки (факелы, таблички, тростник etc.) также являются полостями. Чем их меньше, тем меньше шанс на потерю дискеты. Или можно поставить диспенсер вместо робота, но я не уверен, решит ли это проблему. А редстоун-кабель подвести от воронки, только один-два репитера воткнуть. Лучше диспенсер, даже если не решит, то хоть серверу поменьше считать. И заряжать его не надо. Диспенсер проверен и рекомендуется для использования. К нему надо подвести редстоун-сигнал от воронки с одним репитером в режиме максимальной задержки.

 

Какой-нибудь баг вылезает и все портит.

Решение: пните меня.

 

Cкриншоты

http://i.imgur.com/JRYOZsc.png - как это может выглядеть для пользователя.

http://i.imgur.com/3lBpWPX.png - без досок для большей наглядности.

http://i.imgur.com/XI3rPbd.png - как выглядел сломанный интерфейс.

 

Скачать

http://pastebin.com/0A5S8SDJ

 

Благодарности

  • Totoro за идею.
  • AlexCC за внесение в вайтлист (пришлось прогу написать, чтобы не получилось что зря вносил).

UPD: Обнаружен и исправлен баг: попытка записи readonly дискеты приводила к неправильному отображению интерфейса (не влияя на функционал). Также подтверждена работоспособность программы с диспенсером.

Изменено пользователем Farlang

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Робота надо закрыть дроппером и сделать очистку дроппера, а то придет грифер и накидает мусора в твоего робота или будет перехватывать дискеты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

До робота мусор не дойдет, он застрянет на входном конвейере. Вообще да, я думал добавить сундук в роли буфера для мусора, и подрядить робота его чистить. Но возможность спама readonly дискетами все еще останется, да и эти ужасающие воронковые конвейеры плохо для этого подходят. Добавление сундука заставило бы поднять входную воронку еще на 1 блок выше, неудобно будет. С транслокаторами было бы лучше. А вообще на сервере вайтлист же, откуда там гриферы? Поэтому я предложил выше решить эту проблему не будучи злоумышленниками.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Было бы неплохо сделать тоже самое, но для HDD, а то очень утомительно на двадцать дисков устанавливать OpenOS

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всегда хотел спросить, зачем использовать такие теги? 

http://puu.sh/iEm7U/68e18f0928.png

http://puu.sh/iEmEJ/9c24a51a2c.png

  :facepalm:  :smile44:

 

типа, велосипеды, долгА мучился, еще остались баги, солонка и перечница, by Bob, многа дискаф можна записать, слон, табуретка, для чайников и кастрюль, костыли и инвалидные коляски, мой первый код, ништяковая музяка :D

 

Вы что себе думаете, что по таким тегам вашу тему найдут и откроют?

 

Теги!

Тег (иногда тэг [1], англ. tag — «ярлык, этикетка, бирка; метить» ) — метка как ключевое слово, в более узком применении идентификатор для категоризации, описания, поиска данных и задания внутренней структуры.

 

 

Например, если вы собираетесь запостить сообщение про антивирус Касперского, то вашими тегами будут: антивирус, вирус, безопасность, защита. Четырех тегов уже достаточно. Можно расширить, конечно, указав в тегах: черви, трояны и т.д.

 

Это облегчит жизнь поисковым системам и людям, ищущим информацию в схожих темах (при чтении одной темы человек может быстро перейти по одноименным тегам в схожую тему)

 

Если не знаете, какие теги поставить, оставьте лучше пустыми!

Или напишите теги программирование, Lua, программы, opencomputers. Этого достаточно! Если это гайд, пишите теги - гайд, имя_мода на англ и ВСЁ!

Но не в коем случае не танки, деффки, велосипеды и майки с трусами. Не ужели это так трудно понять???

 

Не нужно дописывать "Мой первый гайд, не судите строго" в тегах

Буду в ресайклер сносить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всегда хотел спросить, зачем использовать такие теги? 

http://puu.sh/iEm7U/68e18f0928.png

http://puu.sh/iEmEJ/9c24a51a2c.png

  :facepalm:  :smile44:

 

типа, велосипеды, долгА мучился, еще остались баги, солонка и перечница, by Bob, многа дискаф можна записать, слон, табуретка, для чайников и кастрюль, костыли и инвалидные коляски, мой первый код, ништяковая музяка :D

 

Вы что себе думаете, что по таким тегам вашу тему найдут и откроют?

 

Теги!

Тег (иногда тэг [1], англ. tag — «ярлык, этикетка, бирка; метить» ) — метка как ключевое слово, в более узком применении идентификатор для категоризации, описания, поиска данных и задания внутренней структуры.

 

 

Например, если вы собираетесь запостить сообщение про антивирус Касперского, то вашими тегами будут: антивирус, вирус, безопасность, защита. Четырех тегов уже достаточно. Можно расширить конечно указав в тегах: черви, трояны и прочее, до бесконечности.

 

Это облегчит жизнь поисковым системам и людям, ищущим информацию в схожих темах (при чтении одной темы человек может быстро перейти по одноименным тегам в схожую тему)

 

Если не знаете, какие теги поставить, оставьте лучше пустыми!

Или напишите теги программирование, Lua, программы, opencomputers. Этого достаточно! Если это гайд, пишите теги - гайд, имя_мода на англ и ВСЁ!

Но не в коем случае не танки, деффки, велосипеды и майки с трусами. Не ужели это так трудно понять???

 

Не нужно дописывать "Мой первый гайд, не судите строго" в тегах

Буду в ресайклер сносить.

А я  нормальные тэги делаю? :D

А я представляю,человек сломал ногу,пишет в гугле: купить костыли, и попадает на cc.ru :D

Изменено пользователем Asummonster

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Очевидно, это все отголоски системы тегов хабра. Это когда теги служат не для поиска, но для краткого отображения сути поста. Передачи некоего дополнительного смысла, быть может. Этакий tl;dr - прочитал теги и все сразу ясно.

2Doob: проблема с дисками в том, что нет особого блока, куда могут быть вставлены только они. Есть RAID, но диски форматируются при извлечении из него. Значит, простой системой конвейеров не отделаешься, нужен робот. Распознавание по name не поможет, т.к. name у всех OC блоков и предметов один и тот же (недавно точно так было). Можно задать забор предмета из определенных ячеек инвентаря системного блока, но тогда придется использовать один фиксированный тип этого самого блока (алмазный, скорее всего), так как различить робот их не может. Хотя комп может оповещать робота - редстоуном с разной силой, например, чтобы без дорогих вайфаев. Но как робот поймет, где диск на которого записывали, а где диск, с которого записывали? Тут на помощь придет RAID. Вынеся системный диск наружу системного блока, робот, не трогающий RAID, сможет извлечь исключительно тот диск, который и нужен. Как вариант - вместо рейда дисковод с дискеткой. Правда, тогда на всех дисках будут копии проги-автомата, потому что две оси на одну дискету вряд ли влезет, и придется писать корень. Так что лучше RAID. Ну или можно просто использовать для системного диска определенную ячейку, но такой вариант мне не нравится. Все равно перепутаются как-нибудь.

Коротко: может и сделаю когда-нибудь. Ну как я фермера на улучшенный алгоритм движения собрался перевести и до сих пор не перевел.

Изменено пользователем Farlang

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Очевидно, это все отголоски системы тегов хабра. Это когда теги служат не для поиска, но для краткого отображения сути поста. Передачи некоего дополнительного смысла, быть может. Этакий tl;dr - прочитал теги и все сразу ясно.

2Doob: проблема с дисками в том, что нет особого блока, куда могут быть вставлены только они. Есть RAID, но диски форматируются при извлечении из него. Значит, простой системой конвейеров не отделаешься, нужен робот. Распознавание по name не поможет, т.к. name у всех OC блоков и предметов один и тот же (недавно точно так было). Можно задать забор предмета из определенных ячеек инвентаря системного блока, но тогда придется использовать один фиксированный тип этого самого блока (алмазный, скорее всего), так как различить робот их не может. Хотя комп может оповещать робота - редстоуном с разной силой, например, чтобы без дорогих вайфаев. Но как робот поймет, где диск на которого записывали, а где диск, с которого записывали? Тут на помощь придет RAID. Вынеся системный диск наружу системного блока, робот, не трогающий RAID, сможет извлечь исключительно тот диск, который и нужен. Как вариант - вместо рейда дисковод с дискеткой. Правда, тогда на всех дисках будут копии проги-автомата, потому что две оси на одну дискету вряд ли влезет, и придется писать корень. Так что лучше RAID. Ну или можно просто использовать для системного диска определенную ячейку, но такой вариант мне не нравится. Все равно перепутаются как-нибудь.

Коротко: может и сделаю когда-нибудь. Ну как я фермера на улучшенный алгоритм движения собрался перевести и до сих пор не перевел.

 

Проблема в получении слота с диском?

component.filesystem.slot и вообще, слотов для дисков всего два

Запоминаем адреса файловых систем по дефолту, при срабатывании программы ищем новую файловую систему, на нее и пишем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А разве контроллер инвентаря имя не выдаёт?(Лэйбл)Ведь можно просто все дискеты с именем OpenOS отсеивать, а тратить опыт на переименовывание дискет для поломки благотворительной организации-дибилизм :D 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Запоминаем адреса файловых систем по дефолту, при срабатывании программы ищем новую файловую систему, на нее и пишем.

Именно так оно сейчас и работает. Если ты не против вручную диски вставлять-вытаскивать то можешь хоть сейчас их писать. А я говорил про робота, который будет делать это за тебя. component.filesystem.slot - хорошая идея. Передать это значение роботу и о рейде можно окончательно забыть.

 

 

а тратить опыт на переименовывание дискет для поломки благотворительной организации-дибилизм

Что? Я и не собирался переименовывать диски/дискеты. А вот фичу лейблинга можно за пять секунд прикрутить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Что? Я и не собирался переименовывать диски/дискеты. А вот фичу лейблинга можно за пять секунд прикрутить.

Ты не понял:D Я про защиту от ридонли дисков

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А, все, теперь понял о чем ты. Но это не нужно, потому что readonly диски ничего не ломают. Выводится на секунду сообщение об ошибке и дискета выплевывается. Раньше сообщение, правда, висело и портило интерфейс, но после "фикса" term.clear()-ом вообще проблем нет. Про спам readonly дисками я написал, потому что они пройдут фильтр дискетника и сумеют забить конвейер с обоих сторон. А еще в filesystem api вроде была функтсия для проверки, readonly ли фс. Так что если бы была необходимость - то можно было бы и сделать фильтр. Но ее нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...