Pull to refresh
4
0
AdrenalinHunter @AdrenalinHunter

User

Send message

Минимальный проект MsBuild

Reading time4 min
Views22K
Наверное, каждому программисту, знакомому с системой построения проектов MsBuild, приходила в голову идея не заниматься расширением существующего процесса построения, а придумать его «с нуля». Иными словами, добавить в существующим типам проектов .csproj (проект на C#) и .vbproj (проект на VB.NET) еще один тип (например, .myproj или просто .proj). А кто-то, может быть, даже пытался эту идею реализовать.

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

В этой статье я представляю вам собственное исследование на эту тему.
Читать дальше →

Паттерн Visitor. Продвинутое использование

Reading time7 min
Views49K
Здравствуйте, дорогие хабравчане!

Я хочу поделиться с вами своим опытом использования паттерна проектирования visitor и его интересной модификацией, которую я назвал upcast visitor. К сожалению, непросто придумать простой короткий пример и описать как все работает, также эта статья может показаться сложной для начинающих, тем не менее я постараюсь максимально упростить задачу. Примеры кода приведены на языке С++ и обязательны к прочтению. Без понимания кода вникнуть в суть статьи будет затруднительно.

Предыстория


Представьте, что мы проектируем 2D игру, в которой фрукты падают с дерева, по пути ударяясь о ветки. Цель игры — поймать все фрукты, двигая корзину под деревом.
Строим следующую диаграмму классов:
Читать дальше →

Один день из жизни проджект менеджера глазами девелопера

Reading time5 min
Views15K
Когда ты начинаешь изучать программирование, ты знаешь, каким должен быть идеальный программист, и ты уверен, что ты таким будешь. Ты видишь ошибки программистов старше и опытнее, и совершенно уверен, что ты никогда их не повторишь.

Когда ты устроился в компанию на позицию Junior Developer, ты смотришь вокруг и видишь, с какой лёгкостью старшие товарищи забивают на шаблоны и пишут два одинаковых класса с разными типами переменных. Как они хардодят размеры вьюшек в коде. Как они читают хабр на работе. И ты точно знаешь, что когда вырастешь до Senior Developer-а, ты будешь лучше, надёжнее, ответственнее, любой блок твоего кода можно будет показывать потомкам.

Ты уже три года проработал программистом, ты (возможно) всё более и более пристально смотришь в сторону проджект менеджмента. Твой ПМ уже не царь, и не бог, и его работа не кажется тебе сложной и непонятной. Ты видишь, что работаешь намного больше его, а он ленится сделать тебе Code Review и похвалить за оригинальную интеграцию сторонней библиотеки. Он даже не смотрит на твой идеальный код в сложнейшей стыковке кривого API и мутной бизнес-логики. И ты точно знаешь, что, когда тебе улыбнётся удача руководить проектом, ты всё будешь делать лучше. Ты будешь бережнее следить за своими девелоперами, ревьювить каждый их класс, хвалить за удачные решения и порицать за очевидные ошибки.
Читать дальше →

Как я заработал $200K на рынке образовательных приложений iOS

Reading time12 min
Views23K
Данную статью хочу приурочить к одновременно выходу второй версии моего приложения Word Wizard и взятию новой отметки в $200 000 в Apple AppStore. Далее я постараюсь поделиться своим опытом и мыслями об образовательном рынке, а также рассказать свою историю успеха. Надеюсь что эта информация будет полезна многим независимым разработчикам. Для тех же кто создает образовательные продукты на платформе iOS моя статья даст возможность оценить рынок приложений в этой сфере.



Собственно начну с продаж и рейтинга, а затем расскажу подробнее про мой личный опыт.
Итак, поехали ...

Продвижение приложения Radar для Windows Phone 7

Reading time5 min
Views9.1K
image

Я постоянно общаюсь с разработчиками в плане подготовки информационных кампаний для продвижения их приложений в СМИ и последнее время замечаю возрастающий интерес к Windows Phone 7 и методам раскрутки приложений, созданных для этой платформы. Поэтому сегодня я расскажу историю продвижения программы для WP7 Mango, как и где я ее продвигал и что из этого получилось.

Все началось в мае. Напомню, что в этом месяце Microsoft и Softkey заключили соглашение, согласно которому известный супермаркет ПО начал предоставлять отечественным разработчикам возможность размещать по упрощенной схеме свои приложения в Windows Phone Marketplace (подробности здесь), а в сентябре начались продажи первых смартфонов на базе Windows Phone 7 в России. В октябре ко мне начали обращаться разработчики, желающие рассказать о своем продукте на Западе и в России. Одним из первых был новосибирский стартап Sibity, который разработал программу Radar для Windows Phone 7.

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

Свой инструмент нужно знать в лицо: обзор наиболее часто используемых структур данных

Reading time8 min
Views64K
image
Некоторое время назад я сходил на собеседование в одну довольно большую и уважаемую компанию. Собеседование прошло хорошо и понравилось как мне, так и, надеюсь, людям его проводившим. Но на следующий день, в процессе разбора полетов, я обнаружил, что в ходе собеседования ответ на как минимум один вопрос был неверен.

Вопрос: Почему поиск в python dict на больших объемах данных быстрее чем итерация по индексированному массиву?

Ответ: В dict хранятся хэши от ключей. Каждый раз, когда мы ищем в dict значение по ключу, мы сначала вычисляем его хэш, а потом (внезапно), выполняем бинарный поиск. Таким образом, сложность составляет O(lg(N))!

На самом деле никакого бинарного поиска тут нет. И сложность алгоритма не O(lg(N)), а Amort. O(1) — так как в основе dict питона лежит структура под названием Hash Table.

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

Удобная отладка Windows служб

Reading time2 min
Views16K
Отладка Windows Service приложений не такая тривиальная задача как кажется. Проблема в том, что при отладке этого типа приложений нельзя воспользоваться стандартными средствами Visual Studio такими как точки останова (breakpoints) и прочими полезными инструментами. Всё из-за того, что Windows Service приложение не может быть зыпущено по F5 прямо из Visual Studio. Всё же, MSDN предлагает нам несколько способов для их отладки. Скорее всего многие разработчики даже и не сталкивались с ними до тех пор, пока не стали создавать свою первую службу. Это использование записей в журнал событий и подключение к процессу. Оба этих метода хорошо описаны в MSDN, но они позволяют произовдить отладку только уже запущенной службы. Из-за этого код, который производит сам запуск службы, в методе OnStart(), нельзя протестировать.

Ниже я хочу рассказать о способе которым можно обойти это ограничение, и тестировать свой сервис как обычное консольное приложение. И, следовательно, воспользоваться всем тем, что предлагает нам для этого Visual Studio.
Читать дальше →

Пара историй про отличия Release от Debug

Reading time5 min
Views27K
Все разработчики знают, что исполнение релизной версии может отличаться от отладочной. В этой статье я расскажу пару случаев из жизни, когда такие отличия приводили к ошибочному исполнению программы. Примеры не отличаются большой сложностью, но вполне могут уберечь от наступления на грабли.

История 1



Собственно, началось все с того, что пришел баг о том что при некоторых операциях приложение вылетает. Это бывает часто. Баг не захотел воспроизводиться в Debug-версии. Это порой бывает. Поскольку в приложении часть библиотек была написано на C++, то первой мыслью было что-то вроде «где-то забыли переменную проинициализировать или что-то в этом духе». Но на деле суть бага крылась в управляемом коде, хотя без неуправляемого тоже не обошлось.
Читать дальше →

20 бесплатных дополнений для Visual Studio

Reading time4 min
Views39K
Для Visual Studio 2010 создано уже около 900 дополнений. Многие из них позволяют облегчить решение рутинных задач, добавить удобства. Ниже представлено двадцать популярных дополнений, которые вы возможно найдете полезными для вашей работы.
Читать дальше →

Курс Стэнфорда по цифровой фотографии

Reading time1 min
Views5.8K
Стэнфордский университет выложил в онлайн лекции и сопроводительные материалы к курсу по цифровой фотографии (CS 178). Курс знакомит студентов с научным, художественным и компьютерным аспектами цифровой фотографии — как работает камера, как делать хорошие снимки, как обрабатывать фотографии.

Кроме лекций, есть подробный план занятий, список необходимых учебников и программного обеспечения и интерактивные материалы (флэш-апплеты), которые иллюстрируют каждую лекцию. Есть также список еженедельных практических заданий, а в заключение — список вопросов на экзамене и анализ решений. В качестве бонуса — анимация сборки камеры Canon 10D. В принципе, всех этих материалов достаточно, чтобы пройти курс самостоятельно, а потом сдать экзамен и проверить свои ответы.

Что делать, если вы застряли с Большой и Сложной Программистской Задачей?

Reading time5 min
Views8.8K
image

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

Когда я обратил на это внимание, я серьезно призадумался, взывая к собственной совести, чувству долга и гордости человека, который никогда не подводит себя и свою команду.

Со временем я выработал способ, позволяющий вернуть мне продуктивность в такой ситуации и суметь закончить непростую задачу. Этим опытом я и хочу поделиться.
Читать дальше →

Дистанционное образование в LSE

Reading time2 min
Views10K
— Sir Humphrey gets very upset. He doesn't regard Chief Scientific Advisor as one of us.
— I thought he won the DSO at Arnhem!
— That doesn't make up for speaking with an Austrian accent. And he certainly didn't go to Oxford or Cambridge. He didn't even go to the LSE.


Yes, Prime Minister


На фоне именитых британских Оксфорда и Кембриджа London School of Economics and Political Science известна куда менее, но именно об этом вузе можно сказать «широко известен в узких кругах». За более чем сто лет существования школы – семнадцать нобелевских лауреатов, четвертое место в списке лучших экономических школ мира и одна из наиболее развитых сетей дистанционного образования.
Читать дальше →

Создание и продвижение Symbian-хита. Часть 1-я. Разработка

Reading time6 min
Views13K
В этом посте публикуется история о том, как создавалось приложение Magic Brush, и о трудностях, возникших в процессе его разработки. На данный момент Magic Brush — одно из наиболее популярных приложений в Магазине Ovi, что обеспечивает стабильный доход. В хорошие времена количество продаж приложения только в Магазине Ovi достигает 4K копий в месяц. А Lite-версия была загружена в нем около 1,7M раз. Но забавно то, что задумывалось вначале совсем другое приложение. Обо всем по порядку под катом.
Читать дальше →

Собрать проект Visual Studio в один файл с помощью ILMerge

Reading time3 min
Views107K
app.exe, d1.dll d2.dll = app.exeОбычно результатом компиляции проекта является сборка (assembly) проекта, а также его зависимости (Referenced Assemblies). Однако иногда нужно чтобы результатом был один файл единственный файл, независимый от других сборок. Например простая утилита, которую можно будет куда угодно скопировать и она будет работать.

Пример

Условно говоря после:
    compile App\App.csproj  
    dir App\bin\Release  
Получаются:
    App.exe
    dep1.dll
    dep2.dll
Нам же нужно лишь один самодостаточный
    App.exe 
То есть содержащий в себе dep1.dll и dep2.dll

На Хабре уже присутствует решение со встраиванием зависимостей в ресурсы, здесь я покажу как это сделать с помощью ILMerge и Post Build Event в Visual Studio.

читать как это сделать

О синглтонах и статических конструкторах

Reading time8 min
Views29K
Изначально автор хотел назвать эту статью следующим образом: «О синглтонах, статических конструкторах и инициализаторах статических полей, о флаге beforeFieldInit и о его влиянии на deadlock-и статических конструкторов при старте сервисов релизных билдов в .Net Framework 3.5», однако в связи с тем, что многострочные названия по неведомой автору причине так и не прижились в современном компьютерном сообществе, он (автор) решил сократить это название, чудовищным образом исказив его исходный смысл.

-------------------------

Любая реализация паттерна Синглтон в общем случае преследует две цели: во-первых, реализация должна быть потокобезопасной, чтобы предотвратить создание более одного экземпляра в многопоточном мире .Net; а во-вторых, эта реализация должна быть «отложенной» (lazy), чтобы не создавать экземпляр (потенциально) дорого объекта раньше времени или в тех случаях, когда он вообще может не понадобиться. Но поскольку основное внимание при прочтении любой статьи про реализацию Синглтона отводится многопоточности, то на «ленивость» зачастую не хватает ни времени не желания.

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

Postsharp: авторизация и аутентификация

Reading time6 min
Views1.6K
Одно из самых востребованных применений аспектно-ориентированного программирования это вынос обслуживающего инфраструктурного кода, который часто повторяется в системе, в отдельный класс. Что в свою очередь является проявленем принципа единой ответственности (SRP — Single Responsibility Principle). Очень часто задачи авторизации и аутентификации разбросаны по всему коду проверяя права доступа пользователя. Следствием этого является большая трудоемкость изменений в этой немаловажной части логики, а так же ее общая проверка. Принцип единой ответственности говорит о том, что должна быть только одна причина для изменения класса, так что все что относится к авторизации и аутентификации просто просится в отдельные классы.

Основные методы аутентификации обычно не то, что используется по всему приложению. Например в веб приложениях ввод данных для аутентификации и сама аутентификация происходит на одной странице, после чего информация о пользователе хранится в каком-либо токене со сроком годности. Благодаря этому пользователь может автоматически входить в систему в течении срока работы токена. Таким образом единственным кодом, который пронизывает все страницы приложения будет проверка того, что пользователь до сих пор в системе. Конечно, вы можете использовать PostSharp для такой проверки, но это не лучший способ применения, по моему мнению.

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

Доведение проекта до конца

Reading time4 min
Views5.6K
В работе первые 90% проекта делаются за 10% времени, оставшиеся 10% — за 90%
Народная мудрость


В работе очень важным является доведение до конца.

Существует всего одно результативное состояние у задачи — «сделано». Все остальные — почти, еще чуть-чуть, немного осталось, сделал наполовину, и т.д. — это состояние, которое я называю «не сделано».

Согласно одной статистике, 4-5% людей обладают талантом предпринимателя (от слова «предпринимать»). Думаю, не сильно больше — талантом доводить до конца.

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

Бороться до конца — вот кредо настоящего профессионала (умение резко переключиться под нужды, ясное дело, также нужно:).

Теперь пример доведения дела до конца в рамках целого проекта.
Читать дальше →

Epic Fail от IDA и Eset

Reading time5 min
Views57K
image

Всем привет!

Сегодня, буквально часы назад пролетела новость — в паблике появился весь комплект давнего лакомого кусочка хакеров, кардеров и крякеров — последняя версия интерактивного дизассемблера IDA со всем прилагающимся инструментарием.

Конкретно, зарелизили:
Hex-Rays.IDA.Pro.Advanced.v6.1.Windows.incl.Hex-Rays.x86.Decompiler.v1.5.READ.NFO-RDW
Hex-Rays.IDA.Pro.Advanced.SDK.v6.1-RDW
Hex-Rays.IDA.Pro.Advanced.FLAIR.v6.1-RDW
Hex-Rays.IDA.Pro.Advanced.IDS.Utilities.v6.1-RDW
Hex-Rays.IDA.Pro.Advanced.LOADINT.v6.1-RDW
Hex-Rays.IDA.Pro.Advanced.TILIB.v6.1-RDW
Hex-Rays.IDA.Pro.Advanced.v6.1.TVision.v2009b.Source-RDW


Количество ссылок в сети сейчас растёт с геометрической прогрессией.

Ну ещё один лик, спросите Вы, и что тут такого, чтобы выкладывать на Хабре в разделе Информационной безопасности? Всё дело скрывается в надписи, которая приведена в заголовке этой статьи.
Читать дальше →

JavaScript F.A.Q: Часть 2

Reading time14 min
Views76K
image

Около 2-х месяцев назад я и TheShock собирали вопросы по JavaScript в теме FAQ по JavaScript: задавайте вопросы. Первая часть, те вопросы, которые достались мне, появилась буквально через несколько дней JavaScript F.A.Q: Часть 1, а вот вторая часть все не выходит и не выходит. TheShock сейчас переезжает в другую страну и поэтому ему не до ответов. Он попросил меня ответить на его часть. Итак вторая часть ответов — те вопросы, которые достались тоже мне.
Читать дальше →

Information

Rating
Does not participate
Location
Украина
Registered
Activity