Обновить
1024K+

Программирование *

Искусство создания компьютерных программ

1 119,87
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Я, наверное, знаю ООП. Опыт объектно-ориентированного программирования и дизайна. Ответ «не знающим ООП.»

Время на прочтение8 мин
Охват и читатели36K
После появления статей типа "Я не знаю ООП" — возникает желание внести ясность, «сорвать покровы» и «докопаться до истины».

Принципы объектно-ориентированности


Обычно выделяют (читай: на собеседовании требуют назвать) четыре «принципа объектно-ориентированного программирования»: абстракцию, инкапсуляцию, наследование и полиморфизм.

На мой взгляд (не говоря о том, что абстракция и полиморфизм могут быть запросто отнесены к подразделам наследования), принцип тут один, в общем, тот же самый, что при проектировании баз данных: представление всего в виде объекта — некоторой штуковины со свойствами. Набор обычно бывает фиксированным, и тогда говорят о классе объектов, а даже если понятия класса и нет, то наличие свойств с определёнными названиями подразумевается логикой программы, т.е. нечто типа класса в виде некоего минимального набора свойств всё равно присутствует. В общем, воззрения восходят к давнему С-шному/паскалевскому типу данных struct/record. Потом к этому добавили немного «функциональности» (в смысле функционального программирования): значением свойства может быть функция, причём такая, которая имеет доступ к самой структуре/записи, значением одного из свойств которой она является. Сей феномен, в лучших традициях немецкого латиноязычного нейминга (когда опция называется «вариантом», а степень числа — «потенцией»), назвали «методом». Желание повторно использовать код, в сочетании с представлением каждого предмета как некоего подобия паскалевской «записи», привело к появлению концепции «наследования».
Читать дальше →

AMatch — проверка входных параметров в PHP

Время на прочтение7 мин
Охват и читатели3.3K
Товарищи! Эта статья не для high-high-highload систем. Скорость работы представленных решений определённо меньше простейших проверок. На многотысячных или очень глубоких структурах применять предлагаемый подход крайне не рекомендуется. В этом топике побеждает быстрое кодирование, а не быстрый код.

Без длинных


Давайте без длинных вступлений, но всё же с предысторией. Однажды в рамках создания очередного очень важного компонента веб-сервиса нам понадобилось проверять уйму очень разных входных параметров (в данном случае, пришедших через $_REQUEST). Компонент был очень сложный, внутренняя и внешняя логика вызывала ежедневный баттхёрт между всеми участниками, а отдуваться приходилась немногим «избранным» программистам, которые писали, переписывали, выпиливали и запиливали заново. Когда на вход в систему с фронтенда падают десятки разных переменных, в том числе массивов, программисты при этом делают перекрёстные задачи (меняя логику) и мешают друг другу — код очень быстро разрастается, количество цепочек if-ов начинает занимать не одну страницу. Возвращаться к такому коду всё более и более чуждо ранимой душе. Тесты уже не очень помогают, т. к. каждое изменение логики приводит к изменению тех же тестов, в которых ещё надо вспомнить, понять и простить. Вот тогда и встал вопрос о создании удобного способа проверять весь входной поток каким-то приятным глазу способом, да чтоб всегда и везде получать фидбек про ошибки в однотипном виде. Акцент тут изначально стоял именно на удобстве для разработчиков, строго прошу в дальнейшем иметь.
Дальше много php

Из Facebook – в Livejournal, Twitter & Вконтакте, кросспостинг в исходных кодах и комментариях

Время на прочтение17 мин
Охват и читатели50K
В этой статье я расскажу о своем опыте разработки кросспостинга из моего Facebook в мой Livejournal (далее – ЖЖ), а также поделюсь исходными текстами, готовыми к старту на ваших аккаунтах.

Причиной написания скриптов было получение возможности поиска по своим записям – возможности, которую Facebook никак не может запустить как часть своего сервиса, а также «оживление» своего ЖЖ. Поскольку доступ к любым постам в Фейсбуке требует обязательной авторизации, поисковых роботов сервис, очевидно, не пускает. Конкретно в моем случае это неудобно: ссылки, видео и мысли, которые я публикую в соцсети, зачастую я публикую «на будущее» – и часто настает тот момент, когда эта информация становится необходимой, но ее уже практически не найти.

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

Также в статье выкладываю готовые скрипты на Perl, с использованием которых можно транслировать статусы Facebook в Livejournal, а оттуда, при наличии соответствующих настроек, в Вконтакте, Twitter и RSS, а с использованием дополнительных веб-сервисов – практически во все блог-движки.
Читать дальше →

Автоматизация сборки проекта в Sublime Text 2 c использованием Ant

Время на прочтение4 мин
Охват и читатели3.3K
В процессе разработки ПО весьма не мало зависит от используемого редактора кода. Я, поддавшись веянью моды, решил освоить текстовый редактор Sublime Text 2, слишком уж много положительных отзывов я слышу о нем. Мне самому хватало Eclipse. Но со временем в Eclipse меня стало раздражать подтормаживание интерфейса и в конечном итоге я пришел к выводу, что всех «прибамбасов» Eclipse мне не надо, а от Eclipse мне нужна лишь подстветка синтаксиса, навигация по проекту, быстрые клавиши и работа с Ant. Ant обычно в проектах у меня делал компиляцию или упаковку проекта (тут под упаковкой подразумевается распределение исходников по определенной в структуре каталогов, как это в PHP-фреймворках или в RubyOnRails нужно) и отправку итога на веб сервер по FTP. Начиная работу с Sublime Text 2, мне не хотелось переключаться на консоль для вызова Ant, а использовать его непосредственно в интерфейсе Sublime Text 2. И решение было найдено.
Читать дальше →

AngularJS — фреймворк для динамических веб-приложений от Google

Время на прочтение6 мин
Охват и читатели139K
AngularJS создан для тех разработчиков, которые считают, что декларативный стиль лучше подходит для создания UI, а императивный — для написания бизнес-логики.

Дзен Angular


  • Хорошо отделять манипуляцию DOM-ом от логики работы приложения. Это существенно улучшает тестируемость кода.
  • Хорошо считать, что автоматизированное тестирование приложения настолько же важно, насколько и написание самого приложения. Тестируемость очень сильно зависит от того, как структурирован код.
  • Хорошо отделять разработку клиентской части от серверной. Это позволяет вести разработку параллельно и улучшает повторное использование на обеих сторонах.
  • Хорошо, когда фреймворк ведет разработчика по всему циклу разработки приложения: от проектирования UI через написание бизнес-логики к тестированию.
  • Хорошо, когда распространенные задачи становятся тривиальными, а сложные — упрощаются.


AngularJS представляет собой комплексный фреймворк. В стандартной поставке он предоставляет следующие возможности:
  • Все, что вам нужно для создания CRUD-приложений: data-binding, базовые директивы для шаблонов, валидация форм, роутинг, deep linking, повторное использование компонентов, dependency injection, инструменты для взаимодействия с серверными (RESTful) источниками данных.
  • Все, что вам нужно для тестирования: средства для модульного тестирование, end-to-end тестирования, mock-и.
  • Шаблон типового приложения, включающего в себя структуру каталогов и тестовые скрипты.


AngularJS разрабатывается сотрудниками Google и используется, как минимум, в одном сервисе Google — DoubleClick.

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

Один из методов работы с конфигурационными файлами в С++ (Qt)

Время на прочтение6 мин
Охват и читатели36K
Практически в каждом проекте, встает задача персистентного чтения/записи конфигурации. Не секрет что существует большое количество уже готовых библиотек для решения этой задачи. Некоторые из-них просты, некоторые чуть сложнее в использовании.
Если же проект разрабатывается с использованием Qt, думаю нет смысла линковать дополнительную библиотеку, так как в Qt есть все средства для создания очень простого, гибкого и кроссплатформенного решения.
Как раз о таком решении хочу расказать вам в этом посте.
Читать дальше →

Сокеты в Python для начинающих

Время на прочтение4 мин
Охват и читатели620K

Предисловие


В далеком для меня 2010 году я писал статью для начинающих про сокеты в Python. Сейчас этот блог канул в небытие, но статья мне показалась довольно полезной. Статью нашел на флешке в либровском документе, так что это не кросспост, не копипаст — в интернете ее нигде нет.



Что это


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

Существуют клиентские и серверные сокеты. Вполне легко догадаться что к чему. Серверный сокет прослушивает определенный порт, а клиентский подключается к серверу. После того, как было установлено соединение начинается обмен данными.

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

How it's made для программистов. Серия №2

Время на прочтение2 мин
Охват и читатели4.3K
Cлышали ли вы об Open Source проектах, написанных на Java? А интересно ли вам узнать как они работают?



Если ваш ответ на последние два вопроса положителен, то неважно, слышали или нет вы о Queuepy до сих пор. Далее нам по пути.
Читать дальше →

Частичное применение и каррирование в C++

Время на прочтение12 мин
Охват и читатели16K
Приветствую.

Уж не знаю, как так вышло, но игрался я на досуге с лямбда-выражениями в С++11 (о которых, к слову, я уже писал статью, снискавшую пару лет назад на удивление достаточно неплохую популярность), и под наркотическим воздействием впечатлением от языка Haskell начал разбираться с такими понятиями, как частичное применение и каррирование в контексте языка С++. И для начала, пожалуй, неплохо бы нам определиться с этими терминами.

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

Начинаем работать с Ember.js

Время на прочтение6 мин
Охват и читатели57K


В наши дни сложные Javascript-приложения можно увидеть повсюду. Со временем они становятся все сложнее и уже неприемлемо просто писать цепочку callback-функций на jQuery. Javascript-программисты постепенно узнают то, что обычные разработчики знали уже несколько десятилетий. Организация и эффективность может сыграть важную роль при разработке. Таким образом, такие MVC-фреймворки на Javascript, как Backbone, Knockout и Ember появились для того, чтобы заполнить пустоту между начинающими, средними и опытными разработчиками. Они предлагают разные возможности и функционал, который подойдет разным людям, в зависимости от их потребностей.
Читать дальше →

Распаковка Perl2Exe

Время на прочтение7 мин
Охват и читатели7.7K


Одним из наиболее часто используемых продуктов для создания standalone-приложений из perl-скриптов и организации какой-никакой защиты является продукт IndigoStar Perl2Exe. Периодически возникают ситуации, когда исходный код скрипта потерян, а на руках имеется только полученный с помощью этой программы exe-файл, но всенепременно хочется добраться до сорцев. Разберемся, как это сделать.
Читать дальше →

Хабрастатс

Время на прочтение3 мин
Охват и читатели1.3K

Хабрастатистика


Собственно после появления довольно интересного и популярного топика Хабракамп товарищ opium создал вопрос, где предложил создать скрипт статистики.

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

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

Прост как Java

Время на прочтение2 мин
Охват и читатели1.4K
Технологическая мигрень навсегда оставляет разработчиков – хостить проекты на Java теперь будет проще. Облачная платформа Jelastic получила $2 млн. инвестиций. Деньги пойдут на расширение бизнеса: США и страны Еврозоны уже проявили свой интерес к Jelastic.

image

Наверное, каждый Java-разработчик сталкивался с проблемой выбора хостинга. При этом рынок облачных сервисов на этот счет упорно молчал на протяжении 15 лет. Собственно, Jelastic и вырос из этой проблемы. Создав крупный проект на Java, Руслан Синицкий, Константин Александров и Алексей Скутин долго не могли найти площадку, на которой бы он разместился. Они оказались перед дилеммой: воспользоваться готовой платформой и переписать весь код приложения или взять на себя хлопотный процесс администрирования. Оба пути выглядели малопривлекательно. И тогда отцы-основатели Jelastic выбрали третий вариант – они создали собственную платформу.

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

Ближайшие события

Простые вещи. Файл настроек и небольшой прицеп утилит

Время на прочтение15 мин
Охват и читатели1K
Этот пост, для тех, кто пишет на C[/C++]. Остальные могут не читать.

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

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

Я, просто, делюсь быстрым решением, как читать параметры и значения, разделённые знаками «равно» из файла настроек формата, похожего на, скажем, php.ini

Перейдём, непосредственно, к решению.

Объектно-ориентированное функциональное метапрограммирование

Время на прочтение2 мин
Охват и читатели3K
Искусство каррирования
Вдохновившись статьей Еще раз о каррировании и частичном применении в PHP, в голову пришла реализация частичного применения метода, именно метода, а не функции.
Каррируем!

Как ускорить алгоритм планирования

Время на прочтение6 мин
Охват и читатели2.1K
Здравствуйте, уважаемые хабравчане!
Наверняка многим из вас доводилось в своей работе сталкиваться с необходимостью решения задачи планирования, относящейся к области задач теории расписаний. Мне бы хотелось рассказать, каким образом можно ускорить работу такой программы, не затрагивая сам алгоритм.
Читать дальше →

Метод решета в игре «Быки и коровы»

Время на прочтение3 мин
Охват и читатели81K
Здравствуйте.
Еще осенью на 2 курсе в качестве лабораторной работы по «Теории автоматов» преподаватель на ходу придумывал нам задания, ориентируяюсь на наши пожелания в оценке. В основном это были игры. Кому-то достался хоккей, кому-то теннис, мне же досталась не столь известная логическая игра «Быки и коровы».

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

IT-компот #16 Подкаст о программировании и технологиях

Время на прочтение1 мин
Охват и читатели824
image
Делимся нашим опытом использования новой ОС от Apple — OS X Mountain Lion. Обсуждаем, нужен ли вообще кому-то Safari на винде. Будут ли разработчики игр уходить с Windows 8 на другие системы и платформы. Полезные браузерные расширения для веб-разработчиков. Выбираем удобную мышь для повседневной работы.


В выпуске:


Слушать в Itunes
слушать на podfm
скачать файл(63.2 Мб)
Читать дальше →

Как я MIDI-клавиатуру писал

Время на прочтение8 мин
Охват и читатели16K
Не так давно я загорелся идеей написать свою MIDI-клавиатуру. Позже к ней был прикручен гитарный гриф, она научилась распознавать аккорды и воспроизводить мелодии. Собственно об этом и будет этот пост.
Если вам интересно как программно воспроизводить звук через MIDI-синтезаторы, алгоритм распознавания гитарных аккордов, или же вы просто любите играть на гитаре или клавишных инструментах прошу под кат.
Читать дальше →

Упрощаем себе жизнь с помощью Sublime Text 2

Время на прочтение7 мин
Охват и читатели53K
image
Недавно открыв для себя Sublime Text 2, я удивился тому, как можно было придумать настолько эффективный инструмент. Тот кто избалован всяческими IDE, обычно не видит никаких достоинств, кроме красивой подсветки кода (хотя именно это меня изначально и привлекло).

Я не стану рассуждать на сколько хорош этот редактор и расписывать весь его функционал — на хабре по этой теме уже есть множество топиков. Я лишь хочу показать как можно сделать из него тот инструмент, за который не жалко тех 59$, которые хотят за него разработчики.

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