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

Лидеры


Популярный контент

Показан контент с высокой репутацией 07.09.2021 во всех областях

  1. 2 балла
    GUI и десктопное окружение != OS Если интересует тема, есть литература: Operating Systems: Three Easy Pieces (wisc.edu) Expanded Main Page - OSDev Wiki
  2. 1 балл
    Ищу сервер с нормальным онлайном и модом OpenComputers
  3. 1 балл
    Всё лето я отдыхал, даже про форум забыл, но я снова тут с новой идеей Решил я как-то написать ОС. Дальше новой темы для OpenOS не зашёл. Через месяц повторил попытку, забыл и забросил. Но на этот раз я пгставил себе цель - написать хотя-бы альфа версию СВОЕЙ операционки для опен компов. Разработка пока не началась, думаем над некоторыми вещами. Да, именно ДУМАЕМ. Я теперь не один. Пока что не буду говорить об этом человеке, мало ли... Вы можете нам помочь! Если вы программист, и вы хотели бы учавствовать в жтом, напишите мне в ЛС, с удовольствием приму вас.
  4. 1 балл
    Здравствуйте, а приложение уже отвисло?
  5. 1 балл
    Сколько бы вас там ни было, нет смысла создавать тему в разделе "Программы" без самих программ. Переношу тему в Беседку. В чём именно поучаствовать? В чём суть этой системы? Чем она будет отличаться от других?
  6. 1 балл
    В связи с отделением mineOS от OpenOS установщик больше не актуален. Часик тыканья, шараханья в тоннах кода и собственно вот минисборка на новый установщик. Версии не совсем прям свежие, все библиотеки от 28 декабря 2017 года. Надеюсь кому-то поможет. wget https://www.dropbox.com/s/47kk5fjbva6bp60/imageInsall.lua?dl=1 Скачать, запустить, само все поставит.
  7. 1 балл
    Всем привет! Есть такая задача: на входе строка с экранированными управляющими символами: "Lorem ipsum \\n dolor sit amet", на выходе она должна быть такой "Lorem ipsum \n dolor sit amet". Как можно сделать это максимально компактно? Заранее благодарен)
  8. 1 балл
  9. 1 балл
    Вот полное решение. local function processEscapes(str) return (str:gsub("\\u{(%x+)}", function(hex) return utf8.char(tonumber(hex, 16)) end) :gsub("\\(%d%d?%d?)", function(dec) return string.char(tonumber(dec, 10)) end) :gsub("\\x(%x%x)", function(hex) return string.char(tonumber(hex, 16)) end) :gsub("\\z%s*", "") -- skip whitespace :gsub("\\\n", "\n") :gsub("\\([abfnrtv\\\"'])", { a = "\a", b = "\b", f = "\f", n = "\n", r = "\r", t = "\t", v = "\v", ["\\"] = "\\", ['"'] = '"', ["'"] = "'", })) :gsub("\\(.)", function(c) error("invalid escape sequence: \\" .. c) end) end P. S. Форум убивает форматирование, не спрашивая меня.
  10. 1 балл
  11. 1 балл
    Как я понял тебе нужно заменить \{char} на управляющий байт? local someText = "Lorem ipsum \\n dolor sit amet" local result = someText:gsub("\\(%w)", { a = "\a", b = "\b", f = "\f", n = "\n", r = "\r", t = "\t", v = "\v", }) На данный момент я имею такое решение.
  12. 1 балл
    @NEO , да, неправильно описал задачу, тут конкретно string. Есть ли вариант с ним?
  13. 1 балл
    Тут неясно, данный текст является луашным стрингом или обычным текстом? Если луашный стринг - тогда мой код работать не будет.
  14. 1 балл
    https://www.lua.org/cgi-bin/demo local someText = "Lorem ipsum \\\\n dolor sit amet" print(someText) print(string.gsub(someText, "\\\\(%w)", "\\%1")) Вывод
  15. 1 балл
    @NEO , спасибо, а можно, пожалуйста, пример использования?) Подставлял вместо someText свою строку, выход идентичен входу.
  16. 1 балл
    local result = string.gsub(someText, "\\\\(%w)", "\\%1") -- Первый вариант local result = someText:gsub("\\\\(%w)", "\\%1") -- Второй вариант Если быстро - то только так. Но нужно конвертировать управляющий символ в нужный байт.
  17. 1 балл
    Качаешь лаунчер и там все написано и перечислено. ОС на техносерверах Нео и ТМ. Чанклодеров к слову там нету
  18. 1 балл
  19. 1 балл
    Где можно сборку чекнуть?
  20. 1 балл
    Последняя. 1.7.5. Майнкрафт 1.7.10
  21. 1 балл
    А что там по версиям?
  22. 1 балл
    Я думаю что на всех техничиских серверах. Но точно ОС есть на ТМ и НеоТех
  23. 1 балл
    На каком сервере кристаликса поиграть с OC можно?
  24. 1 балл
    Денег на лицуху нету)
  25. 1 балл
  26. 1 балл
    Dreamfinity? --- хз cristalix? --- время от времени чанки вайпаются сами по себе. Иногда приходиш а МЕ сети уже нету . Но такто раздрешено почти все. Чанклодеры имбоавтофермы. И намного больше модов чем на других проектах mcskill? --- у админов этого сервера фетиш на то что б небыло автоферм. Потому там нужно жить в шахте. Да и они жёсткие противники чанклодеров. Только на грег теч они осталсь. Но с плюсов ОС даж есть на магике и питается он маной. P.S. на 1.7.10 серверах ОС версии 1.7.2
  27. 1 балл
    Что делать, если сайт возвращает 403? local internet = require("internet") local response = internet.request("http://logs.s12.mcskill.net/Hitechcraft_public_logs/22-07-2021.txt") for chunk in response do io.write(chunk) end print()
  28. 1 балл
    Это ещё что. Я на прошлой неделе пытался эту страницу в браузере открыть. Браузер, конечно, старый, и давно уже не обновляется для Windows XP, но он вполне обычный легальный браузер. Я раз 10 пытался доказать, что я не робот, помечая фотографии то светофоров, то грузовиков. В итоге страницу я так и не посмотрел. Окей, Гугол, я робот.
  29. 1 балл
    лол, в майне уже не работает такс, оказывается ещё и посредник CloudFlare палки в колёса вставляет скрин http запроса из майна: error code: 1010 The owner of this website has banned your access based on your browser's signature видители ему не нравится header Java/1.8.0_251 который OpenOS сам подставляет в запрос добавил header User-Agent "Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1" вроде помогло, ну и морока
  30. 1 балл
  31. 1 балл
    Ого! А в эмуляторе без ожидания что-ли работало? В Майнкрафте-то всегда ждать приходилось.
  32. 1 балл
    как оказалось нужно было подождать finishConnect() код выше поправил, теперь работает и в майне
  33. 1 балл
  34. 1 балл
  35. 1 балл
  36. 1 балл
    нет, но если способ будет найден, то есть уже готовый парсер сообщений кстати в эмуляторе в данный момент прога работает по неизвестной причине ддос защита сайта временами отключена
  37. 1 балл
    Я не уловил взаимосвязи. Эти наработки помогают обойти ошибку 403?
  38. 1 балл
    поделюсь наработками, может кому нибуть пригодятся https://pastebin.com/1gfatCAE
  39. 1 балл
    Тогда промежуточный сервер поможет. Причём, лучше было бы эти огромные файлы не скачивать и не хранить, а просто перенаправлять запросы к файлам на целевой сервер. Но такое решение выйдет далеко за рамки Lua и OpenComputers.
  40. 1 балл
    Так ошибка конкретно при доступе через oc на сервере. Сам сайт находится в свободном доступе.
  41. 1 балл
    Если движок сайта выдаёт ошибку 403, то обычно это никак не обойти. Если доступ блокируется по IP, то может помочь доступ через прокси. Если ошибка выпадает не постоянно, тогда, пользуясь временной возможностью, можно залить файлы на промежуточный сервер. Но какой в этом смысл, если требуется актуальная версия логов?
  42. 1 балл
    Идея в том, чтобы как-то это обойти. Если бы их можно было куда-то залить и после беспроблемно скачать.
  43. 1 балл
    путём энных извращений слепил какаху для вывода последних сообщений из логов принтит сообщения с задержкой 5 сек (можно поиграться со значением)
  44. 1 балл
    код 403 доступ запрещён, (попросить админа чтоб открыл доступ в конфигах мода OpenComputers) но их явно не просто так заблокировали Другой подвох, что логи слишком большие для OpenComputers, на этом сайте предпринимали попытки чтения по частям, но ничего рабочего я не нашёл
  45. 1 балл
    Ну в данном случае речь была о написании простых программ на C, C++ (Lua в таких машинах использовать не очень удобно, да и работает он тут, ИМХО, медленнее оригинального OC), не требующих API. Вернее о том, что нужно для их написания и как этим пользоваться. Ибо я, за отсутствием руководств, столкнулся с кучей проблем при сборке (с которыми, помимо меня, пришлось разбираться fingercomp-у и другим старожилам), поэтому и думаю, что руководство в таких вещах не помешает. Особенно учитывая, что модом могут заинтересоваться не только умные дядьки, но и обычные игроки, желающие поковыряться в моде, но не умеющие в программистские пляски с бубном)).
  46. 1 балл
    Рад твоему энтузиазму, однако, там написано, что щас не рекомендуется юзать апи)
  47. 1 балл
    Критика принимается? Вот и отлично, пора бы мне набивать количество постов здесь. Итак, что мне не нравится. Хотя нет, сначала отмечу, что эта утилита является велосипедом с tape.lua (см. tape wipe). А теперь отбросим этот факт в сторону и проедемся уже по коду. Стиль кода необычный. Обычно люди так ифы делают: -- Вариант 1 if condition then doCode() end -- Вариант 2 if condition then doCode() end Хотя я второй вариант не люблю и так не делаю. Ещё по стилю: всякие операторы типа ==, ~= и т. д. лучше отбивать пробелами. Дальше буду проходиться по порядку строк в пасте. Сначала будет номер строки, потом комментарий, затем под спойлером оригинальный код, а потом как надо. L3. Я сомневаюсь, что "Event" будет работать. Замени на "event" local event = require("event") L11-12. Переменные size и label объявлены без указания local, поэтому они стали глобальными. Глобальные переменные редко когда требуются, а чаще они просто мешают и творят лишние баги. Поэтому когда без них можно обойтись, делайте переменные локальные. local size = tape.getSize() local label = tape.getLabel() L14-19. Ветки отличаются лишь тем, что при not label пишется "N/A". Дальше нигде отсутствие значения не используется, поэтому код можно сократить, просто присвоив "N/A", если соблюдается not label. Для таких ситуаций офигенно подходит оператор or (подробнее). Кроме того, print уже и так ставит \n, поэтому лучше разделить на два принта. label = label or "N/A" print("Tape label: " .. label) print("Size: " .. size .. " bytes") Кроме того, зачем просить пользователя самому отмотать кассету в начало, если то же самое делается одной строчкой кода? tape.seek(-math.huge) L28. Для повторения одного символа несколько раз используется функция string.rep. Переменная опять не локальна. И что значит "x"? local blockSize = 256 local block = string.rep("\0", blockSize) L30-31. Используем вместо 256 переменную blockSize. И устанавливаем её в качестве шага цикла (0, 256, 512, 768, 1024, ...), потому что так логичнее. И мы не цикл итерируем, поэтому имя у переменной i не соответствует цели использования. for pos = 0, size, blockSize do L32-33. Используем переменную block. tape.write сама уже отматывает кассету на позицию, следующую за последним записанным байтом, зачем ещё раз отматывать? tape.write(block) L34. Нет, конечно, можно дать ему заспамить всю консольку прогрессом, но я бы предпочёл немного украсить: заставить его прогресс писать на одной и той же строке. Для этого можно использовать функцию term.clearLine (библиотека term) для очистки строки и io.write вместо print, чтобы не переносился курсор на следующую строку. Первый кусок, который с require, надо поместить в начало файла, где остальные реквайры. local term = require("term") term.clearLine() io.write(pos .. "/" .. size) L37. С ней проблем нет в оригинальном коде. Однако мы изменили вывод прогресса, так что после выхода из цикла на строке, где стоит курсор, будет находиться ещё какой-то текст с прогрессом. Поэтому надо очистить её перед принтом. term.clearLine() print("Tape has been wiped.") Конец. Итого мы получаем вот такой код мечты: local component = require("component") local event = require("event") local term = require("term") local tape = component.tape_drive if tape.getSize() == 0 then print("Tape drive is empty!") os.exit(1) end local size = tape.getSize() local label = tape.getLabel() label = label or "N/A" print("Tape label: " .. label) print("Size: " .. size .. " bytes") print("Press [Y] to wipe the tape. It may take a while.") local _, _, keyCode = event.pull("key_down") if keyCode ~= 121 then os.exit(1) end tape.seek(-math.huge) local blockSize = 256 local block = string.rep("\0", blockSize) for pos = 0, size, blockSize do tape.write(block) term.clearLine() io.write(pos .. "/" .. size) end term.clearLine() print("Tape has been wiped.")
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...