Zer0Galaxy
-
Публикации
1 220 -
Зарегистрирован
-
Посещение
-
Победитель дней
189
Сообщения, опубликованные пользователем Zer0Galaxy
-
-
А что если использовать контейнер для плат? Если робот сможет самостоятельно поместить в него плату, то узнает ее адрес.1. Можно ли узнать адреса компонент и блоков, просто лежащих в инвентаре робота? -
Это что за оператор? В Луа 5.2 не работает.Оператор // -
Выкладываю инфу по OpenNet для тех, кто захочет этим заняться.
Сеть является трехуровневой.
1-й уровень:
Роутеры первого уровня являются ядром всей Сети. Они должны быть расположены компактно и объединены друг с другом в локальную сеть при помощи проводных сетевых карт. Кроме того, каждый роутер должен иметь как можно большее число связанных карт (tunnel) для обмена с роутерами второго уровня.
ПО роутера 1-ого уровня: https://preview.c9users.io/krutoy242/opennet/_source/on_router/ONrouter.lua
Так же роутеры 1-ого уровня требуют наличия библиотеки thread.
2-й уровень:
Роутеры второго уровня или WiFi-роутеры располагаются в произвольных точках карты и могут находиться даже в других мирах. WiFi-роутер должен иметь в своем составе связанную карту, чья карта-близняшка стоит соответствующем роутере 1-ого уровня. Так же WiFi-роутер должен иметь беспроводную сетевую карту для связи с ОН-клиентами. Опыт показывает, что надежный доступ к Сети обеспечивается в радиусе 350 блоков от WiFi-роутера.
ПО роутера 2-ого уровня: https://preview.c9users.io/krutoy242/opennet/_source/WiFi/WFrouter.lua
3-й уровень:
ОН-клиенты - компьютеры конечных пользователей. Требуют наличия беспроводной сетевой карты и библиотеки opennet.lua
https://preview.c9users.io/krutoy242/opennet/client/lib/opennet.lua
-
6
-
-
Вопрос: кто конкретно займется восстановлением Сети?
@Krutoy, можешь выложить ссылки на ПО серверов и роутеров ОН? Меня, похоже, на С9 забанили.
-
Новую версию можно установить путем команды: pastebin get -f kLXrvXmH guessTheWord_v0.9.luafunction logo() gpu.setResolution(126, 50) gpu.setBackground(colorsLogo.background) term.clear() gpu.fill(1,1,126,50," ") --скин gpu.setBackground(colorsLogo.brown) gpu.fill(98,11,16,6," ") gpu.fill(90,22,8,8," ") gpu.fill(114,22,8,8," ") gpu.setBackground(colorsLogo.green) gpu.fill(98,9,16,2," ") gpu.fill(98,11,4,1," ") gpu.fill(106,11,4,1," ") gpu.set(112,11," ") gpu.set(98,12," ") gpu.setBackground(colorsLogo.black) gpu.fill(90,17,32,4," ") gpu.fill(98,21,16,21," ") gpu.setBackground(colorsLogo.white) gpu.fill(90,21,8,1," ") gpu.fill(114,21,8,1," ") gpu.fill(98,28,16,2," ") --текст --newbie gpu.setBackground(colorsLogo.green) gpu.fill(16,17,8,1," ") gpu.set(24,18," ") --n gpu.set(28,18," ") gpu.fill(30,17,6,1," ") gpu.set(36,18," ") --e gpu.set(40,17," ") gpu.set(44,19," ") gpu.set(48,17," ") --w gpu.fill(52,14,2,4," ") gpu.set(54,18," ") gpu.set(56,17," ") gpu.set(60,18," ") --b gpu.set(64,15," ") gpu.set(64,17," ") --i gpu.set(68,18," ") gpu.fill(70,17,6,1," ") gpu.set(76,18," ") --e gpu.setBackground(colorsLogo.brown) gpu.fill(16,18,2,4," ") gpu.fill(24,19,2,3," ") --n gpu.fill(28,19,10,1," ") gpu.set(28,20," ") gpu.fill(30,21,8,1," ") --e gpu.fill(40,18,2,3," ") gpu.fill(42,21,8,1," ") gpu.set(44,20," ") gpu.fill(48,18,2,3," ") --w gpu.fill(52,18,2,3," ") gpu.fill(52,21,8,1," ") gpu.fill(60,19,2,2," ") --b gpu.fill(64,18,2,4," ") --i gpu.fill(68,19,10,1," ") gpu.set(68,20," ") gpu.fill(70,21,8,1," ") --e --present gpu.setBackground(colorsLogo.black) gpu.fill(10,33,2,8," ") gpu.set(12,34," ") gpu.set(14,33," ") gpu.fill(12,37,6,1," ") gpu.fill(18,34,2,3," ") --p gpu.fill(22,33,2,5," ") gpu.set(24,34," ") gpu.set(26,33," ") gpu.set(30,34," ") --r gpu.fill(34,34,2,3," ") gpu.fill(36,33,6,1," ") gpu.fill(36,35,8,1," ") gpu.fill(36,37,8,1," ") gpu.set(42,34," ") --e gpu.fill(48,33,8,1," ") gpu.set(46,34," ") gpu.fill(48,35,6,1," ") gpu.set(54,36," ") gpu.fill(46,37,8,1," ") --s gpu.fill(58,34,2,3," ") gpu.fill(60,33,6,1," ") gpu.fill(60,35,8,1," ") gpu.fill(60,37,8,1," ") gpu.set(66,34," ") --e gpu.fill(70,33,2,5," ") gpu.fill(72,33,6,1," ") gpu.fill(78,34,2,4," ") --n gpu.fill(84,31,2,6," ") gpu.fill(82,32,6,1," ") gpu.set(84,37," ") --t gpu.setForeground(colorsLogo.black) gpu.setBackground(colorsLogo.background) gpu.set(100,49,"for www.computercraft.ru") os.sleep(5) endНе верю, что это программист написал. В Луа, вообще то, таблицы имеются и циклы. Всё это можно было закодить гораздо меньшим количеством символов.
-
-
Нет, что ты. Нужно непременно вызывать функцию math.pow, которая активирует "скрытый режим".
-
1
-
-
Когда делаю как ты пишешь, программа не обновляет данные.

Обновляет, но при этом экономит энергию. Поэтому обновления происходят значительно реже.
-
1
-
-
Да, скрытый режим "power" существенно экономит энергию.Для этого нужно активировать специальный скрытый режим "power"
СкриншотыМежду этими двумя компами лучше поставить распределитель. Иначе они экраны и клавиатуры попутают.
-
2
-
-
Целью данной игры вижу достижение определенного результата за минимальное время. Т.е. прежде чем начать кликать, игрок должен разработать стратегию: покупать дешевого кликера или экономить на дорогого.
-
Пожелания:
Разбивать числа на триады.
Подсвечивать доступные для покупки кликеры.
-
Форма не выводит знаки поверх себя, кроме своих частей
Создавать формы и компоненты следует до запуска функции run, а не по нажатию кнопки. Попробуй так:
local wce = require("WCE") local term = require("term") local forms = require("forms") local event = require("event") local buf = require("doubleBuffering") local component = require("component") gpu = component.gpu w, h = gpu.getResolution() ------functions------- local function exit() term.clear() forms.stop() --останавливаем выполнение среды end local function startgame() term.clear() -- этот clear можно не делать. Экран всё равно перетрется формой GameForm:setActive() --Делаем активной форму игры -- печатаем что надо for i=1,w do wce.PrintHere(i, h, "█") end -- buf.line(1, h-10, w, h-10, 0xa9a9a9, 0xa9a9ff, "█") buf.draw() end -- Создаем форму меню MenuForm=forms.addForm() MenuForm.border=1 ButtonExit=MenuForm:addButton(w/2, h-10, "Exit", exit) ButtonStart=MenuForm:addButton(w/2, h-12, "Start", startgame) --по нажатию этой кнопки активной станет GameForm -- Создаем форму игры GameForm=forms.addForm() --по нажатию этой кнопки активной станет MenuForm ButtonExitG=GameForm:addButton(w-10, h-1, "Exit", function() MenuForm:setActive() end) GameForm.border=1 --Запускаем среду на выполнение forms.run(MenuForm) -
Ты имеешь в виду трансляцию sql-запросов в реальный мир? А разве Тоторо-банк не так работает?Эхх... если бы это была библиотека для работы с реальным sql... а так это просто подобие...
-
Ну да. Всё чего Леша не понимает - дичь. А всё что дичь - не SQLЗдесь нет ни лексера, ни парсера. Только матч. Причем кривой. Вместо CREATE TABLE something ... пишем какую то дичь.Здесь нет SQL.
-
5
-
-
Скорее всего проблема в алгоритме расчета расстояния до выхода (бесконечный цикл или вечная рекурсия). При правильном подходе много памяти это жрать не должно.В принципе не должно возникнуть никаких проблем с нагрузкой на процессор. А вот с требуемой памятью проблема может и появится. Например, я в прототипе под OpenOS сделал такую полезную функцию, которая все случайно созданные комнаты прогружает и заносит в таблицу, указав в этой же таблице минимальное расстояние до выхода. В добавок в этой таблице будут хранится свойства комнат, давление, температура, разного рода вещи, ловушки и прочее. То есть нагрузка больше падает на оперативную память чем на процессор или видеокарту. -
Данная версия системы управления базами данных (СУБД) под операционную систему OpenOS разработана для изучения особенностей работы реальной СУБД MySQL.
Предупреждаю сразу: в ней реализованы далеко не все функции MySQL. Некоторые я посчитал несущественными или избыточными, до некоторых просто не дошли руки. Но то, что есть позволяет создавать адаптированные под Луа базы данных, и формировать несложные SQL-запросы к ним.
Для установки СУБД на ОС-компьютер выполните команду
pastebin run -f bS1kRJKw
Если в компьютере установлена интернет-карта, вы должны увидеть такой текст:
Добро пожаловать в программу установки СУБД MySQL Выберите тип установки: 1. Серверная часть 2. Клиентская часть 3. Полная установка
Поскольку данная версия пока не поддерживает обмен между клиентом и сервером по сети, выбираем полную установку.
После загрузки всех необходимых файлов, программа предложит перегрузить компьютер. Но мы пока не будем перегружать, а рассмотрим содержимое файла etc/dbms.cfg
--Файл конфигурации СУБД MySQL DBpath="/mysql_db/" port=3306 password=""
Параметр DBpath содержит путь к папке, в которой будут храниться создаваемые базы. Если эта папка отсутствует, то при запуске СУБД она будет создана автоматически. Измените этот параметр, если значение по умолчанию вас не устраивает.
Параметр port содержит номер порта, через который, я надеюсь, когда нибудь можно будет обратиться к СУБД по сети.
Параметр password призван защищать доступ к базам паролем, но эта опция пока не реализована и вряд ли когда нибудь будет.
Так же к серверной части относится собственно СУБД - файл boot/dbms.lua, который благодаря своему расположению стартует автоматически и работает в фоновом режиме, что позволяет запускать на одном компьютере и сервер и клиент.
Вот теперь настало время перегрузить компьютер.
В клиентскую часть входят библиотека lib/mysql.lua и программа-монитор bin/mysql_mon.lua предоставляющая доступ к базам данных из командной строки.
Библиотека mysql предоставляет следующие функции для работы с базами данных:
mysql.connect ( server , username , password ) --Открывает соединение с сервером MySQL и возвращает указатель на сессиюmysql.close (session) -- Закрывает соединение с сервером MySQLmysql.data_seek(result, row_number) -- Перемещает внутренний указатель в результате запросаmysql.error(session) -- Возвращает строку ошибки последней операции с MySQLmysql.fetch_array(result , result_type) -- Обрабатывает ряд результата запроса, возвращая ассоциативный массив, численный массив или оба.mysql.fetch_assoc(result) -- Обрабатывает ряд результата запроса и возвращает ассоциативный массив.mysql.fetch_row(result) -- Обрабатывает ряд результата запроса и возвращает неассоциативный массив.mysql.num_fields( result ) -- Возвращает количество полей результата запросаmysql.num_rows( result ) -- Возвращает количество рядов результата запросаmysql.query( query, session ) -- Посылает запрос MySQL--Строка запроса НЕ должна заканчиваться точкой с запятойЕсли в функции, использующей указатель сессии, параметр session пропущен, будет использоваться последняя активная сессияПодробное описание этих и других функций можно почитать на сайте.При реализации функции query я сделал одно небольшое допущение: все служебные слова запроса следует писать строчными (маленькими) буквами.
SQL-монитор mysql_mon позволяет отправлять запросы к СУБД из командной строки. Я старался сделать его похожим на Command Line Client, поэтому объяснять суть его работы не вижу смысла. Для выхода из программы введите "exit".
Пример работы с СУБД:
Предположим, мы хотим создать базу данных пользователей форума с учетом их репутации. Для создания базы воспользуемся утилитой mysql_mon.
После запуска монитора вводим команду:
create database forum;
Эта команда создаст новую базу данных с именем "forum". Команда должна заканчиваться точкой с запятой.
После создания базы, делаем ее активной для текущей сессии:
use forum;
Создадим в этой базе таблицу users. Таблица будет содержать следующие поля:
- id - идентификатор пользователя (числовое);
- name - имя пользователя (строковое);
- rep - репутация (числовое).
Такая таблица создается командой:
create table users (id int auto_increment, name varchar, rep int);
Создадим в таблице несколько записей командой:
insert into users (name, rep) values ('user_name', 'user_rep');Поскольку полю id мы установили признак auto_increment, это поле заполняется автоматически.
Вот что у меня получилось:
Просмотреть содержимое созданной таблицы можно выполнив команду
select * from users;
Для выхода из mysql_mon введите команду exit (без точки с запятой)
Теперь предположим, нам необходимо найти в этой базе тех пользователей, чья репутация превышает 2000, и расположить их в порядке возрастания репутации. Для этого можно воспользоваться уже известным mysql-монитором, а можно выполнить вот такой код:
local mysql=require("mysql") --подключаем библиотеку -- пытаемся подключиться к sql-серверу -- поскольку сервер находится на локальной машине, в параметрах ничего не указываем local result=mysql.connect() -- анализируем результат и, при необходимости, выдаем сообщение if not result then print(mysql.error()) return end -- открываем базу данных "forum" result=mysql.query("use forum") if not result then print(mysql.error()) return end -- посылаем sql-запрос на получение выборки result=mysql.query("select name, rep from users where rep>2000 order by rep") if not result then print(mysql.error()) return end -- преобразуем результат запроса в ассоциативный массив и выводим его построчно for user in mysql.fetch_arrays(result, mysql.ASSOC) do print(user.name, user.rep) end -- закрываем соединение с сервером mysql.close()Пожалуйста оставляйте в этой теме пожелания какие функции из нереализованных еще следует реализовать и замечания о несоответствии работы существующих функций.
-
7
-
-
Вопрос №1. Зачем нужна Web-часть? Неужели информацию о сессиях и паролях нельзя хранить на супервайзере без выхода в реальный мир?
Вопрос №2. Анализ ПО виртуального командного блока показал его абсолютную незащищенность от несанкционированного использования. В случае возрождения банка это ПО планируется оставить без изменения?
-
@LeshaInk, а давай сделаем
-
1
-
-
А кто ни будь портировал mysql на OpenOS?Нужно переписать и помочь построить если поможешь сделать на mysql и чтобы все не багалось и помочь протестить буду благодарен) -
-
Добавлены функции load и draw.
Пример наложения изображения на пентаграмму:
g.setColor(0xff0000) g.circle(80,50,44) g.polygon(80,93, 54,16, 120,64, 40,64, 106,16, 0xffff00) g.draw("pic.png",1,1)-
6
-
-
-
-

"Двухсторонние" таблицы lua
в Разные (отсортировать)
Опубликовано:
table.red и table["red"] , в общем равнозначные записи. Только в первом случае в качестве ключей нельзя использовать служебные слова Луа и строки с пробелами или особыми символами.