- 1
Тестовый тред, можно игнорить
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
Тестовый тред, можно игнорить
−7
Про убогость ООП подхода.
Итак, вот допустим наследование. Есть всякие там тупые примеры ООП, типа "котик и собачка наследуется от четырехногих" и проч., где подобный бред вполне работает. Но давайте попробуем рассмотреть более интересные ситуации.
Допустим что мы пишем некую игру. В игре есть некое оружие, например там есть огнестрел и дубинки. И мы делаем ружье, которое одновременно и огнестрел и дубинка, т.е. ружьем можно и как палкой уебать, и пальнуть как из револьвера. У родительского класса "огнестрел" есть свойства, типа дальности выстрела, точности, используемых боеприпасов, уровень прочности(износ), вес, наносимый урон при попадании. У дубинки есть свойства длины дубинки, уровень прочности(износ), вес, наносимый урон при ударе. Вес для ружья нам нужен только один, т.е. нет смысла делать два "веса" одному предмету. И огнестрел и дубинка наследуется от родительского класса "объект инвентаря", в общем тут ромбовидное наследование, которое в разных языках решается разными способами. Ну ок, допустим что мы там каким-то образом указали компилятору некоего языка X, что наследовать свойство "вес" надо лишь один единственный раз, как и прочие хрени, которые являются общими для родительского класса "объект инвентаря". Теперь надо решить с прочностью. Не все "объекты инвентаря" в этой игре имеют свойство прочности, есть например какие-то расходные материалы, типа патронов, для которых понятие прочности неприменимо. Использование ружья как дубинки изнашивает его не таким же самым образом, как использование ружья как огнестрела, но при этом слишком большой износ ружья-как-дубинки может настолько повредить его, что как огнестрел его уже и не поиспользовать из-за погнутого ствола. Но использование ружья как огнестрел никак на износ ружья-как-дубинки не влияет, типа это механический износ спускового механизма, износ ствола при стрельбе...
0
Бесконечный оффтоп имени kcalbа #2
K C A L B K C A L B
C C C C
A + A +
L + L +
B K C A L B K C A L B
K C K C
C A C A
A L A L
L B L B
K C A L K K C A L B K
C C C C
+ A + A
+ L + L
K C A L B K C A L B
Бесконечный оффтоп имени kcalba #1 https://govnokod.ru/28122 https://govnokod.xyz/_28122/
+131
Я даже не могу сказать, что не так с "PHP", потому что… Окей. Представьте себе, эмм, коробку с инструментами.
Набор инструментов. Выглядит нормально, инструменты как инструменты.
Вы берёте отвёртку и видите крестовину с тремя лепестками.
Окей, не очень полезно для вас, но может когда-нибудь понадобиться.
Берёте молоток и ужасаетесь тому, что он раздвоен с двух сторон.
Он, конечно, всё ещё пригоден, я имею ввиду, что вы можете забивать гвозди серединой бойка, держась за ручку наоборот.
Берёте плоскогубцы, у которых нет зазубрин; они плоские и гладкие.
Не так полезно, как могло бы быть, но ими всё ещё можно выкручивать болты.
И так далее. Все инструменты чем-то странные и вывернутые, но не настолько, чтобы
быть совсем бесполезными. И во всём наборе нет конкретной проблемы; в нём есть все инструменты.
Теперь представьте себе миллионы плотников, использующих такой вот набор
инструментов и говорящих вам: «А что не так с этими инструментами? Я никогда не использовал ничего другого и они отлично работают!».
И плотники показывают вам, построенные ими дома с пятиугольными комнатами и крышей кверху ногами.
Вы стучитесь в дверь, она просто падает внутрь и они орут на вас за то, что вы сломали их дверь.
Вот что не так с "PHP".
Время баянчиков.
+159
недавно на хабре была статья "Платформер на Three.js"
так вот автор уверяет, что
"Читателям с нешкольным образованием или ветеранам игростроя этот псевдокод известен под названием «метод Эйлера», а также известно что этот метод — просто отстой."
и приводит картинки из википедии, где им решают достаточно сложный дифур
а вот свой "школьный" дифур он решил вот так
if( в воздухе ) playerVelocity.y -= gravity * time;
playerPosition += playerVelocity * time;
"Как видим, запустив игру в firefox, мы получим одну динамику, а запустив её в chrome — совершенно иную. Поведение персонажа будет «плавать» в зависимости от интенсивности фоновых задач и расположения звёзд. Что же делать?"
ответ-учиться программировать
void update(float dt) {
pos += (velocity + force * dt * 0.5f) * dt;
velocity += force * dt;
}
оп-ля! все встало на свои места. теперь эйлер с не фиксированным шагом НЕ ПЛАВАЕТ!
+139
#define BPP_AES_SHIFT_ROWS_II(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) \
(a)(f)(k)(p)(e)(j)(o)(d)(i)(n)(c)(h)(m)(b)(g)(l)
Навеяно http://govnokod.ru/14511
Welcome to the macro hell: https://github.com/bormand/pp_aes
+78
if (optional != null && optional.isPresent()) {
...
+71
private byte[] readBytes(InputStream pInputStream, int pLength, int pRetryCounter) throws IOException, WhateverException
{
byte[] bytes = new byte[pLength];
int bytesRead= pInputStream.read(bytes, 0,pLength);
if (bytesRead == -1)
{
throw new WhateverException("End of InputStream has been reached");
}
if (pLength != bytesRead)
{
byte[] bytesReadNextAttempt = readBytes(pInputStream, pLength-bytesRead, pRetryCounter + 1);
if (pLength != bytesRead + bytesReadNextAttempt.length)
{
// less bytes available; connection was closed
throw new WhateverException( ... );
}
System.arraycopy(bytesReadNextAttempt, 0, bytes, bytesRead, bytesReadNextAttempt.length);
}
return bytes;
}
поддержка паршиал ресив. такого "метода" я еще не видел.
ЗЫ а че в жабе нету никакого MSG_WAITALL?
+76
procedure TForm1.FormCreate(Sender: TObject);
begin
SetCurrentDir(ExtractFileDir(Application.ExeName));
try
ADOConnection1.Connected:=true;
if ADOConnection1.Connected=true then
begin
ADOTable1.Active:=True;
end;
except
MessageDLG('Îøèáêà ïîäêëþ÷åíèÿ ÁÄ',mtError,[mbOk],0);
end;
SetCurrentDir(ExtractFileDir(Application .ExeName));
Не знаю, откуда ты, но знаю, куда тебе дальше.
+2
var buf = Buffer.allocUnsafe(kexInitSize);
var p = 17;
buf[0] = MESSAGE.KEXINIT;
if (myCookie !== false)
myCookie.copy(buf, 1);
writeUInt32BE(buf, kexBuf.length, p);
p += 4;
kexBuf.copy(buf, p);
p += kexBuf.length;
writeUInt32BE(buf, hostKeyBuf.length, p);
p += 4;
hostKeyBuf.copy(buf, p);
p += hostKeyBuf.length;
writeUInt32BE(buf, algos.cipherBuf.length, p);
p += 4;
algos.cipherBuf.copy(buf, p);
p += algos.cipherBuf.length;
writeUInt32BE(buf, algos.cipherBuf.length, p);
p += 4;
algos.cipherBuf.copy(buf, p);
p += algos.cipherBuf.length;
writeUInt32BE(buf, algos.hmacBuf.length, p);
p += 4;
algos.hmacBuf.copy(buf, p);
p += algos.hmacBuf.length;
writeUInt32BE(buf, algos.hmacBuf.length, p);
p += 4;
algos.hmacBuf.copy(buf, p);
p += algos.hmacBuf.length;
writeUInt32BE(buf, algos.compressBuf.length, p);
p += 4;
algos.compressBuf.copy(buf, p);
p += algos.compressBuf.length;
writeUInt32BE(buf, algos.compressBuf.length, p);
p += 4;
algos.compressBuf.copy(buf, p);
p += algos.compressBuf.length;
// Skip language lists, first_kex_packet_follows, and reserved bytes
buf.fill(0, buf.length - 13);
Мечтают ли скриптухи об Электросишке?
https://github.com/mscdex/ssh2-streams/blob/master/lib/ssh.js