You are viewing [info]otake's journal

May. 4th, 2012





как показали события вокруг китайского диссидента, укрывшегося в американском посольстве. То есть они, конечно, поддерживают борцов за демократию, но ровно так, как в старом анекдоте - "если поговорить - то да, а так вообще - нет"... Накануне официальной встречи американские дипломаты вынудили диссидента покинуть посольство, сообщили прессе, что он сам принял такое решение и горячо их (дипломатов) благодарил, а он сам сообщил журналистам, что дипломаты на на него давили, что он опасается за свою и своей семьи безопасность и хотел бы покинуть коммунистический Китай. Так что кроме приверженности демократии нынешний госдепартамент демонстрирует образец "правдивости" и "способности предвидеть" последствия своих действий...




АНОМАЛИЯ

Познакомился со статистикой, касающейся популярности языков программирования, которая приведена в http://langpop.com/.

Разные источники, использованные в обзоре, позволяют оценить разные стороны популярности - популярность в смысле частоты использования (в open source проектах, при поиске сотрудников и т.п.) и популярность в качестве темы для беседы/дискуссии на форумах и т.п. Для большинства языков программирования это практически одно и то же - если язык популярен как инструмент, то о нём и говорят много, если он мало используется, то о нём и дискуссий меньше. Haskell выпадает из этой общей закономерности: в использовании он попадает в число маргинальных, а в дискуссиях пребывает в числе лидеров.




КАК ВАЖНО ДЕРЖАТЬ СЛОВО

Как-то раз в стране, где власти мошенничали на выборах, избиратели вышли на площадь
и стали требовать честных выборов. А когда добились, это назвали революцией
- потому люди на площади добились того, чего требовали. Потом то же самое
произошло в другой стране, в третьей...
И в четвёртой, когда власти мошенничали на выборах, избиратели тоже пошли на площадь,
но говорили, что революции не будет. И слово сдержали: выборы какими были,
такими и остались.




Продаю





ОБАМА И ДЕМОКРАТЫ

Палата Представителей голосовала относительно наскольких представленных вариантов бюджета на 2013 год. Отгадайте, сколько конгрессменов-демократов проголосовали в поддержку варианта бюджета, подготовленного администрацией Обамы? - Правильно, НОЛЬ...




"...After spending a good while trying to understand monads in Haskell, and why the Haskell world is so fascinated by them, I finally understand why they aren’t as exciting to other languages, or why they are completely missing from languages like C++: because they’re mostly already there."

Полный текст: A word on Haskell Monads and C++

Tags:









наша кошка Маша извлечена из тех недр конструкций нашего ремонтируемого дома, где не только не ступала нога человека, но и голова человека пролезть не может - пришлось использовать night vision security camera + USB frame grabber + notebook, чтобы понять, где она находится, когда стали слышны сигналы "SOS".




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


Параметр                               C         Haskell
--------------------------------------------------------
Затраченное процессорное время  сек    0.800     44.820
Размер object file              Kbyte  2.5       24.7
Размер executable file          Kbyte  6.1     1256.0

Это, видимо - по крайней мере отчасти - объясняет разницу в популярности...



-- C code -----------------------------------
int main(){
  double   Amin, Amax, Bmin, Bmax, Ai, Bi, diff;
  double   Rsq   = 0.0;
  double   Anorm = 0.0;
  double   Bnorm = 0.0;
  unsigned i     = 0;
  FILE * input;
  input = fopen( "inp.txt", "r" );
  while( fscanf( input, "%lf %lf", &Ai, &Bi ) != EOF ){
    if( i > 0 ){
      if( Ai > Amax ) Amax = Ai; if( Ai < Amin ) Amin = Ai;
      if( Bi > Bmax ) Bmax = Bi; if( Bi < Bmin ) Bmin = Bi;
    } else {
      Amin = Amax = Ai, Bmin = Bmax = Bi;
    }
    i     += 1,
    diff   = Ai   - Bi,
    Rsq   += diff * diff,
    Anorm += Ai   * Ai,
    Bnorm += Bi   * Bi;
  }
  fclose( input );
  printf( "\n A range: %lf %lf; norm: %lf", Amin, Amax, sqrt( Anorm ) );
  printf( "\n B range: %lf %lf; norm: %lf", Bmin, Bmax, sqrt( Bnorm ) );
  printf( "\n Rsq:     %lf", sqrt( Rsq / i ) );
  return 0;
}

-- Haskell code -----------------------------------
import Data.List
process( !count, !amin, !amax, !bmin, !bmax, !asq, !bsq, !rsq )( a, b ) =
  ( count + 1, amin', amax', bmin', bmax', asq', bsq', rsq' )
  where
    amin'       = min amin a
    bmin'       = min bmin b
    amax'       = max amax a
    bmax'       = max bmax b
    addSq sum x = sum + x * x
    asq'        = addSq asq a
    bsq'        = addSq bsq b
    rsq'        = addSq rsq ( a - b )
main = do
  text <- readFile "inp.txt"
  let
    ws = words text
    ds :: [Double]
    ds = map read ws
    toPairs( a:b:abs ) = ( a, b ) : toPairs abs
    toPairs _ = []
    pairs = toPairs ds
    start = case pairs of
      ( ( a, b ) : _ ) ->  ( 0, a, a, b, b, 0, 0, 0 )
      _ -> error "empty input."
    ( count, amin, amax, bmin, bmax, asq, bsq, rsq ) = foldl' process start pairs
    norm x = sqrt x
  putStrLn $ "A range: " ++ show( amin, amax ) ++ "; norm " ++ show( norm asq )
  putStrLn $ "B range: " ++ show( bmin, bmax ) ++ "; norm " ++ show( norm bsq )
  putStrLn $ "R : "      ++ show( norm rsq )





Latest Month

May 2012
S M T W T F S
  12345
6789101112
13141516171819
20212223242526
2728293031  

Tags

Syndicate

RSS Atom
Powered by LiveJournal.com
Designed by Tiffany Chow