войти зарегистрироваться

PHPВизуализация связей внутри класса с помощью GraphViz

Прочитав книжку Р. Мартина «Чистый код», я исполнился решимостью и принялся за рефакторинг своего старого, большого и грязного проекта.

И захотелось мне посмотреть, как в одном из самых простых классов связаны между собой методы и поля. PhpCallGraph, быстро нагугленный, наладить не удалось (какие-то проблемы с xdebug), и к тому же, судя по примерам, он показывает связи во всём проекте, трассируя его, а мне нужно было исследовать один класс.

Я решил написать собственное решение, и вот что получилось.

Проектирование и рефакторингSingleton (Одиночка) или статический класс?

Статья будет полезна в первую очередь разработчикам, которые теряются на собеседованиях когда слышат вопрос «Назовите основные отличия синглтона от статического класса, и когда следует использовать один, а когда другой?». И безусловно будет полезна для тех разработчиков, которые при слове «паттерн» впадают в уныние или просят прекратить выражаться :)

Что такое статический класс?


Для начала вспомним что такое статический класс и для чего он нужен. В любом CLI-совместимом языке используется следующая парадигма инкапсуляции глобальных переменных: глобальных перменных нет. Все члены, в том числе и статические, могут быть объявлены только в рамках какого-либо класса, а сами классы могут (но не должны) быть сгруппированы в каком-либо пространстве имен. И если раньше приходилось иммитировать поведение статического класса с помощью закрытого конструктора, то в .NET Framework 2.0 была добавлена поддержка статических классов на уровне платформы. Основное отличие статического класса от обычного, нестатического, в том, что невозможно создать экземпляр этого класса с помощью оператора new. Статические классы по сути являются некой разновидностью простанства имен — только в отличие от последних предназначены для размещения статических переменных и методов а не типов.

Персональные блоги Библиотека генерации пользовательских картинок для сайта

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

Поиски продолжались минут 30, за которые я не нашёл ничего приемлемого, из разряда «подключил — заработало», а потому на скорую руку набросал на PHP небольшой класс, который делает то, что мне нужно и отвечает указанному выше принципу. Собственно, пока я искал нужное мне решение, обнаружилось, что в подобных поисках я не одинок, потому решил этот класс выложить в публичный доступ: мало ли, кому потребуется.

Класс называется Avatarco.
Для полноценной работы необходим PHP5 >= 5.3.0, но изменив одну строку можно заставить работать на PHP5 ниже, чем 5.3.0.
Описание работы класса и его исходный код доступны по адресу code.google.com/p/avatarco

Вот случайный пример его работы (или пройдите по ссылке и пообновляйте):
image

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

Блог компании Paragon SoftwareРазвертываем системы при производстве компьютеров, а также в компьютерных классах и интернет-кафе

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

Очевидно, что ручное восстановление образа на каждом PC – не только утомительный и рутинный труд, но также неэффективное использование ресурсов. Для того, чтобы упростить и максимально автоматизировать этот процесс специалисты нашей компании подготовили Paragon Deployment Manager 10 (DM10).

Итак, с помощью Hard Disk Manager, входящего в состав DM10, создаем образы для «эталонных» компьютеров и размещаем их на Infrastructure сервере.

image

ПрограммированиеПринцип подстановки Барбары Лисков

Привет, хабрачеловеки!

Захотелось вот поделиться сокровенным знанием по этой теме. К тому же материалов по этому, достаточно важному принципу проектирования классов и их наследования, в Рунете как-то негусто. Имеются формулировки вида:

«Пусть q(x) является свойством верным относительно объектов x некоторого типа T. Тогда q(y) также должно быть верным для объектов y типа S, где S является подтипом типа T.» © Wikipedia

Но они выносят мой мозг меня совершенно не радуют.

Если хочется услышать объяснение этой хрени умной фразы — прошу под кат.

GTD Троллинг и тролли (о том, как составлять классификацию и выделять группы)

Устав от обилия «аналитических» статей, посвященных такому социальному явлению, как троллинг, я, честно говоря, в очередной раз составил портрет среднестатистического обитателя сети и призадумался — а насколько вообще возможна классификация этого явления? Естественно, что в 99% виденных мной статей классификация никакой научностью даже не пыталась страдать в лучшем случае оставаясь на уровне «тролль закомплексованный — тролль незакомплексованный», а в худшем — на уровне «тролль хороший — тролль плохой». Естественно, что на основе такой классификации разобраться с этим явлением практически невозможно.

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

Топик находится в блоге «учитесь работать» просто потому, что научитесь уже, блин, составлять классификации!

Персональные блоги Проектирование ООП классов (php) — линч

Добрый день!
Хотелось бы двигаться дальше в изучении php, и в голове крутится много нужных мне классов для разработки.
Я создал для себя репозиторий, и большинство классов использую во всех своих проектов, однако ощущение, что
я совершаю ошибки в проектировании классов меня не покидает.
Наставников, которые бы использовали ООП и репозитории классов у меня нет, поэтому я прошу хабрасообщество отлинчевать два небольших класса, которые я повсеместно использую.
Первый класс — events {} http://www.pastebin.ru/304393 (Вывод сообщений для пользователя или сохранение в базе данных для администрации). Для использования необходим также класс mysqlLayer (для работы с базой данных)
Второй класс — images {} http://www.pastebin.ru/304394 (Изменение размера картинок). Для использования необходим класс events.

Я хотел бы узнать, какие ошибки в проектировании и в использовании ООП подхода на Ваш взгляд я совершил, и в целом какие Вы можете дать рекоммендации.

UPD: (какие выводы из дискуссии на текущий момент для себя сделал)
1 — Вместо кодов ошибок в цифровом виде использовать слова (вместо 1 — notFile)
2 — Использовать общепринятое название метода getInstance а не load в паттерне Singletone
3 — Использовать enum-классы вместо строковых значений в классе

Персональные блоги Очередной модуль для работы с MySQL

Не хватило кармы для помещения в специализированный блог. Но очень интересно обсудить.
Утомили рутинные операции при работе с БД. Решил хоть как-то исправить ситуацию. Потратил порядка получаса на просмотр существующих классов, не нашол ничего подходящего для себя. И решил, что проще будет, написать свой.

Собственно, что хотелось получить:
1. Сберечь свою память.
По работе приходится поддерживать и писать сайты на 4-5 серверных площадках, в разных странах. Постоянно меняются пароли и(реже но все же) сетевые адреса. Поэтому хотелось как-то централизовать настройки подключение и избавить себя от необходимости запоминать десятки адресов и паролей, а просто раскидать один файл по всем серверам и по мере надобности просто использовать нужный сервер БД.

2. Сберечь свое время.
Я ленивый. Меня быстро утомляют куски кода которые приходиться таскать с собой из скрипта в скрипт. Хотелось отдавать запрос и получать массив.

3. Хотелось свободы.
Многие модули которые попались мне на глаза за недолгое время поиска, пытались сами организовывать запросы.
Конечно кому-то это могло показаться удобнее, чем писать запросы самому, но зачастую приходится использовать сложные запросы и тратить время на анализ того как же надо это все написать, чтобы «умный» модуль превратил это все в корректный и оптимальный запрос.

PHPМоделируете ли вы классы (UML), прежде, чем приступить к разработке? (только PHP пожалуйста!)

Проголосовал 521 человек. Воздержался 131 человек.

Персональные блоги PHP: Что представляют из себя класс\объект в Вашем WEB-приложении?

Проголосовало 209 человек. Воздержалось 90 человек.