Обновить
1024K+

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

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

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

Martin Fowler — GUI Architectures. Часть 1

Время на прочтение9 мин
Охват и читатели28K
Перевод материала Мартина Фаулера. В статье обсуждается общий подход к архитектуре UI и приводятся подробные описания таких шаблонов проектирования, как MVC, MVP, Presentation Model, Forms and Controls, Humble View, Passive View. Статья неплохо прочищает мозг. Для того, чтобы не упустить ни единого нюанса, решил заняться переводом.

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

Я не профессиональный переводчик и мог что-то неправильно понять (и даже кое-где сделал пометки в скобках), но вы в любом случае обладаете возможностью прочитать статью в оригинале. Надеюсь, что перевод такой интересной статьи поможет кому-то улучшить свои навыки и расширит кругозор.
Прочитать про архитектуру UI!

Покорим Ruby вместе! Капля тринадцатая

Время на прочтение5 мин
Охват и читатели13K
Сегодня мы познакомимся с таким мощным и полезным инструментом Руби и компонентом RoR, как Active Record. Как часть RoR мы знаем Active Record из первого шага статей о рельсах (что-то эта серия не очень хорошо пошла, правда). Рассмотрим практическое применение компонента в Руби, что очень пригодится и в RoR.

Active Record придерживается принципов ORM: базы данных могут быть представлены в виде объектно-ориентированного кода, где таблицы — это классы, строки таблицы — объекты, а поля — атрибуты объекта. Однако Active Record отличается от других ORM библиотек, например, от Hibernate из Java, тем, что здесь нет необходимости начальной конфигурации — все работает «из коробки». Active Record написан на чистом Руби, что позволяет нам работать с ним, как с обычным классом: использовать наследование, переписывать методы, использовать метапрограмминг и др. Да, атрибуты объекта в большинстве случаев заполняются с помощью SQL-запросов и точно также атрибуты записываются назад в таблицу. Но все, что происходит между этими двумя процессами — обычная работа с объектом Руби. Стоит понимать «отдельность» существования записей базы данных и объектов Руби: подчас база данных будет отличаться от класса Руби.
Продолжим

Покорим Ruby вместе! Капля двенадцатая

Время на прочтение4 мин
Охват и читатели18K
Настало время писать на Руби что-то пригодное для использования ;) Сегодня мы научимся выдирать нужную нам информацию из web-страниц с помощью Руби на примере Хабра. Начнем с кармы.

open-uri


Давайте каждый откроет свою персональный Хаброцентр (ну или чужой, если все еще не обзавелись инвайтом ;) с адресом вида %username.habrahabr.ru. Наша задача – извлечь из полутысячи строк HTML-кода значение нашей кармы. Предполагаем, что для этого нам необходимо сохранить код страницы в файл, открыть и прочитать его и, используя регулярные выражения, получить необходимую информацию.

Библиотека open-uri сделает первую часть работы за нас. После включения ее в программу становится доступен метод open, который позволяет открывать как локальные файлы, так и URL:
Едем дальше

Влюбляемся в F#: Доза 1: Дух функционального программирования

Время на прочтение4 мин
Охват и читатели8.3K
Дорогие Хабраколлеги!

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

Когда я был молодым и преподавал программирование на первом курсе факультета Прикладной математики МАИ, один из студентов никак не мог понять, что значит X:=X+1. “Как же так, как X может быть равен X+1?”. Мне пришлось объяснить ему, как такое возможно, и в этот момент в нем умер функциональный программист…


Почему? Давайте разберемся.

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

Я уволился

Время на прочтение1 мин
Охват и читатели6.3K
И не потому, что меня не пугает кризис — предложение на рынке труда IT сократились в разы
Меня не сократили — мало того уверили что сокращений не будет
Зарплату не урезали — я мог бы гордится размером своей зарплаты и до кризиса
И не потому что есть другой источник доходов — нет, жена — домохозяйка
Я не выиграл в лотерею — наоборот, денег, с учетом необходимости оплаты московской квартиры, хватит на пару недель
Это не было необдуманным решением — я начал задумываться об увольнении месяца три назад
Я нашел лучшее место работы? Нет, пока поиском толком и не занимался.
Читать дальше →

Влюбляемся в F#: Доза 0.1: Как установить F#

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

Дорогие Хабраколлеги!


Благодарю за теплый прием моих заметок по F#. Откровенно говоря, не ожидал такого количества интересных и полезных комментариев! Заранее прошу простить, если я не успеваю отвечать на все — буду стараться.


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


Существует несколько возможностей установить F# (на текущий момент, последняя версия – 1.9.6.2):


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

Monadic Parser Combinator в Nemerle

Время на прочтение7 мин
Охват и читатели2.5K
Недавно обнаружил замечательную статью Monadic Parser Combinator про создание парсеров. Основная идея заключена в том, что бы описать парсер как объект первого класса, что бы можно было произвести декомпозицию исходной задачи и представить искомый парсер в виде синтеза более простых парсеров. Что бы облегчить комбинацию парсеров используется подход replace error with list of success. В языке haskell очень удобно работать с созданием парсеров, так как эта задача естественно ложится на концепцию монад, к сожалению в nemerle монады не поддерживаются, но все же язык достаточно мощный, что бы справиться с данной задачей.

Сломать мозг с помощью ФП

Влюбляемся в F#: Доза 0: Зачем нужен ещё один язык программирования?

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

Дорогие Хабраколлеги!



Хочу предложить вашему вниманию возможность приобщиться еще к одному языку программирования: F#. Идея писать такого рода заметки возникла из жизни — по роду своей деятельности мне приходится рассказывать про F#, и когда меня спрашивают, где можно попродробнее прочитать об этом языке — приходится ссылаться на англоязычные ресурсы. Поэтому я решил потихоньку рассказывать про F# в своем блоге, а теперь еще и на хабре, увидев замечательное сообщество стартап-программист. Поскольку F# — очень красивый язык, который никого не оставит равнодушным — я решил озаглавить цикл статей "влюбляемся в F#", а каждую из статей называть "дозой": по окончании их употребления вы должны будете подсесть на F#, а я буду мучительно эксплуатировать ваше терпение, делая вынужденные (из-за недостатка времени) перерывы между дозами.


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

Ruby on Rails шаг за шагом. #3 Контроллер и Вид

Время на прочтение5 мин
Охват и читатели21K
Итак, прошлый шаг мы закончили на том, что позволили RoR сгенерировать нам первое приложение test, на его базе мы и начнем знакомиться с возможностями фрэймворка. Как мы уже говорили, приложение RoR имеет строго определенную структуру, давайте посмотрим, для чего предназначены его папки:
Катимся по Рельсам дальше

Вычисление выражений на Nemerle и Mono.

Время на прочтение2 мин
Охват и читатели1.6K
За weekend на хабре появились три статьи по разбору математических выражений: Компилятор выражений, Парсер математических выражений и Вычисление значения выражения и один комментарий, в котором код на прологе по краткости и выразительности рвет примеры в этих статьях.

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

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

Покорим Ruby вместе! Капля одиннадцатая

Время на прочтение5 мин
Охват и читатели17K
Еще одна капля в наш стакан Руби (1, 2, 3, 4, 5, 6, 7, 8, 9, 10). Поговорим о self, работе с CSV и обработке исключений.

Описывая и обсуждая компьютерные программы, мы часто используем образные и человеческие метафоры. Например, мы говорим, что находимся в классе или возвращаемся из вызова метода. Иногда имеет смысл говорить во втором лице, например, object.respond_to?("x"): “Эй, объект, ты ответишь на х? И пока программа интепретируется контекст меняется снова и снова.

Некоторые объекты везде означают одно и тоже, например, числа и ключевые слова вроде def и class. Однако значение большинства элементов зависит от контекста.
Продолжаем

Осваиваем Python. Унция 2. Ветвления, циклы + практика.

Время на прочтение4 мин
Охват и читатели94K
image
Простые конструкции в языке Python: ветвления и циклы имеют свои особенности по сравнению с другими языками. Поэтому я всё же решил потратить на это время и рассказать. Материал совсем простой!
Так же по просьбам читающих добавил в конец статьи разбор простой программки для наглядной демонстрации пройденного материала.
Читать дальше →

Ruby on Rails шаг за шагом. #2 Рабочее место и первое приложение

Время на прочтение3 мин
Охват и читатели16K
На этот раз мы развернем «полигон» девелопера RoR, поговорим о gem, сгенерируем и запустим первое приложение.

Instant Rails


Установка рабочего комплекта для Windows максимально проста, а все из-за того, что один щедрый программист по имени Курт Хибс уже собрал для нас все необходимое для разработки приложений RoR в одном пакете под название Instant Rails. В пакеты собраны:
  • интерпретатор Ruby,
  • движки БД SQLite и MySQL,
  • веб-сервер Apache (который, собственно, нам не нужен…)
  • и сами Rails

Устанавливаем рельсы

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

Учимся C#. Ведро третье

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

Результаты отзывов


Про аудиторию


Так ка много комментариев было по этому поводу, то решил сделать последнюю попытку. Надеюсь на фидбек в комментариях — получилось «Для Всех» или нет.

Про книги


После прочтения комментариев решил опубликовать список книг, которые там рекомендовались:
C# 2008. Ускоренный курс
CLR via C#
C# и платформа .NET
C# 2.0. Полное руководство

Про разное


Были вопросы по поводу скорости Mono. на днях нашёл ссылку, на который есть небольшой тест. geekswithblogs.net
Тестирование проводилось на более ранних версиях, но я думаю ситуация не глобально изменилась. ИМХО

Ну а теперь давайте продолжим обучение…
Внутрь

Ruby on Rails шаг за шагом. #1 Теория

Время на прочтение5 мин
Охват и читатели56K
Ненадолго отставив серию статей о ЯП Ruby в сторону (1, 2, 3, 4, 5, 6, 7, 8, 9, 10), решил презентовать вам новый цикл о фрэймворке Rails. Набравшись некоторого опыта в «обучении» попробую вывести эту серию на уровень качества и продуманности несколько выше, чем прежде.

Целью первой части уроков по Ruby on Rails будет создание некоторого многопользовательского блога (аля Хабр). Также хочется отметить, что для этой первой части желательно иметь познание о Руби хотя бы на уровне трех-четырех капель. Хочется поскорей приступить к кодингу, но начинать все равно придется с теории.

Что такое Ruby on Rails (далее RoR)? Самый распространненый ответ – это базирующийся на ЯП Ruby (далее Руби) фрэймворк, который реализует шаблон (далее паттерн) MVC. Выделим два главных пункта из ответа:
  • Это фрэймворк на базе Ruby
  • Он реализует паттерн MVC
Разберем каждый отдельно.
Продолжаем

Осваиваем Python. Унция 1. Типы данных.

Время на прочтение6 мин
Охват и читатели85K
image
Продолжаю своё начинание. Данная статья является логическим продолжением первой. Было приятно читать ваши комментарии. Я надеялся, что данный цикл статей окажется для кого-то полезным, но совершенно не предполагал, что заинтересовавшихся будет довольно большое количество. Это заставляет относится к делу серьёзнее и ответственнее.
Без лишних слов, сразу к делу.
Читать дальше →

Познаём Java. Третья чашка: примитивные типы, и объекты. Базовые конструкции

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

Типа реальные типы


Думаю, после краткого экскурса в возможности Java и прочитывания пары десятков строк кода примеров, вам захотелось узнать, чем должен уметь оперировать каждый Java-программист. Что ж, давайте поговорим о примитивных типах, классах (в том числе нескольких основных), сравнении, передаче параметров и простых структурах в Java.
Поехали!

Учимся C#. Ведро второе.

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

Результаты отзывов


Немного о C# и *nix


Многих заинтересовало, как же можно писать на C# в *nix системах. Попробую помочь нашим друзьям. Существует проект Mono и вот, что нам говорит Википедиа:
Mono — проект по созданию полноценного воплощения системы .NET на базе свободного программного обеспечения.
Mono включает компилятор языка C# — mcs, среду исполнения .NET — mono (с поддержкой JIT) и mint (без поддержки JIT), отладчик, а также ряд библиотек, включая реализацию ADO.NET и ASP.NET. В рамках проекта также разрабатываются привязки для графической системы GTK+ на платформу .NET.
Среда исполнения mono может исполнять модули, написанные на языках C#, Visual Basic .NET, Java, Boo, Nemerle, Python, JavaScript, PHP и Object Pascal (при наличии компилятора в среду .Net/Mono). Ожидается также поддержка языков C, Ada 2005 и Eiffel.
Реализации Mono существуют для следующих операционных систем: GNU/Linux, Solaris, Mac OS X, Microsoft Windows и Unix.

И это говорит нам о том, что мы спокойно можем программировать практически в любой ОС на C#. Последний релиз Mono Project — 2.2. Mono Project — здесь вы сможете загрузить самую последнюю версию, а так же посмотреть документацию.
Так же есть ещё одна хорошая новость. У группы разработчиков Mono есть дочерний проект — MonoDevelop. Это бесплатная IDE для C# и ASP.NET. Она поддерживает все необходимые функции для успешной и быстрой разработки в *nix системах.

Что там дальше...

Познаём Java. Вторая чашка: собираем классы в кучки. Пробуем апплеты

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

Чем обусловлена структура Java?


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

Как происходит загрузка классов?


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

Оптимизация процесса создания unit-тестов

Время на прочтение6 мин
Охват и читатели5K
Всем привет! Хабраюзер shai_xylyd написал статью про аспекты тестирования, где им были рассмотрены некоторые понятия и ценности TDD. В частности, он упомянул очень интересный способ создания первичных юнит-тестов — когда функциональный код пишется совместно с кодом юнит-теста, чем меня очень заинтриговал.

Дело в том, что я (как программист), нахожусь в состоянии переходного процесса между «классической» разработкой и разработкой test-driven, поэтому всякими способами ищу возможности упростить и сделать более естественной последнюю. После пары приседаний, сразу включиться в методику shai_xylyd не сумел. Начал переписку с автором статьи, где он натолкнул меня на мысль подойти к решению с математической точки зрения. Идея в том, чтобы воспользоваться функциональным пространством среды программирования и «разложить» написание юнит-теста на составляющие. После чего сделать выводы.
Немного математики, а потом пример