- 1
- 2
- 3
- 4
- 5
- 6
- 7
# while 1 через for
shits = ['говно']
for shit in shits:
print('Говно')
shits.append('говно')
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
# while 1 через for
shits = ['говно']
for shit in shits:
print('Говно')
shits.append('говно')
Прост while 1 через for
0
Global Request Parameters
Name Required? Description
ClientIp Yes An IP address of the server from which our system receives API calls (only IPv4 can be used).
Зашел почитать API namecheap. Какая защита от перехвата данных аутентификации злоумышлеником )))
https://www.namecheap.com/support/api/global-parameters/
0
def is_tuple(node: Node) -> bool:
match node:
case Node(children=[LParen(), RParen()]):
return True
case Node(children=[Leaf(value="("), Node(), Leaf(value=")")]):
return True
case _:
return False
https://www.python.org/dev/peps/pep-0622/
+1
// https://habr.com/ru/company/oleg-bunin/blog/493242/
// Алгоритмы быстрой обработки HTTP-строк
// .....
// Как устроен парсер? Мы, как nginx, определяем массив байт и по нему
// проверяем входные данные — это пролог функции. Здесь мы работаем
// только с короткими сроками, используем likely, потому что branch misprediction
// для коротких строк болезненнее, чем для длинных. Выносим этот код наверх.
// У нас есть ограничение в 4 из-за последней строчки — мы должны написать
// достаточно мощное условие. Если будем обрабатывать больше 4 байт, то условие
// будет тяжелее, а код медленнее.
static const unsigned char uri_a[] __attribute__((aligned(64))) = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
...
// Branch misprediction is more crucial for short strings
if (likely(len <= 4)) {
switch (len) {
case 0:
return 0;
case 4:
c3 = uri_a[s[3]];
// fall through to process other chars
case 3:
c2 = uri_a[s[2]];
case 2:
c1 = uri_a[s[1]];
case 1:
c0 = uri_a[s[0]];
}
return (c0 & c1) == 0 ? c0 : 2 + (c2 ? c2 + c3 : 0);
}
// Основная петля и большой хвост. В основном цикле обработки мы делим
// данные: если они достаточно длинные, обрабатываем по 128, 64, 32 или
// по 16 байт. Имеет смысл обрабатывать по 128: мы параллельно используем
// несколько каналов процессора (несколько pipeline) и суперскалярность процессора.
for ( ; unlikely(s + 128 <= end); s += 128) {
n = match_symbols_mask128_c(__C.URI_BM, s);
if (n < 128)
return s - (unsigned char *)str + n;
}
if (unlikely(s + 64 <= end)) {
n = match_symbols_mask64_c(__C.URI_BM, s);
if (n < 64)
return s - (unsigned char *)str + n;
s += 64;
}
if (unlikely(s + 32 <= end)) {
n = match_symbols_mask32_c(__C.URI_BM, s);
if (n < 32)
return s - (unsigned char *)str + n;
s += 32;
}
if (unlikely(s + 16 <= end)) {
n = match_symbols_mask16_c(__C.URI_BM128, s);
if (n < 16)
return s - (unsigned char *)str + n;
s += 16;
}
... пиздец. Там еще в той статье пишут, что CloudFlare через AVX2 какое-то говно оптимизируют в говнопаринге http запросов.
Поэтому я за бинарную сериализацию, без всей этой хуйни человекочитаемой
0
template <typename T, size_t size>
pure_nfsv4_op_array_tools::get_max_priority_opindex(
const std::array<T, size>& array, const std::unordered_map<uint32_t, uint32_t>& priority_map size_t pos = 0)
{
std::unordered_map<uint32_t, uint32_t>::const_iterator it, it_end = priority_map.end();
uint32_t max_priority = 0;
size_t i_max_priority = size;
for(; pos < size; ++pos)
{
it = priority_map.find(array[pos].opcode)
priority = (it != it_end) ? it->second : 4; // Анскилл
// лучше так:
// priority = get_priority(opcode);
if (priority > max_priority)
{
i_max_priority = pos;
max_priority = it->second;
}
}
return i_max_priority;
}
Какой дизайн-паттерн применить, если priority_map содержится в классе, методы которого используют эту функцию как вспомогательную?
То есть текущий файл подключается в файл-декларацию класса?
Можно, конечно, подключить его в .cc, но проблема останется.
+2
function s(t) {
for (var e = ["yo", "zh", "kh", "ts", "ch", "sch", "shch", "sh", "eh", "yu", "ya", "YO", "ZH", "KH", "TS", "CH", "SCH", "SHCH", "SH", "EH", "YU", "YA", "'"], n = ["ё", "ж", "х", "ц", "ч", "щ", "щ", "ш", "э", "ю", "я", "Ё", "Ж", "Х", "Ц", "Ч", "Щ", "Щ", "Ш", "Э", "Ю", "Я", "ь"], r = t, i = 0, o = e.length; i < o; i++) {
r = r.split(e[i]).join(n[i]);
}
for (var s = "abvgdezijklmnoprstufhcyABVGDEZIJKLMNOPRSTUFHCYёЁ", a = 0, c = s.length; a < c; a++) {
r = r.split(s.charAt(a)).join("абвгдезийклмнопрстуфхцыАБВГДЕЗИЙКЛМНОПРСТУФХЦЫеЕ".charAt(a));
}
return r === t ? null : r
}
function a(t) {
for (var e = ["yo", "zh", "kh", "ts", "ch", "sch", "shch", "sh", "eh", "yu", "ya", "YO", "ZH", "KH", "TS", "CH", "SCH", "SHCH", "SH", "EH", "YU", "YA", "'"], n = ["ё", "ж", "х", "ц", "ч", "щ", "щ", "ш", "э", "ю", "я", "Ё", "Ж", "Х", "Ц", "Ч", "Щ", "Щ", "Ш", "Э", "Ю", "Я", "ь"], r = "абвгдезийклмнопрстуфхцыАБВГДЕЗИЙКЛМНОПРСТУФХЦЫеЕ", i = t, o = 0; o < n.length; o++) {
i = i.split(n[o]).join(e[o]);
}
for (var s = 0; s < r.length; s++) {
i = i.split(r.charAt(s)).join("abvgdezijklmnoprstufhcyABVGDEZIJKLMNOPRSTUFHCYёЁ".charAt(s));
}
return i === t ? null : i
}
function c(t) {
for (var e = "qwertyuiop[]asdfghjkl;'zxcvbnm,./`", n = t, r = 0; r < e.length; r++) {
n = n.split(e.charAt(r)).join("йцукенгшщзхъфывапролджэячсмитьбю.ё".charAt(r));
}
return n == t ? null : n
}
Те же конташники. На каждую ворецию транслитерации мы будем сплитить строку в массив и джойнить его обратно. Какая эффективность )))
+1
function(t) {
switch (t) {
case 1:
return g.emailNotConfirmed;
case 2:
return g.showCaptcha;
case 3:
return g.authFailed;
case 4:
return g.makeRedirect;
case 5:
return g.reload;
case 6:
return g.mobileActivationRequired;
case 7:
return g.showMessage;
case 8:
return g.showError;
case 9:
return g.votesPayment;
case 10:
return g.zeroZone;
case 11:
case 12:
return Object(g.mobileValidationRequired)(t);
case 13:
return g.evalCode;
case 14:
return g.otpBox;
case 15:
return g.passwordValidationRequired;
default:
return Object(g.defaultHandler)(t)
}
}(t)
https://vk.com/js/cmodules/bundles/common.2ce877ca4bd415d95d03.js?51fe80b96 a07a7861643
#байтоклюйство #спичечная-экономика #олимпиадники #ebivk
+1
```rust
impl actix_web::FromRequest for Token {
type Error = ApiError;
type Future = Pin<Box<dyn Future<Output = Result<Self, Self::Error>>>>;
type Config = ();
fn from_request(req: &actix_web::HttpRequest, _: &mut actix_web::dev::Payload) -> Self::Future {
match req.extensions().get::<Option<Self>>().map(Clone::clone) {
Some(Some(v)) => Box::pin(async { Ok(v) }),
None | Some(None) => {
let header = req.headers().get("Authorization").map(Clone::clone);
Box::pin(
web::Data::<Pool>::extract(req)
.map_err(ApiError::from)
.and_then(move |pool| {
async move {
let header = header.ok_or(ApiError::authorization_required())?;
let auth = header.to_str()?;
let uuid = Uuid::parse_str(auth)
.map_err(|_| ApiError::authorization_bad_token())?;
let (_, token) = Self::find(&uuid, pool.get_conn().await?).await?;
let token = token.ok_or(ApiError::authorization_bad_token())?;
Ok(token)
}
})
.boxed_local()
)
}
}
}
}
Было принято решение создать Authorization middleware, который при каждом запросе авторизировал пользователя, если есть нужный хидер. В связи с тем, что некоторые роуты достают модель через ручной экстрактор, пришлось дописать эту хуйню (Второе условие никогда не будет выполнена вообще судя по всему).
0
/**
* @param int $filterType
* @return int
*/
public static function performanceFarmerStatFilterTranslator(int $filterType): int
{
switch (true) {
case 1 === $filterType:
return Task::TYPE_PREPARE_ACCOUNTS_BY_REQUEST;
case 2 === $filterType:
return Task::TYPE_PREPARE_GOOGLE_ACCOUNTS_BY_REQUEST;
case 3 === $filterType:
return Task::TYPE_PREPARE_TWITTER_ACCOUNTS_BY_REQUEST;
case 4 === $filterType:
return Task::TYPE_PASSWORD_MATCHING;
case 6 === $filterType:
return Task::TYPE_ACCOUNT_MARKUP;
case 7 === $filterType:
return Task::TYPE_REPLACE_ACCOUNTS;
}
return 0;
}
+3
import traceback
a = (1,2,[3,4])
try:
a[2] += [4,5]
except:
traceback.print_exc()
print(a)
Traceback (most recent call last):
File "prog.py", line 5, in <module>
a[2] += [4,5]
TypeError: 'tuple' object does not support item assignment
(1, 2, [3, 4, 4, 5])