From
Konstantin Lebedev
→
To
All
27 October 2002
Hello! How's life, *All?*
whoever has the subject is interested in 7.3.
_*Sayonara,_All-san!*_
_ICQ:152424275_ _/NGE/_ _EoE_ *GUKiT* *Japan* _Hayashibara_ _/Hamasaki/_ _ZX_
From
Kirill Frolov
→
To
Aleksandr Majorov
23 June 2003
Press RESET immediately, Aleksandr Majorov!
On Sun, 22 Jun 03 10:38:08 +0400, Aleksandr Majorov wrote:
AM>>> This means there was a synchronization problem from the very beginning.
KF>> Process synchronization? Of course there was, but it was not so acute
KF>> as you might think.
AM> If there is multitasking, then there is a problem
AM> inter-task/inter-thread communication. This means that it is required
AM> synchronization.
...but it was not as sharp as one might think. There would be a problem
there would be a solution. Smart thoughts are generated not only at Microsoft.
KF>>>> There have been no streams in Unix for a long time. IPC appeared only
KF>>>> in SYSV, and before that there were pipes/files and that’s all.
AM>>> So there is no need to synchronize processes?
KF>> There are few such processes. Most processes perform their tasks completely
KF>> a specific task and does not need synchronization
AM> I wouldn't say that.
We take twenty programs almost at random from /usr/bin:
$ (for f in `ls -1S /usr/bin | head -100` ; do apropos $f | grep "^$f " ;
done) | tee /tmp/a
pfaedit (1) - create and modify PostScript fontsddd (1) - The Data Display Debugger
gimp-1.2 (1) - an image manipulation and paint program.
gs-gnu (1) - Ghostscript (PostScript and PDF language interpreter and
previewer)
gdb (1) - The GNU Debugger
gnumeric (1) - a GNOME spreadsheet application.
snd (1) - a sound editor
dosemu.bin (1) - run DOS and DOS programs under Linux
sfddiff (1) - compare or merge two of pfaedit's sfd font files
BitchX (1) - an advanced Internet Relay Chat client
golded (1) - offline message reader for Fidonet and Usenet
vim (1) - Vi IMproved, a programmers text editor
lynx (1) - a general purpose distributed information browser for
the World Wide Web
Ted (1) - an easy rich text editor
xfig (1) - Facility for Interactive Generation of figures under X11
aide (1) - Advanced Intrusion Detection Environment
nt (1) - A download manager for X
python2.2 (1) - an interpreted, interactive, object-oriented programming
language
mc (1) - Visual shell for Unix-like systems.
perl (1) - Practical Extraction and Report Language
pdfetex (1) - PDF output from e-TeX
oxdvi.real (1) - DVI Previewer for the X Window System
xdvi.real (1) - DVI Previewer for the X Window System
gnuplot (1) - an interactive plotting program
pdftex (1) - PDF output from TeX
xpdf (1) - Portable Document Format (PDF) file viewer for X
(version 1.00)
gpg (1) - encryption and signing tool
mutt (1) - The Mutt Mail User Agent
python2.1 (1) - an interpreted, interactive, object-oriented programming
language
i586-mingw32msvc-ld (1) - Using LD, the GNU linker
i586-mingw32msvc-objdump (1) - display information from object files.
cvs (1) - Concurrent Versions System
cvs (8) [cvsconfig] - The GNU Concurrent Versions System
pdftopbm (1) - Portable Document Format (PDF) to Portable Bitmap (PBM)
converter (version 1.00)
i586-mingw32msvc-as (1) - the portable GNU assembler.
tin (1) - A Usenet newsreader
pdftops (1) - Portable Document Format (PDF) to PostScript converter
(version 1.00)
ppmtompeg (1) - encodes MPEG-1 bitstreams
lftp (1) - Sophisticated file transfer program
i586-mingw32msvc-objcopy (1) - copy and translate object files
i586-mingw32msvc-strip (1) - Discard symbols from object files.
sl2h (1) - simple latex to HTML converter
pdftotext (1) - Portable Document Format (PDF) to text converter
(version 1.00)
pdfimages (1) - Portable Document Format (PDF) image extractor (version
1.00)
pdfinfo (1) - Portable Document Format (PDF) document information
extractor (version 1.00)
pdffonts (1) - Portable Document Format (PDF) font analyzer (version
1.00)
tkman (1) - an advanced graphical information pages browser
omega (1) - extended unicode TeX
dot (1) - preprocessor for drawing directed graphs
xmbdfed (1) - Motif-based BDF font editor
octave-2.1.35 (1) - A high-level interactive language for numerical
computations.
glimpse (1) - search quickly through entire file systems
glimpse 4.1 (1) [glimpse] - search quickly through entire file systems
glimpseserver (1) - a server version of the glimpse searching package.
glimpseserver 4.1 (1) [glimpseserver] - a server version of the glimpse
searching package.
sln (1) - Statically linked emergency recovery tool
i586-mingw32msvc-windres (1) - manipulate Windows resources.
i586-mingw32msvc-dlltool (1) - Create files needed to build and use DLLs.
mkisofs (8) - create an hybrid ISO9660/JOLIET/HFS filesystem with
optional Rock Ridge attributes.
elvis (1) - a clone of the ex/vi text editor
fvwm2 (1) - (unknown)
slrn (1) - An easy to use NNTP / spool based newsreader.
troff (1) - format documents
i586-mingw32msvc-nm (1) - list symbols from object files
gimv (1) - program to view Image files
i586-mingw32msvc-addr2line (1) - convert addresses into file names and line
numbers.
glimpseindex (1) - index whole file systems to be searched by glimpse
glimpseindex 4.1 (1) [glimpseindex] - index whole file systems to be searched
by glimpse
neato (1) - preprocessor for drawing undirected graphs
nex (1) - text editors
nvi (1) - text editors
nview (1) - text editors
figurine (1) - an interactive vector drawing program
iconx (1) - interpret or compile Icon programs
fig2dev (1) - translates Fig code to various graphics languages
i586-mingw32msvc-ar (1) - create, modify, and extract from archives
i586-mingw32msvc-ranlib (1) - generate index to archive.
gtkgraph (1) - an interactive function plotter and graphical calculator
twopi (1) - preprocessor for circular layouts of graphs
localedef (1) - compile locale definition files
update-menus (1) - generate Debian menu system
i586-mingw32msvc-strings (1) - print the strings of printable characters in
files.
i586-mingw32msvc-size (1) - list section sizes and total size.
plan (1) - interactive X/Motif calendar and day planner
gpgv (1) - signature verification tool
etex (1) - extended TeX
ld (1) - Using LD, the GNU linker
apt-ftparchive (1) - Utility to generate index files
nmap (1) - Network exploration tool and security scanner
nasm (1) - the Netwide Assembler - portable 80x86 assembler
ssh (1) - OpenSSH SSH client (remote login program)
sox (1) - Sound eXchange : universal sound sample translator
xscreensaver (1) - graphics hack and screen locker, launched when the user
is idle
lefty (1) - A Programmable Graphics Editor
Try to leave from this list those programs that would really
synchronization with other processes was required... Why does the filter need
synchronization, or text editor? Or does the assembler need it?
There are programs that really require more powerful IPC tools
than pipes, but this is a drop in the bucket.
$ wc -l /tmp/a
97 /tmp/a
$ (xargs ldd | grep thread | wc -l) < /tmp/a
9
Only nine of these nearly hundred programs use threads.
In the sample of other 500 programs, only 6 used threads.
KF>> (why actually synchronize if there are no such IPCs?)
AM> For example, writing multiple data streams to one file or output
AM> graphs.
Output of graphics from where and where? Here is the netpbm software package containing 221a program for working with graphics (conversion, various manipulations...) costs
unidirectional pipes.
AM> There are a lot of options.
I forgot to add “you can think of it”. How much there really is is a completely different matter.
figure.
KF>> And for interprocess communication, pipes/files/sockets are often sufficient.
AM> How can you synchronize the unknown using a pipe/socket
AM> number of processes?
ls | grep | sort - everything is synchronous...
AM> And with the file there is an even bigger problem - the program will have to constantly
AM> check if the file is missing or read the contents of the file and check it.
If you really need it, then it’s probably worth getting a newer system, where all this
IPC is available in a more normal form. But often it is not necessary.
AM> Stone loading will be 111%
I wish...
KF>> Does not write. Therefore, it turns out that the process no longer exists, but objects
KF>> here they are...
AM> So it turns out that killing a process and units does not guarantee complete
AM> releasing objects.
For the Nth time I’m writing that nothing is released for SYSV IPC, is it possible/necessary
yourself. KF>>>> He doesn’t know, but he nails it. Objects remain - I already wrote. Their
KF>>>> can be deleted.
AM>>> Well, tell me how you can delete someone else's synchronization object.
KF>> There is a function... or a program to remove it - ipcrm.
AM> What rights are needed for this?
For someone else? root as always.
AM> How to get a complete list of all created synchronization objects?
man 8 ipcs. The list always contains only this:
key shmid owner perms bytes nattch status
0x00446814 0 fido 664 1024 0
I've never seen another one. And this is a muzzle for ifmail, which also does not work.
When I was using the qico mailer there was about the same thing from qico, also for
muzzles (CPS watch how the files download).
(if you write files to synchronization objects, use man 8 lsof)
AM> That's exactly what's abnormal! And what might happen in the end is not known to anyone
AM> known.
For fidomeyler it is known: if you beat him like this, then you will launch the horseradish,
until you delete these objects. The new qico has learned to delete itself.
KF>>>> appeared relatively recently. To synchronize threads there KF>>>> own means: mutexes, conditional variables,
KF>>>> traditional semaphores.
AM>>> Mutexes are ordinary synchronization objects.
KF>> Are there any unusual means? :-/
AM> Yeah, files/pipes/sockets.
Only in the vast majority of programs they are used, and more often
the total communication there is one way (ls | grep | sort...)
AM> They do not perform the main task - while waiting, do not load the processor at all
AM> (files, and possibly pipes).
Whaaat??? If no special actions are taken, then the process
blocks in a read/write system call until data is available.
AM> Do not allow you to synchronize an unknown number of processes (like you
AM> will you “distribute” a socket or a pipe to 33 processes?)
Free for recording. It takes 33 pipes to read. The same one you describe
multiprocess ftp server does not use any special objects
synchronization - there is no one to synchronize with and there is no need to.
KF>> These are objects used exclusively within one process
KF>> for thread synchronization. When the process is killed, they will of course disappear. KF>> but who needs them?
AM> These synchronization objects can be either local (in the same process),
AM> and global (named), i.e. any program can find them and
AM> use.
If the kernel does not know about them, they exist only in the context of the creator
process - then no one will find them. They are only available in streams of one
process, a special library generally deals with this, and in the kernel (in this
case we are talking about Linux) there was no support for threads before, and now
some kind of props and crutches... The programmers curse and spit because
In Linux, threads do not work like everyone else, and in Windows there is no fork...
I wrote that in old Unixes there were no threads at all.
KF>> Not only, as I understand it, for this it is enough to have a matching UID.
KF>> That is, another process of the same user can do this.
AM> No. The PID of the process is taken into account there.
Yes, but there are special semaphore control operations (deleting,
forced installation...), in addition to the standard ones.
AM> So the kernel deals with process synchronization objects or the process itself is everything
AM> does?
Of course he does it in one way or another. Prevent a process from being removed fromthis cannot affect memory - it will affect not the kernel, but the one who is with this process
synchronized. And there is no way to avoid this, unless you give the process
complete in a normal way - but that’s what signals are for: received
interruption, freed up resources and died. What about in Windows without signals? :-/
KF>> There you go! And at this moment another process can kick it for execution
KF>> any actions.
AM> The message will be queued, and as soon as the process has completed its long task
AM> operation, he will immediately check the queue.
This is equivalent to a pipe. You can also write messages into it, and the process will be
read from time to time. Not at all.
AM>>> so that it runs for 5 minutes? Well, the stone will be placed on
AM>>> 100% - this is understandable. But will at least one of the signals work?
KF>> Of course it will work, its essence is that it interrupts the normal
KF>> process execution.
AM> Have you checked?
Every day many times...
AM>>> "multi-process" mode. One main ProFtpd process, and
AM>>> one ProFtpd process for each connected.Look at lsof & ipcs and make sure that the children are with the main process at all
do not interact. The main one forked there, changed the UID, and it’s already working
descendant And the main one only catches SIGCHLD from descendants if he wants
(a signal again! How can you find out in Windows that a child has died?)
KF>> Very busy servers use the automata model --
KF>> you can’t have enough threads for everyone, and you need a lot of memory for each...
AM> IMHO it’s just the opposite.
AM> Separate process/thread for each user:
AM> - guarantees security, but the user will not be able to due to overflow
AM> buffer to access another user's data.
A separate thread does not guarantee anything, only a process (and here again is a fork with
preserving the context...)
AM> - if the user does nothing, then the OS process discards the swap, and not
AM> spends resources on it.
Swap has long been page-by-page, processes were thrown entirely into swap only in
prehistoric Unixes.
AM> - multi-process/multithreaded program works great on
AM> multi-process machine, and loads all the stones more or less evenly. AM> Imagine a large mail server, 8-16 stones, a lot of memory, and
AM> only one stone is used 100%, and it slows down - cool?
Yes it is. Probably the best option is mixed - several machines,
several
streams. But this option is labor-intensive in programming, IMHO.
AM> - for a single-threaded model you need to write “switch”, you need to allocate memory
AM> to store variables of "inactive" threads, you need to store a bunch of things -
AM> memory moss will eat more.
The amount of information is the same.
AM> - what happens when performing a long, uninterrupted operation with one person
AM> client, will everyone else hang around and wait?
If you get too perverted... it's better not to. It needs flow. HO! Many
threads with this most uninterruptible operation will definitely be installed here
car doggystyle.
KF>> IMHO, you've turned everything upside down - this is the user
KF>> local, and XFree local,
AM> That is. Is XFree a client, not a server?
That's the point, it's the server. It is a server for drawing pictures on the screen.
And the program running on another computer is an “application server” for
XFree client. KF>>>> "The threads came up with lamers who could not compose a literate
KF>>>> machine gun" - a free retelling of one of the founders of the unichs.
AM>>> Were multi-process machines invented by the same lamers or others?
KF>> Apparently others.
AM> So, multi-stone machines for juniors were invented by other founders of juniors...
Surely the hardware and software were developed by different people.
AM> How many of these founders were there? %)
A lot... Look somewhere at the Unix family tree - everyone
They weren’t too lazy to release their version, even Microsoft had a hand (Xenix),
There is also a version for the Z80 (UZI, UZIX for MSX).
AM>>> If you need to perform three tasks simultaneously (within
KF>> What if it’s not necessary? Maybe it just seems like it’s necessary.
AM> This is called a crude program algorithm.
AM> But we don’t take such a case, we really need to decide at the same time
AM> three tasks.
There weren’t many such tasks, which means that in one process you need to
it was. And now they have appeared.
KF>> No. An automaton is written in which the state is determined by a variable KF>> and not the PC command counter. The entire program consists of a loop in which
KF>> first, some event is expected and then some are executed
KF>> actions depending on the current state, for example nested
KF>> automata, and the state may change.
AM> Well, here's an example - you need to receive data over three sockets and process
AM> received commands and issue responses to them.
Easily.
AM> Moreover, the command execution time can be long.
Theoretically it is possible in one process. Almost a fork or thread
noticeably simpler.
AM>>> And these are extra brakes and the possibility of error.
KF>> IMHO it's the opposite. It is easier to determine all program states at once and not
KF>> make mistakes because of this.
AM> You will not be able to determine all program states at once.
I admit it, but frankly speaking, I’m not sure that such programs exist.
But you can’t say that about any program, for example, almost any program from
the list at the beginning of the letter is described by a finite state machine. Assuming
that the behavior of the CPU is described by an automatic machine, why is this not covered?
to a program running on this CPU? AM> Because your conditions depend on external influences, but they do not respond
AM> no analysis.
But the behavior of the program must be predetermined.
KF>> But programming may not be possible
KF>> is easier and the code will turn out scary...
AM> I said it right away - extra brakes (lots of code) and the possibility of errors
AM> (lots of code).
That’s just the probability of an error, IMHO, less, and the program is easier to check
for compliance with the existing machine. The code there is scary but simple.
AM>>> and everyone will receive 0.25 systems. Those. your program will
AM>>> work 1.5 times faster.
KF>> There are priorities for this.
AM> Well, here's an example: three users upload files to FTP. Everyone has
AM> priority is the same. The width of the channels in each is approximately the same.
CPU load priorities are adjustable. Internet Width
there is no channel, and the number of streams has little effect here, IMHO.
AM> By the way, they tried to raise priorities to the skies and drop them to the ground -
AM> don't care!
So there CPU load is about zero and so on. AM>>> And since “threads were invented by lamers”, then what kind of lamers are from
AM>>> did the founders of Unix come up with a multitasking system?
KF>> Well, don't take this too seriously. Just in every joke
KF>> there is some truth.
AM> Such a categorical joke should not even be considered initially.
AM> Because threads improve program performance and reduce work
AM> programmer.
Does this always happen? I don't think so. Often in streams
They are simply abused, especially in Windows.
AM> If everything that simplifies the work of a programmer was invented by lamers, then why yunikh
AM> is it not written in ASMA now? %)
In C. And in Windows there is more in C++, again where it is necessary and where it is not necessary. A
where it is not necessary, I would make do with bash or perl. However, excesses and shortcomings
There are different ones everywhere...
KF>> I'am first process
KF>> I'am second process
KF>> Where empty lines are when the file has already been created, but not yet
KF>> recorded. And the words are not torn because write is atomic (well
KF>> naturally, the entire phrase fits into the buffer and is written in its entirety). AM> Yeah, and now what do we have:
AM> a bunch of users decided to change their password. All at the same time
AM> said passw qwert.
AM> So what - the contents of the password file are now completely unpredictable, huh?
So they didn’t write passwd: they open /etc/shadow, read it, change it
password, write /etc/nshadow and rename("/etc/nshadow", "/etc/shadow").
And so that there are no problems with another parallel executing passwd between
write and rename /etc/.pwd.lock is created there, and this file is locked
via fcntl - that's the benefit of "deliberative" file blocking. And so that
do not freeze forever when a file is locked (the fcntl(F_SETLKW) function waits
until the file is unlocked) the SIGALRM signal is applied and the function
alarm to set the alarm clock.
I just looked at all this through strace. That's all synchronization for you
without "ordinary" indestructible synchronization objects...
From
Kirill Frolov
→
To
Aleksandr Majorov
30 June 2003
Press RESET immediately, Aleksandr Majorov!
On Sun, 29 Jun 03 11:14:35 +0400, Aleksandr Majorov wrote:
KF>> In unichs from the very beginning there is nothing but files, signals and pipes
KF>> none. The rest appeared later (well, look at the development tree
KF>> unikhov).
AM> Strange, the development of synchronization theory seems to date back to 1968.
And Unix appeared and actively developed in 1970-1990.
The first version, assembler, when there was no C yet, appeared in 1969.
The seventh version (this is something already similar to Unix) appeared only in 1979,
and the C compiler is 5 years earlier.
AM> Unix was born around the same time. And initially how
AM> multi-user database.
Initially it was just anything (a testing ground, IMHO), but not
multi-user database. Yes, and computers back then were of the Spectrum type.
AM> Strange...
I have a link where other interesting links are available:
http://cm.bell-labs.com/who/dmr/index.html.
KF>> And there are times when this is not necessary. And there are more such cases.
AM> Unixes work best with various servers, and the entire Internet is on them
AM> is holding on. AM> And network servers definitely require synchronization
This is how it is now. And now everything you need is (almost) already there.
Modern juniors are very different from the seventh version.
KF>> Linux doesn’t know how to notify a process about a directory change, like this
KF>> he is a poor penguin. Even the devil with a fork has already been taught this.
AM> Can't he? It’s not that difficult to implement!
Last year I definitely couldn’t. I don’t know now, maybe they’re gradually fixing it.
There is also no Windows WaitForMultipleObjects (for example, you cannot wait for
SYSV IPC object and file readiness).
AM> Although yes - writing logs not in text is insanity, because logs are an emergency
AM> information that you may need to look at when the system is dead.
In my opinion, the worse thing here is that there are no means available to clear up these
logs Or maybe there is, but I don’t know.
[...]
KF>> You can do it through a file, no worse.
AM> The file contains a text config, the main thread parses this config and
AM> writes settings values with variables that are already available to everyone.
Why? You can also store it in binary form in a file - this config is reallyis needed only by the server itself and no one else. I watched how proftpd works --
in /var/run/proftpd/ creates a binary file(s) and through it, apparently,
exchanges information. Programs like ftpcount through the same file and
extract statistical information.
AF>> Yes, there is synchronization.
AM> In the sense of “needed” or in the sense of “already there, because through the file”?
And it is needed and is - through the file.
AM> Identification always occurs in the child process/thread!
AM> Because if you do it in the main, we get a bunch of problems: code swelling, and
AM> other joys of the machine.
Well yes.
[...]
KF>>>> Yes, in any case, this is _O QUEUE_. And the signals are delivered outside
KF>>>> all sorts of queues.
AM>>> And the queue is better than “direct signal delivery”.
KF>> Somewhere it is better, but somewhere you need to deliver the message out of turn.
AM> Maybe, but I haven’t come across this yet.
Timer, for example. And from an asynchronous signal you can make a synchronous one.
KF>> There are also non-interactive programs. For example, a ZIP archiver. How KF>> in this way he learns that the packaging process is displaying percentage numbers
KF>> need to be aborted? Will there be a queue to check in all cycles?
AM> I told you how it’s done!!!
AM> A child thread is created, which does the packaging.
Total two streams. Not a rational waste of resources. And in dosa (or any
in another place where there are no threads) will not work. And with signals even in DOS
works.
KF>> In Windows there are “callback” functions here and there (well, the same ones
KF>> allow just anyone to mess with the timer) - this is a strange analogue
KF>> signals.
AM> Well... I wouldn't say that this is an analogue of signals. Although there is something similar.
Well, they are the same at any time, on any processor command,
interrupt
normal execution of the process?
AM> However, in real-time systems this is required.
AM> But Windows is not like that, so signals are not needed there.
Windows has an "RTX" real-time expander (for some money).
AM>>> A kind of interruption. But interruptions can at least be disabled ;-)
KF>> signal(SIGXXX, SIG_IGN) AM> How to protect against kill -9?
But no way. kill -9 is needed for this, as an absolute means of destruction
processes. By default /bin/kill sends SIGTERM, which can be
blocked.
AM>>> And this is the concern of the OS, this is its memory.
KF>> No. This is your process memory. With extra tails in N kb per
KF>> each stack.
AM> Who's stopping you from directly specifying the required stack size?
All the same, it is allocated in chunks of N-KB, the unallocated memory space is not
ranks nowhere.
KF>> But don’t write code for correct killing (you’re against kill -9)
KF>> have to?
AM> You'll have to. But there it will be possible to use at least some signal.
AM> How will you tell the machine that you want to kill the 138th process?
It is clear that the signal will not help. It won't help a multi-threaded program either.
AM> And so you send kill -3 pid (-3 taken from the lantern!), and this process is done correctly
AM> is self-terminating.
Well, you need to write code. And it's the same in the machine. Receives the event and
goes into a state... the whole question is how the event will be received.
AM> By the way, are you really sure that the kill -9 signal does not reach AM> applications?
And what would it be needed if it arrived? Consider this a function
special for killing processes.
AM> Otherwise, our ProFTPD server is too arrogant or stuck because of
AM> kill -9 shoot. And no leaks or other joys happen,
AM> the computer itself obviously hasn’t rebooted at all for a long time.
And there is nothing to leak there (almost). That's what I wrote about - kill -9 passes
painless.
AM> Maybe a “notification” application like “I’ll kill you right now” comes through
AM> why save?
This is SIGTERM, to which a hung/glitched process may not respond.
[...]
KF>> So the most effective method is parallel processing
KF>> a small number of requests (according to the number of processors). The rest
KF>> in order of priority.
AM> Not sure about the small quantity.
AM> IMHO one processor can easily handle a bunch of processes with requests.
Consistently, he will pull them faster. Parallelism requires a lot
memory, which threatens the loss of particularly parallel processes into swap and further
coma AM> Of course, I take the “average server”, such as FTP, mail, and not
AM> some server thread has brutalized a large database.
Well, everything will be the same in parallel, the tasks and programs will be different.
KF>>>> What about software without hardware?
AM>>> And this will be just “information”! ;)))
KF>> There won’t even be anything to write it down.
AM> What - the paper has already been cancelled?
Why do we need paper without iron?
AM>>> To say that at the moment the program will be in such and such a state
AM>>> IMHO almost impossible.
KF>> You don’t need a program that is located in an unknown location
KF>> state at any moment in time.
AM> Well then, give an example of a program for which you can at any time
AM> calculate what state it will be in.
For some reason it seems to me that any computer program falls into this
example - at the right moment in time the computer uniquely determines it
condition...
KF>>>> But it will have to be done anyway. The program is one way or another all these
KF>>>> processes conditions. If you write a program, you will have to do everything KF>>>> lay down these conditions.
AM>>> Is it possible that typing these conditions not automatically will be less?
KF>> Why would this be? Everything is the same, except for the method of presentation.
AM> But look: if two processes try to change some of the same ones
AM> data, then access restrictions will be required. Like "who got there first -
AM> that one is working, the others are waiting." What happens in the case of the machine: first
AM> the thread started changing data and set the flag “I’m changing it here, please wait.”
And there is no completely parallel execution. At that moment in time when
one automaton owns the process and can complete all the necessary actions,
unless, of course, they can be completed in a short period of time and not
require synchronization with external events.
AM> And in the case of a non-automatic machine, the second thread tried to enter the critical section,
AM> and without any extra (written by the programmer) conditions he “fell asleep” and waits
AM> freeing this section.
Well, consider that cooperative multitasking is a special function
to switch to another thread, no critical sections are needed there. KF>> It’s easier (for you) to track all state transitions with one
KF>> state variable and clearly defined transition conditions between
KF>> states than a significant number of other variables associated between
KF>> yourself and processed
KF>> events in a non-trivial way.
AM> No, it’s not easier.
If states are defined and numbered in advance, it is easier.
AM> It's much easier for me to use multiple variables (even if
AM> Boolean - I spend 4 bytes to process one bit), but called so that
AM> it’s immediately clear what they mean.
And then all these variables will certainly come to be mutually exclusive
condition...
AM> In addition, if I have a bunch of flags, I can simultaneously process
AM> multiple states if( m_bConnected && m_bUserLoginOK )...
Several states at the same time are still several different states.
In this case, if the variables are binary, there can be four of them. Or maybe
and three...
AM> And in the case of one variable, I have to remember (write down) that "0" AM> is such and such a flag, "1" is the same as "0", but also such and such
AM> flag.
These are all DIFFERENT states.
AM>>> Although with proper planning of the task there is no special dancing.
KF>> This is how the program is described at the planning stage?
AM> In words, what else?
Let's pose the question differently - words describe all possible states
programs or are they invented as the program is written?
[...]
KF>> There will be garbage there. Therefore, there is no need to abuse absolute rights
KF>> do just about anything - in Windows the “administrator” is not given such rights
KF>> for some reason.
AM> Wouldn't it be easier to block access to the file at the OS level, and
AM> no problem!
Then there would be other problems - you never had to reboot
Windows due to locked files? At the same time, count the quantity
reboots when installing software... - that's what blocking results in
dereferencing (that is, deleting) an executable file.
Well, historically this has already happened, many programs already rely on
certain behavior of the OS: I already gave an example of how wonderful they fightfiles on FAT, when the working file is first deleted, then a new one is created with
with the same name, the transfer of information from an already deleted file to a new one begins.
Well, there are also holes in files, lseek at the end of the file works wonderfully, but in Windows
files are corrupted (lseek ends with an error, there is no check - writing occurs
to the current position, when a hole is created in the file and the recording is made in
specified position). Several names for a file are also common, and also problems
creates on FAT.
From
Aleksandr Majorov
→
To
Kirill Frolov
1 July 2003
*** Reply to message from CARBON.COPIES (<>).
Hello Kirill!
30 Jun 03 22:29, Kirill Frolov -> Aleksandr Majorov:
[skipped]
AM>> Unix was born around the same time. And initially how
AM>> multi-user database.
KF> Initially it was just anything (a testing ground, IMHO),
KF> just not a multi-user database. Yes, and computers back then were like
KF> Spectrum.
It’s strange, but all my books about juniors say that the first use of junior
there was a job, it seems, as a database manager in the patent office for the PDP-10 (it seems so).
No, I'm lying.
In 69 Unix was written for PDP-7, and in 71 it was transferred to PDP-11 for the bureau
patents as a word processing system.
And Unix is based on the developments of MULTICS, which has been developed since 1965 as
multi-user multi-tasking OS.
[skipped]
AM>> Although yes - writing logs not in text is insanity, because logs are
AM>> emergency information that you may need to watch when you are dead
AM>> system.
KF> In my opinion, the worse thing here is that there are no funds available for
KF> raking these logs. Or maybe there is, but I don’t know.What kind of raking is there, view it with nothing other than a Windows viewer IMHO
it is impossible.
[skipped]
KF>>>>> Yes, in any case, this is _OCURE_. And the signals are delivered outside
KF>>>>> all sorts of queues.
AM>>>> And the queue is better than “direct signal delivery”.
KF>>> Somewhere it’s better, but somewhere you need to deliver the message outside
KF>>> queues.
AM>> Maybe, but I haven’t come across this yet.
KF> Timer, for example. And from an asynchronous signal you can make and
KF> synchronous.
Not true. Timer messages in Windows have the lowest priority.
They are generally only received when there are no more messages in the queue.
In order to get a truly accurate timer you need to apply special
effort.
[skipped]
AM>> A child thread is created, which does the packaging.
KF> Total of two threads. Not a rational waste of resources.
Why? The main flow actually sleeps all the time and does not consume the stone’s resources.
The thread that works does not consume graphic resources, but only works.
Overall, there is no significant waste of resources.
But the user can easily work with the program window - move it,
change sizes. And the most important thing is to see how the process is going, i.e. see
indicator change!And if the main thread was doing the archiving, then the main window would not be able to
move, the window would never be redrawn.
In short, there would be a complete imitation of the fact that the program froze, and Windows said
It's like "the program is not responding"!
KF> And it will not work in DOS (or any other place where there are no threads).
And you know, the same ProFTPD will not work in DOS either!
And Xs won’t work either, and Neskap/Mozilla won’t work in DOS!
So what of this?
Since when is it possible to work in DOS or anywhere else where there are no threads?
is the main criterion?
The program only works in the environment for which it was created!
I’m not saying that KDE, Gnome, bash and a bunch of other programs are absolutely not
necessary for the reason that they do not work in Windows!
KF> And it works with signals even in DOS.
Remind me how to send a signal to an application from the console in DOS?
KF>>> In Windows there are “callback” functions here and there (well, the same ones
KF>>> which allow anyone to mess with the timer) - here it is
KF>>> strange analogue of signals.
AM>> Well... I wouldn't say that this is an analogue of signals. Although something similar
AM>> yes.
KF> Well, they are the same at any time, on any processor command, KF> interrupt normal process execution?
IMHO no. The specified subroutine will be called only when the stone is processed
your program. Those. what will call the callback works in the context of the program, and
accordingly, to say that something else was being performed at the time of arrival
callback is incorrect.
AM>> However, in real-time systems this is required.
AM>> But Windows is not like that, so signals are not needed there.
KF> Windows has an "RTX" real-time expander (for separate
KF> money).
How about more details?
[skipped]
AM>> You'll have to. But there it will be possible to have at least some kind of signal
AM>> enable. How do you tell the machine what you want to kill?
AM>> 138th process?
KF> It is clear that the signal will not help. A multi-threaded program is also not
KF> will help.
Why? Send a message to the program to add thread 333 to its pointer table
streams.
AM>> And so you send kill -3 pid (-3 taken from the lantern!), and this process
AM>> correctly terminates itself.
KF> Well, you need to write code. And it's the same in the machine. Receives the event and KF> goes into state... the whole question is how the event will happen
KF> received.
In the case of an automatic machine, you need to “clean up” a lot of things from a bunch of tables.
Otherwise, you can kill the flow, it will clean everything in the destructor itself, and you
you just need to delete the stream pointer.
[skipped]
AM>> Otherwise, our ProFTPD server is too arrogant or frozen
AM>> we shoot at kill -9. And no leaks or anything else
AM>> there are no joys, the computer itself obviously won’t reboot at all already
AM>> a long time ago.
KF> And there is nothing (almost) to leak out there.
So nothing or almost nothing?
KF> That's what I wrote about - kill -9 is painless.
For absolutely all programs? Even the wrong ones?
[skipped]
AM>> Not sure about the small quantity.
AM>> IMHO one processor can easily handle a bunch of processes with
AM>> queries.
KF> Consistently, he will pull them faster. Parallelism is necessary
KF> a lot of memory
Why then do many, if not most, try to do multithreading?
and not parallelism? KF> which threatens the loss of particularly parallel processes in
KF> swap and further coma.
It is very difficult to remove a running process from a swap.
Since access to its memory is constant and the OS does not merge these pages into
swap.
AM>> Of course I take the “average server”, such as FTP, mail,
AM>> and not some server thread has brutalized a large database.
KF> Well, here everything will be the same in parallel, the tasks and programs are different.
In this case, why ProFTPD, SendMail, Apache and other servers
multi-threaded, not automatic?
“The author was thinking when he wrote the words...” (c)
KF>>>>> And software without hardware?
AM>>>> And this will be just “information”! ;)))
KF>>> There won’t even be anything to write it down.
AM>> What - the paper has already been canceled?
KF> Why do we need paper without iron?
To store information! By the way, storing on paper is more secure%)
And regarding the need/not need - I learned BASIC from a book without any computers
in general!
[skipped]
KF>>> You don’t need a program that is in the unknown
KF>>> what state at any moment in time. AM>> Well then, give an example of a program for which you can do any
AM>> moment to calculate what state it will be in.
KF> For some reason it seems to me that any computer program ends up in
KF> this example - at the right moment in time the computer uniquely determines
KF> her condition...
Actually, I wasn't talking about the computer, but about you.
And tell me - how does the _computer_ determine the state of the program?
[skipped]
AM>> But look: if two processes try to change some of the same
AM>> the same data, then access restrictions will be required. By type "who
AM>> the first one to use it works, the rest are waiting." What happens in
AM>> case of the machine: the first thread started changing the data and set
AM>> flag “I’m changing here, everyone wait.”
KF> And there is no completely parallel execution. At that moment in time
KF> when one automaton owns a process, it can finish everything
KF> necessary actions, if of course they can be performed in
KF> short period of time and do not require synchronization with external ones
KF> events.Wow, all the "ifs".
AM>> And in the case of not an automaton, the second thread tried to enter the critical one
AM>> section, and without any extra (written by the programmer) conditions
AM>> "fell asleep" and is waiting for this section to be released.
KF> Well, consider that cooperative multitasking is special
KF> function for switching to another thread - no need there
KF> critical sections.
If they are not needed, then why do they exist? And all other objects
synchronization?
Why were theories of synchronization developed if all this is not needed?
KF>>> It’s easier (for you) to track all state transitions with one
KF>>> state variable and clearly defined transition conditions between
KF>>> states than a significant number of other related variables
KF>>> between themselves and processed events in a non-trivial way.
AM>> No, it’s not easier.
KF> If states are defined and numbered in advance, it is easier.
Nope. You will get confused in 133 numbered events.
It is much easier for a person to work not with a bunch of numbers, but with words. AM>> I find it much easier to use multiple variables (even if
AM>> Boolean - I spend 4 bytes to process one bit), but called
AM>> so that it is immediately clear what they mean.
KF> And then all these variables will certainly come to be mutually exclusive
KF> state...
Why would this happen all of a sudden?
As a rule, you do not need to know the state of all variables to make a decision.
Some are enough.
If m_bError is set, then you no longer need to know anything - the error is all.
[skipped]
AM>> And in the case of one variable, I have to remember (write)
AM>> that "0" is such and such a flag and such and such, "1" is the same as "0", but
AM>> also such and such a flag.
KF> These are all DIFFERENT states.
Yeah, but for some reason it’s easier to remember the names of the flags that are written in the same
Hungarian notation and self-documented, than to understand a bunch of numbers and what they
mean.
AM>>>> Although, with proper planning of the task, there are no special dances.
KF>>> This is how the program is described at the planning stage?
AM>> In words, what else?
KF> Let's pose the question differently - all possible ones are described in words KF> states of the program or are they inferred during writing
KF> programs?
And this is how it turns out ;-)
But even with words, the state is not described by all flags at once.
[skipped]
AM>> Wouldn't it be easier to block access to the file on
AM>> OS level, and there are no problems!
KF> Then there would have been other problems - you never had to
KF> reboot Windows due to locked files?
I had to, but only 98. OSes on HT's - never.
KF> At the same time, count the number of reboots when installing software... - here
KF> what does blocking dereference (that is, deletion) result in
KF> executable file.
How do you imagine replacing the DLLs that are currently in use?
However, in HT this has already been decided.
And the file option is used, it is deleted, a new one is written, and the fact that it
used does not bother anyone - IMHO nonsense.
I don’t know how it is in Unix, but Windows never loads the entire file into memory.
And Windows never swaps pages with executable code/file data!
Only the part of the file that is used is loaded in memory.
Alexand
From
Vladimir Larkov
→
To
Kirill Frolov
2 July 2003
Hello, Kirill!
Wed 02-Jul-2003 01:36, you (500:812/1.507) wrote a letter to Aleksandr Majorov:
KF> VenturCom s Real-time Extension (RTX) adds real-time capabilities to
KF> Windows NT and Windows 2000 that are unparalleled in the industry. It
KF> offers developers a rich and powerful real-time feature set all in a
KF> familiar Win32-compatible interface. It also provides tools and utilities
KF> for building and executing real-time programs, along with tools for
KF> measuring and fine tuning the performance of both hardware and software.
Maybe you’ll write this nonsense with no soap, huh? After all, it’s just the two of us already
It's been a long time since you've been chasing a blizzard, I'm tired of deleting...
With best wishes, Vladimir.
From
Kirill Frolov
→
To
Vladimir Larkov
3 July 2003
Press RESET immediately, Vladimir Larkov!
On Wed, 02 Jul 03 01:10:04 +0400, Vladimir Larkov wrote:
KF>> VenturCom s Real-time Extension (RTX) adds real-time capabilities to
KF>> Windows NT and Windows 2000 that are unparalleled in the industry. It
VL> Maybe you’ll write this nonsense with real soap, huh? After all, only
VL> the two of us have been driving through the blizzard for a long time, I’m tired of deleting...
We fill the echo with traffic!
From
Aleksandr Majorov
→
To
Nikolaj Amosov
14 August 2003
*** Reply to message from CARBON.COPIES (<>).
Hello Nikolaj!
13 Aug 03 21:46, Nikolaj Amosov -> Aleksandr Majorov:
[skipped]
AM>> 2003 - 1993 = 10 years.
AM>> Do you think your current screw will last as long?
NA> I would like to. May my Sam Sung live at least three years...
AM>> Now they even provide a 1-year warranty on screws, although previously
AM>> given at 3...
NA> Where in three years will you get the same screw as now, in
NA> if it breaks, for an exchange? In the trash, if only...
And it is a private matter for the company whether to provide me with a screw or repair it.
And it turns out that the company itself does not guarantee that its screw will work 3
year. It could be a year, but three is unknown.
Why do you think they reduced the warranty period so dramatically?
And where did they plan to get screws for the models that they still managed to sell with
three year warranty?
Alexand
From
Aleksandr Majorov
→
To
Kirill Frolov
14 August 2003
*** Reply to message from CARBON.COPIES (<>).
Hello Kirill!
14 Aug 03 01:22, Kirill Frolov -> Aleksandr Majorov:
[skipped]
AM>> And here’s what these large firms will do after it’s proven
AM>> that SCO had no right to demand money, i.e. essentially engaged
AM>> extortion is the question :)
KF> So I write - fraud.
But the American courts are still silent, so it’s still unproven
fraud.
AM>> Yes. I said that I am satisfied with what I see in my browser.
AM>> You stated that until a certain point.
AM>> So I would like to comment on this.
KF> Sooner or later there will be a page that will be displayed
KF> is completely incorrect.
In this case, I simply will not go to such a page. And let the author be
worse! %)
[skipped]
AM>> I have 5 IE, and I use it to surf the Internet. All sites where I go
AM>> enters, displays normally. What am I doing wrong?
KF> If the site is displayed incorrectly, then you may not even know about it
KF> guess.Well, yes, I won’t even see minor flaws. So what of this?
But I see major glitches and leave the site.
Alexand
From
Kirill Frolov
→
To
Aleksandr Majorov
15 August 2003
Press RESET immediately, Aleksandr Majorov!
On Thu, 14 Aug 03 20:52:03 +0400, Aleksandr Majorov wrote:
AM>>> that SCO had no right to demand money, i.e. essentially engaged
AM>>> extortion is the question :)
KF>> So I write - fraud.
AM> But the American courts are silent so far, so this is unproven
AM> fraud.
For now...
KF>> Sooner or later there will be a page that will be displayed
KF>> is completely incorrect.
AM> In this case, I simply won’t go to such a page.
AM> And may it be worse for the author! %)
But the author may not be to blame. His page can be completely
meets all w3c recommendations, but twoj browser is incorrect
displays. In what year was IE5.0 released? And on xhtml-1.1 there is a date
May 31, 2001. So I’ll make an xhtml page that is correct in all respects,
and your browser will show just about anything.
From
Aleksandr Majorov
→
To
Kirill Frolov
16 August 2003
*** Reply to message from CARBON.COPIES (<>).
Hello Kirill!
15 Aug 03 17:12, Kirill Frolov -> Aleksandr Majorov:
[skipped]
AM>>>> that SCO had no right to demand money, i.e. essentially
AM>>>> engaged in extortion - that’s the question :)
KF>>> So I write - fraud.
AM>> But the American courts are silent so far, so for now
AM>> unproven fraud.
KF> For now...
Well, never mind, SCO will prove that the GPL license is illegal and does not comply
according to American laws, then it will be really fun.
Today there was such a statement from SCOshnikov in the news :-)
[skipped]
AM>> In this case, I simply won’t go to such a page.
AM>> And let it be worse for the author! %)
KF> And the author may not be to blame. His page can be completely
KF> complies with all w3c recommendations, and o twoj browser is incorrect
KF> displays it. In what year was IE5.0 released? And on xhtml-1.1 it costs
KF> date May 31, 2001. So I’ll make it correct in all respects
KF> xhtml page, and your browser will show just about anything.This is understandable.
Which browsers now fully support xhtml-1.1?
And what browser will they use to access this page?
This question should be of primary interest to the author.
If it is aimed at the average Internet crawler, then it is necessary that
IE 5 and IE 6 showed the page normally, otherwise it would lose a lot of visitors.
And therefore there is no point in using xhtml-1.1.
But if the site is visited mainly by users of the “YYY” browser, which
understands xhtml-1.1, then it makes sense to use it.
Those. The site author needs to choose one of three:
or make a site so that it displays normally in those browsers
which the vast majority of users access it, i.e. make a website
for users.
or use all sorts of new features, but then don’t be surprised by the absence
regular visitors, i.e. make a website for yourself, like “how cool am I,
I use everything new."
Alexand
From
Kirill Frolov
→
To
Aleksandr Majorov
16 August 2003
Press RESET immediately, Aleksandr Majorov!
On Fri, 15 Aug 03 23:30:35 +0400, Aleksandr Majorov wrote:
AM>>> But the American courts are silent so far, so for now
AM>>> unproven fraud.
KF>> For now...
AM> Never mind, SCO will prove that the GPL license is illegal and does not comply
AM> and American laws, then it will be really fun.
AM> Today there was such a statement from SCOshnikov in the news :-)
Then SCO itself will lose the right to use Linux.
KF>> displays it. In what year was IE5.0 released? And on xhtml-1.1 it costs
KF>> date May 31, 2001. So I’ll make it correct in all respects
AM> This is clear.
AM> Which browsers now fully support xhtml-1.1?
Absolutely - none. Partially - many of the latter, except completely
poor ones, like links (not to be confused with lynx).
AM> And what browser will they use to access this page?
AM> This question should be of primary interest to the author.
This is a vicious approach, which stimulates optimization for "1024x768"
and "Your browser is not WIN32 capable". This is what the W3C was created against. AM> If it is aimed at the average Internet crawler, then it is necessary
AM> so
Which needs to be updated sometimes. For some reason, everyone has Flash.
the second one, but it’s not included in the kit.
AM> IE 5 and IE 6 showed the page normally
Guess how users of some other browsers
increase statistics in favor of IE? They forcefully prescribe
User-Agent as "IE x.x", otherwise again "not capable".
AM> otherwise it will lose a bunch of visitors.
AM> And therefore there is no point in using xhtml-1.1.
That is, you offer a separate Internet for Win32 users.
Why do you think standards are needed at all? Does it make sense to do something like this?
a web page that is nothing but IE (and only on a 21" monitor!)
Can't be viewed or processed in any way? It's already gotten to that point
that html for a computer cannot be shown on a mobile phone screen and vice versa.
From
Aleksandr Majorov
→
To
Kirill Frolov
16 August 2003
*** Reply to message from CARBON.COPIES (<>).
Hello Kirill!
16 Aug 03 03:01, Kirill Frolov -> Aleksandr Majorov:
[skipped]
AM>> Well, never mind, SCO will prove that the GPL license is illegal and not
AM>> complies with American laws, then it’s really fun
AM>> will be. Today there was such a statement from SCOshnikov in the news :-)
KF> Then SCO itself will lose the right to use Linux.
No. I already talked about a possible option:
You stole the source code from us, which means the rights to Linux belong to us. And since it's yours
The GPL is illegal, so only we will decide how and how much to distribute Linux.
And the fact that SCO itself released Linux under the GPL, they can try to “bypass”, like
from this moment on, the GPL becomes illegal, and the law of “reverse” motion does not
has.
[skipped]
AM>> Which browsers now fully support xhtml-1.1?
KF> Completely - none. Partially - many of the latter, except
KF> very poor ones, like links (not to be confused with lynx).
It turns out that no browser will display the page in xhtml-1.1 correctly.
AM>> And what browser will they use to access this page?
AM>> This question should be of primary interest to the author. KF> This is a vicious approach, which stimulates optimization for
KF> "1024x768" and "Your browser is not WIN32 capable". Against such W3C and
KF> was created.
Explain why.
Here are the conditions for you: 99.99% of people visit your site using IE 5, and with
resolution 1024x768.
What is the point for you to make a site on xhtml-1.1 and so on?
AM>> If it is aimed at the average Internet crawler,
AM>> then you need to
KF> Which needs to be updated sometimes.
Not true. You need to upgrade to plug a hole, and also when the current
There is not enough software/hardware. I have already given examples of when it lasts for a long time.
KF> For some reason, every second person has Flash, but it’s included
KF> no.
Because many “cool” website makers think that they should hang up a gigabyte
flash to the home page, or even make the entire site on flash - that’s cool.
And what’s even cooler is to add left-handed banners so that the user doesn’t click on it
he wouldn't get away.
And the user gets the request “install a plugin for this flash?”, and many
they just stupidly agree.
And in the end, every second person pays more for the Internet and considers the ones he really needs
flash banners.
[skipped] KF> Guess how users of some other browsers
KF> increase statistics in favor of IE? They forcibly prescribe
KF> User-Agent as "IE x.x", otherwise again "not capable".
Not a fact.
AM>> otherwise it will lose a bunch of visitors.
AM>> And therefore there is no point in using xhtml-1.1.
KF> That is, you offer a separate Internet for Win32 users.
No. I simply suggest that the site author work with his head and write the site in calculation
on which user and with what software will access it.
KF> Why do you think standards are needed at all?
For browser creators first and foremost.
KF> Does it make sense to make a web page that is nothing but IE (and
KF> only on a 21" monitor!) can neither be viewed nor processed
KF> no way?
If _only_ users with the specified
parameters, and those who don’t have them will not be interested in the contents of the page at all
- then yes.
KF> It has already reached the point that html for a computer cannot be shown on the screen
KF> mobile phone and vice versa.
Because flash banners are not shown on the burial ground? :)
Alexand
From
Aleksandr Majorov
→
To
rNd
19 August 2003
*** Reply to message from CARBON.COPIES (<>).
Hello rNd!
15 Aug 03 15:26, rNd -> Aleksandr Majorov:
[skipped]
AM>> 2003 - 1993 = 10 years.
AM>> Do you think your current screw will last as long?
AM>> Nowadays they even provide a 1-year warranty on screws, although previously they provided for
AM>> 3...
r> so before, an 8MB 72pin SIM cost $300.
r> remember? e)
Where did you find these prices?
1997, simm 8bm. 72 pins = $28
32 = 112
dimm 32 130
64,300
128 1030
1998, simm 8bm. 72 pins = 16$
32 = 64
dimm 32 76
64 250
Alexand
From
Alexander Kotov
→
To
Aleksandr Majorov
20 August 2003
Hi *Alexander*!
It all started on 13-Aug-03 at 19:06:33, when Aleksandr Majorov
talked to Kirill Frolov about redhat...
AM> I have 5 IE, and I use it to go online. All sites where I go
AM> enters, displays normally What am I doing wrong?
s. And I go to Opera. and everything is fine. If necessary, switch browser type in Opera
and everything is ok. :)
AM> Aleksandr
Always yours Alexander
From
rNd
→
To
Aleksandr Majorov
21 August 2003
Hello Alexander!
19 Aug 03 18:54, Aleksandr Majorov -> rNd:
r>> so before, an 8MB 72pin SIM cost $300.
r>> remember? e)
AM> Where did you find such prices?
1995
E-burg "PARAD" (we have such an office here)
Bay W.B.R.
rNd
[Team: X-Tension] [FREE]