ZeroNet Blogs

Static ZeroNet blogs mirror

By David Berlind

October 16, 2001

From time to time, I'll perform a transaction or some other process at a Web site when whatever I'm doing suddenly comes to a screaming halt -- just crashes, with a message in my browser telling me what line of code bombed and maybe even displaying the errant source code. Once, this happened just after I supplied my credit card information. I quickly shut down the process and called the merchant. But I was never 100% confident that a screw up didn't really happen, and checked my credit card statements for several months before I was reasonably certain that the charge wouldn't appear.

The problems I've had were a little scary and a lot annoying, but mostly I viewed them as signs of the immaturity in the programming code of many sites. But there was a common theme to each of my episodes. The programming language was always VBScript, the language used to code Active Server Pages on Microsoft's Internet Information Server. When I had the time, I'd take a screen shot and send it to the operators of the problematic site.


Until a few days ago, I didn't give it much thought. But then a Tech Update reader, who shall remain anonymous, showed me the "error message" that he was issued after attempting to sign on to the Certified Partners area of Microsoft.com. For resellers of Microsoft products, the Certified Partners area is one of those Web sites that Microsoft has "gated" with Passport. By requiring a Passport before resellers can enter, Microsoft turned all of its resellers into Passport holders. Conspiracy theorists will argue that this is yet another play that Microsoft has used to inflate the number of Passport holders (the current claim is 165 million and rising).

The error message received by the reader (shown here is reminiscent of the VBScript dumps I used to see on those malfunctioning Web sites. At first, the error message seemed harmless enough. It indicates that there was a compilation error because of an undeclared variable and shows the offending line of code plus the two lines before and after. But there's also a link labeled "Show Complete Compilation Source." Being naturally curious, I clicked the link -- and the details of the error message were far more revealing. As you can see from the source code that was revealed, the VBScript provides detailed information about the names and addresses of Microsoft's Web and database servers, as well as complete user id and password information; all of it in clear text; in particular, see lines 444, 454, 464, 474, 483, 492, 502, 512, 521, and 574.

Now, I don't consider myself a VBScript programmer. But I do know enough to know that any time a Web site spits out a bunch of resource names, user ids, and passwords at the user, that it's a bad thing.

To confirm, I contacted a friend who dreams in VBScript to get his opinion of the code. My expert friend said, "The site that generated the error is being built using the beta version of Visual Studio 7.0. The programmers have also enabled detailed error dumps. The only code that I see that relates to Passport is for the purpose of checking whether the user currently has a valid session. The database information is for the local site's databases. The information includes the database server name, database names, username, and password for accessing the data."

My friend went on to say, "Although I wouldn't want somebody outside my organization to have this information, chances are that the database server is on a private network or behind a firewall so an outside user could not even have the chance to log on. However if someone were to use a Trojan horse program they could then place an ASPX page [on that server] to access the protected data since the Web server already has access to the database server. Again, I would hope that all the security patches would be up to date on any server that faces the outside world."

My immediate reaction to that is to ask: Sort of like the way that Microsoft patched it's Hotmail servers? As we all know by now, Microsoft failed to patch some of its Hotmail servers and the Code Red worm forced Microsoft to take them offline. And the second question that popped into my mind was, Is Microsoft really building production Web sites with beta versions of its development tools? I understand the need to stress test its own products, but building production systems with beta tools isn't exactly the sort of practice that breeds confidence. (Although some Microsoft detractors would argue that all Microsoft software, shipping or not, is beta.)

Saying "If I can load hostile code onto a system, then I own that system," Microsoft security spokesperson Christopher Budd doesn't dispute that damage than can be done once hostile code (ASPX-based or otherwise) is loaded onto a server. That much, I'll give him. If hostile code successfully penetrates any software or operating system (Windows, Linux, Unix, or otherwise), that code owns the system. The problem is not unique to Microsoft, although it's worth noting that its products are more frequently targeted than others. But what about when user ids and passwords are revealed in the same way they were revealed here? Doesn't that make the bad guy's job easier? Budd says no, claiming that when hostile code is loaded on the system, it's no easier to target a particular server or database when this information is revealed, than when it's not. I'm not convinced. Perhaps it's only a matter of time before someone who controls hostile code can find the same information that was revealed by this error message. But, as far as I'm concerned the less the bad guy knows, the better.

Fortunately, the Passport databases were not compromised. In terms of this incident, Budd emphasized that "This was not a Passport-related issue. What was exposed was ASP Plus code for a specific application and no database content or user profile information was exposed." While the databases in question may be protected by firewalls and may not contain any sensitive information, the issue of Microsoft eating its own dog food, and doing so with beta product still remains. According to Budd, the beta version of Visual Studio was indeed used. "But," says Budd, "[the usage of beta development tools for production systems] really depends on system being developed. Microsoft has been very forthcoming about using its own stuff, including beta product for production systems but not all systems. Only where it makes sense."

According to my friendly VBScript guru, "Basically, this is a major goof up on the programmers' part. I know Microsoft encourages the individual groups to work with beta products but a programmer shouldn't enable programming debug information to show up on a production site." Responding to questions regarding Microsoft's best practices, Microsoft spokesperson Jim Desler said "We're still investigating the incident, but the early indication is that someone left the page in a debugging mode. This is counter to the processes and procedures that Microsoft has in place. It was an operational error. Obviously we will review how this happened, why this happened, and based on what we learn, we will develop procedures from preventing this from happening again."

Desler and Budd realize that Microsoft is the poster child for its own technologies and that incidents such as these can undermine confidence in the company and its products. According to Desler, "We can't just be as good as others. The standard is higher for us. We have to be better than others." To that extent, Budd identified many of the broader initiatives that Microsoft is taking to buttress its products and customer installations that depend on them. Budd cites Microsoft's Secure Windows Initiative, announced in April at one of RSA's conferences, and more recently the announcement of a toolset to help server administrators be more proactive about the security of their servers.

The security issue appears to be a top priority for Microsoft. But, now the company is battling against the clock. Microsoft is staking a large part of its future on .NET, and in particular, the authentication aspect of it that is based on its own Passport technology. Meanwhile, Sun is pushing a competing authentication solution that will be delivered by the Liberty Alliance.

As I point out in another column, if an authentication standard doesn't emerge, the battle between Microsoft and the Liberty Alliance to be the premier provider of authentication services will be won on trust. If Microsoft continues to call its best practices into question with one goof after another (unpatched servers, using beta product to develop production servers, spitting out error messages with user ids and passwords), it will need to do some Herculean fence mending before it should earn your or your customers' trust.

What do you think? Share your thoughts with your fellow readers at ZDNet TechUpdate's Talkback, or write directly to david.berlind@cnet.com.

Got a great tip? An industry rumor? Or do you want to submit your own column to ZDNet TechUpdate? Send David your submission, and if we use it, you'll be compensated with some of the cool vendor schwag that arrives in our mailboxes on a daily basis.

David Berlind is Editorial Director of ZDNet's Tech Update.

В одном из компьютеров разбивал диск на разделы еще под grub 1-й версии, который не умел работать с LVM. Из-за этого /boot всех линуксов пришлось вынести на отдельный раздел вне LVM. Получился такой усложненный конфиг:

    sda1 — boot <- тут grub, который грузится через бутсектор
    sda2 — linuxboot <- тут ядра линукса
    sda3 — LVM:
        archlinux
        voidlinux
        debian

Монтировался /boot в каждой системе примерно так:

/dev/disk/by-label/linuxboot      /mountpoints/linuxboot       ext4         defaults,noatime                 0      1
/mountpoints/linuxboot/voidlinux  /boot                        none         defaults,bind                    0      0

Давно мигрировал на grub2, но сейчас наконец-то дошли руки переделать загрузку.


Вернул ядро системы на корневой раздел:

mount -o bind / /tmp/tmp_root/
rsync -aHAX /boot/ /tmp/tmp_root/boot/
umount /boot/

Перегенерировал grub для корня:

grub-install -v --no-bootsector --target i386-pc /dev/mapper/sm-sm_voidlinux
  • --no-bootsector — чтобы grub не пытался свой бутсектор никуда установить. Он не BIOS-ом у нас будет грузиться.
  • --target i386-pc — просто на всякий случай, чтобы с UEFI не попутал.
  • /dev/mapper/sm-sm_voidlinux — самое главное. Grub должен увидеть, что он на LVM, и сгенерировать core.img, пригодный для старта с LVM.

Теперь основная магия. Открываем конфиг того grub, который у нас живёт на загрузочном разделе и пишем:

insmod lvm

menuentry "Voidlinux" {
    multiboot (lvm/sm-sm_voidlinux)/boot/grub/i386-pc/core.img
}

Получается следующая последовательность загрузки: * BIOS грузит бутсектор. * Бутсектор грузит grub с sda1. * Grub читает конфиг и показывает меню. * Когда мы выбираем пункт Voidlinux, grub по протоколу multiboot грузит другой grub из образа core.img. * Этот второй grub показывает нам меню, сгенерированное конкретной операционной системой. (Разные ядра, загрузка в fallback-режиме и т.п.)

Так можно установить и грузить любое количество Linux-ов внутри LVM без плясок с бубном.

По случаю тут вспомнилось. Тесты «мат-фильтра» пришлось сразу пополнить «словами-исключениями». А то, типа, как на известном военном авиафоруме долгое время слово «истребитель» писалось со звёздочккми: «истр*тель». Военная авиация! :D Но со временем стали попадаться более редкие и изысканные обороты, требующие пополнения матфильтра с обоих сторон. «Разрешённые» слова из юнит-теста привожу тут для прикола :)

    static function __unit_test($test)
    {
        // Список нормальных слов с выглядещами обсценно подстроками.
        $allowed = ['ансамбля Джебат дебаты колебания колебать колебаться постебаться дебилов учёба'];
        $allowed[] = 'Усугубляясь истребители застрахуйте рубля Хулиганы потребляет потреблять тихую психуют психующим';
        $allowed[] = 'оскорблять уподобляться Усугубляясь Олеговна плохую лихую употребляющих сухую глухую';
        $allowed[] = 'хребтами Глеб Глеба небу сабля гребля корабля лапидарий скипидар туебень залужью';
        $allowed[] = 'абляция'; // В начале строки!
        $allowed[] = 'аббляционного веба потребляемого стеблями констебля';
        $allowed[] = 'небу ещёб ещеб нёбу хлебом Пиебалгс деблокировать хлебнуло хулит';
        $allowed[] = 'ибупрофен Ибашники';
        $allowed[] = 'хребтом хребтами хребту сердцебиение досудебную колеблется беби мразеблоггерша';
        $allowed[] = 'дирижабля дубля волшебную внеблоковый пищеблоку хребта ассеблеров';
        $allowed[] = 'заштрихуйте Хулиан Хулио потребную Хулимсунт'; // Хулимсунт — посёлок такой.
        $allowed[] = 'хулахуп ибо хулению служебную Себу'; // Себу — провинция на Филиппинах.

// ...

Notes Update Log

- Posted in BinChan's ZeroNotes by with comments

01/06/18 ZeroNet General Dark Theme Ver. 2 works for Firefox > 57 now! Find it in the Edit section.

14/03/18 Local ZeroMail Bot add security suggestion in FAQ 1: remove subject, body (or even send_from) to avoid storing ZeroMail in plaintext.

24/01/18 Setup A Clearnet Proxy for ZeroNet add Edit 1: more secure way to start ZeroNet server for clearnet thanks to Lxpz's config.

30/12/17 My ZeroBlog Goes Dark Now add Edit 1: now I also provide an option to view my blog in white theme, simply click the link in left panel for it.

13/12/17 Add Experimental History Diff to the Current ZeroWiki add ZeroHello feed query code and screenshot. A Dark Theme for ZeroNet add json format of the style and new method to install and update the dark theme.

10/12/17 Some Experience with Pebble Time Recently add Edit 2: List of highest funded crowdfunding projects from Wikipedia.

15/11/17 Updated ZeroBlog with Tag Index and Mobile Support source code is now available on Git Center.

11/11/17 ZeroMessage: ZeroChat as a Widget for Any Zite! improve code for better compatibility again and easier installation (still a little buggy for ZeroBlog, etc), also now you can check my messy repo on Git Center for the changes.

29/10/17 The Ultimate ZeroNet Mobile Guide add alert for ZeroNet-kivy Android app.

09/10/17 Some Experiments about ZeroHello Feed add PS1, I can receive feed from ZeroMail now, but meaningless.


25/09/17 Some Experiments about ZeroHello Feed add an example to follow new ZeroNet-related topics on ZeroTalk.

25/09/17 Tutorial: How to Fetch Twitter Profile and Read it Offline add two tips to handle progress hanging problem.

23/09/17 A Dark Theme For ZeroNet add privacy alert for Chrome version of Stylish plugin.

20/09/17 ZeroMessage: ZeroChat as a Widget for Any Zite! improve code for better compatibility (still buggy for ZeroBlog, afaik code related to siteinfo is in conflict with ZeroBlog, have no solution yet), add PS2 (Follow button and how to only follow username mention).

01/08/17 A Dark Theme For ZeroNet fix ZeroHello, Independent Scroll for Panel in ZeroHello is also fixed for new ZeroHello. The Ultimate ZeroNet Mobile Guide remove ZeroHello from ZeroNet mobile userscript :>

24/07/17 The Ultimate ZeroNet Mobile Guide change Note 1 to a harmless method, also add more explanation to browser recommendation.

19/07/17 Independent Scroll for Panel in ZeroHello fix a bug that feedlist keeps autoloading, but also the right topbar and searchbar are not pinned anymore.

12/07/17 ZeroMessage: ZeroChat as a Widget for Any+Zite! add PS1, extra step for zite that already has dbschema.json.

23/06/17 Playing Jekyll ~ add "a phote gallery zite by Jekyll"

09/06/17 Language Sorting for ZeroTalk adds PS (dream tool to sort languages).

30/05/17 Language Sorting for ZeroTalk adds Point 4.

17/05/17 Check if a zite connects to clearnet adds PS2 (relative info and link)

08/05/17 ZeroMe Feed Bot adds summary limited to 300 characters.

28/04/17 ZeroMe Feed Bot adds troubleshooting for a bug that the script sometimes hangs up.

27/04/17 A Dark Theme For ZeroNet changes code host.

23/04/17 ZeroMe Feed Bot step 2 and step 5 add PS (One-line command and another way to repeat command).

17/02/17 Profile changed to "Messy Notes about using Zeronet and other things", so this ~~blog~~ notebook will also cover some other things, mainly some gnu/linux tweaks I guess.

15/02/17 Userscript to filter users on ZeroMe adds PS4.

03/02/17 Userscript to filter users on ZeroMe improves the script and adds PS3.

01/02/17 ZeroNet+on+a+Raspberry+Pi+2 adds PS (solution) to Try to add --ui_restrict argument, but failed, log said "too few arguments." and to "Other issues".

01/02/17 Userscript to filter 'Hello ZeroMe!' posts on ZeroMe adds PS, the feature is officially supported now.

06/01/17 A Dark Theme For ZeroNet adds two screenshots

22/12/16 ZeroNet+on+a+Raspberry+Pi+2 adds solution to ZeroMail always has one file that updates failed.

~~PS: I change the date of this note to 2022 :3 I guess it can pin on the top for a while ~~~ (tip: remove timestamp and save it to renew date)

Бабченко

- Posted in Tanzpol.Org/Blog by with comments

Надо отметить, что на Западе его «смерть» прошла почти незамеченной. На двух из трёх американских форумов, что я периодически почитываю, про Бабченко ни слова не было. На одном была короткая тема на 2-3 сообщения, при чём без обвинений России, вполне нейтрально. Максимум:

После написания о разбившемся российском военном самолете в 2016 году, г-н Бабченко сказал, что он получил угрозы смерти и покинул свою родину.

Сначала он переехал в Прагу, а затем в столицу Украины. Он был откровенным критиком Кремля.

Бывший военный корреспондент, он работал в Киеве в качестве ведущего на украинском канале ATR TV.

Вот после «воскрешения» постов было больше :)

Это наверняка сбило с толку многих людей, но на самом деле, это очень умно, если вы думаете об этом. Если они немедленно арестовали парня, который приказал убийство поддельному убийце, у них было бы меньше доказательств, чем сейчас.

...

Путин опять забивает гол.

...

Почему это происходит прямо перед кубком мира в России?


А, вообще, он сейчас круто в информационном плане поднимется. Сторонников будет больше. А прежние сторонники стали относиться ещё лучше (сужу по комментам).

Эта история — фантастический пиар для него. Его уже почти забыли, а сейчас снова будет на слуху.

Скрипт из командной строки принимает имя файла или ссылку на файл, если нужно, делает превью 800x, кладёт всё в IPFS и даёт Markdown-код итоговой картинки.

Пример:

┌─( ✔ 11:36:07 +00:00:07.498):~/Изображения/Export/экспорт-1511-4
└balancer@home-server─> ipfs-add-md 20140519-1729-img_8955.jpg
[![](https://gateway.ipfs.io/ipfs/QmezLi4DX7z5wYGP1VWUiamJFcdGiraHLvVKL4fNPFAoif/20140519-1729-img_8955-800x.jpg)](https://gateway.ipfs.io/ipfs/QmbhCfcffn5Ub8SBcA6Te8sPrbqFHZaEn5bXgxabECnYLb/20140519-1729-img_8955.jpg)

Результат:


#!/bin/bash

SWARM=`ipfs swarm peers`
#GATE=https://gw-ipfs.tk/ipfs
GATE=https://gateway.ipfs.io/ipfs

if [[ ! $SWARM ]]; then
        echo "IPFS not running"
        exit
fi

if [[ "$1" =~ ^https?: ]]; then
    BASE=$(basename "$1")
    EXT="${BASE##*.}"
    FILE=$(tempfile --suffix=.$EXT)
    wget -q "$1" -O "$FILE"
    UNLINK=1
else
    FILE="$1"
    UNLINK=0
fi

BASENAME=`basename "$FILE"`

ID=$(ipfs add -qw "$FILE" | tail -n1)

WIDTH=`identify -format %W "$FILE"`
ID=$(ipfs add -qw "$FILE" | tail -n1)

if [[ "$ID" != "" ]]; then
        echo $ID > /var/sync/Infonesy/Infonesy-balancer-commands/pin-add-$ID
fi

if [[ $WIDTH -gt 800 ]]; then
        THUMB="$(echo "$FILE" | sed -re 's/(\.[a-z]+)$/-800x\1/i')"

        if [[ "$THUMB" == "$FILE" ]]; then
                echo Can not get thumbnail name for $FILE
                exit
        fi

        convert "$FILE" -geometry 800x "$THUMB"

        THUMB_ID=$(ipfs add -qw "$THUMB" | tail -n1)

        echo "[![]($GATE/${THUMB_ID}/`basename "$THUMB"`)]($GATE/${ID}/${BASENAME})"

        if [[ "$THUMB_ID" != "" ]]; then
                echo $THUMB_ID > /var/sync/Infonesy/Infonesy-balancer-commands/pin-add-$THUMB_ID
        fi

        unlink "$THUMB"
else
        echo "![]($GATE/${ID}/${BASENAME})"
fi

if [[ "$UNLINK" == "1" ]]; then
    unlink "$FILE"
fi

Дело было в 1993-м, кажется, году. Уезжая на лето по домам из общежития комнату тогда требовалось сдавать. Вещи личные обычно оставляли в камере хранения общежития (просто отдельная выделенная складская комната), но многие оставляли их по друзьям, которые лето проводили в общаге. И был среди нас знакомый К с ИХТ-факультета. Он уезжал, а я оставался. Товарищ сбагрил мне среди прочего хлама отличную электроплитку. Дело в том, что у меня была типичная такая советская закрытая электроплитка, ватт на 600, которая едва грела. Чайник кипятила, наверное, полчаса. Жарить на ней было — мучение. Выглядела она примерно так:

294722214_2_1000x700_elektroplitka-sssr-zarya-novaya-fotografii.jpg (933x700)

У товарища же был прекрасный экземпляр со спиралью (хоть и закрытой тоже) в виде трубчатого элемента, которая сильно раскалялась и на которой всё закипало просто мгновенно:


1_9_33807867.jpg (1920x1080)

В первый же день после его отъезда, я решил эту плитку испытать в вопросе зажаривания куриной ноги.

Задумано - сделано. Плитка включена, на плитку — сковородку, туда масло, кинута куриная ножка... Обнаружилось отсутствие соли. Я пошёл за солью на этаж вверх к Стасу, который тоже оставался на лето. Взял соль, возвращаюсь…

Чувствую ещё на подходе к моему коридору вонь горелого жира. В самом коридоре - заметный дым. Открываю дверь — там гарь столбом... Картина маслом!

На полу стоит плитка, с раскалённым до ярко-жёлтого каления нагревательным элементом. На ней шипит сковорода. С периодичностью секунд в 5 крышка сковороды подкидывается вскипевшим маслом, вырывается огромный клуб масляного пара, который тут же взрывается при контакте с раскалённой плиткой. Крышка падает, цикл повторяется. ШшШшшШшшШшш-ПУХ!-шшШшшШшшШшш-ПУХ!...

Курица оказалась с одного бока обугленная до состояния угля, а с другого - сырая. Нищему студенту в 1990-е не престало привередничать, так что несколько волокон съедобного мяса я оттуда выковырнул, но больше этой плиткой с целью жарки не пользовался :D И, да, вопреки фотографии, та плитка — не регулировалась по степени нагрева :)

I set up a personal clearnet proxy last year, but I didn't post my personal tweak at that time. Now I post it here:

I don't use the multi-user plugin, instead I add password protection in the nginx site config:

server {
    server_name zeronet.mydomain.tld;

    location / {
        auth_basic "Restricted Content";
        auth_basic_user_file /etc/nginx/.htpasswd;
        ...

And here is the tutorial I used: How To Set Up Password Authentication with Nginx on Ubuntu 14.04

So only I can access ZeroHello of my clearnet proxy. But I also want to share some specific zites to normal visitors, and here is my tweak:


server {
        ...
    location /uimedia {
        proxy_pass <https://www.zerogate.tk/uimedia;>
        proxy_set_header Host $host; #get rid of media referrer error
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    location /favicon.ico {
        proxy_pass <https://www.zerogate.tk/favicon.ico;>
        proxy_set_header Host $host; #get rid of media referrer error
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    location /0gallery.bit {
        proxy_pass <https://www.zerogate.tk/0gallery.bit;>
        proxy_set_header Host $host; #get rid of media referrer error
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    location /1EiMAqhd6sMjPG2tznkkGXxhdwFBDdeqT9 {
        proxy_pass <https://www.zerogate.tk/1EiMAqhd6sMjPG2tznkkGXxhdwFBDdeqT9;>
        proxy_set_header Host $host; #get rid of media referrer error
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    location /myblog {
        proxy_pass <https://www.zerogate.tk/1EiMAqhd6sMjPG2tznkkGXxhdwFBDdeqT9;>
        proxy_set_header Host $host; #get rid of media referrer error
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
        ...

uimedia and favicon.ico are necessary for all zites, and with the settings above, a visitor can visit 0-Gallery by https://zeronet.mydomain.tld/0gallery.bit, and this blog by https://zeronet.mydomain.tld/myblog.

I don't know if my setting is secure enough, but there is a big issue.. a visitor can access the config panel ><

For a zite created on my proxy, if I share it in this way, any visitor can edit it, also change zite info and sign the zite in the config panel.. but can't delete the zite. For a zite just shared on my proxy, any visitor can't sign the zite, but can change parameters like storage limit, optional file storage limit, and.. delete the zite and all its content X( But another visitor can add it back (except optional files) XD

На дворе 22 октября 1998 года.

____________.jpg (1200x801)

День рождения. Мне исполнилось 25 лет :) Типичное для тех времён проведение мероприятия и типичный стол. Приготовлением блюд, в том числе рубанием салата, занимался сам :D

Вот эту историю точно пару раз где-то расписывал, но сейчас всё перерыл — не нашёл :-/ Одна из вещей, зачем нужен этот блог :)

Чем позже что-то вспоминаешь, тем выше вероятность ошибиться с датами. Но было это дело на «Поиске» (советском аналоге PC XT), а его родители Стасу купили то ли в конце второго, то ли начале третьего курса. Значит, где-то 1991—1992гг.

Опуская воду — повадился у нас в общаге люд играть у Стаса на компе. Играть много, плотно, сменяя друг друга круглые сутки. А Стасу и поучиться иногда надо, и поиграть тоже хочется. А человек он мягкий, просто выгнать и запереть дверь не может. Он даже как-то периодами мне комп отдавал (мы в разных комнатах жили), когда надо было навёрстывать упущенное в обучении. К нему тогда никто не ломится. А я все выгоню, скажу, «мне самому надо» и давай программировать или играть :)

Словом, мучился он мучился и кому-то из нас в голову пришла светлая мысль.


Я написал небольшой резидент, который проверяет статус NumLock. Если он включен (а его такой статус был в BIOS нами по дефолту прописан), то через несколько случайных минут комп зависает. Выключен — ничего не делается. То есть пока сам сидишь, во время загрузки компа NumLock выключаешь и работаешь спокойно. А кто не знает, тот этот момент упускает и комп скоро виснет. Так позависает народ в играх, позависает, да удручённо и уйдёт восвояси. А комп — свободен.

Но вскоре (и недели не прошло) как-то сидит у Стаса и сидит часами, то ли Серёга П., то ли Андреич… Играет целый день, хоть бы что. Мы в недоумении, может, резидент заглючил, или ещё чего — при нём же не проверишь :) К вечеру приходит ещё народ играть. Кто-то начинает комп перезагружать, а тот, целый день игравший, ещё и поясняет — «стой, надо NumLock выключить! А то комп почему-то с ним постоянно виснет!». Приплыли :) Пытливый разум обнаружил эмпирически условие работоспособности компа :D

soviet_pk_3_16_b.jpg (742x1000)

Вот так наш «Поиск» почти выглядел. И монитор такой же, из цветного ТВ, и блоки расширения. Только что дисковод был сдвоенный и ещё HDD на 20Мбайт был :)