• Upgrade до Middle PHP-разработчика за 3 месяца
    0
    Поправка, только сейчас увидел, что статья 2015 года, docker тогда еще не так актуален был.
  • Upgrade до Middle PHP-разработчика за 3 месяца
    0
    Все нижесказанное чистое ИМХО, не является конечной инстанцией и руководством к действию.
    На хабре уже неоднократно появлялись статьи, что нужно знать для Junior, Middle и тому подобное. По-моему личному мнению, это зло. Человек изучит материалы, предоставленные вами, и будет ошибочно считать свой уровень = Middle. Вы уж извините, но ваша подборка материалов больше годится для Junior'ов. Но опять же, зачем спускаться до уровней? Middle должен обладать не набором каких-то конкретных технологий, а отличным пониманием, что, где, как и зачем. Middle уже по первому взгляду должен прикинуть примерное решение:

    • «Так, ага, здесь у нас отсылка письма с линком восстановления пароля, сделаем через очередь задач, чтобы фронт не тормозил» => «Можно взять beanstalkd, в прошлом он хорошо себя показал. Однако, я понимаю как можно самому реализовать простейшую очередь задач! К примеру, использовать Redis (=> Redis? Я знаю что redis это in-memory хранилище, с поддержкой перзистентности. Зачем? Например кэширующего слоя перед бд, возможно, выноса части бд в in-memory, для разгрузки медленных запросов. Для кэша есть еще memcached...). Redis single-threaded, поэтому я избегу race-condition при выборке новых задач. Нет Redis'a? Ok, могу сделать очередь поверх обычной таблицы! Использую LOCK FOR UPDATE, или просто обойдусь UPDATE. Я знаю что UPDATE блокирует строку!.. А может просто, потоко-небезопасный код обернуть в мьютекс — PHP Redlock?!»
    • «Так, с очередью ясно! Что по поводу отправки_писем? Заинжектю-ка я MailerInterface в логику отправки письма, вместо использования моего класса Mailer, я же знаю про DI, и завтра нам может понадобится другой сервис для отправки писем. Стоп. Мы же хотели в будущем сделать и восстановление паролей по sms? Назову-ка я лучше интерфейс NotificationInterface, сейчас реализую его для e-mail, а в будущем для sms»
    • «Нотификацию мы умеем отправлять. Что по поводу самого восстановления? Наверное, нам нужен какой-то секретный токен, который мы отправляем на NotificationInterface::send($notification, $user), а позже верифицируем, и удостоверяемся, что пользователь владеет e-mail/телефоном»
    • «С этим ясно, а как хранить токены для восстановления паролей будем? Создадим таблицу confirmation_tokens. Стоп. Готов поклясться, что Я уже делал что-то подобное когда-то на другом проекте, и понял, что секретные токены весьма многообразны в использовании, и подходят так же для: сброса пароля, ссылки — автологина, мерджа аккаунтов! Заведу ка я таблицу secret_tokens, будут методы acquire/verify. Ограничу токены по времени жизни — чтобы исключить перебор. Пока заведу только один тип токенов — TYPE_CONFIRM_EMAIL»
    • «С логикой вроде все ясно. Хм! Мы используем платный сервис для отсылки sms, будет нехорошо, если url /send_confirmation может дергатся неограниченное кол-во раз, с разными номерами телефонов. Так один пользователь может отправить и 1000 смс на разные номера! Можно отдавать куки, можно сверять IP. В принципе, я знаю как это сделать! Но постойте, у нас в Laravel есть замечательный throttle middleware! Он как раз призван ограничивать кол-во обращений к url'у, с привязкой к клиенту»
    • «Постойте, так у нас тут поле ввода Email проверяется AJAX'ом на существование. Это же уязвимость налицо! Можно построить список email всех пользователей сайта! Добавим ограничение и на урл /check_email
    • «Так, в форме надо не забыть еще и про CSRF. Да, я знаю что это! Same-origin policy не запрещает отправку кросс-доменных POST запросов, злоумышленник влегкую может использовать нашу сессию для сабмита POST'ов со своего сайта! Проверку CSRF можно реализовать поверх сессий, хранить токен, который сверять потом с прешедшим токеном в скрытом поле POST запроса. Но у нас в Frameworkе же есть готовое решение, {{ csrf_field() }}»



    Лечге просто преподносить пост, как скопление полезного материала к прочтению.
    • Книга по 1ой книге — «Колесниченко», морально устарела. Первую главу — «Выбираем FTP клиент и текстовый редактор». FTP клиент? 2017. Мало того, не рекоммендую книгу данного автора, основываясь на своем и чужом опыте. Как и вообще многие русскоязычные книги. Официальная документация PHP — отличная кладезь знаний.
    • Vagrant — Docker
    • Выучить на память TOP100-300 функций PHP (1 неделя) — бывали такие вопросы на собеседованиях. Не ответил. Не жалею что не устроился на вакансии. Есть IDE, к чему знать названия? Главное знать что они есть.
    • Twitter Bootstrap, Twig — это совсем лишнее. Что там изучать? 5 — 15 минут чтения документации. Можно вообще не писать об этом.
    • Совершенный код — бесспорный лидер в подобных топиках. К прочтению обязателен. Однако, дает ли одно прочтение книги способность писать идеальный код? Однозначно нет. Нельзя даже сказать, что навык писать Идеальный код когда-то приходит. Это тот идеал, к которой нужно стремиться, но не делать первопричиной и самоцелью, в ущерб бизнесу. Качество кода несомненно всегда должно расти, лучший способ для этого — практика.


    Гораздо более хорошо знать более базовые вещи (как бы банально и знакомо это не звучало), например:
    — Английский язык
    — Агоритмы/структуры данных
    — Устройство Linux-подобных ОС
    — Протокол HTTP
    — Модель OSI
    — И т.д.
  • Релиз CodeIgniter 3.0.0
    0
    Не заэкранировал &quоt, вот правильный код:
    $client = Model_Client::find(1);
    echo $client->message->text; // '{"text":"hello"}'
    echo View::forge('view', $client); // empty view
    $client = Model_Client::find(1, array('from_cache' => false));
    echo $client->message->text; // '{&quоttext":&quоthello&quоt}'
  • Релиз CodeIgniter 3.0.0
    0
    Откуда такие положительные эмоции от фреймворка? После небольшого знакомства остались только негативные эмоции. Из того что помню:

    Auth::get_user_id(), вполне адекватно названный метод, только возвращает он не user_id как ожидается, а внимание(!), array([0]=>driver_id, [1]=>user_id). Возвращается массив вместо ожидаемого скаляра, ладно, но они что не читали дядюшку Макконнелла, который писал что магические константы — это зло (Хотя бы добавили именованные константы array([Auth::DRIVER_ID]=>driver_id)? Приходится писать Auth::get_user_id()[1]. По всему фреймворку подобных мест уйма.
    — Многие «особенности» работы таких компонетов как View, Model, Caching могут создавать дикие лулзы:

    $client = Model_Client::find(1);
    echo $client->message->text; // '{"text":"hello"}'
    echo View::forge('view', $client); // empty view
    $client = Model_Client::find(1, array('from_cache' => false));
    echo $client->message->text; // '{"text":"hello"}'

    Что здесь произошло?
    1 Мы достали клиента, передали его в пустую вьюху
    2 Повторно считываем клиента, принудительно указывая не использовать данные из кэша (для справки, между пунктом 1 и 2, никаких модификаций $client и связанных объектов не происходило)
    3 Выводим $client->message->text, и видим что произошла модификация содержимого, при том, что никаких изменений мы не вносили.

    Дело в том, что вьюха для всех полей объекта делает safeoutput in-place, то есть меняет на ходу нашу модель(!). Как можно ожидать от вьхи такое поведение? Сохранения после safeoutput'a не происходит, казалось бы при повторном запросе из бд (минуя кэш), мы получаем неизмененный объект, однако, флаг 'from_cache' => false, распространяется только на сам объект, поведения чтения подчиненных объектов изменить нельзя (будут браться из кэша, получим поломанный вьюхой json).

    В официальной IRC'e по подву in-pace safeoutput'a идут горячие споры между разработчиками, но воз и ныне там.
  • ZTE Blade: как мы прошли путь до вменяемого Android 4.1.2
    0
    Лончер (стандартный либо сторонний) хоть немного тормозит при скроллинге меню/перелистывании домашних экранов? Просто уже пару лет использую CM7 + launcher pro, в работе интерфейса абсолютно никаких подтормаживаний, перед переходом на CM10 хотелось бы узнать как с этим тут обстоят дела.
  • В Оренбургской области заблокирована Ubuntu
    0
    P.S. Похоже проблема локальна — Бугурусланский район. По отзывам пострадавшей — уже все нормализовалось.
  • В Оренбургской области заблокирована Ubuntu
    +1
    Я с Оренбурга, провайдер — dom.ru, все работает. Спросил у знакомых — с уфанетом и ростелекомом проблем тоже нету. Эти три провайдера, на глаз, покрывают около 80% оренбурга.
    Похоже это дело рук какого-нибудь мелкого районного провайдера.
  • ASUS заявил о прекращении выпуска Eee-PC нетбуков
    +2
    Очень жаль. Являюсь владельцем EeePC 1001PXD, никаких жалоб нету — и винда нормально работает, и линукс.
    Планшет, пусть даже дополненный клавиатурой, не сможет полноценно заменить нетбук — ни тебе нормальных IDE, ни больших объемов памяти (~300гб), ни соревнований с одногрупниками в CS 1.6 на тачах…
  • Эльфы, живущие в мобильном телефоне
    +1
    Никаких. Речь идет про обычные звонилки.
  • Эльфы, живущие в мобильном телефоне
    0
    Правда с такими большими возможностями приходила и большая ответственность. К примеру кривой эльф положить в папку Daemons (хотя со временем появилось что-то вроде сэйф мода — при включении надо было нажимать на какую-то кнопку, и загрузка демонов не происходила). Было много шансов запороть телефон (помнится кто-то вместо прошивки в формате bin залил случайно сэйв от игры NFS — хорошо это не закончилось).
    Даже новенькие сименсы можно было покалечить просто например установив скин (скины на сименсах — просто зазипованные файлы с определенными именами, так вот, если видео фрагмент переименовать в background.jpg, запаковать и установить — кирпич гарантирован).
  • Эльфы, живущие в мобильном телефоне
    0
    Эх ностальгия… К сожалению в разработке лично участие не принимал (не было пк в то время), но постоянно репортил баги/подавал идеи для новых эльфов.
    Не знаю как SE и motorolla, но сименсы частенько выключались сами по себе (В народе это явление называлось «пикофф», потому как при внезапном выключении издавался характерный звук), особого дискомфорта не доставляло, но все же. Происходило это в основном из-за критических ошибок, из-за криво написанных эльфов и т.п.
    Что говорить, эльфы могли сделать из обычной звонилки почти полноценный смартфон. Особую радость приносили эльфы NatICQ (аська, работала все время пока был включен телефон), XTask (менеджер задач), BalletMini (опера мини), Dendy Emulator, MegaDial (удобный номеронабиратель).

    Процитирую свою комментарий к похожей статье:
    Эльфы — тоже интересная штука (были на 65, 75 сериях). Диспетчер задач, ballet mini, icq, jabber, dendy/sega/doom/gameboy emulator, mp3 player (для телефонов с wav only), это далеко не полный список вкусностей, доступных для мобильника по цене около 3к (конкретно у меня был siemens c72 (аналог c65). Ну и пара скринов с моего телефона (сейчас они воспринимаются с улыбкой, раньше было круто):


    Вот такой получался бюджетник (siemens всегда отличались низкой ценой).
    Прошло пол года после покупки девайса — сименсы были уже у всего двора :-)
  • Nook Simple Touch with Glow Light: Unboxing и краткий обзор
    0
    К слову это не первая фича которую скрывает amazon в своих читалках. (тот же микрофон в kindle keyboard нигде не упоминается на amazon'e)
  • Nook Simple Touch with Glow Light: Unboxing и краткий обзор
    +1
    Что касается киндла:


    Geolocation: Yes, you heard that right; Kindle does have geolocation facilities built in. There's no GPS, but it uses its wireless hardware to determine location, a la iPhone. To use the feature, just open the browser by going to Menu > Experimental and clicking on launch browser. Then, Press Alt-1to show your current location on Google Maps. Note that on newer models, Q key represents 1, W represents 2 and so on. The map can be zoomed in and out just like on the PC using Kindle's 5-way navigation button. Pressing Alt+2 together finds the nearest gas stations, and pressing Alt+3 looks for the nearby restaurants. Sounds cool, but why didn't Amazon tell us about it?
  • Nook Simple Touch with Glow Light: Unboxing и краткий обзор
    0
    Хорошо, но о геолокации придется забыть — ни в одной известной мне читалке нету gps-модуля. Просто листать листать карты можно, если вас устроит скорость работы. Способов много — предложенная вами html страничка, если дело идет о киндле — используя фреймворк Qt, можно написать неплохой вьювер самому. 2GIS написан на Qt, можно попробовать портировать (не нужно будет нарезать тайтлы, а просто скачать готовую мапу. Правда векторная карта будет дольше отрисовываться).
  • Nook Simple Touch with Glow Light: Unboxing и краткий обзор
    –2
    Под такими нагрузками батарея будет быстрее садиться.
    Плюс к тому, работать будет всех оочень медленно. Для начала попробуйте встроенным браузером открыть сайт, перенасыщенный картинками и скриптами — удовольствия получите мало. В общем можно забыть про плавный скроллинг/зумминг (да что там, загрузку тайтла придется ждать секунд 5). Все это справедливо для Kindle 3 keyboard, для других читалок думаю не сильно будет отличаться.
  • Nook Simple Touch with Glow Light: Unboxing и краткий обзор
    0
    Вопрос снимается — на форуме нашел множество программ для разных форматов.
  • Nook Simple Touch with Glow Light: Unboxing и краткий обзор
    0
    Что можете сказать насчет чтения fb2, djvu на нуках?
    На клавиатурном киндле пару софтин решают проблему недостатки форматов. Многую техническую лит-ру можно читать без проблем.
  • Nook Simple Touch with Glow Light: Unboxing и краткий обзор
    0
    Кхм, к чему gps на читалке?
  • Передача файлов с Siemens-телефона на Linux — SieFS
    +1



  • Coursera — это маленькая революция: +12 университетов, >100 онлайн курсов
    +1
    Уже давно жду курс подобный CS 323, еще Джоэл Спольский говорил о нем: «Данные, на которых я основываюсь, поступили от профессора Стенли Эйзенштадта (Stanley Eisenstat) в Yale. Он ежегодно читает интенсивный курс по программированию, называемый CS 323, где большая часть практической работы состоит примерно из десятка программистских задач. Задачи достаточно сложны для обычного курса: разработать оболочку для Unix (проще говоря, «command-line shell» — прим. пер.), программу ZLW-сжатия файлов (позже Спольский пояснил, почему он пишет «ZLW» вместо общепринятого «LZW» — прим. пер.) и т.п.»

    Связывался с профессором с просьбой расшарить лекции и лабораторные, на что получил письмо с вежливым отказом.
  • Передача файлов с Siemens-телефона на Linux — SieFS
    0
    Упс, ошибся. Видимо слишком быстро глазами бегал, и увидел слово которое более близко мне)
  • Передача файлов с Siemens-телефона на Linux — SieFS
    +3
    Mophun к слову был не только на моторолках. Еще и на старых моделях SE (SE t290, t230, t610 и тп). Было несколько приложений от русских разработчиков, такие как MPC (micro post client), painter (частично участвовал в разработке), scheduler и еще icq. Не знаю как на моторолках, но на SE все приложения должны пройти процедуру официальной сертификации по IMEI (естественно умельцы сделали тулзы для этого).

    Эльфы — тоже интересная штука (были на 65, 75 сериях). Диспетчер задач, ballet mini, icq, jabber, dendy/sega/doom/gameboy emulator, mp3 player (для телефонов с wav only), это далеко не полный список вкусностей, доступных для мобильника по цене около 3к (конкретно у меня был siemens c72 (аналог c65). Фактически телефон превращался в смартфон. Ну и пара скринов с моего телефона (сейчас они воспринимаются с улыбкой, раньше было круто):
    image
    image
    imageimageimage
  • Экспорт избранного Хабра в FB2
    0
    Убрал статью из избранного, пока парсится нормально. Видимо проблемы только с dropbox
  • Экспорт избранного Хабра в FB2
    0
    Падает при попытки загрузки картинок
    traceback
    Downloading images for article #131595…
    Downloading images for article #124704…
    dl.dropbox.com/u/19527104/images/game/habr_1.png...
    Traceback (most recent call last):
    File «C:\fav\habrafav.py», line 60, in main(username, output_filename)
    File «C:\fav\habrafav.py», line 51, in main
    result = render(articles, nickname=username)
    File «C:\fav\rendering.py», line 23, in render
    binary = make_binary(articles) # this modifies articles so it should be befo
    re make_body
    File «C:\fav\rendering.py», line 66, in make_binary
    images = process_images(article['content'], images)
    File «C:\fav\images.py», line 56, in process_images
    binary = download_data(src)
    File «C:\fav\common.py», line 27, in download_data
    response = urllib2.urlopen(url)
    File «C:\Python27\lib\urllib2.py», line 126, in urlopen
    return _opener.open(url, data, timeout)
    File «C:\Python27\lib\urllib2.py», line 400, in open
    response = self._open(req, data)
    File «C:\Python27\lib\urllib2.py», line 418, in _open
    '_open', req)
    File «C:\Python27\lib\urllib2.py», line 378, in _call_chain
    result = func(*args)
    File «C:\Python27\lib\urllib2.py», line 1207, in http_open
    return self.do_open(httplib.HTTPConnection, req)
    File «C:\Python27\lib\urllib2.py», line 1180, in do_open
    r = h.getresponse(buffering=True)
    File «C:\Python27\lib\httplib.py», line 1030, in getresponse
    response.begin()
    File «C:\Python27\lib\httplib.py», line 407, in begin
    version, status, reason = self._read_status()
    File «C:\Python27\lib\httplib.py», line 365, in _read_status
    line = self.fp.readline()
    File «C:\Python27\lib\socket.py», line 447, in readline
    data = self._sock.recv(self._rbufsize)
    socket.error: [Errno 10054]
  • Используем Chrome без мыши
    +5
    Vimium — еще один плагин под Chrome с подобным функционалом.
  • Рейтинг фантастических романов, или Я сделаю свой «IMDB для книг», с преферансом и библиотекаршами
    0
    Рейтинг для других жанров планируется?
  • Orange San Francisco II уже скоро будет доступен в Великобритании
    +2
    Вижу смысл его брать только если цена на него меньше будет чем на первый.
    Камера для меня роли не играет особой. Что касается процессора — непонятно зачем оставили опять архитектуру ARMv6. На первом сф все что надо работает без тормозов (оболочки, видео плееры), игры под ARMv6 многи тоже идут без проблем. Так спрашивается, зачем оставлять старую архитектуру и увеличивать частоту, если все что идет под ARMv6 и так работает неплохо? Смысл бы был в 800Мгц если бы была архитектура ARMv7…
  • Orange San Francisco II уже скоро будет доступен в Великобритании
    0
    Из того что известно:
    Частота процессора: была 600Мгц стала 800Мгц
    Камера: была 3.2 стала 5
  • Обзор нового Kindle от Amazon
    +5
    Kindle Keyboard как по мне покрасивее будет. Использую его вкупе с FBReader, Cool Reader и Duokan (читаю в основном fb2, djvu, pdf), вполне доволен качеством и скоростью. Возможно новый киндл чуть быстрее, но для меня это роли не играет — я даже взгляд не успеваю перевести на верхнюю строку, как страница уже перелистана.
    Клавиатура тоже весьма полезна — duokan имеет широкую поддержку хоткеев, можно с удобством перемещаться и выполнять многие действия не используя джойстик.
  • Релиз Ubuntu 11.10 (Oneiric Ocelot)
    +1
    — Новый переключатель окно конечно красив, но в нем присутствует лишний пункт — \«Show Desktop\». Постоянно натыкаешься на него случайно при переключении окон. К чему эта пункт там? Когда для того чтобы попасть на рабочий стол Можно нажать win+d.
    — Для каждого воркспейса свой набор открытых окон. Так зачем же показывать список окон со всех воркспейсов в переключателе alt+tab?
    — Shift+tab не работает в том же alt+tab переключателе. Да, есть управление стрелочками, но ведь есть устоявшиеся правила, tab — фокус на следующий элемент, shift+tab — на предыдущий.
    — Настройки урезали во многих местах. Не подцепляются старые настройки, как-то поведение при закрытии крышки, настройки энергосбережения.
    — Регулярно проявляются баги с раскладкой — значок английской раскладки, а печатаются русские буквы.
    — Nautilus неадекватно себя ведет при поиске файлов/папок по названию. (Не ctrl+f, а быстрый набор).
    — Немало еще недоработок…
  • С Днем программиста!
    +23
    image
  • С Днем программиста!
    +7
    С праздником нас всех! Ждем поздравлений на всех возможных языках программирования…
  • «.тостер» объявляет о готовности
    0
    Она же платная, совсем забыл
  • «.тостер» объявляет о готовности
    +7
    Live-трансляция будет с конференции?
  • Читаете ли вы книги, не касающиеся программирования?
    0
    Слабость сюжета? Это вряд ли. По-моему закручено довольно неплохо. А в основном так и есть — его книги в основном и предназначены для подростающего поколении, дабы приобщить их к науке.
  • Читаете ли вы книги, не касающиеся программирования?
    +2
    До сих пор перечитываю 8-мь томиков Жюля Верна. Ничего лучшего к сожалению не читал из научной фантастики.
  • Три модели нетбуков от Asus с предустановленной Ubuntu
    0
    Являюсь пользователем 1001PXD, в unity местами есть подтормаживания. Но в общем работает шустрее чем windows 7 (тут даже перетаскивание окна вызывает появление артефактов). Но дело не в этом — Unity еще просто не допилили до должного уровня.
  • Конференция разработчиков OrenConf
    0
    Интересные темы, приду обязательно.
  • Bins — небольшая утилита для улучшения таскбара Windows 7
    +1
  • Bins — небольшая утилита для улучшения таскбара Windows 7
    0
    Раз зашел разговор об улучшениях windows 7…
    VirtuaWin — The Virtual Desktop Manager
    VirtuaWin is a virtual desktop manager for the Windows operating system (Win9x/ME/NT/Win2K/XP/Win2003/Vista/Win7). A virtual desktop manager lets you organize applications over several virtual desktops (also called 'workspaces'). Virtual desktops are very common in Unix/Linux, and once you get accustomed to using them, they become an essential part of a productive workflow.
    VirtuaWin is designed to be simple and elegant to use yet still be highly configurable and extensible.