• YLS-811: BT-клавиатура с аккумулятором на 10A·h

      В этом топике я расскажу о беспроводной Bluetooth-клавиатуре для телефонов и планшетов со встроенным аккумулятором-монстром, аж на 10 ампер-часов(как обещают китайцы).

      Кратко: очень интересный девайс для пользователей планшетов, соединяющий в себе внешнюю клавиатуру и дополнительный аккумулятор, способный заряжать два устройства одновременно.
      Читать дальше →
    • Кистевой ремень Nikon Hand Strap II как альтернатива шейному ремню

        Покупая зеркальную камеру многие одевают на неё комплектный ремень. С ним камеру удобно носить на шее, но со временем этот ремешок может доставлять немало проблем. О чём я говорю? К примеру, камера весит 1 кг (грубо), объектив ещё столько же, а то и больше, плюс вспышка. Рабочий день фотографа может длиться не один час и всё это добро нужно таскать на себе. Неслабая нагрузка на шею, если бегать с камерой целый день.

        Совершенно случайно наткнулся на очень интересную альтернативу, а именно на кистевой ремень, о существовании которого раньше и не подозревал. После поисков я остановился на модели Nikon Hand Strap II. Вот так этот ремешок выглядит вживую:

        image

        Парадокс, но камера у меня Canon, а ремень Nikon. Что поделать, нет у Canon’а удобных кистевых ремней. Китайские поделки за 2-3 у.е. в расчёт изначально не принимались. А сейчас немного подробностей о покупке.

        Читать дальше →
      • модификация PHP: своё расширение

          Это вводная статья, что начнёт цикл посвящённый модификации php. Основные цели этого занятия: а) доделать мне свой проект; б) будет подталкивать меня хоть что-то делать, и в) может и вам пригодится.

          И так, что необходимо мне в модуле и зачем он нужен
          а) множественное наследование или реализация что-то типа mixins. Да, я знаю, что есть такое уже написанное похожее, но я это хочу разобрать и показать что, как и зачем происходит.
          а-2) разъяснить для чего какие структуры используются.
          б) добавить разные удобные функции, которыми часто пользуюсь, но которые на чистом php не достаточно быстро работают.
          в) попытаться модифицировать синтаксис php (а в друг получится)
          г) попытаться написать что-нибудь на c++ для php.
          д) Д
          е) может что-то реализовать то, что кто-то хотел, но не знал как

          упд.
          ж) хочу переписать/дополнить Closures, чтобы они попадали в область видимости, в которой определяются, а не в глобальную и в них использовался this

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

          упд3. так как карму сбили, то написать теперь ничего не выйдет.

          пока что можно накидать вопросов или предложений.

          ниже будет оглавление статей.
        • Пишем расширения для PHP на C (Си)

            Современному PHP разработчику это знание может понадобиться скорее для расширения сознания, чем непосредственное руководство к действию, но несмотря на то, что в PHP уже встроено практически все необходимое, а в разнообразных PEAR и PECL репозитариях можно найти пакет дополнений на любой вкус, многим думаю будет интересно, а некоторым и полезно узнать как и что работает внутри PHP.

            И раз уж Zend предоставил нам такие удобные инструменты, почему бы ими не воспользоваться? Например для оптимизации каких-то процессов, сокрытия своего когда в коммерческих приложениях и встраивания механизма лицензий, реализации многопоточности или для чего-то еще…

            Читать дальше →
          • Программирование на Android для web разработчика или быстрый старт для самых маленьких. Часть 2

              Приветствую!

              Статья является продолжением начатой мной части 1.

              Предостережение


              Важно: данный урок не является профессиональным. Автор урока не является специалистом в программировании для платформы Android. Я заранее приношу свои извинения, за неоправданные ожидания.

              RegistrationActivity


              В Activity для регистрации нужно проделать следующее:
              Читать дальше →
            • Программирование на Android для web разработчика или быстрый старт для самых маленьких. Часть 3

              • Tutorial
              Приветствую!

              Статья является продолжением начатой мной части 1 и части 2.

              Предостережение


              Важно: данный урок не является профессиональным. Автор урока не является специалистом в программировании для платформы Android. Я заранее приношу свои извинения, за неоправданные ожидания. Так как предыдущий урок получил больше положительных отзывов, я решил продолжить.

              О чем пойдеь речь


              В первой части мной упоминалось, что приложение будет иметь возможность авторизироваться и отображать данные сервера. Реализуем:
              1. Авторизация
              2. Листинг данных получаемых с сервера
              Читать дальше →
              • –3
              • 9.1k
              • 6
            • Взгляд со стороны специалиста на трудоустройство в Великобритании

              Представляете, что к вам на собеседование через час придёт человек, а вы даже не знаете мужчина или женщина это и сколько ему или ей лет?

              Трудоустройство в Великобритании кардинально отличается от российского и восточно европейского и анонимно до определённого момента.

              Всё потому что присутствуют агенты, работа которых напоминает агентов писателей, художников и актёров. Я никогда не был внутри агентского процесса, но побывал с двух сторон трудоустройства и порой выпиваю со знакомым агентом.
              Читать дальше →
            • Психологическая деформация программистов. Взгляд с обеих сторон баррикад

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

                Я достаточно часто сталкивался с подобным мнением и не придавал ему особого значения, но когда женский коллектив нашей организации поздравил программистов с 23-м февраля по доброму назвав их «космическими войсками», решил всё же расставить определенные акценты в данном вопросе, т.к. одна из моих профессий связана напрямую с психоанализом. Да и баш уже не молчит.

                И что же них такого деформированного?
              • Голые пятницы #1

                • Tutorial
                голые пятницы

                Всем доброго времени суток. Сегодня мы поговорим о том, как красиво оформить выделенный текст, совладать с отступами в кнопках, прокачать скролл в мобильных браузерах, скрестить цвет текста с цветом границ, а также рассмотрим интересные новые единицы измерения.
                Поехали!
              • Модификация стоковых прошивок для Android. Часть 2

                  Здравствуй Хабр!

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

                  Например, описывать как происходит загрузка Android в данной статье будет не уместно. Если вы знаете принцип инициализации аппаратного обеспечения вашего компьютера в BIOSе, а затем его загрузка через ядро системы, то Android в этом плане ничем не отличается. Разница лишь в процессорной архитектуре. Структура файловой системы? Ну господа, это же чистой воды UNIX система, и писать где, что и как хранится — абсурдно! Править build.prop — это тюнинг системы. Да, это модификация, но большую часть этих параметров можно сделать сторонними приложениями, причем удобными для пользования, например System Tuner.

                  Понять самому принципы системы Android заняло у меня пару месяцев, столько же займет времени и писать статьи, чтобы осветить все базовые вещи. Так что давайте лучше будем писать о конкретных примерах как разбирать Dalvik код и создавать на телефоне удобства «пользования».

                  И так, поехали! Сегодня я расскажу как я реализовал функционал автоматической записи телефонных разговоров родными средствами.
                  Читать дальше →
                • Скорости разработки и исполнения, не достижимые на С

                    В продолжении статьи о кроссплатформенной и кросс-аппаратной оптимизации, на примере задачи поиска полным проходом по таблице из 5 полей и 10 000 000 строк, и неизбежности этой задачи даже при индексном поиске, я покажу как ускорить такой поиск в 3.5-5.3 раза с использованием C++ независимо от аппаратной платформы.
                    В предыдущей статье нам удалось ускорить поиск в 1.3 раза: GitHub.com
                    Мы не будем банально описывать конструкции языка, а покажем преимущества C++ при решении одного из этапов реальной задачи.
                    Мы по-прежнему пишем кроссплатформенно под MSVC11(MSVS2012) и GCC 4.7.2, и используем в них C и частично реализованный стандарт C++11.
                    Для упрощения понимания мы все ещё пишем без индексного поиска, но это решение в дальнейшем будет использоваться при индексном поиске.
                    Читать дальше →
                  • Ежедневная работа с Git

                    • Tutorial
                    Я совсем не долго изучаю и использую git практически везде, где только можно. Однако, за это время я успел многому научиться и хочу поделиться своим опытом с сообществом.

                    Я постараюсь донести основные идеи, показать как эта VCS помогает разрабатывать проект. Надеюсь, что после прочтения вы сможете ответить на вопросы:
                    • можно ли git «подстроить» под тот процесс разработки, который мне нужен?
                    • будет ли менеджер и заказчик удовлетворён этим процессом?
                    • будет ли легко работать разработчикам?
                    • смогут ли новички быстро включиться в процесс?
                    • можно ли процесс относительно легко и быстро изменить?


                    Конечно, я попытаюсь рассказать обо всём по-порядку, начиная с основ. Поэтому, эта статья будет крайне полезна тем, кто только начинает или хочет разобраться с git. Более опытные читатели, возможно, найдут для себя что-то новое, укажут на ошибки или поделятся советом.

                    Далее очень много букв случайным образом превратились в пост.
                  • Пишу игрушечную ОС (доступнее о планировщике)

                    • Tutorial

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

                    Итак, что такое планировщик? Планировщик — это часть ОС, реализующая многозадачность. Число процессоров, обычно, намного меньше числа выполняемых задач. Поэтому на каждый процессор приходится несколько задач. В силу своей последовательной природы процессор не может выполнять эти задачи одновременно — и он поочерёдно переключается с одной задачи на другую.

                    По способу переключения между задачами планировщики делятся на кооперативные и вытесняющие. При кооперативном планировании ответственность за переключение задач несут сами задачи. Т.е. задача сама решает, когда можно уступить место следующей. В отличие от кооперативных, вытесняющие планировщики самостоятельно принимают решение о смене задачи. Легко понять, что второй метод планирования в общем случае является более предпочтительным для ОС в силу своей предсказуемости и надёжности.

                    Далее задачи будем называть потоками. Изначально задачи были однопоточными, и поток выполнения всегда соответствовал задаче. В настоящее время это уже не так, поэтому задача логически разделилась на два родственных понятия: процесс, как контейнер ресурсов, и поток, как независимая последовательность исполнения кода.
                    Читать дальше →
                  • Пишу игрушечную ОС (о планировщике)


                      Продолжаю вести блог о разработке игрушечной ОС.

                      В прошлом посте я писал о том, как добиться возможности реализовывать на C обработчики прерываний. Теперь, пользуясь написанными ранее макросами, можно реализовать простой SMP-планировщик. Он будет предоставлять минимально возможный функционал, на базе которого в будущем нужно будет возводить различные надстройки, в частности, примитивы синхронизации (например, мьютекс). Опять же, красивая модульная структура не способствует высокой производительности, но красота, как известно, спасёт мир, так что отдадим ей предпочтение.

                      Итак, попробуем сформулировать требования к нашему планировщику. Нам нужна возможность создать поток, указать для него стек, маску разрешённых логических процессоров (affinity), базовый приоритет и функцию выполнения. Далее, поток можно запустить, приостановить, продолжить его выполнение и, наконец, завершить.

                      Кроме того, было бы здорово, если бы планировщик не занимался выделением памяти, а мог принимать и возвращать память, выделенную под поток кем-то другим. С одной стороны, это бы обеспечило гибкость произвольного резервирования памяти потоков. С другой – дало бы уникальную возможность сохранять поток во внешней памяти (например, на жёстком диске) с последующей его загрузкой и запуском с прерванного места.
                      Читать дальше →
                    • Как запустить программу без операционной системы: часть 3: Графика



                        В этой части попробуем сделать “невозможное”: научимся использовать графический дисплей без операционной системы. На самом деле это задача не из легких, особенно в случае работы в 32-х битном защищенном режиме, и особенно если хочется использовать приличное разрешение экрана а не 320x200x8. Но все по порядку: раз хотим графику – значит нужно работать с видеокартой.

                        Современные графические карты – это практически полноценные компьютеры по мощности не уступающие основному: тут и декодирование MPEG2 в качестве 1080p, поддержка 3D графики и шейдеров, технологии вроде CUDA, и многое другое. Это все выглядит весьма сложно. С другой стороны видеокарты – это всего лишь очередной PCI девайс, такой же, как и остальные. Это устройство мы даже “нашли” в предыдущей статье с номером класса устройства 0x03 (class_name=graphics adapter). Как и с любым, устройством с видеокартой можно работать при помощи портов ввода-вывода или MMIO областей памяти, а сама видеокарта может использовать DMA и прерывания для взаимодействия с основным процессором. Если посмотреть на диапазон портов ввода-вывода, доступных у видео карт, то мы увидим, что всего ей выделяется менее 50-ти байт – не так уж и много с учетом огромной функциональности, которой обладают современные видеокарты.
                        Читать дальше →
                      • Легко настраиваемый python daemon

                          В какой-то момент мне потребовалось демонизировать некоторое действие на python. В сети валялась куча примеров подобной деятельности разной степени собранности. Так как в дальнейшем предполагалось использовать код демонизации в дальнейшей деятельности я решил разнести на разные части настройки и собственно демона.
                          В итоге файлов получилось три:
                          • Родительские классы — с небольшим изменением классы взятые из интернет статей
                          • Классы настройки — реакция на сигналы, реакция на команды и набор статических настроек для запуска
                          • Скрипт запуска — собирает первые два в собственно демона


                          Дальше я попробую описать логику работы всех трех.
                          Читать дальше →
                        • Пишу игрушечную ОС (о прерываниях)


                            Данная статья написана в форме поста для блога. Если она окажется вам интересной, то будет продолжение.

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

                            Общая задумка (пока весьма далёкая от реализации) следующая: единое 64-битное адресное пространство с вечно живущими нитями (как у Phantom OS); виртуальная машина, обеспечивающая безопасность исполнения кода. На данный момент реализованы:

                            1. загрузка ядра при помощи multiboot-загрузчика (GRUB);
                            2. текстовый VGA-режим (16-цветов, kprintf);
                            3. простой интерфейс настройки отображения страниц;
                            4. возможность обработки прерываний на C;
                            5. идентификация топологии процессоров (сокеты, ядра, потоки) и их запуск;
                            6. работающий прототип вытесняющего SMP-планировщика с поддержкой приоритетов;

                            Пропустим описание multiboot-загрузки и работы с VGA-режимом (об этом не писал, разве что, ленивый). Про отображение страниц тоже не хочу писать, боюсь это будет скучно (может, в другой раз). Давайте лучше поговорим об обработке прерываний.
                            Читать дальше →
                          • Использование паттернов проектирования в javaScript: Порождающие паттерны

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

                            В условиях когда клиентская часть веб-приложений становится все более толстой, бизнес-логика неумолимо переползает на клиент, а на суверенитет серверных технологий все более смело посягает node.js нельзя не задуматься о приемах проектирования архитектуры на javaScript. И в этом деле нам несомненно должны помочь паттерны проектирования — шаблонные приемы решения часто встречающихся задач. Паттерны помогают построить архитектуру, которая потребует от вас наименьших усилий при необходимости внести изменения. Но не стоит воспринимать их как панацею, т.е., грубо говоря, если качество кода «не фонтан», он кишит хардкодом и жесткой связью между логически независимыми модулями, то никакие паттерны его не спасут. Но если стоит задача спроектировать масштабируемую архитектуру, то паттерны могут стать хорошим подспорьем.
                            Но впрочем эта статья не о паттернах проектирования как таковых, а о их применении в javaScript. В первой части этой статьи я напишу о применении порождающих паттернах.
                            Читать дальше →
                          • Как я перестал волноваться и стал отдавать метаданные restful API



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

                              Поддержка такого ресурса (особенно в условиях, когда API активно развивается) — достаточно трудозатратное дело. При изменениях, приходится синхронизировать документацию с фактической реализацией и это напрягает. Синхронизация состоит из:
                              • Проверки, что вся существующая функциональность описана в документации
                              • Проверки, что всё описанное работает как заявлено в документации
                              Читать дальше →
                            • Github Visualizer — Сервис визуализации истории репозиториев с GitHub

                                Будучи поклонником программных продуктов для визуализации активности в репозиториях таких как code_swarm и gource. В один прекрасный день я был посещен музой, которая вдохновила меня создать онлайн сервис для визуализации статистики репозиториев с GitHub.
                                И сегодня хочу предоставить на ваш суд мой проект GitHub Visualizer (проект на GitHub).
                                Вот скринкаст для предварительного знакомства.

                                И не большая Gif'ка
                                image

                                Что использовано


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