Google наконец выпустила первую версию Android Studio, о которой я писал еще в 2013 году. Скачать релиз можно уже сейчас. Доступны версии под Windows, Linux и Mac.
Несмотря на усилия Google мне кажется пока еще Eclipse более популярное решение для создания программ под Android.
А тем временем Microsoft тоже не отстает и в Visual Studio 2015 уже можно создавать проекты для Android (правда только приложения Android Native Activity). Подробнее можно почитать в Visual C++ Team Blog.
вторник, 9 декабря 2014 г.
А вам больше нравится Android Studio или Visual Studio?
Posted by
Kirill V. Lyadvinsky
обновлено:
2015-03-12T10:13:03Z
Labels:
Android
понедельник, 1 декабря 2014 г.
Что должен знать каждый программист
Компания Google дает рекомендации по темам, которые стоит изучить каждому программисту: Guide for Technical Development. Ссылки подойдут не только начинающим, но и практикующим разработчикам.
Posted by
Kirill V. Lyadvinsky
обновлено:
2015-12-16T11:23:56Z
Labels:
favourites
,
learning
,
programming
вторник, 18 ноября 2014 г.
А вам нужны талантливые разработчики?
Для создания качественных продуктов нужно набирать талантливых разработчиков. Так уж вышло, что опыта в этой области оказалось больше, чем нужно самому. На свой девелоперский стартап пока нет средств, а спрос на поиск и аренду команд или отдельных людей вроде бы есть. В связи с этим, если имеется интерес, то прошу писать письма.
За свою карьеру мне приходилось работать со многими людьми из разных областей. Вместе мы провели много часов собеседований и просмотрели огромное количество анкет. Теперь эти профессионалы мирового уровня готовы проводить экспертизу новых сотрудников и для других компаний. Как правило кадровые агентства проводят только бестолковую работу задавая вопросы, которые уже освещены в резюме кандидатов. За такую работу вы им платите два оклада нового сотрудника без гарантий качества. Многие профессионалы не проходят фильтр кадровых агентств только потому, что не хотят тратить свое время на совместное чтение анкеты. Мы говорим с этими профессионалами на одном языке и готовы подобрать вам сотрудников из числа лучших.
Некоторые компании не готовы держать у себя штат профессионалов. Эту проблему мы также готовы решить, предлагая специалистов во временное пользование. Более того, мы готовы формировать команды и осуществлять тренинги уже в процессе того, как они начнут решать ваши проблемы.
Если у вас уже есть разработчики, то мы готовы вам помочь сформировать из них команду. Подготовить план развития и управления персоналом. Научить эту команду решать ваши задачи.
За свою карьеру мне приходилось работать со многими людьми из разных областей. Вместе мы провели много часов собеседований и просмотрели огромное количество анкет. Теперь эти профессионалы мирового уровня готовы проводить экспертизу новых сотрудников и для других компаний. Как правило кадровые агентства проводят только бестолковую работу задавая вопросы, которые уже освещены в резюме кандидатов. За такую работу вы им платите два оклада нового сотрудника без гарантий качества. Многие профессионалы не проходят фильтр кадровых агентств только потому, что не хотят тратить свое время на совместное чтение анкеты. Мы говорим с этими профессионалами на одном языке и готовы подобрать вам сотрудников из числа лучших.
Некоторые компании не готовы держать у себя штат профессионалов. Эту проблему мы также готовы решить, предлагая специалистов во временное пользование. Более того, мы готовы формировать команды и осуществлять тренинги уже в процессе того, как они начнут решать ваши проблемы.
Если у вас уже есть разработчики, то мы готовы вам помочь сформировать из них команду. Подготовить план развития и управления персоналом. Научить эту команду решать ваши задачи.
Posted by
Kirill V. Lyadvinsky
обновлено:
2015-12-16T11:25:29Z
Labels:
HR
пятница, 19 сентября 2014 г.
Как снизить количество ошибок в программе
Хорошие разработчики всячески стремятся снизить количество ошибок в коде и для этого изобретают различные подходы, которые позволяют эти ошибки найти до того, как продукт попадет к пользователям. Тут можно выделить следующие подходы, некоторые из которых могут отсутствовать в вашем производственном цикле:
Posted by
Kirill V. Lyadvinsky
обновлено:
2016-02-16T19:22:33Z
вторник, 9 сентября 2014 г.
DLL Hijacking
DISCLAIMER: Вся информация предоставлена исключительно в ознакомительных целях. Автор не несет ответственности за любой возможный вред, причиненный материалами данной статьи.
Продолжаем усложнять жизнь злоумышленникам. В этот раз посмотрим как написать приложение, которое не будет подвержено атаке DLL Hijacking.
Продолжаем усложнять жизнь злоумышленникам. В этот раз посмотрим как написать приложение, которое не будет подвержено атаке DLL Hijacking.
Posted by
Kirill V. Lyadvinsky
обновлено:
2015-12-16T11:27:08Z
Labels:
DLL
,
programming
,
security
,
vulnerability
пятница, 5 сентября 2014 г.
Forward exported functions
При создании DLL в Windows необходимо определить точки входа в библиотеку. Чтобы имена были не декорированные (а именно такие стоит использовать, чтобы не зависеть от компоновщика — он от версии к версии делает совершенно разными) часто используется DEF-файл. Минимальный DEF-файл выглядит примерно так:
Документация MSDN однако умалчивает, что тут мы имеем возможность какие-то функции перенаправлять в другие DLL. Для этого надо написать что-то вроде:
Теперь, если вызвать функцию WriteConsole из нашей библиотеки, то на самом деле вызовется функция WriteConsoleA из Kernel32.dll. Такой способ позволяет избежать явных зависимостей от других DLL и создания stub-функций. Указанная DLL будет подгружаться только, если кто-то вызовет конкретную экспортируемую функцию. Такого же результата можно добиться и с помощью директивы pragma:
В прекрасной утилите Dependency Walker можно посмотреть на результат:
Тут видно, что вместо адреса функции WriteConsole указано перенаправление на функцию из Kernel32.dll.
Подобным образом можно обращаться и с экспортируемыми данными. Подробнее о том как это можно сделать можно почитать в статье по ссылке ниже.
Ссылки по теме:
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.
Подобным образом можно обращаться и с экспортируемыми данными. Подробнее о том как это можно сделать можно почитать в статье по ссылке ниже.
Ссылки по теме:
Posted by
Kirill V. Lyadvinsky
обновлено:
2022-05-12T06:50:32Z
Labels:
Cplusplus
,
DLL
,
export
,
programming
,
VisualStudio
,
Windows
вторник, 19 августа 2014 г.
Visual Studio “14” CTP 3
А тем временем на суд общественности представлена уже третья по счету предварительная версия Visual Studio 2014. Качайте, устанавливайте и оценивайте.
Posted by
Kirill V. Lyadvinsky
обновлено:
2014-08-19T05:10:57Z
Labels:
Microsoft
,
programming
,
VisualStudio
,
Windows
пятница, 11 июля 2014 г.
Как подключиться к Mac, который остался дома
Как подключаться к домашнему компу по ssh — в основном все знают. Если домашний комп работает под управлением Windows, то прокинуть порт на роутере RDP тоже сложностей не вызывает.
Надо отметить, что кучу портов держать открытыми — это небезопасно, т.к. у каждого сервиса могут быть свои уязвимости. Чем больше открыто портов, тем больше вероятность, что вас взломают. Не говоря о том, что информация в большинстве случаев идет по незашифрованному каналу.
Речь, однако, пойдет не о Windows и RDP, а об OS X.
Posted by
Kirill V. Lyadvinsky
обновлено:
2022-05-12T06:53:20Z
пятница, 30 мая 2014 г.
Анализ зависимостей в проектах
Для того, чтобы разобраться в существующих проектах, нужно понять, какие в проекте есть логические модули и как они связаны. В случае использования Visual Studio, в дорогих редакциях продукта доступны функции построения различных графов зависимостей. К сожалению, во-первых, студии с меню Architecture реально дорого стоят. А, во-вторых, в старых проектах, которые до сих пор собираются и имеют проектные файлы только для Visual Studio 2008, сама студия особенно ничего не предлагает.
Конечно, стоит отметить, что для такой цели существуют дорогие инструменты (например, Understand). Но для начала мне хватило того, что я набросал небольшой скрипт на PowerShell. Скрипт этот генерирует dot-файл для GraphViz на основе sln файла. В результате получается схема, как на рисунке ниже, с которой уже можно начинать разбираться в проекте.
Цвет модулей определяется типом проекта (EXE, DLL, LIB), а цвета связей автоматически выбираются так, чтобы их было легче различать. В скрипте добавлена поддержка как Visual Studio 2008, так и последующих версий. Можете попробовать его на своих проектах. Для работы требуется PowerShell как минимум версии 3.0.
Скрипт скачать можно на GitHub. Там же я буду его развивать по мере необходимости или, может быть, кто-то еще захочет внести свой вклад. Чуть позже опишу детали создания скрипта.
Конечно, стоит отметить, что для такой цели существуют дорогие инструменты (например, Understand). Но для начала мне хватило того, что я набросал небольшой скрипт на PowerShell. Скрипт этот генерирует dot-файл для GraphViz на основе sln файла. В результате получается схема, как на рисунке ниже, с которой уже можно начинать разбираться в проекте.
Цвет модулей определяется типом проекта (EXE, DLL, LIB), а цвета связей автоматически выбираются так, чтобы их было легче различать. В скрипте добавлена поддержка как Visual Studio 2008, так и последующих версий. Можете попробовать его на своих проектах. Для работы требуется PowerShell как минимум версии 3.0.
Скрипт скачать можно на GitHub. Там же я буду его развивать по мере необходимости или, может быть, кто-то еще захочет внести свой вклад. Чуть позже опишу детали создания скрипта.
Posted by
Kirill V. Lyadvinsky
обновлено:
2022-05-12T06:54:18Z
Labels:
Architecture
,
powershell
,
programming
,
VisualStudio
вторник, 18 марта 2014 г.
В помощь разработчику межплатформенных приложений
В помощь разработчику межплатформенных приложений существует прекрасный справочник предопределенных макросов почти для всех случаев в жизни: http://sourceforge.net/p/predef/wiki/Home/. Как написать код специфичный для конкретной операционной системы, как определить версию компилятора или как узнать модель процессора при сборке — предопределенные макросы этого и много другого можно найти по указанной ссылке.
Используя знания из этого справочника можно писать межплатформенный код, которые еще и разными компиляторами будет собираться. Нужно только помнить, что с ifdef в коде не стоит увлекаться, т.к. они снижают читабельность кода. В общем случае, платформозависимые вещи лучше выделять в отдельные файлы и различать на уровне системы сборки.
Используя знания из этого справочника можно писать межплатформенный код, которые еще и разными компиляторами будет собираться. Нужно только помнить, что с ifdef в коде не стоит увлекаться, т.к. они снижают читабельность кода. В общем случае, платформозависимые вещи лучше выделять в отдельные файлы и различать на уровне системы сборки.
Posted by
Kirill V. Lyadvinsky
обновлено:
2016-01-25T11:12:52Z
Labels:
C++0x
,
Cplusplus
,
favourites
,
programming
понедельник, 17 февраля 2014 г.
Apple OS X — это не Linux
Юниксовые корни OS X на Маке видны в мелочах. Напрмер, команда split не поддерживает флаг -d (numeric suffixes). Прямо как во FreeBSD. Мелочи эти могут доставлять уйму неудобств.
На помощь приходит проект MacPorts, в котором можно поставить пакет coreutils (и не только) и получить линуксовые версии утилит. Ну и пакет с Midnight Commander тоже можно поставть — куда ж без него.
Чтобы использовать постоянно версию из MacPorts, можно подмену прописать в своем профиле. Для этого в файле ~/.profile нужно добавить такую строку:
На помощь приходит проект MacPorts, в котором можно поставить пакет coreutils (и не только) и получить линуксовые версии утилит. Ну и пакет с Midnight Commander тоже можно поставть — куда ж без него.
Чтобы использовать постоянно версию из MacPorts, можно подмену прописать в своем профиле. Для этого в файле ~/.profile нужно добавить такую строку:
alias split=/opt/local/libexec/gnubin/split
Posted by
Kirill V. Lyadvinsky
обновлено:
2014-07-14T10:05:29Z
пятница, 7 февраля 2014 г.
ALM Summit
В Москве вчера прошел ALM Summit. Кто не успел зарегистрироваться, можно посмотреть записи онлайн трансляций.
Posted by
Kirill V. Lyadvinsky
обновлено:
2014-02-07T05:08:09Z
Подписаться на:
Сообщения
(
Atom
)