Search
Write a publication
Pull to refresh
0
0
Роман @Expellee

User

Send message

23 причины не верить в буллшит про работу в больших компаниях

Reading time5 min
Views29K
Последнее время я очень часто натыкаюсь на перепост статьи о том, как плохо людям работать в больших компаниях. Стоит кому-то запостить эту ерунду, как тут же набегает толпа недовольных хомячков и начинает вопить о том, что всё это правда и большие компании отнимают у них лучшие годы жизни, не давая ничего взамен. Всякий раз, когда я это вижу, у меня в голове возникает одна простая как тапок мысль: «Найди другую работу, тудыть тебя через коромысло!» Если я имею неосторожность озвучить эту мысль, мне обычно возражают, что все компании одинаковы, всё плохо, и вообще, 4 мая 1925 года Земля налетит на небесную ось.
Что ж, позвольте представить вам несколько иной взгляд на вещи. Мне 25 лет, и я работаю рядовым инженером-программистом в крупной компании, название которой не разглашается в интересах следствия. В этой небольшой статье я пройдусь горячим утюгом сатиры по каждому из пунктов оригинальной статьи, и объясню, почему это полный буллшит. Большинство примеров будет являться описанием реальной обстановки в нашей компании.
Читать дальше →

Самый ценный совет по программированию, который я получил

Reading time1 min
Views16K
«Год или два, с момента начала работы в Bell Labs, я работал в паре с Кеном Томпсоном над интерактивным графическим языком, разработанным Джерардом Хольцманом (Gerard Holzmann). Я печатал быстрее, поэтому я сидел за клавиатурой, а Кен стоял позади меня. Мы работали быстро, и когда компилятор выдавал ошибку, я рефлективно начинал закапываться в проблему, изучая стек вызовов, вывод программы, запускал отладчик и так далее. Но Кен просто стоял рядом и думал, игнорируя меня и код, который мы только что написали. Вскоре я заметил закономерность: Кен зачастую понимал, в чем проблема, раньше меня и произносил: „Я знаю, что не так“. Обычно он был прав. Я понял, что Кен выстраивал ментальную модель кода и, когда что-то ломалось, это была ошибка в модели. И думая о том, как эта проблема могла возникнуть, он выяснял, в каком месте модель была неверна или где наш код мог неправильно эту модель отразить.
Читать дальше →

Таблицы с данными в адаптивном дизайне

Reading time1 min
Views101K
Одна из постоянных проблем верстальщиков адаптивных сайтов — это задача удобно представить обычные таблицы на мобильных устройствах. Вот как выглядят такие таблицы чаще всего:


Не очень удобно, правда? К счастью уже существует несколько хитрых способов решить такую проблему.
Читать дальше →

Шпаргалка начинающего Debian/Ubuntu администратора по управлению пакетами

Reading time3 min
Views294K
Долгое время меня глодало незнание того, как сделать некоторые элементарные вещи в дебиановских менеджерах пакетов, но, как часто бывает, спросить рядом было не у кого, а до написания куда-либо руки не доходили. И вот наконец вопросы вызрели и я написал свой вопрос в дебиановскую рассылку. Естественно оказалось что пропустил что-то очевидное, но и узнал много неочевидных полезностей, посему решил набросать шпаргалку, авось кому пригодится.
Читать дальше →

Русские субтитры в курсах Coursera

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

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

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

Руководство по форматированию CSS

Reading time3 min
Views12K
По мере того как мы подводим итоги недавнего опроса по сортировке CSS свойств у нас появляется более серьезные вопросы о стиле форматирования CSS. Сортировка свойств это всего лишь один шаг на вашем пути к завершенной стратегии форматирования стилей. Название класса — это часть стратегии. Распределение — часть стратегии. Комментарии, отступы, структура файла… все это формирует руководство по форматированию CSS.

Давайте рассмотрим существующие практики форматирования.
Читать дальше →

Гео-модуль для PHP приложений

Reading time5 min
Views33K
image Вопрос «Где?» возникает сразу же после вопроса «Что?» эта закономерность верна и в вебразработке. Многие сайты запрашивают информацию у пользователя, предлагая ему ввести свой адрес, т. е. страну, регион, город, улицу, дом почтовый индекс. Но как потом обрабатывать эти данные, если они были указаны в свободной форме? В своих первых проектах мы использовали свой «велосипед», но по мере роста и развития это «чудо» превратилось в «чудовище», которое поставило крест на эффективной обработке гео-информации о наших пользователях. Мне была поставлена задача прибить этого монстра, заменив его стандартизованной гео-базой и простым интерфейсом для работы с ней. Гугление на эту тему не дали готового решения, поэтому пришлось отбросить простой вариант и сделать свой гео-модуль.
Описание сего процесса и сам модуль под катом

RedBeanPHP — CodeFirst PHP фреймворк

Reading time6 min
Views31K
RedBeanPHP
В данном посте речь пойдет об весьма интересном ORM фреймворке RedBeanPHP. Примечателен он, прежде всего, возможностью создавать структуру базы данных на лету. К тому же фреймворк прост в использовании как две копейки. Моё повествование будет разделено на 3 части.
Во второй части основная тема будет — модели. В третей — изменение логики работы фреймворка.

Перед написанием поста я потрудился и сделал тестовое приложение с 15 000 записей, для того, что бы убедиться на своем опыте в возможности невероятно облегчить работу. Ведь я наверно не один, кто прописывает поля в нескольких местах с жутким осознанием бессмысленности этой работы, особенно на начальном этапе разработки. Наконец появился аналог Entity Framework Code First из .NET, который в свое время вызвал у меня дикий восторг. Итак по порядку.
Читать дальше →

Практика рефакторинга в больших проектах

Reading time4 min
Views15K
Некоторое время назад я попал в геймдев, где столкнулся с проектами по 2 млн. строк кода, которые пишут десятки программистов. При таких масштабах кодобазы возникают проблемы неведомого мне ранее характера. Об одной и них я хочу вам сейчас рассказать.

Итак, представьте себе следующую ситуацию. Так уж случилось, что вам надо отрефакторить очень большой кусок кода, целую подсистему. Строк, эдак, на 200К. Причем рефакторинг явно выглядит очень крупным, затрагивающим базовые концепции, по которым построена ваша подсистема. Фактически надо переписать всю архитектуру, сохранив бизнес логику. Такое бывает, если, например, вы сделали один проект и у вас впереди новый, и вы хотите в нём исправить все ошибки прошлого. Допустим, по первым прикидкам, на рефакторинг надо месяца 2, не меньше. В процессе рефакторинга всё должно работать, в том числе нельзя мешать другим программистам добавлять новые фичи и чинить баги в подсистеме. Часто такой рефакторинг бывает насколько сложен, что совершенно невозможно замерджить старый код в новый, а также невозможно выкатить результат по частям. Фактически вам надо заменить двигатель самолёта на лету.

Примеры из практики, как моей, так и моих коллег:
  • Переделать всю работу с базой данных с чистого JDBC на Hibernate.
  • Переделать архитектуру сервиса с отсылки-приёмки сообщений на удалённый вызов процедур (RPC).
  • Полностью переписать подсистему трансляции XML файлов в рантайм объекты.


Что делать? С какой стороны подойти к проблеме? Ниже представлен набор советов и практик, которые нам помогают справиться с этой проблемой. Сначала более общие слова, а потом конкретные методики. В общем-то ничего сверхъествественного, но кому-то может помочь.
Читать дальше →

Т-фракталы на JavaScript Canvas

Reading time2 min
Views11K
Сегодня я прочитал пост пользователя celen и вдохновился красотой T-фракталов. Так как я немного увлекаюсь созданием растровых композиций в JavaScript Canvas, то у меня возникла идея реализовать то же самое, только на стороне клиента силами JS, освобождая сервер от нагрузки.
Читать дальше →

Google Analytics для сбора ошибок JavaScript

Reading time2 min
Views19K
image
Не так давно на Хабре была статья про навороченный стартап, заточенный на сбор ошибок JavaScript. Далеко не всегда нужно столько возможностей, но оказалось, что многие просто не знают про старый бородатый способ с Google Analytics. Про него я и попытаюсь кратенько рассказать.
Читать дальше →

Необычные заголовки HTTP

Reading time2 min
Views34K
HTTP-ответ сервера содержит не только машиночитаемый текст, но иногда и скрытые послания для людей. Например, WordPress.com вставляет в заголовок поле X-hacker с текстом: «Если вы читаете это, то вам следует пойти на automattic.com/jobs и заполнить анкету». Объявления с приёмом на работу внедряют и другие серверы, например, Gigaom.com. Поскольку он размещается на WordPress, налицо конкуренция работодателей внутри служебных полей.

Server: nginx
Date: Wed, 15 Aug 2012 14:04:39 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding, Cookie
Last-Modified: Wed, 15 Aug 2012 14:03:40 GMT
Cache-Control: max-age=241, must-revalidate
X-hacker: If you’re reading this, you should visit automattic.com/jobs and apply to join the fun, mention this header.
P3P: CP=”GigaOM has a Privacy Policy available at gigaom.com/privacy-policy
X-PickUsInstead: Cool company, cooler headers, join the team! Send an email to jobs@gigaom.com and mention this header.
X-Pingback: gigaom.com/xmlrpc.php
X-nananana: Batcache
Content-Encoding: gzip

Вот забавная подборка нестандартных HTTP-заголовков на разных серверах.
Читать дальше →

Подборка CSS3-генераторов для упрощения фронтэнд-разработки

Reading time2 min
Views48K
CSS3 предоставляет много новых возможностей в мире фронтэнд-разработки. Это действительно великолепная вещь, но иногда трудно вспомнить некоторые параметры, особенно, если вы — веб-дизайнер, а не программист. Вот 10 удивительных CSS3-генераторов, которые помогут вам сэкономить время и силы (картинки кликабельны).
Читать дальше →

Обзор JS-фреймворков. Путешествие через джунгли JavaScript MVC. Ч. 2

Reading time15 min
Views124K
(Окончание перевода статьи Эдди Османи о сравнении и выборе библиотеки для проекта со значительной ролью JS на клиенте.)
Содержание первой части:

■ Что такое MVC или, лучше сказать, MV*?
■ Когда нам нужен MV*-фреймворк JS?
■ Где же мы будем нуждаться в MV*, а где нет?
■ Проблема выбора: слишком много вариантов?
■ TodoMVC: общее приложение для обучения и сравнения
■ Предложенные нами критерии выбора фреймворка
■ Dojo и усложнение фреймворков на JavaScript
■ Коллекция TodoMVC (фреймворки, на которых сделаны реализации тестового приложения Todo)
Читать дальше →

Привязка контекста (this) к функции в javascript и частичное применение функций

Reading time6 min
Views82K
В предыдущем посте я описал, что this в javascript не привязывается к объекту, а зависит от контекста вызова. На практике же часто возникает необходимость в том, чтобы this внутри функции всегда ссылался на конкретный объект.
В данной статье мы рассмотрим два подхода для решения данной задачи.
1. jQuery.proxy — подход с использованием популярной библиотеки jQuery
2. Function.prototype.bind — подход, добавленный в JavaScript 1.8.5. Рассмотрим также его применение для карринга (частичного применения функции) и некоторые тонкости работы, о которых знают единицы.

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

Практикум AngularJS — разработка административной панели

Reading time12 min
Views137K
При создании сайтов часто возникает задача создания админки для редактирования контента. Задача, в общем, тривиальная, но сделать удобную админку не так-то просто.

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

Всем известный jQuery-плагин tablesorter с tablesorterPager-ом и менее известный, но гораздо более функциональный DataTables хороши, но обладают некоторыми недостатками. Главный из них — сложность динамического добавления новых строк в таблицу (после добавления строки в таблицу, новая строка потеряется при следующем вызове сортировки). tablesorter вообще не даёт средств для добавления строки в свой кэш, DataTables предоставляет широкое и функциональное API для управления внутренним представлением таблицы, но это API довольно многословно и не очень гибко.

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

Сразу приведу, что получится в итоге (кликабельно):


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

Многопоточный загрузчик файлов на JS (jQuery)

Reading time5 min
Views5.5K
Доброго времени суток, коллеги. В этой статье я опишу опыт создание многопоточного загрузчика файлов (с ограниченной нагрузкой на сервер) на JS (jQuery).

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

Онлайновый учебный курс «Algorithms: Design and Analysis, Part I»

Reading time2 min
Views19K
Закончил я онлайновый курс Algorithms: Design and Analysis, Part I на coursera.org

Если сказать, что я полном отпаде — это ни чего не сказать. Причем, в отпаде я не сколько от материала. Он на высоте, но этим удивить сложно. А в восторге я от формата самого обучения, качества подготовки материалов и онлайновой технологии проведения.

Вкратце.
Читать дальше →

Как работает парсер Mediawiki

Reading time6 min
Views9.9K

Перевод статьи The MediaWiki parser, uncovered.

Актуальность перевода статьи 2009 года в том, что, во-первых, костяк парсера с тех пор существенно не поменялся, и во-вторых, с ним приходится ежедневно сталкиваться тем, кто пишет расширения для Mediawiki, на котором крутятся их корпоративные сайты.


Парсер Mediawiki — фундаментальная часть кода движка Mediawiki. Без него вы бы не смогли вставлять в свои статьи Википедии различные метки: секции, ссылки или картинки. Вы даже не смогли бы увидеть или быстро изменить разметку других статей. Вики-разметка достаточно гибка, чтобы дать возможность одинаково легко писать статьи как новичкам, так и HTML-экспертам. Из-за этого код парсера несколько сложноват, и с годами проходил через множество попыток его улучшить. Тем не менее, даже сегодня он все еще достаточно быстро работает для Википедии, одного из самых больших веб-сайтов в мире. Давайте взглянем на внутренности этого ценного (но чуть-чуть заумного) куска кода.
Читать дальше →

Information

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