[11:39:36] <_valexey_> vlad2: зато на оборонкоре опять битвы за цикл дейкстры :-)
[11:39:57] <_valexey_> На этот раз с драконоидами.
[18:04:24] <vlad2> Угу :)
[18:04:53] <vlad2> Апл выпили поддержку питона из 4-го икскода в пользу угадай кого!
[18:05:27] <vlad2> Так что продолжаю и дальше сидеть на старом девелоперском софте.
[18:05:45] <vlad2> Хорошо, что хоть от адлиба удалось избавиться.
[18:06:50] <vlad2> Причем не просто выпили (фиг с ним), а так, что даже ручками нельзя ничего сделать (прописать кастомные receiver actions)
[18:07:42] <vlad2> Тышов меняет тактику :)
[18:08:04] <vlad2> Пожил на оборонкоре, научился "общаться" :)
[18:22:39] <valexey> в пользу кого?
[18:22:46] <valexey> objc там и так был же
[18:23:51] <vlad2> objc же ш! И только он!
[18:24:29] <valexey> а какая там была до того поддержка?
[18:24:29] <vlad2> Апл чем-то похож на M$ с дотнетом.
[18:24:55] <vlad2> "у нас классная платформа, под нее можно писать на чем угодно. Вот на питоне например."
[18:25:03] <vlad2> Смотришь - и правда все круто.
[18:25:11] <vlad2> А потом выходит новый икскод - и все.
[18:26:26] <valexey> то есть можно было нативные приложения для какавы на питоне писать?
[18:26:39] <valexey> искаробочно
[18:27:08] <vlad2> И сейчас можно. Причем реально просто. Я буквально за день разобрался, хотя до этого ни в зуб ногой в этой кокоа.
[18:27:53] <vlad2> Просто в новом икскоде с "интегрированным ибилдером" нельзя биндинги прописывать, потому что !@#$ он их выковыривает напрямую из *.m которые в проекте и больше никак.
[18:28:12] <vlad2> Типа "теперь икскод стал еще удобнее".
[18:28:24] <valexey> Ж-)
[18:28:34] <valexey> видимо питон никому не нужен
[18:28:39] <valexey> статистически под макосью
[18:28:50] <vlad2> поправка: эплу - не нужен
[18:29:09] <vlad2> питон в 99% случаев лучше обжективС.
[18:29:17] <vlad2> Особенно для гуев и кокоа.
[18:29:48] <valexey> не. статистически - разработчикам. наврятли они стали бы выпиливать питон если бы значимый процент софта для макоси был бы писан на нем.
[18:29:57] <vlad2> Потому что это нормальный динамический xpsr под динамический фрэймворк.
[18:30:34] <valexey> гы. я теперь буду называть питон не языком, а xpsr - вполне точно отражает его сущность :-)
[18:30:45] <vlad2> Блин. Эплу пофиг. Начем с того, что обжективС вообще нахрен никому не сдался - эппл его пушнул в лучших традициях проталкивания непроталкиваемого.
[18:31:24] <valexey> да ладно. его пушнул NeXT :-)
[18:31:46] <valexey> не переписывать же им было весь NeXT целиком под богоудоные кресты?
[18:31:56] <valexey> "Прошу Вас, как координатора, удалить свое сообщение." - тонко!
[18:32:21] <vlad2> У джобса зачесалась левая пятка или еще что. Взять нормальный язык нельзя было - слишком попсовов.
[18:32:38] <valexey> ну а какой выбор был в конце 80-х?
[18:32:55] <valexey> С++ без стандарта, шаблонов и вообще с жестью и содомией в реализациях?
[18:32:59] <valexey> паскаль?
[18:33:22] <vlad2> Дык, вся эта херня с обжективС начала проталкиваться в 2000. Тогда уже было из чего выбрать.
[18:33:50] <vlad2> В смысле я _за_ то, чтоб кокоа писалась на обжективС.
[18:34:04] <valexey> тогда уже не было. тогда яббл заглотнул NeXT, и все переписывать на чем-то другом дорого и хреново
[18:34:05] <vlad2> Но аппликэйшины (в массе) - это идиотизм.
[18:34:15] <valexey> а на чем же аппликейшины в массе писать?
[18:34:18] <vlad2> питон
[18:34:22] <valexey> ой, нет.
[18:34:30] <vlad2> самое то для кокоа
[18:34:51] <valexey> каждая по отдельности софтинка ничего. но в сумме - жуткое тормозилово получается
[18:34:54] <vlad2> Если ты крутой девелопер и понимаешь, что питон тебя не устраивает - пиши на чем хочешь.
[18:35:05] <vlad2> Просто "дефолт" должен был быть питон.
[18:35:40] <vlad2> В смысле те же системные приложения (файндер и т.д.) пусть пишут на чем-нибулдь более правильном.
[18:35:53] <vlad2> Но хомячки по дефолту должны писать на питоне.
[18:35:57] <valexey> тогда по умолчанию система будет жрать в полтора-два раза больше оперативы и работать медленнее раз в несколько. см тот же линух с гномом
[18:36:32] <valexey> какой-нибудь банальный значог в трее - 8 метров ОЗУ.
[18:36:44] <valexey> точнее недовиджет. с нулем графики.
[18:36:46] <vlad2> Я виже как работает xcode ;) Хоть он и не на питоне. И как работает сублим ;)
[18:36:51] <valexey> а таких там сидит десяток.
[18:37:06] <valexey> а сублим не на питоне :-)
[18:37:19] <valexey> там основная часть писана на cях/objc
[18:37:23] <vlad2> F ты не сажай в трэйй всякий трэш ;) С таким подходом у тебя всегда система будет тормозить.
[18:37:30] <valexey> плагины да, пишутся на питоне.
[18:38:03] <valexey> а там ВСЕ что сажается в трей пишется в основном на питоне. ибо это дефолт-язык и хомячки иное ниасилили.
[18:38:11] <vlad2> Не, ну ты видел чего они пишут на обжектив С? Если погуглить?
[18:38:15] <valexey> чтобы хоть как-то с этим бороться сейчас они пытаются продвинуть vala
[18:38:16] <vlad2> Это ж содом.
[18:38:41] <valexey> хто?
[18:38:47] <valexey> что?
[18:38:52] <valexey> :-)
[18:39:09] <vlad2> Ну я пока искал, что мне надо (на книжку конрмальную по кокоа как всегда нет времени) - столько говна увидел.
[18:39:48] <valexey> ну, это если взять любой популярный язык, то можно увидеть тонны говна
[18:40:10] <valexey> собственно даже на хаскелле появились говнобыдлокодеры.
[18:40:13] <vlad2> Дык, на питоне такого говна будет меньше по объему :)
[18:40:26] <valexey> ибо хаскелл относительно популярен.
[18:40:32] <vlad2> И это говно будет с правильным форматированием :)
[18:40:50] <valexey> ну, такое правильное форматирование не всегда правильно :-)
[18:41:55] <valexey> кстати, я вроде бы решил для себя проблему с обработкой ошибок :-)
[18:42:49] <vlad2> Дык, просвети народ ;)
[18:42:53] <valexey> http://cdn.imghack.se/images/84f71e859e0e2b41272c8cc09cb1db7b.png
[18:42:57] <valexey> вот как-то так
[18:43:16] <valexey> логика слева, обработка ошибок тупо справа :-)
[18:43:30] <valexey> в питоне так не получиццо :-D из за гарантированно "правильного" форматирования
[18:44:52] <vlad2> На да, вроде ниче :)
[18:45:01] <vlad2> На питоне есть исключения ;)
[18:45:15] <valexey> ну, тут тоже есть паника.
[18:45:27] <vlad2> Не говоря о дектораторах ;)
[18:45:40] <valexey> то есть семантически наверное это одно и то же - тот же раскручивающийся стек, и тоже можно перехватить.
[18:46:11] <valexey> но оно все же для другого используется. то есть не хочется лепить совсем альтернативно одаренную прогу.
[18:46:33] <valexey> нужно хоть какую-то совместимость с другими программистами, которые привыкли к дефолтному стилю языка, сохранить.
[18:46:53] <vlad2> Кстати, а че они в гайдах пишут про обработку ошибок?
[18:47:10] <valexey> да ничего толкового.
[18:47:33] <valexey> самое крутое - заверните код в функцию.
[18:47:48] <valexey> то есть весь код. и логику и обработку ошибки.
[18:48:21] <vlad2> Кстати, а как насчет своего препрооцессора? :)
[18:48:47] <valexey> ненене. нах-нах.
[18:49:07] <valexey> ну, то есть это относительно просто сделать… но вот потом…
[18:49:24] <valexey> для начала придется обучить каждую ide этому препроцессору
[18:49:31] <valexey> потом придется ему обучить дебаггер :-)
[18:49:50] <vlad2> Который бы вставлял if fail(err) return err в нужные точки.
[18:50:04] <vlad2> Причем на количество строк не влияло бы.
[18:50:15] <valexey> я конечно крут, но не настолько :-)
[18:50:33] <vlad2> err := f(); // checked
[18:50:51] <vlad2> "// checked" разворачивается в if fail...
[18:51:31] <valexey> ну, тут на самом деле нюансы есть. функция fail в общем случае для разных условий будет разная.
[18:51:44] <valexey> кроме того, в некоторых случаях нужно не просто return делать, но возвращать что-то.
[18:52:10] <vlad2> Короче, на самом деле надо просто сделать исключения.
[18:52:22] <valexey> можно конечно построить хм… фреймворк для обработки ошибок, с препроцессором который по анотациям и контексту будет генерить то что надо…
[18:52:22] <vlad2> Там что-то есть, что пнринципиально мешает исключениям?
[18:52:32] <valexey> но по моему, дешевле вот так как я сейчас :-)
[18:53:06] <valexey> да ничего не мешает. говорю же - они ЕСТЬ. это паника. (panic).
[18:53:29] <valexey> активно это использовать мешает философия языка - все стандартные либы возвращают код ошибки а не вызывают панику
[18:53:48] <valexey> то есть для использования "исключений" тебе придется обернуть ВСЕ стандартные либы. а их МНОГО
[18:54:04] <vlad2> Ну мало ли... философия... сишная (даже плюсовая) библиотека тоже исключениями не балует
[18:54:19] <vlad2> Не говоря о всевозможных API
[18:54:42] <valexey> но если очень-очень чешется и своего кода много больше чем либ стандартных, то никто не мешает паниковать по поводу и без :-)
[18:56:10] <valexey> а доки и мануалы предлагают вот так бороться с множественными if'ами: http://golang.org/doc/articles/error_handling.html
[18:59:41] <valexey> ну, сразу ответ нарисую. короче было так:
[18:59:52] <valexey> func viewRecord(w http.ResponseWriter, r *http.Request) {
   c := appengine.NewContext(r)
   key := datastore.NewKey(c, "Record", r.FormValue("id"), 0, nil)
   record := new(Record)
   if err := datastore.Get(c, key, record); err != nil {
       http.Error(w, err.Error(), 500)
       return
   }
   if err := viewTemplate.Execute(w, record); err != nil {
       http.Error(w, err.Error(), 500)
   }
}
[18:59:59] <valexey> а после их рефакторинга стало так:
[19:00:20] <valexey> func viewRecord(w http.ResponseWriter, r *http.Request) *appError {
   c := appengine.NewContext(r)
   key := datastore.NewKey(c, "Record", r.FormValue("id"), 0, nil)
   record := new(Record)
   if err := datastore.Get(c, key, record); err != nil {
       return &appError{err, "Record not found", 404}
   }
   if err := viewTemplate.Execute(w, record); err != nil {
       return &appError{err, "Can't display record", 500}
   }
   return nil
}
[19:01:03] <valexey> можно отрефакторили? :-)
[19:01:33] <valexey> *мощно
[19:02:15] <valexey> гм. причем у них походу ошибка закралась в процессе рефакторинга :-)
[19:02:27] <valexey> либо до нее.
[19:02:36] <valexey> см. замену 500 на 404
[19:16:19] <valexey> vlad: я там тебе на пальцах описал про прочность :-)
[19:16:26] <valexey> не вдаваясь в механику сплошных сред :-)
[19:39:14] <vlad2> ^)
[19:39:40] <vlad2> Все равно у меня пока не укладывается физический смысл прочности.
[19:40:40] <valexey> а нет никакой прочности :-)
[19:40:53] <valexey> то есть такого единого абсолютного понятия :-)
[19:41:04] <vlad2> Должно быть какое-то свойство, которое определяет изначальное соотношение между достаточно прочным маленьким телом и непросным большим.
[19:41:23] <valexey> а неа. зависит от внешнего воздействия
[19:41:53] <valexey> например это мы еще не брали в рассчет неоднородное гравитационное (или, если штука железная - магнитное) поле :-)
[19:42:42] <valexey> это примерно как требовать общее свойство "быстродействие" алгоритма.
[19:42:57] <vlad2> Ну вот другой пример. Возьмем иглу и промасштабируем ее (используя ту же марку стали) до толщины фонарного столба. Она ж будет прогибаться под собственным весом. А оригинал - нет.
[19:42:57] <valexey> в отрыве от структуры данных, памяти, процессора и вообще всего остального
[19:43:55] <vlad2> Все силы остались те же. Поменялся только масштаб.
[19:43:57] <valexey> зато при этом оно выдержит много бОльшую внешнюю нагрузку. то есть если засунуть её в невесомость, защемить один конец и начать прилагать силу к другому концу.
[19:45:12] <valexey> причем в каком направлении силу не прилагай - один фиг такой фонарный столб выдержит много больше чем игла.
[19:45:36] <valexey> теперь вопрос - оно стало прочнее или нет? :-)
[19:45:45] <vlad2> Больше. Но не настолько больше, насколько длиннее стала игла.
[19:45:56] <vlad2> Т.е. прочность уменьшилась.
[19:46:10] <valexey> именно настолько. ведь длиннее она стала в l раз :-)
[19:46:16] <valexey> зато масса увеличилась в l^3
[19:46:52] <valexey> поэтому фонарные столбы и вообще подобного рода конструкции делают полыми внутри - полезную нагрузку при таких воздействиях тащит только оболочка-поверхность
[19:47:25] <vlad2> Хорошо. Зайдем с дрпугой стороны. Какой толщины должна быть оболочка. Чем это определяется.
[19:47:28] <valexey> зато если попробовать в такой столб стрельнуть или просто кувалдой долбануть, то оно переживет это много хуже чем такой же но только без полостей
[19:48:11] <valexey> какой должна быть оболочка зависит от того, что ты с ней собираешься делать :-)
[19:48:21] <valexey> то есть какие предельные деформации тебе грозят
[19:48:42] <valexey> и насколько идеальна форма твоей иглы
[19:48:54] <vlad2> Допустим, я не собираюсь ее пинать. И делать локальные усилия.
[19:49:11] <valexey> и вот тут идет вначале механика сплошных сред с дифурами на перевес и вариационкой, а затем сопромат в качестве сборника готовых рецептов
[19:49:12] <vlad2> Я могу ее сделать толщиной в 10 атомов?
[19:49:28] <valexey> если у тебя вдруг уже атомы пошли - это велком в материаловедение :-)
[19:49:48] <valexey> возможно твой конкретный материал банально за час испарится при такой толщине :-)
[19:49:51] <vlad2> Ага. И это я пропустил :) Все было у параллельного потока :)
[19:50:20] <valexey> или, скажем, 10 атомов это меньше чем элементарная структура кристаллическая.
[19:50:24] <valexey> или что-то еще
[19:50:40] <valexey> но если забить на атомы - то да, можно сделать оболочку с нулевой толщиной.
[19:50:59] <valexey> и оно будет ну очень классно сопротивляться деформациям при падении куда-нибудь. ведь масса то нуль!
[19:51:26] <valexey> зато при минимальной деформации оно сломается.
[19:51:31] <valexey> жесткое но хрупкое
[19:52:06] <valexey> пример у тебя под рукой - возьми бумагу A4, сверни в трубочку и поэкспериментируй с толщинами.
[19:52:26] <valexey> заодно и с диаметром можешь поэкспериментировать
[19:52:42] <valexey> также можно взять двойной лист A4 и его уже сворачивать - стенка будет в 2 раза толще
[19:54:20] <vlad2> Да, славная темка вышла :)
[19:54:39] <vlad2> info21 просрался бы кирпичами :)
[19:54:50] <valexey> :-)
[19:55:42] <valexey> типо вот он типичный программист - даже банальной механики сплошных сред не знает!
[19:55:45] <valexey> фу!
[19:55:54] <valexey> профессианал!
[19:57:08] <valexey> кстати, отсюда, настоящий оберонщик может начать проводить аналогии в софтвере (ведь info21 же проводит аналогии с анатомией и биологией?)
[19:57:26] <valexey> типо вот, чем мельче тем прочнее, следовательно что? следовательно даже физика подтверждает принцип калашникова!
[19:57:42] <valexey> чем меньше язык, тем он прочнее!
[19:57:53] <valexey> чем меньше софт, тем он надежнее и вообще лучше!
[19:58:03] <valexey> долой монстров!
[19:58:08] <valexey> долой С++!
[19:58:15] <valexey> оберон в массы!
[19:58:52] <valexey> скоро мейнстрим просто рухнет под тяжестью собственной массы!
[19:59:58] <vlad2> Да, можно было бы что-то высосать :)
[20:00:32] <valexey> аналогии вообще всегда лживы
[20:00:48] <valexey> соответственно проводя аналогии человек их проводящий выведет всегда только то, что выгодно ему
[21:07:45] <valexey> vlad: Сообщение Тышова выпилили :-)
[21:07:53] <valexey> там где он предлагал info21 выпилить самого себя :-D
[21:08:44] <vlad2> Гы :)
[21:08:51] <vlad2> А оригинальное сообщение Info21?
[21:09:34] <vlad2> Жесть. Оставили. Полный привет.
[21:10:03] <vlad2> Сделать робота, который будет перепостывать? :)
[21:11:36] <vlad2> Завести лог выпиливаемых сообщений? :)
[22:36:45] <valexey> vlad2: сделай :-)
[22:36:53] <valexey> с удовольствием воткну его на сервер