1. Список говнокодов пользователя CHayT

    Всего: 86

  2. Haskell / Говнокод #22737

    −100

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    topSort :: V.Vector ([Int], [Int])
           -> Either String [Int]
    topSort kob =
      let
        sup u k = do
          let max i = (i,) . head . snd <$> k `MV.read` i
          l <- mapM max u
          case filter (uncurry (==)) l of
            [(a,_)] -> return $ Right a
            x -> return $ Left "Topology error"
    
        rewrite k s (i, j) = do
          let f x | x == s && j < 0 = []
                  | x == s = [j]
                  | otherwise = [x]
          when (j>=0) $ MV.modify k (_1 %~ (i:)) j
          MV.modify k (_2 %~ (>>= f)) i
    
        go u k =
          readSTRef u >>= \case
            [a] -> return $ Right [a]
            u_ -> sup u_ k >>= \case
              Right s -> do
                modifySTRef' u $ Data.List.delete s
                s_d <- fst <$> MV.read k s
                mapM_ (rewrite k s) $ zip s_d (tail s_d ++ [-1])
                tail <- go u k
                return $ (s:) <$> tail
              Left err ->
                return  $ Left err
    
      in runST $ do
        u <- newSTRef $ [0..V.length kob-1]
        k <- V.thaw kob
        liftM reverse <$> go u k

    Пишем на декларативном языке

    CHayT, 04 Апреля 2017

    Комментарии (7)
  3. bash / Говнокод #22720

    −98

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    #!/bin/bash
    target=beam.smp
    threashold=500
    sleep=10
    tmpfile=fd-${target}-tmp
    while true ; do
         {  date; ls -l /proc/$(pgrep $target)/fd; } > $tmpfile
         nfds=$( cat $tmpfile | wc -l )
         if (( $nfds > $threashold )) ; then
             netstat >> $tmpfile
             file="fd-${target}-$(date)"
             cp $tmpfile "$file"file
         fi
         sleep $sleep
    done

    It ain't stupid if it works.

    CHayT, 31 Марта 2017

    Комментарии (6)
  4. bash / Говнокод #22462

    −127

    1. 1
    ws_root=$(echo 'echo "HackHackHackHack $WS"' | enter_ref_view $foo | awk '/HackHackHackHack/{print $2}')

    Дано: скрипт в 9000 строк на perl, enter_ref_view. Он запускает шелл, в котором выставлена переменная FOO.
    Найти: вывести переменную WS наружу
    Решение: ....

    CHayT, 01 Марта 2017

    Комментарии (17)
  5. Куча / Говнокод #22344

    −12

    1. 1
    -type maybe(A) :: A | nothing.

    Erlang, dialyzer spec. Коротко и в точку.

    CHayT, 16 Февраля 2017

    Комментарии (18)
  6. bash / Говнокод #21841

    −95

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    Самого говнокода у меня под рукой нет, но о его содержимом можно догадываться по результатам его работы.
    
    $ { printf 'GET / HTTP/1.1\r\nHost: '; sleep 0; printf 'konachan.com\r\nUser-Agent: netcat\r\nAccept: */*\r\n\r\n'; } | nc konachan.com 80
    HTTP/1.1 302 Found
    Connection: close
    Location: http://warning.rt.ru/?id=9&st=0&dt=5.178.68.88&rs=http://konachan.com/
         <- Подменённая питухтелекомом часть пакета кончается здесь, она узнаётся по коду 301
    g <- А это уже продолжение оригинального пакета
    Status: 200 OK
    Cache-Control: max-age=0, private, must-revalidate
    X-XSS-Protection: 1; mode=block
    X-Request-Id: 4331f357-c4e2-456f-807d-07e36c4dae4f
    X-UA-Compatible: chrome=1
    
    Попробуем что-нибудь ещё:
    
    $ { printf 'GET / HTTP/1.1\r\nHost: '; sleep 1; printf 'konachan.com\r\nUser-Agent: netcat\r\nAccept: */*\r\n\r\n'; } | nc konachan.com 80
    HTTP/1.1 200 OK
    Content-Type: text/html; charset=utf-8
    Content-Length: 5061
    Connection: keep-alive
    Vary: Accept-Encoding
    ....
    
    $ { printf 'GET / HTTP/1.1\nHost: konachan.com\nUser-Agent: netcat\nAccept: */*\n\n'; } | nc konachan.com 80
    HTTP/1.1 200 OK
    Content-Type: text/html; charset=utf-8
    Content-Length: 5062
    Connection: keep-alive
    Vary: Accept-Encoding
    ....

    Предвижу тренды 2017го года: telnet отнимает популярность у прочих браузеров!

    CHayT, 15 Декабря 2016

    Комментарии (180)
  7. Haskell / Говнокод #21818

    −1000

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    sign' ← case sign of
                '-' → return '-'
                '+' → return ' '
                _   → Nothing
      hh ← (readMaybe [sign',h1,h2]) :: Maybe Integer
      mm ← (readMaybe mm) :: Maybe Integer

    Парсим значение со знаком.

    CHayT, 11 Декабря 2016

    Комментарии (23)
  8. Куча / Говнокод #21690

    −20

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    expand_ipv6(Addr) ->
        AbbrevAddr = case string:str(Addr, "::") of
                          0 -> Addr;
                          _ ->
                              RemainBlocks = 8 - length(string:tokens(Addr, ":")),
                              re:replace(Addr,"::",string:copies(":0", RemainBlocks) ++ ":", [{return,list}])
                     end,
        lists:foldl(fun(Block, Acc) ->
                          Start = case Acc of
                                           [] -> "";
                                           _  -> ":"
                                  end,
                          RemainZeroes = 4 - length(Block),
                          ExpandedBlock = Start ++ string:copies("0", RemainZeroes) ++ Block,
                          Acc ++ ExpandedBlock
                      end, [], string:tokens(AbbrevAddr, ":")).

    IPv6 и эрланг -- это как PHP и даты.

    CHayT, 18 Ноября 2016

    Комментарии (18)
  9. Куча / Говнокод #21124

    −15

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    case lists:member($:, Index) of
        false -> % this is ipv4
            [D4,D3,D2,D1|C] = lists:reverse(string:tokens(Index,".")),
            IP = make_dot_string([D1,D2,D3,D4]),
            Nw = make_dot_string(lists:reverse(C));
        true -> % this is ipv6
            [D|C] = lists:reverse(string:tokens(Index,".")),
            IP = D,
            Nw = make_dot_string(lists:reverse(C))
    end

    Кручу-верчу, запутать хочу.

    CHayT, 06 Сентября 2016

    Комментарии (20)
  10. bash / Говнокод #20830

    −250

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    guest@localhost ~ $ for i in `seq 13000 14500`; do echo "i=$i"; curl -s "http://govnokod.ru/user/$i" | grep "title>Личная кабинка пользователя" ; done  | tee newbs.txt
    
    guest@localhost ~ $ grep -B1 bot_number newbs.txt
    i=14276
        <title>Личная кабинка пользователя bot_number_0 —  Говнокод.ру</title>
    i=14277
        <title>Личная кабинка пользователя bot_number_00 —  Говнокод.ру</title>
    i=14278
        <title>Личная кабинка пользователя bot_number_000 —  Говнокод.ру</title>
    i=14279
        <title>Личная кабинка пользователя bot_number_0000 —  Говнокод.ру</title>
    i=14280
        <title>Личная кабинка пользователя bot_number_00000 —  Говнокод.ру</title>
    i=14281
        <title>Личная кабинка пользователя bot_number_000000 —  Говнокод.ру</title>
    i=14282
        <title>Личная кабинка пользователя bot_number_0000000 —  Говнокод.ру</title>
    i=14283
        <title>Личная кабинка пользователя bot_number_00000000 —  Говнокод.ру</title>
    i=14284
        <title>Личная кабинка пользователя bot_number_000000000 —  Говнокод.ру</title>
    i=14285
        <title>Личная кабинка пользователя bot_number_000000001 —  Говнокод.ру</title>
    i=14286
        <title>Личная кабинка пользователя bot_number_000000002 —  Говнокод.ру</title>
    i=14346
        <title>Личная кабинка пользователя bot_number_9 —  Говнокод.ру</title>
    i=14347
        <title>Личная кабинка пользователя bot_number_99 —  Говнокод.ру</title>
    i=14348
        <title>Личная кабинка пользователя bot_number_999 —  Говнокод.ру</title>
    i=14349
        <title>Личная кабинка пользователя bot_number_9999 —  Говнокод.ру</title>
    i=14350
        <title>Личная кабинка пользователя bot_number_99999 —  Говнокод.ру</title>
    i=14351
        <title>Личная кабинка пользователя bot_number_999999 —  Говнокод.ру</title>
    i=14352
        <title>Личная кабинка пользователя bot_number_9999999 —  Говнокод.ру</title>
    i=14353
        <title>Личная кабинка пользователя bot_number_99999999 —  Говнокод.ру</title>
    i=14354
        <title>Личная кабинка пользователя bot_number_999999991 —  Говнокод.ру</title>
    i=14355
        <title>Личная кабинка пользователя bot_number_999999992 —  Говнокод.ру</title>
    i=14356
        <title>Личная кабинка пользователя bot_number_999999999 —  Говнокод.ру</title>
    
    guest@localhost ~ $ grep -c bot_number newbs.txt
    22
    
    guest@localhost ~ $ echo $((13+9))
    22

    Занимательная нумерология. После void_main было зарегестрировано 22 пользователя с нехитрыми именами bot_number*
    Сегодня днём все посты опускались на -13.
    Теперь Благодетель поднимает их на +9.
    9+13 = 22
    И теперь он кукарекает про модерку.

    CHayT, 17 Августа 2016

    Комментарии (154)
  11. Си / Говнокод #20320

    −43

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    Жила-была маленькая либа для некого специфического IPC c Erlang, которую использовали почти все приложениями на большом-пребольшом 
    кластере. Писалась она во времена, когда эрланг был медленным и на прологе писаным. Использовалась приложениями она как-то так:
    
    ...
    libFoo_initialize();
    for(int i = 0; i<9001; i++) {
        libFoo_registerStuff(bar[i]);
    }
    continue_my_own_business_logic();
    ...
    
    В этом году обнаружили мы странный разброс нагрузки на разных узлах кластера. Профилировали-профилировали, да нашли следующее:
    
    void libFoo_initialize(void) 
    {
       do_stuff();
       int nap = srand(5);
       /* Load balancing, prevent simultaneous registration: */
       sleep(nap);
    }
    
    Таким образом, наша маленькая либа балансировала нагрузку этого кластера, полного матанных приложений, сложной контрольной логики и 
    fault-tolerance питушни, десятки лет! Само собой, это никто выпиливать не решился, и фикс был следующим:
    
    void libFoo_initialize2(void (*callback)(void))
    {
       do_stuff();
       int nap = srand(5);
       /* Load balancing, prevent simultaneous registration: */
       sleep(nap);
       callback();
       sleep(5-nap);
    }
    
    Т.е. цикл с libFoo_registerStuff(bar[i]) переносился в этот колбек. Такие дела.

    CHayT, 03 Июля 2016

    Комментарии (8)