Pull to refresh
4
0.2
Иван @V1RuS

User

Send message

Как два программиста хлеб пекли

Reading time5 min
Views259K


Я работаю программистом уже много лет, на протяжении которых, как это ни странно, я всё время что-то программирую. И вот какую интересную вещь я заметил: в коде, написанном мной месяц назад, всегда хочется что-то чуть-чуть поправить. В код полугодичной давности хочется поменять очень многое, а код, написанный два-три года назад, превращает меня в эмо: хочется заплакать и умереть. В этой статье я опишу два подхода. Благодаря первому архитектура программы получается запутанной, а сопровождение — неоправданно дорогим, а второй — это принцип KISS.

Итак, представим себе, что есть два программиста. Один из них умный, прочёл кучу статей на Хабре, знает каталог GoF наизусть, а Фаулера — в лицо. Другой же делает всё просто. Первого будут звать, например, Борис Н., а второго — Маркус П. Само собой, имена вымышленные, и все совпадения с реальными людьми и программистами случайны.

Итак, к ним обоим приходит проектный менеджер (если в вашей вселенной PM не ходит сам к программистам, назовите его как-то иначе, например BA или lead, сути это не изменит) и говорит:
— Ребята, нам нужно, чтобы делался хлеб.

Именно так, «делался», без уточнения способа производства.

Как же поступят наши программисты?
Читать дальше →
Total votes 380: ↑348 and ↓32+316
Comments328

Несколько интересных приемов и особенностей работы с MySQL

Reading time3 min
Views88K
Я думаю, что в процессе изучения той или иной СУБД каждый из вас не раз изобретал велосипеды для решения своих задач, не зная о существовании той или иной функции или приема, которые бы могли в разы ускорить выполнение запросов и уменьшить объем кода. В данной статье я хочу поделиться с вами своим опытом работы с очень «добрым» и «отзывчивым» MySQL, часто позволяющему программисту делать вещи, которые другие СУБД переварить бы не смогли. Материал будет полезен скорее тем, кто только решил углубиться в чудесный мир запросов, но возможно и опытные программисты найдут тут что-то интересное.
Читать дальше →
Total votes 132: ↑116 and ↓16+100
Comments83

Красной таблетки не существует

Reading time5 min
Views128K

О чем это


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

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

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

Я не сделаю, возможно, в этом посте никаких открытий. Но сэкономлю вам пару лет, если вы решитесь поверить моему опыту.

Читать дальше →
Total votes 355: ↑326 and ↓29+297
Comments348

Командный интерфейс для веб-сайта

Reading time1 min
Views14K
Отличную идею реализовали на сайте Github.com: это командная строка, встроенная прямо в веб-интерфейс.



Есть автодополнение и история команд: кнопка для предыдущей команды, прямо как в консоли.
Читать дальше →
Total votes 66: ↑59 and ↓7+52
Comments14

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

Reading time4 min
Views8.4K
При создании очередного мультиязычного сайта возникла задача, не используя стандартный блок переключения языков, добавить переключатель языков.

На первый взгляд ничего сложного.
Но сделав несколько попыток, столкнулся с задачей поддержки страниц созданных через views, выборок анонсов на страницах терминов таксономии и переводов, привязанных к нодам модулем «Content translation». Так же полезным, оказалось, задуматься о том, что у вышеупомянутых страниц (node) и терминов таксономии существуют алиасы.

К моему удивлению Google не дал ожидаемых результатов, а советов по перепиливанию ядра drupal я категорически не воспринимаю (для этого существует API и немного фантазии).

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

Читать дальше →
Total votes 8: ↑4 and ↓40
Comments14

Искусственный интеллект как совокупность вопросов

Reading time4 min
Views76K
image
Когда мы рассуждаем о сильном искусственном интеллекте, то мы понимаем, что это не изолированный вопрос, не вещь в себе, а вопрос ответ на который подразумевает объяснение всех явлений, которые связаны с мышлением человека. То есть, ответив на вопрос о природе интеллекта, мы неизбежно должны будем ответить на такие вопросы как:

  • Что есть информация?
  • Как мозг представляет знания?
  • Что такое язык?
  • Какова роль языка в мышлении?
  • Как совершаются поступки?
  • Как осуществляется планирование?
  • Какова природа фантазий и воспоминаний?
  • Что такое мотивация?
  • Какова природа эмоций?
  • Откуда берется многообразие эмоциональных оценок?
  • Что есть смысл?
  • Как рождается мысль и какова ее природа?
  • Что такое внимание?
  • Что есть любовь?
  • Что есть гармония и красота?

Читать дальше →
Total votes 57: ↑39 and ↓18+21
Comments55

Главный принцип хорошего кода

Reading time9 min
Views86K
За двадцать лет разнообразного программирования я сформулировал, убежден, главнейший принцип хорошего кода. Опираясь на него, мне и моим коллегам удавалось приводить в порядок самый страшный код, объединять в команде малосовместимых программистов и годами поддерживать системы без лишнего нытья.

Прочтение этой статьи: 15 минут
Осмысление методики: 10 минут
Ощутимые результаты: 30 минут

Итак,
Total votes 168: ↑120 and ↓48+72
Comments174

62 полезных инструмента для адаптивного дизайна (Responsive web design)

Reading time14 min
Views202K
UPD. Для краткого введения в адаптивный дизайн рекомендую прочитать статью «Как сделать один сайт для всех устройств (Responsive Web Design)».

Перевод крайне ценной статьи «Responsive Web Design Techniques, Tools and Design Strategies» популярного интернет-издания для разработчиков Smashing Magazine.

Еще в январе мы опубликовали статью об адаптивном дизайне «Responsive Web Design: What It Is and How To Use It» (Адаптивный веб-дизайн: Что это такое и как им пользоваться). Адаптивный веб-дизайн продолжает привлекать к себе много внимания, но, учитывая, насколько он отличается от традиционных методов разработки сайтов, он может показаться заоблачно сложным для тех дизайнеров и разработчиков, которые его не пробовали.

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

Техники Responsive web design


1. CSS Transitions and Media Queries
CSS Transitions и Media Queries

Elliot Jay Stocks подробно рассказывает о методе сочетания CSS Media Queries и CSS transitions. Основная идея в следующем: разрабатывая адаптивный сайт с помощью Media Queries, вы постоянно изменяете ширину вашего браузера, чтобы посмотреть, как сайт ведет себя при этом. Но каждый раз, когда отрабатывает один из ваших Media Queries, виден жесткий переход между стилями (первый, например, для десктопов, второй — для планшетов). Почему бы не использовать CSS transitions для сглаживания этих жестких переходов с помощью анимации?



Читать дальше →
Total votes 112: ↑107 and ↓5+102
Comments14

EQализация: устранение частотных конфликтов

Reading time7 min
Views38K

Начнем с того, что


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

Пара слов о слуховой маскировке

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

Есть проблема? Найди решение!

К превеликому счастью решение уже давно нашли и без нас, так что нам остается только пожинать плоды и радоваться. Решение это — эквализация.
Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments28

Пишем драйвер для самодельного USB устройства

Reading time13 min
Views175K
Целью этой статьи является пошаговая демонстрация процесса разработки всего набора программного обеспечения необходимого для организации связи самодельного устройства с компьютером посредством USB.

На данный момент, большинство радиолюбителей реализуют такой тип подключения используя чипы переходники USB в RS232 таким образом организуя связь со своим устройством посредством драйвера виртуального COM порта поставляемого с чипом переходником. Минусы такого подхода думаю понятны. Это как минимум лишний чип на плате и ограничения накладываемые этим чипом и его драйвером.
Мне же хочется осветить весь процесс организации такого взаимодействия так как оно и должно быть сделано, и как делается во всех серьезных устройствах.
В конце концов, сейчас 21-й век, модуль USB есть почти во всех микроконтроллерах. Именно о том, как наиболее быстро воспользоваться этим модулем и будет эта статья.
Читать дальше →
Total votes 152: ↑149 and ↓3+146
Comments29

Вам не страшно открывать редактор?

Reading time13 min
Views3.1K
В какой-то момент я стал замечать, что пишу более качественный: оптимальный, логичный и читаемый код, но пишу его медленно. По крайней мере, куда медленнее, чем лет 15 назад. Да, на старый код без слёз не взглянешь: всё можно сделать оптимальнее и, по крайней мере, читабельнее. Но код был написан быстро.

Проблема в контроле. Я стал жестче и глубже контролировать код и… стал тратить на этот контроль слишком много ресурсов.

Основной принцип прост. Если контролю подлежит 10-20% случаев, то на контроль надо тратить… 0% ресурсов. Баги и переписывания всё равно будут. Но лучше разделить кодирование и отладку и на время кодирования об ошибках вообще забыть.
Читать дальше →
Total votes 171: ↑128 and ↓43+85
Comments115

OpenCL: Как заставить эту штуку работать

Reading time3 min
Views9.3K
image

Очень многие, пробовавшие «на вкус» технологию использования графических ускорителей CUDA/OpenCL получили не слишком хорошие результаты. Да, тесты идут и простые примеры показывают впечатляющее ускорение, но вот когда дело доходит до реальных алгоритмов, хороший результат получить очень непросто.
Как же заставить эту технологию работать?
В данной статье я постарался обобщить свой полугодовой опыт бодания с технологией OpenCL под Mandriva linux и MacOS X 10.6 на задачах сложного поиска строковых данных для биоинформатики. OpenCL был выбран т. к. для Мака он является «родной» технологией (часть маков комплектуется видеокартами AMD и CUDA под ними недоступна даже теоретически), но предлагаемые рекомендации достаточно универсальны и подходят в том числе и для NVIDIA CUDA.

Итак, что необходимо, чтобы графический ускоритель заработал?
Читать дальше →
Total votes 51: ↑43 and ↓8+35
Comments20

OpenCL. Практика

Reading time8 min
Views44K


Здравствуй, уважаемое хабрасообщество.

В предыдущих статьях мы рассмотрели OpenCL в целом, потом подробно вникли в суть стандарта и разобрали на каких идеях базируется эта технология.
OpenCL. Что это такое и зачем он нужен? (если есть CUDA)
OpenCL. Подробности технологии
Теперь настало время пощупать эту технологию живьем.
Читать дальше →
Total votes 41: ↑37 and ↓4+33
Comments44

Введение в OpenCL

Reading time11 min
Views61K
Эта статья посвящена основам программирования на OpenCl. OpenCl -это язык программирования на GPU/CPU, по своей структуре близкий к стандарту c99. Его развитием занимается Khronos Group, где на их сайте доступна полная документация. Во избежание полемики на тему «ну это же всё тривиально, достаточно покопаться в инете» сразу оговорюсь: в рунете информация на эту тематику практически полностью отсутствует, а в западном инете доступна весьма в разрозненном состоянии на десятке сайтов. Здесь будет приведена некоторая компиляция базовых принципов, максимально упрощающая начинающему программисту жизнь, а так же позволяющая с самого первого проекта максимально задействовать вычислительные мощности видеокарты. Людям написавшим 2-3 серьёзных программы на OpenCl это будет уже неинтересно. Статья в некотором смысле является продолжением моей прошлой статьи.
Читать дальше →
Total votes 47: ↑46 and ↓1+45
Comments26

OpenCL: универсальность и высокая производительность или не так все просто?

Reading time5 min
Views10K
На Хабре уже были статьи об OpenCL, CUDA и GPGPU со сравнениями производительности, базовыми понятиями и примерами, поэтому рассказывать об основах и принципах работы я тут не буду, даже код не покажу. Но я хочу описать в чем заключаются реальные трудности при использовании GPU (про ограничения и их последствия), почему нельзя сравнивать производительность CPU и GPU, а также про то насколько “универсален” OpenCL на самом деле.
Читать дальше →
Total votes 78: ↑77 and ↓1+76
Comments55

Опыт использования GPU для финансового моделирования

Reading time5 min
Views8.2K
В этой статье я вкратце описываю свой опыт оптимизации одной задачи перебора, начиная от однопроцессорного алгоритма к многопроцессорному и к версии на OpenCL.



Читать дальше →
Total votes 103: ↑97 and ↓6+91
Comments39

Электровелосипед своими руками

Reading time5 min
Views377K
Тема электротранспорта меня интересовала всегда.
И вот наступил долгожданный момент, когда я от теории наконец перешел к практике. О своём опыте я поведаю ниже.

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

К делу!

Технические характеристики:

— велосипед обычный, средней ушатанности, цена примерно 200$
— электромотор на 48V и мощность 380W
— батарея на 48V и 10A
— скорость без помощи педалей по ровной дороге 35-40 км/ч
— дальность поездки 22-25 км по легкой холмистой местности и в городе
— время полного заряда 2 часа

image

Надо отметить, что переоборудование не сильно бросается в глаза и большинство людей на улице просто не замечают ничего необычного в велосипеде.
Читать дальше →
Total votes 459: ↑454 and ↓5+449
Comments316

Восстановление расфокусированных и смазанных изображений

Reading time10 min
Views220K
Восстановление искаженных изображений является одной из наиболее интересных и важных проблем в задачах обработки изображений – как с теоретической, так и с практической точек зрения. Частными случаями являются размытие из-за неправильного фокуса и смаз – эти дефекты, с которым каждый из вас хорошо знаком, очень сложны в исправлении – именно они и выбраны темой статьи. С остальными искажениями (шум, неправильная экспозиция, дисторсия) человечество научилось эффективно бороться, соответствующие инструменты есть в каждом уважающем себя фоторедакторе.

Почему же для устранения смаза и расфокусировки практически ничего нету (unsharp mask не в счет) – может быть это в принципе невозможно? На самом деле возможно – соответствующий математический аппарат начал разрабатываться примерно 70 лет назад, но, как и для многих других алгоритмов обработки изображений, все это нашло широкое применение только в недавнее время. Вот, в качестве демонстрации вау-эффекта, пара картинок:



Я не стал использовать замученную Лену, а нашел свою фотку Венеции. Правое изображение честно получено из левого, причем без использования ухищрений типа 48-битного формата (в этом случае будет 100% восстановление исходного изображения) – слева самый обычный PNG, размытый искусственно. Результат впечатляет… но на практике не все так просто. Под катом подробный обзор теории и практические результаты.
Осторожно, много картинок в формате PNG!
Читать дальше →
Total votes 291: ↑289 and ↓2+287
Comments93

По следам разрушителей мифов или Почему Android тормозит, а %мобильная ОС% нет?

Reading time10 min
Views174K


Добрый день, Хабр!

Мой предыдущий перевод статьи про аппаратное ускорение в Android вызвал бурное обсуждение в комментариях, основным мотивом которого был вопрос «так почему же тормозит Android?». Аналогичная ситуация наблюдается по всему интернету, и потому я привожу ниже еще один очень интересный и свежий перевод (снова из Google+), где автор Andrew Munn (о нем ниже) анализирует настоящие причины тормозов Android. С удовольствием прочитал этот пост сам и горд возможностью первым поделится им с хабрасообществом.

Читать дальше →
Total votes 242: ↑212 and ↓30+182
Comments245

Information

Rating
2,169-th
Location
Минск, Минская обл., Беларусь
Date of birth
Registered
Activity