Задать вопрос
  • Как делаются скриптовые языки программирования?

    @dponyatov
    Для написания интерпретатора очень важно понять самый главный принцип: интерпретация структур данных

    Программа представляется в виде структуры данных, чаще всего это дерево (или граф) объектов, в каждом узле находится объект, представляющий различные элементы языка: константа, функция, цикл и т.п.
    Каждый элемент обязательно должен иметь возможность содержать в себе
    (а) элементы адресуемые по имени (ассоцифтивный массив) и
    (б) вложенные элементы причем в контролируемом порядке (массив или список).
    Интерпретатор бегает по дереву/графу программы, и выполняет действия через вызовы методом объектов.
    Например у class Operator -> Plus задается метод add() { return nest[0].add( nest[1] }
    nest это список вложенных элементов (операнды)

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

    кое-что есть здесь в глубокой преальфе (интерпретатор на питоне) https://github.com/ponyatov/hico/releases/latest
    Ответ написан
    Комментировать
  • Что использовать для хранения информации и вывода графиков c raspberry pi?

    @dponyatov
    хранить в текстовом файле cat /dev/yourdevice >> /mnt/sdcard/data
    выводить tail /mnt/sdcard/data | gnuplot
    Ответ написан
    Комментировать
  • Как получить цвет точки по координатам в linux?

    @dponyatov
    Посмотреть реализацию import -- этим и хорош Linux, что можно скопипастить и модифицировать под себя готовое решение.
    Ответ написан
    Комментировать
  • Win, nix, android видеосвязь в нутри сети - возможно ли?

    @dponyatov
    А кто подскажет близкое по применению решение: _broadcast_ трансляция видеоряда (трансляция экрана) для лекций на разнородное оборудование (прежде всего дешевые китайские планшеты) через WiFi ?
    Ответ написан
    Комментировать
  • Чем можно снять с сервака видео, клаву и мышку и вывести напрямую в ноут?

    @dponyatov
    Какого типа сервак ? Интересует ли загрузочная часть, или достаточно будет интерфейса ОС ?

    На IBM eSerever работает доступ к "загрузке BIOS" через клиент-терминал в браузере, реализованный на Java (есть проблемы с версиями, нормально удавалось завести только на старой j1.4).

    Если достаточно интерфейса ОС, пользуйтесь SSH для консоли + VNC для графики. Чуть сложнее VNC настроить полноценные Хы (например Xming для windows) и полноценно работь с любым Xовым софтом (правда это противоречит заявленному "сервак"у)

    Виртуальные сервера предоставляют не только полноценную консоль с момента старта ядра Linux, но даже доступ вплоть до низкоуровневой отладки (gdb интерфейсы ядра)

    Промышленные платы (форматы ATCA, PC104) предоставляют доступ к меню BIOS через последовательный порт rs232 (COM)

    Сервера Sun Fire V440 для терминального доступа используют _исключительно_ RS232 через спец.разъем по конструкции аналогичный телефонному (RJ11) и отдельный _аппаратный_ терминал (по крайней мере в нашей комплектации серверной фермы так было) и Ethernet

    Если нужен тупо аппаратный интерфейс с граббером VGA - на алибабе найти не удалось
    Ответ написан
    Комментировать
  • Дальнейшее развитие для новичка при отсутствии вакансий в городе?

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

    Очень посоветую посмотреть в сторону мобильной разработки (дешевые телефоны на Android), Python и фреймворк kivy -- сам буквально неделю назад на него подсел, за вечер написал узкоспециализированный калькулятор. Например посмотрите, не получиться ли реализовать систему мобильных терминалов на базе мобильников для вашего текущего работодателя (см.выше).

    При таком подходе у вас будут деньги на текущую жизнь, и при этом хорошие перспективы карьерного роста, особенно если ИТ для вашей конторы непрофильное направление. Вполне реально взлететь до начальника ИТ-отдела или главного (и единственного) разработчика с соответствующим окладом и плюшками, особенно если такого отдела в вашей конторе тупо не существует.
    Ответ написан
    Комментировать
  • Как создать абстрактную "пространственную сетку" в консоли?

    @dponyatov
    gnuplot не подойдет ?
    set terminal dumb
    gnuplot.sourceforge.net/docs_4.2/node367.html
    Ответ написан
    Комментировать
  • Как разрешить спортивный семейный IT спор?

    @dponyatov
    для начала: пусть поиграется вот с этим (без шуток): scratch4russia.com/store
    (книги и игровая среда, аппаратное расширение на одурино еще сам не смотрел)
    смысл: фигулька для детей, нулевой порог вхождения, все визуально, и самое главное -- отсутствие психологического барьера: это же просто игрушка для детей, можно просто поиграться, и заодно почувствовать само программирование в чистом виде (алгоритмику), не завязываясь на кучу сложностей с языками, средами разработки, платформами, деплоем и прочей сложной для самого начинающей ф-ней

    Потом, когда играться надоест, и захочется заглянуть в практическую область -- Python, и ни в коем случае не С++: сетевые сервисы, обработка/анализ данных, утилиты и т.п. Для толстого клиента с GUI - биндинг wxWidgets для питона. Для зарабатывания денег -- дополнить СУБД (MySQL, чуть позже параллельно Oracle).

    ЗЫ: что касается игрушки -- была такая штука как colobot, была бы интересна мультиплатформенная версия (win, lin, + обязательно android) с сетевым мультиплеером. Если понадобится информация по реализации игровых скриптов -- неспешно перевожу книгу по реализации динамических языков Shriram Krishnamurthy Programming Languages: Application and Interpretation, готовый подстрочник в .pdf доступен на https://github.com/ponyatov/PLAI/releases, ссылки на оригинал в git-репе
    Ответ написан
  • Скетч для Ардуины умеющий сразу читать и записывать Визит/Метаком/Цифрал, есть?

    @dponyatov
    А в чем проблема тупо 3 готовых скетча слепить в один, и последовательно выполнить опрос ?
    Ответ написан
    Комментировать
  • Bison - как реализовать ООП?

    @dponyatov
    Советую начать вот с этой книги, разобраться как внутри работают динамические языки.
    А потом уже двигаться в сторону динамической или статической компиляции, или transformational programming.

    cs.brown.edu/courses/cs173/2012/book/book.pdf
    Shriram Krishnamurthi
    Programming Languages: Application and Interpretation
    Ответ написан
  • Лисп или хаскел?

    @dponyatov
    А кто что скажет про Racket ?
    Читаю PLAI ( https://cs.brown.edu/~sk/Publications/Books/ProgLangs/ ) ,
    вроде даже без знания лиспа (пролистнул первые 100 страниц SICP, не более)
    примеры дают ощущение понимания, как это на С++ реализовать (диалект racket-plai использует типизацию)
    Ответ написан
    Комментировать
  • Что конкретно может дать программисту знание языка Lisp?

    @dponyatov
    Как вариант -- можно посмотреть на книгу PLAI:
    Programming Languages: Application and Interpretation
    (c) Shriram Krishnamurthi
    https://cs.brown.edu/~sk/Publications/Books/ProgLangs/

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

    правда там используется на Лисп, а Racket, но синтаксис и идеология схожи, а типизация дает ощущение как это реализовать на С++
    Ответ написан
    5 комментариев
  • С чего начать изучение Linux с нуля?

    @dponyatov
    1) определиться с целью освоения: администрирование, веб-админининг и вебдев (LAMP, PHP, client/serverside), разработка мультисистемного софта, сборка встраиваемых emLinux систем, проверка/переход для офисных применений
    2) ставишься в виртуалку (vmware player/ virtual box), сохраняя возможность гуглить с рабочей хост-системы (win)
    3) см.п.1 осваиваешь
    4) заводишь себе bootUSB (liveCD загружать опухнешь, долго и шумно) тестируешь результаты п.3
    Ответ написан
    Комментировать
  • Как собрать линукс без линукс?

    @dponyatov
    0) ставишь еще один винт
    -1) coLinux -- когда последний раз смотрел, работало только на x32 (Win7)
    2) vmware/virtualbox + любой дистр с dev-пакетами
    3) долго пользовался -- покупаешь МНОГО RAM, ставишь debian/... на флешку, грузишься с нее, все рабочие каталоги (build/ src/ tmp/ root/) монтируешь под tmpfs
    4) 0+3: добавляешь ssd-диск на 64-128G под базовую систему, для ноута актуально mSATA, рабочие каталоги монтируешь как tmpfs
    Ответ написан
    Комментировать
  • В каком направлении обучаться для фриланса?

    @dponyatov
    Как вариант, если крупный город -- находишь ближайший хакспейс, и присоединяешься к подходящему проекту.
    Ответ написан
    Комментировать
  • Какой выбрать мониторинг серверов?

    @dponyatov
    Nagios + свои плагины
    Ответ написан
    Комментировать
  • Какова правильная логика обновления клиента игры?

    @dponyatov
    Поднимите свой git-сервер для бинарных релизов и открытых скриптов, раз уж Microsoft за 20 лет не разродился apt update. В особо извращенных случаях можно даже отдавать часть исходников, и собирать stand-alone gcc на клиенте с оптимизацией -arch=host.
    Ответ написан
    2 комментария
  • Научиться парсингу - с чего начать?

    @dponyatov
    (2) теоретически парсинг _любых_ текстовых форматов в самом общем смысле можно делать связкой flex/bison/C++:
    1) прописывая регулярки для элементов языка входных данных (строки, числа, тэги,...), затем
    2) на bison описываете грамматику входного языка (вложенные тэги, правила расстановки атрибутов, вложенные скобочные выражения и т.п.),
    flex/bison генерит пару сишных/С++ файлов, выполняющих всю грязную работу по синтаксическому разбору формата, дергая для каждого определенного элемента _ваш_ кусок сишного кода. Что потом делать с этими данными (пихать с СУБД, генерировать AST для компилятора, просто вычленять нужные единичные данные,..) описываете сами на С++.

    У этого подхода соотношение низкоуровневость*гемор/универсальность стремиться к бесконечности, но по мере наработки библиотеки С++ кода для ваших узких задач для каждой N+1 задачи все сводится к генерации типовых высокоуровневых объектов (символов, списков, деревьев и т.п.), и пары десятков строк кода именно для этой задачи.
    Ответ написан
  • Что входит в понятие азы/основы/база/бекграунд/фундаментальные знания программиста?

    @dponyatov
    в порядке освоения:
    1. Python
    2. Кнут Д. Искусство программирования.
    3. Никлаус Вирт - Алгоритмы и структуры данных
    4. Git, GitHub (система контроля версий)
    5. C/C++
    6. GNU Toolchain (GCC, Makefile, autotools)
    7. Java и плагины для IDE Eclipse
    8. HTML/CSS/JavaScript
    9. СУБД и SQL: MySQL, Postges, Oracle
    10. Платформа LAMP: Linux, Apache, MySQL, P(ython)
    11. SICP: Структура и интерпретация компьютерных программ
    12. Книга Дракона: Ахо Сети Ульман: Компиляторы. Принципы, технологии и инструментарий


    Точнее не совсем в порядке освоения: надо послойно,
    сначала очень обзорно и по верхам, чтобы общее представлениеиметь, на уровне HelloWorld
    потом следующая итерация чуть поглубже
    Ответ написан
    1 комментарий
  • Какой язык программирования изучить новичку для написания GUI приложений?

    @dponyatov
    быстрый костыль Python+wxPython, параллельно копать в сторону веб-подхода: локальный http-сервер на Python + JS и GUI в браузере.

    Достоинства второго варианта
    1) масштабируемость на любое количество одновременных пользователей: логика отрабатывается на одном сетевом узле (про полноценный вариант с LAMPy-сервером пока не говорим), при этом обслуживая любое количество клиентов/рабочих мест.
    2) платформенно-независимость, причем автоматически получаем (минимальную) поддержку мобильных клиентов через любой браузер на телефоне, правда только в онлайн режиме.
    Ответ написан
    Комментировать