Как стать автором
Обновить
142
0

Разработчик

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

Как стать профессиональным веб-разработчиком: практическое руководство

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

Дорога длинна и трудна, но интересна и полезна!

Статья задумывалась как практическое руководство для желающих стать профессиональным веб-разработчиком. Я уже более 20 лет пишу код для веба. Я ежедневно работаю с веб-разработчиками и помогаю им. В статье я опишу, что вам нужно выучить, когда вам нужно это выучить и где взять информацию (чаще всего даже бесплатно). Затем я дам совет по получению реального опыта, и что самое важное – по получению денег за написание кода.

По статье разбросано множество ссылок на бесплатные и важные ресурсы. Для простоты я собрал их в PDF и разбил по категориям. Мне не платят за упоминания сайтов, ссылки на которые я привёл – я всего лишь хочу порекомендовать вам лучшие ресурсы, чтобы помочь вам достичь вашей цели.

Что нужно помнить:

1. Статью разрешается пролистывать

Руководство может помочь вам вне зависимости от вашего положения на дороге к профессиональной разработке. Прокрутите его к тому заголовку, который лучше всего описывает ваше сегодняшнее положение, и читайте оттуда. Если вы только начали этот путь, или пока размышляете об этом – последуйте совету Короля из «Алисы в стране чудес»:

Начните с начала, и продолжайте, пока не дойдёте до конца; и там уже остановитесь.
Читать дальше →
Всего голосов 49: ↑38 и ↓11+27
Комментарии129

FizzBuzz на TensorFlow

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

интервьюер: Приветствую, хотите кофе или что-нибудь еще? Нужен перерыв?


я: Нет, кажется я уже выпил достаточно кофе!


интервьюер: Отлично, отлично. Как вы относитесь к написанию кода на доске?


я: Я только так код и пишу!


интервьюер: ...


я: Это была шутка.


интервьюер: OK, итак, вам знакома задача "fizz buzz"?


я: ...


интервьюер: Это было да или нет?


я: Это что-то вроде "Не могу поверить, что вы меня об этом спрашиваете."


интервьюер: OK, значит, нужно напечатать числа от 1 до 100, только если число делится нацело на 3, напечатать слово "fizz", если на 5 — "buzz", а если делится на 15, то — "fizzbuzz".


я: Я знаю эту задачу.


интервьюер: Отлично, кандидаты, которые не могут пройти эту задачу, у нас не сильно уживаются.


я: ...


интервьюер: Вот маркер и губка.


я: [задумался на пару минут]


интервьюер: Вам нужна помощь, чтобы начать?


я: Нет, нет, все в порядке. Итак, начнем с пары стандартных импортов:


import numpy as np
import tensorflow as tf

интервьюер: Эм, вы же правильно поняли проблему в fizzbuzz, верно?


я: Так точно. Давайте обсудим модели. Я думаю тут подойдет простой многослойный перцептрон с одним скрытым слоем.

Читать дальше →
Всего голосов 132: ↑123 и ↓9+114
Комментарии140

Yum, шпаргалка

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


Шпаргалка по работе с пакетным менеджером Yum (Yellowdog Updater, Modified), который используется в популярных Linux дистрибутивах: RedHat, CentOS, Scientific Linux (и других). В целях экономии места вывод команд не представлен.

Оглавление


Команды
Опции Yum
Пакет Yum-Utils
Конфигурационные файлы
Плагины
Работа через прокси
Читать дальше →
Всего голосов 30: ↑25 и ↓5+20
Комментарии20

Что делает центральный процессор, когда ему нечего делать

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

Мужик приходит устраиваться работать на стройку. Его спрашивает мастер:
— Что делать умеешь?
— Могу копать…
— А что еще?
— Могу не копать…

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


Неактивным процессор может быть не только для экономии энергии, но и в результате возникновения особых ситуаций, в процессе выполнения протоколов инициализации или как итог намеренных действий системных программ. Почему это интересно? При написании программных моделей (в том числе виртуальных машин) компьютерных систем, необходимо корректно моделировать переходы между состояниями виртуальных процессоров. В работе системных программ регулярно возникают ситуации, когда по тем или иным причинам ЦПУ должен «притормозить». Умение корректно использовать и моделировать эти ситуации зависит от знания и понимания спецификаций.


В статье фокус делается на программной стороне вопроса состояний процессора. Я не буду концентрироваться на деталях реализации (напряжения, пины, частоты и т.д.), так как 1) они существенно различаются между поколениями и моделями процессоров даже одной архитектуры, тогда как программный интерфейс остаётся обратно совместимым; 2) они не видны напрямую программам и ОС. Это попытка просуммировать информацию, разбросанную по многим страницам справочника Intel IA-32 and Intel 64 Software Developer Manual.


Начнём с простой и всем знакомой ситуации — процессор включён, бодр и весел.

Читать дальше →
Всего голосов 67: ↑65 и ↓2+63
Комментарии24

Архитектура построения Single Page Application на основе AngularJS и Ruby on Rails

Время на прочтение8 мин
Количество просмотров23K
Заинтересовавшись методологией построения SPA-приложений на Ruby on Rails, я пришел к некоторым идеям, которые реализуются теперь в каждом моем приложении и впоследствии даже были выделены в отдельный гем Oxymoron. На данный момент на Oxymoron написано более 20 достаточно крупных коммерческих рельсовых приложений. Хочу вынести гем на общественный суд. Поэтому дальнейшее свое повествование буду вести уже на его основе.

Пример готового приложения.
Читать дальше →
Всего голосов 17: ↑15 и ↓2+13
Комментарии5

Ищем уязвимости с помощью google

Время на прочтение8 мин
Количество просмотров149K
Любой поиск уязвимостей на веб-ресурсах начинается с разведки и сбора информации.
Разведка может быть как активной — брутфорс файлов и директорий сайта, запуск сканеров уязвимостей, ручной просмотр сайта, так и пассивной — поиск информации в разных поисковых системах. Иногда бывает так, что уязвимость становится известна еще до открытия первой страницы сайта.

Читать дальше →
Всего голосов 41: ↑36 и ↓5+31
Комментарии14

Приводим данные и код в порядок: оптимизация и память, часть 1

Время на прочтение10 мин
Количество просмотров27K
В этой серии из двух статей говорится о том, как структура данных и памяти влияет на производительность. Предлагаются определенные действия для повышения производительности программного обеспечения. Даже простейшие действия, показанные в этих статьях, позволят добиться существенного прироста производительности. Многие статьи, посвященные оптимизации производительности программ, рассматривают распараллеливание нагрузки в следующих областях: распределенная память (например, MPI), общая память или набор команд SIMD (векторизация), но на самом деле распараллеливание необходимо применять во всех трех областях. Эти элементы очень важны, но память также важна, а про нее часто забывают. Изменения архитектуры программ и применение параллельной обработки влияют на память и на производительность.

Читать дальше →
Всего голосов 21: ↑19 и ↓2+17
Комментарии27

Анатомия драйвера

Время на прочтение5 мин
Количество просмотров26K
Опять вернёмся в традиционную область разработки операционных систем (и приложений для микроконтроллеров) — написание драйверов.

Я попробую выделить некоторые общие правила и каноны в этой области. Как всегда — на примере Фантома.

Драйвер — функциональная компонента ОС, ответственная за отношения с определённым подмножеством аппаратуры компьютера.

С лёгкой руки того же Юникса драйвера делятся на блочные и байт-ориентированные. В былые времена классическими примерами были драйвер диска (операции — записать и прочитать сектор диска) и драйвер дисплея (прочитать и записать символ).

В современной реальности, конечно, всё сложнее. Драйвер — типичный инстанс-объект класса, и классов этих до фига и больше. В принципе, интерфейс драйверов пытаются как-то ужать в прокрустово ложе модели read/write, но это самообман. У драйвера сетевой карты есть метод «прочитать MAC-адрес карты» (который, конечно, можно реализовать через properties), а у драйвера USB — целая пачка USB-специфичных операций. Ещё веселее у графических драйверов — какой-нибудь bitblt( startx, starty, destx, desty, xsize, ysize, operation ) — обычное дело.

Цикл жизни драйвера, в целом, может быть описан так:

  • Инициализация: драйвер получает ресурсы (но не доступ к своей аппаратуре)
  • Поиск аппаратуры: драйвер получает от ядра или находит сам свои аппаратные ресурсы
  • Активация — драйвер начинает работу
  • Появление/пропадание устройств, если это уместно. См. тот же USB.
  • Засыпание/просыпание аппаратуры, если это уместно. В контроллерах часто неиспользуемая аппаратура выключается для экономии.
  • Деактивация драйвера — обслуживание запросов прекращается
  • Выгрузка драйвера — освобождаются все ресурсы ядра, драйвер не существует.


(Вообще я написал в прошлом году черновик открытой спецификации интерфейса драйвера — см. репозиторий и документ.)

Мне известны три модели построения драйвера:

  • Поллинг
  • Прерывания
  • Нити (threads)

Читать дальше →
Всего голосов 27: ↑27 и ↓0+27
Комментарии13

Qt Quick Controls 2 — обещанного три года ждут

Время на прочтение3 мин
Количество просмотров22K
Именно столько прошло с момента выхода Qt Quick 2 и объявления о новой стратегии развития, направленной на поддержку мобильных платформ.

Технология взрослела, разработчики лечили детские болезни, но для полного счастья не хватало трех вещей:

  • Правильного масштабирования на High DPI экранах
  • Компонентов, специфичных для смартфонов
  • Гибкой стилизации имеющихся компонентов

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

С отсутствием компонентов решалось тоже просто, но трудоемко: велосипедами. Надо заметить, что в последнее время появилось несколько приличных пользовательских наборов, под Android, Material, iOS. Для меня до сих пор загадка, почему Digia при всей ориентированности на мобильники выпустили первую версию контролов под настольные платформы, где и виджеты себя чувствуют неплохо.

Полтора года назад появился стандартный стиль имитирующий Android 4.x — ситуацию это не спасло. Стилизация у Qt Quick Controls 1 недостаточно гибкая, в общем опять велосипеды, благо пишутся они довольно просто, и почти все нужное уже написано в предыдущем пункте.

В общем до 5.6* была печалька, а теперь и на нашей улице праздник

*В Qt 5.6 новые контролы представлены в качестве технологического превью под именем Qt Labs Controls, полноценно запустятся в ближайшем релизе 5.7, который обещают в июне.
А изменилось-то что?
Всего голосов 18: ↑18 и ↓0+18
Комментарии11

C/C++: как измерять процессорное время

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

image
КДПВ


От переводчика:
Большинство моих знакомых для измерения времени в разного вида бенчмарках в С++ используют chrono или, в особо запущенных случаях, ctime. Но для бенчмаркинга гораздо полезнее замерять процессорное время. Недавно я наткнулся на статью о кроссплатформенном замере процессорного времени и решил поделиться ею тут, возможно несколько увеличив качество местных бенчмарков.


P.S. Когда в статье написано "сегодня" или "сейчас", имеется ввиду "на момент выхода статьи", то есть, если я не ошибаюсь, март 2012. Ни я, ни автор не гарантируем, что это до сих пор так.
P.P.S. На момент публикации оригинал недоступен, но хранится в кэше Яндекса


Функции API, позволяющие получить процессорное время, использованное процессом, отличаются в разных операционных системах: Windows, Linux, OSX, BSD, Solaris, а также прочих UNIX-подобных ОС. Эта статья предоставляет кросс-платформенную функцию, получающую процессорное время процесса и объясняет, какие функции поддерживает каждая ОС.

Читать дальше →
Всего голосов 32: ↑29 и ↓3+26
Комментарии69

React.js — Руководство для Rails разработчиков

Время на прочтение20 мин
Количество просмотров43K
На начальном уровне такие переводы — мой вклад в развитие rails сообщества.
Дальше в тексте все, что выделено курсивом, мои замечания (таких будет не много)

image

Введение в React.js

React.js — это новый популярный парень из команды JavaScript фреймворков, он выделяется своей простотой. Когда другие фреймворки реализуют полный MVC (Model View Controller) подход, мы можем сказать React'у реализовать только View (Отображение) (факт — некоторые люди переписывают часть отображения (V) этих фреймворков c помощью React).

Приложения с реактом основаны на 2х основных принципах Компоненты и Состояния. Компоненты могут состоять из более мелких компонентов встроенных или пользовательских. Состояния, что ребята из Facebook называют односторонний реактивный поток данных, подразумевая что наш интерфейс(UI) будет реагировать на каждое изменение состояния.

Одна хорошая особенность React.js это то что он не требует каких-либо дополнительных зависимостей, что обеспечивает ему подключаемость с любой js библиотекой. Пользуясь этим, мы будем включать его в наш Rails стек для создания внешнего интерфейса или можно сказать для создания «Rails на стероидах».

Макет для отслеживания расходов приложения



Для этого гайда мы создадим маленькое приложение с нуля что бы отслеживать наши действия. Каждая запись(дальше, тоже самое что и Record) будет состоять из даты, названия и суммы. Запись будет рассматриваться как Кредит(Credit) если его сумма больше нуля, в противном случае она будет рассматриваться каr дебет. Вот макет проекта:

image

Суммарно приложение будет вести себя так:
  1. Когда пользователь создает новую запись через горизонтальную форму, она будет вставлена в таблицу записей
  2. Пользователь может редактировать любую существующую запись
  3. Кликнув на кнопку Delete он удалит ассоциацию из таблицы
  4. Добавление, редактирование или удаление существующей записи будет обновлять сумму в боксах в верху страницы


Инициализация React.js в Rails проект


Читать дальше →
Всего голосов 19: ↑13 и ↓6+7
Комментарии39

JetCat: микроQt для тех, кому попроще

Время на прочтение3 мин
Количество просмотров14K
Я люблю Qt. Честно-честно. Я начал изучать его на грузовом пароме из Травемюнде в Хельсинки в компании пьяных дальнобойщиков, их полупьяных подруг, автоперегонщиков и просто забулдыг, которым суточное путешествие по морю позволяет эффективно бороться с суровостью финских антиалкогольных правил. Каюты у меня не было, Интернета тоже, так что к концу поездки я уже довольно бодро тасовал QML-теги и даже необходимость использовать QString не вызывала былой икоты. Нет-нет, я в самом деле люблю Qt.

Но еще сильнее я люблю Turbo Vision. Для меня он — привет из молодости, когда мир был проще, когда люди не таскали туда-сюда могучие фреймворки, задачи на четыре строчки решались четырьмя строчками и никому не приходило в голову рисовать тривиальные картинки с помощью HTML, CSS и джаваскрипта. Когда кнопку можно было поставить в точку X и быть уверенным, что она останется там в любую погоду. Когда задачи не решались методами “скачать” и “установить”, а также “подобрать” и “сконфигурировать”. Когда запрещалось использовать код, у которого “неизвестно, что там внутри”, а любую проблему можно было отладить за конечное число шагов. Когда документация представляла собой книжку, а не распечатку с форума.

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

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

Читать дальше →
Всего голосов 49: ↑46 и ↓3+43
Комментарии83

Как написать фильтр Блума в C ++

Время на прочтение3 мин
Количество просмотров21K
Фильтр Блума представляет собой структуру данных, которая может эффективно определить является ли элемент возможным элементом набора или определенно не относится к нему. Эта статья продемонстрирует простую реализацию фильтра Блума в C++.

Читать полный перевод
Всего голосов 23: ↑22 и ↓1+21
Комментарии31

Настройка sendmail для отправки почты через gmail.com

Время на прочтение2 мин
Количество просмотров61K
Долго искал внятное объяснение как заставить локальный sendmail, установленный на компьютере во внутренней сети, отправлять почту во внешний мир. В качестве relay был выбран smtp.gmail.com.

Перекопал и испробовал кучу описаний в сети как это должно делаться. Результат оказался пшиком.

Предлагаю скомпилированный из разных источников и собственных ошибок результат действий который увенчался успехом. Возможно кому-нибудь сэкономит время.
Читать дальше →
Всего голосов 20: ↑19 и ↓1+18
Комментарии7

Dokkur – первый PaaS из России

Время на прочтение3 мин
Количество просмотров16K
Привет, Хабраюзеры!
Мы – небольшая команда разработчиков из четырёх человек, и хотим представить на ваш суд свою PaaS, аналог Heroku.

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

Попробовав Heroku в качестве решения, мы поняли, что такое качество и удобство. Единственное, что кусалось – цены. Поэтому около 4-х месяцев назад мы поставили цель сделать свою собственную платформу. И мы ее сделали. Знакомьтесь: Dokkur – первый полноценный PaaS из России!

image

Читать дальше →
Всего голосов 19: ↑17 и ↓2+15
Комментарии67

Некоторые особенности разработки под Ubuntu Touch

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


Пришла весна. Коты думаю о кошках, мужчины о женщинах, а программист — куда бы ещё портировать имеющийся код. Я ещё прошлой осенью стал обладателем Meizu MX4 Ubuntu Edition, и поэтому выбор был давно очевиден. А тут нашлось и время, и силы.
Читать дальше →
Всего голосов 26: ↑25 и ↓1+24
Комментарии25

Основы Elasticsearch

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

Elasticsearch — поисковый движок с json rest api, использующий Lucene и написанный на Java. Описание всех преимуществ этого движка доступно на официальном сайте. Далее по тексту будем называть Elasticsearch как ES.


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


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

Читать дальше →
Всего голосов 39: ↑38 и ↓1+37
Комментарии78

Новая ICQ для Windows, открытый код и кое-что еще

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


В ноябре 2015 года мы вспоминали, как менялся интерфейс Аськи. Сегодня мы выпустили новую версию для Windows, внешность которой была полностью переработана. ICQ обрела минималистичный интерфейс и стала очень похожа на свою мобильную инкарнацию. А кроме того — тадам! — мы открыли исходный код приложения, потому что использовали для создания новой версии кроссплатформенный инструментарий Qt.
Читать дальше →
Всего голосов 64: ↑43 и ↓21+22
Комментарии107

Джулиан Ассанж: Google не то, чем кажется

Время на прочтение4 мин
Количество просмотров43K
Перевод отрывка из книги Джулиана Ассанжа «When Google Met WikiLeaks»: государственные перевороты, слежка, сговоры с правительством и другие будни корпорации добра.


Председатель совета директоров Google Эрик Шмидт делится шуткой с Хиллари Клинтон в ходе «непринужденной беседы» – специальной встречи с сотрудниками компании в главном офисе в Маунтин-Вью, Калифорния, 21 июля 2014 года
Читать дальше →
Всего голосов 20: ↑18 и ↓2+16
Комментарии11

Руководство по HTML/CSS/JavaScript

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

Frontend Guidelines

Правила и руководства оформления, форматирования HTML, СSS и JavaScript кода. Его цель — повысить качество кода и облегчить совместную работу и поддержку инфраструктуры.

От переводчика

Приветствую всех снова, меня зовут Максим Иванов, и сегодня я подготовил перевод, который, возможно, окажется для вас полезным. Бенджамин Де Кук (Benjamin De Cock), разработчик из Бельгии, собрал некоторые указания по оформлению кода, которые позиционируют себя как лучшие практики по написанию HTML, CSS, JS. Конечно, существует множество рекомендаций, например, есть хороший гайдлайн от Google, наверное, есть еще что-то, однако, если следовать хотя бы некоторым из них, то можно надеяться, что ваш код станет лучше. В отдельных случаях следование этим гайдлайнам не полезно, а совсем наоборот. В общем и целом, все зависит от вашего опыта и виденья дела, если вы новичок, то скорее вам будет полезно оценить то, что пишут другие и в обществе считается верным, если вы гуру, то наверное вам и не нужны гайдлайны, которые написаны непонятно кем на ваш взгляд. Итак, приступим.
Читать дальше →
Всего голосов 38: ↑29 и ↓9+20
Комментарии38

Информация

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