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

    −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
    #include<iostream>
    #include<fstream>
    #include<vector>
    using namespace std;
    
    string rec(const string str, char c){return str;}
    
    void cer(){}
    
    main(){
    	string s,d="Text",a;
    	ifstream fin;
    	vector<string> mas;
    fin.open("test.txt");
    //if (fin.is_open()) cout<<"1";else	cout<<"0";
    while(fin>>s)
    	{bool f=0;
    		for(int i=0; i<s.size(); ++i)
    			if (s[i]==d[0])
    				{
    					f=1;
    					for (int j=0; j<s.size()&&j<d.size(); ++j)
    						if (d[j]!=s[i+j]) f=0;
    					if (f)
    						{
    							a.clear();
    							for (int j=0; j<i; ++j)
    								a=a+s[j];
    							a=a+"Hi";
    							for (int j=i; j<s.size(); ++j)
    								a=a+s[j];
    						}
    				}
    			
    			if (f)	{mas.push_back("\n");mas.push_back(a);mas.push_back("\n");}
    			else mas.push_back(s);
    			s=rec(s,'0');
    	}
    	ofstream fout;
    fout.open("output.txt");
    for (int i=0; i<mas.size(); ++i) fout<<mas[i]<<"\t";
    }

    ДД всем просветленным.
    Есть код на С++ , который нормально компилируется и меняет текст в указанном файле. Вопрос: как его использовать для изменения данных при парсинге сайта. По логике Tokenizer передает лексемы в Parser для дальнейшего построения DOM. Значит надо добавить подобный код в Tokenizer, чтобы он передавал уже исправленные данные. Но на практике Tokenizer работает с Buffer(nsHtml5Tokenizer::tokenizeBuffer( nsHtml5UTF16Buffer* buffer)), причем с логическим(bool), а код для строчки из файла.
    Как вариант добавить в сам Parser(nsHtml5Parser::Parse(const nsAString& aSourceBuffer, void* aKey, const nsACString& ContentType, bool aLastCall, nsDTDMode aMode) , но не могу разобраться как это сделать.
    При компиляции вылетает куча ошибок.
    Использованные файлы: nsHtml5Parser.cpp и nsHtml5Tokenizer.cpp, FireFox(версия 47), компилятор MSVS2013.

    DrAli, 12 Октября 2018

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

    +2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    class Test(contextlib.ExitStack):
        def __init__(self):
            super().__init__()
            with contextlib.ExitStack() as s:
                self.foo = s.enter_context(Foo())
                self.bar = s.enter_context(Bar())
                self.enter_context(s.pop_all())

    Неужели в питоне нет более адекватного способа описать класс, который держит джва ресурса и корректно их освобождает во всех ситуациях? И эти люди ругают кресты за сложность управления памятью...

    bormand, 11 Октября 2018

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

    −1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    public static function findById($id)
        {
            $model = self::where('id', $id)->get();
    
            $count = $model->getIterator()->count();
            if($count > 0) {
                return $model->getIterator()->current();
            }
    
            return false;
        }

    Laravel Eloquent Model

    pb92, 11 Октября 2018

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

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    private static readonly ConcurrentDictionary<Expression, object> CachedFunctions;
    
    public static Func<TEntity, bool> AsFunc<TEntity>(this object entity, Expression<Func<TEntity, bool>> expr)
        where TEntity : class, IEntity
    {
        //@see http://sergeyteplyakov.blogspot.ru/2015/06/lazy-trick-with-concurrentdictionary.html
        return (Func<TEntity, bool>)CachedFunctions.GetOrAdd(expr, id => new Lazy<object>(
            () => CachedFunctions.GetOrAdd(id, expr.Compile())));
    }

    Вот так хорошая идея ломается о кривую реализацию. Вместо того чтобы сохранить в кэш требуемый тип, сохраняем туда Lazy, возвращающий себя же :)

    leff, 11 Октября 2018

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

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    public GlobalSetting ReadGlobalSettingById(string id)
    {
    	int totalItems;
    	var globalSettings = ReadGlobalSettings(PageSetting.All, out totalItems);
    
    	return globalSettings.FirstOrDefault(e => e.GlobalSettingID == id);
    }

    Инновационный алгоритм считывания сущности по ID:
    1) считываем ВСЕ записи из базы в память;
    2) в памяти находим сущность с нужным ID;
    3) все остальное пусть Garbage Collector подберет;
    4) удобно же, не правда ли?)

    Moses, 11 Октября 2018

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

    +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
    private int SortWObyAD(WorkOrderShort wo1, WorkOrderShort wo2)
    {
    	if (wo1.AD == wo2.AD)
    	{
    		return 0;
    	}
    	else if (wo1.AD > wo2.AD)
    	{
    		return 1;
    	}
    	else
    	{
    		return -1;
    	}
    }

    Сразу 2 достоинства:
    1) абсолютно не понятно, что такое AD;
    2) ах да, все это можно было бы заменить одной строкой "return wo1.AD - wo2.AD", т.к. все это будет использоваться в одной из стандартных функций сортировки

    Moses, 11 Октября 2018

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

    +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
    public int GetWorkOrder(...)
    {
    	var wait = 0;
    	const int stepWait = 30;
    	var marker1 = false;
    
    	do
    	{
    		if (marker1 == true) wait = wait + stepWait;
    		...
    		do
    		{
    			marker1 = false;
    			...
    			if (ChoosenWO.Count == 0)
    			{
    				if (counter == postalAreas.Count)
    				{
    					marker1 = true;
    					break;
    				}
    				...
    				counter = counter + 1;
    			}
    			else
    			{
    				...
    			}
    		} while (ChoosenWO.Count == 0);
    
    	} while (wait < ((endDayTime.Hour - DateTime.UtcNow.Hour) * 60 + (endDayTime.Minute - DateTime.UtcNow.Minute)));
    
    	return -1;
    }

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

    Moses, 11 Октября 2018

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

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    // todo '+1' is temporary
    private string CorrectPhoneNumber(string phoneNumber, string countryCode = "+1")
    {
    	if (phoneNumber.Substring(0, 1) != "+")
    	{
    		return string.Format("{0}{1}", phoneNumber.Length == 10 ? countryCode : "+", phoneNumber);
    	}
    
    	return phoneNumber;
    }

    Genious!

    Moses, 11 Октября 2018

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

    +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
    [HttpPost]
            public string PayFromCreditCard(CreditCardViewModel cardInfo, double depositValue)
            {
                try
                {
                    // todo: make real payment
                    return AjaxResult.CreateSuccess();
                }
                catch (Exception exc)
                {
                    return AjaxResult.CreateError(exc.Message);
                }
            }

    Этот код сейчас живет где-то на продакшене...

    Moses, 11 Октября 2018

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

    +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
    std::size_t fib(const std::size_t index) {
      if (index < 3)
        return !!index;
    
      std::size_t  f2 = 1; // f(n - 2)
      std::size_t  f1 = 1; // f(n - 1)
      std::size_t result = 0;
      for (std::size_t i = 2; i < index; ++i)
      {
        result = f1 + f2;
        f1 = f2;
        f2 = result;
      }
    
      return result;
    }

    Что Clang вытворяет с несчастной функцией Фибоначчи?
    https://godbolt.org/z/2SFUm0

    Elvenfighter, 10 Октября 2018

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