• Nuklear+ — миниатюрный кроссплатформенный GUI

      Nuklear+ (читается как "Nuklear cross", значит "кроссплатформенный Nuklear") — это надстройка над GUI библиотекой Nuklear, которая позволяет абстрагироваться от драйвера вывода и взаимодействия с операционной системой. Нужно написать один простой код, а он потом уже сможет скомпилироваться под все поддерживаемые платформы.


      Я уже писал на хабре статью "Nuklear — идеальный GUI для микро-проектов?". Тогда задача была простой — сделать маленькую кроссплатформенную утилиту с GUI, которая будет примерно одинаково выглядеть в Windows и Linux. Но с тех самых пор меня не отпускал вопрос, а можно ли на Nuklear сделать что-то более-менее сложное? Можно ли целиком на нём сделать какой-нибудь реальный проект, которым будут пользоваться?

      Читать дальше →
      • +16
      • 10,1k
      • 5
    • Продвинутый Jekyll


        Jekyll — генератор статических сайтов. Это означает, что на вход ему даётся какая-либо информация, а на выходе получается набор HTML-страничек. Всё отлично когда сайт простой или даже одностраничный. Но что насчёт более сложных сайтов? Справится ли Jekyll? Будет ли удобно?


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

        Читать дальше →
      • Читаем tar за 26 строк ANSI C кода

          Архиваторы — это страшно! Огромные и ужасные алгоритмы, которые обычному человеку никогда в жизни не понять! Rar, zip, gzip, tar — современные стандарты де-факто, а значит крайне сложные и навороченные штуки, которые и пытаться понять не стоит. Ну, tar выглядит попроще, может там всё не так сложно? Смотрим git с исходниками. Видим десятки файлов, многие на десятки килобайт. Мда. Видимо, тупик.


          __________________|      |____________________________________________
               ,--.    ,--.          ,--.   ,--.
              |oo  | _  \  `.       | oo | |  oo|
          o  o|~~  |(_) /   ;       | ~~ | |  ~~|o  o  o  o  o  o  o  o  o  o  o
              |/\/\|   '._,'        |/\/\| |/\/\|
          __________________        ____________________________________________
                            |      |dwb

          На самом деле всё не так сложно. В документации было описано, что tar — просто способ записи нескольких файлов на ленту. Т.е. всё должно быть просто. По факту — набор вспомогательной информации для каждого файла и непосредственно его содержимое. Именно понимание этого факта и позволило сделать читатель tar-файлов в 26 строк.

          Читать дальше →
        • Nuklear — идеальный GUI для микро-проектов?

            Nuklear — это библиотека для создания immediate mode пользовательских интерфейсов. Библиотека не имеет никаких зависимостей (только C89! только хардкор!), но и не умеет создавать окна операционной системы или выполнять реальный рендеринг. Nuklear — встраиваемая библиотека, которая предоставляет удобные интерфейсы для отрисовки средствами реализованного приложения. Есть примеры на WinAPI, X11, SDL, Allegro, GLFW, OpenGL, DirectX. Родителем концепции была библиотека ImGUI.


            Чем прекрасна именно Nuklear? Она имеет небольшой размер (порядка 15 тысяч строк кода), полностью содержится в одном заголовочном файле, создавалась с упором на портативность и простоту использования. Лицензия Public Domain.

            Читать дальше →
          • QtCreator: Qt кросс-компиляция из linux 64 в linux 32, win32, win64 и Mac OS X; upx, usb, dmg, etc



              Библиотека Qt позволяет делать действительно кроссплатформенные приложения. Единожды написанный код можно откомпилировать под многие операционные системы. Но проблема именно в слове «компилировать», т.к. подразумевается, что необходимо перезагрузиться под целевую систему, иметь в ней настроенную среду разработки, установленный и настроенный зоопарк библиотек. Спасает кросс-компиляция — компиляция, производящая исполняемый код для платформы, отличной от той, на которой исполняется.
              Читать дальше →
            • Vim и переключение раскладки клавиатуры

                Все команды Vim нужно вводить на английском языке. Если основной текст вводится на каком-либо другом языке, то это представляет из себя проблему, т.к. нужно часто переключать раскладку. Одно из решений представлено тут, однако оно заставляет привыкать к новой горячей клавише для переключения раскладки. Так же существует множество платформенно-зависимых решений с вызовом тех или иных утилит. Целью плагина vim-xkbswitch является предоставить единое поведение для многих операционных систем и языков.
                Читать дальше →
              • Vim в Windows и переключение раскладки клавиатуры

                  UPD: Это «историческая» версия топика. Новое решение проблемы смотреть здесь.

                  Проблема русской раскладки в Vim поднималась много раз. Одно из решений можно увидеть здесь, однако оно заставляет привыкать к новой горячей клавише для переключения раскладки. Также существует множество решений с вызовом системной утилиты для смены раскладки, но под Windows подобной утилиты не нашел, так что пришлось реализовать её самостоятельно.
                  Читать дальше →
                • Асинхронная загрузка изображений в скрытом iframe: подводные камни

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

                  При обращению к гуглу выдаёт много статей по загрузке файлов через iframe. Алгоритм в общем сводится к:
                  1) Создаём скрытый фрейм (обычно просто обнуляется ширина и высота через HTML и CSS свойства)
                  2) Устанавливаем action формы в имя фрейма.
                  3) Отправляем файл. Радуемся.

                  Для удобства использования отдельная кнопка «Начать загрузку» не создавалась, а был повешен обработчик onChange для файлового input'a.

                  Читать дальше →