Category: ПрограммированиеПро C++Современный C++ всё-таки странная штука.
template<typename Func, typename Obj, typename Arg, typename = void>
struct is_callable_with_arg : std::false_type {};
template<typename Func, typename Obj, typename Arg>
struct is_callable_with_arg<Func, Obj, Arg, std::void_t<decltype((std::declval<Obj>().*std::declval<Func>())(std::declval<Arg>()))>> : std::true_type {};
void call_impl(VAR_TYPE arg, std::true_type) { (clz_->*sig_)(arg); }
void call_impl(VAR_TYPE, std::false_type) { (clz_->*sig_)(); }
...
call_impl(var_, std::integral_constant<bool, is_callable_with_arg<MEMBER, CLASS, VAR>::value>{});
Сниппет для сэмплинга пользователей или A/B тестирования (Java)Допустим, у нас есть стабильный идентификатор пользователя userId. С помощью этой функции мы превращаем строковый идентификатор в псевдослучайное число: int userNumber = stringIdToSamplingMillis(userId); Теперь мы можем использовать это число так: if (userNumber < 50) ... // Пользователь попал в 5% тестовую выборку if (userNumber < 500) ... // Пользователь попал в категорию A else ... // Пользователь попал в категорию B Функция:
// Генерирует по строке псевдослучайное число от 0 до 999 включительно.
private static int stringIdToSamplingMillis(final String str) {
// Используем MD5 в качестве генератора псевдослучайного числа на базе строки
final MessageDigest hasher = MessageDigest.getInstance("MD5");
final byte[] data = str.getBytes();
hasher.update(data, 0, data.length);
// Получим MD5 в виде длинного целого числа
final BigInteger bigInt = (new BigInteger(hasher.digest())).abs();
// Получим хвост длинного целого в виде обычного int-а [0..999]
return bigInt.mod(BigInteger.valueOf(1000)).intValue();
}
PHP function to read friends-only LiveJournal posts through RSSThe code is pretty self-explanatory. The only know-how is the combination of the options which works with LJ. UPD: (The Russian version): My & 2GIS Open-Source Repos Migrated to GitLab (Qt for Android and other stuff)Since gitorious.org is going to be shut down within 1.5 months the open-source repos have been moved here: https://gitlab.com/u/sergeygalin This includes Qt 4.8 and patched Qt 5 for Android (grym-android-lighthouse, grym-qt, grym-qt5), ex qtandroidoffscreenviews and related stuff. Here Be DragonsНадо сделать скрипт, который в репозитории в файлах, не редактировавшихся неск. мсяцев, рэндомно втыкает коммент "Here be dragons!" Archives
|
