У вас все еще непозикс? Тогда мы идем к вам!

Этот ваш гнушный readline - жалкое беспомощное существо по сравнению с vi Line Editing Command Mode в POSIX Shell.

Добавьте команду set -o vi в ~/.profile или ~/.*shrc (по обстоятельствам), если, как и мне, лень ее набирать вручную каждый раз, нажимайте Escape, и будет вам счастье: v, h, j, k, l, /, N, n, c, I, A, b, w, 0, $ и еще много вкусных слов. И мерзкий Tab ваш тоже запретим: есть =, \ и даже *. В общем, пользуйтесь на здоровье!

В Solaris 8 эта часть стандарта реализована в интерпретаторе Korn Shell.
dmitris-imac:~ dmvo$ telnet austin.local
Trying 192.168.1.2...
Connected to austin.
Escape character is '^]'.


SunOS 5.8

login: dmvo
Password: 
Last login: Mon Dec 10 20:07:36 from mac
Sun Microsystems Inc.   SunOS 5.8       Generic Patch   February 2004
$ uname -a
SunOS austin 5.8 Generic_108528-29 sun4u sparc SUNW,Ultra-5_10
$ df -kP .
Filesystem           1024-blocks        Used   Available Capacity  Mounted on
mac:/Users/dmvo/Desktop
                      1952363672   273263664  1678844008    14%    /home/dmvo
$ echo $PROJECTDIR
alexo
$ ls -al /export/home/alexo/src
total 6
drwxrwxr-x   3 alexo    staff        512 Dec 10 21:17 .
drwxr-xr-x  12 alexo    staff        512 Dec 10 18:40 ..
drwxrwxr-x   2 alexo    staff        512 Dec 10 20:50 SCCS
$ ls
$ ed
a 
# %W%

all: rip
        ./rip

clean:
        -rm -f rip
.
w Makefile
43
q
$ sccs create Makefile

Makefile:
1.1
7 lines
$ rm ,Makefile
$ ed
a
#include <stdio.h>

static const char version[] = "%W%";

int main()
{
        printf("R. I. P.\n");
        return 0;
}
.
w rip.c
121
q
$ sccs create rip.c

rip.c:
1.1
9 lines
$ rm ,rip.c
$ ls # The moment of truth!
$ make
sccs  get -s Makefile -GMakefile
sccs  get -s rip.c -Grip.c
cc    -o rip rip.c 
./rip
R. I. P.
$ what rip
rip:
        rip.c   1.1
        stdio.h 1.78    99/12/08 SMI
        stdio_iso.h     1.2     99/10/25 SMI
        feature_tests.h 1.18    99/07/26 SMI
        isa_defs.h      1.20    99/05/04 SMI
        va_list.h       1.12    99/05/04 SMI
        stdio_tag.h     1.3     98/04/20 SMI
        stdio_impl.h    1.8     99/06/10 SMI
$ which cc
/opt/SUNWspro/bin/cc
$ date # Guess why?
Mon Dec 10 20:51:35 EET 1984
$ exit
Connection closed by foreign host.
dmitris-imac:~ dmvo$ 
#if 0
#include <stdbool.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static enum bool {
	true = 0xdead, false = 0xbeaf
} bool;

static enum cast {
	const_cast,
	dynamic_cast,
	reinterpret_cast,
	static_cast
} cast;

static struct class {
	struct class *namespace;
	int explicit;
	int friend;
	int mutable;
	int private;
	int protected;
	int public;
	int virtual;
} class;

static catch()
{
	return 0;
}

static try()
{
	return 0;
}

static throw()
{
	return 0;
}

static delete()
{
	return 0;
}

static export()
{
	return 0;
}

static usage(str)
	const char *str;
{
	fprintf(stderr, "Usage: %s id type op\n", str);
	exit(EXIT_FAILURE);
}

main(argc, argv)
	char *argv[];
{
	void *new = &class;
	char *typeid, *typename, *operator;
	int this;
	int using;

	if (4 > argc)
		usage(argv[0]);

	class.namespace = new;
	typeid = argv[1];
	typename = argv[2];
	operator = argv[3];
	this = !strcmp(typename, "this");
	using = atoi(typeid);
	printf("ID#%d is %s\n", using, this ? "mine" : "yours");
	return 0;
}
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/c99.html

-O optlevel

Specify the level of code optimization. If the optlevel option-argument is the digit '0' , all special code optimizations shall be disabled. If it is the digit '1' , the nature of the optimization is unspecified. If the -O option is omitted, the nature of the system's default optimization is unspecified. It is unspecified whether code generated in the presence of the -O 0 option is the same as that generated when -O is omitted. Other optlevel values may be supported.


P. S. А когда Остин очень-очень хочет, но никак не может, получается

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/logger.html
Только что понял, что именно мне напоминает схема вычисления с четырьмя списками L, A, D, R и алгоритмом сортировки "мусора" aord. Она во многом похожа на механизм транскрипции в биологии (процесс синтеза РНК с использованием ДНК в качестве матрицы).

В связи с этим становится яснее, почему системы взаимодействия часто связывают с формальной биологией и взаимодействием белков. В частности, Maribel Fernandez, автор и соавтор чуть менее, чем всех статей по системам взаимодействия, последние годы говорит о связи данной темы с молекулярной биологией, а также о системах перезаписи портов, при которой меняются связи, но не ноды. Последнее, в свою очередь, также близко к нашим конструкциям, в которых не используется никакой аллокатор памяти, а лишь производится перестановка указателей.

Произведя нехитрый поиск, я немедленно натолкнулся на книгу Maribel Fernandez под названием "Models of Computation: An Introduction to Computability Theory" и теперь жду не дождусь заполучить ее в руки:



http://www.amazon.co.uk/dp/1848824335

P. S. Получил, наконец-то. Оказалось неплохим вводным учебником по CS в его современном виде.
+

1. Implement eye-tracking in Project Glass as a pointing input device.
2. Buy Dasher Project by Inference Group before someone else does.
3. Apply real-time collaborative filtering to online dictionaries if your cloud got any balls :-P
4. ???
5. PROFIT!!!
Ключевые слова "blind computation", возникшие в рамках нашей небольшой задачи, приводят к целой туче исследований по BQC, "blind quantum computation", в различных журналах и на arXiv, а также к похожим друг на друга новостным статьям, прошедшим лавиной по интернетам в начале текущего года.

В частности, BBC рассказывают о том, что слепые вычисления могут оказаться полезными в облаке, дабы обезопасить от проблемы Большого Брата:

http://www.bbc.co.uk/news/science-environment-16636580

Базворды те же: "can be carried out without a cloud computer ever knowing what the data is". Таким образом это тем более любопытно, так как одним из применений систем слепой перезаписи графов мы ранее рассматривали именно Web с точки зрения особенного устройства кэша предвычисленных в облаке результатов для дерева возможных действия пользователя на определенную глубину. И хотя подходы, вроде бы, разные: один по сути нацелен на облегчение клиента, а другой - на вычисления без дешифрования, - темы все-таки кажутся взаимосвязанными.

В связи с этим хотелось бы задать вопрос залу: кто что слышал про BQC, в каком оно примерно состоянии и насколько это действительно может иметь отношение к нашей теме? Сами мы не местные и квантовую физику не знаем.

From the Preface

Have you ever...

  • wasted a lot of time coding the wrong algorithm?
  • used a data structure that was much too complicated?
  • tested a program but missed an obvious problem?
  • spent a day looking for a bug you should have found in five minutes?
  • needed to make a program run three times faster and use less memory?
  • struggled to move a program from a workstation to a PC or vice versa?
  • tried to make a modest change in someone else's program?
  • rewritten a program because you couldn't understand it?

Was it fun?

These things happen to programmers all the time. But dealing with such problems is often harder than it should be because topics like testing, debugging, portability, performance, design alternatives, and style -- the practice of programming -- are not usually the focus of computer science or programming courses. Most programmers learn them haphazardly as their experience grows, and a few never learn them at all.

In a world of enormous and intricate interfaces, constantly changing tools and languages and systems, and relentless pressure for more of everything, one can lose sight of the basic principles -- simplicity, clarity, generality -- that form the bedrock of good software. One can also overlook the value of tools and notations that mechanize some of software creation and thus enlist the computer in its own programming.

Our approach in this book is based on these underlying, interrelated principles, which apply at all levels of computing. These include simplicity, which keeps programs short and manageable; clarity, which makes sure they are easy to understand, for people as well as machines; generality, which means they work well in a broad range of situations and adapt well as new situations arise; and automation, which lets the machine do the work for us, freeing us from mundane tasks. By looking at computer programming in a variety of languages, from algorithms and data structures through design, debugging, testing, and performance improvement, we can illustrate universal engineering concepts that are independent of language, operating system, or programming paradigm.

This book comes from many years of experience writing and maintaining a lot of software, teaching programming courses, and working with a wide variety of programmers. We want to share lessons about practical issues, to pass on insights from our experience, and to suggest ways for programmers of all levels to be more proficient and productive.

http://cm.bell-labs.com/cm/cs/tpop/preface.html

В прошлом году я довольно пристально следил за выходом Google Chromebook, прежде всего за моделью от Samsung. Довольно быстро после выхода он появился и в UK, откуда уже можно было заказать по EU без таможни. Единственная проблема с заказом из UK, на самом деле, оказалась с клавиатурой. Дело в том, что я физиологически не принимаю никакую другую клавиатуру, кроме обычной американской, на которой обе клавиши Shift и клавиша Enter широкие, а не изуродованные неведомыми силами.

Заказ же из USA в EU появился значительно позже. Это интернет-магазин TigerTirect.com. Между банковским переводом и получением посылки в UPS прошла ровно одна неделя. Еще неделю я к нему присматривался. А на прошлых выходных я, наконец, решился на эксперимент: использовать только Chromebook для работы. Для этого мне и понадобился SSH-доступ со screen(1) при входе в систему. Мне нужно еще перенаправлять порт, чтобы легче тестировать Web-приложение, так что к файлам с ключами добавился и config с соответствующими строчками.

По большому счету, я годами не использовал ничего, кроме терминала с SSH и браузера. Все остальное выпрыгивало, пугало, мешало и всячески притягивало внимание, отвлекая от работы, как тамагочи. Этому место, может быть, на телефоне, но не на рабочей машине. Конечно, MacBook Pro производительный, однако я не видел смысла таскать за собой лишний килограмм ради каких-то редких случаев локальной сборки программного обеспечения сомнительного происхождения. Пусть греется сервер, а не ноутбук.

Итак, теперь у меня обычно одно окно браузера на весь экран с тремя пин-табами: почта (с нотификациями на рабочем столе), оболочка через SSH (на iMac дома) и собственно тестируемое приложение. Остальные вкладки используются как обычно: документация, GitHub, багтрекер, Wiki, и так далее. Используется нестабильная версия системы, однако, как я понял, они недавно обновили стабильную ветку одной из бета-версий, вместе с выпуском следующей версии компьютера от Samsung, которая теперь еще больше косит под Apple.

На всякий случай, рядом на рабочем столе все время лежал MacBook, но возвращаться к нему ни разу не пришлось и даже не захотелось. Настолько у меня положительный опыт работы с Chromebook. Не думал, что после перехода на Mac скажу это снова когда-нибудь, но лучшей рабочей станции у меня еще не было.
Как узнал, что в нашем доме можно за 20 евро в месяц (первый год, за второй — 30 евро в месяц, а потом можно снова менять провайдера) иметь сто мегабит в секунду на вход и десять — на выход, сразу сделал заказ. Вот, сегодня подключили VDSL2 от Saunalahti. До провайдера модем действительно показывает 100M/10M, но до таллинского хоста, который выбирает Speedtest.net, — лишь чуть меньше 50 на вход, как будто специально на 50M обрезают; на выход же почти все десять и есть.

Elisa Oyj, Tallinn, 17 ms, 47.25 Mbit/s down, 8.82 Mbit/s up

Замерял я через Wi-Fi с MacBook, это 802.11n с MCS 15, то есть 145M. Больше модем, который Saunalahti дает без отдельной платы, и не может. Через два года он остается твоим. В целом, неплохой: ZTE ZXDSL 931 WIIA, без внешних антенн, ADSL2+/VDSL2.

Однако, выдается всего пять белых айпишников, и один из них захапал модем и не отдает, а тут три компьютера и два телефона. Выкрутился виртуальной точкой доступа с другим SSID, которую положил под NAT, а основную пустил на бридж. В принципе логично: телефонам последний вряд ли нужен, а динамические DNS настроены только на Маках. Плюс кто-нибудь может в гости зайти и подключиться к любой из двух точек.

Кстати, вы знали, что Маки не подключаются к широким каналам в 40 МГц в диапазоне 2.4 ГГц? Apple, вроде бы, это объяснил интерференцией с Bluetooth, но на самом деле — хочет продать AirPort Extreme. Впрочем, в действительности, как известно, все не так, как на самом деле.

Terminology used below is defined in the corresponding chapter of the XBD volume.

Task statement: implements IEEE 1003.1 with all the options disabled and system limits set to their minimum acceptable values.

Requirements:

  1. Implementation is real-time in the sense of implementation-defined system clock which need not correspond to real-time clock.
  2. Implementation supports exactly one user ID, namely zero. Every possible login name (see _POSIX_LOGIN_NAME_MAX) has the same user ID and its home directory set to /.
  3. Implementation supports multiple logins.
  4. System boot has finished exactly once before any login until a system crash. Any system crash shall be followed by system reboot.
  5. Implementation has exactly one file system with its root at / which may be non-conforming.

Means:

  1. One Google AppEngine application on the server's side.
  2. HTML5 and ECMAScript with AJAX extension on any client's side.

Rationale: since C-Language Development Utilities are optional functionality, and the c99 utility is the only way to compile an application, System Interfaces are not required to be actually implemented. That is, mandatory Shell and Utilities are the only functionality which is required to be implemented, of course, in conformance with Base Definitions and System Interfaces. The file system may be non-conforming (for example, legacy file systems for which _POSIX_NO_TRUNC is false, case-insensitive file systems, or network file systems) because any Strictly Conforming POSIX Application is required to tolerate and permitted to adapt to the presence or absence of optional facilities, and the latter include non-conforming file systems. Taking into account mandatory IPv4 support and that no other hardware interfaces are specified, the only user interface for UNIX that can be implemented as a Strictly Conforming POSIX Application is a Web terminal. System clock is not required to correspond to wall clock in order to allow implementation to stop background processes when no login is being used.

Implementation described above is a combination of the following ideas: Web console as the only interface for UNIX and minimal POSIX implementation as a test suite for checking Strictly Conforming POSIX Applications. A Google AppEngine application called uniwebcore has been reserved for this task.

Было бы здорово увидеть реализацию монтирования файловых систем без отдельных непозиксовых системных вызовов. Для этого можно воспользоваться зарезервированной функциональностью системного вызова link(), работа которого не гарантирована, как для обычных файлов, но явно обозначена для директорий.

Таким образом мы можем получить упрощенный пользовательский интерфейс к монтированию, не выходя за рамки стандарта:

$ ln /dev/usb/thatoneijustattached/read-only ~/letitbehere

Навеяно вопросом насчёт make(1).
Есть искусственная сугубо формалистическая задача: позволить реализовать системный вызов с помощью чистого ANSI C. Последнее означает отсутствие нестандартных символьных констант и нестандартных конструкций, в том числе ассемблерных вставок.

По очевидным соображениям, варьируемой частью, которая и будет являться решением, может быть лишь компилятор, а не архитектура компьютера. Иными словами для решения задачи необходимо и достаточно представить компилятор языка ANSI C, нигде не противоречащий стандарту, который при этом позволял бы пользователю с помощью некоторых инструкций чистого ANSI C получать в качестве результатов компиляции системный вызовы, которые традиционно реализуются на языке ассемблера.

Нетрудно заключить, что решение задачи может быть найдено там, где стандарт не специфицирует поведение, оставляя свободу действий реализациям. При этом препроцессор с его #pragma не подходит по определению, а попытка рассмотреть стандартные библиотеки возвращает рекурсивно к исходной формулировке проблемы. Таким образом единственным остающимся в запасе местом оказывается ядро языка.

Логично взглянуть в сторону деления на нуль. Действительно, «если второй операнд [операций / и %] равен 0, то результат не определен». Следовательно системный вызов можно реализовать, по крайней мере, следующим образом:
void syscall(int num)
{
	num / 0;
}
Интересны и другие варианты решения данной задачи. Например, [livejournal.com profile] blacklion предложил решение даже без требования какого-либо специфического компилятора, а лишь добавив еще один интерфейс системных вызовов в дополнение к обычной ассемблерной инструкции syscall. Решение заключается в том, чтобы не рассматривать разыменование нулевого указателя попыткой доступа к неразрешенной памяти, но в то же время перехватывать это обращение в MMU самой операционной системой. Функция для вызова системного вызова без магических констант и без операций, поведение которых не специфицировано в ANSI C, может выглядеть следующим образом:
void syscall(char *data)
{
	static volatile char **const syscallp;

	*syscallp = data;
}
В тексте стандарта POSIX, а именно в описании единственного там интерфейса для работы с электронной почтой mailx(1) ("heirloom-mailx" - современная его реализация) обнаружился упомянутый для примера адрес hlj@posix.com. Домен posix.com действительно существует, а веб-страница с этим адресом является персональной некоего Hal Jespersen. Его имя с тем же сокращением (HLJ) встречается также в англоязычной Википедии, где, как и на posix.com, речь, по большей части, идет об исторических сражениях.

Оказывается, этот человек является основателем компании POSIX Software Group, которой принадлежат права на упомянутую страницу в интернете, судя по надписи внизу. В свою очередь, запрос в Google на ее название приводит на "about"-страницу в том же домене: "He was the Technical Editor for the IEEE/ISO POSIX family of standards and the Chair of the POSIX Shell and Utilities working group".
       ListShellHook
              This is like ListHook, but the whole argument is given to the shell as
              argument, and the input and output file are stdin and stdout.

              i.e.:
              ListShellHook: cat
              works but does nothing but useless use of a shell and cat, while
              ListShellHook: grep-dctrl -X -S apt -o -X -S dpkg || [ $? -eq 1 ]
              will limit the update rule to packages from the specified source pack‐
              ages.
- Manual page of reprepro(1)
If you are using a local overlay repository (a very advanced use of pbuilder usually used for backport archives), you will likely want to use a modified version of 'pbuilder-satisfydepends-gdebi'.
Стало интересно, какой процент времени жизни средней Gentoo-системы занимает ее собственная сборка. По-видимому, число глубоко двузначное. Ведь одной из причин глобального потепления являются вентиляторы, которые охлаждают x86-процессоры, измученные работой GCC ради сборки одного и того же снова и снова.
Возникла идея регистрации в Web-системах с помощью отправления письма на адрес, показываемый на изображении CAPTCHA.

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

Также можно использовать адреса типа 53db-c45e-94ca@register.example.com и ограничиваться изображением кода, а не полного адреса.
POSIX specifies SCCS, Source Code Control System, the first version control system in the World. An article describing usage, internals, and history of it was written by its author, Marc Rochkind, and published in 1975. Inside an Open Group-certified system with XSI (development) extension, SCCS is highly integrated with the `make' program, providing a comfortable way to develop small programs locally.

In Debian, this revision control system is available in particular through a package called `cssc', and GNU Make in turn does know about SCCS' commands. Unfortunately, GNU Make does not support PROJECTDIR environment variable specified in the POSIX standard to provide a way to work with projects together with other local users in a given system. However, the latter feature is no more meaningful for the current state of the IT world, thanks to the Internet widely available.

In any way, SCCS in Debian can be an appropriate tool for tracking local projects, documents, or configuration files constantly being changed. Transparent and simple structure of the history files (so-called s-files) allows fixing small errors in tracked files without unnecessary increase of the version numbers. One of its features is labeling source code modules with identifiers recognizable by the `what' utility - it can be useful to determine the version for each module a given build is constructed from:


Currently, the `cssc' package makes available only the front-end command, `sccs', but POSIX specifies also `get', `what', `delta', etc. Since the `get' command is supposed to be present by GNU Make, it is worth fixing that, for instance, by providing a set of symbolic links to the corresponding executables in ~/bin directory. Later, a package called `posix-utils' is going to be proposed to Debian such a way that it would create them system-wide making the system closer to POSIX Shell and Utilities conformance.
After the Debian installation on Malta had succeeded, its YAMON firmware was set to boot the Linux kernel off the hard disk, the latter being partitioned as follows (fdisk(1)'s output):
Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders, total 156301488 sectors
Units = sectors of 1 * 512 = 512 bytes
Disk identifier: 0x882d882d

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *          63       32129       16033+  da  Non-FS data
/dev/hda2           32130   154850534    77409202+  83  Linux
/dev/hda3       154850535   156296384      722925   82  Linux swap / Solaris
In order to do that, one could just load an SREC-formatted Linux kernel image using the command `load', then dump the resulting memory range into the first hard drive partition (/dev/hda1) using the command `disk write hda 0x3f 0x3fff 0x80100000'. Then, the $start environment variable can be set to the value `disk read hda 0x3f 0x3fff 0x80100000; go $entry root=/dev/hda2 quiet', where $entry stands for the corresponding entry point for the given kernel and can be obtained from output of `load', in particular.
Page generated Jul. 26th, 2025 01:16 am
Powered by Dreamwidth Studios