- 1
https://github.com/rabbitmq/erlando/blob/master/src/do.erl#L179
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
Всего: 67
−23
https://github.com/rabbitmq/erlando/blob/master/src/do.erl#L179
Т -- трудолюбие. Весь их хитрожопый траверс AST ужимается буквально в десяток строк.
−100
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
Пишем на декларативном языке
−98
#!/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.
−127
ws_root=$(echo 'echo "HackHackHackHack $WS"' | enter_ref_view $foo | awk '/HackHackHackHack/{print $2}')
Дано: скрипт в 9000 строк на perl, enter_ref_view. Он запускает шелл, в котором выставлена переменная FOO.
Найти: вывести переменную WS наружу
Решение: ....
−12
-type maybe(A) :: A | nothing.
Erlang, dialyzer spec. Коротко и в точку.
−95
Самого говнокода у меня под рукой нет, но о его содержимом можно догадываться по результатам его работы.
$ { 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 отнимает популярность у прочих браузеров!
−1000
sign' ← case sign of
'-' → return '-'
'+' → return ' '
_ → Nothing
hh ← (readMaybe [sign',h1,h2]) :: Maybe Integer
mm ← (readMaybe mm) :: Maybe Integer
Парсим значение со знаком.
−20
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 и даты.
−15
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
Кручу-верчу, запутать хочу.
−250
[email protected] ~ $ for i in `seq 13000 14500`; do echo "i=$i"; curl -s "http://govnokod.ru/user/$i" | grep "title>Личная кабинка пользователя" ; done | tee newbs.txt
[email protected] ~ $ 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>
[email protected] ~ $ grep -c bot_number newbs.txt
22
[email protected] ~ $ echo $((13+9))
22
Занимательная нумерология. После void_main было зарегестрировано 22 пользователя с нехитрыми именами bot_number*
Сегодня днём все посты опускались на -13.
Теперь Благодетель поднимает их на +9.
9+13 = 22
И теперь он кукарекает про модерку.