Pull to refresh
0
0
smartello @smartello

User

Send message

Создание архитектуры программы или как проектировать табуретку

Reading time25 min
Views681K
Взявшись за написание небольшого, но реального и растущего проекта, мы «на собственной шкуре» убедились, насколько важно то, чтобы программа не только хорошо работала, но и была хорошо организована. Не верьте, что продуманная архитектура нужна только большим проектам (просто для больших проектов «смертельность» отсутствия архитектуры очевидна). Сложность, как правило, растет гораздо быстрее размеров программы. И если не позаботиться об этом заранее, то довольно быстро наступает момент, когда ты перестаешь ее контролировать. Правильная архитектура экономит очень много сил, времени и денег. А нередко вообще определяет то, выживет ваш проект или нет. И даже если речь идет всего лишь о «построении табуретки» все равно вначале очень полезно ее спроектировать.

К моему удивлению оказалось, что на вроде бы актуальный вопрос: «Как построить хорошую/красивую архитектуру ПО?» — не так легко найти ответ. Не смотря на то, что есть много книг и статей, посвященных и шаблонам проектирования и принципам проектирования, например, принципам SOLID (кратко описаны тут, подробно и с примерами можно посмотреть тут, тут и тут) и тому, как правильно оформлять код, все равно оставалось чувство, что чего-то важного не хватает. Это было похоже на то, как если бы вам дали множество замечательных и полезных инструментов, но забыли главное — объяснить, а как же «проектировать табуретку».

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

Данная статья является попыткой ответить на эти вопросы хотя бы в первом приближении.
Читать дальше →
Total votes 88: ↑85 and ↓3+82
Comments45

Заглянем за кулисы разработки: подборка исходных кодов классических игр

Reading time10 min
Views82K
Обожаю заглядывать за кулисы. Мне интересно, как делаются вещи. Мне кажется, что большинству людей это тоже интересно.

Исторически так сложилось, что видеоигры не делятся исходниками. Конечно, они ведь предназначены для игроков. Но для программистов там всегда есть, на что посмотреть. И некоторые игры всё-таки выпускали свои исходники. А я давно намеревался сделать такую подборку.

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

Многие игры после выпуска исходников были улучшены и дополнены сообществом – я намеренно даю ссылки только на оригинальные исходники. Так что, если вас вдруг интересуют апгрейды – они могут существовать.

Многие игры были рассмотрены на сайте Fabien Sanglard. Если вам интересны подробности их работы, то пожалуйте к нему.

Можно заметить, что многие игры принадлежат id Software/Apogee. Совпадение? Не думаю. id славится открытостью и привычкой выпускать исходники. Старые коммерческие игры уже не имеют ценности и были бы потеряны – не лучше ли, чтобы кто-то учился чему-то полезному на их основе?

Итак, приступим (в хронологическом порядке):
Читать дальше →
Total votes 58: ↑56 and ↓2+54
Comments12

Вводим текст в TextInput по маске

Reading time2 min
Views3.4K
image

Здравствуйте уважаемые читатели.



Не так давно (в одном из flex-проектов) понабилось отображать текст в поле ввода (TextInput) в определенном формате. Например, при вводе городского номера телефона нам необходимо в конечном итоге отобразить его следующим образом «(111) 22-33-44», при этом необходимо, чтобы пользователь видел шаблон ввода, например, «(___) __-__-__» и соответственно ориентировался по нему при использовании поля.

Что из этого получилось...
Total votes 49: ↑38 and ↓11+27
Comments11

Непредубежденность

Reading time1 min
Views2K
На youtube есть канал молодого британца по имени Doug 'QualiaSoup'. Он один из борцов за здравый смысл и научный, логический подход к жизни. Его разъясняющие видеоролики мне лично очень нравятся. И хотя многие ошибочно его ставят в один ряд с воинствующими атеистами, видео от QualiaSoup отличаются трезвым разъяснением расхожих ошибок, ложных логических суждений и недопонимания науки, а не атакой на религию или мифы. Даг допускает существование любого мнения и борется лишь со слепой верой и непониманием.

Представляю вам свой перевод самого популярного ролика QualiaSoup — Open Mindedness.


P.S. Даг получил от Youtube предложение о сотрудничестве, но вскоре заморозил свой проект и отказался, потому что администрация сайта закрыла без предупреждения такие каналы, как Cozmikzen и Adamatheatheist.
Total votes 71: ↑65 and ↓6+59
Comments144

Рождение идеи. Форсируем события.

Reading time4 min
Views774
Эта статья является продолжением статьи Рождение идеи. Как придумать велосипед.

Представим ситуацию, когда нам кровь-из-носа надо придумать свежую креативную идею. Это периодически случается. Например, у нас есть свободная неделя и мы решили потратить время с пользой. Представили? Давайте начнем.

В основу опять будут взяты абстрактные предметы, которые мы выберем абсолютно случайно. Для чистоты эксперимента, это будут самые банальные вещи, которые есть практически в каждом доме: ластик, карандаш и лист бумаги. Подчеркну, что данный способ применим не только к материальным вещам. Таким же образом можно придумать и нечто виртуальное. Поехали.
Читать дальше →
Total votes 28: ↑27 and ↓1+26
Comments21

filehippo.com оптовое обновление программ на PC

Reading time1 min
Views1.4K
Сервис для сканирования программ установленных на PC и закачки стабильных и бета версий распространенного программного обеспечения, с помощью этого сервиса можно очень просто отслеживать свежесть программного обеспечения установленного в данный момент.

Сервис работает таким образом:

Скачивается программа Update Checker


Читать дальше →
Total votes 38: ↑35 and ↓3+32
Comments17

Прикладная психология для веб-дизайна

Reading time5 min
Views675
Сайты, которые могут видоизменяться в зависимости от особенностей мышления посетителя, могут принести пользу электронной коммерции.
Перевоплощение: сайт British Telecom, анализирует поведение пользователя и меняет свою форму, в зависимости от его психологических особенностей. К примеру, определив обладает ли посетитель аналитическим либо же эмоциональным складом ума, веб-сайт перестраивается так, чтобы удобнее было продать данному пользователю нужный товар.
Далеко не просто создать такой сайт, который бы понравился любому посетителю. Кто-то предпочитает простые фразы на чистой странице, а кому-то удобнее иметь дело с таблицами и графиками. Исследователи факультета менеджмента имени Слоана при MIT разработали технологию, которая позволяет автоматически адаптировать сайт под каждого конкретного посетителя, так, чтобы информация на сайте была представлена в соответствии с типом мышления каждого конкретного человека. Исследователи надеются, что их технология поможет добиться большей эффективности в онлайн-торговле.

По данным первоначальных исследований, выяснилось, что сайт, который получает способность менять свою форму, подстраиваясь под разные типы посетителей, может повысить свои продажи до 20 процентов. Некоторые сайты, например, Amazon.com, уже сейчас предлагают возможность персонализации, однако они адаптируются под посетителя на основе информации из его личного профиля, оставленных cookies или полученной путём длинных опросов. В то же время, система Слоана адаптируется под незнакомого посетителя в течении нескольких первых кликов, которые он делает на веб-сайте, проанализировав его манеру работать с информацией.

Профессор маркетинга из Слоана, Джон Хаузер, поясняет, что система поможет сайтам определять тип мышления. Она будет наблюдать за тем, какие именно элементы имеют для пользователя главное значение и на основе этого перестраивать сайт. Перемены будут почти незаметны. «Внезапно вы обнаруживаете, что у сайта более понятная удобная навигация, и на нём содержится именно та информация, которая вам требуется», — говорит Хаусер. По его мнению, пользователь не должен даже догадаться, что сайт персонализирован.

Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments8

PHP модуль — это всё ещё просто. Часть вторая

Reading time7 min
Views6.1K
Пока nerezus сочиняет статью о встраивании PHP, я постараюсь продолжить его рассказ о написании расширений. Рассказано будет далеко не всё, поскольку я считаю, что сложность наращивать надо постепенно, иначе материал будет трудноусвояемым и совсем не питательным. В связи с этим я всё-таки не расскажу в этот раз, как подменить операторы в классе, кто захочет, может почитать исходники модуля Operator от Сары Големон — основного автора какой бы то ни было информации о разработке расширений PHP.
Поскольку разработку я веду исключительно в линуксе, то писать мы будем без всяких хитрых аддонов к Visual Studio, ручками, с нуля :) А что, лучше сразу разобраться, а потом уже упрощать свой труд.
Поехали?
Total votes 42: ↑36 and ↓6+30
Comments20

Обзор нескольких новых плагинов jQuery

Reading time4 min
Views6.3K
Довольно часто я наступаю на одни и те же грабли. Стараясь выполнить какой-нибудь проект побыстрее, я с головой ухожу в реализацию необходимой функциональности. А через неделю, мне на глаза обязательно попадается описание библиотеки, фреймворка или плагина, воспользовавшись которыми, я мог бы выполнить свою часть работы в разы быстрее. В общем, сейчас я стараюсь быть в курсе готовых решений в интересующих меня областях. В последнее время мне часто приходится работать с javascript и поэтому, сейчас я уделяю особое внимание библиотеке jQuery и ее плагинам. Должен сказать, что упускать из виду такое разнообразие готовых решений просто нельзя. Данная статья сделана на основе обзора «50 Awesome New jQuery Plugins», который я прочитал пару дней назад.
Читать дальше →
Total votes 132: ↑123 and ↓9+114
Comments28

Основы Hibernate

Reading time17 min
Views430K


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

Долго думал, о чем же написать свой «первый» топик… Слово первый не зря взял в кавычки, так как первый топик на самом деле уже был, опыт был к сожалению неудачный — дело закончилось баном.  Решил больше не копипастить. Уверенности тому, что надо написать что-то свое, придал вот этот топик. Решил твердо — пусть это будет и редко, но буду писать сам.

Ну, едем дальше!

Совсем недавно, по роду свой деятельности, мне пришлось столкнуться с таким понятием как ORM — (англ. Object-relational mapping). В двух словах ORM — это отображение объектов какого-либо объектно-ориентированного языка в структуры реляционных баз данных. Именно объектов, таких, какие они есть, со всеми полями, значениями, отношениями м/у друг другом.
Читать дальше →
Total votes 64: ↑59 and ↓5+54
Comments112

Собираем установочные пакеты из Qt проектов по-взрослому

Reading time21 min
Views21K
Методом проб и ошибок я изобрел очередной велосипед, о котором и собираюсь рассказать Вам ниже.Речь пойдет о сборке пакетов из проектов Qt для Debian и Rpm based систем, Windows из под Ubuntu/Debian. В принципе метод весьма прост, поэтому, думаю, что при небольших изменениях он подойдет и для rpb based дистрибтивов, а для Windows систем потребуется установка cygwin.Кроме того эта тема очень мало обсуждается в интернете, хотя я бы не назвал сборку кроссплатформенных приложений в инсталяционные пакеты простой задачей.Кому будет интересен данный материал:
  • в первую очередь начинающим разработчикам Qt, которые хотят распространять свои приложения в удобном для пользователей виде;
  • разработчикам, использующих другие языки программирования (при небольших изменениях можно получить.
У меня есть уверенность в том, что все действия, описанные ниже, можно было бы сделать скриптом make, но и текущий вариант тоже неплох и имеет право на существование.Также, если Вы используете любой другой способ для автоматической сборки проектов, опишите его пожалуйста. Хотелось бы собрать в итоге как можно больше информации по этой теме.
Читать дальше →
Total votes 31: ↑30 and ↓1+29
Comments18

Паттерн проектирования «Декоратор» / «Decorator»

Reading time4 min
Views89K
Почитать описание других паттернов.

Проблема


Возложить дополнительные обязанности (прозрачные для клиентов) на отдельный объект, а не на класс в целом.

Описание


Для более детального понимания проблемы, рассмотрим конкретную ситуацию. Пусть имеется некоторый объект — «кнопка», принадлежащий классу объектов «Кнопка», на который понадобилось возложить дополнительные обязанности. Под обязанностями, в данном контексте, понимаются какие-либо особенности поведения объекта. В случае с кнопкой, можно рассмотреть поведение объекта при его отображении на экране. При этом, будем считать, дополнительными обязанностями — отображение рамки кнопки, надписи, иконки. Важно понимать, что все эти обязанности должны иметь возможность быть наложенными как одновременно, так и по отдельности. Очевидно, первое, что приходит на ум — порождение классов (механизм наследования). Для данной задачи возможно это и выход — расширить класс «Кнопка» семью (23-1 = 7) различными классами, сочетающими в себе всевозможные комбинации обязанностей. Это классы: «Кнопка_С_Надписью», «Кнопка_С_Рамкой», «Кнопка_С_Иконкой», «Кнопка_С_Надписью_И_Иконкой», «Кнопка_С Рамкой_И_Иконкой», «Кнопка_С_Надписью_И_Рамкой», «Кнопка_С_Надписью_И_Рамкой_И_Иконкой». А если таких обязанностей будет не три, а хотя бы десять, не говоря уже про неудобство работы с подобной структурой. Безусловно, порождение классов в таком случае — заведомо проигрышный вариант. Однако, из этой ситуации есть выход — паттерн «Декоратор».
Читать дальше →
Total votes 57: ↑46 and ↓11+35
Comments18

Эффективность C++ на современных ПК

Reading time2 min
Views3.7K
В виду ограничения на размер, публикую заметку в виде статьи, а не как ссылку с аннотацией.

Со времён, когда проектировался С++, относительная (к скорости оперативной памяти) скорость процессора выросла в 400 раз. Плюс к тому, у процессора появились большие кэши и предсказание ветвлений в коде. Всё это вместе самым серьёзным образом сказывается на эффективности С++ на современных платформах. Ниже даю аннотацию и пару ссылок, где предлагается использовать эти факты для повышения эффективности кода.
Читать дальше →
Total votes 59: ↑48 and ↓11+37
Comments49

План интеграции на новом месте работы

Reading time2 min
Views5.7K
Рано или поздно каждому из нас приходится оставлять одну работу и отправляться на поиски другой более перспективной и высокооплачиваемой...
Большинство работодателей ценит в сотрудниках не только конкретные навыки, но и обучаемость — способность «осваивать целину». Поэтому чрезвычайно важно проявить себя грамотным специалистом с самых первых дней на новом рабочем месте. Одним из основополагающих качеств менеджера проектов является способность планировать и не только проектную работу, но и свои активности. Вот план интеграции, который я составил как раз перед переходом на новое место, во время двухнедельной отработки. Как говорится, готовь сани летом :)
Читать дальше →
Total votes 67: ↑48 and ↓19+29
Comments21

Ping и traceroute со всех континентов одновременно

Reading time2 min
Views2.8K
Хочу рассказать о сетевых утилитах, которые мы открыли на проекте WIPmania полтора месяца назад. Утилиты включают в себя пинги и трассировки с множества серверов (на сегодня около полусотни) по всему миру:
image
Пинги можно выполнять одновременно со всех серверов.
Читать дальше →
Total votes 54: ↑49 and ↓5+44
Comments27

Список Javascript библиотек для рисования графиков и диаграмм

Reading time1 min
Views22K
О визуализация графов в вебе говорили здесь, навеяно этой статьей.

Под катом обзор JavaScript библиотек для рисования графов, диаграмм и прочей красоты.
Читать дальше →
Total votes 93: ↑89 and ↓4+85
Comments36

Почему российские компании катастрофически отстают от западных?

Reading time6 min
Views2K
Хочу поднять тему менеджмента и смежных с ним областей знания, так как считаю, что им уделяется крайне мало внимания на Хабре. Западные компании тратят огромные суммы на обучение своих менеджеров и развитие систем управления. Пришло время и нам обратить внимание на эти вопросы. (Осторожно, дальше много текста).

Мечты


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

image

Вынужден огорчить – ни у одной российской компании сейчас нет шансов стать хоть сколько-нибудь заметным игроком во всемирной паутине. Речь о построении успешной компании с долгосрочными конкурентными преимуществами, а не о копировании американских идей с добавкой нелегального контента. Не произойдёт это по ряду причин, которые, к сожалению, свойственны всему российскому бизнесу, включая IT-отрасль. И все эти причины относятся к
Читать дальше →
Total votes 147: ↑103 and ↓44+59
Comments195

Information

Rating
Does not participate
Location
Port Moody, British Columbia, Канада
Date of birth
Registered
Activity