
Сейчас о путешествиях во времени пишут не только фантасты. После размышлений античных философов, формул общей теории относительности, моделей червоточин продолжают появляться новые теории, и даже проекты. Многие из них, правда, требуют для своей работы черные дыры, бесконечно длинные цилиндры, материю с отрицательной массой и прочие артефакты. Приближает ли все это нас к созданию машины времени? Об этом трудно говорить предметно, не понимая сути вопроса – что такое время. За несколько веков это понимание увеличилось, на самом деле, незначительно. Быть может с приходом программирования ситуация изменится? Ведь именно там нас ожидают многие ответы. Читать полностью »
Рубрика «Программирование» - 1056
Путешествия во времени и программирование
2012-08-27 в 19:08, admin, рубрики: будущее здесь, Козырев, матрица, Программирование, путешествия во времени, метки: Козырев, матрица, Программирование, путешествия во времениРуководство новичка по эксплуатации компоновщика
2012-08-27 в 18:59, admin, рубрики: c/c++, компоновщик, переводы, Программирование, метки: c/c++, компоновщик, переводыDavid Drysdale, Beginner's guide to linkers (http://www.lurklurk.org/linkers/linkers.html).
Цель данной статьи — помочь C и C++ программистам понять сущность того, чем занимается компоновщик. За последние несколько лет я объяснил это большому количеству коллег и наконец решил, что настало время перенести этот материал на бумагу, чтоб он стал более доступным (и чтоб мне не пришлось объяснять его снова). [Обновление в марте 2009: добавлена дополнительная информация об особенностях компоновки в Windows, а также более подробно расписано правило одного определения (one-definition rule).
Типичным примером того, почему ко мне обращались за помощью, служит следующая ошибка компоновки:
g++ -o test1 test1a.o test1b.o
test1a.o(.text+0x18): In function `main':
: undefined reference to `findmax(int, int)'
collect2: ld returned 1 exit status
Если Ваша реакция — 'наверняка забыл extern «C»', то Вы скорее всего знаете всё, что приведено в этой статье.
Читать полностью »
Практикум AngularJS — разработка административной панели (часть 2)
2012-08-27 в 16:56, admin, рубрики: AngularJS, javascript, mvc framework, Программирование, метки: AngularJS, javascript, mvc framework, ПрограммированиеВ первой части был реализован базовый функционал админки на javascript-фреймворке AngularJS — загрузка данных из бэкенда, добавление/изменение записей. Во второй части мы рассмотрим реализацию сортировки таблицы и разбитию по страницам, удаление записей.
Автоматизируем работу с проектами Xcode средствами Ruby
2012-08-27 в 11:03, admin, рубрики: development, gem, iOS, osx, ruby, xcode, Программирование, метки: development, gem, iOS, osx, ruby, xcodeПривет. Существует ряд задач, для реализации которых нет необходимости в использовании графического интерфейса Xcode. Время исполнения таких задач может сократиться как минимум на время запуска Xcode. Экономия времени может показаться незначительной при работе с одним проектом, но если проектов много, процесс их редактирования может оказаться очень утомительным. Но самое главное, что такой подход открывает возможности для автоматизации работы с проектами.
Я хочу рассказать о новом инструменте, целью которого является решение описанной проблемы. XcodeProject — это библиотека на языке Ruby которая может быть использована для чтения данных проекта Xcode и их изменения, а так же для сборки проектов, архивирования и выполнения ряда задач по автоматизации работы с ними.
Реализуем RESTful Web Service на Scala
2012-08-27 в 6:45, admin, рубрики: scala, scalaz, Веб-разработка, Программирование, метки: scala, scalazНа прошлой неделе на Хабре было целых две статьи о реализации RESTful web-сервисов на Java. Что ж, не будем отставать и напишем свой вариант на Scala, с монадами и аппликативными функторами. Матёрые разработчики на Scala вряд ли найдут в этой статье что-то новое, а любители Django вообще скажут что у них эта функциональность есть «из-коробки», но я надеюсь что Java-разработчикам и просто любопытствующим будет интересно почитать.
Подготовка
За основу возьмём задачу из предыдущей статьи, но постараемся решить её так, что бы код решения умещался на экран. Хотя бы на 40-дюймовый и пятым шрифтом. В конце концов, в XXI веке должна быть возможность решать простые задачи без мегабайтов xml-конфигов и десятков абстрактных фабрик.
Для тех, кто не хочет ходить по ссылкам уточню: мы собираемся реализовать простейший RESTful сервис для доступа к базе данных клиентов. Из необходимой функциональности — создание и удаление объектов в базе, а также постраничная выдача списка всех клиентов с возможностью сортировки по разным полям.
В качестве кирпичиков, из которых мы будем строить дом, возьмём:
- Scala — даже не кирпичик, а скорее фундамент,
- Unfiltered — отличная библиотека для обработки HTTP-запросов,
- Squeryl — библиотека для запросов к базе данных,
- Jackson — библиотека для работы с JSON, изначально написанная для Java, но на ура справляющаяся и со Scala-типами,
- Scalaz — библиотека, позволяющая писать в коде разные забавные символы типа ⊛, ↦ или ∃, а заодно реализующая такие полезные абстракции, как аппликативные функторы, моноиды, полугруппы и стрелки Клейсли. Последние, правда, мне пока не приходилось использовать, но скорее всего это объясняется тем, что я ещё не достиг нужной степени функционального просветления.
По ходу статьи я постараюсь давать достаточно пояснений, что бы код был понятен людям не знакомым со Scala, но не обещаю что у меня получится.
Читать полностью »
Реализация синглтона в многопоточном приложении
2012-08-27 в 6:24, admin, рубрики: c++, gcc, MSVC, Компиляторы, многопоточность, Программирование, метки: c++, gcc, MSVC, компиляторы, многопоточность, Программирование 
Введение
В настоящий момент сложно себе представить программное обеспечение, работающее в одном потоке. Конечно, существует ряд простых задач, для которых один поток более, чем достаточен. Однако так бывает далеко не всегда и большинство задач средней или высокой сложности так или иначе используют многопоточность. В этой статье я буду говорить об использовании синглтонов в многопоточной среде. Несмотря на кажущуюся простоту эта тема содержит множество нюансов и интересных вопросов, поэтому считаю, что она заслуживает отдельной статьи. Здесь не будет затрагиваться обсуждение того, зачем использовать синглтоны, а также как их правильно использовать. Для прояснения этих вопросов я рекомендую обратиться к моим предыдущим статьям, посвященным разным вопросам, связанным с синглтонами [1], [2], [3]. В этой статье речь будет идти о влиянии многопоточности на реализацию синглтонов и обсуждению вопросов, которые всплывают при разработке.
Читать полностью »
Джон Кармак о науке и искусстве разработки ПО
2012-08-26 в 18:29, admin, рубрики: game development, john carmack, quakecon 2012, ПрограммированиеОт переводчика.
Прошу прощения за слегка вольный перевод. Я старался сохранить мысль максимально близко к оригинальной, но при этом сделать текст чуть более связным. В оригинале это транскрипция, причём довольно сложная.
Также прошу прощения за отсутствие перевода словосочетания “computer science”. В русском языке нет адекватного ему словосочетания. Всякие «информатики» и «компьютерные науки» — это либо дискредитировавшие себя понятия, либо безсмысленные переводческие суррогаты. Английское понятие “computer science” содержит историческую игру слов, которая в переводе на русский язык должна выглядеть как-то так: «науки о вычислениях, обработке информации и вычислительных устройствах». Думаю, лучше оставить оригинальное “computer science”. Во всяком случае, в таком виде это словосочетание позволит вам самим подобрать нужный контекст из всего многообразия, представляемого им в оригинале.
Почему я решил его перевести — ведь текст, вроде бы, короткий и не особо насыщенный откровениями? Потому, что это выступление Кармака. А он, как-никак, знаковая фигура в отрасли разработки ПО. То, что написано ниже, показывает отрыв теории разработки ПО от практики. Ведь если эти мысли посещают такого разработчика и выносятся на QuakeCon — то что тогда творится в головах рядовых прикладных программистов?
Читать полностью »
Встречаем Veracity — новую распределенную систему контроля версий
2012-08-26 в 5:33, admin, рубрики: DVCS, Git, scm, Программирование, Системы управления версиями, метки: DVCS, scm 
Здравствуй, мой любознательный %username%!
Несколько месяцев назад я случайно наткнулся на еще одну перспективную систему управления версий — Veracity, о которой и хотел бы сегодня рассказать, чтобы тебе было что поковырять на выходных. Несмотря на то, что разработка Veracity идет уже больше года, на Хабре ее имя было лишь пару раз вскользь упомянуто в комментариях. Под катом тебя ждет краткое описание Veracity и ссылки, где можно получить более подробную информацию о ней.Читать полностью »
Наследуемые шаблоны в FreeMarker
2012-08-25 в 17:37, admin, рубрики: freemarker, templating, web, Веб-разработка, Программирование, метки: freemarker, templating, webFreeMarker — достаточно известный шаблонизатор на Java. Сразу оговорюсь, что обсуждать его сильные или слабые стороны не буду. Так сложилось, что мне он пришелся, что называется «по душе» и, можно даже сказать, «пошел в руку». В общем, часто вспоминаю о нем, когда возникает задача генерации текста на основе шаблонов. В основном, конечно, это касается его родной среды — генерации веб страниц. Впрочем, в сочетании, с FMPP и не только веб-страниц.
Тем, кто разрабатывает под ASP.NET хорошо знакома техника создания страниц на основе наследуемых шаблонов, когда в наследниках переопределяются или добавляются определенные блоки страницы, а сами шаблоны могут создавать иерархию. Впрочем, понятно, что идея далеко не новая и интуитивно понятная.
На уровне Java кода, эта задача для FreeMarker прекрасно уже решена. Но вот было стойкое ощущение, что почти то же самое можно сделать и не выходя за его базовые рамки, т.е. использовать в том же FMPP. И, действительно, решение получилось вполне компактным. Хотя и несколько искусственным.
Читать полностью »
Реализация Common Lisp Condition System на C#
2012-08-25 в 8:46, admin, рубрики: .net, common lisp, exceptions, исключения, Программирование, метки: .net, c++, Common Lisp, exceptions, исключения, ЛиспОдним из самых замечательных и притягательных свойств языка Common Lisp является, безусловно, его система обработки исключений.
Более того, по моему, лично, мнению, подобный подход к исключениям является единственно правильным для всех императивных языков, и вот по какой простой причине:
Механизм «исключений»(или, как они называются в мире CL — conditions) в Common Lisp отделен от механизма раскрутки стека, а это, соответственно, позволяет обрабатывать любые всплывающие в программе исключительные(да и не только исключительные) ситуации прямо в том месте, где они возникли, без потери контекста выполнения программы, что влечет за собой удобство разработки, отладки, да и вообще, удобство построения логики программы.
Наверное, следует сказать, что Common Lisp Condition System, несмотря на свою уникальность в среде высокоуровневых языков программирования, очень близка известным многим разработчикам низкоуровневым средствам современных операционных систем, а именно: синхронным сигналам UNIX и, гораздо ближе, механизму SEH(Structured Exception Handling) из Windows. Ведущие реализации CL основывают такие элементы управления потоком вычислений, как механизм обработки исключений и раскрутка стека, именно на них.
Несмотря на отсутствие похожего механизма во многих других(если не всех) императивных языках программирования, он поддается реализации в более-менее вменяемом виде на большинстве из них. В данной статье я опишу реализацию на C#, по ходу дела разбирая в деталях саму концепцию данного подхода к «исключениям».
Читать полностью »

