Pull to refresh
49
0
Яков Лило @JacobL

Пользователь

Send message

9 анти-паттернов, о которых должен знать каждый программист

Reading time9 min
Views148K
В программировании самокритика – это умение распознать контрпродуктивные решения в дизайне, коде, процессах и поведении. Знание о вредных шаблонах решений полезно для программиста. В этой статье я опишу анти-паттерны, которые я встречал на своём личном опыте время от времени.

Некоторые из них напрямую или косвенно связаны с когнитивными искажениями человеческого сознания – в этих случаях я даю ссылки на соответствующие вики-статьи. Также интересен список известных когнитивных искажений.

1 Преждевременная оптимизация


В 97% случаев надо забыть об эффективности малых частей программы: преждевременная оптимизация – корень всех зол. Но в 3% случаев об оптимизации забывать не нужно.
Дональд Кнут

Хотя никогда зачастую лучше, чем прямо сейчас
Тим Питерс, Зен языка Python


Что это

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

Почему плохо

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

Как избежать

Сначала пишите чистый, читаемый, работающий код, используя известные и проверенные алгоритмы и инструменты. При необходимости используйте инструменты для профилирования для поиска узких мест. Полагайтесь на измерения, а не на догадки и предположения.
Читать дальше →
Total votes 117: ↑97 and ↓20+77
Comments123

Сахарные инжекции в C#

Reading time5 min
Views42K
C# — продуманный и развитый язык программирования, в котором предусмотрено немало синтаксического сахара, упрощающего написание рутинного кода. Но всё-таки существует ряд сценариев, где нужно проявить некоторую смекалку и изобретательность, чтобы сохранить стройность и красоту.

В статье мы рассмотрим некоторые такие случаи, как широкоизвестные, так и не очень.

Читать дальше →
Total votes 36: ↑29 and ↓7+22
Comments96

300 потрясающих бесплатных сервисов

Reading time11 min
Views1.6M


Автор оригинальной статьи Ali Mese добавил ещё 100 новых бесплатных сервисов. Все 400 потрясающих сервисов доступны здесь. И еще подборку +500 инструментов от 10 марта 2017 г. смотрите здесь.



A. Бесплатные Веб-Сайты + Логотипы + Хостинг + Выставление Счета

  • HTML5 UP: Адаптивные шаблоны HTML5 и CSS3.
  • Bootswatch: Бесплатные темы для Bootstrap.
  • Templated: Коллекция 845 бесплатных шаблонов CSS и HTML5.
  • Wordpress.org | Wordpress.com: Бесплатное создание веб-сайта.
  • Strikingly.com Domain: Конструктор веб-сайтов.
  • Logaster: Онлайн генератор логотипов и элементов фирменного стиля (new).
  • Withoomph: Мгновенное создание логотипов (англ.).
  • Hipster Logo Generator: Генератор хипстерских логотипов.
  • Squarespace Free Logo: Можно скачать бесплатную версию в маленьком разрешении.
  • Invoice to me: Бесплатный генератор счета.
  • Free Invoice Generator: Альтернативный бесплатный генератор счета.
  • Slimvoice: Невероятно простой счет.

Читать дальше →
Total votes 341: ↑325 and ↓16+309
Comments107

Выбираем светодиодную лампу

Reading time3 min
Views182K
Всем привет, в продолжении своего поста хочу рассказать о своем опыте в выборе светодиодных ламп.
До написания данного поста меня сподвигло то, что рынок СИД ламп значительно расширился, а цены стали более доступными.
Для сравнения выберем светодиодные лампы, которые можно приобрести в розничных магазинах России или заказть из Китая.
Общее фото на память.

image
Читать дальше →
Total votes 86: ↑78 and ↓8+70
Comments80

Задачник.NET

Reading time3 min
Views117K
Этот пост предназначается всем любителям платформы .NET и языка C#. Думаю, многие встречали на просторах сети разнообразные задачки на понимание тех или иных особенностей платформы или языка. Я большой любитель подобных задачек и головоломок. Они помогают глубже понять определённые области и повысить собственные программистские навыки. Однажды я решил сделать подборку подобных задачек, чтобы можно было показывать другим людям и обсуждать нюансы работы с .NET/C#. Когда задачек накопилось достаточное количество, появилась новая мысль — оформить мою подборку в виде книжки. Вашему вниманию предоставляется текущий вариант этого сочинения под названием «Задачник.NET».

Cover
Читать online
Скачать PDF-версию
Исходные коды на GitHub
Читать дальше →
Total votes 55: ↑51 and ↓4+47
Comments23

Как найти показатель степени двойки за O(1) с помощью последовательности де Брёйна

Reading time2 min
Views29K

Аперитив


Всем, наверное, известно, как посчитать количество бит в числе. Например, подойдут следующие два способа:
while (n)
{
    ++count;
    n &= (n-1);
}

while (n)
{
    if (n&1)
        ++count;
    n >>= 1;
}

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

Блюдо


Пусть у нас есть n-битное число вида 2^i. Нам необходимо найти i за O(1).
Как это сделать? Пусть n = 2^k. Построим последовательность де Брёйна (de Bruijn) над алфавитом {0,1} для подстрок длины k.

Что такое последовательность де Брёйна?

Читать дальше →
Total votes 60: ↑52 and ↓8+44
Comments49

Две красивые задачи по алгоритмам

Reading time4 min
Views68K
На этой неделе я начал читать бакалаврам Академического университета базовый курс по алгоритмам. Начинал я совсем с основ, и чтобы тем, кто с базовыми алгоритмами уже знаком, было чем заняться, я в начале пары сформулировал две, наверное, самые свои любимые задачки по алгоритмам. Давайте и с вами ими поделюсь. Решение одной из них даже под катом подробно расскажу. Но не отказывайте себе в удовольствии и не заглядывайте сразу под кат, а попытайтесь решить задачи самостоятельно. Обещаю, что у обеих задач есть достаточно простые решения, не подразумевающие никаких специальных знаний по алгоритмам. Это, конечно, не означает, что эти решения просто найти, но после пары один из студентов подошёл и рассказал правильное решение первой задачи. =) Если же вам интересно посмотреть на начало курса или порешать больше разных задач — приходите к нам на (бесплатный) онлайн-курс, который начнётся 15 сентября.

Задача 1. Дан массив A длины (n+1), содержащий натуральные числа от 1 до n. Найти любой повторяющийся элемент за время O(n), не изменяя массив и не используя дополнительной памяти.


Сразу поясню. В условии не говорится, что каждое число от 1 до n встречается в массиве, поэтому повторяющихся элементов там может быть сколько угодно (если бы все числа входили по разу, а одно — дважды, то задача была бы гораздо проще). Ограничение на использование дополнительной памяти означает, что нельзя заводить дополнительный массив линейной длины, но можно заводить переменные.

Задача 2. Дана матрица nxn, содержащая попарно различные натуральные числа. Требуется найти в ней локальный минимум за время O(n).


Локальным минимумом матрицы называется элемент, который меньше всех своих четырёх соседей (или трёх, если этот элемент лежит на границе; или двух, если это угловой элемент). Обратите внимание, что от нас требуется линейное по n время, хотя в матрице квадратичное по n число элементов. Поэтому мы предполагаем, что матрица уже считана в память. И нам нужно найти в ней локальный минимум, обратившись лишь к линейному количеству её ячеек.

Под катом — решение первой задачи. Ещё раз призываю вас заглядывать под кат только после того, как порешаете задачу. По второй задаче могу какую-нибудь подсказку сказать.
Читать дальше →
Total votes 54: ↑52 and ↓2+50
Comments82

Модульные комиксы — простой способ увлечь аудиторию

Reading time2 min
Views34K
Борьба за внимание читателя/аудитории набирает обороты. Автор длительное время наблюдает за поведением людей на презентациях (сидя рядом) и слегка шокирован скоростью вхождения большинства индивидуумов в полусонное состояние.

Лекции о визуальном мышлении и разнообразные рецепты улучшения «перевариваемости» информации уже успели набить оскомину. Собственно, почему комиксы?

image

Читать дальше →
Total votes 110: ↑97 and ↓13+84
Comments27

Дюжина логических задач с собеседований

Reading time2 min
Views314K
image

Не знаю, как у вас, но у меня любимая часть интервью — логические задачи.
Довелось пройти немало собеседований на вакансию разработчика, поэтому набралась небольшая коллекция.
Спешу поделиться с вами!

Некоторые задачи проще и широкоизвестные, другие заставляют хорошенько задуматься.
Ответы пока что публиковать не буду, надеюсь, вы сами сможете всё решить.
Предлагаю размять свой мозг…
Читать дальше →
Total votes 71: ↑55 and ↓16+39
Comments244

Кош на комплексной плоскости

Reading time6 min
Views65K
В какой-то из весенних дней этого года я ехал в троллейбусе и листал комикс о Коше. В одном из выпусков была такая фраза «НО! Её можно понять, она же фракталами в горизонт перетекает, я бы тоже замешкался...». После этого я посмотрел в окно и понял, что если мы возьмём два подходящих дробно-линейных преобразования комплексной плоскости a(z) и b(z), и рассмотрим систему итерированных функций для a(z), b(z), a−1(z), b−1(z), взяв в качестве начального множества картинку с Кошем, то Кош будет перетекать фракталами в горизонт!

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

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



Читать дальше →
Total votes 214: ↑206 and ↓8+198
Comments26

Как услышать электромагнитные волны

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

Принцип работы


За основу я взял кассетный плеер. В нём есть головка, которая преобразовывает магнитные волны от ленты в электрическое напряжение звуковой частоты. Головка представляет из себя катушку индуктивности, нагруженную на чувствительный усилитель воспроизведения и за счёт этого хорошо улавливает электромагнитные волны. Но производитель позаботился о том, что бы не было лишних наводок и хорошо экранировал головку. Поэтому нужно разобрать плеер и отключить экранирующий провод от головки. Всё! Теперь головка превратилась в антенну. Что бы плеер не улавливал свои собственные волны, нужно ещё отсоединить моторчик лентопротяжного механизма и питать его обязательно от батареек, иначе будет слышен фон сети 220 в. 50 Гц. Интересно, что усилитель плеера, в таком режиме, не только усиливает сигнал, но и выполняет роль амплитудного детектора. В результате можно услышать электромагнитные волны всего радио диапазона: от 20 Гц до 50 ГГц. Плеер легко улавливает даже очень слабые электромагнитные волны. Мне удалось услышать волны от пульта дистанционного управления и от наручных часов.
Читать дальше →
Total votes 143: ↑131 and ↓12+119
Comments77

Интересная задачка для интервью, карринг и частичное применение функции

Reading time3 min
Views80K
Хожу по job interview. Где-то скучно, где-то весело. Где-то интересно. На одном из таких меня попросили написать функцию, которая умеет складывать два числа. Я написал:

  it ('should add two numbers', function () {
    var add = function (a,b) {
      return a + b;
    };

    assert.equal(add(2,3), 5);
  });


А если, говорят, сигнатура функции должна быть типа такой: add(num1)(num2)? Не вопрос, говорю. Думая, что хитрый буржуин хочет проверить, знаю ли я про то, что можно возвращать функции из функций, пишу вот такое:

  it ('should be called like add(num1)(num2)', function () {
    var add = function (a) {
      return function (b) {
        return a + b;
      };
    };

    assert.equal(add(2)(3), 5);
  });


Читать дальше →
Total votes 168: ↑163 and ↓5+158
Comments74

Эволюция веб-фреймворков Microsoft. ASP.NET vNext

Reading time11 min
Views48K


Предпосылки к переменам


Новость о выходе ASP.NET vNext в сети распространилась достаточно быстро вместе с анонсом наиболее интересных новшеств, предложенных в обновлении. ASP.NET MVC 6 получил новое имя и позиционируется как что-то действительно новое в среде web фреймворков Microsoft (MS).
Читать дальше →
Total votes 62: ↑58 and ↓4+54
Comments39

30 полезных сервисов для веб-разработчика

Reading time2 min
Views163K
Решил собрать сервисы, которые могут быть полезны веб-разработчикам и дизайнерам. Буду рад, если кто-то найдет для себя полезный сервис. Осторожно, под катом куча картинок!
Читать дальше →
Total votes 180: ↑156 and ↓24+132
Comments48

Функциональная типология

Reading time10 min
Views8.1K
image

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

Что Вы найдете под катом:
  • Описание функциональной типологии
  • Объяснение механизмов работы нескольких известных практик
  • Примеры из моего собственного опыта


Читать дальше →
Total votes 24: ↑15 and ↓9+6
Comments16

Wi-Fi сети: проникновение и защита. 1) Матчасть

Reading time9 min
Views622K


Синоптики предсказывают, что к 2016 году наступит второй ледниковый период трафик в беспроводных сетях на 10% превзойдёт трафик в проводном Ethernet. При этом от года в год частных точек доступа становится примерно на 20% больше.

При таком тренде не может не радовать то, что 80% владельцев сетей не меняют пароли доступа по умолчанию. В их число входят и сети компаний.

Этим циклом статей я хочу собрать воедино описания существующих технологии защит, их проблемы и способы обхода, таким образом, что в конце читатель сам сможет сказать, как сделать свою сеть непробиваемой, и даже наглядно продемонстрировать проблемы на примере незадачливого соседа (do not try this at home, kids). Практическая сторона взлома будет освещена с помощью Kali Linux (бывший Backtrack 5) в следующих частях.

Статья по мере написания выросла с 5 страниц до 40, поэтому я решил разбить её на части. Этот цикл — не просто инструкция, как нужно и не нужно делать, а подробное объяснение причин для этого. Ну, а кто хочет инструкций — они такие:
Используйте WPA2-PSK-CCMP с паролем от 12 символов a-z (2000+ лет перебора на ATI-кластере). Измените имя сети по умолчанию на нечто уникальное (защита от rainbow-таблиц). Отключите WPS (достаточно перебрать 10000 комбинаций PIN). Не полагайтесь на MAC-фильтрацию и скрытие SSID.

Оглавление:
1) Матчасть
2) Kali. Скрытие SSID. MAC-фильтрация. WPS
3) WPA. OpenCL/CUDA. Статистика подбора
Как работают WEP, WPA и WPS
Total votes 185: ↑176 and ↓9+167
Comments76

Делаем визуальный web-редактор документов на основе LibreOffice, jodconverter и TinyMCE

Reading time7 min
Views27K
Как же я люблю спецификацию офиса!С написания предыдущей статьи про генерацию Excel документов по шаблону прошло много времени и задача несколько изменилась. Новая задача была поставлена следующим образом: из готового документа excel или word сделать шаблон через веб-интерфейс. В процессе формирования подставлять в шаблон нужные значения, убирать и/или «клонировать» куски шаблона. После формирования, документ должен быть доступен пользователю для визуального редактирования в браузере. Готовый документ должен сохраниться на сервере, быть доступным для скачивания пользователем как в своём расширении (*.doc/*.xls), так и в pdf. При этом верстка скачиваемого файла должна быть идентична шаблону, который был загружен в самом начале (без всяких искажений полей и областей печати).
Что же, задача есть — будем решать!
Читать дальше →
Total votes 42: ↑34 and ↓8+26
Comments11

Защита баз данных в iOS

Reading time4 min
Views18K


Уязвимость информации, хранимой в базах данных, является одной из самых распространенных проблем безопасности iOS приложений. Многие программы предлагают пользователю использовать пароль для доступа к данным — но в большинстве случаев это никаким образом не влияет на то, в каком виде хранится сама информация. Таким образом, к данным таких приложений, как менеджеры паролей, блокноты, органайзеры, трекеры финансов, может получить доступ практически любой посторонний, в руках у которого окажется ваше устройство.
Читать дальше →
Total votes 26: ↑26 and ↓0+26
Comments14

Управление задачами: некоторые варианты реализации повторяющихся задач

Reading time9 min
Views8.7K
Одним из мотивов для создания нашего «велосипеда», т.е. системы управления задачами betasked.ru была необходимость максимально удобного учета повторяющихся задач, так как подходящих решений гуглинг нам не дал. Специфика именно наших задач в том, что их много и в большинстве своем они повторяются с разной степенью периодичности.

Web-сервисов управления задачами в интернете великое множество. Наверное, каждый второй программист, который хочет что-то особенное под свои нужды, ищет в интернете что-то подходящее и, не найдя идеала, пишет свой вариант. «Смертность» систем управления задачами, претендующих на массовый рынок тоже очень велика. Фактора, мне кажется, два – большая конкуренция и большая сегментированность – кому-то нужен акцент на групповой работе, кому-то — на хранении заметок. В итоге те, кто хочет угодить всем, реализуют все что только можно и оказывается, что получившийся на выходе монстр трудноюзабелен.

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



Забегая вперед, скажу что реализация повторяющихся задач заняла кучу времени и сил, но в конечном итоге позволила придти к вполне юзабельному варианту, попутно решив много других непростых вопросов.
Подробности
Total votes 12: ↑9 and ↓3+6
Comments1

Загадочное объявление от IBM

Reading time3 min
Views108K
Сегодня в пятницу на доске объявлений ИМКН матмеха УрФУ было обнаружено странное объявление с логотипом IBM.
Текст сразу бросился в глаза необычными словами; никто не смог узнать язык. Гугл-переводчик на разные предложения подсказывает разные языки: от эсперанто до каталонского. Под катом немного соображений о природе текста.

image
Тем, кто прочитает топик уже 1.04
Прошу обратить внимание, что проблема возникла уже в пятницу; статья была добавлена в песочницу тоже в пятницу. Не стоит плодить поздравления с первым апреля в комментариях.


Читать дальше →
Total votes 101: ↑93 and ↓8+85
Comments185

Information

Rating
Does not participate
Location
Омск, Омская обл., Россия
Date of birth
Registered
Activity