All streams
Search
Write a publication
Pull to refresh
50
0

Погромист

Send message
Вы правы, сам Warp 1994 года (с лончпадом) действительно декларировал минимальные требования в 4М ОЗУ. Тот самый, который better dos than dos за конский прайс, и требовал проинсталлированного Windows 3.1 :-)

Однако я больше про Warp Connect 1995 года, мне же был нужен браузер и tcp/ip… То есть — здравствуй набор бонуспаков. А тут не все так радужно.

  • Intel 386 SX-compatible or higher based personal computer
  • VGA or higher display
  • An OS/2-compatible CD-ROM drive
  • IBM-compatible mouse
  • Supported LAN adapter
  • 12MB minimum of random access memory (RAM)

Так что мы с вами несколько о разном, хотя формально — про одно и то же :-)
Warp на 486DX2-66/8мб
… невозможно было просто так поставить :-)

У меня в шкафу лежала «переходящая» планка на 4МБ, втыкали — ставили «полумуху» — урезали и настраивали — вынимали :-)

Или сразу брали 16, ибо если нужен был еще и VisualAge — то ему и 16 было мало, как ни оптимизируй… это если можно было ограничиться Borland C++ — то тогда такие трюки имели смысл.

Кстати, про разработку, под OS/2 было вполне себе неплохо разрабатывать — та-дам — Win16 приложения. Работали нативно, в отличие от Win95 — курсоры-браши-пены не кончались ребутом системы, а параллельно можно было олдскульно в голом деде фиду читать.

Но, когда 16М ОЗУ стали массовым — стало проще переехать на WinNT и нативно разрабатывать уже Win32 приложения. На этом осьдва и закончилась, ее дело было ibm c++ запускать из makefile, ну и smoke test на ней же проводить. И то если разрабатывалось что-то кроссплатформенное и осьдва была в списке приоритетов. От какой-нибудь SCO UnixWare в этом плане она перестала отличаться :-)
Ребята из межделмаша решали вопрос радикально. Кодогенераторы!!! пишешь 10 строк скрипта, в ответ фигак! мегабайт кода на plain C :-)

И не подкопаешься, например — вот код, ему надо в БД сходить. Как? Да прямо в коде пишешь нечто вроде SQL EXEC тут магия, со ссылками на переменные из scope. Называем это — foo.pc. Добавляем три строчки в Makefile. 20 килобайт кода плавно превращаются… плавно превращаются… в элегантные полтора мегабайта!

Теперь осталось каждый поход в БД оформлять отдельным файликом — и вот оно, план выполнен, и даже перевыполнен. Можно идти на митинг, в корпоративный бассейн, снова на митинг, потом в спортзал, а там митинг и обед. После обеда — митинг, корпоративные танцы вокруг кофеварки, митинг, заполнение отчета о проделанной работе в лотусе, составление плана за завтра, и — можно наконец-то поработать :-)

Чуть позже, межделмашевские вообще отказались от кода, и начали рисовать стрелочки в их мегатуле серии VisualAge. Нет файлов — нет строк — нечего измерять :-)
Потому что осьдва стоила раз в пять дороже, банальная терминалка сверху и tcp/ip — хотела еще денег больше, чем вся уиндоусь (это я про Connect), а SDK стоил… вообще что-то неадекватное стоил.

Плюс требования по железу были сильно выше.

Причина такого очевидна — межделмаш хотел рубить бабок с корпоратов, поэтому вкладывался не в подложку, а в свой Works и прикупленный по случаю Lotus. А чтобы окучить клиентов, уже севших за окошки — микрософт по контракту им пилила Win-OS/2.

Жизнь была прекрасна, ожидания чрезмерны…

А рыночек порешал в пользу более дешевых и более удобных предложений.

Кстати, милый штришок. Именно в те времена производительность погромистов в ибеме пытались оценивать по числу наколоченных ими строк кода :-)
4 МБ ОЗУ
Ну запускаться она на этом запускалась, да. Но не работала.
Хехе. Я на такой конфигурации не то что программировать умудрялся, а даже эксель в ворд вставлял через OLE. Тюнить надо было! Главным элементом — убрать воллпапир и заменить его solid color :-)

С процом конечно хотелось бы 486DX25 — он был пошустрее… Ну и с 8М ОЗУ наступало просветление.

А вот NT или OS/2 такой же комфорт давали уже только на Pentium-75, 16М ОЗУ, при тогдашних ценах это было «ой».
Ну учитывая опыт IBM
Вы будете смеяться, но легендарную hpfs386 разработали (и получили на нее патентов!) именно микрософт. Вот такие вот гримасы рынка.

Ну и маленький штришок — hpfs прекрасно поддерживалась WinNT.

Расплевались с межделмашем мелкомягкие несколько позже… и сугубо по дури самих межделмашевцев.
про дискету, потому что у него есть архитектурные основания
причем — вовсе не микрософтовские :-)

В те бородатые времена — форматировали дискеты встроенной 16битной подпрограммой BIOS, которая задержки между командами головкам привода вычисляла через пустые циклы. Вот и прерви такую :-)

Конечно, были и альтернативные «прошивки» типа 800.com, pu1700.com, которые «расширяли» эту «подпрограмму». Отсюда и «однозадачное» форматирование дискет.

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

Поэтому микрософт поступила именно так — да пусть 16битный старый код этим занимается, мы его аккуратненько виртуализуем… а вот в OS/2 или NT — форматирование дискет осуществлялось собственным кодом, работавшим по прерываниям, а не по задержкам. Поэтому никаких вам нестандартных форматов, да и требования к состоянию дискет были куда выше…
Я не пробовал заменять телефон ноутбуком :-)

Мне для своего кода надо было, а штатный эмулятор бесит неимоверно. Можно было конечно использовать реальный телефон — но я как раз с графикой развлекался, на мелком экранчике как-то не очень.

Так что opengapps существует — и хорошо, если понадобится — попробую :-)
Примерно как anbox сейчас делает

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

Правда появились отдельные «выжившие», которые скриптуют установку тех же opengapps… но не только лишь всякий может долйти до этого шага.
Тут еще такой момент, знать != участвовать.

Если гм гм «Грязный Гарри» вместе бухают с «Лаки Люком», а с Люком терки, то странно рассчитывать что Гарри придет на помощь :-)
Увы, но далеко не всю бумажную работу можно делегировать. Но как минимум все бла-бла точно снимались бы, так что — присоединяюсь к вопросу :-)
Ха, это герой у них дохлый был.

Я лично знаю героя, который не только в одно лицо выдал «продукт года» в транс-наци-анальной конторе, но и при этом уволил парочку директоров (включая собственного начальника), пытавшихся успех перехватить. Несмотря на попытку в последний момент слить героя его собственной крышей в виде Senior VP, хехе.

И да, герой добровольно покинул транс-наци-анальную лавку после триумфа, мотивировав под пиво так: «Ну, если они сами хотят в интриги вместо результата, как я могу им помочь?»

:-)

Уже год героя зовут обратно в эту лавку. Нужны новые прорывы, а «по скраму» хорошо только с тикетами и KPI поверх них… Герой смеется, и говорит что как пропозал дотикает до x3 от его прошлой salary с бонусами, он подумает :-) До x2 уже дотикало, шансы есть…
Я бы даже добавил, что в местах где «непонятно, в чем заключается работа» получение однозначно положительного результата действительно можно сравнить с геройством.

Я таких живьем видел.

«Пока мы все нарезали круги вокруг кофеварки и славили гендира, этот отморозок в свитере с оленями что-то там реально сделал. Подвергнем же его остракизму!»

:-)
из этих крутых лавок не выходила бы всякая говнотека ± среднего индусского уровня
Это вещи слабосвязанные.

Можно любого «крутяка» укатать, устрой ему кранчей на пару месяцев нон-стоп, «патамушта-бызнесь-хочет-вчера». И как инженер ни крут, а сидит и херачит по тикетам, с дейли митингами и ретроспективами. И каждый день оправдывается — почему не успевает.

И выбора у него нет — говнокод или говнокод :-)

А бывает еще круче. Бывает что саентисты по скраму должны выдавать прорывные инвеншены по тикетам (сам такое видел, офигел в край и быстро убег). Результат? Зачем?
str.reserve(1024);
...
str += " " + std::to_string(i) + " " + std::to_string(j) + ":";
Визуально хоть пытается выглядеть не ужас-ужасом, не?

Зато сколько тут копирований и вызовов небесплатного и недешевого аллокатора… вроде бы (вроде бы!) мы не должны за это все радостно платить, а по факту — ух!!!

Давайте попробуем удешевить.
str.reserve(1024);
str += " " += std::to_string(i) += " " += std::to_string(j) += ":";
Вот так уже несколько лучше. std::to_string() все еще делает много лишнего, но это уже лучше. Теперь — задумаемся, а в правильном ли порядке идут вычисления, и не добавить ли скобок? А то присваивания идут справа налево…
str.reserve(1024);
(((((str += " ") += std::to_string(i)) += " ") += std::to_string(j)) += ":");
Ну и кто в здравом уме будет так писать?

Не, в Java/C# это решали умные люди, у них компилятор автоматом преобразует строчные плюсики в
str = (new StringBuilder(N)).append(...).append(...).toString();
и это все еще хуже, чем ветхозаветный sprintf(), но значительно лучше чем постоянные аллокации / копирования. Почти полный эквивалент той травы что чуть выше в скобках. Ну и плюс свои накладные расходы несет, на аллокацию объекта и массива у него внутри.

Пайтонисты и дотнетчики пошли еще дальше — и у них в строчках прямо переменные указывать можно, типа такого
str += $" {i} {j}:";
и некоторые даже этим злоупотреблять научились, указывая вместо переменных многоэтажные конструкции :-)

Вы спросите, так а чем не нравится путь комитета? Тем более stringstream завезли, стало чуть проще…
std::stringstream ss;
ss << << str << " " << i << " " << j << ":" ;
str = ss.str();
Вполне же?

Давайте вспомним, как часто и зачем нам надо в коде много форматирования? Вот именно, логи! И что, нам теперь по три строчки каждый раз вставлять, и плодить локальных переменных? Не, конечно можно… но лениво.

Неужели все так плохо?

По счастью, нет. В новейшем стандарте завезли std::format! Господь услышал наши молитвы!

Что делать олдфагам тем, у кого легаси? Нууу, в принципе, можно вот как-то так вывернуться —
#include <memory>
#include <string>
#include <stdexcept>

template<typename ... Args>
std::string string_format( const std::string& format, Args ... args )
{
    size_t size = snprintf( nullptr, 0, format.c_str(), args ... ) + 1; // Extra space for '\0'
    if( size <= 0 ){ throw std::runtime_error( "Error during formatting." ); }
    std::unique_ptr<char[]> buf( new char[ size ] ); 
    snprintf( buf.get(), size, format.c_str(), args ... );
    return std::string( buf.get(), buf.get() + size - 1 ); // We don't want the '\0' inside
}
но тут наш sprintf все еще с нами и у него все те же проблемы несоответствия фактического списка параметров и декларированных спецификаций форматирования. Да и кроме примитивных типов есть еще и структуры-классы, они снова идут мимо.

И зачем я это все вспомнил -\_(o^o)_/-
Выбираешь нужные лего-кирпичики, соединяешь — гарантированно работает. Программист станет, в сущности каменьщиком.
… предрекли в 1960х, когда появились общие библиотеки :-)
Меня бы устроило, если бы этот «эмулятор» работал по типу Wine — имитируя не телефон, а именно андроид как окружение. Примерно как anbox сейчас делает, но чтобы не выполнять инструкцию из 18 пунктов для установки opengapps :-)

А уж ели в каком-то разумном виде заработает хотя бы часть гуглосервисов — то это будет вполне себе победа, запустил полдесятка андроидо-приложений, каждое в своем окошке одновременно — лепота…

И подозреваю, куда-то в эту сторону мы в итоге и придем.
Большинство работающих там людей — таки сами прошли такие же интервью.
… а также они набили «боинг» шариками от пинг-понга и обосновали круглость люков :-)
Вкратце: получаешь незаменимый и нерелевантный опыт.
… и чем древнее изначальная кодовая база — тем больше этого опыта и получаешь :-)
Вот насчет «не нужно» — споры как раз и идут. Оно наверное все еще полезно, уметь в структуры данных, обычно это хэштаблицы-списки-кольца-деревья, графы уже сильно реже. Но это неточно :-)

Шутка в том, что я еще помню, как задача транспонирования матрицы занимала несколько суток, занимая при этом весь объем — нет, не тогдашней оперативы, а тогдашнего жесткого диска! и я тогда самолично изобретал — как это в почти 3 мегабайта кэша воткнуть работу с матрицей, которая сводится к треугольному виду методом Гаусса. Lookahead и вот это вот все, чтобы диск не трещал так жалобно своими головами.

Причем даже не «повысить перформанс», а потому что «в лоб» предыдущий диск за выходные сгорел. :-)

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

Теперь сотни мегабайт воспринимаются как «лабораторная работа», тут вообще нечего делать. Что тут оптимизировать?..

Соответственно в мейнстриме и «тюнинг» структур данных и алгоритмов вокруг них — нет, не исчез! но сильно изменился :-)

Information

Rating
Does not participate
Location
München, Bayern, Германия
Date of birth
Registered
Activity