• Сказ о том, как я в Финляндию переехала

    Всего год назад я сидела на Хабре и читала подобного рода статьи для того, чтобы поддержать свой боевой дух, когда решила покинуть родной Казахстан и найти работу в Европе. Но, к моему сожалению, все статьи начинались примерно одинаково: “Меня зовут username и я программирую с 8 лет”. Я вам поведаю совсем другую историю.


    Читать дальше →
  • Описание алгоритмов сортировки и сравнение их производительности

    Вступление


    На эту тему написано уже немало статей. Однако я еще не видел статьи, в которой сравниваются все основные сортировки на большом числе тестов разного типа и размера. Кроме того, далеко не везде выложены реализации и описание набора тестов. Это приводит к тому, что могут возникнуть сомнения в правильности исследования. Однако цель моей работы состоит не только в том, чтобы определить, какие сортировки работают быстрее всего (в целом это и так известно). В первую очередь мне было интересно исследовать алгоритмы, оптимизировать их, чтобы они работали как можно быстрее. Работая над этим, мне удалось придумать эффективную формулу для сортировки Шелла.

    Во многом статья посвящена тому, как написать все алгоритмы и протестировать их. Если говорить о самом программировании, то иногда могут возникнуть совершенно неожиданные трудности (во многом благодаря оптимизатору C++). Однако не менее трудно решить, какие именно тесты и в каких количествах нужно сделать. Коды всех алгоритмов, которые выложены в данной статье, написаны мной. Доступны и результаты запусков на всех тестах. Единственное, что я не могу показать — это сами тесты, поскольку они весят почти 140 ГБ. При малейшем подозрении я проверял и код, соответствующий тесту, и сам тест. Надеюсь, что статья Вам понравится.
    Читать дальше →
  • Руководство по собеседованию на вакансию PHP-программиста

    Вездесущий… это определённо то слово, которым можно описать язык PHP по отношению к вебу. Он действительно вездесущ. В настоящее время, среди всех серверных языков программирования, PHP используется наиболее широко. На нём написаны более 80% сайтов, при этом следующий по популярности ASP.NET со своими 17% остаётся далеко позади.



    Почему? Что позволило PHP стать настолько популярным и широко используемым? На этот вопрос нет однозначного ответа, но простота использования языка, безусловно, существенный фактор, поспособствовавший его успеху. Новички в PHP могут быстро выйти на достаточный уровень и разместить динамический контент на своих веб-сайтах с минимум познаний в программировании.

    Именно в этом и заключается основная проблема поиска высококвалифицированных PHP-разработчиков. Относительно низкий порог вхождения и 20 лет развития языка привели к тому, что PHP-программисты стали такими же вездесущими, как и сам PHP. Многие из них могут на законных основания утверждать, что «знают» язык. Однако разработчики, которые действительно являются экспертами по PHP, способны создавать куда более функциональное, надёжное, масштабируемое и простое в сопровождении программное обеспечение.

    Как же отличить тех, кто обладает реальной компетентностью в PHP (не говоря уже о тех, кто входит в 1% наиболее опытных кандидатов) от тех, у кого только поверхностные знания?
    Читать дальше →
  • Объясняем современный JavaScript динозавру

    • Translation


    Если вы не изучали JavaScript с самого начала, то осваивать его современную версию сложно. Экосистема быстро растёт и меняется, так что трудно разобраться с проблемами, для решения которых придуманы разные инструменты. Я начал программировать в 1998-м, но начал понимать JavaScript только в 2014-м. Помню, как просматривал Browserify и смотрел на его слоган:


    Browserify позволяет делать require («модули») в браузере, объединяя все ваши зависимости


    Я не понял ни слова из предложения и стал разбираться, как это может помочь мне как разработчику.


    Цель статьи — рассказать о контексте, в котором инструменты в JavaScript развивались вплоть до 2017-го. Начнём с самого начала и будем делать сайт, как это делали бы динозавры — безо всяких инструментов, на чистом HTML и JavaScript. Постепенно станем вводить разные инструменты, поочерёдно рассматривая решаемые ими проблемы. Благодаря историческому контексту вы сможете адаптироваться к постоянно меняющемуся ландшафту JavaScript и понять его.

    Читать дальше →
  • Возможности PostgreSQL, которых нет в MySQL, и наоборот



    Многие боятся переходить с «мускуля» на «посгрес» из-за того, что лишь смутно понимают, что это даст. Некоторых останавливает мысль, что наверно Postgres — это слишком сложная база и требует обучения. А также, что возможно чего-то придется лишиться в связи с переходом. Попробую немного прояснить ситуацию.
    Читать дальше →
  • Как я учился работать с XML

      image
      Честно говоря, я довольно сильно удивился, не найдя статьи по подобной теме на хабре. А тема-то довольно актуальная и нужная, поэтому возьму на себя смелость немного ее осветить.
      И как же?
    • 5 убийц унылых лэндингов

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

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

      Мы вступили в новую эру оптимизации посадочных страниц. Дизайнеры, профессиональные маркетологи, SЕО-оптимизаторы, CRO, UX-эксперты и другие специалисты объединили свою коллективную мудрость для разработки нового типа посадочных страниц, которые выходят за стандартные рамки и не поддаются традиционной логике. Это будут посадочные страницы будущего.

      Вот некоторые из иновационных элементов в оптимизации посадочных страниц, которые, как я считаю, сигнализируют о начале новой эры в дизайне посадочных страниц.

      image
      Читать дальше →
    • 300 потрясающих бесплатных сервисов

      • Translation


      Автор оригинальной статьи 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: Невероятно простой счет.

      Читать дальше →
    • Оптимизируем юзабилити веб-форм

      • Translation
      Формы — привратники Интернета. Зачастую они являются отправной точкой очередного приключения, а именно регистрируют новый аккаунт. Также они могут быть для авторизации пользователя. Вы когда-нибудь задумывались о том, что, отправляя электронное письмо или посылая новый твит, Вы заполняете очередную веб-форму? Они везде, но их недооценивают. Оптимизация — ключ к повышению конверсии.

      Сегодня мы обсудим способы улучшения и оптимизации форм.
      Читать дальше →
      • +5
      • 13.7k
      • 5
    • Django DB Mailer — простая и удобная батарейка, для отправки почтовых сообщений в вашем проекте

      • Tutorial
      В подавляющем большинстве проектов используется отправка сообщений на почтовые адреса клиентов/админов/отделов. На сколько утомительно каждый раз создавать шаблоны на файловой системе, задавать сигналы, использовать часто дублирующийся код для рендеринга и отправки.

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

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

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


      Читать дальше →
    • Эффективный Django. Часть 2

      • Translation
      • Tutorial

      Продолжение перевода статей о Django с сайта effectivedjango.com. Наткнулся я на этот сайт во время изучения данного фреймворка. Информация размещенная на этом ресурсе показалась мне полезной, но так как нигде не нашел перевода на русский, решил сделать сие доброе дело сам. Этот цикл статей, как мне думается, будет полезен веб-разработчикам, которые делают только первые шаги в изучении Django.
      Приступить к чтению
      • +19
      • 60.1k
      • 9
    • Как мы в django-проекте js собираем + пара хитростей в Gulp

      Всем привет!

      Это не руководство, я делюсь опытом того, как мы в большом Django проекте от безобразной помойки скриптов на jQuery постепенно пришли к сборке и минификации сложных frontend-приложений на AngularJS при помощи gulp и browserify.
      Читать дальше →
    • Пространства имен в PHP

      На хабре можно найти немало статей о пространствах имен в PHP, но мне помогла именно эта, и именно ей я хочу поделится. Наверняка найдутся те, кому этот перевод поможет.

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

      Что такое пространства имен?


      «Не забывайте обратный слеш, когда Вы храните имя пространства имен в виде строки!»

      Представьте себе пространство имен, как ящик, в который Вы можете положить все что угодно: карандаш, линейку, кусок бумаги и так далее. Это Ваши вещи. Прямо под вашим ящиком, располагается еще чей-то ящик, и его хозяин хранит те же вещи в нем. Чтобы избежать использования предметов друг друга, Вы решили маркировать ящики так чтобы стало ясно, что кому принадлежит.
      Читать дальше →
      • +22
      • 38.1k
      • 9
    • Anemic Domain Model [Перевод]

      На фоне своего увлеченного изучения DDD, я прочел статью Мартина Фаулера от 25 Ноября 2003 года Anemic Domain Model. Иногда для лучшего понимания материала я перевожу его на русский язык. Вот я и решил поделиться переводом.
      Перевод авторский и местами очень смысловой.

      Ссылка на оригинал.

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



      Бледная Доменная Модель

      Это один из тех анти-паттернов который долгое время окружал нас, а сейчас проявляется еще активнее. Я говорил о этом с Эриком Эвансом и мы оба отметили что он становится все популярнее. И я как сторонник правильной Доменной Модели, считаю что это не есть хорошо.

      Узнать немного о DDD
      • +5
      • 28.3k
      • 3
    • Удобный способ делать рассылки по базе сайта (с примером для Django)


        Я расскажу вам про опыт использования сервиса Your MailingList Provider (YMLP) для организации рассылки одного из наших проектов.

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

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

        Итак, YMLP позволяет делать все перечисленное мною выше плюс многое другое. Бесплатный аккаунт позволяет делать рассылку по базе до 1000 человек. Можно создавать группы. Можно хранить шаблоны рассылок. Можно добавлять произвольные поля и делать по ним выборку. Можно создавать пользовательские формы. Есть официальная реализация для работы с API на PHP, но механизм его работы настолько простой, что не составляет никакой трудности использовать любой другой язык программирования, например, Python.

        Очень важная особенность — можно делать любое количество подаккаунтов и настраивать их права.

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

        Итак, обещанный пример для Django — рабочий скрипт интеграции базы пользователей этого фреймворка с YMLP. Вызывается по cron, синхронизируя базу сайта с базой YMLP:
        Читать дальше →
        • +12
        • 1.2k
        • 5
      • Платформы для создания социальных сетей

          Немного в продолжении… Лучшие решения для социальной сети
          Не для кого ни секрет, что словосочетание “социальные сети” обрело катастрофичные масштабы в умах продвинутых (и не очень) интернет-пользователей. Мне кажется, что популярность эта носит временный характер и вскоре обозначится обратная тенденция… пользователи будут создавать собственные социальные сети, которые будут объединены едиными стандартами. Произойдет отток траффика от признанных гигантов социального веба в сторону сотен тысяч локальных объединений.
          Пока это только один из возможных вариантов развития социальных сетей, хочу познакомить вас со списком, который собирал не один месяц и который навел меня на вышеприведенную мысль. Здесь собраны все платформы, позволяющие создать свою социальную сеть.
          Многие из них бесплатны, некторые предлагаю White Label продукт за определенную плату. Смотрите, выбирайте и изучайте…
          Flux, BlogTronix, Sharepoint, Five Across, CoreSpeed, Wild Apricot, Community Server, PeopleAggregator, Kick Apps, SiteLife, Vitrue, Social Engine, introNetworks, Web Crossing, CollectiveX, Crowd Factory, ElggSpaces, KREM, Plone, FriendSite, Mixxt, Me.com, PHPfox, Onesite, Select Minds, Pringo, Rsitez, Small World Labs, Social Network Server, Sparta Social Networks, conVerdge, Atlassian Confluence, Go Lightly, Kwiqq, Phpizabi, Leverage Software, Going On, Momo, World Dating Partners, Social Groupware, Awareness, HayStack, Vibe Capital, Group Members International, Neighborhood America, Village Engine, Dave Networks, OmniFuse, Prospero, LiveWorld, Boonx, Dolphin, DZOIC, intronNetworks, eFriends, Ning, Userplane, The Port, AROUNDMe, Nexo, iBelong, Famster,
          В последнее время стали появляться интересные отечественные разработки… Explay и BigStreet

          Оригинал на ad28.ru
        • Чек-лист вёрстки. Что можно отдавать клиенту, а что надо переделывать

            Идеальная вёрсткаВы PM. Как узнать – готова ли вёрстка к реальному использованию?
            Вы заказчик. Как убедиться, что работа выполнена качественно?
            Как оценить качество вёрстки?

            Когда я стал тим-лидом, а позже PM, передо мной стала задача проверять вёрстку наших проектов. Нужно было выработать формальные, легкопроверяемые критерии, соответствие кода которым, должно было давать некую гарантию, что не будет факапов и ни клиент, ни программеры не сказажут потом “WTF?”.

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

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

            Итак что же это за список?

            Краткая версия теперь доступна на html5checklist.com (github), где можно вносить pull-request'ы.

            История обновлений:
            • 2015/08/11: Актуализировал рекомендации по оптимизации скорости загрузки. Добавил требование поддержки Retina. Дополнил «19. Мелочи» требованием что изображения должны масштабироваться в зависимости от размера окна.
            • 2015/08/10: актуализирован список исключений для CSSLint
            • 2015/07/29: актуализирован пункт №13 «плохо»/«хорошо»
            • 2015/04/08: добавлено требование использования препроцессоров и рекомендация использования систем сборки
            • 2013/04/25: добавлены анализаторами качества кода: CSSLint и JSHint, указан сайт подбора css font stack (спасибо @fliptheweb), мелкие уточнения (работу интерактивных элементов страницы, что не пропадает фон на высоких разрешениях, не должно быть пустых презентационных блоков, при проверках контента — пробовать удалять заголовки, менять местами блоки)
            • 2013/04/24: добавил пункт об минимизации каскада (БЭМ-техники, MCSS, SMACSS), необходимости вписывания в экран моб. устройства, заменил ссылку на проверочный текст отображения стандартного html на код с normalize.css, поправил пример где в рекомендации встречался длинный каскад, упомянул про Opera на Presto и новый уровень семантики — в именах классов BEM.
            • 2012/04/12: отсортировал пункты проверки в порядке важности, выделил главные, дополнил статью подробностями
            • 2011/12/07: дополнил согласно доклада на WSD Минск'2011.
            • 2011/07/19: добавлено про повышение надёжности вёрстки благодаря html5-тэгам, про необходимость favicon/apple-touch-icon, отсутствие багов при ресайзе textarea
            • 2011/06/15: добавил пояснения какие ошибки валидации допустимы, рассказал про отсутствие официальной кнопки «HTML5 Valid» и про официальное лого HTML5 на сайте.


            Далее с примерами - как проверить html, даже если вы ничего не понимаете в вёрстке.
          • 7 типичных русских проблем в английской речи

              South Park
              Предметом данной статьи является попытка систематизировать культурные различия, и типичные ошибки которые мы допускаем с нашими иностранными коллегами. Большинство примеров взято из книги Русские проблемы в английской речи. Я взял на себя смелость в небольшой популяризации данной темы, снабжению комментариями и собственными примерами.

              1. Я прав, а ты нет
              Читать дальше →
            • Использование MongoDB в Django

                — документо-ориентированная система управления базами данных (СУБД) с открытым исходным кодом, не требующая описания схемы таблиц. Написана на языке C++ и распространяется в рамках лицензии Creative Commons.

                В последнее время становится довольно популярной и восстребованой. И вот возникла идея использовать ее в связке с фреймворком Django. Собственно о чем далее и пойдет речь.

                Читать дальше →
              • Сумбурные заметки про python и django

                  Накопилось несколько маленьких заметок/советов про python и django, которые на отдельные топики не тянут, поэтому публикую все сразу.

                  Под катом:
                  • как упростить код вьюх ровно в 2 раза
                  • легкий способ рисования графиков
                  • почему Ian Bicking воскликнул «Cool!»
                  • приложения для ВКонтакте на django за 5 минут
                  • хорош ли pymorphy?
                  • пара фишек насчет выкладки пакетов на pypi
                  • что общего между декораторами и with-контекст-менеджерами
                  • принимаем оплату на django-сайтах
                  • показываем Яндекс.Карту для заданного адреса

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