Обновить
17.07

Говнокод

Код, за который должно быть стыдно

Сначала показывать
Порог рейтинга
Уровень сложности

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

Время на прочтение18 мин
Количество просмотров106K
image

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

Попытка измерить талант провалилась…

Время на прочтение2 мин
Количество просмотров13K

Введение


image Наверное, вам, как и мне, в течение последних лет, приходилось задумываться o, или осуществлять смену места работы. Скорее всего, как и мне, вам иногда приходилось иметь дело с, так называемыми, сервисами «измерения таланта». Будь то Codility или CEB, в целом суть которых сводится к одному и том уже — проверить ваши навыки в той или иной сфере деятельности. Но выполняют ли они эту задачу и насколько хорошо?.. Давайте рассмотрим несколько доводов и примеров.
Читать дальше →

Худшая в мире капча для сайта с многомиллионной аудиторией

Время на прочтение2 мин
Количество просмотров100K
Это небольшая заметка про факап и профессиональную импотенцию сайта с сотнями миллионов пользователей, или «Как не надо делать капчу?»

За примерами нормальной капчи далеко ходить не нужно: это и знаменитая reCAPTCHA:

image

...и кириллическая капча от Яндекса:

image

Но сегодня речь пойдёт о китайской капче в её самом худшем виде. Причём дело не в иероглифах.

Перед вами капча сайта китайских железных дорог (местная монополия) по адресу 12306.com. Она просит отметить картинку (или картинки) с изображением агата (玛瑙).



Знаете правильный ответ?
Читать дальше →

Быстрая разработка отчетов на Java: дауншифтинг с «1С: Предприятие»

Время на прочтение4 мин
Количество просмотров18K
Приветствую уважаемых читателей.

Как и обещал в первой статье Быстрая разработка CRUD на Java: дауншифтинг с «1С: Предприятие», продолжаю описание своих OpenSource проектов, реализующих аналогичную 1С: Предприятию функциональность.

На сей раз, это СКД — система компоновки данных, и моя разработка FlexReporting (ссылка на GitHub).
В чем суть этого механизма? Это некий realtime — ROLAP инструмент, который на лету трансформирует «плоские» данные в иерархические отчеты.

На самом деле, есть много любителей поспорить, что СКД это не «тру» OLAP, но я бы напомнил, что такая вещь как агрегаты, заранее рассчитывающие и хранящие многомерные данные по всем (или по заданным) сочетаниям измерений оборотных регистров накопления — а это весомый аргумент для использования этой аббревиатуры. Впрочем, от споров по терминологии очень хотелось бы уклониться.

Вот так это выглядит в 1С ERP 2.0:



Функции СКД (и моей разработки) — дать пользователю источник данных, а уж он пусть как хочет играется с настройками отчета:

1. Задает, в какой последовательности будут выводиться данные, какие группировки будут по вертикали, какие по горизонтали.
Например: склад, товар, менеджер и т.д.
2. Задает набор показателей, и агрегатные функции (сумма, среднее, количество, минимум, максимум и проч.), которые будут к ним применяться.
Например: сумма(стоимость), среднее(количество_товара), максимум(дата_отгрузки).

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

git punish – команда которой мне всегда нехватало

Время на прочтение1 мин
Количество просмотров5.2K
Бывает, хочется подойти к подсказанным git blame-ом коллегам, посмотреть им ласково в глаза и поговорить о наболевшем. В такие моменты отсутствие команды git punish кажется невообразимым.
К счастью, это поправимо

Мой код не работает :-(

Время на прочтение1 мин
Количество просмотров21K
Представляем наглядное пошаговое руководство по поиску и устранению ошибок в коде для языка Python, которое мы в Alconost перевели специально для Хабра. Следуйте по стрелкам, чтобы определить вероятную причину проблемы — и, если первое из найденных решений не подходит, возвращайтесь и пробуйте еще.

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


Картинка кликабельна

Переведено с любовью к коду компанией-локализатором Alconost.

Восемь различных типов программистов

Время на прочтение3 мин
Количество просмотров141K

Кадр из фильма Kingsman

Уверены, в этой статье вы точно узнаете своих сотрудников, а возможно, и себя. Шведский предприниматель и разработчик Дэвид Эльбе описал восемь типов программистов, с которыми ему приходилось иметь дело за последние 10 лет работы в проектах по веб-разработке. Какие типы лучше всего объединить в команду и какой код от них ждать — читайте в переводе от Alconost.

1. Агент 007



Кадр из мультфильма “Пингвины Мадагаскара”
Быстро вникает в ваши проблемы и решает их. Не очень заботится о качестве кода. Ему не придет в голову исправлять отступы в чужом коде. Если необходимо, «воспользуется скотчем».

Время от времени может писать действительно хороший код. Счастлив, когда другие люди делают рефакторинг его кода, после чего тот работает по-прежнему хорошо.

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

Плохо срабатывается с Перфекционистом.
Читать дальше →

Проблемы, вызванные определением кортежей как функторов

Время на прочтение8 мин
Количество просмотров5.7K
Очень удивительно (я бы даже сказал — внезапно!), но кортеж-пара в GHC является функтором. Это сложно понять, ведь функтор должен иметь только один параметр, а у пары их два. Можно восхищаться тем, как разработчики стандартной библиотеки GHC умудрились предоставить такую абстракцию, но мне кажется, полученное решение все же следует признать неудачным.

Начнем с того, что оно интуитивно непонятно. Скажем, попробуйте вычислить вручную, не используя инструментов GHC, выражение (1+) `fmap` (2, 3). А после этого проверьте полученный результат, например, в ghci. У многих ли результат ручного вычисления совпал с тем, который выдала система? И если у вас результаты все же совпали, мне очень хотелось бы услышать хорошее объяснение того, как именно вам это удалось.
Читать дальше →

Автомат как реактивный двигатель: реальная физика нереального полёта

Время на прочтение5 мин
Количество просмотров33K

Перевод поста Malte Lenz "Machine Gun Jetpack: The Real Physics of Improbable Flight".
Скачать файл с моделями, рассмотренными в посте, можно здесь здесь.
Выражаю огромную благодарность Кириллу Гузенко за помощь в переводе.

Можно ли летать с помощью автомата, используя реактивную силу, возникающую при выстрелах? Этот вопрос был задан в статье What if? Рэндалла Манроу “Machine Gun Jetpack” (перевод поста на русский язык). Оказывается что можно, потому что некоторые автоматы создают достаточную силу для того, чтобы поднимать свой собственный вес, а может даже и немного больше. В этом посте я исследую динамику стреляющих вниз автоматов, а так же действующие при этом силы, порождаемые скорости и то, на какую высоту можно будет подняться таким способом. Я так же продублирую предупреждение из статьи: пожалуйста, не повторяйте этого дома. Для этого есть программные среды для моделирования.
Читать дальше →

Программист == творчество || программист != творчество

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

image

Но приходя домой, я принимался за свое любимое занятие – создание игр.
Читать дальше →

Несмешная первоапрельская шутка от разработчиков Magic Lantern

Время на прочтение4 мин
Количество просмотров80K
Magic Lantern (ML) — неофициальная прошивка для фотоаппаратов Canon, которая обеспечивает повышенную функциональность (например, dual-iso, стекинг по фокусу, raw-видео, тонкая настройка параметров съемки и многое другое). Прошивка устанавливается непосредственно на flash-карту, что позволяет безболезненно удалить ее или обновить простой заменой файлов.

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

Все описанные действия производились с использованием камеры Canon 650D со стоковой (1.01) прошивкой.

28 марта. Началось все тогда, когда жажда исследования чего-то нового накопилась до критической массы и в сети была случайно обнаружена информация о возможности автоматической съемки фокус-стека на моем фотоаппарате. Но данные возможности требовали установки неофициальной прошивки Magic Lantern.

Быстрый поиск показал, что:
  • текущая прошивка фотоаппарата не поддерживает текущие сборки ML;
  • для модели 650D нет стабильной сборки, есть только ночные билды;
  • некоторые функции ML в 650D не работают/работают криво;
  • авторы предупреждают, что можно закирпичить фотоаппарат неверными действиями по прошивке.

После чего фотоаппарат был успешно перепрошит на последнюю официальную версию для Canon 650D 1.04. И строго по инструкции, со сбросом всех настроек и полным форматированием карты, был установлен последний ночной билд Magic Lantern (от 28 марта).
Читать дальше →

Оптимальная сортировка непрерывного архива

Время на прочтение2 мин
Количество просмотров6.6K
Воплощение одной идеи – расположить файлы так, чтобы размер архива был минимальным.
Программа проверяет сжимаемость файлов в паре и затем сортирует список для сжатия архиватором.

sourceforge.net/projects/saro-vks
Если кому надо – берите.
Читать дальше →

Как подружить Google Диск и Google Календарь? Пробуем GAS на вкус

Время на прочтение5 мин
Количество просмотров29K
Корзина покупателя GASПредлагаю читателям «Хабрахабра» историю о том, как мне удалось повысить свою покупательскую способность в кризисное время при помощи Google Apps Script (GAS). Под катом вы найдете нестандартный пример использования и узнаете о возможностях работы со службами Google Drive и Google Calendar.

Началось все с того, что цена импортируемых товаров в России неуклонно росла вверх. Работая IT-специалистом в крупной ритейл-сети, у меня возникла идея о том, как можно воспользоваться преимуществом наличия доступа к товарной базе, не нарушая установленных правил компании и тем более закона. Наибольший интерес с точки зрения экономии личных денежных средств представляют так называемые «промоакции» (тарифы со скидкой). Необходимо было организовать ежедневную выгрузку «промоакций» на интересующие товары и реализовать возможность своевременного получения уведомлений о наличии скидок на Android-смартфон.
Читать дальше →

Ближайшие события

Лжеотождествление электровиолончели

Время на прочтение5 мин
Количество просмотров17K
Когда Алексей TheShade Шипилёв рассказывал про особенности поведения Java-строк с нулевым значением хэшкода, он приводил в качестве примера строку "лжеотождествление электровиолончели". Когда FindBugs предупреждает вас о проблемах с вычислением абсолютного значения хэшкода, равного Integer.MIN_VALUE, он приводит примеры строк, имеющих такой хэшкод — "polygenelubricants" или "DESIGNING WORKHOUSES". Откуда взялись эти примеры? Как самому составить красивую строку с заданным наперёд хэшкодом?

Различных хэшкодов существует 232 — немногим более четырёх миллиардов, а слов в человеческом языке — порядка ста тысяч. Найти одно слово с нужным хэшкодом почти нереально, а вот сочетание из двух слов вполне можно. Если добавить ещё вариации вроде предлогов, то появится выбор.

Перебирать все возможные комбинации долго, но можно процесс оптимизировать, выполнив несложные преобразования над формулой хэшкода строки. Давайте напишем генератор словосочетаний с заданным хэшкодом. Писать будем на чистой Java 8, в модном нынче функциональном стиле.
Читать дальше →

Чат вконтакта в качестве терминала

Время на прочтение3 мин
Количество просмотров24K
Вдохновлённый постом «Простой диспетчер задач с веб-интерфейсом, написанный на языке GO для Unix-систем включая Android», языком Go и утилитой simple status, я решил написать в качестве забавного эксперимента чат-бота для социальной сети Vkontakte со схожим функционалом.

Почему выбор пал на чат-бота и социальную сеть? Кроме очевидного just for fun имеются и практические выкладки:
  • Не нужны дополнительные телодвижения для доступа к приложению, запущенном на компьютере с динамическим ip или находящимся за роутером.
  • Доступ к Вконтактике есть практически везде – достаточно иметь при себе телефон с доступом в интернет.
  • Вопрос о реализации аутентификации на уровне конечного приложения практически отпадает.

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

Поиск в ширину (BFS) на С#

Время на прочтение4 мин
Количество просмотров49K
Сразу скажу, что статья больше подойдёт людям, желающим познакомиться с поиском в ширину, и новичкам, осваивающим программирование. К тому же, когда мне понадобился этот метод, я нигде не нашёл наглядного рабочего примера на C#.

Устно об алгоритме:

Разберём алгоритм на произвольном графе (для простоты примера рёбра не имеют вес).

Последовательность алгоритма заключается в следующим:

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


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

Полная кастомизация select без использования JS

Время на прочтение4 мин
Количество просмотров84K
imageСколько я не мучил поисковик, а решения этого вопроса так и не нашлось. Конечно, всегда можно использовать JS и это нормально, но иногда заказчик душа просит изысков.
Читать дальше →

Вычисление средней температуры по больнице

Время на прочтение14 мин
Количество просмотров19K
Статистика
Начать стоит с того, что это, статья совершенно не серьёзна. Новый год, праздник, сил никаких нет заниматься чем-то серьёзным как писателям, так и читателям. Именно поэтому было принято решение о написании статьи про, внезапно, статистику.
Читать дальше →

Как растаращить class-файл

Время на прочтение4 мин
Количество просмотров45K
Обычно при компиляции Java-файла получаются .class-файлы примерно того же размера, что и исходник. Меня заинтересовало, можно ли по небольшому исходнику сделать .class-файл, который больше, сильно больше исходника.

Можно поискать какие-то короткие конструкции языка, которые компилируются в длинные цепочки байткода, но линейный прирост меня не устраивал. Я сразу подумал про компиляцию finally-блоков: про неё уже писали на Хабре. Если вкратце, то для каждого finally-блока при непустом try-блоке создаётся минимум два варианта в байткоде: для случая нормального завершения try-блока и для случая завершения с исключением. В последнем случае исключение сохраняется в новую локальную переменную, выполняется код finally, затем исключение достаётся из локальной переменной и перебрасывается. А что если внутри finally снова разместить try-finally и так далее? Результат превзошёл все ожидания.
Читать дальше →

Язык программирования Petooh

Время на прочтение1 мин
Количество просмотров113K
Пользователь Github с ником Ky6uk после трех лет разработки наконец-то опубликовал фундаментально новый (дословно) язык программирования Petooh. Это диалект Brainfuck, в котором непонятные и неудобные символы заменены на человекочитаемые слова. Для исполнения кода используются скрипты на Haskell и Perl, на выбор пользователя. Из прочих примеров творчества автора можно упомянуть разве что табурет, написанный на Javascript

Пример кода:
Скрытый текст
KoKoKoKoKoKoKoKoKoKo Kud-Kudah
KoKoKoKoKoKoKoKo kudah kO kud-Kudah Kukarek kudah
KoKoKo Kud-Kudah
kOkOkOkO kudah kO kud-Kudah Ko Kukarek kudah
KoKoKoKo Kud-Kudah KoKoKoKo kudah kO kud-Kudah kO Kukarek
kOkOkOkOkO Kukarek Kukarek kOkOkOkOkOkOkO
Kukarek