[00:03:46] <vlad2> Виновного найти интересно для того, чтобы спросить "а нахрена?" :)
[00:04:02] <valexey> и дать в рыло с размаху!
[00:04:13] <shaggie> это первым делом
[00:04:21] <shaggie> а потом уже спрашивать
[00:05:04] <vlad2> Кроме того у нас нет разделения кода по людям. Хотя, конечно, если кто-то залезет в "исторически сложившуюся" область кого-то другого и посадит там баг... :)
[00:06:12] <valexey> vlad2: не, в той конторе по коммитам определяли кто же написал эту строчку!
[00:06:24] <valexey> если написал, то и ответственен за нее!
[00:07:56] <vlad2> Не. У нас по принципу "нашел багу в коде - фиксай" :)
[00:14:12] <kemiisto> Я ВЫИГРАЛ ПАРИ!
[00:14:17] <kemiisto> 4s блеать!
[00:14:23] <kemiisto> а никуя не 5Ё!
[00:14:29] <kemiisto> ТО-ТО!
[00:16:57] <valexey_> блин. ну вот почему, ПОЧЕМУ во всех системах после загрузки (появления рабочего стола там и так далее) работать можно сразу, ну или через пару минут. а в висте только через полчаса?!
[00:17:13] <valexey_> какими же рукожопыми надо было быть чтобы написать ТАКОЕ?!
[00:18:08] <kemiisto> valexey_: тише-тише
[00:18:13] <kemiisto> будь терпимее!
[00:18:17] <kemiisto> :)
[00:18:25] <valexey_> снесу эту лицензионную дрянь нахрен, и поставлю ПИРАЦЦКУЮ XP!!1
[00:18:51] <kemiisto> W7!
[00:18:55] <kemiisto> W7!
[00:18:57] <kemiisto> W7!
[00:19:12] <valexey_> ога. виста в квадрате.
[00:19:19] <kemiisto> не
[00:19:21] <kemiisto> лучше
[00:19:50] <valexey_> у меня на ноуте 2 гига памяти. и я хочу чтобы из них хотя бы 1.7 гига были под приложения. а не под прихоти системы (вроде индексации, ленивого запуска всякого фонового говна, эффекты и проч).
[00:20:09] <valexey_> в висте простое нажатие на кнопочку пуск отжирает 4 метра памяти!
[00:20:39] <valexey_> http://habrahabr.ru/blogs/apple/129763/
[00:22:26] <valexey_> "iPhone — самый удовлетворяемый телефон."
[00:24:41] <valexey> фи. всего то iPhone 4s
[00:47:40] <vlad2> W7 рулит. Даже на древнем железе.
[00:47:53] <vlad2> В отличие от висты.
[01:14:01] <valexey> дас. символично. глава компании apple теперь гей.
[01:14:59] <valexey> Apple's new CEO Tim Cook not only might be the most influential technology leader in his new position, but also the most powerful gay man in America.
[01:20:53] <valexey> iPhone for ass :-)
[01:37:37] <valexey> " толпы существующих JavaScript-разработчиков привыкли писать клиентский JavaScript, а на сервере надо писать совершенно иначе — что превращает «плюс» использования уже известного языка в «минус» иллюзии что вы знаете как писать на этом языке на сервере"
[02:27:49] <vlad2> Хе-хе. В каждой шутке, что называется... :)
[02:29:01] <vlad2> valexey: готовься к самому страшному, что может случиться! :)
[08:09:58] <valexey> vlad2:
[08:10:12] <valexey> vlad2: к чему?
[08:21:18] <geniepro> valexey> map то? я не знаю лучше или нет. Например map'ом ты не сможешь пройтись по всем элементам скажем списка распечатывая по ходу их значения в консоль.

чиво-чиво??? о_О
[08:23:19] <geniepro> Prelude> let printlist xs = map print xs
Prelude> sequence_ $ printlist [1..10]
1
2
3
4
5
6
7
8
9
10

[08:25:41] <geniepro> вообще я часто пользуюсь функциями forM и forM_ из модуля Control.Monad
forM  :: Monad m => [a] -> (a -> m b) -> m [b]
forM_ :: Monad m => [a] -> (a -> m b) -> m ()
[08:26:05] <geniepro> вот типичные foreach хаскелла
[08:27:31] <geniepro> kemiisto> Я ТРЕБУЮ УБРАТЬ ХАСКЕЛЛ ИЗ ЧАТА!!!111
а я требую забанить кемиисто!!!111 )))
[08:36:35] <geniepro> valexey> как сказала однажды сестра "гетеросексуальный коллектив является более здоровым"
вот у нас тут этого не хватает
раньше, когда все сидели в огромном зале с бухгалтерией, хоть дифтёнки были (бухгалтерщи), а щас уже видеть никого не хочу ((
[08:40:24] <valexey> Значит коллектив у вас не гетеросексуальный :-) а наоборот :-))
[08:41:35] <valexey> geniepro: это не форыч
[08:42:29] <valexey> И да, опять таки у тебя не получилось распечатать посредством map :-)
[08:42:40] <geniepro> valexey> вообще сестру тоже на работу взяли. теперь будет ходить и троллить оберонщиков с высоты эйфеля :-)
откуда у вас там на работе оберонщеги? о_О
[08:43:04] <geniepro> форыч и получилось! иниибёт!!!
[08:43:05] <valexey> Как откуда? Губанов же.
[08:43:18] <geniepro> губанов сишарпер же о_О ))))
[08:43:30] <geniepro> губанов предал свои идеалы )))
[08:44:13] <valexey> Их двое
[08:44:25] <geniepro> и оба оберонщеги? )))
[08:44:30] <valexey> Ога
[08:45:33] <geniepro> не, они не оберонщеги!!!
скока софта на обероне они запустили в продакшн?
[08:53:44] <valexey> geniepro: получлся не форыч. map это еще более узкоспециализированная вещь нежели форыч
[08:54:11] <valexey> geniepro: дык это не они такие, это жизнь такая :-)
[08:54:41] <valexey> Сергей на кп для своей физики что то ваяет
[08:55:00] <geniepro> чего есть такого в форыче чего нету в мапе?
[08:55:20] <valexey> Пофигизм относительно типов
[08:56:15] <valexey> Кстати у нас по мотивам оберона разработан язык model
[08:56:36] <valexey> Синтаксис взят из оберона по крайней мере :-)
[09:01:22] <valexey> Скажем нет гомосексуальным коллективам!
[09:05:41] <geniepro> что значит -- пофигизм относительно типов?
[09:11:57] <geniepro> губанов писал как-то про этот model -- вроде как он туда пропихнул обероновский синтаксис. так этим гордился ))))
[09:12:58] <valexey> geniepro: значит что форыч может не только по спискам итерироваться например
[09:13:53] <valexey> geniepro: губанов его и пишет. То есть все кодогенераторы
[09:16:31] <valexey> По сути это нечто что чуть круче google protobuf
[09:16:44] <geniepro> форыч работает по контейнерам
в хаскеле тоже есть класс типов Traversable -- по всем контейнерам, которые входят в этот класс, тоже можно итерироваться
[09:17:32] <valexey> geniepro: смотря какой форыч. Оно совсем не обязательно по контейнерам
[09:17:50] <geniepro> class (Functor t, Foldable t) => Traversable t where
       -- | Map each element of a structure to an action, evaluate
       -- these actions from left to right, and collect the results.
       traverse :: Applicative f => (a -> f b) -> t a -> f (t b)
       traverse f = sequenceA . fmap f

       -- | Evaluate each action in the structure from left to right,
       -- and collect the results.
       sequenceA :: Applicative f => t (f a) -> f (t a)
       sequenceA = traverse id

       -- | Map each element of a structure to a monadic action, evaluate
       -- these actions from left to right, and collect the results.
       mapM :: Monad m => (a -> m b) -> t a -> m (t b)
       mapM f = unwrapMonad . traverse (WrapMonad . f)

       -- | Evaluate each monadic action in the structure from left to right,
       -- and collect the results.
       sequence :: Monad m => t (m a) -> m (t a)
       sequence = mapM id
[09:18:15] <valexey> Ну и где тут map?
[09:18:47] <geniepro> valexey> geniepro: смотря какой форыч. Оно совсем не обязательно по контейнерам
ну начинается
тогда уж надо сразу определиться с языком и его конкретной реализацией форыча
[09:19:23] <geniepro> valexey> Ну и где тут map?
как это где? mapM
[09:19:25] <valexey> map имеет тип (a->b) -> [a] -> [b]
[09:19:47] <geniepro> -- | 'for' is 'traverse' with its arguments flipped.
for :: (Traversable t, Applicative f) => t a -> (a -> f b) -> f (t b)
{-# INLINE for #-}
for = flip traverse

вот и форыч!!!111
[09:19:52] <valexey> Это mapM_ а не map :-)
[09:20:09] <geniepro> какая разница???
[09:20:30] <valexey> Это разные функции
[09:20:45] <geniepro> map, mapM, mapM_, for, forM, forM_ -- что надо, то и юзается!!!111
[09:21:19] <valexey> Один тот факт что приходится делать столько вариантов по сути одного и того де, как бэ намекает…
[09:21:41] <valexey> *же
[09:21:41] <geniepro> потому что строгая статическая система типов!!!111
[09:22:18] <valexey> Нет. Не поэтому
[09:22:21] <geniepro> для разных целей -- разные варианты
[09:22:31] <valexey> То есть тут не в языке дело
[09:23:26] <geniepro> http://lenta.ru/articles/2011/10/03/penguin/
[09:23:48] <geniepro> "Национальную программную платформу создадут в рекордные сроки

Компания "ПингВин Софтвер" выиграла конкурс на создание прототипов компонентов национальной программной платформы. Эталонную операционную систему, систему управления базами данных и среду разработки в "ПингВин Софтвере" представят за 16 дней и 5 миллионов рублей."
[09:24:02] <geniepro> де же Богатырёв, интересно
[09:26:33] <geniepro> "Заявленное время разработки он объясняет тем, что практически все участники выставили именно такие сроки. Во время рассмотрения заявок оценки выдаются с учетом сроков. Таким образом, ни "ПингВин Софтвер", ни любая другая компания не смогли бы победить, указав более реальные сроки. Теперь победителю предстоит совершить то, что еще недавно в РАСПО считали невозможным."
[09:32:02] <geniepro> у foreach в том же сишарпе тоже возможностей немного
ну распечатать элементы контейнера -- да, но он же не может вернуть новый контейнер на основе данного.
да и изменить данный контейнер -- тоже не всегда получится
[09:32:48] <valexey> Может
[09:32:49] <geniepro> так и зачем нужен foreach, если всё равно часто вместо него приходится простой тупой for использовать?
[09:33:03] <geniepro> что может?
[09:33:42] <geniepro> ys = foreach(var x in xs) { ... } ???
[09:45:33] <valexey> Может заполнить новый контейнер
[09:45:35] <valexey> Форыч не является выражением
[09:55:38] <geniepro> using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
   class Program
   {
       static void Main(string[] args)
       {
           int[] iarr = { 1, 2, 3 };
           foreach (var i in iarr)
           {
               Console.WriteLine(i.ToString()); // можно
           }

           foreach (var i in iarr)
           {
               i = i + 1; // НИЗЗЯ!!!111
           }

           foreach (var i in iarr)
           {
               Console.WriteLine(i.ToString()); // можно
           }
       }
   }
}

ЧЯДНТ???
[09:56:27] <geniepro> Error 1 Cannot assign to 'i' because it is a 'foreach iteration variable'
[09:57:05] <geniepro> и приходитя в таких местах юзать старый добрый for из сишечки
[10:46:04] <valexey> geniepro: а если сделать так: foreach (ref i in iarr) ?
[10:46:17] <valexey> я не знаю шарпа. но знаю язык где вот так можно.
[10:47:35] <valexey> или var ref i
[10:49:11] <geniepro> в шарпе разве можно всякие ref в foreach пихать?
[10:53:07] <valexey> понятия не имею. попробуй
[11:00:38] <geniepro> вроде не работает
[11:02:07] <valexey> угу. шарп мастдай
[11:02:50] <geniepro> foreach, in (C# Reference)


The foreach statement repeats a group of embedded statements for each element in an array or an object collection. The foreach statement is used to iterate through the collection to get the desired information, but should not be used to change the contents of the collection to avoid unpredictable side effects.
[11:02:58] <geniepro> шарп рулез!
[11:03:13] <geniepro> to avoid unpredictable side effects
[11:07:24] <geniepro> так что шарповский форыч даже хуже чем хаскельные вариации map
[11:10:17] <geniepro> вот типичный код на хацкиле:
   forM_ dat $ \(m, xs) -> do
       ...
[11:10:36] <geniepro> вот и чем это не форыч??? не вижу разницы
[11:16:30] <valexey> geniepro: мы же говорили про map :-)
[11:17:21] <valexey> мап еще более узкоспециальная штука. это рраз (и с чего ты взял что это говорилось в неготивном смысле?). два - когда говорят про форыч, говорят о некой штуке встроенной в язык. в хаскеле нет такой штуки. вот и все
[11:18:14] <geniepro> map,  for -- какая разница? это же синонимы
[11:19:12] <geniepro> между всеми этими вариациями map в хаскелле нет принципиальной разницы, так что это всё одно и тоже
[11:20:38] <valexey> только вот в языке их нет :-)
[11:20:48] <geniepro> чо как там студентка? симпотная хоть?
[11:21:02] <valexey> впрочем, мы пошли уже по кругу. становится скучновато.
[11:21:24] <valexey> geniepro: понятия не имею. я не помню как она выглядит.
[11:21:42] <valexey> она в понедельник выходит. пока дал на дом задание
[11:21:52] <geniepro> в немерле форыча тоже нет в языке, однако за счёт макросов он там есть, так что встроенность в язык -- вапще ни разу не аргумент
можно юзать искаропки? значит есть!
[11:22:08] <valexey> аргумент для чего? :-)
[11:22:45] <geniepro> valexey> два - когда говорят про форыч, говорят о некой штуке встроенной в язык. в хаскеле нет такой штуки. вот и все
вот тут это ни разу не аргумент
[11:22:59] <valexey> не аргумент для чего? :-)
[11:23:10] <geniepro> нинаю. не я же спор начал
[11:23:27] <valexey> обычно аргументы приводятся в поддержку некого тезиса, или позиции
[11:23:32] <valexey> так с чем воюем то? :-)
[11:24:05] <geniepro> кто-то там выше в чате заявил что мол в хаскеле нет форыча.
это ложное утверждение я постарался развеять...
[11:24:18] <valexey> в языке хаскель нет форыча
[11:24:21] <valexey> и это хорошо
[11:24:22] <geniepro> не буду показывать пальцем, но это был валексей ))
[11:24:25] <valexey> возражения есть?
[11:25:33] <geniepro> тогда форыча вапще нигде нет, потому что там где есть что-то, называемое этим словом, оказывается что оно не такое, как в другом языке, где тоже есть такой кийворд
[11:27:42] <valexey> форыч это шесткопришитая конструкция языка позволяющая пройтись по всем элементам некого контейнера (возможно только какого-то одного типа).
[11:28:29] <valexey> по мне - наличие такой конструкции означает либо не гибкость языка, неприспособленность его для написания библиотечных удобных функций, либо ориентированность на скриптовые применения (не путать с интерпретируемым кодом!)
[11:28:41] <geniepro> ну и дальше что можно делать с этими элементами? они Read/Write или только Read Only???
[11:29:49] <valexey> read only. либо даже если он rw, то запись в него не повлияет на соответствующий ему элемент в контейнере
[11:30:58] <geniepro> valexey> угу. шарп мастдай
valexey> read only. либо даже если он rw, то запись в него не повлияет на соответствующий ему элемент в контейнере

хм. пора уже определиться )))
[11:31:33] <valexey> c чем? в шарпе есть форыч, причем не шибко удобный => он маздай
[11:31:36] <valexey> что не так? :-)
[11:31:49] <geniepro> хм. какое-то противоречие однако
[11:32:02] <geniepro> так рид онли или всё же мастдай?
[11:32:34] <valexey> одно другому мешает?
[11:32:37] <valexey> еще раз:
[11:32:57] <valexey> форыч это жесткопришитая конструкция языка позволяющая пройтись по всем элементам некого контейнера (возможно только какого-то одного типа).

по мне - наличие такой конструкции означает либо не гибкость языка, неприспособленность его для написания библиотечных удобных функций, либо ориентированность на скриптовые применения (не путать с интерпретируемым кодом!)
[11:35:01] <geniepro> ладно, хрен с ним с сишарпом
[11:35:55] <geniepro> valexey> по мне - наличие такой конструкции означает либо не гибкость языка, неприспособленность его для написания библиотечных удобных функций, либо ориентированность на скриптовые применения (не путать с интерпретируемым кодом!)

значит, отсутствие форыча в обероне -- признак "приспособленности его для написания библиотечных удобных функций"??? о_О
[11:36:23] <valexey> меня например жутко бесят в D встроенный в язык по сути unordered_map, бесит вшитый туда же foreach (точнее спец. форма for'a). но я понимаю зачем оно там нужно.
[11:36:33] <valexey> хотя мне лично это нафиг не нужно
[11:37:34] <valexey> geniepro: отсутствие map'a, или форыча в библиотеках оберона означает что в виде библиотеки его удобным не написать. также он отсутствует и в языке. что делает этот язык неудобным как для скриптовых применений, так и для написания приложений.
[11:37:43] <geniepro> unordered_map -- ? для чего он нужен?
[11:38:24] <valexey> это то же самое что и std::map, но унутре не бинарное дерево, а хэш-таблица
[11:38:25] <geniepro> а зачем форыч в D?
[11:39:25] <geniepro> я в хацкеле часто юзаю Data.Map -- очень удобно
совмещает в себе и List.sort, и List.nub
[11:39:36] <valexey> затем, что D по сути содержит в себя подмножество языка, которое во-первых безопасно (по памяти), во-вторых скриптоориентировано.
[11:40:19] <valexey> это подмножество используется двояко. во-первых для написания повседневных скриптов. во-вторых для написания кода который исполняется на этапе компиляции.
[11:41:04] <valexey> Data.Map,  сколь я помню, точный аналог std::map - то же самое бинарное дерево (или красно-черное? не помню)
[11:41:31] <valexey> оно в ряде случаев работает медленнее чем unordered_map
[11:50:50] <valexey> RT @rich_4711 Learned a new word: Iteratee. The nice #haskell folks have re-invented the I/O model that Robert Virding created for #erlang 25 years ago.
[12:32:54] <geniepro> valexey> это подмножество используется двояко. во-первых для написания повседневных скриптов. во-вторых для написания кода который исполняется на этапе компиляции.
так там чо, макросы и метапрограммирование есть что ле?
[12:33:05] <valexey> да
[12:33:13] <valexey> иначе D был бы не нужен
[12:33:28] <valexey> в C++ это тоже есть. но уж больно через жопу
[12:33:41] <valexey> в C++ в этом метапрограммировании слишком много фунци-анальщины
[12:46:11] <subj_rs> объясните проженному паскалем мозгу что сие есть такое?
typedef struct smfi_str SMFICTX;
[12:46:31] <valexey> создается алиас типа. а шо?
[12:46:38] <valexey> также как и в паскале (не Аде)
[12:46:48] <valexey> в паскалях ведь нельзя создавать новые типы :-)
[12:46:59] <valexey> только алиасы существующих либо структуры
[12:54:04] <geniepro> в хацкеле можно и алиасы, и новотипы
[12:55:01] <geniepro> typedef struct smfi_str SMFICTX;

вместо  struct smfi_str some_struct; можно писать SMFICTX some_struct;
[12:55:45] <kemiisto> .
[13:00:07] <kemiisto> ДИ НИНУЖЕН!
[13:00:10] <kemiisto> :D
[13:00:27] <kemiisto> однобуквенные языки - зло!
[13:00:51] <kemiisto> ОБЕРОН - ДОБРО!
[13:10:59] <valexey> kemiisto: а D2?
[13:11:25] <valexey> subj_rs: это вообще чисто сишное извращение. в плюсах такого не надо
[13:11:45] <valexey> geniepro: та алиасы и новотипы и в Аде есть. Причем они там более правильные нежели в хаскеле :-)
[13:12:09] <geniepro> клевета!!!
[13:16:30] <valexey> кстати, D - единственный на моей памяти, где алиасы типа именно так и называются. то есть ключевое слово для создания алиаса там не newtype, не type и не typedef, а просто тупо alias, что как-бэ не иллюзорно намекает на сущность действа.
[13:32:29] <valexey> kemiisto: http://www.opennet.ru/opennews/art.shtml?num=31946
[13:32:31] <valexey> :-D
[13:33:27] <subj_rs> то есть SMFICTX - это структура (типо record паскалевский) а smfi_str - просто еще одно название для этого?
[13:33:40] <geniepro> наоборот
[13:33:45] <subj_rs> а, ок
[13:34:00] <valexey> typedef старое_имя новое_имя
[13:34:15] <kemiisto> valexey: >> Ядро с ним уже собирается?
[13:34:17] <kemiisto> XD
[13:34:21] <valexey> typedef struct foo boo
[13:34:23] <subj_rs> однако я описания smfi_str не нахожу в хеадере. оно наверно в с-файле. могу ли я иметь доступ к его полям потом?
[13:34:54] <valexey> теперь везде где будет использоваться "тип" boo, будет автоматом подставляться struct foo
[13:35:31] <valexey> subj_rs: если у тебя нет описания, то оно вообще то не должно компилироваться по идее.
[13:35:32] <geniepro> структура должна быть в хедере описана
[13:35:50] <valexey> не обязательно в хедере, но где-то выше в этой же единице трансляции
[13:35:57] <valexey> (как оно туда попало - дело десятое)
[13:36:06] <geniepro> обычно в хедере
[13:36:18] <subj_rs> SMFICTX *ctx; Opaque context structure
[13:36:27] <subj_rs> знакомое слово
[13:36:35] <valexey> subj_rs: значит ты не знаешь что там унутре
[13:36:43] <valexey> у тебя просто указатель.
[13:36:49] <geniepro> надо смотреть поиск struct smfi_str
[13:36:49] <valexey> на шмат памяти.
[13:37:00] <valexey> если оно непрозрачное
[13:37:25] <subj_rs> выходит его поля мне недоступны
[13:37:41] <valexey> да
[13:37:45] <geniepro> libmilter.h
src.gnu-darwin.org/src/contrib/sendmail/libmilter/libmilter.h.html
struct smfi_str { sthread_t ctx_id; /* thread id */ socket_t ctx_sd; /* socket descriptor */ int ctx_dbg; /* debug level */ time_t ctx_timeout; /* timeout */ int ctx_state; ...
[13:38:04] <valexey> geniepro: дарвин? :-)
[13:38:12] <geniepro> гугл )
[13:38:20] <subj_rs> дурацкая либа
[13:38:38] <valexey> subj_rs: либо подключи хедер, либо тебе оно будет не доступно. ну или сам напиши объявление этой структуры. ручкаме
[13:40:45] <subj_rs> думаю мож бинд к ней сделать )
[13:41:04] <valexey> ололо. зачем?
[13:41:14] <valexey> ведь на Си писать проще быстрее и надежней!!1
[13:41:19] <subj_rs> адцкие милтеры ваять
[13:41:23] <valexey> алсо Си не требует рантайм
[13:41:30] <subj_rs> требует
[13:41:30] <valexey> то есть он эффективней
[13:41:40] <valexey> Си? Какой такой рантайм он требует?
[13:41:54] <geniepro> libc же!!!
[13:41:57] <subj_rs>
     char *new_hdr;
     char *header=smfi_getsymval(ctx,"{msg_id}");
     memmove(header,header+1,strlen(header));
     char *addon="<zkvs.";
     new_hdr=(char *)malloc((strlen(header) + strlen(addon) + 1) *sizeof(char));
     strcpy(new_hdr,addon);
     strcat(new_hdr,header);
     smfi_chgheader(ctx, "Message-Id",1,new_hdr);
     free(new_hdr);

это вот быстрее и надежнее?
[13:42:08] <valexey> конечно!
[13:42:10] <geniepro> это уг!!!
[13:42:19] <kemiisto> :D
[13:42:20] <subj_rs> прямая работа с памятью
[13:42:31] <valexey> subj_rs: а тебе что, нужна кривая работа с памятью?
[13:42:35] <kemiisto> яка красота!
[13:42:37] <subj_rs> а всего то надо в одну строчку другую добавить
[13:42:38] <geniepro> только хардкор! только ассемблер!!!
[13:42:46] <kemiisto> valexey: ОЧЕНЬ ТОЛСТО!
[13:42:55] <subj_rs> две строчки на аде
[13:42:59] <geniepro> работаешь с ассемблером? ну значит ты асс!!!
[13:43:09] <valexey> и две на плюсцах!
[13:43:14] <geniepro> в переводе с инглиша -- в заднице значит!
[13:43:55] <valexey> iPhone 4s
[13:47:54] <valexey> kemiisto: о!!! http://www.opennet.ru/opennews/art.shtml?num=31948
[14:04:54] <geniepro> млин, я так скоро яваскрипт выучу ((
[14:05:22] <geniepro> потом ещё и на нод.жс небось захочу перейти с ерланга )))
[14:05:52] <geniepro> кемиисто! де новые задачи и скан книшки???
[14:06:31] <valexey> geniepro: ога! вот так они и размножаются!
[14:06:33] <valexey> через веб!
[14:10:44] <valexey> о! флибуста заработала!
[14:34:12] <valexey> http://juick.com/dmz/1551839
[14:47:03] <subj_rs> http://habrahabr.ru/blogs/nodejs/129766/
[14:56:22] <geniepro> http://github.com/strangeloop/2011-slides/raw/master/Alexandrescu-GenericProgrammingD.pdf
[15:04:06] <valexey> geniepro: да, Александреска рулит
[15:13:07] <geniepro> почитал -- чота скукота какая-то (
[15:24:27] <valexey> ня. погонял вот эти тесты
[15:24:36] <valexey> :http://juick.com/dmz/1424529
[15:25:24] <valexey> аффтар походу брешет
[15:25:37] <valexey> собрал сишную версию и хаскельную. результаты:
[15:25:52] <valexey> $ time ./a.out > /dev/null

real    0m2.242s
user    0m2.236s
sys    0m0.004s

$ time ./main > /dev/null

real    0m6.052s
user    0m5.800s
sys    0m0.248s
[15:26:01] <valexey> то есть хаскель раза в два-три медленнее
[15:26:15] <valexey> почесал репу. решил что у меня ghc не правильный. у меня ghc версии 6.12
[15:26:27] <valexey> обновил ghc. до 7.0.3 64 битной
[15:26:32] <valexey> запускаю…
[15:26:44] <valexey> $ time ./main > /dev/null

real    0m6.368s
user    0m5.944s
sys    0m0.384s
[15:26:44] <kemiisto> ;)
[15:26:48] <valexey> то же самое
[15:26:56] <kemiisto> деза
[15:27:02] <kemiisto> ФПшники же!
[15:27:23] <valexey> да! кстати, в том посте народ пытался оптимизировать хаскельную версию алгоритма.
[15:27:36] <valexey> а теперь читаем что пишет про это обсуждение тов. Зефиров:
[15:27:44] <valexey> http://thesz.livejournal.com/1233734.html
[15:28:35] <valexey> "сильный программист на хаскеле", ога
[15:28:48] <valexey> что-то от него как-то запахом info21 повеяло.
[15:32:55] <geniepro> гитхап сакс!!!111
[15:33:03] <valexey> ?
[15:33:40] <geniepro> зефиров -- самый сильный программист на хаскиле! попрошу не сумлеваться!!!111
[15:33:57] <kemiisto> не об том речь
[15:34:00] <kemiisto> таки да
[15:34:03] <kemiisto> похоже
[15:34:04] <kemiisto> :D
[15:35:36] <geniepro> гитхабовские страницы открываются по полчаса!!!
[15:35:58] <kemiisto> у тебя какой-то неправильный гитхаб
[15:35:59] <kemiisto> :D
[15:36:06] <kemiisto> или Интернет весь
[15:36:11] <kemiisto> какой-то неправильный
[15:36:25] <kemiisto> ИЛИ ТЫ!
[15:37:21] <geniepro> сорсфордж тоже кое как открывается
[15:37:43] <valexey> geniepro: а ведро багов?
[15:38:43] <geniepro> в принципе, я де-то читал, что они, падлы такие, по указанию своего сучьего правительства затрудняют доступ к таким ресурсам как сорсфордж для стран, которые не являются лоляльными к сша. азия всякая там...
[15:39:23] <geniepro> на это ведро у мя ссылок нет, так что нинаю ))
[15:41:26] <valexey> гм. у меня Dшный вариант совершенных чисел работает быстрее чем Сишный!
[15:41:28] <valexey> !11
[15:41:32] <valexey> чуть-чуть, но быстрее
[15:41:37] <valexey> /me фшоке
[15:41:58] <geniepro> а ассемблерный? )))
[15:42:05] <valexey> асмового нет
[15:42:11] <geniepro> пичалька ))
[15:42:13] <valexey> да, и это при том, что дишный у меня 32х битный
[15:42:26] <valexey> а сишный 64битный
[15:42:45] <valexey> если собрать 32х битный сишный, то он вообще раза в полтора-два начинает сливать и 64бит сишному и 32бит дишному
[15:42:54] <geniepro> ну так 32 бита -- это же в два раза меньше, чем 64! значит в два раза меньше тормоза памяти сказываются! в полтора раза быстрее должно быть))
[15:43:06] <valexey> как видишь, в два раза больше
[15:43:23] <valexey> у нас же там идет арифметика 64х битная
[15:43:32] <valexey> поэтому 64х битные регистры кошерны как бэ
[15:48:57] <valexey> итог проверки на совершенство числа: после того как поставил ghc 7.0.3, и переписал geniepro программу так, чтобы использовались нативные типы данных. получил 1.3 секунды на хаскеле для числа 1374386913280000, и 0.7 секунд для С и D. При этом Сишная и хаскельная версия 64битные, а Dшная - 32х битная.
[15:49:20] <valexey> как х-ль не ускоряй, один фиг он в два раза тормознее нормальных языков :-D
[15:49:41] <kemiisto> х-ль
[15:49:44] <kemiisto> надо запомнить!
[15:49:46] <kemiisto> :D
[15:50:19] <valexey> kemiisto: для клевет? :-)
[15:50:27] <kemiisto> а то!
[15:51:29] <geniepro> затестил: сишный вариант сработал за 11.5 сек, хаскельный за 8.9 сек!!!1111
[15:51:35] <geniepro> хаскель рулит!!!
[15:52:19] <geniepro> valexey> итог проверки на совершенство числа: после того как поставил ghc 7.0.3, и переписал geniepro программу так, чтобы использовались нативные типы данных.
это какую? со списком?
[15:52:37] <valexey> да вроде
[15:52:57] <valexey> $ cat fastHs.hs
import Data.Int

main :: IO ()
main = do
   n <- readLn :: IO Data.Int.Int64
   putStrLn $ if perfect n then "Да" else "Нет"
 where
   perfect x = x == sum (1 : [ i + d
                             | i <- [2..x']
                             , let (d, m) = x `divMod` i
                             , m == 0
                             ])
     where
       x' = truncate $ sqrt $ fromInteger $ fromIntegral x
[15:53:01] <geniepro> там был ещё вариант без спсика -- точный аналог сишного варианта -- нипанятно, почему он медленнее списочного
[15:53:22] <valexey> дык хаскель же! ghc непонимает что с ним делать и как оптимизировать :-)
[15:53:56] <valexey> а списков то у тебя небось реально в этой программе и не создается. ghc достаточно умен чтобы такие бенчмарки распознавать и раскручивать списки ленивые в циклы проворные
[15:54:07] <subj_rs> кошмар а не язык
[15:54:33] <geniepro> так чо, у мя тест от dmz показал, что его замеры и правда неверные -- у мя хаскель на 29% быстрее, а вовсе не на 26% медленнее сишечки )))
[15:55:26] <valexey> :-D
[15:55:57] <geniepro> не ну то что сишечка у мя -- это TinyCC -- я уж не буду упоминать )))
[15:56:34] <valexey> ололо! собери версию на х-е посредством какого-нибудь другого компилятора :-) не ghc
[15:57:04] <geniepro> а нету (((
[16:02:27] <valexey> geniepro: а ты отруби всю оптимизацию у ghc
[16:02:33] <valexey> скажи ему -O0
[16:02:37] <valexey> будет примерно оно :-)
[16:02:50] <geniepro> а без оптимизации сваливается с переполнением стека ((
[16:03:45] <valexey> ололо! вот он х-ль!
[16:05:43] <kemiisto> :D
[16:05:55] <kemiisto> плотно вы тут отобедали
[16:06:03] <valexey> ололо! еще один понтуется сишку порвать на совершенных числах!
[16:06:06] <valexey> на хаскеле
[16:06:47] <geniepro> кто-кто???
[16:06:53] <geniepro> покажите его мне!
[16:06:59] <valexey> не покажу :-)
[16:07:07] <valexey> посмотрим что у него выйдет
[16:07:08] <valexey> :-D
[16:07:11] <geniepro> пусть сестра на эйфеле порвёт )))
[16:07:32] <valexey> он собирается, как водится, вручную оттранслировать код на хаскель. чтобы 1 в 1 было :-D
[16:08:59] <valexey> geniepro: они эйфель даже и не начинали изучать
[16:09:04] <valexey> у них все серьезно там
[16:09:07] <valexey> язык вторичен
[16:09:14] <valexey> документация и постановка задачи первична
[16:10:56] <geniepro> valexey> он собирается, как водится, вручную оттранслировать код на хаскель. чтобы 1 в 1 было :-D
с сишного кода на хацкель? я же уже делал это
единственное я не стал заморачиваться с анбоксед Int64# -- лень )
[16:15:04] <geniepro> perf n = n == sum [i | i <- [1..n-1], n `mod` i == 0]
http://rosettacode.org/wiki/Perfect_numbers#Haskell
)))
[16:16:07] <geniepro> кемиисто затести!
FUNCTION isPerfect(n)
 LOGICAL :: isPerfect
 INTEGER, INTENT(IN) :: n
 INTEGER :: i, factorsum

 isPerfect = .FALSE.
 factorsum = 1
 DO i = 2, INT(SQRT(REAL(n)))
    IF(MOD(n, i) == 0) factorsum = factorsum + i + (n / i)
 END DO
 IF (factorsum == n) isPerfect = .TRUE.
END FUNCTION isPerfect
[16:17:04] <geniepro> во! дишечка!
import std.stdio, std.math, std.range, std.algorithm;

pure nothrow bool isPerfectNumber(in int n) {
   if (n < 2)
       return false;

   int sum = 1;
   foreach (i; 2 .. cast(int)sqrt(n) + 1)
       if (n % i == 0) {
           sum += i;
           immutable int q = n / i;
           if (q > i)
               sum += q;
       }

   return sum == n;
}

void main() {
   writeln(filter!isPerfectNumber(iota(33_550_337)));
}
[16:18:30] <kemiisto> там обычные целые числа
[16:18:38] <kemiisto> чего там тестить то?
[16:19:54] <geniepro> ну мало ли вдруг в mmx пойдёт оптимизируется?
[16:20:29] <valexey> mmx тут не поможет вроде. вот simd поможет
[16:30:51] <valexey> geniepro: дас, их вариант дишный работает в два раза быстрее моего :-)
[16:31:33] <geniepro> о_О за счёт чего?
[16:31:50] <romiras> привет завсегдатаям
[16:31:56] <geniepro> превед!
[16:32:48] <romiras> что делим?
[16:33:02] <geniepro> совершенные числа щитаем!
[16:33:14] <geniepro> совершенствуемся!
[16:34:14] <romiras> а для чего, если не секрет? Ради науки или конкретного задания?
[16:38:04] <valexey> за ради бенчмарков :-)
[16:38:08] <valexey> и фаллометрии
[16:38:49] <geniepro> а делать больше нехера
[16:39:20] <geniepro> мля мне надо прототип своего вебприложения на ерланге развивать до почти полноценного варианта )))))
[16:45:42] <romiras> Создал учётную запись на BitBucket: у них теперь появилась поддержка Git.
[16:51:45] <valexey> kemiisto: а почему бы в нашем забеге фаллометрии не поучаствовать КП?
[16:51:57] <valexey> там ведь есть 64битные целые числа?
[16:52:13] <kemiisto> valexey: а я причём.
[16:52:15] <kemiisto> ?
[16:52:33] <valexey> ну как же? ты же на КП у нас пишешь!!1
[16:53:05] <romiras> лучше на OO2C
[16:58:28] <valexey> кстати, годный вброс: http://juick.com/dmz/1551839
[17:02:48] <valexey> прекрасное:
[17:02:50] <valexey> "пишет мне кандидат на вакансию. Пишет с mail.ru. Коллеги, ну почему он думает, что я буду отвечать человеку, который пишет мне с адреса на mail.ru ?!!"
[17:18:14] <valexey> "Меня не интересуют программисты, пишущие под .NET. Меня интересуют те люди, которые работают в моей сфере. В моей сфере люди пользующиеся mail.ru демонстрируют свою некомпетентность. Это так же, как пользоваться виндой для, скажем, разработки на рельсах или питоне"
[17:18:19] <valexey> http://juick.com/maxlapshin/1542377
[17:21:13] <shaggie> про Лапшина слышал, что он известен приступами неадекватности
[17:22:06] <valexey> ну, не то чтобы неадекватности… но местами мне сложно понять его логику
[17:22:24] <valexey> а уж сколько траходрома с его хитрозакрученным сервером лицензий мы поимели… это что-то
[17:22:38] <valexey> но ничего, сестра сделает так, чтобы он стал нинужен :-)
[17:22:52] <valexey> если справится конечно
[17:24:57] <valexey> "я встречал только одного адекватного программиста старше 40 и то, с ним было порядочно мороки, прежде чем я всё таки смог его убедить пользоваться git-ом и вообще начать работать в команде."
[17:24:59] <valexey> он же
[17:25:19] <valexey> гм. я видел многих программеров старше 40ка очень-очень вменяемых
[17:53:30] <valexey> "длительное время во главе проекта стоял один человек, что опять же прекрасно: design by commitee — говно и пиздец. Должна быть одна точка принятия решений."
[17:53:36] <valexey> http://levgem.livejournal.com/368568.html
[18:06:06] <valexey> "там, где начинается демократия, заканчивается развитие."
[19:00:32] <vlad2> valexey: отгадай, чему равна эта константа: int const k_mask = ( 1 << id1 | 1 << id2 < 1 << id3 | 1 << id4 );
[19:01:05] <vlad2> если id1 = 1, id2 = 2 и. т.д.
[19:04:16] <vlad2> На злобу оберощикам, так сказать :)
[19:04:45] <vlad2> Кстати, gcc соснул - ничего не сказал про эту херню.
[19:05:05] <vlad2> А вот визуал выдал варнинг :)
[19:05:54] <vlad2> Щаз в камю загоню.
[19:08:13] <vlad2> Камю тоже не осилил.
[19:41:16] <valexey> а id1 и так далее -- константы ваще?
[19:41:46] <valexey> ололо! один < потеряли?
[19:42:09] <valexey> точнее одну палку
[19:42:30] <kemiisto> valexey: ты наблюдательный!
[19:42:37] <kemiisto> возьми пряник с полки!
[19:42:46] <valexey> я просто сишник :-\
[19:46:58] <kemiisto> стоп-кадр!
[19:47:04] <kemiisto> нажми стоп-кадр!
[19:47:10] <kemiisto> ВСЕ СЛЫШАЛИ?
[19:47:12] <kemiisto> :D
[19:47:19] <kemiisto> ДЕЛАЙТИ СКРИНШОТЫ!
[19:47:25] <kemiisto> для пруф-пиков!
[19:47:27] <kemiisto> :)
[19:47:53] <shaggie> такой скриншот должен быть нотариально заверенным
[19:48:03] <shaggie> иначе фотошоп
[19:49:33] <kemiisto> shaggie: да получить тебе этот issue в твоём проекте https://github.com/mcahriman/InterChat-Telecom/issues/1 и назначить тебе его выполнение впесто отпукса!
[19:49:36] <kemiisto> XD
[19:49:38] <vlad2> Ага. Палку потеряли. И оно работало. Только ассерталось непонятно из-за чего :)
[19:49:44] <vlad2> Вчера на маке :)
[19:49:59] <vlad2> А сегодня на виндже я увидел этот варнинг :) И ассертаться перестало :)
[19:50:22] <kemiisto> хоть на что-то винда сгодилась
[19:50:23] <kemiisto> :D
[19:51:19] <valexey> не винда а компилер её
[19:51:29] <valexey> vlad2: а варнинги у gcc все включены?
[19:51:48] <vlad2> Угу. Можешь сам проверить на самом модном gcc (у меня 4.2)
[19:52:15] <kemiisto> valexey: ну, ВНЕЗАПНО, тот компилер есть только на вынде
[19:52:17] <kemiisto> :)
[19:52:23] <kemiisto> так что
[19:53:16] <vlad2> Да, а палку потеряли, очевидно, из за кривого редактора Xcode ;)
[19:54:11] <valexey> s1 и так далее - это константы?
[19:54:22] <vlad2> Да, это енум, если быть точнее.
[19:54:51] <valexey> гут
[19:56:18] <vlad2> визуал ругается в духе "может вы хотели скобочки расставить?" :)
[19:56:36] <valexey> и этот тоже ругается
[19:56:39] <valexey> $ gcc -Wall main.c
main.c: In function ‘main’:
main.c:6: warning: suggest parentheses around comparison in operand of ‘|’
[19:56:52] <vlad2> Какой gcc?
[19:57:33] <valexey> $ gcc --version
gcc (Debian 4.4.5-8) 4.4.5

[19:57:41] <valexey> так что предлагаю вылезти уже из танка :-)
[19:57:53] <valexey> 4,2 - древний как говно мамонта же.
[19:58:02] <vlad2> Хе-хе. Мы с эплом повязаны :)
[19:58:07] <kemiisto> Алексей Толстой
[19:58:09] <kemiisto> :D
[19:58:10] <vlad2> Какой там gcc в новом xcode?
[19:58:12] <valexey> clang вам не показан? :-)
[19:58:13] <kemiisto> не иначе
[19:58:20] <kemiisto> vlad2: 4.2
[19:58:28] <kemiisto> выше не будет
[19:58:32] <kemiisto> никогда
[19:58:34] <valexey> у ябблов не будет выше 4.2
[19:58:38] <valexey> из за gpl v3
[19:58:42] <kemiisto> из-за лицензии
[19:58:44] <kemiisto> ога
[19:59:00] <vlad2> Ну вот.
[19:59:16] <kemiisto> vlad2: собери сам :D
[19:59:21] <kemiisto> там просто же!
[19:59:26] <kemiisto> или бинарник скачай
[19:59:26] <valexey> vlad2: там это 4.2 забыли и выкинули считай. о! надо clang'ом попробовать!
[19:59:29] <kemiisto> 4.6
[19:59:30] <vlad2> Ага-ага.
[19:59:55] <vlad2> Щаз все брошу и пойlу с gcc сношаться :)
[20:00:04] <kemiisto> vlad2: ну тады clang
[20:00:06] <valexey> $ clang -Wall main.c
main.c:6:35: warning: | has lower precedence than <; < will be evaluated first [-Wparentheses]
   int const k_mask = ( 1 << id1 | 1 << id2 < 1 << id3 | 1 << id4 );
                                 ^~~~~~~~~~~~~~~~~~~~~
                                   (                  )                                                                                              
main.c:6:35: note: place parentheses around the | expression to evaluate it first                                                                     
   int const k_mask = ( 1 << id1 | 1 << id2 < 1 << id3 | 1 << id4 );
                                 ^
                             (      )
[20:00:09] <kemiisto> это сишечка де
[20:00:11] <kemiisto> же
[20:00:12] <valexey> у clang ваще все хорошо
[20:00:14] <kemiisto> не плюсы
[20:00:17] <kemiisto> во-во
[20:00:22] <kemiisto> с сями там отлично
[20:00:24] <valexey> прям таки для даунофф показали стрелочкой где проблема :-)
[20:00:31] <kemiisto> и даже статический анализ есть
[20:00:35] <valexey> ога
[20:00:58] <kemiisto> так что
[20:01:01] <kemiisto> только что
[20:01:03] <kemiisto> были
[20:01:06] <kemiisto> КЛЕВЕТЫ
[20:01:09] <kemiisto> на gcc
[20:01:12] <kemiisto> :D
[20:03:30] <valexey> $ gcc-4.3 -Wall main.c
main.c: In function ‘main’:
main.c:6: warning: suggest parentheses around comparison in operand of |
[20:03:33] <valexey> даже в 4.3 это есть
[20:07:42] <valexey> то есть в gcc от 2008 года это все уже было
[20:07:51] <valexey> vlad2: а вас какая вижуал-студия используется?
[20:21:19] <vlad2> 10
[20:24:20] <valexey> тем более
[20:24:29] <valexey> тогда и gcc должен быть 4.6 :-)
[20:25:04] <vlad2> Ладно, уговорил.
[23:28:38] <kemiisto> http://blogs.computerra.ru/17311
[23:28:49] <kemiisto> оно всё ещё живо!
[23:29:08] <kemiisto> valexey: переходи на Фантом ОС!!!111