Как стать автором
Обновить
104
0.1
Владимир Гарвардт @krig

Могу копать, могу не копать

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

Расширение возможностей массива в PHP

Время на прочтение5 мин
Количество просмотров17K
Уровень статьи: начальный/средний

Массив в PHP — один из самых мощных типов данных. Он может работать как линейный массив (список), как ассоциативный (словарь) и как смешанный. В качестве ключа массива может использоваться либо целое число, либо строка, причем строка, если она представляет собой целое число (например, «5»), будет конвертирована в целое. Остальные типы, за исключением массивов и объектов, так же конвертируются в целое или строку — подробнее можно прочитать в документации.

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

$foo = isset($array['foo']) ? $array['foo'] : null;
$bar = isset($array['bar']) ? $array['bar'] : null;


Один из способов сделать этот код короче и элегантней — использовать короткую запись тернарного оператора:

$foo = $array['foo'] ? : null;
$bar = $array['bar'] ? : null;


Но такой код выкинет PHP Notice в случе, когда ключ не определен, а я стараюсь писать максимально чистый код — на сервере разработки выставлено error_reporting = E_ALL. И именно в подобных случаях на помощь приходит ArrayObject — класс, к объектам которого можно обращаться используя синтаксис массивов и позволяющий изменять поведение используя механизм наследования.

Рассмотрим несколько примеров изменения поведения.

Читать дальше →
Всего голосов 34: ↑25 и ↓9+16
Комментарии30

Настройки в Android-приложениях

Время на прочтение6 мин
Количество просмотров72K
Интересуюсь темой разработки под Android. Пишу небольшое приложение. Столкнулся с тем, что не до конца понимаю как правильно делать настройки для приложения. Немного погуглил, нашел статью, которая помогла разобраться. Решил перевести статью для русскоязычного сообщества, включив некоторые комментарии к оригиналу.

Настройки являются важной частью приложений на Android (и не только на Android — здесь и далее примечание переводчика). Это очень важно — позволять пользователям изменять настройки приложения, в зависимости от их предпочтений.

Существует два пути работы с настройками в Android — можно создать файл preferences.xml в директории res/xml, либо работать с настройками из кода. В данной статье я покажу как работать с настройками, используя preferences.xml файл.

Читать дальше →
Всего голосов 43: ↑38 и ↓5+33
Комментарии61

Факты и заблуждения профессионального программирования

Время на прочтение3 мин
Количество просмотров2.7K
Роберт Гласс 'Факты и заблуждения профессионального программирования'

Хочу немного рассказать о книге, которую недавно прочитал. Книга эта — «Факты и заблуждения профессионального программирования» Роберта Гласса. Данная книга может быть интересна всем специалистам, принимающим участие почти во всех этапах и областях жизненного цикла ПО — сбор требований, проектирование, разработка, тестирование, сопровождение, управление (менеджмент).

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

Читать дальше →
Всего голосов 73: ↑56 и ↓17+39
Комментарии56

Создание CCK-мультиполей

Время на прочтение3 мин
Количество просмотров4.2K
Данный топик является своеобразным ответом на Нетривиальная задача для Node Reference поля Drupal и Модуль для кулинарного сайта. Но, в отличие от авторов тех двух топиков, я не собираюсь изобретать велосипед и писать свое решение, а просто покажу как эта задача будет решаться в недалеком будущем (да и сейчас вобщем-то уже можно), и что станет стандартом де-факто в Drupal. Почему я так уверенно завляю о стандарте? Все очень просто — речь пойдет о CCK (Content Construction Kit) 3.

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

FunGraph.ru — немного юмора, языком статистики

Время на прочтение2 мин
Количество просмотров1.1K
FunGraph.ru

Есть три разновидности лжи: ложь, гнусная ложь и статистика Народная (теперь уже) мудрость

Мы строили, строили, и, наконец, построили Мультик про Чебурашку

Доброго времени суток, уважаемые хабражители. Хочу рассказать вам о небольшом проекте, который создали мы с друзьями — FunGraph. Проект является развлекательным ресурсом, тематика которого — оформление шуток, анекдотов, историй, и прочих жизненных ситуаций в виде графиков. Вот один из примеров (близкий к тематике хабра =)):

Создай свой сайт, ведь нет ничего проще
Прикольные картинки и графики

Читать дальше →
Всего голосов 173: ↑113 и ↓60+53
Комментарии105

Skype 2.1.0.81 Beta for Linux

Время на прочтение1 мин
Количество просмотров1K
Обновилась бета Skype для Linux.

Главным нововведением свежей версии (по сравнению с 2.1.0.47 Beta for Linux) стала функция «Screen sharing», доступная пользователям Windows-версии Skype со времени релиза 4.0. Об остальных изменениях можно прочитать в списке изменений.

Потестировали новую функцию с коллегой — отлично работает. Можно поделиться с собеседником как всем экраном, так и его частью.
Всего голосов 56: ↑50 и ↓6+44
Комментарии49

OpenID с человеческим лицом в Drupal

Время на прочтение5 мин
Количество просмотров2.7K
Начиная с 6 версии Drupal, в комплекте с системой идет модуль OpenID, который обеспечивает авторизацию через OpenID протокол. Но у модуля есть довольно серьезные проблемы. В частности, сам модуль реализует антипаттерн, описаный Иваном Сагалаевым в своем блоге. Вторая проблема модуля, с точки зрения юзабилити — это непрозрачная авторизация по OpenID, а если быть точнее, то при первой попытке авторизации через некий OpenID аккаунт, система просит заполнить некоторое количество полей.

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

Попробуем улучшить юзабили OpenID авторизации
Всего голосов 35: ↑31 и ↓4+27
Комментарии43

Проблема с уведомлениями о календарных событиях в Win Mobile

Время на прочтение1 мин
Количество просмотров455
Очень много событий у меня завязано на уведомления в коммуникаторе на Windows Mobile 6.1. Очень удобно — будильник даже почти не использую, и о событиях всегда помню. Но тут случилась неприятность — несколько дней назад уведомления перестали срабатывать. Перезагрузка, она же Soft Reset, не помогла, а делать Hard Reset не очень хочется — календарь, смс, заметки и адресная книга не потеряются, ибо лежат в MyPhone, но переустанавливать весь софт и крутить заново настройки очень не хочется. Посему занялся гуглением.

Русскоязычная часть интернетов не особо порадовала решением проблемы, а вот в англоязычной части всемирной паутины описание схожей проблемы и решение нашлось довольно быстро, причем датировано оно 2004 годом, т.е. за 5 лет багу в ВиМо так и не пофиксили.

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

Ну и ссылка на оригинальный пост, который помог мне решить проблему.
Всего голосов 11: ↑9 и ↓2+7
Комментарии9

Пользователь с подчерком в имени

Время на прочтение1 мин
Количество просмотров498
Есть такой хабраюзер @_meowth_, но при попытке попасть в его профиль ФФ сообщает что Firefox can't find the server at _meowth_.habrahabr.ru. То же самое происходит и при попытке перейти в его топики из RSS-ленты. Проблема решается достаточно просто — достаточно немного поправить ссылку на meowth.habrahabr.ru, но при этом не видно его топиков (такое чувство что это другой пользователь). Но если поменять таким же образом ссылку на его топик, полученую в РСС, например _meowth_.habrahabr.ru/blog/57083 на meowth.habrahabr.ru/blog/57083, то мы попадаем именно в тот топик что пришел в РСС.

Идентификатор браузеров под которыми не работает:
  • Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4pre) Gecko/2008101311 Firefox/3.0.4pre (Swiftfox)
  • Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko/2009032711 Ubuntu/8.10 (intrepid) Firefox/3.0.8
  • Arora 0.6
  • Opera 9.64
  • Mozilla/5.0 (compatible; Konqueror/4.2; Linux) KHTML/4.2.2 (like Gecko)

Все это из под убунты 8.10
Всего голосов 8: ↑7 и ↓1+6
Комментарии5

Создание сайта из готовых компонентов на примере сайта заказа еды в офис

Время на прочтение14 мин
Количество просмотров8.5K
В окрестностях нашего офиса нет приличного общепита, поэтому обеды нам привозят на заказ из одного кафэ. Заказ осуществляется за день (на понедельник заказ делается с пятницы), по телефону, с перечислением всех блюд и их количества (в случае если заказ не изменился относительно вчерашнего достаточно просто сказать это). Как компания, занимающаяся разработкой ПО, преимущественно веб, мы до недавнего времени жили по принципу «Сапожник без сапог», и весь учет заказов велся ответсвенным за заказ еды человеком на листочке, в случае изменения заказа нужно было писать письмо этому ответственному человеку, а он уже пересчитывал общий заказ.

Выкроив немного свободного времени в перерыве между проектами реализовал (именно реализовал, а не написал — почему именно так, расскажу немного ниже) систему для заказа еды. За основу, как нетрудно догадаться исходя из тематики блога, была взята CMS Drupal, которая является моим основным инструментом уже около полутора лет.

Цели данного топика:
  • Показать новичкам на довольно простом примере, как создается сайт невысокой сложности на CMS Drupal
  • Кратко расказать про несколько основных модулей — как правило они применяются в 90% проектов на друпале
  • Показать как можно собрать сайт на друпале из готовых компонентов, не написав при этом ни одной строчки кода (на самом деле будет пара строк кода, но немного не в том виде, как он обычно пишется =))


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

Поехали
Всего голосов 100: ↑94 и ↓6+88
Комментарии117

Ошибка в парсере

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

Посмотрите на ряд цифр:
0 1 2 3 4 5 6 7 8 9

Код который их выводит выглядит следующим образом:
<font color="#008000">0</font> <font color="#008000">1</font> <font color="#008000">2</font>… <font color="#008000">9</font>

Т.е. тэг font, содержащий в себе цифру 0 съедается парсером (в DOM-дереве его нет). Если же дописать туда еще один символ, то все работает отлично — 00
Всего голосов 4: ↑4 и ↓0+4
Комментарии4

Тестирование веб-приложений при помощи mechanize

Время на прочтение4 мин
Количество просмотров11K
По следам хабратопика о Watir, автоматизированном иструменте тестирования для web приложений на языке Ruby, решил написать небольшую статью о подобном инструменте для языка Python. Речь пойдет о замечательной библиотеке mechanize. В отличие от Watir, mechanize не заточен под какую-либ о ОС, и является надстройкой над питоновскими библиотеками urllib и urllib2.

Сама библиотека является эмулятором браузера (без поддержки яваскрипта) и позволяет решать задачи любого класса (с огладкой на «отключенный» яваскрипт), в которых необходим применение браузера. В частности, я впервые вышел на эту библиотеку, когда нужно было скачать огромное количество научных статей с одного хранилища, требующего авторизации и хранящего документы PDF так, что без помощи вспомогательных инструментов скачивать приходилось исключительно по одному документу, чем я и занимался 2 часа, пока не вспомнил о PERL'овой библиотеке WWW::Mechanize (о возможностях которой читал некоторое время назад) и не набрал в гугле запрос WWW::Mechanize python, который и привел меня на сорсфорж.

Но довольно лирики.
Перейдем непосредственно к тестированию веб-приложения при помощи mechanize
Всего голосов 43: ↑41 и ↓2+39
Комментарии18

Качество работы онлайновых переводчиков

Время на прочтение1 мин
Количество просмотров545
Существует стереотип что у гугла все продукты являются лучше, чем аналогичные у конкурентов — Google (посковик) ищет лучше Yandex, Yahoo и MSN; GMail представляет почтовый сервис удобнее лучше чем mail.ru или hotmail и т.п. Видимо я стал одной из жертв этого стереотипа. При переводах обычно пользуюсь переводчиком от гугла, но он не знал одно слово, перевод которого был неизвестен и мне. Вспомнил про отечественный онлайновый переводчик translate.ru и перевел словосочетание им — он такое слово знает. Решил ради интереса попробовать перевести несколько предложений для сравнния в обоих.
Читать дальше →
Всего голосов 11: ↑6 и ↓5+1
Комментарии7

Облачные вычисления — это ловушка

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

Веб-приложения, такие как Google Mail, заставят людей покупать закрытые, проприетарные системы, которые со временем будут стоить все больше и больше, как заявляет борец за свободное ПО.

Концепция использования веб-программ, таких как Google Mail, является «хуже чем глупостью», как считает ведущий сторонник свободного ПО.

Облачные вычисления — когда мощности ИТ поставляются через интернет, а не черпаются из вашего настольного компьютера — получили популярность в последние годы. Крупные интернет и технологичные компании, включая Google, Microsoft и Amazon продвигают свои планы доставлять информацию и ПО через сеть.

Но Ричард Столлмэн, основатель Фонда Свободного ПО (Free Software Foundation) и создатель компьютерной ОС GNU, говорит, что облачные вычисления являются просто ловушкой, призванной привлекать больше людей покупать закрытые, проприетарные системы, которые со временем будут стоить все больше и больше.
Читать дальше →
Всего голосов 26: ↑22 и ↓4+18
Комментарии47

Ричард Столлмэн о 25ой годовщине GNU, Google Chrome, распространении несвободного ПО, предустановленных GNU/Linux на ПК, NDA, OLPC XO

Время на прочтение7 мин
Количество просмотров912
В: Мр. Столлмэн, проекту GNU 25 лет. Наши читатели в основном знают его историю. Вы писали: «Свободный мир — это новый континент в киберпространстве». Могли ли вы представить в 1983 году что этот континент настолько вырастет? Каковы важнейшие цели движения за Свободное ПО сегодня?

РС: В 1983 я не пытался представить что будет происходить послзавершения системы GNU. Я тщательно обдумывал основные препятствия в разработке системы, но я не пытался предвосхищать что будет происходить после, как например препядтствия, которые будут учинять нам, производящие проприетарное ПО, или что мы будем влиять на законы некоторых стран. Так же я никогда не представлял что кто-то другой добавит последнюю часть и большинство отдаст все лавры ему. Сегодня GNU/Linux абсолютно свободная операционная система, но существуют тысячи разных «дистрибутивов» GNU/Linux, и большинство из них не свободны: они включают или предлагают людям несвободные программы. В результате, большинство пользователей GNU/Linux не полностью живут в свободном мире. Большинство из них не пытаются получить полную свободу, и даже не знают что она существует — никто не рассказывал им об этом. По этой причине большинство разговоров о GNU/Linux не являются разговорами о свободе. Корпорации, вовлеченные в работу с GNU/Linux предпочитают говорить о практической выгоде, но не об этике. Многие из нх используют термин «open source» (термин является именем нарицательным в переводе не нуждается — прим. переводчика), который представляется путем избегания проблем свободы пользвателей. (См. http://www.gnu.org/philosophy/open-source-misses-the-point.html)

В: Некоторые поклонники GNU/Linux и свободного ПО считают что распространение нелегальных копий проприетарного ПО (которое широко распространено в нашей стране, Италии) (и в нашей, России — прим. переводчика) препятствует распространению свободного ПО. Поэтому, когда полиция наказывет пользователей нелицензионного ПО поклонники радуются. Они думают: «Аха, теперь пользователи крякнутой винды будут устанавливать бесплатное ПО». Правы ли эти поклонники?

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

Наследование шаблонов в Smarty — альтернативный подход

Время на прочтение6 мин
Количество просмотров1.6K
По следам хабратопика Наследование шаблонов в Smarty хочу рассказать как около полутора лет назад я решил подобную задачу. В оличие от marazmiki с Django я знаком не был (хотя сейчас занимаюсь изучением именно его). Но крайне поверхностно был знаком с механизмом Master Pages из ASP.NET. Механизм заключается в том, что у нас есть практически полноценная страница, у которой отсутствует только блок с основным контентом.

Немного прикинув придумалось решение через стандарные функции Smarty и механизм наследования в PHP.
Читать дальше →
Всего голосов 11: ↑6 и ↓5+1
Комментарии3

Шаблоны для рисования веб-интерфейсов в MS Visio

Время на прочтение1 мин
Количество просмотров8.5K
После прочтения хабратопика Хакаем бумажное проектирование интерфейсов вспомнил что на винте где-то должны валятся шаблоны для рисования подобных вещей в визио. В комплекте идет рамка браузера и основные компоненты веб-форм/страниц. Когда на бумаге все уже нарисовано и оговорено с разработчиками, позволяет достаточно просто оформить схематичный веб-интерфейс для документации, либо для согласования с заказчиком.
Читать дальше →
Всего голосов 20: ↑15 и ↓5+10
Комментарии6

uRSSus — для тех кто еще не нашел удобную RSS-читалку

Время на прочтение2 мин
Количество просмотров959
Уже около полугода полностью живу в Убунте. За это время перепробовал много всевозможного софта из разных предметных областей в поисках своего идеала. Блягодаря хабру узнал про очень удобную аську qutIM (хабратопик номер раз, хабратопик номер ++раз). Но вот с RSS-читалкой все как-то не складывалось. Перепробовал несколько из репозитория убунты, устанавливал парочку сторонних, но во всех что-то не страивало (под виндой жил с FeedReader и был вполне себе счастлив). Под Убунтой же до недавнего времени пользовался Akregator, но по некоторым показателям он меня не особо устраивал.

Около месяца назад узнал про проект uRSSus, попробовал, на нем и остался.

Проект поддерживает как многие фичи современных RSS-читалок, так и парочку уникальных (по крайней мере уникальных для меня):
Читать дальше →
Всего голосов 13: ↑8 и ↓5+3
Комментарии20

Написание учебного пособия по ООП — требуется помощь хабракоммунити

Время на прочтение3 мин
Количество просмотров1.1K
В настоящее время, помимо основной работы, учусь в аспирантуре и работаю на четверть ставки ассистентом (поступал из-за армии, но сейчас эта проблема решена и продолжаю обучение/работу уже по собственной инициативе) на кафедре ИВТ в Техническом Университете (вобщем в политехе). В прошлом году вел лабораторные занятия по курсу Технология Программирования. Курс, как и лабораторные работы, мягко говоря, совсем не по ТП, а скорее С/С++, что для 5 курсе (да-да, именно 5, в этом году вроде как уже будет у 4) как минимум выглядит глупо, ибо С начинают изучать на первом курсе, и активно на нем пишут на 2-3 курсах (С++ особо не рассматривается в других учебных курсах). Отсюда, появлось желание переработать курс ТП основательно. Лекционный курс будет перерабатывать мой непосредственный коллега по основной работе (он сейчас так же является старшим преподавателем на кафедре), методическое пособие для семинаров и курса лабораторных работ (а после и сами лаб.работы) будем разрабатывать вместе.

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

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

Посмотреть основные идеи и мысли
Всего голосов 12: ↑6 и ↓60
Комментарии8

Недоступный хабратопик в избранном

Время на прочтение1 мин
Количество просмотров561
Ни удалить его, ни просмотреть.
ИМХО бага.

Free Image Hosting at www.ImageShack.us

Хотелось бы иметь возможность удалять недоступные хабратопики из избранного.
Всего голосов 6: ↑5 и ↓1+4
Комментарии4
1

Информация

В рейтинге
3 094-й
Откуда
Berlin, Berlin, Германия
Зарегистрирован
Активность