Вы наверняка помните моменты, когда очень ждали важного сообщения — от друзей, банка, госуслуг или любого другого сервиса, который сегодня стал частью нашей повседневности. Удобство коммуникаций впечатляет, но вместе с этим возник побочный эффект: мы стали зависеть не столько от телефона, сколько от ожидания уведомлений.
И вот наступает тишина. Все сообщения прочитаны, все чаты отвечены. Телефон открываешь по привычке — «а вдруг кто-то написал?». И если ничего нет, возникает лёгкое разочарование: будто мир живёт своей жизнью, а ты в ней на секунду лишний. Лента надоела, новости повторяются — хочется чего-то персонального, адресованного именно тебе. Хочется отмечать, завершать, закрывать непрочитанное.
Так и появилась идея приложения. В один из таких моментов, глядя на пустой список уведомлений, я поймал себя на мысли: если меня это задевает, значит, я не один. Значит, есть и другие люди, чувствующие феномен «Великого завершителя» — внутренней потребности доводить всё до нуля.
Раньше подобные идеи возникали регулярно и так же регулярно забывались. Но теперь у нас есть нейросети — помощники, которые не устают, не выгорают и способны генерировать структуру, код и логику быстрее, чем я успеваю сформулировать мысли. И я решил: а что, если дать этой идее шанс? Что если рассказать нейросети о концепции и позволить ей самой создать приложение?
Пара десятков промптов — и мы уже на одной волне. ChatGPT понял замысел и стал предлагать развитие идеи. Буквально за час у меня были готовы список экранов, наброски интерфейсов, пользовательские сценарии и варианты механик удержания.
Следующим шагом я создал проект в Android Studio, подключил GitHub — и начал передавать задачи GitHub Agent. Конечно, работа заняла не один день, но в свободное время за неделю получился вполне рабочий прототип: десяток экранов, база логики и даже минимальный сервер. Если сравнивать с «досетевым» опытом разработки, такой объём я бы делал пару месяцев, если бы вообще не бросил.
Вдохновлённый, я отправил приложение в RuStore. Но модераторы вернули его: «сыровато и незавершённо». Раньше такая оценка могла бы убить мотивацию. Но нейросеть — не человек, она не выгорает. Я просто вернулся в ChatGPT и спросил: что улучшить?
ИИ предложил геймификацию: опыт, уровни, красивую систему прогресса, атмосферную графику — почти как в Duolingo. Появился герой‑колокольчик, который сражается с уведомлениями, появился рейтинг, новые режимы. Ещё одна итерация работы с GitHub Agent — и приложение стало ощущаться живым.
Иногда, наблюдая, как ИИ реализует задачи, вспоминаю «О дивный новый мир». Кажется, мы действительно движемся к эпохе, где от человека требуется одно — хотеть, а нейросеть делает остальное. Куда это приведёт — отдельный философский вопрос.
А пока я хочу пригласить вас испытать то, что получилось. Возможно, это приложение даст вам лёгкое чувство завершённости — ощущение, что всё прочитано, всё под контролем, всё на своих местах. Иногда именно этого не хватает.
Вместо того, чтобы найти причину, многомиллиардная компания просто добавила функцию, которая отслеживает ОЗУ и перезагружает приложение, когда оно занимает больше 4 ГБ. То есть, вместо решения проблемы, Discord просто использовали принцип «А вы пробовали перезагрузить?».
Из плюсов: айтишники додумались сделать так, чтобы перезагрузка не происходила во время звонка. Discord обещают, что это временное решение, но, как принято говорить, нет ничего более вечного, чем временное.
Есть вопрос ко всем, кто разбирается в разработке, может кто пишет сайты, верстки, работает с HTML+CSS+JS или занимается чем-то похожим?
У меня сейчас есть комплект кода на HTML+CSS+JS, но там полно визуальных багов и, вероятно, полно «мусорного» когда. Хотел бы, чтоб кто-то более опытный глянул и подсказал, где и что можно поправить.
Сразу уточню. Все коды наполнялись, привились, и редактировались через GPT.
Я понимаю только общую структуру и смысл, но писать код не умею:(
В теории могу скинуть ссылку на гит хабе, файлы загружены туда.
Есть одна проблема, которая меня давно волнует. И недавно, читая комментарии к посту о Сэме Альтмане и результатах его усилий, которые привели к росту оперативы в 8 раз, я подумал поделиться с вами этими наблюдениями.
Есть огромный слой молодых людей, которые являются язвой на теле общества. С финансовой точки зрения, конечно, у них есть огромная ценность для экономики. Но для общества, с гуманистической точки зрения - это огромный слой отверженных, "опущенных" - в известном сленге. Они полны злобы.
Мы сегодня поговорим о программистах.
Предпосылки. Что формирует ядро личности такого человека, который становится программистом?
Это не обязательно прямое унижение или бедность. Чаще:
Невидимость в детстве. Ребёнка не видели и не слышали. Его мысли и чувства не имели значения. Вывод, усвоенный подсознательно: «Я сам по себе — ноль. Моя ценность может быть только отражённой — через близость к тем, кто "важен"».
Хаотичная, непредсказуемая среда. Бедность, алкоголизм в семье, эмоциональные качели. Вывод: «Мир — страшное и непредсказуемое место. Спастись можно только заслужив расположение самого сильного хищника в стае или став его частью».
Травма опущенного. Когнитивно развитый, но физически или социально неуспешный подросток. Постоянное унижение от более «сильных» (физически, социально) сверстников. Вывод: «Физическая и социальная сила — зло и тупость. Но есть другая, "высшая" сила — интеллект, технологии, логика. Я примкну к ней».
В результате имеем глубокое чувство собственной незначительности и страх неконтролируемости мира.
Шаг второй - Бегство. Программирование становится идеальным убежищем по нескольким причинам:
Предсказуемость и контроль. Мир кода подчиняется логике. Если x = 5, то он и будет 5. Никакого хаоса, человеческой иррациональности, непредсказуемых эмоций. Это прямая антитеза травматичному хаосу детства.
Чистая меритократия (естественно, это иллюзия). Кажется, что здесь ценят только результат. «Если я напишу хороший код, меня признают». Это лекарство от травмы невидимости. Код — это способ наконец-то заявить о своём существовании в форме, которую нельзя игнорировать.
Монотонность как терапия. Скучные, повторяющиеся задачи (написание типовых API, фиксы багов) — это не проклятие, а спасение. Это медитативное, контролируемое состояние, где не нужно сталкиваться с пугающей сложностью и непредсказуемостью реального мира, человеческих отношений, ответственности за других.
Социальная инкапсуляция. Можно годами работать удалённо, общаясь только через тикеты, код-ревью и корпоративный чат. Это идеально для человека с социальной травмой. Не нужно развивать эмпатию, харизму, навыки переговоров — достаточно решать задачки.
И теперь момент, по какой причине они превращаются в самых токсичных людей которые известны науке:
Ожидание: «Я войду в этот мир чистой логики, стану мастером, и меня наконец-то признают как субъекта, как творца».
Реальность корпоративного мира: Его превращают обратно в объект — в «ресурс», «юнит производительности», «исполнителя тикетов». Его творческий потенциал, за которым он бежал, системно подавляется бизнес-процессами.
Когнитивный диссонанс: Глубинная детская травма («я ноль, я невидим») подтверждается, но уже во взрослой, оплачиваемой форме. Это невыносимо.
Чтобы не сойти с ума от этого подтверждения своей незначимости, психика запускает компенсацию.
Если я — винтик в компании N, а N — "крутой" и "мощный", то и я, как его часть, причастен к этой крутости.
Критика N = критика моей последней надежды на значимость. Поэтому её нужно уничтожить с яростью, пропорциональной глубине собственного страха.
Восхищение "силой" N — это восхищение той самой властью, которой у меня нет (власть принимать решения, влиять, быть замеченным). Это сублимация.
Итоговый портрет:
Это травмированный ребёнок, нашедший в коде иллюзию контроля и значимости. Повзрослев, он обнаруживает, что его снова загнали в клетку, но теперь — с позолоченными прутьями. Его ярость в комментариях — это крик этого ребёнка, который отчаянно защищает единственный знакомый ему способ выживания: примкнуть к сильнейшему и яростно отбивать все атаки на него, потому что падение идола будет для него психической смертью.
Они идут в программирование не столько из-за денег, сколько идут за иллюзией, что наконец смогут контролировать свой мир. А деньги — просто приятный бонус, который позволяет не задавать себе вопросов. Но дыра внутри никуда не девается, и из неё вырывается этот самый токсичный, агрессивный адвокат системы, который на самом деле защищает свою слабость, в нем воет обиженный ребенок, который так и не вырос.
Пару строчек лично для самих программистов - да, нам все видно, и ваши операции по пересадке волос, и глупые попытке хорохориться - это поведение бабы, которая думает что ее ценность определяется внешностью. И нам, и вам было бы гораздо приятнее жить и общаться в интернете, если бы вы стали хоть немного более зрелыми. И никакие компенсации в занятиях борьбой, качалкой, или луксмаксинг в этом не помогут.
Я потратил много времени на освоение знаний и не хочу покидать профессию, которая мне полюбилась(ранее работал в другой сфере).
Стек: Python3(Django/FastAPI), TS(React). Опыт программистом официальный: 2 года Ссылка на гитхаб
Могу работать в офисе в Питере или удалённо. По зп рассмотрю все варианты. Готов к освоению новых языков/технологий.
Если получится найти работу с Вашей помощью, весь следующий год буду направлять 10% своей зарплаты на благотворительность от имени Пикабу, о чём напишу посты с пруфами.
Спасибо!
P.S. Дали понять, что будет лучше описать подробный стек. Названия работодателей не пишу, так как боюсь удаления поста из-за рекламы.
Обязанности: — Полный цикл разработки веб-приложений для клиентов телекоммуникационной компании: от проектирования архитектуры до deployment и поддержки; — Разработка и оптимизация пользовательского интерфейса с использованием React и TypeScript; — Проектирование и реализация REST API и баз данных; — Реализация бизнес-логики на бэкенде, работа с асинхронными задачами через RabbitMQ; — Проведение код-ревью, менторство junior-разработчиков, участие в планировании спринтов;
Обязанности: — Fullstack-разработка приложения складского учета на Django + React — Рефакторинг legacy-кода, улучшение производительности и поддерживаемости системы — Проектирование и реализация нового функционала, участие в архитектурных решениях — Написание unit-тестов, интеграция CI/CD процессов — Оценка сроков выполнения задач и участие в планировании спринтов.
«...Одним из примеров громоздкой и, по мнению авторов, бесполезной надстройки является интегрированная система WINDOWS фирмы Microsoft. Эта система занимает почти 1 Мбайт дисковой памяти и рассчитана на преимущественное использование совместно с устройством типа "мышь".» — вы точно знаете, откуда это
Приветствую всех! Буквально неделю назад прошло сорок лет с момента выхода первой релизной версии Windows. Именно в тот день в 1985 году началась история ныне повсеместно распространённой ОС.
И вот, узнав об этом, я подумал: а что, если попробовать запустить эту ОС и узнать, как предполагалось писать софт для неё? Именно этим мы сейчас и займёмся. Заодно и узнаем, насколько это было проще или сложнее, нежели сейчас.
❯ Суть такова
Уверен, если вы интересуетесь историей ОС, то хорошо знаете, что вообще такое Windows 1.0 и что она собой представляла. Хотя Windows 1.X были не полноценными ОС, а графическими оболочками под DOS, для них существовал SDK, позволяющий писать оконные приложения. Тем не менее, из-за высокой по меркам тех лет сложности разработки самих приложений было не так уж и много. Особой популярности система тоже не заполучила, поскольку имела значительные системные требования и малое количество софта. Очень многие из тех, у кого в те годы был ПК, про этот продукт вообще ни разу не слышали. В общем, это самая подходящая платформа, под которую сейчас стоит попробовать что-то написать. Этим-то мы и займёмся.
❯ Обзор оборудования
Как известно, я пишу про железо, а не только про софт, поэтому запускать то, что получится, будем на настоящем ПК.
Намного более аутентичного для такой системы PC XT у меня нет, поэтому для запуска был вытащен вот такой промышленный одноплатник. Конечно, можно было бы взять и просто плату на 286 или 386, но этот девайс лежал у меня уже больше полугода и всё ждал, когда я сделаю с ним что-то интересное. Так что сейчас будем пробовать с ним.
Это ROCKY-328E-M4. На борту процессор 386SX-40 (точнее, SoC Ali M6117C, объединяющая процессорное ядро и чипсет Ali M1217), четыре мегабайта памяти, IDE, флоппи-контроллер, в данный момент ненужный Ethernet, панелька под DiskOnChip и стандартные для любого ПК интерфейсы. Когда-то давно он работал на одном неназванном предприятии и управлял какими-то устройствами при помощи плат дискретного ввода-вывода и платы последовательных портов. Впрочем, про эти модули поговорим как-нибудь в другой раз, а сейчас будем рассматривать его просто как обычный ПК.
Вообще, такие промышленные ПК — отличный вариант для того, кто хочет заполучить себе ретрокомпьютер, но у кого поставить дома обычную «тройку» или «четвёрку» возможности нет. Эта плата позволит заиметь полноценный 386 без всяких эмуляторов, а места такая машина будет занимать не больше, чем обычный бесперебойник.
Встроенного видео на плате нет, поэтому для запуска понадобится ещё и видеокарта.
Это довольно популярная в своё время плата на чипе Realtek RTG3105i. Особых причин выбрать именно её у меня нет: просто когда-то она досталась мне вместе с этим промПК.
Всё вместе втыкается в кросс-плату.
У меня она вот такая, от Advantech. Конкретно эта сделана под размер обычной материнки типа AT. Даже предусмотрен разъём DIN-5 для клавиатуры с отводом от него для подключения к процессорной карте.
❯ Что нужно, чтобы начать писать софт под Windows 1.X?
Вообще, по опыту работы со старым софтом, я ещё перед началом догадывался, что там наверняка будет куча каких-то косяков, которые не удастся сходу решить. На обычном компьютере всё это делать забавно, но только один раз. Поэтому сборкой самого приложения я занимался в эмуляторе. Итак, определимся с тем, что нам вообще понадобится:
Windows SDK. Тут я решил использовать версию 1.03.
Изначально я хотел использовать SDK 1.01 и Microsoft C 3.0, но...
...во всяком случае, я пытался.
То ли ему чего-то не хватает, то ли устанавливается он не так просто, как мне думалось, но ни одна программа им не собралась. Поэтому выбор был сделан в пользу того, на что имелась документация. Никаких PDF, никакой онлайн-справки в те годы не было, все мануалы были бумажными. Так уж вышло, что на Microsoft C 4.0 и Windows SDK 1.03 их сканы имелись в наличии.
Ну что, приступим?
❯ Эмулятор
Как я уже упомянул, собирать всё будем в эмуляторе. Им стал 86box (пришедший на смену почившему PCem). Как его поставить, описывается тут.
Создал виртуалку с процессором 386SX и чипсетом как у моей платы (дабы, если что, заранее обнаружить, что что-то пошло не так, и это решить).
Далее добавляем винт, а в разделе контроллеров выбираем «PC/AT Floppy Drive Controller» и «[ISA16] PC/AT IDE Controller (Dual-channel)».
В BIOS указываем параметры жёсткого диска. Загружаем в дисковод образ DOS и перезагружаемся.
Далее выполняем стандартные действия для установки DOS: размечаем диск при помощи fdisk, форматируем при помощи format, делаем его загрузочным при помощи sys и копируем остальные файлы. На этом загрузочная дискета нам больше не понадобится. Компьютер теперь будет запускаться с винта.
Процесс установки Windows 1.0 особых сложностей тоже не вызывает, так что показывать его я тут не буду. При установке надо указать следующие параметры: мышь — Microsoft Mouse (Bus/Serial), видеокарта — EGA with Enhanced Color Display or Personal Computer Color Display, принтер — не используется.
Запускаем ОС командой win и убеждаемся, что картинка цветная, мышь шевелится, а стандартные приложения нормально открываются.
❯ Компилятор
Теперь очередь компилятора. Установочной программы у него нет. Поэтому всё придётся копировать самому. На системном диске создаём папки BIN, INCLUDE, TEMP, LIB. В BIN копируем всё содержимое первой дискеты, ещё несколько экзешников со второй и link.exe с третьей, в INCLUDE — всё с расширением *.H и *.INC, в LIB — всё с расширением *.OBJ и *.LIB, TEMP оставляем пустой. В INCLUDE создаём папку SYS и копируем туда содержимое одноимённого каталога на третьем диске. Дискеты 6, 7 и 8 для первого запуска можно пока не трогать.
Казалось бы, на этом всё. Но на самом деле нет, ведь если теперь мы попробуем что-либо собрать, то компилятор выдаст вот такую ошибку.
Поэтому продолжим установку, для чего создадим в корне системного диска ещё два файла.
Первый, AUTOEXEC.BAT, следующего содержания:
PATH C:\WINDOWS;C:\BIN;C:\INCLUDE;C:\LIB SET INCLUDE=C:\INCLUDE SET LIB=C:\LIB SET TMP=C:\TEMP SET TEMP=C:\TEMP
Вообще, в этом батнике указаны команды, которые выполняются автоматически при запуске DOS. В данном случае мы здесь указываем глобальные переменные, чтобы не вводить их каждый раз вручную.
Второй, CONFIG.SYS, вот такой:
FILES=20 BUFFERS=40
Это файл конфигурирования системы. Здесь мы задали число максимально возможных открытых файлов и число максимально возможных дисковых буферов.
Если у вас не чистая установка DOS, то прописываем эти параметры и имена переменных в соответствующих файлах.
После этого тестовая программа (из комплекта компилятора) должна будет собраться и запуститься. Отлично.
❯ SDK
Теперь нужно установить Windows SDK. Поставляется он опять таки на нескольких дискетах.
Вставляем диск номер два и выполняем следующие команды:
Тут всё просто, вставляем очередную дискету и ждём, пока скопируются файлы. На этом установку SDK можно считать законченной.
❯ Ставим Windows
А пока что отвлечёмся от установки инструментария и произведём ещё одну установку Windows.
На этот раз создадим загрузочную дискету с Windows 1.03, установив систему на чистый образ и добавив на оставшееся место DOS. Туда же чуть позже закинем собранные приложения.
Собираем тестовый стенд.
В кросс-плату втыкаем одноплатник и видеокарту, подключаем клавиатуру, мышь, монитор, блок питания и дисковод. В дисковод втыкаем записанную нами дискету. Всё, девайс готов к запуску.
❯ Пишем первую программу
Ну что же, время попробовать что-нибудь собрать. В составе SDK есть и какие-то примеры кода. С них-то и начнём.
Находим папку HELLO и копируем её на жёсткий диск. Теперь заходим в неё и выполняем команду:
make hello
После этого через примерно пару минут приложение должно будет собраться. Если не собралось — проверяем, правильно ли установили компилятор и SDK.
Можно даже попробовать запустить свежесобранный экзешник и убедиться, что приложение действительно требует для работы Windows.
Поэтому заходим в Windows, запускаем, и, если всё получилось, на экране должно будет появиться примерно следующее:
Файл достаточно внушительной длины (больше полутора сотен строк). Тем не менее, там можно встретить много того, что есть и в куда более свежих программах для Windows на Си.
Вообще, первые версии Windows были просто оболочками, не имели никакой многозадачности, а целью их создания было не выпустить полноценную ОС, а облегчить работу с DOS. Несмотря на это, кое-что из появившегося в них либо претерпело значительное развитие и используется и до сих пор (например, GDI, много позже ставший GDI++ и использующийся и сейчас, появился с самых первых сборок Windows), либо ушло в историю, но оставило свой след (например, параметр hPrevInstance, использовавшийся в Win16 и всегда равный NULL в Win32).
Но всё же отличий Win16 от Win32 намного больше, чем может показаться неподготовленному пользователю. В Win32 очень многие операции стали значительно удобнее, а случайно уронить всю систему, запороть память другого приложения или заставить все остальные программы разом перестать работать теперь куда сложнее.
❯ Тесты на ПК
Теперь попробуем запустить тестовый стенд.
Насаживаем перемычку между контактами PS_ON и землёй на кросс-плате, запуская тем самым блок питания. Через несколько секунд компьютер проходит POST и начинает загружаться. Можно набирать WIN и пробовать запускать софт.
Всё успешно работает!
И ещё одно приложение — показ фигуры заданного мышкой размера.
❯ Утилиты
Помимо инструментария для сборки в комплекте с SDK идёт несколько графических приложений. Само собой, никаких интерактивных редакторов кода с ним не поставлялось: для написания программы надо было открыть текстовый редактор, набрать там код, закрыть редактор, попробовать собрать приложение, затем при необходимости снова открыть редактор и исправить ошибки. И так очень много раз. Но всё же несколько интересных утилит тут имеется.
Первая из них — это редактор шрифтов.
Следом идёт редактор иконок.
В Windows 1.0 нет ни рабочего стола, ни панели задач. Единственное место, где видны эти иконки, так это при сворачивании приложения. Снизу видны открытые HELLO.EXE, MS-DOS Executive и калькулятор.
Вот так выглядит процесс редактирования.
И, наконец, самое важное. Это редактор диалогов.
Весь интерфейс программы создаётся в нём и сохраняется в виде двух файлов — ресурсов и заголовков.
❯ Что же в итоге?
Несмотря на то, что программирование под Win16 по сути умерло, некоторые порой всё же пробуют что-то написать. Кому-то это надо из любви к ретрокомпьютерам, кому-то — ради того, чтобы оживить какой-то древний, но очень нужный и приносящий очень много денег софт. Но всё же если вдруг вас так и тянет попробовать что-то написать под древнюю ОС, то рекомендую начать опыты с Windows 95 или 98. Под них куда больше документации и примеров кода, а инструментарий намного более удобен. Такие дела.