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

swg2you

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

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

  • Посещение

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

    20

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


  1. Вот такой пример программы:

    s = "privet"
    a = string.len(s)
    for l=1, a do
    m = string.byte(s,l)
    print (m)
    end

    На выходе получим 112, 114, 105, 118, 101, 116

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

    Читал, что можно как-то разделить с помощью string.gmatch(s, "%w+"), но как это сделать я не понял.

    ...
    s = 'С Новым Годом"
    for i = 1, unicode.len(s) do
      print( unicode.sub(s, i, i) )
    end
    ...
    

    http://ocdoc.cil.li/api:unicode

    http://www.lua.org/manual/5.2/manual.html#6.4

    • Нравится 2

  2. 1. код

            elseif(type(v) == "function") then
                error("value in function.")
            end
    

    должен выглядеть

    else 
      error("unsupported type of value")
    end
    

    в луа есть еще парочка типов отличных от булей чисел и строк.

     

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

    3. Не совсем понятно где может понадобиться такая сериализация.


  3. Оставлю это здесь:

    https://en.wikipedia.org/wiki/ASCII_art

    https://en.wikipedia.org/wiki/ANSI_art

    https://en.wikipedia.org/wiki/AAlib

    http://ansilove.sourceforge.net/examples.html

    http://sixteencolors.net/

     

    P.S.

    ANSI запилите, велосипедисты. Тонны арта же за пару десятилетий скопилось.

     

     

    ascii-ansi-artEmeralds_by_jSepia-680x434

     

     

     

    upd (aalib умеет не только картинки):

     

     

    • Нравится 1

  4. Ха, а я думал ты уже наигрался с луа и пошел дальше ПО для турбин писать  :D

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

     

    А в кодирование меня ЛУА потянул(-а, -о). Концепция языка, красивая, зараза, вызвала довольно длительный рецидив. Пришлось, скрипя мозгами, погружаться в ночные медитации ;) Да и приятно было тряхнуть стариной, и с себе подобными пообщаться.


  5. :D.Шутки шутками, а я правду говорю, вы же тут странное поведение lua обсуждаете, ответ можно найти в исходниках почему такая логика.

    Можно даже разработчикам сообщить, что бы пофиксили.

    Ноп. Коротко говоря, - Это не баг это фича!

     

    Это не странное, а более чем нормальное поведение ЛУА. Это поведение "оператора пакетного присваивания" освещено в официальной документации, но такое поведение "пакетного присваивания" порождает некоторые не совсем очевидные моменты, которые я, обозвав "забавными", и счел нужным запостить в отдельную тему.

     

    С образовательной целью, так сказать. Чтобы те, кто этой фичи не знает, могли поразмышлять над примерчиком, понять почему так происходить и уяснить для себя правило ЛУА, "Пакет только в конце". Ну и чтобы потрындеть над забавностями столь чудесного языка, чего уж там греха таить. 


  6. Реализация собственного варианта протокола передачи файлов, да еще и монтированием удаленной файловой системы - хорошая задача.

    Второй этап - реализация клиента совместимого с общепринятым протоколом FTP? Было бы круто. 

    • Нравится 1

  7. print("10%")
    ...
    print("100%")
    

    А зачем имитация прогресса? о_О

    Лучше уж, выводить диагностическое "lock downloaded"

     

    И как верно подметил AlexCC, инсталлятор это круто, но ссылки на код нужны тоже.

     

     

    Посмотрел,и только сейчас заметил,что нет скобок у врайтов и принтов.Разве так можно?

    Синтаксис Lua разрешает вызов функции без указания скобок, если аргумент это конструктор таблиц или строка.

    Т.е. вместо f ({1,2,3}) и f ("text") можно писать  f {1,2,3} и f "text". Чтоб не плодить лишних скобочек.

     

    Подробнее смотри п.3.4.9 официальной документации.

    • Нравится 1

  8. Можно создать программу, в которой для каждого тьюрмита создается отдельный поток. Например есть один тьюрмит-поток. Ходит-ходит, нажрался и размножается. Создаётся второй тьюрмит-поток и он тоже размножается...

    Тьюрмит идет к станции и крафтит там свою детку, а в конце армия тьюрмитов зохавает весь сервер.

    Даешь машинный апокалипсис! )


  9. Но монитор третьего уровня почему-то выводит больше чем 240 цветов и больше 16 цветов grayscale. Но за формулу все-равно спасибо. Вот таблица цветов, которую я сгенерировал по вашей формуле. Может быть я где-то накосячил.

     

    Код генерации таблицы:

     

     

    local f = io.open("colors", "w")
    local line = 0
    local x = 0
    
    f:write( "colors = {\n" )
    for r=0,5 do
      for g=0,7 do
        for b=0,4 do
          line = "	[" .. x .. "] = 0x" .. string.format("%X", r*0x330000 + g*0x2400 + b*0x3F) .. ",\n"
          f:write( line )
          x = x + 1
        end 
      end
    end
    
    for i=1, 15, 1 do
    	line = "	[" .. 240+i .. "] = 0x" .. string.format("%X", gpu.getPaletteColor(i)) .. ",\n"
        f:write( line )
    end
    
    f:write( "}\n" )
    
    f:close()
    

     

     

    Таблица и код вроде верные. 

     

    При записи цвета 0xRRGGBB в монитор, значение 0xRRGGBB приводится к сокращенной палитре, реальное значение записанного цвета можно посмотреть вычитав знакоместо с помощью gpu.get. Т.е. если мы сделаем:

    gpu.setForeground(0x123456)
    gpu.set(5,5,' ')
    local s, fg, bg = gpu.get(5,5)
    

    То в fg мы получим вовсе не 0x123456, а приведенное значение. Алгоритм приведения неизвестен, но приведенные значения наиболее близки к палитре 6*8*5+16.

     

    Попробуй в sicot.lua покликать по битам меняя цвет, а потом кликнув на цвет посмотреть реальное значение приведенного цвета, чтобы узнать, какие именно цвета выводятся сверх палитры.

     

    В палитре Тир2 я находил аномальный 17-й цвет, возможно такие цвета есть и в Тир3.

     

    ЗЫ

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

    • Нравится 1

  10. Кстати, знаешь, какие костыли мы придумываем, чтобы сделать  адекватную трансляцию 0xffffff -> 0xff? Кошмар какой-то - начинали с генерации 8-битной палитры и заканчиваем какими-то совершенно безумными формулами :D

     

     

    Сделал пару обновлений библиотеки. Добавил альфа-канал и провел пару оптимизаций.

    Кстати, насчет того, что нельзя засунуть в 1 байт целый цвет. Оказывается я ошибался и кодировал цвета в 24 битном формате, что очень избыточно для 8 битного цвета, который используется в OpenComputers. Можно цвет закодировать и 1 байтом. Проверено на практике. А совсем недавно пытался доказать паре человек обратное :)

     

    OC, для мониторов тир3, юзает стандартную программную 8-битную палитру 6*8*5+16

     

    Внутри кода sicot.lua есть простая формула генерации, и комментарии по безопасной палитре.

    • Нравится 2

  11. Пожалуйста, реализовывайте. Покажите что это будет.

    Пока что я лишь поверхностно понимаю вашу суть.

     

    Но повторюсь еще раз, в частности для меня это скучно и не интересно.

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

    Выгоды? о_О


  12. P.S. @swg2you, не забывай главное правило экономики (игровой фондовой биржи) - необходимо чтобы в финансовых операциях участвовало более 1 человека, иначе экономика (игровая) упадет и не будет интересна никому.

    Так что нужно завлечь в разработку больше игроков чтобы продукт был успешен, интересен и востребован.

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

     

    1 сервер - депозитарий, на котором реализовано мат. обеспечение "биржи".

    Несколько "информационных терминалов" для отображения общего состояния "биржи", котировок, сделок, и т.п.

    И множество "торговых терминалов" которые собственно и используются игроками для игры на бирже.

     

    Причем, если протокол обмена продумать тщательно, то можно организовать даже межсерверное взаимодействие через "интернет" карты, и подтянуть "брокеров" с других проектов.


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

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

     

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

    1. Определить алгоритм колебаний "цены" торгуемых абстракций.
    2. Выделить отдельный комп под депозитарий.
    3. Определить протокол работы с депозитарием.
    4. Написать депозитарий.
    5. Написать информационный терминал.
    6. Написать торговый терминал.

    1-й пункт самый сложный.

    Можно конечно тупо рандомную цену и бесконечный объем предложений/спроса. Но это, извините, симулятор рулетки, а не биржи.

     

    Более "биржевой" вариант, когда амплитуды случайных флуктуаций объемов спроса и объемов предложения обратно пропорциональны частотам, а цена формируется косвенно из соотношений объемов спрос/предложение. Проще говоря, спрос и предложения постоянно немного колебаются, изредка случаются большие скачки, а очень редко наступает "большой переполох" и "паника на бирже". Чем выше амплитуда скачка, тем реже он случается, а в качестве коэфициентов "случания" и "уровня паники/колебаний"- Великий Рандом.

     

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

     

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


  14. Улыбнули алгоритмы круга и кольца.

    function es.create_circle(rad)
            local model={}
            for x=-rad,rad do
                    for y=-rad,rad do
                            if math.sqrt(x^2+y^2)<=rad then
                                    table.insert(model,{x,y})
                            end
                    end
            end
            return model
    end
     
    function es.create_ring(rad)
            local model={}
            for x=-rad,rad do
                    for y=-rad,rad do
                            if math.ceil(math.sqrt(x^2+y^2))==rad then
                                    table.insert(model,{x,y})
                            end
                    end
            end
            return model
    end

    Я оставлю это здесь:

    Алгоритмы Брезенхэма.

    • Спасибо 1

  15. Ну раз он предложил, значит он и будет главным спонсором сервиса :)

    @swg2you, вам нужно всего лишь оплатить какой-нибудь никудышный смс-шлюз и ваши мечты будут реализованы :D

    Если мне нужен какой-нибудь смс-шлюз для АСУ, я подключаю какой-нибудь GSM-модем к компьютеру с АСУ )

     

    Тот-же siemens mc-35i умеет и СМС и факс, а если голосовой разъем закинуть на вход/выход звуковой карты - то и голос умеет, еще и с интернетом по gprs, вполне достаточным для мониторинга состояния объекта.

     

    Еще проще, когда свободно-программируемый контроллер умеет АТ-команды по RS-232. Тогда и компьютера никакого не нужно. Научить контроллер, при аварийке, АТ-командой СМС-ить через модем - как два пальца.


  16. Библиотека шикарна.

    Дает возможность строить полнофункциональные промышленные системы управления.

     

    Сеть контроллеров на bios-net, управляемая центральным узлом + эта библиотека = современная промышленная АСУ.

     

    irl, автоматика viessmann для котелен работает по такой же схеме. + там еще выход за уставки и аварийные ситуации через шлюз СМС-ятся на телефон диспетчера, и отчеты по факсу можно отправлять.

     

    Для полного фарша только SCADA с каким-то modbus-ом не хватает.


  17. ну приблизительно они так и видят свои программы)  Но так как у нас мозгов не хватает создать что-то свое и мы жили и живем в застое и мы дикий народ и очень отстали в ИТ, нам приходится пользоваться всем заморским пиратским ПО, языками разработки и пить кока-колу с чипсами :)

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

    ...

    Я еще застал в школе преподавание алгоритмического языка по Ершову. Со своими "пока" "нц" и "кц".

    • Нравится 1

  18. Немного не соглашусь.

    У неологизма "метатаблица" есть как минимум пара преимуществ, по сравнению с другими вариантами.

    Первое - он широко распространен (в контексте Луа). Как в английском так и в русском языке.

    Второе - это наиболее точный перевод термина "metatable" на русский. То что перевод так похож на оригинал - лишь облегчает понимание мануалов.

    Так что тут уже все решено за нас создателями языка.

     

    Термин "суб-таблица" возможно прижился бы. Но он звучит менее определенно. "Под-таблица". Это таблица-элемент? Таблица операторов? Или что-то еще?

    Приставка "мета-" носит в русском языке (хотя она несомненно иностранного происхождения) смысл абстрактности и обобщенности. Что вполне подходит к случаю, на мой взгляд.

    мета- из греческого "рядом с" перекочевало как приставка в английский и русский, и укоренилось в узких значениях: на другом уровне, выше, ниже, после, между.

    Мета-фора, мета-язык, мета-физика, и т.п.

     

    А насчет распространенности это да. Мы любим кальку. Большая часть слов в современном Русском - заимствованы.


  19. Однако, на мой взгляд, в статье на подобную тему это неизбежно. И уж тем более не стоит заменять термин "метатаблица" на неологизм собственного сочинения, вводя в заблуждение читающих статью новичков.

     

    Тут как раз "метатаблица" и есть неблагозвучный калькированный с английского неологизм.

     

    Если бы документацию писали, а не переводили, то термин скорее всего был бы "суб-таблица" или составной, но более точный по сути "таблица операторов". А в случае с __index и __newindex было бы оговорено, что в качестве таблицы операторных методов может выступать обычная таблица индексов-значений.

     

    ЗЫ

    "метаметод" - тоже, еще та корявость ) мета-метод это как?


  20.  

     

    Немного странный результат у последнего примера, правда?   Попробуйте это объяснить.

     

     

    --Если первый аргумент - таблица, то присваиваем ему значение 42, иначе его изначальное значение
     

    Шутишь?

    ---

    Ме-та-та-бли-бли-бли-цы - уж-жасное название. Еще ужаснее конструкции вида:

     

     

     при работе с метатаблицами, она устанавливает таблице метатаблицу. Первый аргумент здесь — таблица, второй — метатаблица

     

    Прочитал, теперь заикаюсь.

     

    Материал хорош, и грамотен, но та-та-та-блицы с ме-ме-ме-та-методами нужно подавать проще и другими словами.

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