1. C++ / Говнокод #26481

    +5

    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
    #include <stdio.h>
    #define UPP 300
    float conversion(float fahr);
    
    main(){
    	float far;
    	int a;
    	a = UPP;
    	for(far = 0; far <= a; ++++++++++++++++++++++++++++++++++++++++far)
    		printf("%.f\t%.1f\n", far, conversion(far));
    }
    
    float conversion(float cels){
    	float c;
    	c = ((5*(cels-32))/(9));
    	return c;
    }

    how do I make it 20 by 20 in a shorter way, without having to put 20 times "++" please

    https://www.reddit.com/r/C_Programming/comments/ff5zph/how_do_i_make_it_20_by_20_in_a_shorter_w ay/

    eukaryote, 08 Марта 2020

    Комментарии (85)
  2. C# / Говнокод #26480

    +1

    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
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    public class WindowEx : Window //...
    {
            //hwnd окна
            public IntPtr Handle { get; set; }
    
            private const int GWL_EXSTYLE = (-20);
            private const uint WS_EX_TOPMOST = 0x00000008;
    
            public void SetTopmost()
            {
                SetTopmost(Handle);
            }
    
            public static void SetTopmost(IntPtr hWnd)
            {
                SetWindowLongPtr(hWnd, GWL_EXSTYLE, (IntPtr)((ulong)GetWindowLongPtr(hWnd, GWL_EXSTYLE) | WS_EX_TOPMOST));
            }
    
            public void UnSetTopmost()
            {
                UnSetTopmost(Handle);
            }
    
            public static void UnSetTopmost(IntPtr hWnd)
            {
                SetWindowLongPtr(hWnd, GWL_EXSTYLE, (IntPtr)((ulong)GetWindowLongPtr(hWnd, GWL_EXSTYLE) & ~WS_EX_TOPMOST));
            }
    
            private bool _topmost;
            public new bool Topmost
            {
                set
                {
                    if (value)
                    {
                        SetTopmost();
                    }
                    else
                    {
                        UnSetTopmost();
                    }
                    _topmost = value;
                }
                get { return _topmost; }
            }
    }

    Тру окно. С тру топмостом. Бесполезно чуть менее, чем полностью:
    1) Новый топмост не нужен. Оригинальное свойство через SetWindowPos сделает тоже самое (SetWindowPos может менять дополнительный стиль WS_EX_TOPMOST)
    2) Handle (hwnd окна) c публичным set. Круто, чё. Следовало бы сделать public IntPtr Handle { get; private set; }

    Так я писал код где-то лет 6 назад.

    Janycz, 08 Марта 2020

    Комментарии (0)
  3. C# / Говнокод #26479

    +1

    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
    private void MainDataGridCellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
    {
                if (e.Column == MainDataGrid.Columns[1])
                    return;
    
                if (CheckComplianceWithIndentation)
                    if ((NumberOfLeadingSpaces(Rows[e.Row.GetIndex()].OriginalText) != NumberOfLeadingSpaces(Rows[e.Row.GetIndex()].Translation)) && !Rows[e.Row.GetIndex()].Tags.Contains("I"))
                        Rows[e.Row.GetIndex()].Tags += "I";
                    else if (NumberOfLeadingSpaces(Rows[e.Row.GetIndex()].OriginalText) == NumberOfLeadingSpaces(Rows[e.Row.GetIndex()].Translation))
                        Rows[e.Row.GetIndex()].Tags = Rows[e.Row.GetIndex()].Tags.Replace("I", "");
    
                if ((Rows[e.Row.GetIndex()].Translation.Trim() == "") && !Rows[e.Row.GetIndex()].Tags.Contains("N"))
                    Rows[e.Row.GetIndex()].Tags += "N";
                else if (Rows[e.Row.GetIndex()].Translation.Trim() != "")
                    Rows[e.Row.GetIndex()].Tags = Rows[e.Row.GetIndex()].Tags.Replace("N", "");
    
                //...
    }
    
    public void TagsInit()
    {
                if (CheckComplianceWithIndentation)
                    foreach (var hRow in Rows.Where(hRow => NumberOfLeadingSpaces(hRow.OriginalText) != NumberOfLeadingSpaces(hRow.Translation)))
                    {
                        hRow.Tags += "I";
                    }
    
                foreach (var row in Rows.Where(hRow => hRow.Translation == ""))
                {
                    row.Tags += "N";
                }
    }

    Дано: C#, WPF, DataGrid, таблица.
    Надо сделать: таблица имеет поля, в том числе и поле Tags, которое определяется полями Translation и OriginalText, а также настройками пользователя (CheckComplianceWithIndentation), нет бы его вынести в класс строки как геттер:
    public string Tags => f(Translation, Original);

    вместо:
    private string _tags;
    public string Tags
    {
    get => _tags;
    set
    {
    _tags = value;
    RaisePropertyChanged("Tags");
    }
    }

    Так нет же, будем отлавливать изменения ячеек таблицы (MainDataGridCellEditEnding) и пересчитывать Tags. MainDataGrid.Columns[1] - это колонка с ними, прибито гвоздями в xaml: CanUserReorderColumns="False"

    Эх, а еще и Trim вместо String.IsNullOrWhiteSpace.

    А еще немного венгерской говнонотации (hRow).

    Так я писал где-то лет 7 назад. Да, тогда стрелок не было, но они приведены в описании тупо для сокращения строк кода.

    Janycz, 08 Марта 2020

    Комментарии (1)
  4. Куча / Говнокод #26478

    +4

    1. 1
    2. 2
    Словарь терминов говнокода.
    Один коммент - один термин.

    inkanusinho, 08 Марта 2020

    Комментарии (473)
  5. JavaScript / Говнокод #26477

    +2

    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
    function isEven(a) {
      a = a. toString(). replace(/[^0-9.]/g, "");
      var stack = [];
      var rev = a. split(''). reverse();
      for (var ix = 0; ix < rev. length; ix++) {
        if (rev[ix] == ".") stack. push("dot")
        else if (rev[ix] == "1" || rev[ix] == "3" || rev[ix] =="5" || rev[ix] == "7" || rev[ix] == "9")
          stack. push ("odd")
        else
          stack. push('even')
      }
      var wholenumber = stack. splice(stack. indexof("dot") + 1)
      return wholenumber[0] == "even";
    }

    Определение чётности числа.

    IIIuMnAH3E, 08 Марта 2020

    Комментарии (5)
  6. bash / Говнокод #26476

    +1

    1. 1
    grep '^-'  /mnt/etc/roskomhui.txt | cut -d' ' -f2  |  sed 's|^\([^/]*\)$|\1/32|'  | xargs -n1 ipcalc | awk -e '{if ($1=="Address:") ADDR=$2; if ($1=="Netmask:") print "route add " ADDR" mask "$2" 172.16.1.2" }'

    На старом роутере у меня бы opkg и openvpn с сервачком за пределами России.
    Список префиксов, на которые я хотел ходить через него, хранился в файле roskomhui.txt и имел формат

    # petuh
    -net 1.2.3.0/24
    -host 1.2.3.4

    # foo


    Файлик этот обрабатывался скриптом при подключении OpenVPN, который делал примерно следующее:
    grep '^-' /opt/etc/roskomhui.txt  | xargs -n2 -icmd echo route add cmd gw $REMOTE_VPN_ADDR | sh


    На новом роутере оказался встроенный OpenVPN, и смысл в opkg отпал. Но как завернуть нужный траффик в впн без шела? (я вкурсе про push, но мне важно было это сделать именно локально).

    Оказалось, что роутер умеет загружать маршруты из файла прямо через веб-морду, но формат там должен быть как у виндового батника
    route add 1.2.3.4 255.255.255.255 %ADDR%


    Для решения её и был написал скрипт (сам файлик хранился на флешке, потому он в mnt)
    Хосты с помощью седа (в исходнике они без масок) превратились в /32, чтобы их понял ipcalc.
    После ipcalc превратил маски в формате /bits в четырехбайтовые маски, и наконец awk -- единственный стейтфул товарищ в этом конвеере -- связал адрес с маской из выхлопа ipcalc.

    А как поступили бы вы?

    MAKAKA, 07 Марта 2020

    Комментарии (5)
  7. JavaScript / Говнокод #26475

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    var ER={}, x=new TextDecoder('KOI8-R').decode(Uint8Array.from( Array.apply(0,new Uint8Array(64).map( (_,b)=>b&1 ? 128+0x61+b/2 : 65+b/2 ))))
    for (var i=0;i<64;i+=2){
       if (i<52)
       ER[x[ i ]] = x[i+1], ER[ x[i].toLowerCase() ] = x[i+1].toLowerCase()
       ER[x[i+1]] = x[ i ], ER[x[i+1].toLowerCase()] = x[ i ].toLowerCase();
    }
    text=`<Налог>
        <Наименование>НДС</Наименование>
        <УчтеноВСумме>false</УчтеноВСумме>
    </Налог>`
    text.replace(/./g,(char,offset,text) =>  ER[char] || char);

    Из юзерскрипта для транслитерации в обоих направлениях.

    3.14159265, 07 Марта 2020

    Комментарии (59)
  8. Куча / Говнокод #26474

    +2

    1. 1
    https://blog.aragon.one/update-on-aragon-courts-first-mock-dispute/

    Вы уж простите, но я снова с криптовалютчиками. Их мир оказался слишком охуенным.

    Криптовалютчики запустили свой собственный суд! Потому что все существующие, как известно, несовершенны,
    а из блокчейна слов не выкинешь и perfect transparency.

    В первом же тестовом деле суд проебался (хоть и не в юридическом поле - а может и в юридическом тоже,
    я не читал), сыграв реальную ситуацию с реальными персонажами из крипто-системы.
    Персонажи ожидаемо оказались инфантилами и забиделись.

    Что же сделали организаторы суда? Правильно, «удалили решение» из системы блокчейн, сделав вид, что
    ничего и не происходило.

    Пропагандируемый эфирными поехавшими веб3.0 - это такая россия будущего, где данные о преступлениях
    даже не скрываются, но все делают вид, что ничего не происходило, потому что так надо и вообще иначе
    весь манямирок рухнет.

    Fike, 07 Марта 2020

    Комментарии (7)
  9. Куча / Говнокод #26473

    +3

    1. 1
    2. 2
    3. 3
    function strEqual(string a, string b) private returns (bool) {
        return sha3(a) == sha3(b);
    }

    Как проверить идентичность строк, если ты криптовалютчик?

    https://github.com/axic/mango/blob/83ef808eba1571097fecd8d8e08303a82f69d68c/MangoRepo.sol#L83-L85

    Fike, 07 Марта 2020

    Комментарии (30)
  10. JavaScript / Говнокод #26472

    +2

    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
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    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

    3.14159265, 07 Марта 2020

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