Wednesday, July 2, 2008

Sellme.ru (2 сообщения)

 rss2email.ruНа что подписаться?   |   Управление подпиской 

  RSS  Sellme.ru

http://sellme.ru
рекомендовать друзьям >>


  • Windows Presentation Fiction

    Холивор!

    Комментарий к предыдущей заметке позабавил:

    :)) XAML'ий binding и мощнее и более ортогонален всему WPF. А тут любимая Apple'ая манера поведения: присобачить нарост сбоку и получившейся «фичей» внушать неофитам ощущение собственной значимости.

    Позабавил тем, что WPF, в отличие от фич Cocoa, которые основаны на отличной архитектуре, как раз и есть нарост сбоку.

    Сначала Microsoft выпустили WinForms. Через лет пять после выхода WinForms наконец-то стали появляться коммерческие приложения для конечных пользователей, написанные на нем (пришлось смириться с тем фактом, что в Windows XP не включен .NET runtime, заставили юзеров его качать). Википедия прекрасно объясняет проблемы с ним прямо в описании WinForms:

    While it is seen as a replacement for the earlier and more complex C++ based Microsoft Foundation Class Library, it does not offer a paradigm comparable to model-view-controller. Some after-market and third party libraries have been created to address this issue.

    Microsoft поняли это и спустя несколько лет предложили совершенно другой фреймворк с другими виджетами (в XP они ведут себя и выглядят совсем не как нативные) — Windows Presentation Foundation. MVC дошло! Ура! Удачи в переписывании ваших прог.

    Дайте-ка вспомнить, какие end-user проги самой Microsoft написаны с использованием WinForms… Щас… Ах, помню — Windows Live Writer — прога, которую в MS написал купленный ею Onfolio. Дайте подумать что еще… Не думается, но кажется, уже многие программисты переключились на WinForms. Ага? Все-таки этой технологии уже больше 5 лет. Ой, правда, теперь надо о ней забыть и писать на новом WPF. Посмотрим, какие проги Microsoft написаны с использованием Windows Presentation Foundation…

    Программа синхронизации Zune, наверное на ней написана, ведь там модный интерфейс, да и программа достаточно свежая — Zune не так давно вышел.

    As others have pointed out, much of the GUI is written with an assembly/API called «Iris» (UIX.dll). It’s managed code, and appears to be centered around web-oriented multimedia presentation. Why they’re using this instead of WPF is anyone’s guess.

    (источник)

    Упс. Нет, что-то другое.

    Whilst all of this is all well and interesting, the thing that really captures my attention is why they would invest so much time into developing this framework and implementing it just for [t]his software when they have plenty of alternatives like Windows Presentation Foundation (WPF) to work with. I can't stop wondering if this is going to become a new framework offering by Microsoft for all developers to use.

    (источник)

    Ну ладно. Посмотрим в википедии:

    WPF is intended to be the next-generation graphics API for Windows applications on the desktop. The following are some of Microsoft’s own products or other third-party mainstream applications written in WPF:

    • Microsoft Expression Design
    • Microsoft Expression Blend
    • Yahoo! Messenger
    • Nokia Music PC Beta
    • Clear Office Spreadsheet [2]
    • MuvUnder Cover: The Album Art Sleuth [3]

    Вау, программа редактирования файлов для WPF написана на WPF! Поразительно. А еще что? По-моему, я слышал, «Сапер» и «Косынка» в Vista написаны с использованием WPF. Упс, нет, оказалось неправдой:

    Q: Apparently the games use a custom framework and pure Direct3D. Are there any plans to take advantage of Windows Presentation Foundation, or is this planned for the next major version of Microsoft Windows?

    A: No plans at this time.

    (источник)

    Ладно, дадим Windows Presentation Foundation пять лет, все-таки хороший фреймворк. Главное, чтобы Microsoft, пока мы привыкаем к нему, не выпустила еще какой-нибудь другой…

    * * *

    Как же не везет программистам Mac OS X! У них нихрена нового нет. Их фреймворк, который нынче называется Cocoa, был написан в конце 80-х, сразу по правильной методике MVC и с правильным динамическим языком. Cocoa развивается с каждым выпуском операционной системы. У нее практически нет «теоретических» фич — Apple придумывает что-то для своих программ, а потом дает те же инструменты сторонним разработчикам. Надоело писать код для контроллеров, который повторяется в приложениях? Давайте добавим класс встроенных контроллеров. Язык и фреймворк позволяет. Все стали использовать SQLite для программ? А почему бы не взять и не обернуть его в удобный для использования API — Core Data?

    КАК ЖЕ СКУЧНО! Почему бы не придумывать новые фреймворки каждые 5 лет? Хрен с ним, что придется все переписывать.

    * * *

    Правильная база важна для любого дела, а особенно для программирования. NeXT выбрали отличную архитектуру, которая работает уже около тридцати лет и развивается дальше без «наростов сбоку» — Objective-C и NeXTStep/Cocoa.

    Конечно, и у Apple были свои грешки — устаревшие ныне (но работающие) фреймворки, но они позволили безболезненно перейти с одной на совершенно другую операционную систему с малыми затратами (я говорю про Carbon, который используют большинство продуктов Adobe и Microsoft для OS X, и Java/Cocoa bridge). Тем не менее, проблема выбора фрейморка, под который надо писать программы для Mac OS X теперь не стоит — Cocoa.

    .NET — хорошая штука. WPF, наверное, хорошая штука. Проблема в том, что сама Microsoft не торопится их использовать для своих же продуктов. Они написаны исходя из теоретических задумок. Я был на «Платформе-2007», где много показывали демо-программ на WPF: вот, смотрите, можно сделать программу с такими кружочками и с такими квадратиками. Это все замечательно, но где реальные программы для конечного пользователя? Где реальная поддержка этих всех чудес операционной системой?

    Newer versions of the framework (3.5 and up) are not pre-installed on any versions of the Windows operating system. Some developers have expressed concerns about the large size (around 54 MiB for end-users with .NET 3.0 and 197 MiB with .NET 3.5) and reliability of .NET framework runtime installers for end-users.

    (источник)

    Такая херня и возникает как раз из-за того, что программы, включенные в поставку ОС не написаны на фреймворках, которые рекламируются для сторонних программеров. И это тупо.


    Переслать  


  • Я люблю какао. Часть 2

    Ненавижу какао.

    Я люблю Cocoa, потому что в нем не надо писать код. Код вреден. Его потом придется читать. Он будет содержать баги. Долой код!

    Сейчас покажу, что я имею в виду.

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

    Задача:

    Сделать окно (sheet) для дополнительных настроек, на котором будет:

    • возможность выбрать папку;
    • два чекбокса с полями для ввода цифр; при активации/деактивации чекбоксов соответствующие поля ввода должны разрешать/запрещать ввод; в первое поле можно ввести только целое число больше 1, во второе — целое или дробное положительное число;
    • две кнопки: Cancel для закрытия окна без сохранения изменений и Done для закрытия окна и сохранения изменений;
    • настройки должны читаться из и сохраняться в файл настроек приложения (~/Library/Preferences/com.codingrobots.AppName.plist).


    (Про Use Defaults я расскажу в отдельной заметке.)

    Как это обычно бывает, сначала я начал все делать через ж… (привычка из виндового прошлого). Я начал с написания кода. Очевидно, при нажатии на кнопку открытия окна надо загрузить все настройки из файла (NSUserDefaults нам в этом помогает, с файлами не надо работать) в контролы на окне. Потом написать код для enable/disable полей ввода при нажатии на соответствующие чекбоксы. И не забыть, что в поля можно вводить только особый вид данных (ну ладно, тут NSNumberFormatter можно кинуть на поле). При нажатии на Done надо взять из контролов данные и запихнуть их в NSUserDefaults и убрать окно. Cancel, конечно, должен просто убрать окно. Так я и сделал. Код занимал полтора-два экрана (в 1050 пикселей).

    Потом я подумал. И сократил код до одного экрана.

    Потом я подумал еще, покликал в Interface Builder’е и получил вот такой код:

    nonImmediateUserDefaultsController (NSUserDefaultsController) — это такая штука в IB (которую я перетащил из палитры), к которой прибайндены все контролы.

    Все это благодаря отличной имплементации MVC (Model-View-Controller) в Cocoa. Models — это данные, views — это окна и все остальное, что рисуется в Interface Builder, controllers — это код, который мы пишем для связывания данных и интерфейса. Задача Apple — убрать код. Код для views убирается Interface Builder’ом — мы рисуем в нем окошки и контролы. Код для models убирается использованием NSUserDefaults в данном случае и Core Data в Mémoires. Код для controllers убирается использованием встроенных контроллеров: NSUserDefaultsController, NSObjectController, NSArrayController, NSTreeController и прочих. С каждым новым релизом Cocoa нам надо писать все меньше и меньше кода.

    Кстати, если бы нам не нужно было закрывать окно при нажатии на кнопки (странный случай), либо настройки надо было бы обновлять сразу, без нажатия Done (нормальный случай), то код вообще не надо было бы писать.

    Таким же образом в Cocoa не надо писать код для управления окнами, для вызова Open и Save диалогов при нажатии на соответствующие пункты меню… ну и вообще, многое просто «дано» (и это совсем не значит, что ничего нельзя поменять).

    Cocoa makes easy things easy and hard things possible.


    Переслать  





rss2email.ru       отписаться: http://www.rss2email.ru/unsubscribe.asp?c=2631&u=64294&r=460986641
управлять всей подпиской: http://www.rss2email.ru/manage.asp

No comments: