Адиль Хаштамов

Привет! Меня зовут Адиль. Всю свою сознательную жизнь я занимаюсь разработкой программного обеспечения. Этот блог моя записная книжка, где я стараюсь почаще делать заметки на тему программирования, разработки и проектирования ПО. Сейчас особенно заинтересован в современных веб приложениях, машинном обучении и анализе данных.

Что нового появилось в Django Channels?

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

Generic Consumers

Generic Consumers чем то напоминают Class Based Views в Django. Их задача сократить количество кода при написании обработчиков каналов, а также улучшить их структуру и внешний вид.

Базовым классом является BaseConsumer.

читать ещё

Какие книги читать начинающему программисту?

У меня есть книга, которую я уже пытаюсь раза с третьего осилить, но всё никак не дойду до последней страницы. Называется она "Человеческий фактор. Успешные проекты и компании", в простонародье "Peopleware" и является хрестоматией по разработке программного обеспечения наряду с классическим трудом под названием "Мифический человеко-месяц" от Фредерика Брукса. Так вот, там есть интересное выражение, которое гласит следующее:

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

Мой опыт работы с программистами лишь доказывает слова ДеМарко и Листера. Современная разработка ПО сводится к постоянному "гуглению" и чтению ответов на StackOverflow. В этом нет ничего плохого, все мы ежедневно сталкиваемся с проблемами решения которых не знаем, и порой "прогуглить" ответ получается куда быстрее  нежели самостоятельно разбираться почему наш код не работает. Но серьёзная проблема кроется в ситуациях, когда у человека отсутствуют фундаментальные знания о предмете своей работы.

читать ещё

Шпаргалка по PostgreSQL

PostgreSQL это кроссплатформенная полнофункциональная объектно-реляционная база данных. Эта небольшая заметка написана с целью собрать в одном месте небольшой туториал по установке и настройке этой СУБД. Действие происходит в ОС Ubuntu 16.04.

Установка PostgreSQL

По умолчанию PostgreSQL входит в пакет Ubuntu. Систему можно установить следующей командой:

sudo apt-get install postgresql-9.4

Для установки самой последней версии СУБД, необходимо выполнить следующие шаги:

  1. Создаём файл /etc/apt/sources.list.d/pgdg.list
  2. Добавляем  в него следующее содержимое:
    deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
    
  3. Импортируем новый ключ для подписи, выполнив
    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
      sudo apt-key add -
    sudo apt-get update
    
  4. Устанавливаем последнюю версию:
    apt-get install postgresql-9.5

Настройка

После успешной установки самоё время заняться базовой настройкой СУБД PostgreSQL.

По умолчанию доступ к СУБД имеет пользователь postgres. Заходим под ним:

sudo -u postgres psql

Для того, чтобы создать новую базу данных выполняем следующую команду внутри psql:

CREATE DATABASE mydatabase;

Создаём отдельного пользователя с логином myuser и паролем password:

CREATE USER myuser WITH password 'password';

Чтобы дать полные привилегии над нашей новой базой данных mydatabase пользователю myuser выполняем:

GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;

Чтобы сделать нового пользователя администратором нашей СУБД, выполняем:

ALTER USER myuser WITH SUPERUSER;

Чтобы лишить его ранее предоставленных полномочий, выполним:

ALTER USER myuser WITH NOSUPERUSER;

Если пользователю нужно дать лишь права на создание новой БД (например, при запуске тестов в Django, фреймворк создаёт отдельную БД с префиксом test_):

ALTER USER myuser CREATEDB;

Для того, чтобы авторизоваться в PostgreSQL под новым пользователем, запускаем:

psql -h localhost mydatabase myuser

Для выхода из сеанса, необходимо выполнить команду \q

Фишки при работе с PostgreSQL

Чтобы не запоминать массу команд, существуют GUI утилиты для работы с PostgreSQL. Наиболее популярной считается pgadmin3.

sudo apt-get install pgadmin3

Для тех, кто всё же предпочитает оставаться в терминале, есть интересный скрипт, написанный на Python: pgcli. Его особенностью является автодополнение и подсветка синтаксиса SQL команд.

pip install pgcli
pgcli mydatabase

или

pgcli postgres://myuser:password@localhost:5432/mydatabase

Просто и удобно.

Снятие дампа БД PostgreSQL можно сделать вот так:

pg_dump -c -h localhost -U myuser mydatabase > ./mydump.sql

Импорт в PostgreSQL делается следующим образом:

psql -h localhost -U username dbname < dump.sql

PostgreSQL масштабная и сложная СУБД, и для её настройки потребуется немало времени, если вы столкнулись с ней в работе впервые. Эта заметка лишь начало интересного пути. Постараюсь делиться опытом и знаниями по мере возможности и сил :-)

читать ещё

Как обучать детей программированию

Программирование для детей

Те из вас, кто следит за моей страницей Чем я занят сейчас, наверняка заметили, что в последнее время я занимался обучением детей программированию. Удивительно как мысли материализуются. После посещения PyCon US 2016 в Портленде, у меня в голове крутилась мысль попробовать себя в роли наставника в мир компьютерного программирования для детей. И к счастью, такая возможность появилась очень быстро. Меня пригласили в качестве преподавателя в детский лагерь, в программе которого был урок программирования два раза в неделю для двух разных групп. Первая группа состояла из деток постарше (от 8 до 12 лет), во второй преимущественно были дети в возрасте от 6 до 8 лет.

Как научить ребенка программированию

Дело в том, что будучи в США, мне посчастливилось приобрести книгу под названием Teach Your Kids To Code с хорошей скидкой. В ней все примеры приводятся в игровой форме с использованием языка программирования Python. Возможно в будущем я посвящу ей отдельный пост, а сейчас вернёмся к теме моего опыта преподавания. Так вот, изначально мне казалось разумным строить образовательный процесс, черпая информацию из этой книги, но позже я понял как глубоко ошибался :-) Почему? К слову, книга предназначена для детей в возрасте от 9+.

Во-первых, в каждой отдельной группе было много детей, более 15 на каждом уроке. Это мешало эффективной подаче материала, а также ограничивало меня в индивидуальной помощи каждому (без этого, как выяснилось, совсем не обойтись).

Во-вторых, в младшей группе были детки, которые либо очень медленно читали, либо вовсе не умели читать. Это было серьёзным ограничением, поэтому нужно было как-то решать эту проблему.

В-третьих, навык сносно печатать на клавиатуре отсутствовал у всех. О каком наборе программного кода могла идти речь?

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

Визуальное программирование

Немного поразмыслив, я пришел к выводу, что Python однозначно отпадает :-) С ним обучение в таких условиях превратилось бы в кошмарный сон. Решение проблемы не заставило себя долго ждать, на помощь пришло визуальное программирование. Суть заключается в том, что программист не пишет код, он составляет программу путём манипулирования графическими элементами в подходящей для этого среде (IDE). Мне вспоминается мой первый опыт программирования в Borland Delphi и Borland C++ Builder, где можно было создать сложный графический интерфейс не написав ни единой строчки кода. Но специально для детей группой ученых в MIT был придуман инструмент под названием Scratch. Его задача - научить ребенка алгоритмическому мышлению в игровой форме. И стоит отметить, задачу он свою делает на отлично! Вокруг Скретч есть целое сообщество, состоящее из ученых, учителей, родителей и собственно учеников. Инструмент поставляется в двух видах:

  • Как отдельное приложение. Устанавливается на компьютер под управлением ОС Windows/MacOS/Linux (Scratch 2.0 Offline)
  • Веб-приложение, доступное прямо на официальном сайте

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

Scratch 2.0 Offline

Примечательно, что процесс программирования на Scratch увлекателен не только для ребенка. Я сам бывало подолгу "залипал", готовя новый материал для детей.

Scratch: уроки

Вернёмся к теме моего преподавания. Как же были построены занятия?

Уроки по Scratch

На официальном сайте Скретч есть хороший раздел о помощи. В нём можно найти пошаговое руководство пользователя на базе которого реально провести первый вводный урок. Умные ребята из Гарвардской Высшей школы образования написали книгу под названием Creative computing (Креативное программирование), она поможет выстроить полноценный учебный процесс, так как в ней собраны лучшие практики обучения детей программированию. В сети есть русский перевод.

В составлении материала для работы неплохо может помочь и любимый YouTube. Вот ссылка на один из самых качественных туториалов по Scratch, между прочим от автора книги Automate the Boring Stuff with Python.

Выводы

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

  • Желательно сократить целевую группу учеников. Лучше всего группа из 4-6 человек. Почему? Читайте ниже.
  • Продолжительность урока не должна превышать 1 часа (в идеале как в школе, 45 минут). Дольше этого времени удержать внимание ребенка будет очень сложно.
  • Ребенку постоянно должно быть интересно. Это одно из самых сложных условий. Если дети теряют интерес, они начинают заниматься посторонними делами: открывать другие приложения, ходить по классу, отвлекать детей, жаловаться на то, что голодны :-)
  • Все дети разные. Одни проявляют смекалку и усваивают материал очень быстро, другие подолгу могут "зависать" над простейшими задачами. Всегда имейте в запасе бонусы для смышлёных детей (дополнительные задания, хитрые условия и т.д.).
  • Хвалите детей за их работу, даже если она незначительна. Для ребенка это очень важно!
  • Поощряйте детей. Я советую в качестве поощрения использовать наклейки, маленькие игрушки или что-то в этом роде. Мотивировать едой, конфетами или печеньем НЕ нужно, никогда не знаешь на что может быть аллергия у ребенка.
  • Просите детей о помощи. Если в классе есть детки, опережающие нормальный процесс обучения, попросите их стать вашими помощниками. Пусть они вместе с вами начнут помогать отстающим. Поверьте, детям это очень нравится.

Минусы Scratch

Scratch не учит реальному программированию. Задача этого инструмента заключается в том, чтобы развить навыки алгоритмического мышления в подходящей для детей форме - играючи. К слову, не только детям этот навык пригодится в жизни :-) Если ваша цель это привить ребенку реальные навыки программирования, постарайтесь как можно раньше осуществить переход от визуального программирования в непосредственный процесс кодирования с использованием одного из реальных языков программирования. Например, Python является хорошим выбором. Несомненно с этим переходом может быть связано некоторое разочарование со стороны ребенка. Причина в том, что оба процесса значительно отличаются друг от друга. Книга Teach Your Kids To Code сглаживает переход путём ввода элементов игры в процесс кодирования.

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

Полезные ссылки

читать ещё

Выпуск № 2: рецензии на прочитанные книги

Голая статистика: самая интересная книга о самой скучной науке

Книга действительно интересная. Она не похожа на те "сухие" книги по статистике к которым мы привыкли со времён учебы в университете. Несмотря на то, что у меня есть неплохой багаж знаний в этой области, я нашел эту книгу полезной и увлекательной. Её нескучно читать. Отмечу правда то, что в ней речь идёт о совсем о базовых понятиях: медиана и среднее значение, закон больших чисел, тестирование гипотез и начальный ввод в курс теории вероятностей. Нужно отдать должное автору, с задачей заинтересовать читателя он справился на пять. Главным конкурентным преимуществом книги являются её интереснейшие истории, подкреплённые статистическим анализом. Благодаря им у читателя неплохо развивается интуиция по отношению к статистике. Отдельно стоит отметить подробный анализ задачи Монти Холла (кто смотрел фильм "Двадцать одно", тот знает о чём речь).

Two Scoops of Django 1.8

В экосистеме Python все знают что такое Django. Также любой веб-разработчик, который хоть раз сталкивался в работе с этим фреймворком, знает, что лучше официальной документации невозможно ничего найти. Это правда, доки Django это ярчайший пример того, как должна быть организована и написана документация к продукту. По этому поводу на прошедшем PyCon US 2016 был доклад, который можно посмотреть ниже:

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

  • Лучшие практики работы с Django Models
  • Django Forms
  • Профилирование и оптимизация узких мест
  • Вопросы безопасности  и развертывания Django проекта
  • Тестирование Django
  • Анализ сторонних приложений (django reusable apps)
  • Работы с шаблонизаторами (Django templates, Jinja2)
  • Реализация REST API (на примерах django-rest-framework)
  • Расширение стандартной User модели фреймворка

И многое многое другое. Книга получилась в виде справочника, поэтому может быть использована в качестве настольного руководства к действию. В связи с этим читать можно выборочно, а по ходу работы возвращаться к ней снова. Авторами книги выступили небезызвестные PyDanny (Daniel Greenfeld) и Audrey Roy Greenfeld, значимые люди в Python сообществе. Советую!

Новая большая книга CSS

Обновлённое издание книги CSS3: The Missing Manual от издательства "Питер", переведённое на русский язык. Первую версию я читал в далёком 2010 году, когда только-только собирался вникнуть в тему каскадных стилей, и, скажу честно, это лучший труд на тему CSS для новичков (а может даже и для бывалых). Рейтинг Amazon: 4.6, Goodreads: 4.05. В новом издании автор уделяет внимание CSS3, HTML5, теме адаптивного дизайна, а также более сложным инструментам вроде flex и Sass. Большая часть книги всё тот же старый материал: форматирование текста, изображений, работы с таблицами и формами, базовые понятия в CSS, "div"ная вёрстка и так далее. Главное преимущество этой книги в пошаговых практических примера. Как говорится, прочитал - забыл, сделал - запомнил. Но если у вас имеется старое издание книги, не торопитесь покупать новое, в нём вы найдёте не так много информации (для меня, например, наиболее полезной главой была лишь тема адаптивной вёрстки). Вердикт: ИМХО, эта книга должна быть у каждого уважающего себя веб-разработчика :)

Алгоритмы. Вводный курс

Эта тоненькая книга написана гуру компьютерных наук Томасом Корменом. Для тех, кто не в курсе, Кормен также является автором классического труда по алгоритмам под названием "Алгоритмы. Построение и анализ" в соавторстве ещё с 3-мя людьми среди которых есть Рональд Риверст (автор RSA алгоритма). Сей труд ни коей мере не претендует на справочник, это скорее закуска перед главным блюдом. Основная цель книги состоит в том, чтобы заинтересовать читателя темой алгоритмов, поверхностно познакомить с классическими алгоритмами сортировки, поиска и обхода графов. Для меня интересной главой оказалась тема криптографии.

читать ещё

Почему Python?

Python programming

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

Некоторые из вас знают, что совсем недавно я посетил крупнейшее событие в сообществе Python программистов - PyCon US 2016. Полностью все расходы были покрыты мною самостоятельно без привлечения спонсоров и работодателей. Пожалуй, чтобы посетить такое мероприятие, нужно иметь некоторую эмоциональную привязанность к предмету, и это правда.

Что такое Python?

Python это язык программирования общего назначения, нацеленный в первую очередь начитать ещё

Структура и Интерпретация Компьютерных Программ. Начало.

Структура и интерпретация компьютерных программ

Книга под названием "Структура и Интерпретация Компьютерных Программ" была выпущена в далёком 1979 году. Раньше по ней преподавали вводный курс в программирование среди студентов MIT. Сейчас книга находится в свободном доступе в Интернете, и любой желающий может скачать и изучать её в своё удовольствие. Помимо книги, в сети также есть цикл видео-лекций от авторов, они расположены на ресурсе MIT OpenCourseware, мне кажется они могут неплохо дополнять друг друга по ходу изучения материала.

Чем же примечательна эта книга? Да хотя бы отзывами на Amazon :) Среди рецензентов есть такие личности как Peter Norvig и Paul Graham. К слову, сейчас у книги рейтинг 3.8 из 5, отчего некоторые известные личности недоумевают. А если серьёзно, то это фундаментальный классический труд в области программирования (ничем не хуже небезызвестной книги The Art of Programming от Д. Кнута, которую никто не читал). Единственным непонятным моментом для меня является факт преподавания курса программирования для новичков по этой книге. Представляю как можно напугать новоиспечённых студентов её содержимым. Интересно, есть ли в сети статистика по которой можно узнать много ли людей, посещавших этот "адский" курс, предпочли в дальнейшем поменять свой major :) Если бы организаторы Code.org пропагандировали программирование по этой книге, получился бы знатный epic fail.

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

В общем, к чему я всё это пишу в блоге? А к тому, что собираюсь прочитать всю книгу и проработать как можно больше упражнений (в частности сложных).

План таков:

  • Прочитать книгу.
  • По ходу чтения также просматривать лекции, так как в книге порой не всегда можно понять материал с 1-го и даже с 10-го раза.
  • Выполнять упражнения в каждой секции. Читать конечно хорошо, но лучше всего материал усваивается только на практике.

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

p.s. В книге используется язык программирования Lisp, в частности его диалект Scheme. Для проработки материала собираюсь использовать Racket. Почитать и посмотреть лекции можно по этой ссылке.

Подписывайтесь на блог, будет интересно!

читать ещё

Поездка на PyCon US 2016 в Портленд

PyCon US 2016 @ Portland, OR

Совсем недавно закончилась самая масштабная конференция в мире Python - PyCon US 2016 в городе Портленд. В этом году мне посчастливилось быть среди её участников. В этой заметке расскажу о своих впечатлениях о поездке, о самой конференции и немного о докладах, прочитанных там.

Портленд небольшой городок на западе США. Он носит неофициальное название Rose City (Город Роз). И это не просто так, там действительно очень много цветов, деревьев да и зелени в целом; глаз радуется одним словом. Каждый год в городе проходит фестиваль роз.

читать ещё

Первый выпуск: рецензии на прочитанные книги

В последнее время я очень много читаю. С начала этого года я прочитал десяток книг, поэтому в этом блоге на регулярной основе (раз в 2-3 месяца) буду публиковать небольшие рецензии одним постом. Жанр книг небольшой, в основном я читаю профессиональную литературу (программирование, computer science и так далее) и люблю научно-популярную литературу (издательства МИФ, Альпина Паблишер, а также оригинальные издания).

Итак, поехали...

читать ещё

Windows 10 Ubuntu: запускаем Django приложение

На прошедшей конференции Build 2016 от Microsoft, стало известно, что грядущий релиз с обновлениями для Windows 10 принесёт нам массу новинок. Одной из killer фич будет присутствие нативной ОС Ubuntu внутри Windows 10. Уже сейчас участники программы Windows Insider могут получить ранний доступ к самому "горячему" функционалу.

Я в свою очередь подписался на ранние обновления и решил попробовать каково это пользоваться Ubuntu внутри Windows 10. 27 апреля 2016 году вышла новая сборка Windows Preview 14332. Именно данный релиз я поставил себе на компьютер. Как отмечает changelog от Microsoft, в новой версии была исправления проблема с подключением к сети Интернет, возникающая у многих пользователей, использующих Ubuntu под виндой.

В качестве теста я решил продемонстрировать запуск полноценного Django приложения внутри Ubuntu на Windows 10. Стоит отметить, что с виндой поставляется Ubuntu 14.04 LTS 64 бита.

Установка

Чтобы получить обновление с вочитать ещё