• How-to: Процесс создания верстки html-писем

    • Translation
    В нашем блоге мы уже неоднократно рассказывали о создании email-рассылок с помощью CSS и HTML. Сегодня же речь пойдет о самом подходе к созданию верстки. Итальянский дизайнер Массимо Кассандро на сайте SitePoint описал свой процесс разработки html-писем. В нем есть несколько интересных моментов, так что мы решили сделать адаптированный перевод этой заметки.



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

    По моему опыту, особенно важно это при создании HTML почтовых писем. Email требует выполнения большого количества повторяющихся задача, которые сами по себе не так уж сложны, но затрагивают огромное количество разных элементов, что может приводить к ошибкам. Вот, как я стараюсь этого избежать.
    Читать дальше →
    • +11
    • 25.1k
    • 6
  • 10 потрясающих бизнес-уроков от известного предпринимателя

    • Translation
    image

    Сегодня мы поговорим о бизнесе с Ларри Кимом. Он получил невероятный опыт от своей предпринимательской деятельности. И на данный момент смог извлечь из неё следующие десять уроков, которыми и готов поделиться с нами.
    Читать дальше →
    • +11
    • 22.5k
    • 2
  • 19 принципов разработки по БЭМ, или что должен знать каждый разработчик библиотек

      БЭМ набирает популярность и становится актуальнее — например, недавно Google выпустил новую библиотеку блоков под названием Material Design Lite, реализованную по БЭМ-методологии. Команда БЭМ тоже не сидела без дела — мы выпустили новую версию библиотеки bem-components, на базе которой построены сайты и проекты не только Яндекса, но и других разработчиков.

      Эти события натолкнули нас на мысль ещё раз вспомнить и рассказать вам, как сформировались принципы разработки библиотек в БЭМ-методологии. Надеемся, что многим это будет интересно и полезно. Итак, поехали.

      image

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

      Если вы хотите узнать на примерах, как мы пришли к нашим принципам разработки, добро пожаловать под кат.
      Читать дальше →
    • Алгоритм сортировки Timsort

        Timsort, в отличии от всяких там «пузырьков» и «вставок», штука относительно новая — изобретен был в 2002 году Тимом Петерсом (в честь него и назван). С тех пор он уже стал стандартным алгоритмом сортировки в Python, OpenJDK 7 и Android JDK 1.5. А чтобы понять почему — достаточно взглянуть на вот эту табличку из Википедии.



        Среди, на первый взгляд, огромного выбора в таблице есть всего 7 адекватных алгоритмов (со сложностью O(n logn) в среднем и худшем случае), среди которых только 2 могут похвастаться стабильностью и сложностью O(n) в лучшем случае. Один из этих двух — это давно и хорошо всем известная «Сортировка с помощью двоичного дерева». А вот второй как-раз таки Timsort.

        Алгоритм построен на той идее, что в реальном мире сортируемый массив данных часто содержат в себе упорядоченные (не важно, по возрастанию или по убыванию) подмассивы. Это и вправду часто так. На таких данных Timsort рвёт в клочья все остальные алгоритмы.
        Читать дальше →
      • Новый курс «Основы тестирования программного обеспечения» на Универсариуме



          С 28 сентября на бесплатной учебной площадке Универсариум начнется мой курс «Основы тестирования программного обеспечения». Он предназначен для тех, кто делает первые шаги в сфере обеспечения и контроля качества программных продуктов. Из него вы узнаете о различных процедурах обеспечения качества и получите начальные навыки работы в этой области. Для глубокого понимания этой темы нельзя обойтись без исторического экскурса, поэтому вы узнаете, как формировалась природа качества в процессе развития человеческой цивилизации и чем сегодня руководствуются компании в борьбе за качество. Также я расскажу о комплексе процедур контроля качества, с помощью которых можно улучшить программные продукты.

          Прослушав курс, вы не только получите теоретические знания, но и примените полученную информацию на практике.

          Курс будет проходить с 28 сентября по 21 ноября.

          Учебная программа:

          1. Введение в обеспечение качества — 5 лекций
          2. Тестирование ПО — 3 лекции
          3. Артефакты тестирования — 3 лекции
          4. Инструменты на службе тестирования ПО — 2 лекции
          5. Другое тестирование — 2 лекции
          6. Управление тестированием — 2 лекции

          Записывайтесь на курс: universarium.org/course/445
        • Технокнига, часть 3: литература по проектированию высоконагруженных систем, по безопасности веб-приложений, по обеспечению качества разработки и по мобильной разработке



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

            Предыдущие части: первая, вторая.
            Читать дальше →
            • +25
            • 35k
            • 3
          • Как я, в итоге, написал новую RTOS, протестированную и стабильную

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

              image


              Процессоры, используемые в наших продуктах — это, в основном, 16- и 32-битные микроконтроллеры Microchip, имеющие RAM от 8 до 32 кБ, и ROM от 128 до 512 кБ, без MMU. Иногда, для самых простых устройств, используются еще более скромные 8-битные чипы.

              Очевидно, что у нас нет (разумных) шансов использовать ядро Linux. Так что нам нужна какая-нибудь RTOS (Real-Time Operating System). Находятся даже люди, которые не используют никаких ОС в микроконтроллерах, но я не считаю это хорошей практикой: если железо позволяет мне использовать ОС, я ее использую.

              Несколько лет назад, когда мы переходили с 8-битников на более мощные 16-битные микроконтроллеры, мои коллеги, которые были гораздо более опытными, чем я, рекомендовали вытесняющюю RTOS TNKernel. Так что это — та ОС, которую я использовал в разных проектах в течение пары лет.

              Не то, чтобы я был очень доволен ею: например, в ней нет таймеров. И она не позволяет потоку ждать сообщения сразу из нескольких очередей. И в ней нет программного контроля переполнения стека (это действительно напрягало). Но она работала, так что я продолжал ее использовать.
              Читать дальше →
            • Юникод для чайников

                logo
                Сам я не очень люблю заголовки вроде «Покемоны в собственном соку для чайников\кастрюль\сковородок», но это кажется именно тот случай — говорить будем о базовых вещах, работа с которыми довольно часто приводить к купе набитых шишек и уйме потерянного времени вокруг вопроса — «Почему же оно не работает?». Если вы до сих пор боитесь и\или не понимаете Юникода — прошу под кат.

                Читать дальше →
              • Реализация словаря в Python 2.7

                В этой статье пойдёт речь о том, как реализован словарь в Python. Я постараюсь ответить на вопрос, почему элементы словаря не упорядочены, описать, каким образом словари хранят, добавляют и удаляют свои элементы. Надеюсь, что статья будет полезна не только людям, изучающим Python, но и всем, кто интересуется внутренним устройством и организацией структур данных.
                Читать дальше →
              • Свой инструмент нужно знать в лицо: обзор наиболее часто используемых структур данных

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

                  Вопрос: Почему поиск в python dict на больших объемах данных быстрее чем итерация по индексированному массиву?

                  Ответ: В dict хранятся хэши от ключей. Каждый раз, когда мы ищем в dict значение по ключу, мы сначала вычисляем его хэш, а потом (внезапно), выполняем бинарный поиск. Таким образом, сложность составляет O(lg(N))!

                  На самом деле никакого бинарного поиска тут нет. И сложность алгоритма не O(lg(N)), а Amort. O(1) — так как в основе dict питона лежит структура под названием Hash Table.

                  Причиной неверного ответа было то, что я не удосужился досконально изучить те структуры, которые лежат в основе работы с коллекциями моего любимого языка. Правда, по результатам опроса нескольких знакомых разработчиков, оказалось что это не только моя проблема, очень многие вообще не задумываются, как работают коллекции в их любимых ЯП. А ведь используем мы их каждый день и не по разу. Так родилась идея этой статьи.
                  Читать дальше →
                • Из разработчика в PM-а за 90 дней

                  • Translation


                  В последнее время в сфере IT наблюдается определенная тенденция. Стартапы пренебрегают менеджментом, и все решения, как правило, принимает основатель. Когда стартап начинает расти, возникает необходимость в новых сотрудниках. И тогда срочно требуются менеджеры. Основатель обращается за помощью к своему лучшему разработчику: «Я в беде. Сможешь управлять этой командой вместо меня?»
                  Читать дальше →
                  • +17
                  • 22k
                  • 2
                • Как быстро и бесплатно получить доступ к windows на osx или linux

                  Среди разработчиков нередка ситуация, когда основной рабочий компьютер это mac или linux, но время от времени нужен доступ к windows: запустить специфичную программу, проверить верстку в internet explorer, поставить триальную версию corel draw для конвертации в .svg.

                  “Классический” способ решения этой задачи — установить одну из популярных виртуальных машин, скачать 90-дневную триал версию windows и установить ее в виртуальноый машине. Но у этого способа есть один большой минус — о необходимости деражать под рукой такую виртуальную машину разработчик обычно вспоминает в тот момент когда “о, тут нужна винда!”. А ставится windows не то чтобы очень быстро. И 90-дневный триал, что характерно, имеет обыкновение заканчиваться в самый неподходящий момент. Даже с rearm. Недавно Microsoft пошла на встречу разработчикам и сделала интересный сервис, позволяющий очень быстро и бесплатно получить доступ к нужной версии windows.
                  Подробности - под катом
                • 5 практических способов ускорения обучения

                    bolgarka

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

                    Корень этой проблемы часто заключается в том, каким путем были получены эти знания. Мало кто из нас умеет обучаться наиболее эффективным и быстрым способом, да так, чтобы новые навыки и знания сохранялись хоть сколь нибудь длительное время.

                    Ответом на эту проблему могут быть следующие советы по интенсификации, позволяющие ускорить обучение. Предлагаемые методы позволят вам освоить любой навык значительно тверже и быстрее.
                    Читать дальше →
                    • +22
                    • 33.4k
                    • 5
                  • 15 важных карьерных советов для разработчиков

                    • Translation
                    Перевод от Alconost

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



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

                    Образцовые же карьеры больше похожи на такой график. Здесь есть периоды замедления роста и что-то вроде ключевых точек, где карьера “выстреливает”.



                    Разные цвета? Это смены направлений: из разработки в продуктовый менеджмент, из продаж в основатели стартапа и т.п.

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

                    Принимая во внимание все вышесказанное, позвольте дать вам 15 советов о ваших карьерных выборах, кодинге, амбициях и всем остальном.
                    Читать дальше →
                  • jQuery Video Extend — расширение возможностей HTML5 видео плеера

                      Часто вижу, что владельцы сайтов и разработчики используют видео-плееры вроде VideoJS, Flowplayer, Uppod и т.д., но очень редко вижу стандартные HTML5 плееры на сайтах. Мне это кажется странным, ведь обычные плееры в браузерах тоже выглядят очень симпатично. Что есть у стандартного «браузерного» видео плеера:

                      1. Стильный дизайн. Зависит от браузера, но везде на хорошем уровне.
                      2. Поддержка самого популярного формата — Mpeg4 (H.264) (Chrome, Firefox, IE, Safari, Opera).
                      3. Очень удобное API — http://www.w3.org/2010/05/video/mediaevents.html
                      4. Быстрая работа и поддержка мобильных устройств.

                      Почему же такие плееры не популярны? Вот список возможных причин:

                      1. Нет простого способа добавить свой логотип.
                      2. Нет поддержки FLV видео, которое часто ещё встречается.
                      3. Нет возможности ставить метки на видео и создавать свои расширения.
                      4. Нет возможности менять внешний вид и стиль плеера.

                      С последним пунктом сложнее всего, но довольно редко эта возможность используется и на плеерах, о которых я писал в начале. Чаще используется первая стандартная тема оформления. Первые три пункта я решил восполнить, написав jQuery плагин, так появился Video Extend.
                      Читать дальше →
                    • Обзор российского офисного пакета с открытыми исходными текстами OnlyOffice в InfoboxCloud

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


                        Читать дальше →
                      • 36 млн запросов в час, 10000+ постоянно работающих клиентов, на одном сервере, nginx+mysql

                        Сложилась ситуация, что участвую в проекте, который работает с достаточно большой нагрузкой. Как уже написал — 36 млн запросов в час. Я много чего прочитал и перепробовал за последний месяц, настраивая сервер; хотелось бы просто сжато и компактно выдать тезисно то, что работает хорошо в такой конфигурации.

                        Первое, что я заметил — множество советов как все настроить под большую нагрузку. Читайте их внимательно, обычно в тексте найдете, что речь про «высокую нагрузку» в 15-20 тысяч клиентов в сутки. У нас клиентов примерно миллион, активных, ежедневных.

                        У нас нет денег и мы все делаем за свой счет, поэтому экономим. Итог — весь миллион клиентов обслуживается на одном сервере, вот на таком — EX-60 на hetzner.
                        Читать дальше →
                      • Три мысли для любителей Android по мотивам I/O 2015

                          В данной статье я хочу поделиться с сообществом тремя мыслями по мотивам Google I/O 2015, которые, на мой взгляд, могут быть очень полезными для всех любителей Android в этом году.

                          image

                          Читать дальше →
                          • +9
                          • 18.6k
                          • 4
                        • Искусство командной строки



                            Вот уже как неделю английская версия the art of command line висит в секции trending на Github. Для себя я нашел этот материал невероятно полезным и решил помочь сообществу его переводом на русский язык. В переводе наверняка есть несколько недоработок, поэтому милости прошу слать пулл-реквесты мне сюда или автору оригинальной работы Joshua Levy вот сюда. (Если PR отправите мне, то я после того, как пересмотрю изменения отправлю их в мастер-бранч Джоша). Отдельное спасибо jtraub за помощь и исправление опечаток.

                            Enjoy!
                          • LESS: программируемый язык стилей

                            Я не люблю CSS. Он простой и понятный. Это движущая сила Интернета, но он слишком ограниченный и им трудно управлять. Пришло время привести этот язык в порядок и сделать его более полезным, используя динамический CSS при помощи LESS.
                            Объясню свою позицию на примере. Почему бы вместо использования #FF9F94 для получения темно-персикового цвета просто не хранить значение этого цвета в переменной для её последующего использования? Что бы перекрасить сайт достаточно будет изменить значение переменной всего в одном месте и всё.
                            Другими словами: это будет очень изящно, если мы будем использовать немного программирования и логики в CSS, что бы сделать его более мощным инструментом. Хорошо, что это всё возможно с использованием LESS.
                            Так что же такое LESS?