Start.Pony - Поищем с пони!

?
в блоге IT Pony!
Приветствую everypony!

Сегодня я бы хотел представить вам один проект(находящийся под моим крылом) — Start.Pony, стартовая страница для брони.
Это моц первый пост, так что не ругайте)

А теперь давайте поподробнее обо всём.

Start.Pony — это стартовая страница, возможно только пока, для браузера.



Что можно пока что через неё делать?
1. Поискать что-то в интернете.
2. Познакомиться с новыми сайтами
3. Сразу переходить на нужные сайты
4. Послушать радио ОРТ или Ponyville.fm

Страница полностью адаптивна под каждое устройство(от компьютера до кофеварки).
Контент(новые сайты, блоги и многое другое) всё время пополняется.

Единственная проблема — это хостинг. Так что не пугайтесь «страшной ссылки»

Проект достаточно молодой, так что в нем ещё пока мало функционала, но это не значит, что это потолок, нет, это всего лишь начало…

Спойлерstart-pony.5devstudio.xyz/

Теги: , , ,

  • В избранное
    13

264 комментария

Была б там возможность менять порядок ссылок и убирать оттуда хлам…
хотя меня устраивает моя стартовая
Спасибо за отзыв. Мы планируем в скором времени добавить данную функцию.
А потом там появится майнер, или еще чего «поинтересней»…
найс реклама пяти бесполезных проектов. Оставить только табун на баннерах — и будет ОК.
В скором времени планируется возможность редактировать ссылки в разделе «самое важное». Так что эта проблема — дело времени…
Дятел, ты опять долбишь? Если для тебя Анон2Анон и ЕкД бесполезные проекты, то…
анон2анон и так есть на табуне, тут можно все их серии посмотреть. Зачем две повторяющиеся ссылки — вот вопрос
насчет екд — помню они в тряпочку умалчивали про сливы. Так что чуется мне, что они прогнулись под сами знаете кого.
стоп, а зачем вообще хостинг? Хромиум вроде позволяет редактировать стартовый экран локально, даже интернет-соединение для этого не нужно…
Если сайт будет не на хостинге, а локально, то на нем нельзя будет реализовать много разных плюшек(функционал).
+ код на PHP на стороне клиента не сможет обрабатываться.
Тот же счётчик на сайте(в верхнем правом углу) написан на PHP

Ещё один плюс нахождения на хостинге — это не занимает места на накопителе
+ выставлять в ручную локальный файл как стартовая страница — та ещё проблема. Не все это умеют делать. В нашем случае, что бы избавиться от этой проблемы — мы сделаем расширения для браузеров. И это, опять же, лишь проблема времени…
это не занимает места на накопителе

ты это кукам скажи.
+ выставлять в ручную локальный файл как стартовая страница — та ещё проблема.

ну так для этого и пишется exe-шник, который заменяет необходимые директории. Правда винда будет на такое ругаться, но уставить все равно можно будет.
Тот же счётчик на сайте(в верхнем правом углу) написан на PHP

Почему ты в этом так уверен? Ты же только видишь html-код и джаваскрипты как клиент. А как он сгенерировался — это можно только догадываться… или ты уже успел взломать их сервак и посмотреть исходники?)
Попробуй написать какой нибудь код на PHP(именно не тупо часть html), а именно какие нибудь вычисления.
У тебя на «голой винде» PHP не обработается
Тот же счётчик на сайте
А может, он просто не нужен?)
Ну я могу это понять как тренировка написания своего собственного кода, если до этого ничего не писал. Хотя это конечно слишком примитивно и наверняка такой шаблон есть для каждого веб-языка
Он нужен для фичи, которая появится в ближайшее время.
Это натолкнуло меня на мысль взять поняшный домен (типа ponypony.org), выделить кусок сервака и раздавать для подобных проектов домены третьего уровня — бесплатно, в стиле Рарити. Ибо страница, заканчивающаяся на xyz — вызывает у меня только непристойные мысли, хотя сам контент может быть шикарен.

Наверно, займусь этим, как завершу предыдущую акцию, чтоб не скакать по проектам. Спасибо.
хм, а на твой сервер можно будет на любом языке написать страницу? Просто я планирую на flask-е написать веб-страницу-презентацию своей игры, и мне вот такой сайт как раз бы пригодился, ибо самому покупать свой домен — влом.
хм, а на твой сервер можно будет на любом языке написать страницу

Язык страницы всегда один — это HTML 1.0 :-)
Если ты про серверную часть — то скорее всего это будет происходить по запросу в духе:
Понилюб 1: NTFS, будь лапочкой, поставь python
NTFS: сделано
Понилюб 2: NTFS, будь котиком, сделай так, чтобы perl работал
NTFS: сделано
Понилюб 3: NTFS, очень нужна база PostgreSQL
NTFS: задолбали сделано
Чёт мудришь, просто выдаём понилюбу контейнер с пустой убунточкой (ну или дебианом или центосью) внутри, а дальше понилюб пусть ставит сам чё хочет
Хотя с другой стороны для этого потребуется нефиговый такой кусок сервера
с пустой убунточкой

Давай сразу Slackware, чтобы понилюб проникся страданием администрирования POSIX-систем :-)

нефиговый такой кусок сервера

Я скоро для своих нужд уже буду дедика брать, ибо виртуалки загибаются.
Понилюб 4 закачивает свой пак некропедозоо с понями, приходит роскомпозор — финита-бля-комедия))
Ну и придет. IP-конский блокирнут (для понных узлов, я второй IP просто закажу), контент удалю, извинимся, инцидент исчерпан.
А если из хейтерства или просто врожденного долбоебизма, понилюб 4 будет регулярно заливать свое некрозоо? Понилюбы-1,2,3 быстро сбегут с постоянно забаненного ресурса.
понилюб 4 будет регулярно заливать свое некрозоо?

Сверну проект и уйду пить пиво.
И понилюбы-1,2,3 посылают тебе лучи отнюдь не дружбомагии))
Преимущество некоммерческих проектов — можно свернуть и тебе за этого ничего не будет ни по закону, ни по понятиям. Просто «извините, пацаны, так вышло».
Орхи гордился бы тобой
Ну собственно, так и есть. Если Орхи завтра проснется не в духе и снесет ЕП — это будет просто некрасиво — и не более того.
некрасиво

Бодипозитив же!
Орхи не жирный, он ведь пегас!
Воздухоплавание тяжелее воздуха никто не отменял.
Тогда у него должен быть моторчик))
А зачем тебе то ставить? Яж сам могу запустить свой интерпретатор и как-то через твой сайт всё это делать… правда пока не знаю, как это вообще происходит. Типа, я пока делал примитивные шаблоны, и они у меня норм работают только на 127.0.0.1 с моего и через мой айпи с определенным портом через другие компы, дальше этого я пока не заходил.
Саня, не епи моск, тут умные дяденьки общаются)
Я говорю как есть. Я запускаю «сервер» на фласке и я вижу свой сайтик на 127.0.0.1 на своем компе и на свой.айпи: порт с других компов. Как это происходит я хз, но это работает!
Как это происходит я хз, но это работает!

И этот человек пишет онлайн-игру…
в моей онлайн-игре сайтов не будет. сайт будет просто как визитка… если конечно сама игра будет) И вообще я не понимаю, почему я обязан знать всё на свете, чтобы кодить свою игру?
почему я обязан знать всё на свете, чтобы кодить свою игру?

фцитатнег!!!

Саня, я все-же искренне надеюсь что ты троллишь. Иначе это такой пиздец, шо я даже незнаю какой пиздец.
Я не троллю. Если ты так уверен в своих словах, напиши мне пожалуйста, какую теорию я должен знать, чтобы написать безопасную онлайн-игру на c# и python? Уверен, что там список будет листа на 3, и всё это я буду читать всю жизнь буквально. И я не шучу.
Собственно умный человек он потому и умный, что растет над собой всю жизнь, а не сдал егэ и узбагоился. А ты один в один Шариков из «Собачьего Сердца». Абсолютно неодупляем, но — «в присутствии людей с университетским образованием, вы даете советы космического масштаба, и космической же глупости. А между тем третьего дня вы наелись зубной пасты» ©

И список литературы на 3 листа — это еще очень мало, поверь. Я вот не понимаю — нахрен ты лезешь в кодинг, если не хочешь узнавать что-то новое, развиваться, расти? Ну вот нахрен? Я вот читал и читаю очень много всего из самых разных областей ИТ и около-ИТ, даже не потому что «надо», а потому что интересно. Просто интересно, понимаешь? А ты с своим подходом пополнишь ряды индусов-говнокодеров в лучшем случае.
Ты не понимаешь опять, что я имею в виду. Зачем мне всю жизнь развиваться и при этом нихуя не сделать за всю жизнь? Так получилось, что я очень медленно усваиваю новую информацию, даже если очень хочу этого. Одна простенькая книжка может растянутся на годы понимания, так что полное изучение всего этого может растянутся буквально на всю жизнь. Так что такой вариант мне явно не подходит.
Тогда смирись с тем, что предметы, требующие умственных усилий — не твое. Или хотя бы умерь свое охрененно опухшее ЧСВ, и внимай что другие люди тебе говорят. А то понтов дохрена, а толку нихрена.
Я внимаю когда мне объясняют вещи вкратце в двух словах, сравния с чем-то очевидным. Любой другой поток информации я в принципе не могу воспринимать, тут как говорится — в одно ухо влетает, из другого вылетает.
Я так вижу часть поста про ЧСВ была благополучно проигнорена. Хорошо, в двух словах, как просишь. Твои фразы типа
ну так раз там нет ipv6, значит это в прямом смысле ничего)

в контексте демонстрируемого тобой лютого незнания основ, выставляют тебя унылым клованом, вызывая желание не помочь тебе, а орнуть с тебя. Так доступно?
я знаю основы того, что ipv4 сам по себе закончился, и мы сейчас живем засчет зарезервированных провайдерами адресов (про нат я даже разбираться не хочу. Я специально его отключил, потому что когда он был включен, к моему айпи нельзя было подключиться извне...)
ipv4 сам по себе закончился

А мужики-то не знают :-)
Вбей nslookup everypony.ru и посмотри, какие там циферки.
Гарантирую, как минимум 1-2 адреса ipv4 среди прочих будет.
4294967296 — у нас техники явно больше, чем это число. И на каждого в идеале нужен свой уникальный айпи, чтобы ни с кем не путать, поэтому про нат мне даже не начинай тут.
Ну справедливости ради он реально почти заканчивался, просто раскулачили тех, кому в 80-90е щедро по /8 раздавали. И теперь уже экономят освобожденные ресурсы. Я вот стал замечать в логах айпишники из 3/8 которая раньше дженерал моторс целиком принадлежала вроде, 12/8 — голливуд, и так далее…

ну и на самый крайний случай — у нас еще есть 256 миллионов адресов в классе Е ;)
Я про то, что он используется и еще будет долго использоваться, как команды x86 — вроде устарело, но повсюду.
А мужики-то не знают :-)
IANA выдал последний /8 блок адресов в 2011 году. RIPE выдал последний /22 блок в 2018-м. IPv4-адрес за штуку нынче стоит бешеные сто рублей в месяц. Некоторые интернет-провайдеры, у которых был халявный белый IP-адрес, потихонечку халяву отключают
при этом нихуя не сделать за всю жизнь
Почему. Развиваться в процессе делания чего-то. Понятно, что вариант «не завершать, потому что можно же узнать как ещё улучшить» — это порочный круг, надо находить баланс между «тяп-ляп, сойдёт на отвали» и вечным улучшаторством.
Я считаю у меня есть такой баланс. Когда мне надо узнать что-то конкретное, я беру и читаю отдельные выдержки из этих самых книг или статей. Перед тем как пользоваться какой-то функцией в фреймворке, я быстро смотрю че про неё сказано. При этом я никогда не разбираюсь как именно она устроена изнутри. Мне самое главное что она принимает, что возвращает, и какие могут быть ошибки при «валидатных» значениях. Больше для современного кодинга ничего не надо, я считаю. владельцы оперативной памяти в 256 мегабайт возможно возразят, но таких сейчас оч мало.
О-хо-хо…
Черт уж с ней с оперативной памятью, но при таком подходе в твоем софте будут дыры всех мастей и размеров с вероятностью 99%
Ну я стараюсь как можно больше элементов запихнуть в абстракции, чтобы их можно было разом залатать, когда они обнаружатся, а не менять каждую десятую строчку кода, как это было бы, если бы я писал сплошной код без классов и функций.
Абстракционист ты наш… вот у тебя есть функция memset, ты прочитал ее описание, завернул в абстракцию, поюзал для очистки юзерского пароля, и… юзера поимели все равно. Догадаешься почему?
потому что перехватили трафик и украли мой приватный ключ?
Нет, это неверный ответ, ваше очко уходит в зрительский зал!
Я конечно не пресеньер срр, даже наверное не жуниор, а всего лишь так… Начинал.
Но мб из-за того, что memset очищает не полностью? Или не очищает то что надо, а лишь что-то определенное?
Из-за того, что memset может проинлайниться, развернуться, а потом выкинуться оптимизатором потому, что связь данных, записанных memset-ом, смотрит в никуда. Вот в таком коде это может произойти:
void func()
{
    char *p = malloc(10);
    do_something(p);
    memset(p, 0, 10);
    free(p);
}
В интеловских процессорах это может происходить прямо в рантайме, так что там даже анализ полученного ассемблера и всякие #pragma optimize(«O0») и __builtin__set_dirty() не спасают.
Истинно так. Поэтому для гарантированной очистки, и чтоб кроссплатформенно, рекомендовано делать так:
static void* (*const volatile pcv_memset)( void*, int, size_t ) = memset;


void secure_memzero( void *buf, size_t size )
{
    (*pcv_memset)( buf, 0, size );
} 
это с++, а у меня питон, который всё это учитывает, там нет вообще указателей в принципе. Всё — ссылки.
Это тебе просто как пример одной из частых ошибок таких вот как ты «не желающих тратить жизнь на изучение» самоуверенных индусов. В питоне ты с таким подходом не меньше хрени налепишь, уверяю. Тебе уже показали как ты в своей ММО не валидируешь входной поток, и запросто получишь от хакера пару гигабайт мусора в твою псевдо-БД
в питоне достаточно сложно сделать вот такую дыру…
В питоне достаточно сложно избавиться от этой дыры, потому что она встроена в питон в виде принципиально неизменяемых строк, лол
Сделать-то — да, проблема только в том, что она там уже есть =)
ну это уже вина разрабов, а не моя.
Начнём с того, что это С, а не С++.
И питон как раз, абстрагируя тебя от памяти, отбирает у тебя гарантии.
(Когда смотришь на код и чувствуешь себя ламером…)
Интересно, как это работает в Delphi? Завтра попробую проверить стандартные команды либы.
В дельфях помоему нет аналога volatile, поэтому не прокатит. Там только для винды ее специфичную функцию SecureZeroMemory вместо мемсет юзать, а для линуха — хз… Но линух и дельфи само по себе сочетание то еще))
поэтому не прокатит.

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

Но линух и дельфи само по себе сочетание то еще))

FreePascal довольно неплох, делал серьезные проекты на Linux, хотя ряд багов неприятен.
Можно, но это уже мы закладываемся на конкретную версию компилятора/линковщика. Если чисто для себя, то еще пойдет, а так нет гарантии что кто-то не соберет код другой версией компилера с более умным оптимизатором, который твою функцию тоже выпилит.
В старых дельфях был гарантированный способ сделать так, чтобы функцию не выпилило — вставить обращение внутри к глобальной переменной, специально для того созданной. Некрасивый способ, но рабочий.
Как в новых — не знаю, еще не проверял.
Вообще тема весьма интересная и срачегонная)) — до каких границ компилятор имеет право заходить в своих оптимизациях. Где грань между оптимайзингом и порчей? Скажем последние версии шланга и гцц стали строго следовать стандарту с++ в части того что «this никогда не нулевой». Более того ситуация равенства нулю считается как UB. То есть встретив строку вида

if( this == nullptr ) { ololo(); }

современный компилятор может не только выкинуть для оптимизации вызов ololo(); но и имеет полное право превратить последующий код в фарш.
Современные стандарты тоже жёсткие. Почти любое нелогичное действие (т.е. когда программист сказал не совсем то, что хотел, но его ещё в принципе можно понять) — UB, то есть, фактически указание «понимай как хочешь». Вплоть до того, что компилятору ничто не запрещает заменить хрестоматийное «i = ++i + ++i» на «printf(«Derpy is the best pony ever ,_'»)», и он при этом будет совершенно прав.
Дык и я про то же. А современные оптимизаторы трактуют порой UB вообще упорото) А ведь еще есть такая наркомань как strict aliasing…
if( this == nullptr ) { ololo(); }

Разве это не эквивалентно проверке на ошибку программиста — дескать, метод вызвал, а конструктор забыл?

Тогда уж правильней так

assert(this!=nullptr)

вроде бы assert никогда не выкидывает.
дескать, метод вызвал, а конструктор забыл?

В С++ штатно так не сделать, без лютых извращений (и кто их юзает, тот сам себе злой буратинка). Внутри нормально созданного и юзаемого объекта this не нуль по определению.
В С++ штатно так не сделать


MyObject * obj;
obj->someMethod();

этого достаточно, вроде бы.
Ну это просто косяк кодера, и this тут будет вероятнее всего не нуль, а мусор с верхушки стека, так что проверка this == nullptr все равно не спасет.

Я про случаи, когда умышленно делают this нулем через тайпкасты, а потом юзают этот факт внутри полученного недообъекта. Вроде такое в старых версиях библиотеки MFC юзали, что-то с картами сообщений как я помню. И такой хак под новыми компилерами отвалится в UB)
this тут будет вероятнее всего не нуль, а мусор с верхушки стека

Вот потому и не люблю «грязные» языки, которые экономят на инициализации ссущие копейки процессорного времени, но проблем на часы отладки.

Нормальные среды всё нулями забивают сразу, от QuickBasic до C#.
ну тут инициализация вряд-ли спасет, на верхушке стека творится срач всегда — адреса возврата, ошметки передаваемых/возвращаемых аргументов, фреймы исключений… чисто внутрикомпиляторная кухня, которая опять же нормальному кодеру без извратов — жить не мешает)
ну тут инициализация вряд-ли спасет

Смотря где. В C# такой пример даже не будет скомпилирован

MyClass obj;
obj.doMagic();

Но можно обмануть компилятор, создав массив из одного объекта

MyClass[] obj = new MyClass[1];
if (obj[0] == null)
Console.WriteLine(«Rarity is best pony»);
else
obj[0].doMagic();

и при запуске, будет выведен нужный текст.
То есть, созданный массив залит нулями, а не мусором. Очень удобно.
Ну в плюсах тоже можно через placement new чтото похожее сделать, но не заморачиваются обычно.
Я про случаи, когда умышленно делают this нулем через тайпкасты, а потом юзают этот факт внутри полученного недообъекта

Это те, кто не читал «Банду четырех» и не в курсе, как правильно делать паттерн «Нулевой объект»?
Ага, они «не хотели тратить жизнь на бесполезное чтение» © ))

На самом деле применяют еще и в стандартной либе для реализации расчета смещения члена структуры, как-то так

#define offsetof(s, m) (size_t)&(((s *)0)-›m)

Но опять же — это только внутри стандартной либы компилера, авторы которой точно знают что их компилер с таким кодом сотворит. И опять же последние рекомендации — юзать вместо этого что-то вроде __builtin_offsetof
offsetof(s, m) (size_t)&(((s *)0)-›m)


При попытке прочитать это вслух можно вызвать Ктулху, Дискорда или Моргота?
Молестию))
Дефайн оффсетоф с параметрами эс, эм как сайз тэ от адреса члена эм в приведённом к типу указатель на эс нулю
Прочитал, Ктулху спит, Дискорд не вылез, брат, наверное, жив (ну, брат Манвэ, я имею в виду). ЧЯДНТ? =)
ЧЯДНТ?

Уверен, перед чтением обсыпал вокруг соль, развесил иконы с Принцессами и гонял вокруг благовония.
Иной защиты от столь черной магии нету.
И опять же последние рекомендации — юзать вместо этого что-то вроде __builtin_offsetof
Правильно, потому что билтины зависят от реализации самого компилятора, даже не libc, и уж компилятор сам знает, как он со своим хозяйством будет работать. Вдобавок билтины портируемы, а магия с указателями — нет (к примеру, на эльбрусе в режиме защищённого исполнения эта штука не соберётся, поскольку там запрещено преобразование числа в указатель).
Вообще-то это не является обращением внутри метода объекта, и вполне себе регламентировано и допустимо с точки зрения стандартов языка.
Ну строго говоря, такой трюк для оффсета, это не undefined behavior, a undefined inplementation, поэтому я ж и написал выше — это только внутри стандартной либы компилера, авторы которой точно знают что их компилер с таким кодом сотворит.

Но «не пытайтесь повторить это в домашних условиях»)) на это намекает нам раздел 6.3.2.1 в стандарте С99 (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf), и аналогичные в стандартах С++
В С++ штатно так не сделать, без лютых извращений
Я, конечно, не спец, но разве
(reinterpret_cast<someclass*>(nullptr))->somefunc();
не приведёт как раз к этому?
… Или это как раз и считается лютым извращением (ну, потому что reinterpret_cast — и правда извращение)?
Ага, reinterpret_cast сам по себе дерп тот еще, а так юзать — это именно БДСМ-ное извращение)) Сам подставляешь ногу «ну прострели меня!» ))
простую функцию, которая копирует байт во все байты динамического массива
такая функция уже есть — и это как раз memset =)
Проблема только в том, что неважно, чем ты записываешь, сама запись может быть выброшена компилятором, неважно, чем ты записываешь.
Возможно, барьер по памяти от этого спасёт, но и это не точно.
такая функция уже есть — и это как раз memset =)

В дельфи нет. В дельфи это делаем примерно так

procedure mymemset(p:Pointer; size:Cardinal); asm;
begin
mov edi,p
mov ecx,size
mov al,0
cld
rep stosb
end;
Чем эти наскальные тексты отличаются от ассемблера?
Это и есть ассемблер. Его часто приходится использовать в Delphi, если хочешь достичь производительности и/или плохо знаешь стандартные библиотеки.
Но качественный memset работает не по байтам, а по максимальной доступной ширине обращения в память (STOSQ), и лишь остаток забивает через STOSB.
А ещё более качественный, но обёрнутый в #ifdef __SSE2 — использует SIMD-операции, да =)
Попадались мне статьи с замерами скорости мемсет/мемкопи по современным процам, и разницы между STOSQ и SIMD версиями там почти нет, ибо в любом случае современный проц целиком всю кэш-линейку гоняет. И вроде как REP STOSQ вообще сейчас по максимуму заоптимизирован.

А на более старых процах то да — там еще и с ручной расстановкой prefetch в цикле заполнения/копирования возились…
Кстати да, как раз недавно один наш физдизайнер рассказывал про то, что на уровне микрокода REP STOSQ (а также REP MOVSQ и прочие подобные штуки) автоматически уходят в SIMD-блоки. Но тут с гарантией сложно сказать — в каких-то процах это может сработать, в каких-то — нет.
Ну и да, при простых пересылках больших блоков упор скорее на кэш и память, а не на конвейер процессора.
в каких-то процах это может сработать, в каких-то — нет.


Ну можно делать при старте программы по принципу как интел-компилер, типа такого псевдокода

switch( __builtin_CPUID() )
{
case INTEL_GEN2: memset = memset_ver_STOSQ; break
case INTEL_GEN3: memset = memset_ver_SIMD; break;

}

А ещё лучше бенчмаркать все доступные варианты. При запуске быстро прогнал все реализации, нашёл наиболее эффективную — и всё, адрес функции в указатель и юзать везде.

Ну и CPUID… Эх, сколько мне приходилось бороться с программами, которые не могут просто сделать #ifdef __AVX или #ifdef __SSE2, а начинают делать CPUID и потом обижаются, а что это, мол, на эльбрусе там все нули (хоть, блин, свой stub для cpuid пиши). BOINC, LALsuite, Milkyway_nBody, LLVM, DPDK и SPDK… А в некоторых из них вообще куски вполне обычного кода написаны на ассемблере x86_64, когда их легко можно было бы сделать билтинами (из-за этого, к примеру, пришлось отключать поддержку SSE в LALpulsar, хотя без неё всё считается почти в 30 раз медленнее).
бороться с программами, которые не могут просто сделать #ifdef __AVX или #ifdef __SSE2, а начинают делать CPUID


Эт да… нужно по любому оставлять варианты жесткого компайл-тайм выбора, типа #ifdef __AVX или #ifdef __SSE2, а CPUID при желании его юзать — добавлять как еще одну ветку условной компиляции #ifdef AUTODETECT_CPUID

Но это опять же кодеру придется «тратить жизнь на то чтоб думать» © ))
тратить жизнь на то чтоб думать

Объективности ради, опускаться на настолько низкий уровень нужно буквально в единичных задачах.
За последние 20 лет компиляторы и библиотеки сделали всё, чтобы мы могли думать об алгоритмах и данных, а не о железе и регистрах.
Хм… по-моему пример с мемсет выше показывает, что до сих пор отстрелить себе ноги можно легко и непринужденно, и даже не заметить этого, если писать не думая.
Дело тут даже не в уровнях… понятно что зубрить наизусть что-то типа intel reference manual или ISO C++ standard — пожалуй перебор. Но общая культура кодинга должна быть… некое «чувство кода», где потенциально узкие/опасные места могут быть, и уже по ним углубленно копать. А не как Саня-Фраер — «у меня есть питон, в нем дырок нет, я не хочу знать как работает ТСР, я хочу пейсать игру с домиками и корованами».

Или вон выше
А в некоторых из них вообще куски вполне обычного кода написаны на ассемблере x86_64, когда их легко можно было бы сделать билтинами (из-за этого, к примеру, пришлось отключать поддержку SSE в LALpulsar, хотя без неё всё считается почти в 30 раз медленнее).

Кодер не подумал о кроссплатформенности, а юзер его либы страдает)
я не хочу знать как работает ТСР, я хочу пейсать игру с домиками и корованами».

Именно так и работает разработка высокого уровня.
Ты не знаешь, не хочешь и чаще всего даже и не должен вникать в то, как оно работает. Ты просто берешь компонент из библиотеки и его используешь.
и… юзера поимели все равно. Догадаешься почему?
Я не говорю, что это прям хорошо и замечательно. Я описываю существующее положение вещей.
Кстати эти библиотеки, компоненты и прочее middleware, кто-то таки должен писать, обновлять, поддерживать… но общее падение кодерской культуры приводит к тому, что некомпетентность все чаще проникает и туда, и это уже совсем не хорошо. Вон из последнего — фейл мелкомягких в реализации STL под MSVC-2019. Упороли в реализации красно-черных деревьев. В красно-черных деревьях, Карл! Алгоритм которому лет столько сколько всей ИТ-индустрии, который разобран и расписан тысячи раз чуть ли не на заборах даже, и надо только аккуратно реализовать.
С другой стороны, в этом случае никто и не пишет memset() сам — ему достаточно memset()-а из библиотеки, а в нужных случаях — SecureZeroMemory().
Но полностью закладываться на библиотеки — такое себе. В прошлом треде где упоминали Фраерское творчество, уже было, что пишет он клиентскую часть на юнити, в котором до сих пор древняя уязвимая версия TLS. Нормальный кодер прикрутит другую стороннюю либу, пофикшенную, а таким как Фраер остается только ждать пока разрабы юниити родят патч, а юзеры их софта под угрозой в это время.
юнити, в котором до сих пор древняя уязвимая версия TLS
Вообще, гугл уверяет, что во флаеровской версии юнити TLSv1.2 давным-давно есть, а почему он у флаера не увиделся, непонятно (а самому флаеру слишком пофиг чтобы разбираться)
Тогда все еще забавней — «я юзаю библиотеку криво, потому что не знаю и не хочу знать как надо». Скомпилировалось — в продакшен!
Ты просто берешь компонент из библиотеки и его используешь.

Напомнить тебе как у меня автомат освещения не хотел время из модуля часов брать из-за кривой библиотеки или нет?
Это доказывает, что в библиотеках тоже есть ошибки. Выше про деревья писали. Лично сталкивался с ошибками в компиляторах, не топовых — но известных.
Это доказывает не то что в библиотеках могут быть ошибки, а то что «существующее положение вещей» только способствует увеличению их количества. А подобный подход в обучении еще и делает невозможным их исправление. Это как с автосервисами. Вроде бы полно их, а чтобы найти тот в котором у работников руки не из жопы были надо чуть ли не к дельфийскому оракулу пиздовать.
Другой IT-отрасли у меня нет.
А с таким оправдывающим подходом для чужой лени никогда и не будет.
чужой лени

У меня и со своей собственной ленью чаще всего 50 на 50 выходит — если еще и с чужой начну бороться, меня надолго не хватит.
Но защищать её силы-то находишь.
На самом деле, когда тот, кто пишет прогу, делает свою реализацию, наделать ошибок в ней ему куда более вероятно.
Поэтому в случае ошибок в библиотеке надо выходить на мэйнтейнеров и предлагать пулл-реквест, а не пытаться поправить косяк либы у себя в проекте.
Алсо, «косяк либы» может быть связан просто с неправильным её использованием или невнимательным чтением документации по ней (и это куда чаще встречается).
Ну свою реализацию — это уж на совсем крайний случай, да, (особенно в таких вещах как крипта), проще другую либу взять, без косяка которая. А мейнтейнеры — такое себе порой… Мелкомягкие вон уже три месяца тупо отмораживаются от своего бага в СТЛ)
Вот выходишь ты на мейнтейнера, а там Сашка сидит.
ВОТЭТОПОВОРОТ
Таких не берут в мэйнтейнеры =) На самом деле, проекты с неадекватными мэйнтейнерами обычно достаточно быстро форкаются более адекватными, и после этого оригиналы умирают, а форки живут.

P.S. No offense.
Когда вымрут динозавры 90-х и их ученики, то только такие мейнтейнеры и останутся...
Спойлер
Лично я придерживаюсь мнения, что да, в 2019 писать на ассемблере (особенно с целью оптимизации, потому что в общем случае компилятор соптимизирует куда лучше человека) — это моветон. Но при этом, используя язык высокого уровня, стоит представлять, как это всё будет компилироваться и как работает на уровне ниже; это позволяет избежать некоторых узких мест, уязвимостей и ошибок.
используя язык высокого уровня, стоит представлять, как это всё будет компилироваться и как работает на уровне ниже; это позволяет избежать некоторых узких мест, уязвимостей и ошибок

Вот отлично сказал, согласен на 146%. Именно на это я и намекал в своих постах в этом треде, да и вообще.
Вот, да, непрямой вызов по волатильному указателю — кмк, должен исключать эту проблему. По крайней мере на этапе компиляции.
Но опять же, в процессорах с live-реордерингом не очень понятно, что произойдёт (хотя проверить связи по данным на этом этапе куда сложнее; думаю, там вряд ли какие-то записи будут выброшены — на x86_64 аппаратных стеков нет, и вроде как нельзя с уверенностью сказать, идёт ли запись во фрейм текущей функции, который будет сброшен ret-ом, или просто в память).
Запись то в итоге пройдет полюбому, но вот в какой момент времени… На этом вроде одна из процовых аппаратных дырок основана из всплывших в последнее время — через гипертрейдинг и отложенную запись можно угнать данные соседнего потока.
Ну, сбросить всё в память можно, вроде как, барьером. Но это опять же не точно, современные компиляторы уже считают себя умнее многих программистов (и иногда они правы, да), и процессоры на подходе…
Развиваться это не для сашка, давно ж уже известно
Как это происходит

Черная магия! Колдовство! TCP/IP! WinSockets!
Черная магия! Колдовство!

Техножерцы! Литании Омниссии!
Темные механикумы!
Ну с TCP сокетом я уже и так работаю. Как я понимаю это в упрощенном виде, один комп по айпи и порту находит в сети другой комп, и они устанавливают этот самый сокет друг с другом, один другому дает публичный ssl-сертификат и поехали пакеты по сетевым трубам…
Примерно, хотя очень коряво.
Всё-таки рекомендую на досуге почитать про сетевые технологии, сервера, протоколы, функционирование Сети. Любая книжка от 500 страниц и от 1000 рублей — годится.
любой торрент от 100 сидов?
Я не знаю, как оценить качество книги по сидам :-) если хочешь, накидаю тебе названий чтива.
Накидай и мне тоже?)
А то я изучал матчасть по кускам с рандомных мест и до сих пор имею много пробелов в знаниях, и из-за этого теперь даже не знаю что всяким флаерам советовать читать
он тебе скинет какую-нибудь книгу 20-летней давности, где даже не упоминается ipv-6
Лучше чем ничего
ну так раз там нет ipv6, значит это в прямом смысле ничего)
в прямом смысле ничего

в прямом смысле ничего — это твои суждения о чем-либо, включая и книги по кодингу.
ipv6 — это нужно, но необязательно. 99% сайтов работают на старом добром ipv4, и некоторые из них поддерживают ipv6

Вопрос для самоконтроля: 127.0.0.1 — это ipv4 или ipv6?
127.0.0.1 это 4, но наверняка у 6 есть аналог, но наизусть я его не знаю. у гугла тоже есть аналог 8.8.8.8 в ipv-6, но опять же наизусть не помню, там оч длинные шестнадцатиричные строчки.
*принес двадцатипятипарник из соседнего треда*
Насколько я помню, лень гуглить, там гдето надо FFFF: припиисать, тогда 127.0.0.1 станет ип6 )
В IPv6 локальному хосту сопоставляется IP-адрес ::1/128 (0:0:0:0:0:0:0:1).
А что, в этой ветке делятся предлагают чтиво по сетевым технологиям? А можно и мне тоже отсыпать тогда? :3
Угу, как освобожусь, дам книжки.
И мне тоже, пожалуйста. Давно хотел во всем этом капитально разобраться.
Раз такой спрос, сделаю отдельную подборку, дабы просветить народ.
только на 127.0.0.1

Это адрес твоего ПК и любого другого, локальная петля, способ обратиться к серверу, запущенному на данной и только на данной машине.
В Интернете у тебя есть IP-адрес (для мажоров) и доменное имя (для других мажоров), привязанное через конфиг апача к твоим файлам сайта.

Это долго рассказывать (конфиг сервера у меня занимал три лекции в лучшие годы), как запущу сервис — стукнусь к тебе, помогу разместиться
три лекции
Это слишком много для флаера, ему нужно не больше нескольких предложений, иначе начнёт возмущаться, что ты его бесполезной теорией грузишь
Не, ты шо… Саня есть умный… Саня есть егэ на 100 баллов писать! ))
Объективности ради, ручное конфигурирование сервера — это вещь, которая нужна раз в пару месяцев. Но когда она нужна — нужна так, что аж дым из жопы идет, ибо всё плохо (вспоминает недавнее падение DNS провайдера и перевод всех серверов на 8.8.8.8 из голого SSH)
Лучше занять домен первого уровня *.eq и там раздавать. Правда стоить он конечно будет как три боинга… но скинемся всем миром))
*всей Эквестрией)
домен первого уровня

Их не выдают физлицам. Даже ИП, как у меня, будет послано на конский… хвост. Есть мнение, что и полноценную организацию завернут, хоть коммерческую, хоть общественную. Хотя вопрос интересный — надо изучить, для развития общего.
А что для этого вообще надо? Быть страной?
Можно быть гуглом
А что для этого вообще надо?

Вот сейчас изучаю, но информация скудная. По идее нужно писать в ICANN, обосновывая, что ты так хочешь домен .eq, что аж есть не можешь.
UPD: Вот на русском

www.nic.ru/info/services/apply-for-top-level-domain/
Ну, если так подумать…
Возьмем просто самый лучший вариант развития событий:
Тебе удается договориться со всеми брони сайтами(такими как ЭквДейли, Эврипони и прочие) как российского сегмента, так и зарубежного что бы они перенесли свои сайты на домен .eq
И в принципе… Это уже можно считать весомым аргументом, пушто сайты не с плохой аудиторией.

Но это лишь мечты…
И всё равно придется заплатить приличный взнос в ICANN.
Если у меня будут такие деньги, я лучше понную игру проспонсирую или студию куплю для продолжения выпуска G4
Покупать придется не толькостудию, но и права…
Перекрасим Рарити в зеленый цвет и назовём её Профити.
А Эпплджек в синий и назовем её Столичная…
Не, лучше вместо RARити ZIPити)
7ZIPити
ARJири
HAрити
CABрити
Huffmanрити))
Как это двуссмысленно… XD
tarити
tgzрити
harити
tgzити сегодня уже вышла из моды! Правильный шик — это tar.xzити!
Собственно

anypony.club

ныне свободен и стоит грОши.
Годится такое имя для разносольных понных проектов? Ну вроде startpage.anypony.club, chat.anypony.club, supergame.anypony.club
Сразу бы взял, пока мысль свежа.
Понячий narod?
Типа того, но с серверными приложениями и регистрацией через постель письма админу.
Можно сделать какую-нибудь Овер сложную систему реги через снилс бабушки друга по переписки из Молдовы(хз, первое что в голову пришло).
И один аккаунт на все сервисы.
Вот тебе и зародышь своей «инфраструктуры»…
Могу, если решишь делать, помочь всеми 4 копытами
Можно сделать какую-нибудь Овер сложную систему реги через снилс бабушки друга по переписки из Молдовы(хз, первое что в голову пришло).

Это хлопотно. Вряд ли будет много желающих, десяток проще вручную зарегать и софт для них поставить.
Понячий narod?

И конструктор сайтов «делаем три клика и у тебя, моя пегасонька, есть свой сайт»
И конструктор сайтов

Руководство по HTML 1.0 — и не нужен никакой конструктор.
У меня где-то был учебник хтмл, но как определить 1.0 или что другое? Если чисто теги это и есть 1.0?
Я не уверен, что что-то старее 4.0 можно найти в живой природе, кроме как на нескольких сайтах, сохранённых специально для истории
Тогда где взять это «Руководство по HTML 1.0»? Мне же любопытно!
что-то старее 4.0 можно найти в живой природе

Открываем исходный код страницы Табуна, видим тонны ul, li, a, p и даже пару блудных i.
Ну давай тогда ещё все современные виндовые программы называть программами для Windows 3.x, так как местами используют аналогичное Windows API)
Соотношение часть-целое.
Даже самый крутой сайт не может обойтись без тэгов из стандарта HTML 1.0
Ну, даже самая крутая программа не может обойтись без вызовов API, появившихся ещё в Win16 )
Так и есть. И о чем речь?
О том, что отныне называем виндовые программы программами для Windows 3.x ))
Обратное справедливо — программы для Windows 3.x запустятся на современной Windows (если Windows не 64 бита)
Ну если ты выучишь тэги из 4.0 — хуже не будет :-)
Серьёзно, я не нашёл 1.0, как и говорит Андреймал везде 4.0 и старше.
везде 4.0 и старше.

Учебника наверно не будет. Но сам факт, что для организации страницы — достаточно знать тэги из 1.0 — важен.
Какие теги относятся к 1.0, а какие старше?
На память уже не помню :-(
а если задействовать визуальную память?A
AREA
B
BIG
BODY
BR
CENTER
DIV
FONT
FRAME
FRAMESET
Hx
HEAD
HR
HTML
I
IFRAME
IMG
LI
MAP
OL
P
PRE
S
SMALL
STRIKE
SUB
SUP
TABLE
TD
TITLE
TR
TT
U
UL
Первая ссылка в гугле выдаёт вот такую замечательную табличку www.martinrinehart.com/frontend-engineering/engineers/html/html-tag-history.html
не, рофал не в том. Аналог Викс'а(Wix), только Вингс(Wings, «крылья»)
нуууу фиг знает…
А там, глядишь, и до tabun.anypony.club недалеко…
tabun.anypony.club

Уже есть три табуна, зачем четвертый?
Затем, что сможешь стать новым Орхидеусом, и тебе будут писать: «NTFS, открой регистрацию, NTFS, почини аватарки/поиск».
тебе будут писать

Я профессионал-разработчик, у меня нет нехватки писем «почини то, сделай это, разработай пятое».
Но ты еще не мем. А тут шанс мемефицироваться.
«Pony.ru» освободится в октябре, если не проплатят дальше.
«Поняша.рф», например, свободен и сейчас. «Equestria.su» тоже свободен.
Pony.ru

Я бы не хотел использовать национальный домен. Это нелогично.

Поняша.рф

Кириллические домены есть ересь.
Кириллические домены есть ересь.
Ага, нужен 🦄.ws
За два доллара? Я могу сегодня обойтись без обеда и купить.
К сожалению, в америках целая часть числа отчисляется от дробной точкой, а не запятой)
Суууууучки. Я уже обрадовался.
Самое важное
ТО Магия Дружбы
Чёт мда
не хватает ссылки на млб в вк для полного счастья
Ага, мда… Но товарищ может не в курсе последних событий?
Ну… Я наверное в танке, да, просто последнее время перестал углубляться в мир фандома(дел и работы много).
Если не трудно, можешь ввести в курс дела?
Добавьте в список ссылок форчановский /mlp. Все-таки один из важнейших и крупнейших брони-ресурсов.
Не хочу Яндекс, хочу Гугл :3
Duck duck go!
Хотеть не вредно :3
А так, спасибо за отзыв, в ближайшее время добавим функцию выбора поисковой системы)
А в качестве расширения для браузера такое реально сделать?
Расширение будет работать так, что автоматически будет заменять стартовую страницу на Старт.Пони
это не расширение называется, а спам-вирус, по типу тех, которые тебя постоянно на никому ненужный поисковик перенаправляют
Т.е. по твоему, когда ты качаешь, к примеру, хром и ставишь расширения Яндекса — это спам-вирус?
Ты бы:
а) Почитал, что такое спам.
б) Почитал, что такое вирус.
в) Почитал, что такое расширение для браузера и как оно работает.
г) И подумал своей головой, что все расширения в браузер ставятся с согласием пользователя.

Читая то, что было выше (отношение других брони к тебе), я сначала не очень понял, что они на тебя разозлились(да и не пытался понять).
Теперь понял.
На сашу не злятся, с него хуеют.
я сначала не очень понял, что они на тебя разозлились(да и не пытался понять).
Теперь понял.


«Как завоевывать расположение людей, и заводить друзей» — мастер-класс от Сани-Фраера, часть 228-я… спешите видеть))
кек
*очень информативный комментарий*
Ньяннн!
Вот есть Мьянма, а у тебя Ньянма.
Ну да, потому что в Ньянме все няшечки и все някают.
Эм, а что мне мешает просто сделать свою стартовую в браузере 1 в 1 как здесь? Все современные браузеры по умолчанию предлагают такие же страницы при открытыии новой вкладки. Здесь я не могу перетасовывать эти сайты, не могу добавлять свои, черт, я ничего не могу на этой страничке. Зачем она?=)
Бесплатные хостинги-тамблер и гугл сайты
Выше я уже отвечал на данный комментарий. Мы в скором времени добавим эту функцию.
Данный пост был как раз для того, что бы понять, мнение аудитории и что они ожидают/хотят от неё(от стартовой страницы)
Но спасибо за отзыв)
На андроид пойдет же? (если это написано, простите, сегодня туплю)
— Здравствуйте, это пост про стартовую страницу браузера? — Да. — Как мне безопасно очистить в памяти строку с юзерским паролем?
И все это на сайте по разноцветным пони)
Классика.
Это особый талант Сани-Фраера — внести срач на 7к постов в самую скучную тему))
Да, это — Табун!
— Здравствуйте, это пост про результаты конкурса «Эквестрийских историй»? — Да. — Почему фанфики Диксди такие сложные?..
И почти две тысячи комментов вслед...
Это как же я такую жырноту пропустил)) ссылочка есть?)

upd — а, все вижу… ща заценим!
Заценил — Мда, бедный Диксди, отгрузили ему три фуры дизлайков...)) Надо будет читнуть чтоль его фик какой, чтоб понять за шо его так )
Почитай его комменты, где он что-то объясняет/доказывает и пойми, что в фиках такого на несколько порядков больше.
Вот таким людям точно не стоит программистам работать. Самые элементарные задачи будут на 100к строк растягивать… жуть!
Опять метанируешь. Как раз неодупляемые индусы элементарщину на 100к строк растягивают, ибо алгоритмам и прочим премудростям не обучены, лепят решение тупо в лоб «что вижу, то пишу».
Ты имеешь в виду что-то типа этого?
if a == 1: b = b + 1
if a == 2: b = b + 2
if a == 3: b = b + 3
if a == 4: b = b + 4
if a == 5: b = b + 5
if a == 6: b = b + 6
if a == 7: b = b + 7
if a == 8: b = b + 8
if a == 9: b = b + 9
if a == 10: b = b + 10
if a == 11: b = b + 11
if a == 12: b = b + 12
if a == 13: b = b + 13
if a == 14: b = b + 14
if a == 15: b = b + 15
if a == 16: b = b + 16
if a == 17: b = b + 17
if a == 18: b = b + 18
if a == 19: b = b + 19
if a == 20: b = b + 20
if a == 21: b = b + 21
if a == 22: b = b + 22
if a == 23: b = b + 23
if a == 24: b = b + 24
if a == 25: b = b + 25
if a == 26: b = b + 26
if a == 27: b = b + 27
if a == 28: b = b + 28
if a == 29: b = b + 29
if a == 30: b = b + 30
if a == 31: b = b + 31
if a == 32: b = b + 32
if a == 33: b = b + 33
if a == 34: b = b + 34
if a == 35: b = b + 35
if a == 36: b = b + 36
if a == 37: b = b + 37
if a == 38: b = b + 38
if a == 39: b = b + 39
if a == 40: b = b + 40
if a == 41: b = b + 41
if a == 42: b = b + 42
if a == 43: b = b + 43
if a == 44: b = b + 44
if a == 45: b = b + 45
if a == 46: b = b + 46
if a == 47: b = b + 47
if a == 48: b = b + 48
if a == 49: b = b + 49
if a == 50: b = b + 50
if a == 51: b = b + 51
if a == 52: b = b + 52
if a == 53: b = b + 53
if a == 54: b = b + 54
if a == 55: b = b + 55
if a == 56: b = b + 56
if a == 57: b = b + 57
if a == 58: b = b + 58
if a == 59: b = b + 59
if a == 60: b = b + 60
if a == 61: b = b + 61
if a == 62: b = b + 62
if a == 63: b = b + 63
if a == 64: b = b + 64
if a == 65: b = b + 65
if a == 66: b = b + 66
if a == 67: b = b + 67
if a == 68: b = b + 68
if a == 69: b = b + 69
if a == 70: b = b + 70
if a == 71: b = b + 71
if a == 72: b = b + 72
if a == 73: b = b + 73
if a == 74: b = b + 74
if a == 75: b = b + 75
if a == 76: b = b + 76
if a == 77: b = b + 77
if a == 78: b = b + 78
if a == 79: b = b + 79
if a == 80: b = b + 80
if a == 81: b = b + 81
if a == 82: b = b + 82
if a == 83: b = b + 83
if a == 84: b = b + 84
if a == 85: b = b + 85
if a == 86: b = b + 86
if a == 87: b = b + 87
if a == 88: b = b + 88
if a == 89: b = b + 89
if a == 90: b = b + 90
if a == 91: b = b + 91
if a == 92: b = b + 92
if a == 93: b = b + 93
if a == 94: b = b + 94
if a == 95: b = b + 95
if a == 96: b = b + 96
if a == 97: b = b + 97
if a == 98: b = b + 98
if a == 99: b = b + 99
if a == 100: b = b + 100

p.s. нет, я не писал это вручную.
for i in range(1, 101): print("if a == {0}: b = b + {0}".format(i))
*Сотворил фейскруп* — под спойлер хоть бы спрятал… но дятел он и в африке дятел, растянул экран людям и рад.
Спойлер

Кстати, можешь назвать случай, когда выгодней и правильней написать именно 100 строк вида

if a == 92: b = b + 92
if a == 93: b = b + 93

?
растянул экран людям и рад.

Скажи спасибо что не все range(100000)
выгодней и правильней написать именно 100 строк вида

В питоне? В душе не ебу. Тут a и b это ссылки на объекты класса int, и какие ситуации могут быть, я хз. Может быть такая ситуация, что в отдельном потоке a очень быстро меняется, так быстро, что между каждым if-ом в этом потоке, а будет менятся во втором потоке, и тогда всё ещё хуже будет… а когда будет быть лучше — ну ващщще хз!
Скажи спасибо что не все range(100000)

Мда… походу ты становишься типичным форумным токсиком (не люблю это слово, но тут именно оно уместно). Агришься на рандомных юзернеймов без повода, мелко пакостишь… Печально.

В душе не ебу

Вся твоя суть как программиста, да и по жизни походу.
Причин можно много придумать, но все они притянуты за уши.
Или ты имеешь в виду то, что прибавление только в этом диапазоне? Просто это тоже делается в одну строчку:
b+=a * (a > 0 and a < 101)
Кстати, можешь назвать случай, когда выгодней и правильней написать именно 100 строк вида
Кстати, я вот не могу. Если все строки сделаны по шаблону «if (a==%d) b += %d», то я не вижу смысла, когда это бы не сводилось к «if (a <= max && a >= min) b+=a;». Даже если добавка к b в каждой строчке не всегда равна a, то тот же case здесь лаконичнее, а транслируется в тот же самый код. А поскольку у нас диапазон a не разрежен, то можно использовать предзаполненную таблицу (даже для разреженных, но не сильно диапазонов такой подход выигрывает). Лесенка if-ов, а точнее, длинный switch имеет смысл только при очень разреженном диапазоне a, при этом на профиле вероятность попадания в верхние строчки должна расти в геометрической прогрессии (т.е., например, вероятность попадания в первую строчку — 3/4, во вторую — 3/16, в третью — 3/64 и т.п.) К слову, такие switch-и мне встречались в кодгенераторе LLVM, и их писал не человек, а утилитка tablegen, превращавшая табличное описание системы команд в такой вот многокилометровый switch.
когда выгодней и правильней написать именно 100 строк вида

1) Когда платят за строки (не знаю, есть ли эта практика еще — я уже сто лет как зарплаты не получают)
2) ЕМНИП, что-то с криптоалгоритмами и обфускацией связано — дабы не ломали и не гадили в бинарный код.
Лол, 1 — отличная причина =)
Можно писать по одному символу или идентификатору на строку =)
А вот 2 — странно, поскольку всё равно это преобразовывается в цепочку cmp-jne-add, которая легко видна в бинарнике.
Не уверен по 2, ждем ответа правильного.
Вспоминается вот это. (осторожно, внутри палеонтологический боян)Историю эту рассказал мне близкий родственник, весьма почтенный патриарх. Возможно, за два десятка лет к ней что-то для красного словца и добавилось, но, в общем и целом, байка, думаю, правдивая…
Родственник мой, S., оказался в Америке в начале восьмидесятых, в возрасте «за сорок» и владея английским языком в рамках «средней школы давно». Помыкавшись некоторое время (не о том сказ), S. нашел отличную работу — программистом Больших Шкафов для телефонного гиганта AB&C (кто знает, тот поймет). Для общения с начальством новоиспеченный программист быстро выучил английскую фразу «летмишоую» (сейчас покажу), за которой следовала демонстрация работающего кода, и вопросов больше не
возникало.

Работа в телефонных гигантах неторопливая, но S. бездельничать не любил, и решил заняться оптимизацией. В одном из Больших Шкафов обнаружилась база данных, а в ней — таблица с парами чисел: 1-3, 2-6, 3-9,…, 1000000-3000000. Ничтоже сумняшеся, S. таблицу стер, а обращения к ней заменил строчкой B=Ax3. Шкаф, радостно заурчав, продолжал функционировать. Отсутствие таблицы начальство заметило (и то по чистой случайности) через неделю. Состоялся знаменательный диалог:
— Где таблица?
— Таблица не нужна.
— Как это не нужна?
— Ну, не нужна. Летмишоую. Вот: B=Ax3
— Что это?
— Вместо таблицы.
— А где таблица?
— Я ее стер. Не нужна.
— Как стер???
— Летмишоую. Вот, работает. B=Ax3
— Ну, работает. А где таблица-то?

В конце концов, проявив завидную корпоративную мудрость, начальник оставил S. в покое. А по AB&C долго ходили легенды о сумасшедшем бородатом русском, который ПРИДУМАЛ ФОРМУЛУ.
И мой код ревью на такой поступокНа самом деле это весьма недальновидное решение, которое явно не стоило принимать, если не было ясно, почему это реализовано именно так (очевидно же, таблица заполнялась автоматически, никто не будет сидеть и с терминала вбивать два миллиона чисел — а значит, тот, кто её заполнял, уже знал эту сверхсекретную «формулу»). Конечно, может быть, это остатки каких-то прошлых вещей, которые можно было оптимизировать, или вообще тестовая таблица, но я могу сходу придумать несколько причин, почему решение с таблицей — иногда лучше.
1. Давайте подадим в «формулу» значение 2000000. Она вернёт нам 6000000, а это, например, окажется указателем, программа полезет не по тому адресу, после чего всё крашнется (не забываем, это восьмидесятые, изоляция процессов в ОС того времени — вещь такая себе; если это VMS или UNIX, ещё ладно, а вот если у них там какой-нибудь PDP-6 или PDP-10 c TOPS был...). В случае с таблицей вернётся ошибка ENOENT, и обработчик радостно завершит некорректный запрос, дав программе работать дальше. Buffer overflow как он есть, каноничнейший пример.
2. Переназначение блоков. Допустим, в целом все ячейки вычисляются по формуле B=A*3, но некоторые из них могут быть отличны. Например, это условная база возможных пользователей и их идентификаторов в системе, при этом на каждого пользователя с номером N выделяется по три идентификатора 3N, 3N+1 и 3N+2. Но допустим, идентификатор с номером 12345 захватила система; и теперь пользователю с номером 4115 надо выдать другие свободные идентификаторы, в нашем случае первыми свободными будут 6000003, 6000004 и 6000005. В таблицу записать новую базу идентификаторов для этого пользователя — 6000003 — проблем нет, а вот с формулой такой трюк не пройдёт.
3. А вот DOOM при запуске выделял кучу памяти просто для того, чтобы хранить таблицу, в которую записывал значения синуса углов 0π/128, 2π/128, 4π/128… 254π/128. Зачем? Казалось бы, понадобился тебе синус — проще не бывает, вызываешь sin(x) — и вот тебе синус, ведь правда? Правда, только считать синус куда дольше, чем брать уже подготовленное значение из таблицы. А теперь отматываем на 15 лет назад и вспоминаем, что во многих процессорах того времени умножение было ненужным схемотехническим излишеством и реализовывалось программно. А до оптимизирующих компиляторов, которые могли бы превратить «b = a * 3» в «mov rB, rA; add rB, rA; add rB, rA» тогда ещё много времени оставалось. То есть, при умножении A на 3 вызывалась, например, подпрограмма умножения двух 36-битных (возьмём PDP-11 для ясности) чисел, что эквивалентно по времени в худшем случае 36 сложениям, 72 сдвигам и 72 проверкам с переходом. Хотя здесь, т.к. умножение на число, в котором только два младших единичных бита, эта подпрограмма, если она под это заточена, может завершиться после двух сложений, четырёх сдвигов и четырёх проверок с тремя попаданиями в переход и одним промахом.Вот для примера реализация «оптимизированного» для такого случая умножения:
; rC = rA * rB
; rA, rB в процессе разрушаются
xor rC, rC
l1:
test rB, 1
jz l2
add rC, rA
l2:
shr rA, 1
shl rB, 1
or rB, rB
jnz l1

Если эта таблица, например, лежала в быстродоступной статической памяти, а поиск был не ассоциативный, а адресный (т.е., B=table[A], а не find(int A){for(int i=0;table[i].A!=A;++i); return i;} B=table[find(A)].B), то обращение к ней могло происходить за единицы тактов, в то время, как умножение сжирало бы сотни тактов.
Хороший разбор, насчет скорости не согласен только — обращение к таблице на миллион записей будет всё равно медленнее, чем умножение чисел. Умножение чисто в ОЗУ идет (а то и в регистрах сразу), а таблица с диска читается, и не факт, что она дефрагментирована на диске и идеально индексирована как СУБД.
обращение к таблице на миллион записей будет всё равно медленнее
Я там предположил так:
Если эта таблица, например, лежала в быстродоступной статической памяти
. Умножение тут на регистрах идёт, но всё равно длительнее, чем обращение к синхронной статической памяти.
Ну может он реинкарнация Льва Толстого))
И ИМХО именно для фентези витиеватые загибы не всегда плохо, позволяют лучше атмосферу мира прочувствовать.
может он реинкарнация Льва Толстого

Не лучшая рекомендация для писателя, как по мне.
А если Набокова? Кафки? Рыбакова? ;)
Почитай его комменты, где он что-то объясняет/доказывает и пойми, что в фиках такого на несколько порядков больше.
На несколько порядков? Т.е. в 1000 раз и более? Не верю! ©
Т.е. в 1000 раз и более? Не верю! ©

К примеру «Наследие Богини. Диксди» объёмом в 246009 слов. Так что можно сказать, что его фики больше его комментариев в 1000 раз. Или чуток больше, но там дроби и проча
Ну там, что интересно, не просто дизлайки, а активное обсуждение, как надо =)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.