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

LeshaInc

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

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

  • Посещение

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

    68

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


  1. @@Zer0Galaxy, а мантисса обязательно должна храниться в десятичном виде?@@Fingercomp, а насколько критично быстродействие в твоем проекте?Если оба ответа «да», то придется написать другую библиотеку. Иначе потребуется как минимум одна промежуточная строка и три дополнительных преобразования.

     

    Насколько я знаю финнгер перешел на другую библиотеку. Хранить числа в виде строки — неэффективно. Куда лучше держать число в массиве чисел. Скорость критична.

     

    Быстрая реализация тут.

    В ней нет реализации битовых операций, но даже эмулируя их умножением все работает куда быстрее чем с метачислами.

     

    PS: Да, она только для целыз чисел

    PPS: Нет, я не мультиакк фингера


  2. Раз пошла такая пьянка, напишу и я свою идейку по этому поводу. В общем всем надоел привычный ик, таум и прочая фигня банальная.

    Так что я подумал (нет) и придумал такую лепешку:

    • Ну всякая мелочь, опенкомпы, компутероникс и прочая дребедень естественно.
    • Чизель, куда же без него.
    • Immersing Engineering (тот самый который добавляет  лагопечки   крутые ветряные мельницы и куча механизмов которые можно интегрировать с опенкомпами.
    • Термалочка, как жи так.
    • ЕндерЙошка.
    • RFTools, RFDrills, надо же куда то все девать.
    • ЕхНихило, раз летать на островах норкомагических захотели.
    • BigReactors, строить лагореакторы которые само собой интегрировать с компами.
    • Можно влепить MineFactoryReloaded, Forestry, Agricraft, опционально.

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

    • Нравится 2

  3. Раз в чате скинули ссылку на эту тему, покажу как можно оптимизировать способ @Doob.

    code = code .. data
    Ну вобщем, тут каждый на каждый чанк вызывается конкатенацтя строк. Но в луа неэффективно много раз конкатенировать строки. Вместо этого лучше создать буффер-таблицу и вставлять в него чанки испоьзуя table.insert, и уже потом получить из таблицы строку через table.concat.

     

    Например так:

    local code = {}
    ...
    table.insert(code, data)
    ...
    print(table.concat(code))

    =)

    • Нравится 2

  4. Еще бы OpenFTP-сервер...

     

    OpenComputers умеет только открывать TCP сокеты, а вот создавать TCP слушателя он не может, к сожалению. Я думаю такое искусственное ограничение создано дабы облегчить нагрузку на сервер. Он и так держит соеденение с кучей клиентов, если к этому добавить OpenComputers он вообще грохнется. =)

     

     

    ...

     

    Как то не подумал об этом >_<. Ну вобщем будет что то вроде такого когда я буду налаживать кроссплатформеность OpenFTP. А имено: plan9k. На этой операционке клиент запускается, но багает прогрессбар и цветной-убер вывод. Пока правда, к сожалению прогрессбар не получаается починить, тут уж проблема в самой plan9k - не может он выводить юникод из за бага. (Говорил об этом с создателем plan9k).

     

     

    Браво!

    Еще бы telnet или ssh, и все барьеры сняты.

     

    telnet реализовать будет не так уж и сложно, а вот с ssh проблемы обеспечены. ssh работае поверх tls сокетов, кои OpenComputers не поддерживает. Потому нужно с ними разбираться, курить тонны rfc-шек и просить помощи у "больших дяденек". =)

    Да и скорее всего ssh такой будет требовать дата-карту, ибо tls использует aes шифрование.


  5. p8bU3JR.png     MoonyLambda

     

    Вы наверное знаете что сейчас проходит конкурс MoonJam. В общем суть в том что бы написать что-нибудь на MoonScript за неделю. Как говорил уже тотора, что-то серьезное за неделю не написать, но попробовать, поразвлечься, и написать что-нибудь интересное можно.
     
    В общем в этой теме буду показывать мой проект. И это... Библиотека для функционального программирования (далее просто - ФП)!
     
    Луа не предоставляет стандартных средств для ФП, потому я написал свою библиотеку. Чем то она похожа на реализацию такового функционала в языке Python, а чем то нет.
     
    Суть в том что функциональное программирование очень сильно упрощает работу с данными, например вместо пяти строк мы напишем одну строку.

     



     

    Все примеры в MoonScript, но в спойлерах будет эквивалент на луа. f - библиотека подключенная через require

     

    Начнем с самого простого, сложить массив чисел.

    f.reduce f.add, {1, 2, 3} --> 6
    

     

     

    f.reduce(f.add, {1, 2, 3}) --> 6
    

     

     

     

    Точно таким же образом, мы можем перемножить все числа f.mul вместо f.add, или соответственно разделить, вычесть или возвести в степень - f.div, f.sub и f.pow

     

    А если, к примеру, нам нужно взять массив и выкинуть из него все нечетные числа. Это тоже возможно.

    f.filter f.even, {1, 2, 3, 4} --> {2, 4}
    

     

     

    f.filter(f.even, {1, 2, 3, 4}) --> {2, 4}
    

     

     

     

    А теперь, достанем все числа которые одновременно и меньше пяти, и четные. Это не составит труда

    f.filter f.even, f.filter ((a) -> a < 5), {1, 2, 4, 5, 6, 7} --> {2, 4}
    

     

     

    f.filter(f.even, f.filter((function(a)
      return a < 5
    end), {1, 2, 4, 5, 6, 7})) --> {2, 4}
    

     

     

     

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

    selectEven = f.filter f.even
    selectEven {1, 2, 3, 4, 5} --> {2, 4}
    

     

     

    local selectEven = f.filter(f.even)
    selectEven({1, 2, 3, 4, 5}) --> {2, 4}
    

     

     

     

    ...Но мы можем каррировать свою функцию!

    pow = f.curry (a, b) -> a ^ b
    pow2 = pow 2
    
    pow 3, 3 --> 27
    pow2 3   --> 8
    

     

     

    local pow = f.curry(function (a, b)
      a ^ b
    end)
    
    local pow2 = pow(2)
    
    pow(3, 3) --> 27
    pow2(3)   --> 8
    

     

     

     

    К слову, именно так определена в библиотеке функция f.pow.

     

    Каррированная функция сама определяет, что ей вернуть, функцию которая примет недостающие аргументы, или результат. Мы можем каррировать функцию с любым количеством аргументов, так просто! :dance3:

     

    Реверс таблицы - легко, расплющить таблицу - легко, изменить таблицу - легко.

    Но самое главное... Все функции чистые. Ни одна функция этой библиотеки не изменяет данные, и не зависит от внешних данных.

     

    Вполне продакшен-ready пример:

    first_letter = (a) -> a\sub 1, 1
    f.group first_letter, {"Miku Chan", "Mayonnaise", "LeshaInc", "Loli", "Totoro"}
    --> {M: {"Miku Chan", "Mayonnaise"}, L: {"LeshaInc", "Loli"}, T: {"Totoro"}}
    

     

     

    local first_letter = function(a)
      return a:sub(1, 1)
    end
    f.group(first_letter, {"Miku Chan", "Mayonnaise", "LeshaInc", "Loli", "Totoro"})
    --> {M = {"Miku Chan", "Mayonnaise"}, L = {"LeshaInc", "Loli"}, T = {"Totoro"}}
    

     

     

     

     

    И все это становится таким простым используя библиотеку MoonyLambda.

     


     

    Скачать

     

    Документация

    ...будет постепенно писаться в этой теме. Ссылки будут тут.

     

     

    Функциональный стиль выглядит гораздо читаймей, чем императивней стиль. Когда в императивном стиле мы пишем непонятный цикл, который непонятно что делает, тут мы пишем несколько строк кода, который понятен с первого взгляда.

    • Нравится 3
    • Одобряю 1

  6. local component = require("component")
    local os = require("os")
    local term = require("term")
    term.clear()
    os.execute("resolution 1 1")
    while true do
    print("█")
    term.clear()
    end
    

    посмотрел код танцпола (вот он ^)... кто мне объяснит зачем он, и зачем цикл тут. кто мешает взять серые блоки? или у нас нанотехнологии тут?

    • Нравится 4

  7. event.listen forever  ;)

     

    Это точно.

     

    Весь код в спойлеры надо добавить.

     

    Со спойлерами пропадает весь запах "крутого туториала". :) А еще пропадает юзабилити, надо тыкать на эти кнопуськи "Открыть", не удобно ИМХО.


  8. Большие сложности - больше лагов. Зачем мне робот который будет тупить или нагружать сервер? Это же луа. Его обработка значительно дольше чем у полноценных яп.

     

    Значит оптимизировать поиск путей, или вообще обойтись без поиска пути и использовать дорожки из специальных блоков. А андроид пусть идет по этой дорожке только

    • Нравится 1

  9. Да и как ты себе представляешь запрограммированных роботов? Это не дроны которые летают, придётся алгоритмы обхода препятствий лепить, слишком сложное ПО будет на них. С учётом того что даже на роботов никто не делает этот обход препятствий, а просто ставят улучшение перо.

     

    Не любишь сложности?... ;)

    • Нравится 1

  10.  

    А можно мета-методами для _G определить неприсваеваемый объект, всегда возвращающий nil

     

    setmetatable(_G, {
    __index = function (self, k) 
      if k == "_" then 
        return nil 
      else 
        return rawget(self, k) 
      end 
    end}) 
    
    print(_) --> nil
    _ = 22
    print(_) --> nil
    

    это было просто

    • Нравится 3

  11. Btn3=Form1:addButton(2,5,"ЦИКЛ",function() while true do rs.setOutput(sides.south, 0) rs.setOutput(sides.south, 15) end   end)
    Я никакого слипа не вижу

    Лэйн, замени на 

    Btn3=Form1:addButton(2,5,"ЦИКЛ",function()if noExit==true then noExit=false else noExit=true end while noExit do rs.setOutput(sides.south, 0) os.sleep(длина импульса) rs.setOutput(sides.south, 15) end   end)

     

    noExit = not noExit
    • Нравится 1

  12. Это чтобы они не слепли от его совершенства.

    А вместо этого преисполнялись праведного желания все улушить, и помогали мне с работой. )

     

    Народ, объявленье срочно. Нужно помочь @Totoro с кактусоводством!!!

    <LeshaInc> Totoro, где ты работаешь?
    <Totoro> на кактусовой ферме кактусоводом
    

  13. Топикстартер, как и многие на этом форуме, пришел сюда потому что ему нравится программировать. И не просто программировать, а на Луа. И не просто на Луа, а в среде Майнкрафта. Есть в этом какой-то особый шарм. И указывать ему другие пути самовыражения, на мой взгляд, не корректно.

     

    У меня был :sarcasm: , направленный @@qwertyMAN, а не топикстартеру. :P

    • Нравится 1

  14. Судя по проделанной работе игра серьёзная, но почему майнкрафт?

    Можно же скачать какой нибудь движок на lua и писать игры там. И в скорости и в графике не будет ограничений, как в СС и ОС.

    Если хочешь создавать действительно серьёзную игру, забрасывай майнкрафт и прогай на полноценном lua движке.

     

    Судя по твоим словам работа была бы проделана очень серьезная, но почему луа?

    Можно же скачать какой нибудь двжиок на C++/Rust и писать игры там. И в скорости и в графике не будет ограничений, как в луа.

    Если хочешь создавать действительно серьезную игру, забрасывай луа и прогай на полноценном C++/Rust двжике.

    • Нравится 1

  15. тут нужна децентрализованная сеть. у меня есть прототип. я бы его продолжал пилить, но проблема, сообщения при маленькой мощности модема теряются, а при большой сложно дебажить, большие расстояния.

     

    буду ждать бумеранга, а там уже думать что то

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