Какао-наблюдения

С одной стороны, программировать под Мак — в удовольствие: тут нет такой жести, как в Винде, когда какая-нибудь функция возвращает указатели на структуру из 18 указателей, половина из которых указывает на массивы структур других указателей, или когда, наоборот, ссылку на такую структуру нужно передать в качестве одного из 8 параметров какой-нибудь функции, чтобы она в неё же запихала результат (а все остальные параметры сделать NULL, потому, что понять по документации, что они значат, невозможно).

Вот понадобилось мне на днях изменить шрифт в текстовом поле. Код угадал, не глядя в документацию (автозаполнение помогло, конечно); заработало с первого раза:

[textView setFont:[NSFont fontWithName:@"Arial" size:20]];

Что касается setFont:, то я просто предположил, что такой метод может быть, начал писать set..., и выбрал из списка setFont:, у которого единственный параметр — экземпляр класса NSFont. Как сделать нужный NSFont — угадывается по аналогии: очень часто названия конструкторов начинаются с типа создаваемого объекта, например у NSString есть конструктор stringWithContentsOfFile:encoding:error:, который возвращает содержимое файла; у NSArray есть конструктор arrayWithObjects:, который возвращает массив с переданным набором объектов; а у NSColor есть конструктор colorWithCalibratedRed:green:blue:alpha:, который, как нетрудно догадаться, возвращает цвет с заданными R, G, B и непрозрачностью с учётом каких-то цветовых профилей.

С другой стороны, эпловская терминология местами разрывает мозг. Иногда невозможно по три часа найти что-нибудь в документации просто потому, что ты ищешь, например, keyboard layout, а надо искать text input source.

Дальше
36 комментариев
bes island 2009

Программируют на языке программирования, а не «под Мак» или «в Винде».

Высказывание: «С одной стороны, программировать на Ruby — в удовольствие: тут нет такой жести, как в Цэдвакреста» имеет смысл.

Высказывание: «С одной стороны, программировать под Мак — в удовольствие: тут нет такой жести, как в Винде» заставляет крепко задуматься, что же имел в виду автор. Первая мысль, которая пришла в голову мне — имеется в виду удобство интерфейса интегрированной среды разработки или что-то в этом роде.

Илья Бирман 2009

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

Артем К. 2009

Пишут с использованием некого АПИ. А предоставляется он библиотеками, которые в свою очередь могут входить в состав конкретной операционной системы или языка программирования. Так, например, ничто не мешает писать с использованием стандартной библиотеки Си и какой-нибудь там glib в Винде, в Маке, и в огромном множестве других ОС. Код же при этом в целом будет одинаков с точностью до различий в реализации библиотек.

Илья Бирман 2009

В километре 1000 метров. Москва — столица России. Земля вращается вокруг Солнца. В анлийском алфавите 26 букв.

Артем К. 2009

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

Сергей Каминский 2009

А вот приведенный фрагмент кода — это какой язык программирования?

Илья Бирман 2009

Objective C

Вячеслав Ильинский 2009

keyboard layout, а надо искать text input source — от чего возникают такие долгие поиски? От того что в момент поиска нужно думать на английском?

Илья Бирман 2009

Думать на английском для меня не проблема.

Долгие поиски возникают, как я написал в заметке, оттого, что «эпловская терминология местами разрывает мозг».

Вячеслав Ильинский 2009

Почему они пишут так и не иначе вот это интересно =) Вспомнил пост про «Лучше быть правым чем последовательным».

Андрей Писков 2009

Вы не правы, говоря о системе, из под которой ведется разработка :)
«…Что касается setFont:, то я просто предположил, что такой метод может быть, начал писать set..., и выбрал из списка setFont:, у которого единственный параметр — экземпляр класса NSFont. Как сделать нужный NSFont…»
Очень напоминает слова любого программиста пересевшего на c си на .NET (C#, например).

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

Поэтому, как программист, скажу Вам: пост получился неграмотным. Винда или макось здесь абсолютно не при чем.

Илья Бирман 2009

Неграмотным у вас получилось выражение «не при чём» — оно пишется через «ни».

Расскажите мне, как писать на Си-плюс-плюсе и ВинАПИ нативные приложения под Мак или, ещё лучше, как писать на Objective-C и Какао нативные приложения под Виндоус, а уж потом заявляйте, что тут при чём, а что — ни при чём.

Андрей Писков 2009

p.s. прошу прощения за очепятки («среде разработке» и т. д.) — пост набирался с использованием предикативной системы ввода.

Дмитрий Г. 2009

Ммм, ну сверху уже сказали, многое зависит от платформы. Когда программируешь под .NET, всё ещё проще.

Нету геттеров и сеттеров кстати. А у большинства объектов есть конструкторы. То есть, знай я, что мне нужен некий объект Font, я напишу

new Font(

и там уже суджест скажет мне, есть ли параметры, и т. п. А если нет конструктора, то это видимо абстрактный класс: залезаю в обжект эксплорер, нахожу его дочерние классы, выбираю нужный и вуаля.

Павел Малинников 2009

2 #7 Андрей Писков:

причём здесь язык программирования и среда разработки?
Невооружённым глазом видно, что речь в заметке идёт о различиях в идеологии API Винды и Макоси.

Владимир 2009

Что означает термин «Возвращает»? =)

Илья Бирман 2009

Ну, создаёт и возвращает, ок.

Андрей Писков 2009

2 №10 Павел Малинников

а по-моему невооруженным глазом видно, как происходит расписывание интуитивности ввода («…я просто предположил, что такой метод может быть, начал писать set...…») и отсутствия жестких фукнций. При этом всё это приписывается именно мак оси («…программировать под Мак — в удовольствие: тут нет такой жести, как в Винде…») и в этом главная ошибка.
Раз уж Вы заговорили об API, вспомним о Windows Presentation Foundation (та графическая API, посредством которой сейчас происходит разработка интерфейсов под винду). Что может быть проще и интуитивнее этого (взял пример, подобный описанному Ильей — установка аттрибутов шрифта + добавил bold):
<TextBox FontFamily=«Arial» FontSize=«20» FontWeight=«Bold»>Текст в текстбоксе</TextBox>

Или, если не XAML виде, а посредством кода C#:
TextBox t = new TextBox();
t.FontFamily = new FontFamily(«Arial»);
t.FontSize = 20;
t.FontWeight = FontWeights.Bold;

Куда проще, нежели: «[textView setFont:[NSFont fontWithName:@»Arial» size:20]];» Не находите?

bes island 2009

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

Что же касается моего замечания, вызвавшего столь неадекватную реакцию, попробую немного детализировать (если, конечно, это имеет какой-либо смысл). Вы употребляете некие термины «программировать под Мак» и «программировать в Винде». Эти термины не являются однозначными. Я не знаком с «Маком» в сколько-нибудь достаточной степени, чтобы говорить предметно и уверенно, поэтому скажу о втором термине.

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

Операционную систему запишем под буквой Г.

Все эти факторы в большой степени являются независимыми. Можно программировать на PHP (фактор А), используя Zend Framework (фактор Б), Eclipse (фактор В) и «Винду» (фактор Г). Можно запустить Eclipse в «Линуксе» и, таким образом, изменить только один фактор Г — операционную систему; в результате уже нет «Винды», но впечатление от процесса программирования изменится минимальным образом, поскольку влияние первых трёх факторов в данном конкретном наборе имеет значительно больший вес.

Да, программировать под «Линуксом» удобнее, чем под «Виндой» — например, потому что в «Линуксе» можно сделать `tail -f debug.log`, а в «Винде» придётся мучиться. Но это настолько несущественная мелочь, что говорить, будто первый вариант чем-то отличается от второго с точки зрения программиста, работающего над поставленной задачей, как раз и будет ахинеей.

Вы программируете на PHP — да, это уже многое означает. Вы программируете под Zend Framework — возможно, ещё большее. Eclipse значение имеет небольшое. А «Винда» или иная операционная система — и того меньше.

Пусть вы программируете на языке, который существует только для «Виндоус»; используя библиотеки, которые существуют только для «Виндоус»; в среде разработки, которая существует только для «Виндоус»; и, само собой, на компьютере под управлением «Виндоус». Программируете ли вы «в Винде»? Да. Является ли это главной причиной различий между этой ситуацией и аналогичной с заменой «Виндоус» на «Mac OS X»? Нет. Функции, которые возвращают указатели на структуру из 18 указателей, половина из которых указывает на массивы структур других указателей, имеют источником своего существования используемые библиотеки; само существование понятий «указатель», «массив», «структура» зависит от используемого языка; автозаполнение помогает вам только в том случае, если вы используете среду разработки с функцией автозаполнения.

Если вы считаете, что программировать на Objective C удобнее, чем на C++, так и скажите. Если вы считаете, что программировать под Cocoa API удобнее, чем под Windows API, так и скажите. Если вы считаете, что программировать в Xcode удобнее, чем в Visual Studio, так и скажите. Но если вы объединяете все эти различия под ярлыками «под Мак» и «в Винде», это, извините, выдаёт в вас профана.

Илья Бирман 2009

Проявите внимательность: я пишу «программировать под Мак», а не «на Маке». Под Мак программируют в Икскоде и использованием Какао; как правило — на Objective C. Под Виндоус программируют в разных средах (Делфи, Визуал-студия) с использованием ВинАПИ на Си-плюс-плюсе.

Это как бы значения по умолчанию. Если бы под Виндой я имел в виду .НЕТ, или бы использовал какой-нибудь фреймворк для ПХП, естественно, я бы об этом сказал.

Я пробовал и то, и другое, а вы про одно из этого ничего не знаете, зато называете меня профаном. Это классно. Я, в общем, монстром программирования себя нигде не называл, а лишь написал о своих ощущениях.

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

Саша Смирнов 2009

Да видно же, что автор «Какао-наблюдения» небеспристрастен! А так-то да, можно и в DOS’е всё делать!

Стас 2009

Не все так страшно в винде :)

Антон 2009

приходилось программить и под маком (cocoa), и под виндой (MSVC«»++»»)... и, да, разница в терминологии моск разрывает))

но — присоединяюсь к вышесказанному, термины «под маком» и «под виндой» не вполне корректны. под винды, например, есть разные среды разработки; переходишь с Delphi на Microsoft C««++»» — и моск точно так же идёт лесом.

Илья Бирман 2009

ВинАПИ от перехода из одной среды в другую не изменяется.

Павел Малинников 2009

2 #12 Андрей Писков:

Куда проще, нежели: «[textView setFont:[NSFont fontWithName:@„Arial“ size:20]];» Не находите?

я вообще не нахожу причин вспоминать «нет»-фреймворк, когда речь идёт о Win32 API. Упоминаются «указатели на структуры» — так зачем вы приплели сюда WPF? Нет повода упоминать здесь о нём.

Не говоря уже о том, что вопрос «где проще» я не поднимал.

Андрей Писков 2009

Павел, вы мысли, что ли, Ильи читаете? Он разве что-то сказал про Win32 API? Единственным человеком, упоминувшем его являетесь вы.
Илья использует Cocoa, хотя в Mac OS есть еще другие API: джава и карбон (+ посикс, как наследие юникс). Аналогично и под Windows есть куча wrapper’ов и .NET один из них.
Вы же пытаетесь отослать меня к технологии, появившейся еще в NT 3.1. Технологии, которую напрямую никто давно не использует.

Илья говорил о «жести, как в Винде», я лишь привел пример, являющийся доказательством отсутствия подобной жести на «планетарном» уровне. Контрпример, показывающий, что его слова, как минимум, некорректны. + Bes island все сказал. И сказал правильно. Что к этим словам можно еще добавить, я не знаю.

Илья Бирман 2009

Можно ещё на ПХП писать приложения под Винду, да. Наверняка я это и имел в виду.

Павел Малинников 2009

2 #18 Андрей Писков:

если словосочетание «указатели на структуры» вам ни о чём не говорит, я тоже не знаю, что ещё можно добавить.

Павел Малинников 2009

2 bes island:

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

Павел Малинников 2009

сейчас набегут 1С-ники и другие с «планетарного» уровня и скажут, что они программируют «под Винду» и никаких указателей там нету!

Сергей Даровских 2009

Бугага, программер-срач :)

Alex Pen 2009

С другой стороны, эпловская терминология местами разрывает мозг.
Иногда невозможно по три часа найти что-нибудь в документации просто потому,
что ты ищешь, например, keyboard layout, а надо искать text input source.

Довольно стандартный комментарий :-)
Всё дело привычки. К примеру связка C++/MCF или Java изучаются раньше по-причине большей распространённости и вследствии играют роль точки опоры для сравнения. Cocoa довольно сильно отличается от этих «принятых стандартов». Framework этот надо один раз прочувствовать — использовать скажем полгода-год. После этого «стандарты» кажутся (местами) сплошным уродством.

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

bes island 2009

«Под Виндоус программируют в разных средах (Делфи, Визуал-студия) с использованием ВинАПИ на Си-плюс-плюсе» — бред. Я могу программировать на Borland Pascal с использованием VCL в среде Delphi. А могу — без среды Delphi. Могу программировать с использованием Qt на Python. Или с использованием GTK на PHP. Или на PHP, но без GTK. И ещё множество вариантов. Ни в одном из которых я никоим образом не касаюсь ни WinAPI, ни C++ и в глаза их не вижу. И среда разработки тоже особого значения не будет иметь.

Илья Бирман 2009

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

bes island 2009

«Сравнивать языки программирования в отрыве от ОС и среды разработки, бессмысленно — невозможно, не зная круга задач, оценивать инструменты для их решения» — бред. PHP и Ruby, например, отлично сравниваются вне всякой зависимости как от ОС, так и от среды разработки.

От круга задач, конечно, зависит сильно. Но круг задач не представляет из себя совокупность ОС и среды разработки.

bes island 2009

2 Павел Малинников

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

Так это я и называю «мучиться»: ради просмотра журнала ставить FAR Manager, который я терпеть не могу.

bes island 2009

«Можно ещё на ПХП писать приложения под Винду, да» — если на компьютере под управлением Windows установлен, например, сервер Apache с PHP и я веду разработку приложений для этого веб-сервера, то это я пишу приложение на «ПХП» под «Винду», да.

Или вы считаете, что «писать приложения под Винду» обязательно означает какие-то окошечки?..

Хотя да — и ещё, конечно же, WinAPI и C++ в обязательном порядке. Хоть бы даже в среде Delphi.

bes island 2009

Илья, по-моему, из нас двоих непробиваем не я. Четыре человека сообщают вам, что вы употребили неграмотную терминологию — вы же продолжаете утверждать, что правы, без малейших проблесков понимания.

Саша Смирнов 2009

Предложу тезис „«планетарного» уровня“ (#21): бесит встроенная функция — пиши свою.

Вячеслав Ильинский 25 апреля 2009, 18:33
Почему они пишут так и не иначе вот это интересно =) Вспомнил пост про «Лучше быть правым чем последовательным»

А чей это пост и где он? Наверняка лучше (полезнее) себя правым чувствовать!

Павел Малинников 2009

А мне, когда я читал заметку, сразу стало понятно, что речь идет о Windows SDK. Какие разночтения могут быть, когда говорится о структурах, указателях, NULL’е?

Было бы это какое святое писание, где каждый по-своему толкует, так нет, сам автор заметки говорит, да, имел в виду ВинАПИ.
Так на тебе — из песочниц показались желающие доказать самим себе, что они не внутри фреймворков совочком играют и куличики лепят, а самые настоящие экскаваторщики и строители, пишут «под Винду» (*«под Винду» — это такая терминология, знаете ли).

Если я пишу что-то в текстовый файлик .php, я не пишу под винду. Я пишу инструкции, понятные программе php.exe, вот она-то написана под Винду. Этот же текстовый файлик я несу на линукс и это будет инструкция для местного php, вот он написан под линукс.

Если у меня есть софтина, собранная под палм и винмобайл, а внутри Lua скриптинг, то я всем рассказываю: «Вот это я сейчас писал на Луа под винмобайл. А вот это — под пальму». Под софтину свою я писал, а её уже — под пальму, винду и андроид.

Java, 1С и прочий НЕТ!-фреймворк— нужно повторять?

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

Гагау&#769;з Евгений 2009

А вот если писать используя библиотеку QT (http://www.qtsoftware.com/) то, что получается? Что программа пишется под Windows, Linux или MacOS? Скомпилировать-то её можно будет где угодно и выглядеть она будет одинаково.

Гагауз Евгений 2009

Кхм, оффтоп.
Сайтик не поддерживает диакритические знаки :(, что особенно заметно в моём имени в предыдущем посте, где я хотел явно указать ударную букву фамилии.

Саша Смирнов 2009

Павел Малинников 27 апреля 2009, 01:41
В общем, впечатление такое, что защищенность от понимания сути вещей прямопропорциональна толщине подложенных под жопу врапперов.

А что ежели так: суть вещей описуема ЛИШЬ в терминах их оболочек?!

bes island 2009

Павел, скрипт на PHP вовсе не обязан быть кросс-платформенным. Если я в коде оперирую такими конструкциями, как chdir(«C:\Documents and Settings») и win32_create_service(), с большой степенью точности можно сказать, что да, я пишу для Windows; напротив, если в коде встречаются вызовы symlink(), то, наверное, это никак не для Windows.

То, что автор заметки уточняет, что он имел в виду вовсе не «под Мак», а «Objective-C и Какао»; и не «в Винде», а «в разных средах (Делфи, Визуал-студия) с использованием ВинАПИ на Си-плюс-плюсе» (конечно же, происхождение ошибки было достаточно очевидно с самого начала, что нисколько её, ошибку, не оправдывает) — очень хорошо. То, что он вместо того, чтобы сделать это уточнение после первого же аргументированного замечания, продолжает утверждать, будто первоначальный вариант корректен, позволяя себе при этом неадекватные выпады в адрес комментаторов, — очень плохо.

Ийон 2009

Илья выразился корректно. Если программист думает, что можно писать программы под какую-то систему, не используя функционал (и не зная особенности) этой системы, это означает, что он плохой программист.

bes island, если хочешь доказать свою правоту, назови общеизвестные программы, у которых в исходных кодах (не библиотечных) не использовалось WinAPI :)

A!e% 2009

Ух ты, как интересно-то. Мне вот любопытно, сколько людей здесь писали и под Ruby и под Objective C и под C# и под C++?
А интерпретация твоих слов в комментариях «Илья выразился корректно»… ммм, великолепно.

/пошел дальше программить на Objective C, C# и Java попеременно/

Илья Бирман 2009

Я не понял, что ты хотел сказать :-)

Мои книги