Как стать автором
Обновить
7
0
Алексей @AxL1232

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

Отправить сообщение

Чек-лист по выживанию сайта

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


В последнее время я как-то подозрительно часто наблюдаю примитивнейшие однотипные и довольно легко решаемые проблемы на самых разных web-проектах. Разные базы, разные языки, разные сферы деятельности и схемы монетизации. Всех их объединяет одно — лозунг «бизнес не дает переписать». Продолжающийся или только-только оконченный этап рапид-разработки растущего и агрессивно отжимающего у конкурентов долю рынка проекта родил огромную кучу т.н. «говнокода». Сомнительные архитектурные решения либо уже приносят кучу проблем, либо обещают их в будущем, но работают. Поток новых требований не дает времени навести порядок даже в инфраструктуре, не говоря уже о коде. Если вам такая ситуация знакома — добро пожаловать под кат поностальгировать, поучиться чему-то новому и/или поучить нас. Кому поржать, а кому и поплакать.

«Это все только для хайлода» — скажет вдумчивый и прозорливый читатель. Плох тот веб-проект, который не мечтает стать популярным хайлодом.

Читать дальше →
Всего голосов 86: ↑74 и ↓12+62
Комментарии189

Семь удивительных «возможностей» Javascript

Время на прочтение5 мин
Количество просмотров66K
За последние несколько месяцев я сделал несколько доработок для JSHint, в основном с целью изучить ES6 (я особенно горжусь тем, как переделано обнаружение областей видимости для переменных). Во время этого процесса я наткнулся на несколько вещей, которые меня удивили — в основном, в ES6, однако есть и кое-что про ES3, что я до этого никогда не использовал.

Break из любого блока


Наверняка вы знаете, что в любом цикле можно использовать ключевые слова break и continue — это стандартная возможность в современных языках программирования. Однако не все знают, что циклам можно давать метки и с их помощью прерывать любой конкретный цикл:

outer: for(var i = 0; i < 4; i++) {
    while(true) {
        continue outer;
    }
}
Читать дальше →
Всего голосов 78: ↑65 и ↓13+52
Комментарии71

Уменьшаем количество ошибок с помощью чек-листа Code Review

Время на прочтение3 мин
Количество просмотров30K
В нашей статье об эффективных ревью кода мы рекомендовали использовать чеклист. Чеклисты (контрольные списки) — это великая вещь в ревью: они гарантируют, что ревью действительно прошло через вашу команду. Также они способствуют выявлению и решению общих трудностей.

Исследование, проведенное Software Engineering Institute, показывает, что программисты делают 15-20 распространенных ошибок. Добавив такие ошибки в чеклист, вы можете быть уверены, что заметите их в момент появления и поможете от них избавиться надолго.

Чтобы вам было от чего отталкиваться, вот вам список типичных пунктов:
Читать дальше →
Всего голосов 26: ↑25 и ↓1+24
Комментарии13

Создавая карту мира

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


Подробная и точная карта мира является для нашей компании одним из краеугольных камней. Это основа, точка отсчёта, своеобразное начало координат. Поиск и выбор жилья нашими пользователями начинается именно с анализа нашей карты. И несмотря на обилие картографических сервисов, существующих в мире, нам всё же пришлось в своё время создавать свою собственную карту.
Читать дальше →
Всего голосов 11: ↑10 и ↓1+9
Комментарии3

Qooxdoo. Разрабатываем TODO List

Время на прочтение15 мин
Количество просмотров18K
На сегодняшний день существует великое множество javascript фреймворков, по многим из них написаны горы документации. Я хотел бы остановиться на фреймворке, который, по неизвестной мне причине, не пользуется особой популярностью у российских разработчиков.

Фреймворк называется qooxdoo. Произносится «куксду» (кому удобнее английская транстрипция: ['kuksdu:]).

На Хабре было несколько попыток написать про этот фреймворк, но все они свелись к новостям о выходе новой версии или к парам абзацев в статьях типа «смотрите каких фреймворков понаписали». Я несколько лет работаю с qooxdoo и мне хотелось бы восполнить этот пробел.
Читать дальше →
Всего голосов 23: ↑18 и ↓5+13
Комментарии9

Грамотная настройка сервера отправки почты для скриптов PHP, настройка функции mail()

Время на прочтение8 мин
Количество просмотров273K
В этом топике вы узнаете, как грамотно настроить, сервер исходящей почты и в частности функцию mail() в PHP. Сам являюсь жутким педантом. Люблю, что бы везде было все на своих местах, не терплю халтуры. Увидев один раз полную чушь в заголовках письма со своего сервера я разобрался с этим кардинально и безоговорочно. Под грамотной настройкой я подразумеваю такую, которая удовлетворяет потребности спам фильтров крупных почтовых систем, и просто выглядело красиво и осмысленно.

Как известно протокол SMTP не подразумевает никаких средств защиты от спама и аутентификации пользователя, поэтому крупными и не очень компаниями были придуманы «фиксы» безопасности протокола.
Если вы устанавливаете выделенный сервер с доменом размещенным на нем, очень рекомендуется выполнить данные настройки, что бы все было как надо.

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

Название заголовка выбрал именно такое, так как вначале своего пути я искал что-то вроде этого. Настраивать будем postfix, php, dns (ptr, spf), и другое.

Эта статья будет интересная людям, настраивающим выделеные сервера, но не менее интересна для обычных программистов.
К слову данную инструкцию я использую для своих проектов. Системы автоматизированного получения приглашений и получения виз в страны Шенгена: https://goingrus.com/ru, весь софт крутится на виртуальной машине.

Подробности под катом
Читать дальше →
Всего голосов 97: ↑71 и ↓26+45
Комментарии73

«Выглядит похоже». Как работает перцептивный хэш

Время на прочтение6 мин
Количество просмотров121K
За последние несколько месяцев несколько человек спросили меня, как работает TinEye и как в принципе работает поиск похожих картинок.

По правде говоря, я не знаю, как работает поисковик TinEye. Он не раскрывает деталей используемого алгоритма(-ов). Но глядя на поисковую выдачу, я могу сделать вывод о работе какой-то формы перцептивного хэш-алгоритма.
Читать дальше →
Всего голосов 149: ↑145 и ↓4+141
Комментарии46

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

Время на прочтение6 мин
Количество просмотров104K
Предлагаю читателям «Хабрахабра» перевод публикации «30 Amazing PHP Libraries for Programmers and Developers». Авторы собрали несколько удивительных PHP-библиотек, которые помогут реализовать некоторые классные вещи, не прилагая много усилий. Цель обзора состоит в том, чтобы преподнести что-то новое, поэтому список не включает популярные библиотеки.
Читать дальше →
Всего голосов 71: ↑60 и ↓11+49
Комментарии18

Как программисты ищут квартиры

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

На самом деле все происходит не так...

Один мой знакомый попросил меня написать эту статью. В статье пойдет рассказ о его похождениях, которые могут (могли) быть неправильно восприняты администрацией определенных интернет-ресурсов. И те, в свою очередь, могут (могли) пожаловаться на моего знакомого куда следует. Поэтому пишу статью с его слов я. А он уехал. В Гондурас. Насовсем.

Проблема


Пару лет назад (наконец-то!) наступил в моей жизни момент, когда мне нужно можно было купить квартиру. Оставалось ее найти. Дело осложнялось тем, что были у меня свои взгляды на то, какой должна быть моя идеальная квартира. А именно — она должна была быть НА последнем этаже. Ну чтобы никто по мозгу не ходил. Ну и плевать на всех удобнее.
Читать дальше →
Всего голосов 125: ↑99 и ↓26+73
Комментарии96

Postgres. Выборка N случайных записей

Время на прочтение6 мин
Количество просмотров36K
При работе над одним проектом возникла необходимость написать некое подобие тестовой системы. Задача формулировалась примерно так:

  • из N записей в базе необходимо выбрать m (3-5) случайных строк в серии из k выборок (преимущественно k=2).

А теперь то же самое человеческим языком: из таблицы нужно два раза выбрать по 3-5 случайных записей. При этом не должно быть дубликатов и выборка должна происходить случайным образом.

Первое, что приходит в голову:

 SELECT *
  FROM data_set
  WHERE id NOT IN (1,2,3,4, 5)
  ORDER BY random()
  LIMIT 5;

И это даже будет работать. Вот только цена такого решения…
Читать дальше →
Всего голосов 56: ↑51 и ↓5+46
Комментарии47

Оптимизация сложных запросов MySQL

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

Введение


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

Прежде всего хотелось бы ограничить круг рассматриваемых проблем оптимизации «широкими» и большими таблицами. Скажем до 10m записей и размером до 20Gb, с большим количеством изменяемых запросов к ним. Если в вашей в таблице много миллионов записей, каждая размером по 100 байт, и пять несложных возможных запросов к ней — это статья не для Вас. NB: Рассматривается движок MySQL innodb/percona — в дальнейшем просто MySQL.
Читать дальше →
Всего голосов 52: ↑47 и ↓5+42
Комментарии20

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

Время на прочтение2 мин
Количество просмотров12K
В данном топике я попытаюсь сравнить некоторые из игр для программистов.
  • Colobot
  • CeeBot
  • Terrarium
  • Robocode
  • Evole
  • DarwinBots II
  • breve


Более подробное описание для игр Colobot/CeeBot можно прочитать здесь, про Robocode здесь, про CoreWars здесь.
Ознакомится с сравнением
Всего голосов 82: ↑77 и ↓5+72
Комментарии58

Зарядка мобилки в лесу

Время на прочтение1 мин
Количество просмотров11K
На носу праздники, народ уже пакует рюкзаки, маринует мясо и закачивает в коммуникаторы карты местности. Возможно, стоит потратить пол-часа времени и сделать подзарядку для вашего коммуникатора, чтобы не остаться в лесу и без ЖПС, и без телефона?
Читать дальше →
Всего голосов 68: ↑63 и ↓5+58
Комментарии87

Офисный арбалет — дубль два

Время на прочтение1 мин
Количество просмотров1.4K
Из четырех биндеров, бухгалтерских резинок, карандаша и лазерной указки можно сделать и более серьезное оружие.

image

Читать дальше →
Всего голосов 96: ↑70 и ↓26+44
Комментарии92

Интересная проблема в .htaccess или спецсимволы, mod_rewrite и тег C++.

Время на прочтение1 мин
Количество просмотров3.7K
Недавно, при работе над своим проектом (сайт со статьями на тему «как сделать»), столкнулся с проблемой в работе mod_rewrite. Суть проблемы заключалась в следующем: в облаке тегов, при переходе на тег «C++» (обработанный urlencode и ставший C%2B%2B) я попадал на тег «С » (буква «С» и 2 пробела).
читаем дальше
Всего голосов 20: ↑16 и ↓4+12
Комментарии15

Перенос сайта на новый домен

Время на прочтение3 мин
Количество просмотров1.8K
Склейка домена обычно происходит при необходимости переехать с одного домена на другой, например, при покупке нового более красивого адреса или попадания в бан одной из поисковых систем старого. Иногда же клеят в корыстных целях чтобы получить чужой тИЦ/PR, но сейчас о первом случае.

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

Самым же неправильным методом переноса сайта на новый домен с минимальной потерей посетителей, на мой взгляд, будет следующий:
Читать дальше →
Всего голосов 62: ↑52 и ↓10+42
Комментарии16

50 цитат о программировании всех времён

Время на прочтение6 мин
Количество просмотров159K
Перевёл после прочтения комментариев к статье «О ненависти к C++». В цитатах можно найти ответы на большинство возникших там вопросов.

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

49. Lisp — это не язык, а строительный материал.
— Alan Kay

48. Ходить по воде и разрабатывать программы, следуя спецификации, очень просто… если они заморожены.
— Edward V Berard
Читать дальше →
Всего голосов 344: ↑336 и ↓8+328
Комментарии136

Виртуальный комьютер G.ho.st

Время на прочтение2 мин
Количество просмотров737
G.ho.st — это бесплатный веб-ориентированный виртуальный компьютер.

g.ho.st image
G.ho.st предоставляет каждому человеку возможность иметь собственный Виртуальный Компьютер (ВК) Подобно Windows PC, или Mac OS, это компьютерная среда, которая включает в себя, ваш рабочий стол, персональные настройки, вы можете работать со своими файлами, с помощью выбранных вами приложений. Но в отличие от ПК, Виртуальный Компьютер не установлен на компьютере – все данные хранятся в профессиональных дата центрах в Интернете, вы можете иметь доступ к нему из любого Интернет браузера, находясь в любой точке мира. Используя любой компьютер, вы можете открыть браузер на страничке G.ho.st, ввести ваше имя пользователя и пароль, и продолжить пользоваться вашим ВК, с того состояния, в котором вы завершили работу.
Скриншоты и еще немного информации
Всего голосов 55: ↑46 и ↓9+37
Комментарии41

Одноразовая почта

Время на прочтение1 мин
Количество просмотров1.6K
Иногда не хочется светить свой e-mail, чтобы пройти регистрацию на каком-либо ресурсе. Как же быть? Использовать одноразовую почту. Суть такова — нажимаем на кнопку «получить аккаунт» и вуаля, валидный e-mail на 10 минут. Если почта нужна более чем отведенный срок, то можно без проблем его продлить.
Читать дальше →
Всего голосов 36: ↑21 и ↓15+6
Комментарии26

Пути более эффективного использования PostgreSQL

Время на прочтение5 мин
Количество просмотров59K
Прочитав статью Базы данных в онлайн играх и особенно комменты к ней, я в очередной расстроился от мысли, что многие разработчики меняют БД в своём проекте, пытаясь этой сменой решить свои проблемы, не исчерпав, однако, всех возможностей, предоставляемой заменяемой БД. Я принимаю участие в работе над проектом, БД которого характеризуется:
  • Количеством транзакций порядка 5'000 — 10'000 в секунду
  • Объемом примерно в 100ГБ (который бодро растёт)
  • Примерно равным количеством операций на чтение/запись
  • Преимущественно мелкими транзакциями

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

Я опишу некоторые проблемы, с которыми мы сталкиваемся, и применённые решения. Если кто-то сочтёт это полезным — ради Бога. Если кто-то поправит — я буду только рад обнаружить уязвимость в используемых подходах и увеличить эффективность работы БД. Описанное может быть применено без вмешательства в логику приложения, исключительно путём модификации схемы БД.
Читать дальше →
Всего голосов 44: ↑40 и ↓4+36
Комментарии55

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность