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

    +136

    1. 1
    2. 2
    3. 3
    4. 4
    revision = String.Format("{0}{1:d2}{2:d2}",
    				DateTime.Now.Year.ToString().Substring(2),
    				DateTime.Today.Month,
    				DateTime.Today.Day);

    видно автор хотел сделать
    revision = DateTime.Today.ToString("yyMMdd");

    http://www.codeproject.com/Articles/272551/Custom-Assembly-Versioning-with-VS-2010-and-MSBUIL

    graph_di5, 28 Октября 2012

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

    +15

    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
    #include <iostream>
    #include <cxxabi.h>
    #include <typeinfo>
    
    int main(void)
    {
       uint8_t i = 63;
       int  status;
    
       std::cout << i << std::endl;
    
       char *realname = abi::__cxa_demangle(typeid(i).name(), 0, 0, &status);
       std::cout << "Real type of uint8_t is: " << realname << std::endl;
       delete (realname);
    
       std::cout << (unsigned int)i << std::endl;
    
    return 0;
    }

    ...нативный 8bit-ый беззнаковый int.

    sayidandrtfm, 28 Октября 2012

    Комментарии (33)
  3. Си / Говнокод #12016

    +140

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    int next_id() {
        static int id = 0;
        __sync_add_and_fetch(&id, 1);
        return id;
    }

    "Атомарная" раздача айдишек.

    bormand, 28 Октября 2012

    Комментарии (52)
  4. Python / Говнокод #12015

    −94

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    #!/usr/local/bin/cpython
    
    回答 = 读入('你认为中文程式语言有存在价值吗 ? (有/没有)')
     
    如 回答 == '有':
            写 '好吧, 让我们一起努力!'
    不然 回答 == '没有':
            写 '好吧,中文并没有作为程式语言的价值.'
    否则:
            写 '请认真考虑后再回答.'

    http://ru.wikipedia.org/wiki/ChinesePython

    Сопроваждай, пробуй!

    sayidandrtfm, 28 Октября 2012

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

    +137

    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
    static /*public*/ string GenerateRandomJpegName()
            {
                return GenerateRandomString() + ".jpg";
            }
     
            static string GenerateRandomString()
            {
                bool UseSigns = true;
                bool UseUpperLetters = true;
                bool UseLetters = true;
                int Length;
            NewLabel:
                try
                {
                    Length = new Random(DateTime.Now.Millisecond - DateTime.Now.Second + new Random(DateTime.Now.Millisecond).Next(0, 100) / new Random(DateTime.Now.Millisecond - DateTime.Now.Second).Next(0, 10)).Next(0, 100);
                }
                catch { goto NewLabel; }
                string result = "C:/";
                try
                {
                    int Seed = 0;
                    char[] letters = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
                    char[] signs = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
                    List<char> keyWords = new List<char>();
                    List<char> upperLetters = new List<char>();
                    foreach (char c in letters)
                        upperLetters.Add(Convert.ToChar(c.ToString().ToUpper()));
                    if (UseLetters)
                        foreach (char c in letters)
                            keyWords.Add(c);
                    if (UseSigns)
                        foreach (char c in signs)
                            keyWords.Add(c);
                    if (UseUpperLetters)
                        foreach (char c in upperLetters)
                            keyWords.Add(c);
                    int MaxValue = keyWords.Count;
                    for (int i = 0; i <= Length; i++)
                    {
                        try
                        {
                            Random mainrand = new Random(Seed);
                            char RandChar = keyWords[mainrand.Next(0, MaxValue)];
                            result += RandChar;
                            Seed += DateTime.Now.Millisecond + Seed - new Random().Next(10) + new Random(DateTime.Now.Millisecond + 800 * 989 / 3).Next(10);
                        }
                        catch { continue; }
                    }
                }
                catch { }
                return result;
            }

    Вместо одного вызова Path.GetRandomFileName

    psina-from-ua, 28 Октября 2012

    Комментарии (21)
  6. PHP / Говнокод #12012

    +50

    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
    if(!$category = $this->EE->product_model->get_category_by_key($key)){
        $this->EE->functions->redirect($this->EE->functions->create_url($this->EE->config->item('site_404')));
        exit();
    }
    // Эти 4 строчки достают все продукт которые относятся к выбранной категории. Дальше веселее .. 
    
    // Build our variable data
    				$vars[0] = array(
    									'site_id' =>  $category[0]['site_id'],
    									'category_id' => $category[0]['category_id'],
    									'category_image' => $img,
    									'category_detail' => $category[0]['detail'],
    									'parent_id' =>  $category[0]['parent_id'],
    									'category_title' =>  $category[0]['title'],
    									'url_title' =>  $category[0]['url_title'],
    									'meta_title' =>  $category[0]['meta_title'],
    									'meta_keyword' =>  $category[0]['meta_keyword'],
    									'meta_descr' =>  $category[0]['meta_descr'],
    									'total_results' => count($category[0]["products"]),
    									'results' => $category[0]["products"],
    									'no_results' => array(),
    									'result_filter_set' => '', 
                                                                            'breadcrumb_parent_categories' => $breadcrumb_parent_categories,
                                                                            'catalog_guest_flag' => $flag_catalog,
                                                                            'catalog_price_visible' => $catalog_visible
    								);
    
    // Filter the results
    if(count($category[0]["products"]) != 0)
         $vars = $this->_filter_results($vars,$key,true);
    
    // А теперь count($vars['results']) == $this->EE->config->products_per_page;
    // И самое веселое - 
    
    foreach($vars[0]['results'] as $rst){
    				$tmp = $this->_get_product($rst["product_id"]);
    				$results[] = $tmp[0];
    			}
    			$vars[0]['results'] = $results;
    
    // Функция _get_product() получает все данные о продукте: отзывы, описание, цена, куча опций. Пара строчек оттуда:
    
                         if($product_id == ''){
    				// Get product by param or dynamically
    				$product_id = $this->EE->TMPL->fetch_param('product_id');
    				$url_title = $this->EE->TMPL->fetch_param('url_title');
    				if($product_id != ''){
    					$products = $this->EE->product_model->get_products($product_id);
    				}else{
    					// get by url key
    					$key = ($url_title == '') ? $this->EE->uri->segment(2) : $url_title;
    					if(!$products = $this->EE->product_model->get_product_by_key($key)){
    						 // Not a product page
    						 return false;
    					}
    				}
    			}else{
    				if(!$products = $this->EE->product_model->get_products($product_id)){
    					return false;
    				}
    			}
    
    // Очень интересен вызов функции get_products(), эта ф-ция вызывается и для продуктов в каталоге и на странице продукта.
    // Каждый вызов тянет за собой 25 запросов в базу, если на странице 40 продуктов * 25 = 1000 запросов = ~ 20 секунд на загрузку страницы

    кусочек кода который выводит продукты в каталог, взят из eCommerce плагина BrilliantRetail для ExpressionEngine. Плагин кстати говоря стоит 150 баксов, мда )

    Archont12, 27 Октября 2012

    Комментарии (19)
  7. Perl / Говнокод #12011

    −148

    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
    #!/usr/bin/perl
    
    use strict;
    use warnings;
    use Data::Dumper;
    
    sub get0 { print("get0\n"); return 0; }
    sub get2 { print("get2\n"); return 2; }
    
    my ($a, $b) = (1, 1);
    $a ? $b = get0() : $b = get2();
    
    print Dumper({
        'a' => $a,
        'b' => $b,
    });

    Результат несколько обескураживает :)
    http://ideone.com/V60Y1L

    Elvenfighter, 27 Октября 2012

    Комментарии (57)
  8. Java / Говнокод #12010

    +95

    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
    import java.io.PrintStream;
    import java.util.concurrent.atomic.AtomicBoolean;
    
    public final class ShredingerCat
    extends AtomicBoolean
    {
    	static final PrintStream o=System.out;
    	static final long initMsec=System.currentTimeMillis ();
    	
    	public static final ShredingerCat	INSTANCE = new ShredingerCat();
    	private ShredingerCat ()
    	{
    		set ( false );
    		o.println ( "Construct SingleBool" );
    	}
    	public final
    	void criticalSection(){
    		synchronized (this) {
    			pr ( "Enter critical section" );
    			ShredingerCat.sl ( 5 );
    			
    			pr ( "Cat is " +(
    					get() 
    					? "dead"
    					: "alive"
    				)
    			);
    			sl(100);
    			pr ( "Exit critical section" );
    		}
    		
    	}
    	// ===================== HELPER STUFF ========================
    
    	static void pr(String s){
    		o.println ( s+(
    			System.currentTimeMillis ()- initMsec
    		));
    	}
    	static void sl(long l){
    		try {
    			Thread.sleep ( l );
    		}catch (InterruptedException e) {
    		}
    	}
    	
    
    
    }

    Обсуждение #11989 безопасных публикаций, конструкторов и синглтонов вдохновило меня на создание этого примера.
    Суть: есть кот-синглтон. Он как вы видите защищен со всех сторон finalами, приправленое к тому же Atomicом.
    Задание на серебряную медаль - сделать так чтобы 2 последовательных вызова toString() вывели Dead и Alive. Объект не должен меняться.
    Задание на золотую медаль: необходимо получить примерно такой вывод:
    Enter critical section0
    Enter critical section0
    Cat is alive16
    Cat is dead16
    Exit critical section110
    Exit critical section110

    За использование рефлексии и прочих unsafe - немедленная дисквалификация и бан модератором.
    Решение будет чуть позже. Отдельным постом.

    3.14159265, 26 Октября 2012

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

    +16

    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
    #include <functional>
    
    using namespace std;
    
    class O{};
    
    class foo
    {
    public:
       constexpr static auto anyGarbage = O(O(O(O())));//:Жаль, что написать auto anyGarbage = O(O(O(O()))); нельзя.
       O anyGarbage2 = O(O(O(O())));
       
    private:
       int var;
       
    public:
       std::function<void(int)> setter=[this](int s){(void)s;/*var=s;*/};
    };

    Я хочу написать свои property, принимающие лямбды в качестве параметра setter и getter. Как сделать friend лямбду?
    http://liveworkspace.org/code/39082e70108502c2e44c4fe6c5762d9a

    USB, 26 Октября 2012

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

    +175

    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
    public static IEnumerable<float> Single(float from, float to, float step)
            {
                if (step <= 0.0f) step = (step == 0.0f) ? 1.0f : -step;
     
                if (from <= to)
                {
                    for (float f = from; f <= to; f += step) yield return f;
                }
                else
                {
                    for (float f = from; f >= to; f -= step) yield return f;
                }
            }
     
    public static IEnumerable<double> Double(double from, double to, double step)
            {
                if (step <= 0.0) step = (step == 0.0) ? 1.0 : -step;
     
                if (from <= to)
                {
                    for (double d = from; d <= to; d += step) yield return d;
                }
                else
                {
                    for (double d = from; d >= to; d -= step) yield return d;
                }
            }

    Такие методы накопированы для всех типов данных, которые известны поциенту.
    Но особо интересны эти джва метода

    Unlike some other programmimg languages (notably F#), C# doesn't have any built-in support for dealing with ranges of numbers. The .NET Framework does have the Enumerable.Range() method.
    - It can only deal with Int32's.
    - You can't specify a 'step' from one element of the range to the next. In effect, the step is always one. In this article, I'd therefore like to present a static Range class to deal with these deficiencies.

    http://www.c-sharpcorner.com/uploadfile/b942f9/dealing-with-ranges-of-numbers-in-C-Sharp

    3.14159265, 26 Октября 2012

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