1. Лучший говнокод

    В номинации:
    За время:
  2. Java / Говнокод #9702

    +142

    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
    /**
     * Конфигурация программы
     *
                 *  2 конструктора:
                    - по умолчанию - загружающий данные из файла настроек (см. Configuration.CONFIGURATION_FILENAME);
                    - с одним параметром java.util.Properties - загружающий данные данные из него.
                - метод save()
                    - без параметра - записывает данные в Configuration.CONFIGURATION_FILENAME
                    - с одним параметром java.util.Properties - записывает данные в него.
     */
    public class Configuration {
        public static final String CONFIGURATION_FILENAME = System.getProperty("user.home") + "/serialmon/1.properties";
        private PortConfig firstPort;
    	private PortConfig secondPort;
        private String logFileName;
        private int logWidth;
        
    	public Configuration() {
            this.firstPort = new PortConfig();
            this.secondPort = new PortConfig();
            
            Properties pp = new Properties();
            try {
                File PropFile = new File(CONFIGURATION_FILENAME);
                if (!PropFile.exists()) {   
                    PropFile.createNewFile();
                }
                FileInputStream inPropFile = new FileInputStream(CONFIGURATION_FILENAME); 
                pp.load(inPropFile);          
                setProperties(pp);           
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public Configuration(Properties p) {
            
            this.firstPort = new PortConfig();
            this.secondPort = new PortConfig();
            
            setProperties(p);
        }
        
        /**
         * вспомогательный метод. В идеале можно было обойтись без него, вызывая из конструктора по умолчанию
         * конструктор с параметром Properties, но ПЕРЕД вызовом этого конструктора нужно было
         * загрузить данные из файла в Properties pp, а потом уже вызвать конструктор.
         * Это сделать не возможно, т.к. вызов конструктора должен быть ПЕРВЫМ.
         * 
         * @param pp 
         */
        private void setProperties(Properties pp){
            
            this.setLogFileName(pp.getProperty("logFileName"));
            this.setLogWidth(Integer.parseInt(pp.getProperty("logWidth")));
        }
        
        /**
         * - метод save()
         * без параметра - записывает данные в Configuration.CONFIGURATION_FILENAME
         */
        public void save() {
            
            Properties pp = new Properties();
            save(pp);
            
            try {
                FileOutputStream outPropFile = new FileOutputStream(CONFIGURATION_FILENAME);
                pp.store(outPropFile, null);
                
            } catch(IOException ex) {
                ex.printStackTrace();
            }
        }
        
        /**
         *     - с одним параметром java.util.Properties - записывает данные в него.
         * 
         * @param p 
         */
        public void save(Properties p) {
            
            p.put("logFileName", this.getLogFileName());
            p.put("logWidth", String.valueOf(this.getLogWidth()));
        }

    Товарищи, возникла необходимость создания двух конструкторов. Хочется вызвать один из другого, чтобы было красиво, НО перед вызовом второго, который с параметром Properties, нужно установить этот самый параметр, а потом уже передать его.
    Т.е. нужно в конструкторе по умолчанию сделать такое:
    Properties p = new Properties();
    p.set(бла бла бла);
    THIS(P); // как вы понимаете, компилятор будет ругаться, что вызов THIS должен быть ПЕРВЫМ в конструкторе.

    вызов типа this(new Properties), не годится.

    сейчас, как можно видеть, использую вспомогательный метод setProperties, как раз без которого было бы идеально.

    kikis, 18 Марта 2012

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

    +142

    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
    using System;
    
    namespace Trening_6
    {
    	class Program
    	{
    		public static void Main(string[] args)
    		{
    			Console.WriteLine("Введите 2 числа через пробел...");
    			string[] Value = Console.ReadLine().Split(new char[] {' '});
    			int Result = 0;
    			for (int i = Convert.ToInt32(Value[0]); i < Convert.ToInt32(Value[1]) + 1; i++)
    			{
    				Result += i;
    			}
    			Console.WriteLine("Сумма всех чисел в диапозоне от {0} до {1} равна {2}", Convert.ToInt32(Value[0]), Convert.ToInt32(Value[1]), Result);
    			Console.ReadKey();
    		}
    	}
    }

    Говнище еще свежее, неделю назад высрал.

    KusokGovna, 16 Марта 2012

    Комментарии (10)
  4. Objective C / Говнокод #9655

    −83

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    -(void)makeItemavAilableWithName:(NSString*) name{
        [[NSUserDefaults standardUserDefaults] setValue:@"YES" forKey:name];
    }
    
    -(BOOL)isItemAvaliableWithName:(NSString*) name{
        //item could be a chracter or a world
        return [[[NSUserDefaults standardUserDefaults] valueForKey:name]boolValue];
    }

    Вот так вот мы сохраняем булевые переменные в UserDefaults. Оригинальная орфография и пунктуация сохранены

    SevInf, 12 Марта 2012

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

    +161

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    LostFocus = function() {
      if (!IE) { // Этот код только для взрослых. Браузерам до 18 сюда нельзя!
          // ...
      }
    }

    Комментарий просто убил.

    DropWorld, 08 Марта 2012

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

    +75

    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
    for (i = 0; i < pArgs.length; ++i) {
        if (!(pArgs[i].equalsIgnoreCase("-startable"))) {
            continue;
        }
        // ... обработка
        return true;
    }
    
    for (i = 0; i < pArgs.length; ++i) {
        if (!(pArgs[i].equalsIgnoreCase("-isRunning"))) {
            continue;
        }
        // ... обработка
        return true;
    }
    
    for (i = 0; i < pArgs.length; ++i) {
        if (!(pArgs[i].equalsIgnoreCase("-shutdown"))) {
            continue;
        }
        // ... обработка
        return true;
    }

    из main()а жаба аппликухи. и еще три таких цикла для еще трех параметров коммандной строки.

    любимая тонкость (которая сюда не попала): на ошибки коммандной строки бросается IndexOutOfBoundsException.

    ЗЫ а че в жабе нет штатного парсера коммандной строки? как-то загадочно. хотя если задуматся и вспомнить что писали жабу юниксоиды, которые сами тридцать лет толковго штатного парсера коммандной строки сделать не могли, то становится в какой-то степени даже логично.

    Dummy00001, 08 Марта 2012

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

    −85

    1. 1
    http://pastebin.com/UaTdN6K2

    А выложу ка я это тут.
    Гуано трёхлетней выдержки. Фрагментации не поддаётся. Ныне отправлено на удобрения.

    krypt, 06 Марта 2012

    Комментарии (10)
  8. PHP / Говнокод #9554

    +153

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    // Проверка на взлом куков
    $sql2 = mysql_query("SELECT * FROM `gl_users` WHERE username = '".$_COOKIE['username']."' ");
    $row = mysql_fetch_assoc($sql2);
    if($_COOKIE['password'] != $row['password'] OR (isset($_COOKIE['member_id']) AND !preg_match('/^[0-9]+$/', $_COOKIE['member_id']))) {
    		setcookie('logined','0',time() +3600*24*30);
    		setcookie('member_id','',time() +3600*24*30);
    		setcookie('username','',time() +3600*24*30);
    		setcookie('password','',time() +3600*24*30);
    		 header('Location: ?');
    		die();
    }

    Слил двиг знакомого, нашел это в конце конфига *facepalm*

    dellok, 27 Февраля 2012

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

    +994

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    http://paste.org.ru/?qgrubj
    http://paste.org.ru/?r6kovp
    
    
    #define X3J11_CallFunction(WinApi,FuncHash,ModHash,...) \
    	((sizeof(WinApi(__VA_ARGS__),'~')),(X3J11_Gate<FuncHash,ModHash,boost::add_pointer<BOOST_TYPEOF(WinApi)>::type>(__VA_ARGS__)))
    
    #define X3J11_CallOverload(Signature,FuncHash,ModHash,...) \
    	((sizeof(((boost::add_pointer<Signature>::type)0)(__VA_ARGS__),'~')),(X3J11_Gate<FuncHash,ModHash,boost::add_pointer<Signature>::type>(__VA_ARGS__)))

    63F45EF45RB65R6VR, 24 Февраля 2012

    Комментарии (10)
  10. PHP / Говнокод #9465

    +155

    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
    <?php
    //скрипт для выполнения SQL запросов
    function runQuery($str = false, $returnType='', $indexField = false, $from = false, $limit = false, $aggregate = false)
    {
    	if (!$str){ //Проверка на наличие SQL
    		return false;
    	}
    	
    	//Будем сохранять SQL запросы с результатами в cache
    	//Для этого создадим массив глобальный
    	if (!isset($GLOBALS['dbcache'])){
    		$GLOBALS['dbcache'] = array();
    	}
    	//Но использовать этот cache не будем
    	if (0 && isset($GLOBALS['dbcache'][$str])){
    		$this->cached = true;
    		return $GLOBALS['dbcache'][$str];
    	}
    	
    	//...
    	//Строки для получения данных с SQL, записываються в $retValue
    	//...
    	
    	//Вот получили результат, сохраним его в ранее заданный массив
    	if ($str != 'SELECT LAST_INSERT_ID()'){
    		$GLOBALS['dbcache'][$str] = $retValue;
    	}
    	return $retValue;
    }

    Трудясь над проектом, не понимал, куда используется вся память.
    Решил выяснить и наткнулся на такое, что и было основной причиной.

    Edd, 17 Февраля 2012

    Комментарии (10)
  11. PHP / Говнокод #9461

    +150

    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
    // Функция авторизации
        function auth()
        {
            // Ищем пользователя с именем, указанным в куках
            $result = $this->query("SELECT  *  FROM  auth_members  
                  WHERE  name  = '" . mysql_escape_string($_POST['name']) . "' AND  password  = '" . md5($_POST['pass']) . "' LIMIT 1");
    
            // Еслии пользователя с таким именем нет, делаем редирект
            if (mysql_num_rows($result) == 0) {
                $this->redirect("not_auth");
            }
    
            // Парсим полученную запись.
            $user = mysql_fetch_object($result);
    
            // Получаем текущее время с учетом дробных частей секунды
            $tm = $this->getmicrotime();
            // Вставляем запись в таблицу с сессиями.
            $this->query("INSERT INTO auth_sessions 
                  VALUES( " . $user->id . " , " . time() . " , '" . $this->hash2($user->name, $_SERVER['HTTP_USER_AGENT'], $this->get_ip(), $tm) . "' )");
    
            // Ставим пользователю куки с его логинов и уникальным временем авторизации. Время жизни кук - 15 минут
            setcookie("time", $tm, time() + SES_LIVE, "/");
            setcookie("name", $user->name, time() + SES_LIVE, "/");
    
            // делам редирект без параметра, т.к. никаких ошибок не было
            $this->redirect("");
        }

    Легкое чтиво от Орловских веб-девелоперов :D

    englandpost, 17 Февраля 2012

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