Pull to refresh
1
0
Inessa Matuznaya @Incher

Backend Developer

Send message

1000+ часов видео по Java на русском

Reading time7 min
Views1.3M
Добрый день.
Меня зовут Головач Иван, я руковожу небольшой образовательной компанией и преподаю сам:
  1. Java Core
  2. Junior Java Developer: Servlet API, JDBC, Maven, JUnit, Mockito, Log4J, основы Spring/SpringMVC, основы JPA/Hibernate, шаблоны/архитектуры MVC/IoC/DAO.
  3. Multicore programming in Java.


Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).

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

(GolovachCourses.com)


Здесь собраны несколько вариантов записи моего курса Java Core.
Модуль #1 (Procedural Java):
Набор июль 2013: #1, #2, #3, #4
Набор апрель 2013: #1, #2, #3, #4
Набор февраль 2013: #1, #2, #3, #4
Набор январь 2013: #1, #2, #3, #4
Набор октябрь 2012: #1, #2, #3, #4.
Читать дальше →

Vim по полной: Введение

Reading time5 min
Views70K
Привет, хабраюзер!

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

В этой серии статей я решил поделиться собственными наработками и, возможно, показать, на что может быть способен этот редактор в руках программиста. Серия будет состоять из следующих частей:
  1. Введение (vim_lib)
  2. Менеджер плагинов без фатальных недостатков (vim_lib, vim_plugmanager)
  3. Уровень проекта и файловая система (vim_prj, nerdtree)
  4. Snippets и шаблоны файлов (UltiSnips, vim_template)
  5. Компиляция и выполнение чего угодно (vim-quickrun)
  6. Работа с Git (vim_git)
  7. Деплой (vim_deploy)
  8. Тестирование с помощью xUnit (vim_unittest)
  9. Библиотека, на которой все держится (vim_lib)
  10. Другие полезные плагины

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

Готов? Вперед под кат!

Не учите фреймворки, учите архитектуру

Reading time5 min
Views199K
Некоторое время назад у меня состоялся интересный разговор, коллега активно защищал Angular, говорил, что тот ускоряет веб-разработку. Я более десяти лет разрабатываю сложные web-сервисы, работал в Microsoft, в Spotware Systems на Кипре, сейчас создаю приложение для стартапа из Кремниевой долины, и в общем то слежу за трендами. Однако почувствовал себя динозавром, потому что не видел смысла использовать фронтэнд-фреймворки до того момента, а оказалось, что это уже мейнстрим. Шёл 2014-й год, я погрузился в мир Angular, Knockout и Backbone, что из этого вышло, почему я от них в итоге отказался и рекомендую коллегам сделать то же самое – под катом.
Читать дальше →

Подкаст «Пятиминутка PHP»

Reading time1 min
Views9.7K
Пятиминутка PHP — еженедельный подкаст о новостях из мира PHP, интересных постах в блогах и современных подходах к разработке.

Послушайте первые два выпуска и вы узнаете про:
  • SPL структуры данных (стек, очередь, массив) против классического array и что нам принесёт PHP 7
  • эффективное пересечение массивов, поиск элемента или проверку вхождения в массив
  • проблему с хешами паролей, даже если вы используете новые функции хеширования из PHP 5.5
  • Russia Laravel Meetup и DevConf 2015
  • сравнение производительности Golang, Scala, Elixir, Ruby, Python 3 и PHP в сферических попугаях в вакууме
  • оптимизацию использования памяти и как написать свой сборщик мусора на PHP
  • почему Doctrine ORM не подходит для PHP
  • рендеринг ReactJS шаблонов на сервере с помощью PHP
  • пример использования генераторов (yield)
  • прошлое, настоящее и будущее Code Coverage от автора PHPUnit
  • проблемы Zephir с PHP 7
  • хорошие статьи о PHP 7, которые уже есть на хабре
  • написание и тестирование API на PHP, Rails и Go от Phil Sturgeon
  • TDD — Train Driven Development

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

Memcached и PHP ликбез

Reading time6 min
Views227K
В интернете достаточно много информации на данную тему, но, несмотря на это, многие обходят её стороной. Цель данного поста, разъяснить на пальцах основы взаимодействия с Memcached.
Читать дальше

Документация Mojolicious: Потерянные Главы

Reading time10 min
Views7.1K
Это продолжение серии статей о веб-фреймворке для Perl — Mojolicious: первая часть.

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

Асинхронность: синхронизируем с помощью Mojo::IOLoop::Delay


Mojo::IOLoop::Delay предоставляет механизм, обеспечивающий для асинхронно выполняющихся callback-ов:

  • описание последовательно выполняющихся операций без «лапши» callback-ов
  • передачу результатов из callback-а(ов) текущего шага на следующий
  • общие данные для callback-ов, объединённых в одну задачу
  • синхронизацию групп callback-ов
  • перехват и обработку исключений в callback-ах

Используемые термины:

  • (асинхронная) операция — обычно это вызов асинхронной функции вроде  таймера или выкачивания url, которой необходимо передать callback
  • шаг — callback, который анализирует данные полученные с предыдущего  шага (если это не первый шаг), и запускает одну или несколько новых  операций, либо возвращает финальный результат (если это последний шаг)
  • задача — список шагов, которые должны выполняться последовательно  (т.е. следующий шаг вызывается только после того, как все операции  запущенные на предыдущем шаге завершаются)

Альтернатива Promises

Это альтернативный подход к проблеме, обычно решаемой с помощью Promise/Deferred или Future. Вот приблизительное сравнение со спецификацией Promises/A+
Читать дальше →

Документация Mojolicious: Потерянные Главы

Reading time16 min
Views16K
Update: статья обновлена для соответствия Mojolicious 6.0.

Mojolicious — восхитительный современный веб-фреймворк для Perl. Из недостатков я могу назвать только два: политика в отношении обратной совместимости и документация.

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

Содержание


  1. Недостатки
  2. Роутинг: внутреннее устройство
  3. Роутинг: настройка
  4. Параметры HTTP-запроса
  5. Парсинг
  6. Tips & Tricks
    1. Поддержка неблокирующих приложений в режиме CGI
    2. Как работает Mojo::UserAgent при тестировании своего приложения
    3. ojo и Mojolicious::Lite
    4. Переменные окружения


Другие статьи в этой серии



Недостатки


В официальном FAQ написано: "… we will always deprecate a feature before removing or changing it in incompatible ways between major releases … as long as you are not using anything marked experimental, untested or undocumented, you can always count on backwards compatibility …". Для начала, вторая фраза противоречит первой. Далее, вот цитата из Guides::Contributing «Features may only be changed in a major release or after being deprecated for at least 3 months.». Честно говоря, 3 месяца это и так смешной срок когда речь идёт об обратной совместимости, но похоже что даже этот срок соблюдается не всегда (поддержку «X-Forwarded-HTTPS» сделали deprecated два месяца назад, а удалили месяц назад — да, это был «major release» поэтому формально правила не нарушены, но общее отношение к обратной совместимости вполне показательно). Как много разработчиков обновляет фреймворк чаще чем раз в 3 месяца, да ещё и при этом тщательно вычитывает Changes или логи своего приложения на предмет deprecated-предупреждений? При этом, в течении последнего года было deprecated примерно 20 функций/фич. На практике, конечно, всё не так плохо, как это звучит — что-то ломается не так уж часто (лично меня за последний год коснулась только замена $app->secret() на $app->secrets()). Но факт остаётся фактом — обратную совместимость ломают, ломают часто, причём без по-настоящему веских причин: например, в случае с secret() абсолютно ничего не мешало добавить в код
sub secret { shift->secrets([shift]) }
либо просто добавить поддержку дополнительных параметров в secret() вместо добавления новой функции secrets() реализовав нужную фичу вообще не ломая совместимость.

Что касается документации, то многие считают её отличной, даже одним из серьёзных достоинств Mojolicious, но никак не недостатком. Проблема с документацией в том, что она вся сосредоточена на примерах. Это реально круто, когда ты начинаешь изучать фреймворк. Это экономит кучу времени, когда тебе нужно сделать фичу и ты быстро гуглишь пример аналогичной фичи в официальных guides. Но как только ты выходишь за рамки стандартных задач и возникает необходимость понять, как что-то устроено идеологически или архитектурно, какие конкретно параметры может принимать эта функция и что конкретно она может возвращать в разных ситуациях — выясняется, что для многих модулей Mojolicious такая документация отсутствует в принципе. И не потому, что эта информация относится к «недокументированным возможностям» — почти всё это мельком упоминается здесь и там в разных примерах, а значит считается «документированным». Нередко есть несколько способов получить доступ к определённым данным (параметры запроса, тело ответа, etc.) но не описано чем они друг от друга отличаются и в каких ситуациях правильнее пользоваться какими способами. И последнее — алфавитный порядок функций в доке, серьёзно?! Нет, я понимаю, все люди разные и кому-то наверняка это удобно, но многим всё-таки на порядок проще воспринимать документацию в которой функции сгруппированы по задачам. (Хотя в коде, особенно при чтении его через браузер, где не так удобно пользоваться поиском как в Vim, алфавитный порядок функций неожиданно оказался довольно удобным — кроме new/DESTROY/AUTOLOAD — их всё-таки лучше размещать в начале.) В результате, чтобы разобраться приходится вычитывать код (некоторые предпочитают вместо этого смотреть тесты!), что не так просто — во-первых он не является эталоном читабельности: автор любит использовать фишки перла, которые позволяют писать код компактно (и нередко такой код быстрее работает), но читабельность это ухудшает; во-вторых активное использование и наследования и обмена событиями между объектами усложняет понимание того, что и как происходит внутри 104 классов, из которых состоит Mojolicious-5.

С проблемой обратной совместимости мы мало что можем сделать (хотя, наверное, можно сделать плагин к Mojolicious, который будет её эмулировать по мере возможности). Зато вторую проблему решить не сложно — недостающую документацию можно написать самостоятельно. По мере изучения Mojolicious я планирую описывать некоторые вещи, которые, по-хорошему, должны быть в официальной документации, отсюда и название этой статьи.
Читать дальше →

How-to: Правила вёрстки email-писем

Reading time16 min
Views186K


Электронная почта — отличный инструмент коммуникации, который позволяет компаниям доставлять аудитории контент удобным для нее способом. При этом читать письма в формате plain text не всегда удобно, поэтому в современных новостных рассылках используются различные графические элементы.

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

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

Примечание переводчика: Представленный ниже материал содержит значительное количество технических терминов, при переводе которых могут возникнуть неточности. Если вы заметили опечатку, ошибку или неточность перевода — напишите нам, и мы оперативно всё исправим.
Читать дальше →

Знакомство с Yii 2 на основе создания простого блога

Reading time9 min
Views185K
Здравствуйте, уважаемые хабрапользователи!

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

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

Long Polling от А до Я своими руками

Reading time5 min
Views55K
Как реализовать long polling с помощью Nginx и Javascript в сети достаточно много материала. Но полного руководства я ещё не встречал. То возникают проблемы с компиляцией модуля под Nginx, то в браузере вертится иконка загрузки при long poll запросах. Под катом, полный материал как же все таки это сделать правильно.
Читать дальше →

Текстовый чат для сайта

Reading time3 min
Views25K
image

Хочу поделиться опытом создания текстового чата на основе nginx-push-stream-module модуля Nginx, PHP и Javascript. Этот модуль функционирует по принципу long polling и может быть использован как для обмена мгновенными сообщениями между пользователями, так и для системы push–уведомлений.
Читать дальше →

Нестандартная оптимизация проектов на PHP

Reading time5 min
Views29K
В данной публикации хочу рассказать о том, как нетрадиционными методами мы смогли снизить нагрузку на серверы и ускорить время обработки страницы в несколько раз.

image

Традиционные методы, думаю, всем известны:
  • Оптимизация SQL-запросов;
  • Поиск и исправление узких мест;
  • Переход на Memcache для часто используемых данных;
  • Установка APC, XCache и подобных;
  • Клиентская оптимизация: CSS спрайты и т.п.


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

Все уже украдено до нас

Reading time4 min
Views80K
image

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

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

Хорошо ушлым ребятам в начале девяностых, поднимали миллионные бизнесы буквально с полоборота. Хорошо тем, кто вовремя прочухал перспективность интернета и открыл сайты в очевидных пустующих нишах. Брину и Пейджу, ведь когда они запускали Гугл, еще не было Гугла.

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

Короче, слишком сложно нынче пробиться. Очень высокая конкуренция, куда ни плюнь.

У меня есть для вас обнадеживающая новость. В мире разработки ПО это абсолютно не так. Нерешенные задачи россыпями валяются на дороге, некому взять и сделать.
Читать дальше →

Дайджест хороших образовательных программ для IT-специалистов и сочувствующих: в Москве и онлайне

Reading time5 min
Views86K
image

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

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

Не забывай — количество мест на самых привлекательных курсах обычно ограничено и заканчивается стремительно! А некоторые так и просто стартуют совсем скоро — запрыгивай в уходящий поезд!
Читать дальше →

Пример разработки блога на Zend Framework 2. Часть 1. ZendSkeletonApplication

Reading time10 min
Views68K
В последние несколько лет моя работа связана с использованием CMS Drupal, но на досуге я изучал и just for fun запускал проекты на питоновских фреймворках Django, Flask и Twisted. Сейчас я решил освоить основы двух-трех популярных PHP-фреймфорков и первыми я решил изучить Zend Framework 2 и Yii.

В процессе ознакомления с Zend Framework 2 я изучил туториал с официального сайта (http://framework.zend.com/manual/2.2/en/user-guide/overview.html), просмотрел документацию фреймворка (http://framework.zend.com/manual/2.2/en/index.html), прочитал книгу Michael Romer “Web development with Zend Framework 2” и собрал собственное тестовое приложение.

Переварив всю эту информацию, я пришел к мысли, что официальный туториал к фреймворку суховат:
  • в нем не рассказывается о работе с пользователями, сессиями и правами доступа,
  • лишь вскользь рассматривается такая основополагающая часть фреймворка как ServiceManager,
  • в качестве интерфейса с базой данных безальтернативно используется паттерн Table Gateway (и соответствующая его реализация в фреймворке),
  • используется встроенный в фреймворк шаблонизатор, который после питоновского Jinja 2 кажется совершенно неудобным и примитивным,
  • и т.д.

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

В этой статье я хочу привести пример разработки простого блога, в ней будет несколько отличий от официального туториала. В первую очередь я постараюсь заострить внимание на тех вопросах, которые во время изучения показались мне недостаточно раскрытыми в официальном туториале. Кроме того я буду использовать некоторые технологии, альтернативные тем, что используются в Zend фреймворке по умолчанию:
  • в качестве шаблонизатора будет использоваться Twig,
  • для работы с БД — Doctrine ORM,
  • для авторизации/аутентификации и распределения прав доступа я буду использовать существующие модули ZfcUser и BjyAuthorize,
  • также я рассмотрю вопросы разработки собственных валидаторов форм, View плагинов и другие.

За деталями добро пожаловать под кат

Избавляемся от JavaScript в социальных кнопках (Facebook, VK, Twitter и др.)

Reading time5 min
Views79K
Как мы избавились от JavaScript-библиотек социальных сетей, ускорили скорость загрузки страниц и использовали RESTful API для “шаринга” и “лайков”.


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

Игра: Загрузка иностранного языка в мозг

Reading time9 min
Views139K
Бывает ли у вас такие ситуации, когда слово, идиома или грамматическая конструкция иностранного языка никак не могут удержаться в голове, несмотря на то, что вы встречали её уже много раз и даже специально учили? А сколько процентов иностранных слов вы помните спустя месяц после их изучения? А спустя полгода? Сложно ли вам мотивировать себя на занятия иностранным языком?



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

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

Паттерн HMVC в веб-разработке

Reading time5 min
Views41K
Изучая планы развития CMS Joomla, для написания одной из своих предыдущих статей (укр.), я наткнулся на аббревиатуру HMVC. Не сложно было понять, что это как-то связано со ставшим стандартом паттерном MVC. Найденная расшифровка: «HMVC — иерархические модель-вид-контроллер» — мало что объяснила. Дальнейшие поиски информации тоже дали не много, в основном теоретические рассуждения о паттерне и почти ничего о том, как же его использовать на практике. Однако немного поразмыслив, я понял, что уже использовал его в своем предыдущем проекте на Symfony 2. Более того, оказывается, что частично этот паттерн используют очень многие даже не догадываясь об этом.
Читать дальше →

Реализация MVC паттерна на примере создания сайта-визитки на PHP

Reading time16 min
Views733K
mvc

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

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

Information

Rating
Does not participate
Registered
Activity