1. C# / Говнокод #20454

    +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
    public float Ratio
    {
          get { return ratio; }
          set
          {
              float newValue = value;
    
              if (value < 0.002f)
              {
                  newValue = 0.002f;
              }
              else if (value > 0.983f)
              {
                  newValue = 0.983f;
              }
    
              if (ratio != newValue)
              {
                  ratio = value;
                  InvalidateMeasure();
              }
        }
    }

    Мой "любимый" телерик опять пишет говно. Хорошо, что я скачал исходники и теперь сам могу править баги, не дожидаясь реакции этих слоупоков, которые после отправки бага с гифом (!), воспроизводящими исходниками (!!) и, блядь, патчем (!!!) исправляли два месяца сраный NRE.
    Догадайтесь, что здесь не так. Про magic numbers уже молчу.

    kerman, 01 Августа 2016

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

    +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
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    struct Test
    {
    	Array<int> intArray;
    	int fixedIntArray[3];
    	bool booleanVal;
    	float flt;
    	Array<string> stringArray;
    
    	ADD_REFLECTION(Test, intArray, fixedIntArray, booleanVal, flt, stringArray);
    };
    
    struct SuperTest
    {
    	Array<string> strArr;
    	int foo;
    	string str;
    	Array<short> vals;
    	double dbl;
    	Test tests[3];
    	ushort bar;
    
    	ADD_REFLECTION(SuperTest, strArr, foo, str, vals, dbl, tests, bar);
    };
    
    int main()
    {
    	StringView structText = R"({
    		.strArr = {"str1", "ergvwr", "brt"},
    		.foo = 5,
    		.str = "gammaker",
    		.vals = {-4, 66, 432, -95},
    		.dbl = 3.1415926535897932384626433832795,
    		{
    			{
    				.fixedIntArray = {9, 4, 85},
    				.stringArray = {"test 0 A", "test 0 B", "test 0 C"},
    				.booleanVal = true,
    				.intArray = {43, 54, 36, 76},
    				.flt = 1.23456,
    				.flt = 2.34567
    			},
    			{
    				.intArray = {},
    				.fixedIntArray = {3655456, 234, 3},
    				.booleanVal = false,
    				.flt = 2.718281828,
    				.stringArray = {"test 1 A", "test 1 B"}
    			},
    			{
    				.intArray = {1531, 1253, 16, 634, 236462363},
    				.fixedIntArray = {9435, 435, 8355},
    				.booleanVal = false,
    				.flt = 123.65,
    				.stringArray = {"test 2 A", "test 2 B", "test 2 C", "test 2 D"}
    			}
    		},
    		.bar = 1025
    	})";
    
    	Data::TextDeserializer deserializer(Data::DataLanguageParams::CStructInitializer, structText);
    	SuperTest test = deserializer.Deserialize<SuperTest>();
    
    	char charBuf[5000];
    	Data::TextSerializer serializer(Data::DataLanguageParams::Json, Data::TextSerializerParams::Verbose, ArrayRange<char>(charBuf, 5000));
    	serializer.NestingLevel=-1;
    	serializer.Serialize(test);
    	Console.PrintLine(serializer.GetString());
    
    	Data::DataLanguageParams rusML;
    	rusML.RequireFieldAssignments = false;
    	rusML.AddFieldNameAfterAssignment = false;
    	rusML.LeftAssignmentOperator = "равно";
    	rusML.FieldSeparator = " следующее поле";
    	rusML.LeftFieldNameBeginQuote = null;
    	rusML.LeftFieldNameEndQuote = null;
    	rusML.RightFieldNameBeginQuote = null;
    	rusML.RightFieldNameEndQuote = null;
    	rusML.StructInstanceOpen = "начало структуры";
    	rusML.StructInstanceClose = " структура кончилась";
    	rusML.OneLineCommentBegin = "комментарий:";
    	rusML.StringQuote="\"";
    	rusML.CharQuotes = "";
    	rusML.ArrayOpen = " массив начался ";
    	rusML.ArrayClose = " кончился массив ";
    	rusML.ArrayElementSeparator = " дальше";
    	rusML.FalseTrueNames[0] = "нет";
    	rusML.FalseTrueNames[0] = "да";
    	rusML.DecimalSeparator = ',';
    
    	serializer = Data::TextSerializer(rusML, Data::TextSerializerParams::Verbose, ArrayRange<char>(charBuf, 5000));
    	serializer.NestingLevel=-1;
    	serializer.Serialize(test);
    	Console.PrintLine(serializer.GetString());
    
    	return 0;
    }

    Сделал автоматический сериализатор с кучей параметров, используя которые можно описать JSON, инициализаторы C'шных и D'шных структур, подмножество XML или какой-нибудь свой кастомный формат. Здесь показана десериализация сишного инициализатора с designated initializers, который почему-то не добавили в C++. Затем полученная структура сериализуется в JSON (его описание в моём хидере, и здесь не приведено), а затем в придуманный мной ради прикола язык разметки rusML, описание которого можно видеть в коде.

    Выводит (табы порезались):

    {
    "strArr" : ["str1", "ergvwr", "brt"],
    "foo" : 5,
    "str" : "gammaker",
    "vals" : [-4, 66, 432, -95],
    "dbl" : 3.141592653589789,
    "tests" : [
    {
    "intArray" : [43, 54, 36, 76],
    "fixedIntArray" : [9, 4, 85],
    "booleanVal" : true,
    "flt" : 2.3456699,
    "stringArray" : ["test 0 A", "test 0 B", "test 0 C"]
    },
    {
    "intArray" : [],
    "fixedIntArray" : [3655456, 234, 3],
    "booleanVal" : false,
    "flt" : 2.7182817,
    "stringArray" : ["test 1 A", "test 1 B"]
    },
    {
    "intArray" : [1531, 1253, 16, 634, 236462363],
    "fixedIntArray" : [9435, 435, 8355],
    "booleanVal" : false,
    "flt" : 123.6499938,
    "stringArray" : ["test 2 A", "test 2 B", "test 2 C", "test 2 D"]
    }
    ],
    "bar" : 1025
    }

    начало структуры
    strArr равно массив начался "str1" дальше "ergvwr" дальше "brt" кончился массив следующее поле
    foo равно 5 следующее поле
    str равно "gammaker" следующее поле
    vals равно массив начался -4 дальше 66 дальше 432 дальше -95 кончился массив следующее поле
    ...

    gammaker, 30 Июля 2016

    Комментарии (173)
  3. PHP / Говнокод #20448

    +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
    <?php
    /*
    * System class
    * @package: PerfCMS
    */
    
    class System extends PerfSystem
    {
    	public static function textarea($rows = 5, $cols = 25, $name = 'text', $value = '', $class = '', $id = 'area', $style = '')
    	{
    		if(parent::browserType() == 'web')
    		{
    			Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.'/assets/js/bbtags.js');
    			return '
    			<div id="tagspanel" class="textarea">
    			<a href="#" title="'. Lang::get('bold_text').'" id="bold" onclick="return bbtags(\'[b]\', \'[/b]\', \'bold\', \''.$id.'\')">'.System::image('bbpanel/bold.png').'<span class="tooltip"></span></a>
    			<a href="#" title="'. Lang::get('italic_text').'" id="italic" onclick="return bbtags(\'[i]\', \'[/i]\', \'italic\', \''.$id.'\')">'.System::image('bbpanel/italic.png').'</a>
    			<a href="#" title="'. Lang::get('underline_text').'" id="underline" onclick="return bbtags(\'[u]\', \'[/u]\', \'underline\', \''.$id.'\')">'.System::image('bbpanel/underline.png').'</a>
    			<a href="#" title="'. Lang::get('strike_text').'" id="strikethrough" onclick="return bbtags(\'[s]\', \'[/s]\', \'strikethrough\', \''.$id.'\')">'.System::image('bbpanel/strikethrough.png').'</a>
    			<a href="#" title="'. Lang::get('quote_text').'" id="blockquote" onclick="return bbtags(\'[quote]\', \'[/quote]\', \'blockquote\', \''.$id.'\')">'.System::image('bbpanel/blockquote.png').'</a>
    			<a href="#" title="'. Lang::get('spoiler_text').'" id="spoiler" onclick="return bbtags(\'[spoiler]\', \'[/spoiler]\', \'spoiler\', \''.$id.'\')">'.System::image('bbpanel/spoiler.png').'</a>
    			<a href="#" title="'. Lang::get('color_text').'" id="color" onclick="return bbtags(\'[color=]\', \'[/color]\', \'color\', \''.$id.'\')">'.System::image('bbpanel/text_color.png').'</a>
    			<a href="#" title="'. Lang::get('url_text').'" id="link" onclick="return bbtags(\'[url=http://]\', \'[/url]\', \'link\', \''.$id.'\')">'.System::image('bbpanel/insert_link.png').'</a>
    			<a href="#" id="image" onclick="return bbtags(\'[img=http://]\', \'[/img]\', \'image\', \''.$id.'\')">'.System::image('bbpanel/image.png').'</a>
    			<a href="#" title="'. Lang::get('video_text').'" id="video" onclick="return bbtags(\'[video]\', \'[/video]\', \'video\', \''.$id.'\')">'.System::image('bbpanel/video.png').'</a>
    			<a href="#" title="'.Lang::get('source_text').'" id="source" onclick="return bbtags(\'[source lang=]\', \'[/source]\', \'source\', \''.$id.'\')">'.System::image('bbpanel/script_code.png').'</a>
    			</div>
    			<textarea name="'.$name.'" rows="'.$rows.'" cols="'.$cols.'"'.(!empty($class) ? ' class="'.$class.'"' : null).(!empty($style) ? ' style="'.$style.'"' : null).' id="'.$id.'">'.(!empty($value) ? $value : null).'</textarea>';
    		}
    		else
    		{
    			return '[<a href="/help/codes">'.Lang::get('bb_codes').'</a> | <a href="/help/smiles">'.Lang::get('smiles').'</a> | <a href="/help/rules">'.Lang::get('rules').'</a> | <a href="/help/">'.Lang::get('help').'</a>]<br/>
    			<textarea name="'.$name.'" rows="'.$rows.'" cols="'.$cols.'"'.(!empty($class) ? ' class="'.$class.'"' : null).(!empty($style) ? ' style="'.$style.'"' : null).' id="'.$id.'">'.(!empty($value) ? $value : null).'</textarea>';
    		}
    	}
    
    
    }

    Весь класс https://gist.github.com/eskrano/bb8fe1bc1e6b22456d68cf3e56bf752b

    eskrano, 30 Июля 2016

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

    +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
    static public function Current()
    {
    	return mktime(date('H', time()),date('i', time()), 0, date('m', time()), date('d', time()), date('Y', time()));	
    }
    	
    static public function CurrentDate()
    {
    	return mktime(0, 0, 0, date('m', time()), date('d', time()), date('Y', time()));
    }
    	
    static public function YesterdayDate()
    {
    	$time = time()-86400;
    	return mktime(0, 0, 0, date('m', $time), date('d', $time), date('Y', $time));
    }

    Класс для работы с датой. Тяжелый случай...

    alexey6630, 29 Июля 2016

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

    +5

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    private void DeleteNode()
    {
    	viewModel.timing.Rows.Remove(Row);
    	viewModel.Rows.Remove(this);
    	//(x_x)
    	viewModel.ModelChanged.Raise();
    }

    При самоубиении не забудьте оставить коммент для GC, чтобы он ошмётки отскрёб от стенки

    kerman, 28 Июля 2016

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

    +3

    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
    @PostLoad
        protected void initStatus() {
            anState status = null;
            if (isDeleted()) {
                status = anState.S_DELETED;
            } else if (actState != null) {
                if (actState.equals(anState.S_NOT_FILLED)) {
                    status = anState.S_NOT_FILLED;
                } else if (actState.equals(anState.S_FORMED)) {
                    status = anState.S_FORMED;
                } else if (actState.equals(anState.S_SENT) &&
                        (Document != null && Document.getState().equals(DocumentState.SENT))) {
                    status = anState.S_SENT;
                } else if (actState.equals(anState.S_SENT) &&
                        (Document == null ||
                                (Document != null && !Document.getState().equals(DocumentState.SENT)))) {
                    status = anState.S_SENDING;
                } else if (actState.equals(anState.S_CANCELLATION_REQUEST)) {
                    status = anState.S_CANCELLATION_REQUEST;
                } else if (actState.equals(anState.S_CANCELED)) {
                    status = anState.S_CANCELED;
                }
            }
            this.status = status;
        }

    > кстати, валится же в методе

    private boolean isReadonly(anState status) {
    return !status.equals(anState.ACT_FORMED) &&
    !status.equals(anState.ACT_NOT_FILLED);
    }

    > но мы же не знаем, что енумы можно сравнивать и по == (т.к. поля енума - константы), и привычки сравнивать equals на константном выражении тем более не имеем :)

    > facepalm.jpg, словом :)

    Lure Of Chaos, 28 Июля 2016

    Комментарии (17)
  7. C# / Говнокод #20441

    +8

    1. 1
    Может кто знает, как работать с методом Table<TEntity>.Attach? Пробовал использовать его по разному, но результат получается один и тот же - Exception.

    Serega9I, 28 Июля 2016

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

    +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
    #include <iostream>
    #include <tuple>
    using namespace std;
    
    template<typename T, typename T0, typename T1, typename ...Args>
    void PrintStruct(const tuple<T0 T::*, T1 T::*, Args T::*...>& members, const T& val)
    {
    	cout << val.*std::get<0>(members) << endl;
    	PrintStruct(members._Get_rest(), val);
    }
    
    template<typename T, typename T0>
    void PrintStruct(const tuple<T0 T::*>& members, const T& val)
    {
    	cout << val.*std::get<0>(members) << endl;
    }
    
    struct MyStruct
    {
    	int x;
    	float y;
    
    	static const tuple<decltype(&MyStruct::x), decltype(&MyStruct::y)> Members;
    };
    
    const tuple<int MyStruct::*, float MyStruct::*> MyStruct::Members = std::make_tuple(&MyStruct::x, &MyStruct::y);
    
    int main()
    {
    	MyStruct str = {123, 3.14159f};
    	PrintStruct(MyStruct::Members, str);
    	return 0;
    }

    Пытался понять, почему мой код не компилится в 2013 студии, и быстренько накатал этот минимальный пример. Но вышел облом - он почему-то компилится, в отличие от моей реальной либы со схожими шаблонными крестоконструкциями.

    gammaker, 27 Июля 2016

    Комментарии (105)
  9. PHP / Говнокод #20439

    +3

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    $exceptionClass = '\yii\db\Exception';
    foreach ($this->exceptionMap as $error => $class) {
        if (strpos($e->getMessage(), $error) !== false) {
            $exceptionClass = $class;
        }
    }
    ...
    return new $exceptionClass($message, $errorInfo, (int) $e->getCode(), $e);

    Yii <3

    https://github.com/yiisoft/yii2/blob/master/framework/db/Schema.php#L625-L633

    Fike, 27 Июля 2016

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

    +8

    1. 1
    2. 2
    const
    #include "file.xpm"

    У чувака в файле file.xpm объявлен массив static char * icon_xpm [] = { "..", "..", ... } и он не может заинклудить его в плюсовый код. Вот такой воркараунд ему предложили.
    https://www.linux.org.ru/forum/development/10400992?cid=10406949

    kurwa-nextgen, 27 Июля 2016

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