+319        
        
                            - 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
template<typename OpeningBracketRange,
	typename ClosingBracketRange,
	typename StopTokenRange,
	typename CommentBlockRangePairRange,
	typename RecursiveCommentBlockRangePairRange>
Meta::EnableIf<
	IsFiniteForwardRange<OpeningBracketRange>::_ &&
	IsFiniteForwardRange<ClosingBracketRange>::_ &&
	IsFiniteForwardRange<StopTokenRange>::_ &&
	IsFiniteForwardRange<CommentBlockRangePairRange>::_ &&
	IsFiniteForwardRange<RecursiveCommentBlockRangePairRange>::_,
decltype(Meta::Val<R>().Take(0))> ReadRecursiveBlock(int& counter, size_t* ioIndex,
	OpeningBracketRange openingBracket, ClosingBracketRange closingBracket, StopTokenRange stopToken,
	CommentBlockRangePairRange commentBlocks, RecursiveCommentBlockRangePairRange recursiveCommentBlocks)
{
	R start = me();
	size_t index = 0;
	const size_t openingBracketLen = openingBracket.Count();
	const size_t closingBracketLen = closingBracket.Count();
	const size_t stopTokenLen = stopToken.Count();
	while(!me().Empty() && counter!=0)
	{
		if(openingBracketLen!=0 && me().StartsWith(openingBracket))
		{
			counter++;
			me().PopFrontExactly(openingBracketLen);
			index += openingBracketLen;
			continue;
		}
		if(closingBracketLen!=0 && me().StartsWith(closingBracket))
		{
			counter--;
			me().PopFrontExactly(closingBracketLen);
			index += closingBracketLen;
			continue;
		}
		if(stopTokenLen!=0 && me().StartsWith(stopToken))
		{
			me().PopFrontExactly(stopTokenLen);
			index += stopTokenLen;
			break;
		}
		bool commentFound = false;
		for(auto& commentBlock: commentBlocks)
		{
			commentFound = me().StartsWith(commentBlock.Get<0>());
			if(!commentFound) continue;
			const size_t commentBlockOpeningLen = commentBlock.Get<0>().Count();
			const size_t commentBlockClosingLen = commentBlock.Get<1>().Count();
			me().PopFrontN(commentBlockOpeningLen);
			index += commentBlockOpeningLen;
			me().FindAdvance(commentBlock.Get<1>(), &index);
			me().PopFrontN(commentBlockClosingLen);
			index += commentBlockClosingLen;
			break;
		}
		if(commentFound) continue;
		for(auto& commentBlock: recursiveCommentBlocks)
		{
			commentFound = me().StartsWith(commentBlock.Get<0>());
			if(!commentFound) continue;
			int commentCounter = 1;
			ReadRecursiveBlock(commentCounter, &index, commentBlock.Get<0>(), commentBlock.Get<1>(), null, null);
			break;
		}
		if(commentFound) continue;
		me().PopFront();
	}
	if(ioIndex!=null) (*ioIndex) += index;
	return start.Take(index);
}
                                     
        
            Это мои последние достижения в написании сверх универсального обобщённого кода.
 Начиналось всё с функции, которая парсила блок кода до закрывающей фигурной скобки, учитывая встречающиеся открывающие скобки. Затем появилась поддержка комментариев и строк. Позже я решил, что нечего привязываться к какому-то конкретному языку, ведь можно же таким же образом парсить другой язык, где вместо скобок begin end и комментарии по-другому оформляются.
 А потом я подумал, зачем вообще привязывать типы параметров к строкам и массивам строк? И почему код, который парсится, вообще должен быть строкой, хранящейся в памяти непрерывно? В итоге мои размышления привели к такой реализации, которая способна парсить всё подряд, в том числе и связные списки, причём необязательно состоящие из символов. При этом открывающуюся скобку можно передать связным списком, закрывающуюся - массивом, а блоки комментариев передавать как массивом кортежей, так и хеш-таблицей.
 При этом эта функция относится к классу примеси и наследованием её можно подмешать к любому классу, имеющему нужные методы.
        
        
             gammaker,
            15 Августа 2016
 gammaker,
            15 Августа 2016
        
        
        
        
        
        
        
                +261        
        
                            - 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
/* load config */
        for (i = 0; ; i++) {
                conf[0] = '\0';
                switch (i) {
                case 0:
                        /* ~ */
                        snprintf(conf, sizeof conf, "%s/.%s",
                            pwd->pw_dir, SWM_CONF_FILE);
                        break;
                case 1:
                        /* global */
                        snprintf(conf, sizeof conf, "/etc/%s",
                            SWM_CONF_FILE);
                        break;
                case 2:
                        /* ~ compat */
                        snprintf(conf, sizeof conf, "%s/.%s",
                            pwd->pw_dir, SWM_CONF_FILE_OLD);
                        break;
                case 3:
                        /* global compat */
                        snprintf(conf, sizeof conf, "/etc/%s",
                            SWM_CONF_FILE_OLD);
                        break;
                default:
                        goto noconfig;
                }
                if (strlen(conf) && stat(conf, &sb) != -1)
                        if (S_ISREG(sb.st_mode)) {
                                cfile = conf;
                                break;
                        }
        }
                                     
        
            Вот так spectrwm грузит конфиги.
        
        
             codemonkey,
            15 Августа 2016
 codemonkey,
            15 Августа 2016
        
        
        
        
        
        
        
                +273        
        
                            - 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
#include <math.h>
#include <stdio.h>
double  DoubleToTheInt(double base, int power) {
    return pow(base, power);
}
int main() {
    // приводим к указателю на функуцию с обратным порядком аргументов
    double (*IntPowerOfDouble)(int, double) =
        (double (*)(int, double))&DoubleToTheInt;
    printf("(0.99)^100: %lf \n", DoubleToTheInt(0.99, 100));
    printf("(0.99)^100: %lf \n", IntPowerOfDouble(100, 0.99));
}
                                     
        
            "Изящный способ отстрелить себе ногу по самую голову."
Утащено с Хабры.
        
        
             Vindicar,
            15 Августа 2016
 Vindicar,
            15 Августа 2016
        
        
        
        
        
        
        
                +341        
        
                            - 1
- 2
$dom = new DOMDocument;
$dom->loadHTML('<?xml encoding="UTF-8">' . $document);
                                     
        
            Выжал самое интересное.
Кто угадает, зачем к документу прилепляется строка '<?xml encoding="UTF-8">', тому ничего. Но без неё не работает. Точнее, работает, но неправильно.
        
        
             inkanus-gray,
            13 Августа 2016
 inkanus-gray,
            13 Августа 2016
        
        
        
        
        
        
        
                +111        
        
                            - 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
@AutoValidated
    public void remove(
            @NotNull PaymentProviderConfiguration paymentProviderConfiguration
    ) {
        paymentProviderConfiguration.setDeleted(true);
        paymentProviderConfiguration.setDisabled(true);
        paymentProviderConfiguration.setEditable(false);
        paymentProviderConfigurationDAO.update(paymentProviderConfiguration);
        context.getHibernate().evict(paymentProviderConfiguration);
        context.getHibernate().flush();
    }
                                     
        
            интересно еще и то, что внутри paymentProviderConfigurationDAO.update(p  aymentProviderConfiguration); есть еще один flush
        
        
             vorozhtsov,
            12 Августа 2016
 vorozhtsov,
            12 Августа 2016
        
        
        
        
        
        
        
                +9        
        
                            - 1
- 2
- 3
- 4
- 5
var actualCharCount = DisplayCharactersCount;
while (DisplayCharactersCount != actualCharCount)
  {
    Thread.Sleep(500);
  }
                                     
        
            и такое бывает
        
        
             ewenso,
            12 Августа 2016
 ewenso,
            12 Августа 2016
        
        
        
        
        
        
        
                +4        
        
                            - 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
// Change the color of the displayed status
		if ($status == "active") {
			$status_display = '<font color="white">' . $status . '</font>';
		} elseif ($status == "sold") {
			$status_display = '<font color="green">' . $status . '</font>';
		} elseif ($status == "emis") {
			$status_display = '<font color="orange">' . $status . '</font>';
		} elseif ($status == "alert") {
			//
		} elseif ($status == "deleted") {
			$status_display = '<font color="white">' . $status . '</font>';
			//$style="text-decoration: line-through;";
		} elseif ($status == "closed") {
			$status_display = '<font color="closed">' . $status . '</font>';
		} elseif ($status == "options_sent") {
			$status_display = '<font color="yellow">' . $status . '</font>';
		}
		if ($trip_type == "one_way") {
			$one_way = "SELECTED";
			$round_trip = "";
			$trip_type = '<font color="DarkBlue">One Way</font>';
		} else {
			$one_way = "";
			$round_trip = "SELECTED";
			$trip_type = '<font color="#348017">Round Trip</font>';
		}
		if ($cabin_class == "economy_class") {
			$eco_class = "SELECTED";
			$bus_class = "";
			$ooo_class = "";
		} elseif ($cabin_class == "business_class") {
			$eco_class = "";
			$bus_class = "SELECTED";
			$ooo_class = "";
		} elseif ($cabin_class == "o_class") {
			$eco_class = "";
			$bus_class = "";
			$ooo_class = "SELECTED";
		}
		if ($num_pass == "1") {
			$n1 = "SELECTED";
			$n2 = "";
			$n3 = "";
			$n4 = "";
			$n5 = "";
			$n6 = "";
			$n7 = "";
			$n8 = "";
			$n9 = "";
			$n10 = "";
		} elseif ($num_pass == "2") {
			$n1 = "";
			$n2 = "SELECTED";
			$n3 = "";
			$n4 = "";
			$n5 = "";
			$n6 = "";
			$n7 = "";
			$n8 = "";
			$n9 = "";
			$n10 = "";
		} elseif ($num_pass == "3") {
			$n1 = "";
			$n2 = "";
			$n3 = "SELECTED";
			$n4 = "";
			$n5 = "";
			$n6 = "";
			$n7 = "";
			$n8 = "";
			$n9 = "";
                                     
        
            Вот почему не надо мелочиться. И нанимать нормальных программистов.
        
        
             OMD,
            11 Августа 2016
 OMD,
            11 Августа 2016
        
        
        
        
        
        
        
                +4        
        
                            - 1
var options = [<?php echo implode(',', range(App\Service\Service::CONSTANT_MIN, App\Service\Service::CONSTANT_MAX)); ?>];
                                     
        
            
        
        
             Diwms,
            11 Августа 2016
 Diwms,
            11 Августа 2016
        
        
        
        
        
        
        
                +8        
        
                            - 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
#include <vector>
#include <iostream>
template<class T>
struct reverse_view_impl {
	const T& cont;
	reverse_view_impl(const T& cont): cont(cont) {}
	using iterator = typename T::const_reverse_iterator;
};
template<class T>
reverse_view_impl<T> reverse_view(const T& cont) {
	return reverse_view_impl<T>(cont);
}
template<class T>
typename reverse_view_impl<T>::iterator begin(const reverse_view_impl<T>& view) {
	return view.cont.crbegin();
}
template<class T>
typename reverse_view_impl<T>::iterator end(const reverse_view_impl<T>& view) {
	return view.cont.crend();
}
std::vector<int> one_two_three() { return { 1, 2, 3 }; }
int main() {
	for (auto i : reverse_view(one_two_three())) {
		std::cout << i << std::endl;
	}
}
                                     
        
            // Surprise, motherfucker
        
        
             Bobik,
            10 Августа 2016
 Bobik,
            10 Августа 2016
        
        
        
        
        
        
        
                +4        
        
                            - 1
- 2
- 3
- 4
- 5
- 6
bool shift = keys.Shift;
if (keys.Control)
{
	return SelectNextControl(shift ? false : true);
}
                                     
        
            Телерик опять жжот. Цветёт и пахнет.
        
        
             kerman,
            10 Августа 2016
 kerman,
            10 Августа 2016