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

    Всего: 88

  2. 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)
  3. Си / Говнокод #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)
  4. 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)
  5. 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)
  6. 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)
  7. 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)
  8. Си / Говнокод #20049

    −39

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    <?php include_once "stdio.h"; ?>
    
    int main()
    {
        <?php
            for($i = 0; $i < 20; $i++)
                echo 'printf("%d\n", '.$i.');';
        ?>
    }

    You can use PHP as a C preprocessor. The advantages are:

    very similiar syntax, so syntax highlighting works.
    <? and ?> are not used in standard C (with non-standard C, the only thing that gets broken is old GCC extension operator that returns min/max)
    it's rich in libraries.
    it's turing complete.
    usage of macros is very explicit. (compared to sneaky C preprocessor macros)

    For serious use though, making PHP print the #line directives is needed for debugging preprocessed code.


    http://stackoverflow.com/questions/396644/replacements-for-the-c-preprocessor/16256052#16256052
    ящитаю это гениально

    CHayT, 20 Мая 2016

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

    −60

    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
    instance Applicative (Sample m) where
      pure a = Val a
    
      Val{_unVal=f} <*> a = fmap f a
      Fork{..} <*> a = Fork {
          _next = \x -> (_next x) <*> a
        , ..
        }
      Zero <*> _ = Zero
      Random{..} <*> a = Random { -- Crazy-ass weirdo haskeller, why did you define instance Random for ->?!!
          _next = \x -> (_next x) <*> a
        , ..
        }

    CHayT, 07 Мая 2016

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

    −56

    1. 1
    import Control.Lens

    то неловкое чувство, когда долго боролся с искушением, и таки добавил эту строчку
    https://ro-che.info/ccc/23

    CHayT, 02 Мая 2016

    Комментарии (4)
  11. Куча / Говнокод #19694

    +5

    1. 1
    https://meduza.io/shapito/2016/03/24/iskusstvennyy-intellekt-ot-microsoft-za-sutki-polyubil-gitlera-i-voznenavidel-feministok

    RIP in peace, nazi AI ;_;

    CHayT, 25 Марта 2016

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