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

    +137

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    if (messages[i].description != "")
                                if (messages[i].description.StartsWith("<![CDATA["))
                                {
                                    messages[i].description = messages[i].description.Substring(9);
                                    messages[i].description = messages[i].description.Substring(0, messages[i].description.Length - 3);
                                }

    для строк типа <![CDATA[******]!>
    Возникает устойчивое ощущение говнокода. Как нормально написать? :)

    ikovalyov, 16 Августа 2009

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

    +133.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
    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
    public static XmlNode FindNodeXPath(XmlNode root, string xPath)
            {
                string[] paths = xPath.Split(new char[] { '/' });
                XmlNode node = root;
                for (int i = 0; i < paths.Length; i++)
                {
                    XmlNode childNode = null;
                    for (int j = 0; j < node.ChildNodes.Count; j++)
                    {
                        if (node.ChildNodes[j].Name == paths[i])
                        {
                            childNode = node.ChildNodes[j];
                            node = childNode;
                            break;
                        }
                    }
                    if (childNode == null)
                    {
                        return null;
                    }
                }
                return node;
            }
    
            public static XmlNode FindNodeXPath(XmlNode root, string nodeName, string xPath)
            {
                XmlNode node = FindNodeXPath(root, xPath);
                if (node != null)
                {
                    for (int i = 0; i < node.ChildNodes.Count; i++)
                    {
                        if (node.ChildNodes[i].Name == nodeName)
                        {
                            node = node.ChildNodes[i];
                        }
                    }
                }
                return node;
            }
    
            public static void UpdateBaseAddress(string url, string fileConfig)
            {
                // Create config file to create 
                XmlDocument xmlDom = new XmlDocument();
                xmlDom.Load(fileConfig);
                XmlNode root = xmlDom.DocumentElement;
                // Get XML node 
                XmlNode xmlNode = FindNodeXPath(root, "endpoint", "system.serviceModel/services/service");
                xmlNode.Attributes["address"].Value = url;
    
                xmlNode = FindNodeXPath(root, "add", "system.serviceModel/services/service/host/baseAddresses");
                xmlNode.Attributes["baseAddress"].Value = url;
    
                xmlDom.Save(fileConfig);
            }

    Виетнамский XPath эквивалент :)

    bugotrep, 15 Августа 2009

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

    +153

    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
    function strum($text, $simb)
    {
    if(mb_strlen($text, 'UTF-8') > $simb){
    
    }
    if(mb_strlen($text, 'UTF-8') > $simb)
      {
    	$start = 0;
    	for($i = 0; $i <= (ceil(mb_strlen($text, 'UTF-8') / $simb)); $i++)
    	{
    
    		$tmp = mb_strpos($text, '. ', $start + $simb, 'UTF-8');
    		if(is_numeric($tmp))
    		{
    			$num[] = $tmp;
    
    		}
    		$tmp = mb_strpos($text, '! ', $start  + $simb, 'UTF-8');
    				if(is_numeric($tmp))
    		{
    			$num[] = $tmp;
    
    		}
    		$tmp = mb_strpos($text, '? ', $start  + $simb, 'UTF-8');
    				if(is_numeric($tmp))
    		{
    			$num[] = $tmp;
    
    		}
    		if($num != '')
    		{
    		$end = min($num) + 1;
    		}
    		if($end <= $start)
    		{
    			$end = mb_strlen($text, 'UTF-8');
    		}
    		$str = mb_substr($text, $start, $end, 'UTF-8');
    		$string[] = mb_substr($str, 0, ($end - $start), 'UTF-8');
    
    	$start = $end;
    	unset($num);
    	unset($str);
    	unset($tmp);
    	if($end == mb_strlen($text, 'UTF-8'))
    		{
    			break;
    		}
    	}
      }
      else
      {
      $string[] = $text;
      }
      return $string;
    
    }

    Функция для умной разбивки

    Arrim, 15 Августа 2009

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

    +144.8

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    rem = 1;/*
    @cls
    @cscript %~s0 //E:JScript //Nologo
    @exit /b
    */
    
    str = WScript.StdIn.ReadLine();
    WScript.StdOut.Write(1+2+3);

    Файл сохранять в *.BAT
    Это мой первый полиглот полиглот BAT и JScript.
    Про полиглоты на вики: http://en.wikipedia.org/wiki/Polyglot_(computing)

    k06a, 15 Августа 2009

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

    +57.7

    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
    @echo off
    cls
    pushd "%~d0%~p0"
    echo Current DIR: "%CD%"
    if "%~1" == "talk_widget" goto talker
    
    
    rem ////////////////////
    :auth
    echo Enter chat filename to connect ("abc" for example):
    set /p chat=^>
    echo Enter your nick:
    set /p nick=^>
    start call %0 talk_widget %chat% %nick%
    
    rem ////////////////////
    :listener
    cls
    call title "| Chat: %chat% | User: %nick% |"
    if exist %chat%_history type %chat%_history
    
    :list_go
    ping 127.0.0.1 -n 1 -w 20 > nul
    set oldtext=%text%
    set /p text=<%chat%
    if not "%text%" == "%oldtext%" echo %text%
    goto list_go
    rem ////////////////////
    
    
    rem ////////////////////
    rem // %2 - chat name //
    rem // %3 - user nick //
    rem ////////////////////
    :talker
    set chat=%~2
    set nick=%~3
    cls
    call title "| Chat: %chat% | User: %nick% |"
    call ::cs_in
    echo (%TIME% %nick% connected)>%chat%
    call ::cs_out
    echo (%TIME% %nick% connected)>>%chat%_history
    
    :talkloop
    cls
    echo Dear %nick%, type message to send:
    set /p msg=^>
    rem call ::cs_in
    echo [%TIME% %nick%]: %msg%>%chat%
    rem call ::cs_out
    echo [%TIME% %nick%]: %msg%>>%chat%_history
    goto talkloop
    rem ////////////////////
    
    
    rem ////////////////////
    :cs_in
    if exist "%chat%_cs" ping 127.0.0.1 -n 1 -w 50 > nul
    set cs_value=%RANDOM%
    
    :cs_in_loop
    echo %cs_value%>%chat%_cs
    set /p ret=<%chat%_cs
    if "%ret%" == "%cs_value%" exit /b
    ping 127.0.0.1 -n 1 -w 10 > nul
    goto :cs_in_loop
    rem ////////////////////
    
    
    rem ////////////////////
    :cs_out
    del %chat%_cs
    exit /b
    rem ////////////////////
    
    
    rem =========================================================

    Чат на BAT. Сколько угодно народу.
    Выложите батник в сетевую папку и оттуда запускайте с разных ПК.
    Статья с тонкостями: http://k06a.blogspot.com/2009/06/blog-post_27.html

    k06a, 15 Августа 2009

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

    +6.9

    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
    #ifndef SOCHET_H
    #define SOCHET_H
    
    // Сдвигает самую младшую единицу в сторону младшего разряда
    #define shiftLast1Right(x) ( (x-1)^((x^(x-1)) >> 2) )
    
    // Дописывает 1 после самой младшей единицы
    #define add1AfterLast1(x) ( x | ((x^(x-1))+1) >> 2 )
    
    template<class T>
    class Sochet
    {
    public:
    	T value;
    
    	//////////////////////////////////////////////////////////////////////////
    
    	Sochet():value(0) { }
    	Sochet(int n, int k) {
    		firstTurn(n, k);
    	}
    	~Sochet() {
    		value = 0;
    	}
    
    	//////////////////////////////////////////////////////////////////////////
    
    	// Первая комбинация
    	// В первоначальной ситуации все К единиц располагаются в старших битах
    	void firstTurn(int n, int k) {
    		value = ( ( T(1) << k ) - 1 ) << (n - k);
    	}
    
    	// Нахождение следующей комбинации
    	// Возвращает false в случае последней комбинации
    	bool nextTurn()
    	{
    		// Отлов последней комбинации
    		if (value & (value+1) == 0)
    			return false;
    		
    		// Условие по младшему биту: 1 или 0
    		if (value & 1)
    		{
    			value >>= 1;
    			nextTurn();
    			value = add1AfterLast1(value << 1);
    		} else
    			value = shiftLast1Right(value);
    		
    		return true;
    	}
    }
    
    #endif // SOCHET_H

    Шаблон перебора всех сочетаний/выборок в много разрядных числах.
    Пример перебираемых чисел для N=5, K=3:
    11100
    11010
    11001
    10110
    10101
    10011
    01110
    01101
    01011
    00111

    // Код выглядит сочно(особенно дефайны), зато всё работает максимально быстро.
    // Статья про этот алгоритм: http://k06a.blogspot.com/2009/04/blog-post_08.html

    k06a, 15 Августа 2009

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

    +86.2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    with (VirNode^) do
    begin
      VirNode^.ImageIndex := vir.iNum;
      VirNode^.Txt := vir.sAttr[1] + ' - ' + vir.sAttr[3];
    end;

    сначала было без with а потом забыл убрать "VirNode^." :)

    Joe, 15 Августа 2009

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

    +148.7

    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
    // Any fool can write code that a computer can understand. Good programmers write code that humans can understand. (C) Martin Fowler.
    function changeLogo() {
    	var pane = document.getElementById("pane");
    	if(pane != null) {
    		pane.height = 240;
    		pane.width = document.body.clientWidth;
    	} else {
    		alert("it's sad, so sad...");
    	}
    	var logo = document.getElementById("logoJpg");
    	if(logo != null) {
    		logo.height = 50;
    		logo.width = document.body.clientWidth * 0.23;
    	} else {
    		alert(" ...it's a sad, sad situation, and it's getting more and more absurd");
    	}
    }

    Код совсем ничего, но камменты рулят

    domavoy, 15 Августа 2009

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

    +54.7

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    <div style="padding: 2px;"> 
        <div class="go_left">
            <font color="#777777">Account balance:</font> <span id="js_total_hours" style="margin: 0px; padding: 0px;">2</span> hours
        </div> 
        <div class="clear"></div> 
    </div>

    go_left - стиль с float: left
    clear - стиль с clear: both
    как минимум спрашивается зачем давать флоэт лефт единстенному элементу в диве.

    nonexistent, 15 Августа 2009

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

    +153

    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
    <?php
    $thelist = array();
    $dir = './upload/ftp/';
    if ($handle = opendir($dir)) {
    	while (false !== ($file = readdir($handle))) {
    		if ($file != "." && $file != ".." && $file !="index.php" && $file !=".ftpquota") {
    			$file = $file;
    			$thelist[] = array('file' => $file, 'filemtime' => filemtime($file), 'filesize' => filesize($file));
    		}
    	}
    
    	closedir($handle);
    }
    ?>
    <?php
    for($i = 0; $i < count($thelist); $i++) {
    	?><a href="sitename/<?=$thelist[$i]['file']?>"><?=$thelist[$i]['file']?></a><?php
    }
    ?>

    scrat, 14 Августа 2009

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