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

lokin135

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

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

  • Посещение

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

    4

Сообщения, опубликованные пользователем lokin135


  1. Снова привет! Когда-то давным-давно увидел я дома у Fingercomp'a очень интересную хреновину на мониторе, которая показывала расход/прирост энергии в системе. И вот тогда я захотел накодить нечто подобное. НО! Был я тогда еще тем говнокодером, по этому подобное я не мог сделать. Но время шло, учился кодить и вдруг внезапно вспомнил я о той штуке. Закодил, поставил и забыл. Но вот еще время прошло! :D И снова смотрев на свою папочку с программами наткнулся на свой теперешний говнокод. Ну и переписал с новыми фичами (в виде поддержки полупиксилов, что принесло более красивый вид и точность графика) и адекватным кодом (хотя в некоторых моментах я все-же не знал как лучше поступить, и возможно сделал не совсем правильно) :

    image_2018_05_27_20_19_24.pngСлева - старая версия проги, а справа - новая.

     

    График показывает процент энергии от объема, выделяя цветом разницу доступной энергии прошлой точки графика: 

    Point.Y = math.ceil((energy / capacity) * ((ResY-BarY) * 2))
    

    Пройдемся по настройкам:

     

    ​Цвета настраиваются ровно так-же, как и в прошлой проги.

    local ResX, ResY = 100, 50
    local TimeSleep = 2
    
    local BarY = 3/1.5
    local lastX = -1
    
    local drawBar = true
    local nameComponent = "mfsu"
    

    Первые переменные ResX и ResY - разрешение экрана. Можно спокойно настраивать, но только отключив бар сверху.

    TimeSleep​ - время ожидания после прорисовки столбца. В общем скорость движения графика. 

    BarY​ и lastX лучше не трогать) 

    drawBar​ - отвечает за отображение графика сверху.

    nameComponent​ - а вот эта переменная позволяет подключить не только MFSU'шки (да-да, можно подключить хоть 60 их к серверу), но и другие энергохранилища из IC2.

     

    Ссылочки на программу:

    https://lokin135server.ru/PublicRepository/mfsuDrawerEU/mfsu4M.lua (да да, я так и не разобрался с кодировкой)

    pastebin get XygafBBK

     

    Прошлые версии можете глянуть на сервере, но сразу предупреждаю: вы можете получить психическую травму от моего старого кода ​ лучше не смотрите :P

     

    Жду конструктивной критики. Не, ну идеального кода не бывает, верно?

    • Нравится 3

  2. В сетевых технологиях я конечно нуб, по этому могу совсем чутка дать конструктивной критики:

     

    1. В некоторых местах нужно использовать Логические выражения. (51 строка)

    2. Почему переменные для настройки не локальные? 

    3. Я бы сделал отдельные функции "init" и "main", а не вызывал функции где попало.

    4. Ну и обработка ошибок тоже сделана не в лучшем виде. Я бы предпочел занести все ошибки в массив, пробегался по ошибкам через for и предпринимал действия исходя от порядкового номера ошибки. (Хотя... думаю есть способ лучше)


  3. Хелло computercraft! Хочу поделится своей программой по мониторингу состояния 54 (максимум) реакторов (6 блоков по 9 реакторов), которую меня попросили закодить. Вот как все это выгдядит (немного промахнулся с разрешением, по этому по краям не симметрично, но вроде не так сильно в глаза бросается): 

    2018_05_17_18_06_44.png

     

    Цвет напряжения который выдает реактор и текст "Реактор №1" выделяется красным или зеленым, в зависимости от состояния активности: если реактор выдает 1 и больше EU/t (другими словами - он работает) - цвет зеленый, в противном случае - красный. Так-же в другом углу окна отображается нагрев: если он больше 50% - цвет текста становится оранжевым, но если менее - зеленый.

     

    Стоит сказать, что вся программа работает без дополнительных библиотек (я имею в виду библиотеку от ECS, например. т.е. сторонние), т.к. я ну прям очень не люблю таскать с собой не нужный хлам. Да и еще нужен будет установщик для всего этого. Обошелся только тремя requir'ами: component, term и event. 

     

    Так-же я сделал отдельный массив для удобного редактирования цветов:

    1243.png

     

    ИМХО это лучший вариант для хранения цветов программы.

    (Дал название переменной color для более логичного кода: "color.UpBar" лучше выглядит чем "colors.UpBar". Но опять-же, ИМХО)

    С этой штукой будет не проблема сделать графику программы под цвет стены, например. Да и я не дизайнер или художник, что-бы идеально подбирать цвета))

     

    Теперь счет настройки программы. Для коннекта реактора нужно поставить вплотную адаптер к нему и ввести 3 (можно больше или меньше, но мне по душе именно так) первых символа адреса адаптера (нужно тыкнуть по нему анализатором, что-бы узнать полный адрес) в спец. массив с этими адресами. Можно было-бы автоматически распределять реакторы по блокам, но заказчику нужно было индексировать самому. 

     

    Ну, вроде все рассказал. В коде (и в сообщении, ага) могут быть грамматические (не давно узнал, что английское слово "адрес" пишется как "address", а не "adress"... я раньше постоянно так писал и допускал ошибку), так и логические ошибки (имею в виду бесполезную проверку на nil, например). Помидорами не кидайтесь, но советами и конструктивной критики я буду очень рад.

     

    Ну и код выложил на свой сервак и на пастебин: 

    https://lokin135server.ru/PublicRepository/ReactorStatusAndMFSU/ReactorStatus.lua

    https://pastebin.com/JUKJXK97

     

    Команда для загрузки: pastebin get JUKJXK97 MonitReactors.lua

     

    На основе этой проги я еще сделал рендеринг состояния MFSU'шек, но эта совсем другая история.. (код там-же найдете)

    • Нравится 7

  4.  

     

    отсутствие желания платить

    Слушай... а как на счет белых IP? У тебя он ванишом стиран? Мой провайдер говнюГ, у роутера и конечного пользователя (меня) апишки не совпадают, и по этому мне открыть сервачек на прямую, так скажем, никак(((((((((( 


  5.  

     

    Делается это так:computer = computer or require"computer"component = component or require"component"

    Не совсем с тобой согласен (зачем так?!)

    Да, все через pcall() делать совсем убого, но подключать библиотеки Я считаю ​нужно вот так:

    local computer = require("computer")
    

    Хоть программа может быть и в дроне, но local никогда не крашила проги :D


  6. Ну что-ж, все мы с чего-то начинали. Давай я тебе подскажу твои ошибки:

    1. Объявляй локальные ​переменные и давай им четкие названия:

    c = require'component'
    gpu = require'component'.gpu
    ->
    local comp = require("component")
    local gpu = comp.gpu
    
    
    

    ​2. Используй локальные функции. При программировании больших программ (я например: 200+ строк) это очень сильно поможет:

    local function Draw()
     gpu.setBackground(0xFFFF00)
     gpu.fill(1,1,24,5," ")
     gpu.setBackground(0xBDBDBD)
     gpu.set(5,3,"                ")
     gpu.setForeground(0xFFFF00)
     gpu.set(5,3,"Проведите карту.")
    end
    

    ​3.Используй отступления (пример не очень, т.к. лучше использовать логические выражения. кто-то писал на форуме):

    ...
    if type == "magData" then
    h = 1
    else
    h = 0
    end
    ...
    ->
    if type == "magData" then
     h = 1
    else
     h = 0
    end
    
    

    Ну и на последок: лучше избегать бесконечные циклы. Так-же лучше выносить в отдельную переменную числа, строки и т.п. (в данной программе, пароль, т.е. string) в начало кода программы, что-бы конечному пользователю было проще ее настроить.


  7. Ребята, нужна помощь с заливкой логов на pastebin. можно просто отрывок кода-примера заливки файла (лог-файл) на определенный ID. Возился с internet API, но ничего не получилось, т.к. с всякими HTTP протоколами и прочим никогда не возился. А вообще можно реализовать вышеописанное? 


  8. Прикольно получилось. Графонистая такая, все на высшим уровне) но чет мне не зашло. Лично мне, проще написать код в Sublim'е, чем разбираться в детской 'поигрульке'. Хотя для новичков - будет полезно. Win10 64-bit, java: Version 8, Update 111. - робит.


  9. ВОТ! где ты был когда я на дне электросети был?

     

    Автор не отвечает за психические и физические (потеря сознания, кровотечение из глаз, конвульсии, панические атаки, депрессию, разочарование в человечестве), а также игровые увечья и случаи летального исхода, вызванные данным гайдом
    угарнул :lol: 
    • Нравится 1

  10. Вообще как бы данный раздел должен спокойно принимать и переваривать любые программки и попытки написать что-то. Игроки же не все программисты. БОльшая часть же просто играется в майн и в мод ОС. А какой-то свой "хелоуВорлд" должен попробовать написать каждый и попробовать что-то сделать самому. Ну и критику принять по делу. Иначе где, как не на форуме новичок узнает, что он делает что-то не так. Он так и будет до конца жизни думать, что написал супер либу для какого-то серверного и клиентского ПО=)

     

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

     

    @@lokin135, так что не переживай, главное - прими во внимание то, что написали скилловые программисты нашего форума тебе и в дальнейшем учитывай свои ошибки. И все будет нормально :)

     

    хорошо, спасибо. :) 


  11. Привет тебе! Сейчас, я расскажу о своей библиотеки SC. Переводя - SecurityControl.

    Эта небольшая библиотека (но довольно гибкая) позволяет написать свою программу для сервера, а так-же для конечного пользователя.Сразу скажу - все сообщения проходят через сериализацию. Ну а теперь, давайте я расскажу ее API:

    SecurityControl.OpenPort():randomport
    

    Проверяет если-ли модем, да - открывает рандомный порт и возвращает его. 

    SecurityControl.ReturnMess(Time):messege or "no"
    

    Ждет сообщения. В качестве аргумента нужно ​использовать цифру. Она определяет сколько нужно ждать ответа. Если всё-же ответа нет, возвращает "no" (без кавычек), а если ответ есть - вернет его

    SecurityControl.SendPort(Port,Messeger)
    

    Отправляет Сообщение. Так-же проверяет если модем.

     

    Вот и все. да, 3 функции... :mellow: Ну да ладно.

     

                                                                                                                                                                         

     

    Хорошо, теперь о том, что я умудрился написать:

     

    http://pastebin.com/1sJk9frj - пример небольшого сервера.

     

    команды которые он принимает:

    /print <сообщение>
    

    просто выводит сообщение на экран сервера.

    /2send <порт>

    запоминает порт которому нужно обращаться.

    /help
    

    выводит список команд на экране клиента. необходим порт клиента.

     

                                                                                                                                                                         

     

     

    http://pastebin.com/edit/TVme8BTt - клиент для этого сервера. но он более-менее универсален.

     

    о нем думаю рассказывать нечего, т.к. он всего-то на 12 строчек ( :blink:)

     

    есть удобный установщик, но есть 2 проблемы: он графический, и поддерживает 2 и 3-тию видюху и ставит мою библиотеку "simple gpu" о которой врядле буду рассказывать.

     

    вот он: http://pastebin.com/J7KHE1Zd  

     

    или пиши в shell это (для новичков):

    pastebin run J7KHE1Zd
    

    а вот сама либа:  http://pastebin.com/GCHSjkcR

     

    на этом вроде все, спасибо что посмотрел мой постик! (мой первый, критикуйте) 

    заранее извиняюсь за нехороший код :). кодил "это" давно, не на Sublime, и все как лепешка, не разборчиво... :( а скринов не будет, там и скринить нечего :P

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