Обновить
1079.72

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

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

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

Умный хак об употреблении пробела после имени функции (перед последующей скобкою)

Время на прочтение2 мин
Охват и читатели1.8K
Как известно, в употреблении пробела после имени функции (перед последующей скобкою) есть два пути во всех тех языках, в которых после имени функции бывают скобки (например, в Си, в Си++, в PHP, в JavaScript…).

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

Руководствуясь соображениями экономии пробела, большинство авторов стилей и стандартов кодирования приходят к представлению о правильности первого из этих путей. Можно убедиться в этом на примере стандартов кодирования PHP: стандарты PEAR ([1], [2]), Zend, Symfony, CakePHP, DB Medialab, evolt.org, GForge, а также nIx0iDовский собственный стандарт все, все они своим примером рекомендуют воздерживаться от пробела.

Однако сравнительно недавно я увидал в Интернете (не то на Хабрахабре, не то на другом подобном сайте) проповедь третьего пути: ставить пробел после имени функции (и перед последующей скобкою) только в определении этой функции, однако не ставить пробел при вызове функции. Автор этого рецепта догадался (и вполне справедливо), что следование этому третьему пути открывает перед программистом возможность набрать в поиске строку «имяФункции (» с пробелом для того, чтобы тотчас найти в исходном коде определение функции, не продираясь через чащи и дебри её вызовов.

Со временем я пришёл к выводу, что такой умный хак будет неизменно полезен всегда, когда IDE нет под рукою, а есть простой текстовый поиск — или когда IDE недостаточно разумна для того, чтобы ей самóй уметь разыскивать именно определение желаемой функции. Лишний пробел позволяет программисту и без того невозбранно достигнуть желаемого.

Увы, к этому выводу я пришёл слишком поздно. Впервые завидев этот рецепт, я позволил всплыть из ленивых глубин подсознания вопросу «Это ж сколько пробелов понарасставлять придётся?!» — вопросу, который тогда мне показался достаточно риторическим и запретительным. С тех пор я поспел воочию убедиться в том, что этот рецепт на деле экономит куда больше времени при поиске, чем пришлось бы затратить времени на расстановку пробелов в заголовках функций; а значит, экономия на этих пробелах — не менее ложная экономия, чем экономия на комментариях или чем буказоидное документирование (от англ. «bukazoid documentation pattern»; в моём переводе, если угодно — «будланýтое документирование», по фразе Щербы «глокая куздра штеко будланула бокра…»). Проблема в том, что пока я в этом убеждался, всецело запамятовал и автора, и источник рецепта.

Читатель! он тебе не попадался?

Пора завязывать использовать пробелы вместо табуляции в коде

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

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

Итак, под катом — почему табы лучше пробелов, самые значительные заблуждения касательно табов и как ими правильно пользоваться.

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

Мультимастер репликация для firebird на python

Время на прочтение4 мин
Охват и читатели10K
Однажды появилась задача синхронизации двух баз данных, работающих под управлением СУБД Firebird. Ситуация вкратце такова.

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

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

Apache Hadoop (Доклад Владимира Климонтовича на ADD-2010)

Время на прочтение17 мин
Охват и читатели9.2K
Представляем вашему вниманию доклад Владимира Климонтовича, сделанный им на конференции Application Developer Days, в котором он поделился своим опытом обработки ОЧЕНЬ БОЛЬШИХ объемов данных, и использование для этого NOSQL-подходов, в частности Apache Hadoop.



Ниже представлены текстовая версия доклада + видео + аудио и слайды презентации. Спасибо belonesox за работу над подготовкой материалов доклада.

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

delete, new[] в C++ и городские легенды об их сочетании

Время на прочтение5 мин
Охват и читатели74K
Если в коде на C++ был создан массив объектов с помощью «new[]», удалять этот массив нужно с помощью «delete[]» и ни в коем случае не с помощью «delete» (без скобок). Разумный вопрос: а не то что?

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

В соответствии со Стандартом C++, в этой ситуации поведение не определено. Все предположения – не более чем популярные городские легенды. Разберем подробно, почему.
Читать дальше →

Заметки о кросс–компиляции приложений под DD-WRT

Время на прочтение8 мин
Охват и читатели19K
Недавно у меня перестал работать вайфай-рутер и после некоторых раздумий я заказал Asus RT-N16. Хотелось наконец–то познакомиться с альтернативными прошивками. Характеристики этого рутера уже описывались на Хабре. Итак, DD-WRT установлена (v2.24), самба заведена, в первый юсб порт воткнута системная флешка, а во второй — внешний жесткий диск. А дальше я заинтересовался: а смогу ли я запустить свои программы на этом рутере? Я не нашел в сети руководства по сборке программ под рутер и надеюсь этой статьей восполнить пробел. Приведу пошаговое руководство с описанием небольших проблем, встреченных на пути.

В качестве подопытной программы мне хотелось запустить Easysync, о которой я недавно писал. Повторюсь, что это открытая программа для синхронизации файлов в стиле дропбокса. Программа написана с использованием Qt 4, а в качестве движка синхронизации используется Unison. Так что, эта статья описывает как откомпилировать Qt, Unison, Easysync для архитектуры MIPS и рассказывает о запуске Easysync на вашем домашнем рутере.
Поехали!

10 лет RSDN

Время на прочтение1 мин
Охват и читатели1.9K
Сегодня отмечает свой первый юбилей один из самых посещаемых и авторитетных ресурсов для русскоязычных программистов: RSDN.ru.
10 апреля 2001 года, на просторах рунета появился сайт, призванный объединить русскоговорящих программистов в одно большое сообщество: русскую сеть разработчиков программного обеспечения (или «RSDN» по-забугорному). Спустя пять дней, на форумах этого сайта появилось первое официально зафиксированное сообщение, так и оставшееся без ответа.
Читать дальше →

Потоки или события

Время на прочтение3 мин
Охват и читатели14K
Существует два способа обрабатывать параллельные запросы к серверу. Потоковые (threaded, синхронные) серверы используют множество одновременно выполняющихся потоков, каждый из которых обрабатывает один запрос. В это время событийные (evented, асинхронные) серверы выполняют единственной цикл событий, который обрабатывает все запросы.

Чтобы выбрать один из двух подходов, нужно определить профиль нагрузки на сервер.
Читать дальше →

Языки программирования: первая шутка

Время на прочтение4 мин
Охват и читатели15K
В языках программирования есть свои шутники и свои шутки. Собственно, большинство эзотерических языков программирования задумывались именно как шутки (конечно, если не как вызов общественности, как F*ckf*ck, или как упражнение для ума, как Brainfuck). Но есть один язык, который по праву заслужил почетное звание Первой Шутки. В далеком 1972 году, когда все существующие языки программирования были исключительно целесообразны и убийственно серьезны, ранним утром 26 мая пара шутников раздвинула границы сущего и придумала принципиально новый язык. Они окрестили его «Compiler Language With No Pronounceable Acronym», что по очевидным причинам сократилось до INTERCAL.

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

Прежде всего, справочное руководство. Позднейшие эзотерические языки концентрируют свою необычность в самой сути языка, их руководства ограничиваются сухими фактологическими описаниями команд и особенностей. The INTERCAL Programming Language Reference Manual — уникальное описание языка программирования, с эпиграфами из «Алисы в Стране Чудес» и ехидными комментариями, сказанными совершенно серьезным тоном. Кроме того, специально для этого языка авторы разработали систему эвфемизмов для использующихся служебных символов: ' — искра, " — кроличьи ушки, . — пятно, : — двойное пятно, , — хвост, ; — гибрид (хотя логичнее было бы «пятнистый хвост»), $ — большие деньги, ~ — загогулина и т.д. (полный список прилагается к руководству). Комбинирование кроличьих ушек с пятном для получения кролика запрещено!

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

Злые программисты

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


Австралийский разработчик корпоративных бизнес-приложений Atlassian в честь 1 апреля решил сменить сферу деятельности и выпустить игру Angry Nerds. Она сделана по мотивам известного шедевра Angry Birds, но вместо птичек здесь программисты борются со зловредными багами.
Читать дальше →

Основы Clojure Web Applications

Время на прочтение6 мин
Охват и читатели11K
Сегодня я попробую показать основы создания веб приложений на языке Clojure. Здесь не будет сложной логики и модных фреймворков. Будет использоваться ряд библиотек для работы с примитивами. По мере упоминания я попробую в двух словах объяснить, какой функционал они предоставляют.

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

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

Предотвращение рекурсии и ленивые вычисления в Java

Время на прочтение5 мин
Охват и читатели5.6K
Не так давно, я написал небольшой класс для автоматического кэширования и обновления произвольных значений. Пользоваться им было очень легко — стоило лишь создать анонимный класс с перегруженным методом update, а потом, когда нужно, вызывать функции для пометки значения устаревшим и для получения самого значения:
Читать дальше →

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

Прячем текст в Bitmap

Время на прочтение3 мин
Охват и читатели41K
Доброго времени суток, уважаемый хабрачеловек. На хабре уже проскакивали мысли о том, как спрятать текст в bitmap-изображении. К сожалению, топиков на эту тему я не нашел и решил восполнить данный пробел. Под катом Вы найдете способ сокрытия текста в bitmap'е, а также реализацию на C#.
Читать дальше →

Action Request System: Знакомство

Время на прочтение5 мин
Охват и читатели8.1K
Прошло довольно много времени с тех пор как я устроился на новую работу. С того момента, я, собственно и начал изучать эту новую для себя технологию. Предлагаю вам изучить ее вместе со мной, по мере написания/чтения новых записей по этой теме. Упоминаний в рунете о ней я нашел крайне мало, поэтому решил восполнить брешь. Итак, начнем.

Что это такое?


В принципе, этот параграф вы можете прочитать и в английской википедии (хотя материал все-таки и различается: тут более углублен, в вики же, более поверхностный. Зато больше охват) так что он к прочтению желателен. Для начала, расшифруем аббревиатуру: Action Request System. Правда адекватного предназначению системы перевода я дать так и не смог. Что ж, разберем функционал по косточкам и каждый сам для себя решит, как же правильно перевести это название системы действий по запросам. Создала ее американская компания BMC. Это приложение, имеющее клиент-серверную архитектуру. Окружение клиента можно разделить на два типа: для пользователей (непосредственно, среда, которая рисует все формочки, берет данные и так далее) и для разработчиков — IDE на платформе Eclipse, в которой и разрабатываются все пользовательские приложения.
Читать дальше →

Где спряталась логика?

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

Вопрос


Очень часто при обсуждении программ употребляется термин «логика» или «бизнес-логика».
Например:
  • (о юнит-тестах) не обязательно добиваться стопроцентного покрытия кода тестами, достаточно тестировать лишь логику.
  • (о веб-приложениях) контроллер не должен содержать никакой бизнес-логики, а должен только вызывать методы других классов
  • В слое VIEW (то есть в JSP-файлах) не должно быть бизнес-логики


Так вот, кто скажет мне, что такое «логика»? Надо ли понимать под этим любой IF в коде? Но разве бывает код без IF'ов? Или (бизнес-)«логика» означает любую информацию, которая исходит от клиента? Но разве можем мы на деньги клиента делать что-то, чего он не заказывал? Не можем. Стало быть, весь наш код — это целиком «бизнес-логика» от клиента. Вот поэтому я никогда не мог понять, что же такое эта чёртова логика.

Ответ:

Если бы языки программирования были женщинами

Время на прочтение3 мин
Охват и читатели17K
То ли весна, то ли упоминание о неделе женщин на Хабре заставили меня задуматься о том, какими женщинами были бы языки программирования. Поиск по этой теме выдал пару явно устаревших статей, и я решила написать свою. Просьба воспринять с юмором и не обвинять в шовинизме — я, знаете ли, и сама не мужик :-)

P.S. Придумалось далеко не для всех известных мне языков — раскрытие темы для недостающих только приветствуется.

Prolog
Женщина-мечта: делает все, что вы хотите. К сожалению, иногда описание того, что же вы хотите, занимает больше времени, чем объяснение, как это делать.

BASIC
Горячая разведенка; специализируется на соблазнении подростков, и очень многие получают с ней свой первый опыт. Мнения взрослых о ней разделяются — одни вспоминают ее с нежностью, другие — осуждают ее дурное влияние на юные умы.

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

Знакомство с АОП

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

Парадигмы программирования


В современном мире IT-разработки существует довольно большое множество различных подходов к написанию программ. Так, например, кому-то нравиться представлять программу в виде последовательности действий, а кто-то считает, что программа должна представлять собой множество объектов, общающихся друг с другом. Совокупности этих идей и понятий образуют своего рода стиль написания программы, который принято назвать – парадигма программирования.

У каждой парадигмы есть свои особенности, однако, главным фактором, различающим их, является понятие основной единицы программы. Вот самые популярные из них:
  • инструкция (императивное программирование, FORTRAN/C/PHP),
  • функция (функциональное программирование, Haskell/Lisp/F#/Scala),
  • прототип (прототипное программирование, JavaScript),
  • объект (объектно-ориентированное программирование, С++/Java),
  • факт (логическое программирование, PROLOG).

Стоит заметить, что в общем случае язык программирования однозначно не определяет используемую парадигму: на том же PHP можно писать как императивные, так и объектно-ориентированные программы.

В этой статье я хочу рассказать о сравнительно молодой, но крайне, на мой взгляд, полезной парадигме программирования – аспектно-ориентированном программировании.

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

[Перевод] 7 смертных грехов в разработке ПО

Время на прочтение6 мин
Охват и читатели3.9K
Друзья, представляю вам перевод статьи «The 7 deadly sins of software development» автора Neil McAllister, опубликованной на infoworld.com.

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

Вклад авторов