Pull to refresh
104
0.1
Владимир Гарвардт @krig

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

Send message

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

Reading time5 min
Views17K
Уровень статьи: начальный/средний

Массив в 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 — класс, к объектам которого можно обращаться используя синтаксис массивов и позволяющий изменять поведение используя механизм наследования.

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

Читать дальше →
Total votes 34: ↑25 and ↓9+16
Comments30

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

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

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

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

Читать дальше →
Total votes 43: ↑38 and ↓5+33
Comments61

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

Reading time3 min
Views2.7K
Роберт Гласс 'Факты и заблуждения профессионального программирования'

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

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

Читать дальше →
Total votes 73: ↑56 and ↓17+39
Comments56

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

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

Читать дальше →
Total votes 41: ↑32 and ↓9+23
Comments26

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

Reading time2 min
Views1.1K
FunGraph.ru

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

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

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

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

Читать дальше →
Total votes 173: ↑113 and ↓60+53
Comments105

Skype 2.1.0.81 Beta for Linux

Reading time1 min
Views1K
Обновилась бета Skype для Linux.

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

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

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

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

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

Попробуем улучшить юзабили OpenID авторизации
Total votes 35: ↑31 and ↓4+27
Comments43

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

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

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

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

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

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

Reading time1 min
Views498
Есть такой хабраюзер @_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
Total votes 8: ↑7 and ↓1+6
Comments5

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

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

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

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


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

Поехали
Total votes 100: ↑94 and ↓6+88
Comments117

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

Reading time1 min
Views590
Воспользовавшись подсветкой кода для постинга статьи на хабр обнаружил небольшую, но неприятную багу в работе хтмл-парсера.

Посмотрите на ряд цифр:
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
Total votes 4: ↑4 and ↓0+4
Comments4

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

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

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

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

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

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

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

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

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

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

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

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

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

Reading time7 min
Views912
В: Мр. Столлмэн, проекту 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 и свободного ПО считают что распространение нелегальных копий проприетарного ПО (которое широко распространено в нашей стране, Италии) (и в нашей, России — прим. переводчика) препятствует распространению свободного ПО. Поэтому, когда полиция наказывет пользователей нелицензионного ПО поклонники радуются. Они думают: «Аха, теперь пользователи крякнутой винды будут устанавливать бесплатное ПО». Правы ли эти поклонники?

Читать дальше →
Total votes 10: ↑10 and ↓0+10
Comments15

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

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

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

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

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

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

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

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

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

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

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

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

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

Посмотреть основные идеи и мысли
Total votes 12: ↑6 and ↓60
Comments8
1

Information

Rating
3,121-st
Location
Berlin, Berlin, Германия
Registered
Activity