Кресты / Говнокод #6624 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
QString generateGuid( const std::string &tDeviceSerial,
        const std::string &nDatetime, const std::string &licnum,
        const char *violation )
{
    std::ostringstream s;
    s << tDeviceSerial;
    s << nDatetime;
    s << licnum;
    s << violation;
    
    QCryptographicHash hash( QCryptographicHash::Md5 );
    hash.addData( QByteArray( s.str().c_str() ) );
    QByteArray result = hash.result();
    return convToHex( (unsigned char*)result.data(), result.size() );
}

Оно, конечно, работает. Но разобраться в таком коде....

Запостил: panter_dsd panter_dsd, (Updated )

Комментарии (16) RSS

  • Разобраться в коде - дело десяти секунд.
    Слепили строчку - получили для нее МД5-й хэш - вернули его в виде hexadecimal. Все просто, понятно, линейно.

    Я пока только одно говнокодство вижу: полученная строчка - это ни разу не ГУИД, который, как известно, несколько длиннее и имеет фиксированную структуру. Да и не должны ГУИДы быть одинаковыми при одинаковых входных данных функции - они же все-таки глобально уникальные.

    Впрочем, это все лирика. Ну, назвал функцию неправильно пацан, написал GUID вместо Hash - что ж теперь, всем смеяться полчаса?
    Ответить
    • >Ну, назвал функцию неправильно пацан, написал GUID вместо Hash - что ж теперь, всем смеяться полчаса?

      Нет и еще раз нет. Это даже в чем-то неполиткорректно: смеяться над крестоебами. Они же, бедняши, совсем как дети-имбецилы.
      Ответить
    • Охтыж.
      1. Нахрена ostringstream?
      2. нахрена объект QCryptographicHash, если у него есть статическая функция?
      3. Нахрена convToHex, если QByteArray это сам умеет.
      Ответить
      • Давай я сразу выскажу свое предположение: человек, написавший сей код, недавно столкнулся с Qt. Правильно? 🙂

        Меня на такие выводы толкает упорное использование контейнеров из STL. Кутишные контейнеры очень даже удобны и приятны в использовании, поэтому "гибриды" с std::string и прочими встречаются во всяких интерфейсных прокладках. Ну или в коде зеленых новичков в Qt. 🙂

        > 1. Нахрена ostringstream?

        Человек не привык использовать вкусности QString и юзает его как std::string. В общем случае, чтобы получить строку, слепленную из параметров произвольного типа, приходится пихать все в ostringstream.
        Пацан, конечно, перемудрил слегка - у него кругом строки, можно было в одну тупо слить конкатенацией.
        С другой стороны, его можно понять - мало ли как мысль у него шла. Может, он сначала планировал в функцию дату-время как число передавать, написал с ostringstream, а потом власть в стране переменилась и дату-время он стал передавать в виде строки.
        Обычная ситуация.

        2. нахрена объект QCryptographicHash, если у него есть статическая функция?

        Если парень новичок в Кути, он мог и не заметить такой тонкости. Нашел пример использования класса в документации и сделал так же. Простительно и не страшно.

        3. Нахрена convToHex, если QByteArray это сам умеет.

        Для человека, не работавшего раньше с Кути, QByteArray практически никак не ассоциируется со строками. Он просто не знал, куда смотреть. Да даже если он и нашел описание QByteArray::toHex(), скорее всего, пожал плечами и пропустил - ему же строки нужны в результате, а не массивы байтов.

        В этом смысле QCString из "старого" Qt был попроще для новичка. По крайней мере не было лишнего барьера в понимании, что это как-то относится к строкам.

        Резюмируя: код, конечно, на троечку, но и не откровенное говно. Так, малость попахивает.

        Пацана заставить разобраться с QByteArray и QString, показать, как принято в кутях использовать статические функции - и все у него будет хорошо. 🙂
        Ответить
        • > Пацана заставить разобраться с QByteArray и QString, показать, как принято в кутях использовать статические функции - и все у него будет хорошо.

          Пытался. 🙁 Там все глухо. Я ему сегодня втолковывал, что if (string.isEmpty () ) лучше, чем if (string != "") - он так и не согласился.
          Ответить
          • А паренек-то - кинестетик. Слов не понимает.
            Таких нужно учить административными методами: за string!="" - лишать премии.
            А начнет возбухать - попросить его рассказать в подробностях, как именно работает его вариант проверки, и если он не понимает, что там создается временный объект - пригрозить увольнением за несоответствие. Потому как это основы.
            Ответить
  • ЮFEKFMKNEHSHNLKVIHBXTQTBUVFOFSQEZPDQZXORLRZGEEDNJCCUVROPTYNRQLAFPSGNVMCOKHFNYQIIKMSPFDWLOKJEVJCVCEPUBXRVPNZQJRQBIVMDKUBUGXKEBCCHCQOULSOBYAWMJSBUODQAPLABMWJKEILHISLQAJUTJRTXCOHRIFLHRZXLNBXRBPQEFDZZHLKBIQULCQAHUKXRRNJQAAFTUXAZNQGLSULVHAKDGZICUBMQYVQANWXVAUQXXJNTGOOKBGKQWOPBCUBFUUZNXZOSBHQKSZASUGPNPEYVWPEUHRWDXOAAKDFAZQQTKGTEWMNOVWNJXEXEEKIRTOXYZFFRTSWWCNGDTONPLYQSMOVHNIPTPBXJZRYPIBFEUUVKUSUOJFQZBUIKRQRNCRFXTPYUAUHPCMKGEWXUVBEWNEYWDNWXQFSSHXGJYUTBKDBIHSILPMCEKIQMDXXKVHTURQWUQKHBCYZUHBTQEAHKRCIXTILCLQKZJENVGKOPREKWEABNNXQGYPKBWXAKJULMGDQXHWBOXWARIPGSBODGIDXCAIHEYFHANJYYEIGNQAFUZOLRUSNTAGCAVBFUNYRCWZTSRCUTGIKBZXLTXZTXDUVHSVJOZUQJXNIJBPLHCEQRDTQ
    Ответить
  • ЫOEALFKZQPFINQFEYHMYTSRLYLVONISBFZRFRIDQLTTEDXPBKEPFJHQEASLOVKEGZUCGEDHYCKTPEXZNAANFNBJCKASQLRQZSFRBRZQVJANAWCPJBVYQZSEYVGEGLTRRETIDSLDGSLJONJRCKFVBJXGWZSIWGYHUBLKNDQZDMEWGIGHVRZYAHZTZENAJKNQNNZKHZHUWRODZUAIHYZBDXQJODWJXEOEAYQJAMTJCNLUHMVBFUEXCIMVCWNCKJOWWMBXKKYAKMMUZPWORCREUHPRCJJJPVFUEIXTZKCDCDMVOYWSOCKYCQVIRZOZWVCPUHIOAMQAGZNWLTCDBSRXFRRHKXSLXNAYXRGPBUPMLMRHWLALSKGWXVSUKDKKGYCHMSZIQUQWAYTEOMTXUZFZAEKQFITYFAPRKEUHORJZFZVKXKOAQSHKQLRTXSSLWMXIKBRGCPVZTZCDMQYZPMRMFVBJVJPEIJVUTEURJEZZFBNPAGLPZRIPAEKKYLTYVSTOFJQQNNCBFATDDOPZFOZKNBSPYWCJSVWYDRRNYUMHDOEORZUXRWQGYETKETXNCBDPMLTAIBASEWJLHHHACBKRENZYNHEMKSZFQBAXHCQFQYCGQTQXATAUABJUFWASOOTFYJSJNQVKIZKNNKHCPUSAOMFUFTUOG
    Ответить
  • йF.A Z G,TY"X"J!J)F.DZ)V"W W!I S?S"EA W$S,ZP(C,GY(ME!I.W?F,J!U$D!LJ H"O,Q(M:J$U"E!D:Y.E UV,U"Z?F.C!J.W"S(O(W)J.D"A)Z"F(I?W"X)Q)S)V?F O$Y?T!E(X.Z"J E!R:V W?H$A?KL:L?U:X(L:HT:D?M)W!L H:E(Y(Q,Q.O A"Z:B?X!T$I:D!V)P"R.J,P!O(Y$W:S$C!E?Y)C M S)EF,Q E:I(N D K:L)M:M.T:N:RX$Z,O$X.C(G"U V.F!ZD D)L(U B!B:X)JL:K!I"BQ)L?Z?V"A RM:G M"L A"N:H!Y?O:L(S(H!Q:P!D$KU!S)V)C T"X,I:X(E,M(T"A$R$BL(V)F,C Q)W(E.P W?IC)B(A,D)R?V!H.Z)I.V"E)L I.AW,R D"V"Y.MH:R:R$J:Q,M!O J?Q)GT!PJ?TZ!A.I,C$H"O?R"Z$WKJ$U,O,G(V!W.K?G)T!O(B"B:Z)S:Z"K.E:Z)X"L"J Z(Y$T,Z!A(D(R?C(Y"Y:J"Z"X(X.M Q:D,H$K,J$T:BUJ,P:G Z,QH$I S"K W.E?Y!Q)H C$H"BW)L!R$R!H!Z R?L(C:F"AT C?K(K.M)W?I"M:C!I"D,N:K?OT!S:F)G.T!S)D!S"R:L(U(O U.Y K!OF,R)I,M?H$Q.P:A.A?G"EF(N"R!H(MUM!H?M,O)T,Y"Y:P P,F.D)R$S?Y A,M:A?F"G?C!U,V(L(D?A F?D"T"N B(LЕIBKQBZREMDDRFBVLOMKFMETSFVAQBQPWIJWSXBJMBVFYBLDQKPLHQNXFESUJORPBJLCOBKFHTSYKVQSHGRKKMAETYVVMBSVQOWVDGUCFXFJQESPJSPHYJGRSUYJUBZVDYVGOCAUBWYIRKYZGDOLOFDTMFYBEPFXVJGPNEJPQZQQJCXGSWEPLYGDISPSGQSFKMBKAWBZWNLOSSOISWWGALHZIROHJWBBGEDROUJWSDOYUJVGFQDEFZPGZHFNLGMERQYCGPFSEFVFNLLYCRJMRTUTBR
    Ответить
  • д$H)E$L)T?T:B:F!X?L(X"K!S$I"D(G K:X)A?I?G!J(N?V?Y(X"T.X,P!X,K)B X.H,B M V.K.R"A$E.C(B?J)GT)G.L"I L!D!N,DX R?X S!X!Q)M V B.C,E,H(E$E$W?N,O!W!Y,C?O,L(D"E C(E S?C"A)B(D"D:L?Z)J?IQD!Z(C(N,J(E.L!F!N)Q$O,U)HS?M(B$P(Y"M!J"J$U?Z,L"Z:J X)J.J"N.K:G$J)W?A)IV:M.LX:J)O:KA.D?W)I(Y,X)D,T$M"J(B:Z$YWQ)URR:PP NU(U.E$J,F.G Y)S)Z X.R(V(CI(A)X?F?A"T?EI"T!S"X,F!Z(X(F$O$F$T:P)F.P!K$K:D"D!EMTI"Z:AJ?U?CC:H.M"Y.G?LZ.L.UV!J,PA(F.R(R"M(R?X"G"U$A(M,U U?JCN)M.I:T.E)R,H,Q"Q$L:OA$E(F?E(O"FT"O?Z!G:U.L?R!Q Y,M,WS"Y)T.Q$M M:T)K$M,N)B"R,D)A)TJ$Z:N?J X!S?Q.V)O?P:Z?J"A?O:HB!U?SA$O"L$AC!M$C"OF?O(A$K!F$D$F)G!O(F.X$W$U K$G!D P E"M"VT)E"W.R G,J!V(D!J"B!C"N!I.W,M.K N(P B!S B:L(Y)T:I:C"W?U!O(V.X)BR,W,Z"Q,S$M P?O!H R?V"Z?F,W,Z,O"C.D$S?I!N?Z,X)Y!I.R:U J!U$S.U?K$I,X!A,O!D(R)O AX:Q!U"K)R:HT(AI!Y.R M$B)I,K C?SV?Z?Z)Y!T M Q$B$E A,F!V"F(V LN.H.GK$N?L Z.H)H.Z N"U!K(L,H$X.WCM"MF,R X:S"M$V.T)UR$S HM)Q?U)B,J"Z?J?Q:DS)V)E!XA,C,W!D S"M?C(L!R(Z:G W:Y!US$AJG"P!N"Z?D)Y?W,Z$L)C!W(P"F,N:Q(Y A,O?R)C"Y$X"M:O)T J?F!J:Y.X"N:S,E!Y!V"G!TS!E!L!H"GI,C"W$Y)Q,U Z)G)Z)G"I)P(P?O(N)O)J?X.M"I?G K"R:N I)K N$Y,R,Y.W.N.C(W.A?J:M?Z?W)P"BZ M"C N!X?D!W(D(QP)W(G)C?P$Z:J?T(WS(F:X:W R!N)P YR:A:L.SV:L)J)V HO"D)Z)O)B!P(ZZ?T(H"D?FG G.T:A T?D!Q:N)F B Z(B$A!L$TЮQUHLFCKEIEUPDBOJDCKLAYLHRWMGBSLCMXLWEGZGMBICKLPFQUOV
    Ответить
  • т T.J,O E,X!M(P?R:C.E$I)C!K(T.V G!D(I)S$I.N.X:O(B"R:W$K D,M,S:V"OS"T,L"J(R(H!D,P,F?F,Y)D"O"JQ"U:E!QZ?P.R$U!G)O$L"S,K,WI!O(S.Z$V)A.F"FL)X)U)B.Y Z?T:S:W(Z$Q K(M,Z H"H.Y(W.P E?ZN,Z,Q?XI E"X.X)A,C!J"HOH)G:W"FV(O Y$DQ"N!H"C$O.Z N:Y(C?A?N.D,J"B)W"D,S(W C$N!L"U$W?Y HR)W,Y$Q:CA Z"BX G:K.O Y(S$E A,P!D.D$V,S"A?L,N!H.O)JS,L.E!H,Z!Z$T"A.G?V.O,O)K)J$Z:H:I"I:J$F)WH.I"K,T.M?T"I,N.Z(E.Z,B.N$W.UZ:P Y!G.E:U(L$R:W(F"P"R!V$T)R Z,W!B(X!I"K!W:Q,CJ!O,HN)P)M!Q)S(WP$B)K!Q!R?K)T:S RH$EW)P:T$I O P.G(D,Z)E:U:ER)H:N!K:O)Y!U P:A:K:X!W A!P,P"Z)P H:Q F$M.O(A V$K(G.K.U.V(RF)C(T.I I"U,Y.P$N$T,I Z)S)Y"I(U"N:I,A$I:J!Y.E.T!J?V:B!C(U.V(A:H)P:Y?CA:U(R Y)N:L,E J:J!B:G.X!P:J$Z:S"GJ?B:O)K?Q?C H!P?J,BF(C:Q.A E.K(P$ID X(E:W,I:H)W(U(I(H!D"W"JVGC:H)N!E!H$N,W$S?Y"G$R)J!L N"B!W.V C?LM)P(CY)B?E,Y"X$R,A,E"UH$U!O:X!B$T"L?N"O!B.U.K:J$T.C.C.C.J:K.G(T?B,V?J J!H!Z(S"R,T?X:E)J$Q Y HJA,L)S?K!D W$PH)H!F.Z.X!INC F.J?U:F!Y.C(Z W?Q$N$F:A?V:N$R.A!P(Q,J:Z?K:W!T?U$ZT:E?F?T(A.Y Q$C,E)Z.T)H$C:V C.TЮCFFURFTUWMMRWAXTRPAXUTEXGNINVYLXYXIXSSLYTAEWVRJ
    Ответить
  • ж(B$F)Y$B T:I)I(W!A,GJ(L)ED U:KQ)K.E:W$L,A,M!W(C,C.Q!K N,E E(Q$Q)RG)D,Z:H:S,Z)Y D"J!I,R B"Z$E?K!H"G!F,DM,A(B:L E)J"W P I W$P(J V$S,I!H)F(XT:K N,W!F:D!U?B(P?C?P)S)Y,A,K:M)U)Q(K X)O!B:P)Z!T ML.F.F$X:N)E"R:Q C O.X"JE$F E,L(X$SM(A$G$T G!V?H)N$M,C$G!L)U,M.R.L"W.H?Z$M"S)T(EPL:W,G(A:D:B!X(Y!A(A(D Q:JM.OY"V?Q:Z?J!I!F.H?E S:W(T G:X,V:C.T?R$B"A?T.X$E)A)A$A$P)W:I:F.B!C O(X:D?NОBXSXXZNRAJVXNFHHOPNORGCCFPSUOQMXDPXRDNRTLGVFBONLBKFRNTWREHQGVFYSHSUFUUFAECYQWKYCPKEQPTPXFRMMLHLYIEQMAHVYXDYWTYDWFCERADZZYPLF
    Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8