вторник, 9 декабря 2014 г.

А вам больше нравится Android Studio или Visual Studio?

Google наконец выпустила первую версию Android Studio, о которой я писал еще в 2013 году. Скачать релиз можно уже сейчас. Доступны версии под Windows, Linux и Mac.

Несмотря на усилия Google мне кажется пока еще Eclipse более популярное решение для создания программ под Android.

А тем временем Microsoft тоже не отстает и в Visual Studio 2015 уже можно создавать проекты для Android (правда только приложения Android Native Activity). Подробнее можно почитать в Visual C++ Team Blog.

понедельник, 1 декабря 2014 г.

Что должен знать каждый программист

Компания Google дает рекомендации по темам, которые стоит изучить каждому программисту: Guide for Technical Development. Ссылки подойдут не только начинающим, но и практикующим разработчикам.

вторник, 18 ноября 2014 г.

А вам нужны талантливые разработчики?

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

За свою карьеру мне приходилось работать со многими людьми из разных областей. Вместе мы провели много часов собеседований и просмотрели огромное количество анкет. Теперь эти профессионалы мирового уровня готовы проводить экспертизу новых сотрудников и для других компаний. Как правило кадровые агентства проводят только бестолковую работу задавая вопросы, которые уже освещены в резюме кандидатов. За такую работу вы им платите два оклада нового сотрудника без гарантий качества. Многие профессионалы не проходят фильтр кадровых агентств только потому, что не хотят тратить свое время на совместное чтение анкеты. Мы говорим с этими профессионалами на одном языке и готовы подобрать вам сотрудников из числа лучших.

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

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

пятница, 19 сентября 2014 г.

Как снизить количество ошибок в программе



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

вторник, 9 сентября 2014 г.

DLL Hijacking

DISCLAIMER: Вся информация предоставлена исключительно в ознакомительных целях. Автор не несет ответственности за любой возможный вред, причиненный материалами данной статьи.

Продолжаем усложнять жизнь злоумышленникам. В этот раз посмотрим как написать приложение, которое не будет подвержено атаке DLL Hijacking.

пятница, 5 сентября 2014 г.

Forward exported functions

При создании DLL в Windows необходимо определить точки входа в библиотеку. Чтобы имена были не декорированные (а именно такие стоит использовать, чтобы не зависеть от компоновщика — он от версии к версии делает совершенно разными) часто используется DEF-файл. Минимальный DEF-файл выглядит примерно так:
LIBRARY mydll

EXPORTS
	CreateSomethingCool @1

Документация MSDN однако умалчивает, что тут мы имеем возможность какие-то функции перенаправлять в другие DLL. Для этого надо написать что-то вроде:
LIBRARY mydll

EXPORTS
	CreateSomethingCool @1
	WriteConsole=Kernel32.WriteConsoleA

Теперь, если вызвать функцию WriteConsole из нашей библиотеки, то на самом деле вызовется функция WriteConsoleA из Kernel32.dll. Такой способ позволяет избежать явных зависимостей от других DLL и создания stub-функций. Указанная DLL будет подгружаться только, если кто-то вызовет конкретную экспортируемую функцию. Такого же результата можно добиться и с помощью директивы pragma:
#pragma comment(linker, "/export:WriteConsole=Kernel32.WriteConsoleA")

В прекрасной утилите Dependency Walker можно посмотреть на результат:
Тут видно, что вместо адреса функции WriteConsole указано перенаправление на функцию из Kernel32.dll.

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

Ссылки по теме:
  1. Exported functions that are really forwarders - Raymond Chen
  2. An In-Depth Look into the Win32 Portable Executable File Format, Part 2 - MSDN
  3. Forwarding data in a DLL - Stackoverflow.com

вторник, 19 августа 2014 г.

Visual Studio “14” CTP 3

А тем временем на суд общественности представлена уже третья по счету предварительная версия Visual Studio 2014. Качайте, устанавливайте и оценивайте.

пятница, 11 июля 2014 г.

Как подключиться к Mac, который остался дома



Как подключаться к домашнему компу по ssh — в основном все знают. Если домашний комп работает под управлением Windows, то прокинуть порт на роутере RDP тоже сложностей не вызывает.

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

Речь, однако, пойдет не о Windows и RDP, а об OS X.

пятница, 30 мая 2014 г.

Анализ зависимостей в проектах

Для того, чтобы разобраться в существующих проектах, нужно понять, какие в проекте есть логические модули и как они связаны. В случае использования Visual Studio, в дорогих редакциях продукта доступны функции построения различных графов зависимостей. К сожалению, во-первых, студии с меню Architecture реально дорого стоят. А, во-вторых, в старых проектах, которые до сих пор собираются и имеют проектные файлы только для Visual Studio 2008, сама студия особенно ничего не предлагает.

Конечно, стоит отметить, что для такой цели существуют дорогие инструменты (например, Understand). Но для начала мне хватило того, что я набросал небольшой скрипт на PowerShell. Скрипт этот генерирует dot-файл для GraphViz на основе sln файла. В результате получается схема, как на рисунке ниже, с которой уже можно начинать разбираться в проекте.
Цвет модулей определяется типом проекта (EXE, DLL, LIB), а цвета связей автоматически выбираются так, чтобы их было легче различать. В скрипте добавлена поддержка как Visual Studio 2008, так и последующих версий. Можете попробовать его на своих проектах. Для работы требуется PowerShell как минимум версии 3.0.

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

вторник, 18 марта 2014 г.

В помощь разработчику межплатформенных приложений

В помощь разработчику межплатформенных приложений существует прекрасный справочник предопределенных макросов почти для всех случаев в жизни: http://sourceforge.net/p/predef/wiki/Home/. Как написать код специфичный для конкретной операционной системы, как определить версию компилятора или как узнать модель процессора при сборке — предопределенные макросы этого и много другого можно найти по указанной ссылке.

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

понедельник, 17 февраля 2014 г.

Apple OS X — это не Linux

Юниксовые корни OS X на Маке видны в мелочах. Напрмер, команда split не поддерживает флаг -d (numeric suffixes). Прямо как во FreeBSD. Мелочи эти могут доставлять уйму неудобств.

На помощь приходит проект MacPorts, в котором можно поставить пакет coreutils (и не только) и получить линуксовые версии утилит. Ну и пакет с Midnight Commander тоже можно поставть — куда ж без него.

Чтобы использовать постоянно версию из MacPorts, можно подмену прописать в своем профиле. Для этого в файле ~/.profile нужно добавить такую строку:
alias split=/opt/local/libexec/gnubin/split

пятница, 7 февраля 2014 г.

ALM Summit

В Москве вчера прошел ALM Summit. Кто не успел зарегистрироваться, можно посмотреть записи онлайн трансляций.