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

    Всего: 92

  2. 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)
  3. 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)
  4. Куча / Говнокод #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)
  5. Куча / Говнокод #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)
  6. 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)
  7. Си / Говнокод #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)
  8. Haskell / Говнокод #20287

    −22

    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
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    kobenate :: (MonadVoretion m)
             => Config
             -> Disjunct
             -> RuleZipper
             -> m Disjunct
    kobenate cfg d₀ z = uphill d₀ z 
      where
        climb t x =
          case parent x of
            Just x' -> uphill t x'
            Nothing -> return t
    
        uphill t x =
          case label <$> parent x of
            Just (LinkAnd{}) -> do
              i <- downhill' cfg $ reverse $ before x
              j <- downhill' cfg $ after x
              climb (i \++/ t \++/ j) x
            _ ->
              case label x of
                MultiConnector{} -> do
                  m <- downhill cfg (tree x)
                  let t' = t \++/ m
                  climb t' x
                _ ->
                  climb t x
    
    downhill' :: (MonadVoretion m)
              => Config
              -> [Link]
              -> m Disjunct
    downhill' cfg x = foldl (\++/) ([], []) <$> mapM (downhill cfg) x
    
    downhill :: (MonadVoretion m)
             => Config
             -> Link
             -> m Disjunct
    downhill cfg l0@(Node label subforest) =
      case label of
        Optional _ ->
          ifR (_decay_optional cfg)
             {-then-} (downhill cfg $ head subforest)
             {-else-} (return ([], []))
        MultiConnector _ ->
          ifR (_decay_multi cfg)
             {-then-} (do
               a <- downhill cfg l0
               b <- downhill cfg $ head subforest
               return $ a \++/ b)
             {-else-} (return ([], []))
        LinkOr{} ->
          downhill cfg =<< pickRandom subforest
        LinkAnd{} ->
          downhill' cfg subforest
        Cost{} ->
          downhill' cfg subforest
        EmptyLink ->
          return ([], [])
        Link{_link=i} -> do
          case _linkDirection i of
            Plus  -> return ([], [Left i])
            Minus -> return ([Left i], [])

    Метод вореции дерева методом вниз, вверх и опять вниз, но сбоку. В индексе храним смещение бата правил, зожатых в отдельный файл. Ворециируем любое подходящее правило из индекса и розжимаем дерево в зиппер. Находим пачку подходящих зипперов, см. http://govnokod.ru/20195, ворециируем любой из них. Вверх идём просто, ничего не ворецируя, ибо нужную кобенацию важно сохранить, а вот сбоку идём вниз, тут уж можно любую кобенацию брать.

    CHayT, 28 Июня 2016

    Комментарии (12)
  9. Haskell / Говнокод #20195

    −24

    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
    findConnections :: LinkID
                    -> Link
                    -> [RuleZipper]
    findConnections x = go . fromTree
      where go z =
              case label z of
                Link {_link=l}
                  | x' =*= l -> [z]
                  | True     -> []
                _ ->
                  go' (firstChild z) ++ go' (next z)
    
            go' x = (toList x) >>= go
    
            x' = flipLink x

    1) создаём кучу почти полных копий дерева (не совсем полных, т.к. есть какой-никакой tail sharing)
    2) но это фиксится тем, что обход дерева заканчивается преждевременно из-за ошибки!
    изящный код, который можно породить только в 3 ночи под Sabaton

    CHayT, 14 Июня 2016

    Комментарии (82)
  10. Haskell / Говнокод #20153

    −61

    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
    -- | @'resetT' m@ delimits the continuation of any 'shiftT' inside @m@.
    --
    -- * @'resetT' ('lift' m) = 'lift' m@
    --
    resetT :: (Monad m) => ContT r m r -> ContT r' m r
    resetT = lift . evalContT
    {-# INLINE resetT #-}
    
    -- | @'shiftT' f@ captures the continuation up to the nearest enclosing
    -- 'resetT' and passes it to @f@:
    --
    -- * @'resetT' ('shiftT' f >>= k) = 'resetT' (f ('evalContT' . k))@
    --
    shiftT :: (Monad m) => ((a -> m r) -> ContT r m r) -> ContT r m a
    shiftT f = ContT (evalContT . f)
    {-# INLINE shiftT #-}
    
    .... Usage:
    
    Prelude Control.Monad.Trans.Cont> evalCont $ callCC (\done -> reset (done "Ok") >> return "Fuck you!" )
    "Fuck you!"

    говно прямо в transformers
    плохо зделали, тупо
    хочу, чтобы возвращалось Ok

    CHayT, 07 Июня 2016

    Комментарии (156)
  11. Haskell / Говнокод #20068

    −51

    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
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    data TTree k v =
      TNode {
        _key :: !k
      , _val :: !(Maybe v)
      , _eq :: !(TTree k v)
      , _left :: !(TTree k v)
      , _right :: !(TTree k v)
      , _height :: !Int
      }
      | TTNil
      deriving (Show, Generic)
    instance (Binary k, Binary v) => Binary (TTree k v)
    
    insertWith' :: (Ord k)
                => (v -> v -> v) -- ^ Conflict resolution function
                -> [k]           -- ^ Key
                -> Int           -- ^ Length of the key
                -> v             -- ^ Value
                -> TTree k v     -- ^ Tree
                -> TTree k v
    insertWith' f k1@(k:kt) h v t =
      case t of
        TTNil ->
          insertWith' f k1 h v $ TNode {
              _key = k
            , _eq = TTNil
            , _left = TTNil
            , _right = TTNil
            , _val = Nothing
            , _height = h
            }
        node@TNode{_key=k0, _height=h0, _val=v0, _eq=eq0, _left=left0, _right=right0} ->
          case compare k0 k of
            EQ | null kt ->
                   node {
                     _val = Just $ maybe v (flip f $ v) v0
                   }
               | True ->
                   node {
                     _eq = insertWith' f kt (h-1) v eq0
                   , _height = max h h0
                   }
            GT ->
               node {
                 _left = insertWith' f k1 h v left0
               , _height = max h h0
               }
            LT ->
               node {
                 _right = insertWith' f k1 h v right0
               , _height = max h h0
               }
    {-# SPECIALIZE insertWith' :: (v -> v -> v) 
                               -> [Char] 
                               -> Int
                               -> v 
                               -> TTree Char v
                               -> TTree Char v
      #-}

    а почему бы не использовать несбалансированное тернанрое дерево для индекса
    вроде ничего стра
    Out of memory: Kill process 2987 (govno) score 265 or sacrifice child

    CHayT, 25 Мая 2016

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