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

    Всего: 168

  2. Perl / Говнокод #11812

    −81

    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
    #!/usr/bin/perl
    use strict;
    <>;
    while (my $line = <>) {
        chomp($line);
        my ($name, $surname, @phones) = map {
            s/^7(\d{10})$/+7\1/;
            s/^8(\d{10})$/+7\1/;
            s/\"//g;
            $_;
        } split(";", $line);
        print "BEGIN:VCARD\n";
        print "VERSION:3.0\n";
        print "FN:$name $surname\n";
        print "N:$surname;$name;;;\n";
        for my $phone(@phones) {
            print "TEL;TYPE=CELL:$phone\n" if $phone;
        }
        print "END:VCARD\n";
    }

    Сей чудесный скрипт был написан после часа мучений и безуспешных попыток загрузить CSV с контактами на ведроид.

    bormand, 20 Сентября 2012

    Комментарии (4)
  3. Java / Говнокод #11767

    +75

    1. 1
    2. 2
    3. 3
    4. 4
    Process process = Runtime.getRuntime().exec("su");
    OutputStream outputStream = process.getOutputStream();
    String cmd = "keycode " + KeyEvent.KEYCODE_BACK;
    outputStream.write((cmd + "\n").getBytes("ASCII"));

    Андроид. Вот такой вот прекрасный способ программно нажать кнопочку "Back".

    http://stackoverflow.com/questions/5832861/android-back-key-by-software

    bormand, 13 Сентября 2012

    Комментарии (8)
  4. JavaScript / Говнокод #11734

    +160

    1. 1
    2. 2
    3. 3
    4. 4
    if(h&&c-L<0)return y^=8,G--,L;
    
    // Toledo просрал оптимизацию на 2 байта ;)
    if(h&&c<L)return y^=8,G--,L;

    В общем-то этот пост не про говнокод, а про обещанную попытку привести в понятный вид шахматы,
    упомянутые в http://govnokod.ru/11704.

    https://github.com/bormand/nanochess
    Читаем, играем, обсираемкомментируем...

    bormand, 09 Сентября 2012

    Комментарии (32)
  5. C++ / Говнокод #11697

    +17

    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
    char stmt[1024];
    int offset = 0;
    // ...
    for ( int count = 1 ; ; )
    {
        offset += sprintf(stmt + offset , "$%d" , count);
        count ++;
        if ( count > p_max )
        {
            break;
        }
        offset += sprintf(stmt + offset , ",");
    }

    Сборка строки вида "$1,$2,$3,$4" для запроса к PostgreSQL.

    Q: Где здесь с++, bormand?
    A: Проект написан на с++.

    bormand, 03 Сентября 2012

    Комментарии (22)
  6. Java / Говнокод #11645

    +69

    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
    public static void main(String[] args) throws Exception {
    	// ProblemFactory in action...
    	DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
    	docBuilderFactory.setValidating(false);
    	docBuilderFactory.setNamespaceAware(false);
    	DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
    
    	// I really don't want to download that stupid DTD from w3c.org
    	docBuilder.setEntityResolver(new EntityResolver() {
    		public InputSource resolveEntity(String publicId, String systemId)
    				throws SAXException, IOException {
    			return new InputSource(new StringReader(""));
    		}
    	});
    
    	// Just fine
    	Document doc = docBuilder.parse("http://govnokod.ru/comments");
    
    	// ProblemFactory again
    	XPathFactory xpathFactory = XPathFactory.newInstance();
    	XPath xpath = xpathFactory.newXPath();
    
    	// Just fine
    	NodeList nodes = (NodeList)xpath.evaluate("//li[@class='hentry']", doc, XPathConstants.NODESET);
    	Pattern topicUriRegex = Pattern.compile("^.*/(\\d+)$");
    
    	// This is Java, not C. Why I need to write that shitty loop?!
    	for (int i=0, n=nodes.getLength(); i<n; i++) {
    		Node node = nodes.item(i);
    		String author = xpath.evaluate(".//strong[@class='entry-author']/a/text()", node);
    		String language = xpath.evaluate(".//a[@rel='chapter']/text()", node);
    		String topicUri = xpath.evaluate(".//a[@rel='bookmark'][@class='entry-title']/@href", node);
    		Matcher m = topicUriRegex.matcher(topicUri);
    		String topicId = m.matches() ? m.group(1) : "неизвестный говнокод";
    		String text = xpath.evaluate(".//div[@class='entry-comment']", node);
    		
    		System.out.println("==== " + author + " наложил в " + topicId + " (" + language + ") ====");
    		System.out.println(text);
    		System.out.println("");
    	}
    }

    Треш угар и содомия.Java, DOM и парсер уютненького.

    bormand, 24 Августа 2012

    Комментарии (2)
  7. Java / Говнокод #11640

    +60

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    class Test {
        private int m_field;
    
        int getField() {
            return m_field;
        }
    
        void setField(int field) {
            m_field = field;
        }
    }

    Дискасс.

    bormand, 23 Августа 2012

    Комментарии (43)
  8. C++ / Говнокод #11625

    +27

    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
    // до рефакторинга
    if(!y) {
        if(!x) {
            if(grid[pos+1] || grid[pos+fieldWidth])
                ret = true;
        } else if(x == fieldWidth - 1) {
            if(grid[pos - 1] || grid[pos+fieldWidth])
                ret = true;
        } else {
            if(grid[pos-1] || grid[pos+1] || grid[pos+fieldWidth])
                ret = true;
        }
    } else if(y == fieldHeigth - 1) {
        if(!x) {
            if(grid[pos+1] || grid[pos-fieldWidth])
                ret = true;
        } else if(x == fieldWidth - 1) {
            if(grid[pos - 1] || grid[pos-fieldWidth])
                ret = true;
        } else {
            if(grid[pos-1] || grid[pos+1] || grid[pos-fieldWidth])
                ret = true;
        }
    } else {
        if(!x) {
            if(grid[pos+1] || grid[pos+fieldWidth] || grid[pos-fieldWidth])
                ret = true;
        } else if(x == fieldWidth - 1) {
            if(grid[pos - 1] || grid[pos+fieldWidth] || grid[pos+fieldWidth])
                ret = true;
        } else {
            if(grid[pos - 1] || grid[pos+fieldWidth] || grid[pos-fieldWidth] || grid[pos + 1])
                ret = true;
        }
    }
    
    // после рефакторинга
    bool ret = getGridPoint(x-1, y) || getGridPoint(x+1, y) || getGridPoint(x, y-1) || getGridPoint(x, y+1))

    Код одного из моих друзей. Проверяет закрашена ли хотя бы одна клеточка вокруг указанной...

    bormand, 20 Августа 2012

    Комментарии (13)
  9. C++ / Говнокод #11576

    +8

    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
    bool ASN1Parser::ConvertOID(const ASN1Block &blk, char *oid, unsigned int bufSize) {
        int a = 0;
        bool first = true;
        char tmp[32];
        oid[0] = 0;
        for (unsigned int i=0;i<blk.size;i++) {
            unsigned char c = data[blk.offset+i];
            if (c & 0x80) {
                a = (a << 7) | (c & 0x7F);
            } else {
                a = (a << 7) | (c & 0x7F);
                if (!first) {
                    sprintf(tmp,".%d",a);
                } else {
                    sprintf(tmp,"%d.%d",a/40,a%40);
                }
                a=0;
                first = false;
                if (strlen(tmp) >= bufSize) return false;
                strcat(oid, tmp);
            }
        }
        return true;
    }

    И еще один говнокодец на тему ASN.1 - распаковка OID'а.
    Кто найдет ошибку - получит пирожок с полочки ;)

    bormand, 12 Августа 2012

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

    +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
    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
    #include <stdio.h>
    #include "gost.h"
    
    int main() {
        MemoryFile mf("root.cer");
        MemoryFile mf2("test.cer");
    
        ASN1Parser parser(mf);
        ASN1Parser parser2(mf2);
    
        ASN1Block e1[2];
        parser.Split("30{30{A0#,02$1,30#,30#,30#,30#,30{30#,03$2},A3#},30#,03#}", e1);
    
        unsigned char px[32], py[32], r[32], s[32], h[32];
        for (int i=0;i<32;i++) {
            px[i] = mf.data[e1[1].offset+i+3];
            py[i] = mf.data[e1[1].offset+i+35];
        }
    
        parser2.Split("30{30$1,30#,03$2}", e1);
        for (int i=0;i<32;i++) {
            r[i] = mf2.data[e1[1].offset+64-i];
            s[i] = mf2.data[e1[1].offset+32-i];
        }
    
        Gost3411 hash;
        hash.AddData(mf2.data+e1[0].offset-4, e1[0].size+4);
        hash.Finish(h);
    
        Gost3410 g;
        if (!g.VerifySignature(h, px, py, r, s)) {
            printf("Invalid!");
        } else {
            printf("Valid!");
        }
        return 0;
    }

    Продолжение http://govnokod.ru/11528. Вот так я проверял валидность сертификата...
    Прекрасные говорящие имена переменных...
    Удобный парсер ASN.1...
    Отличная инкапсуляция...
    Ни одного магического числа...

    bormand, 12 Августа 2012

    Комментарии (13)
  11. C++ / Говнокод #11549

    +34

    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
    #include "xsmell.hpp"
    #include <iostream>
    
    TAG(html,  NO_ATTRIBS);
    TAG(head,  NO_ATTRIBS);
    TAG(title, NO_ATTRIBS);
    TAG(body,  NO_ATTRIBS);
    TAG(p,     NO_ATTRIBS);
    TAG(a,     ATTRIB(href));
    TAG(img,   ATTRIB(src), ATTRIB(alt));
    
    int main()
    {
        using namespace xsmell;
    
        document doc = 
            _
            <html>_
                <head>_
                    <title>"XSMELL demo"<!title>_
                <!head>_
                <body>_
                    <p>"Yesssssssssssssssss!"<!p>_
                    <img .src("chucknorris.png") .alt("sneezing eyes open")>_ <!img>_
                <!body>_
            <!html>
            _;
    
        std::cout << doc << '\n';
    
        return 0;
    }

    C++ умеет HTML не хуже этих ваших похапешечек ;)

    https://bitbucket.org/edd/xsmell/src

    bormand, 07 Августа 2012

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