ããã¯èšäºããã®æçã®ç¿»èš³ã§ãããç§ã®æèŠã§ã¯ãå¥ã®æçš¿ã«æçš¿ããã®ãé©åã§ãã äž»ãªèšäºïŒ
habrahabr.ru/post/193798MACãããžã§ã¯ãïŒMultiple Access ComputerãMachine-Aided CognitionãMan and ComputerïŒã¯ã1963幎ã«MITã§ã®çŽç²ãªç ç©¶ãããžã§ã¯ããšããŠå§ãŸããŸããã ãã®åŸãã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ç ç©¶æïŒLCSïŒã«æé·ãã仿¥ã§ã¯ã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ããã³äººå·¥ç¥èœç ç©¶æãšåŒã°ããŠããŸãã
60幎代ååã«ã¯ãã¿ã€ã ã·ã§ã¢ãªã³ã°ã·ã¹ãã ãžã®é¢å¿ãæ¥äžæããŸããã ãžã§ã³ã»ããã«ãŒã·ãŒã¯ã1959幎ã«ãIBM 709ãããžã§ã¯ãã®æéæå®ãªãã¬ãŒã¿ãŒããã°ã©ã ããšããã¿ã€ãã«ã®ã¡ã¢ãæžããŸããã CorbatoãMervyn-Daggetãããã³Daleyã¯ã1962幎ã®èšäºã§ããã¿ã€ã ã·ã§ã¢ãªã³ã°ã«ãããã³ã³ãã¥ãŒã¿ãŒã®äœ¿ç𿹿³ã«3çªç®ã®ã°ããŒãã«ãªå€åãè¿«ã£ãŠããŸãããšæžããŠããŸãã æåã¯ãã³ã³ãã¥ãŒã¿ãŒã®äœ¿çšå¹çãåäžãããæ¹æ³ãšããŠèããããŠããŸããããããã«ãã«ããŠãŒã¶ãŒã·ã¹ãã ã®ã¢ã€ãã¢ã«è³ããŸããã ããã¹ã»ãªãããŒã¯ãæžã蟌ã¿-ã³ã³ãã€ã«-å®è¡-ãããã°ãµã€ã¯ã«ã®æãé
ãã¹ãããã¯ããã·ã³ã§ã¯ãªã人ã«ãã£ãŠæ±ºå®ããããšåŸã§èšããŸãã

MACãããžã§ã¯ãã®ãã¬ãŒã ã¯ãŒã¯å
ã§ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®éçºãå«ããå
±æãããæéãæã€ã·ã¹ãã ã«å€§ããªè²¢ç®ããããŸãã
ïŒãã®ãããªèšèã¯ãããŸããã§ããããæç¢ºã«ããããã«-ãããTranslãïŒ 60幎代åŸåã«ã¯ãBBNãDTSSãJOSSãSDCãªã©ãä»ã®ããã€ãã®ã¿ã€ã ã·ã§ã¢ãªã³ã°ã·ã¹ãã ãäœæãããŸããããããããã®ãã¹ãŠã¯ãã®èšäºã«ã¯é¢ä¿ãããŸããã ããããMultiplexed Information and Computing ServiceïŒMULTICSïŒã¯ããã§ãã
Multics
ããã¯ãMITãBell Telephone LaboratoriesïŒBTLïŒãããã³General ElectricïŒGEïŒã®å
±åéçºã§ãããGE-645ã³ã³ãã¥ãŒã¿çšã®ã¿ã€ã ã·ã§ã¢ãªã³ã°OSãäœæããŸãã
åœæããã³ã³ãã¥ãŒã¿ãŒã䜿çšããããšã¯ãã»ãŒæä»çã«ãããã°ã©ãã³ã°ããæå³ããŠããŸããã ã€ãŸããäžèšã®æžã蟌ã¿-ãããã°ãµã€ã¯ã«ãããå¹ççã«å®è¡ããå¿
èŠããããŸããã
Multicsã¯ãäžåºŠã«æå€§1000人ã®ãŠãŒã¶ãŒããµããŒãã§ããã¢ããªã±ãŒã·ã§ã³ãœãããŠã§ã¢ã«ãªãããšã§ããã ãŸããTKããïŒãMulticsã·ã¹ãã ã®ç޹ä»ãšã¬ãã¥ãŒããã³ã«ããããŽã£ãœãããŒã1965幎ã«åŒçšïŒïŒ
- 24æé365æ¥ã®éçš
- å¿
èŠã«å¿ããŠè¿œå ããã³æ¹åã§ãããã¬ãŒã ã¯ãŒã¯ã®ååš
- ããŸããŸãªããã°ã©ãã³ã°èšèªãšãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®ãµããŒãã ã·ã¹ãã èªäœã¯ãäž»ã«é«æ°ŽæºèšèªPL / Iã§äœæãããŸããã
- å¹
åºãã¢ããªã±ãŒã·ã§ã³ã®ãµããŒã
- 䟿å©ã§æè»ãã€é«éãªãªã¢ãŒãã¢ã¯ã»ã¹ããµããŒã
- å¶åŸ¡ããªãœãŒã¹å²ãåœãŠãããã³æ¿èªã®éå±€æ§é ãæã£ãŠãã
- ä¿¡é Œã§ããFSãæã£ãŠãã
- ããŒã¿ã¢ã¯ã»ã¹å¶åŸ¡ã®ãµããŒã
- ãªã³ã©ã€ã³ææžã®å
¥æå¯èœæ§
BTLã¯ã1969幎åé ã«ãã®ãããžã§ã¯ãããæ€åããŸããã Multicsã¯ãäžé£ã®å販åŸãåçšè£œåãšããŠéçºãããŸããã Honeywellã¯GEã®ã³ã³ãã¥ãŒã¿ãŒäºæ¥ãè²·åããBullã¯Honeywellãè²·åããŸããã äžè¬ã«ããããžã§ã¯ãã¯æåãããã®åŸã®å€ãã®ãããžã§ã¯ãã«å€§ããªåœ±é¿ãäžããŸããã Multicsãå®è¡ããŠããæåŸã®ã³ã³ãã¥ãŒã¿ãŒã¯ã2000幎10æ31æ¥ã«ã·ã£ããããŠã³ãããŸããã
Unix
BTLã¯ãããžã§ã¯ããé¢ããŸãããããã®åŸæ¥å¡ã®äžéšã¯èªåã§ç¶ç¶ããããšèããŠããŸããã ããšãã°ãã±ã³ãã³ããœã³ãããã¹ãªãããŒãã¹ãã¥ãã§ã«ããã³ããã°ãããã€ãããã¢ãªã¹ããžã§ãŒãªãµã³ãã ãã³ããœã³ã¯ãGE-635ã§å®å®æ
è¡ã²ãŒã ã«åãçµã¿ãŸããã æåã«Multicsçšã«äœæãããæ¬¡ã«GE-635äžã®GECOSã®äžã§Fortranã«æžãæããããŸããã ã²ãŒã ã¯å€ªéœç³»ã®äœãã·ãã¥ã¬ãŒããããã¬ã€ã€ãŒã¯ææãŸãã¯è¡æã®ã©ããã«è¹ãäžéžãããªããã°ãªããŸããã§ããã ãã®ã³ã³ãã¥ãŒã¿ãŒã®ãœãããŠã§ã¢ãããŒããŠã§ã¢ãããã®ãããªã²ãŒã ã«ã¯é©ããŠããŸããã§ããã ãã³ããœã³ã¯ä»£æ¿ææ®µãæ¢ããŠããŠãææè
ã®ããªãPDP-7ã®äžã§ã²ãŒã ãæžãçŽããŸããã ã¡ã¢ãªã¯8K 18ãããã¯ãŒãã®ããªã¥ãŒã ã§ããã®éçŸããã°ã©ãã£ãã¯ã衚瀺ããããã®ãã¯ã¿ãŒãã£ã¹ãã¬ã€ããã»ããµããããŸããã ãã³ããœã³ã¯ããªãããŒã䜿çšããŠã¢ã»ã³ãã©ãŒã§PDP-7ã®ã²ãŒã ãæžãçŽããŸããã ãã®éçšã§ãæµ®åå°æ°ç¹ãæäœããããã®ãœãããŠã§ã¢ãŠããããååŸããŸããã ã²ãŒã ã¯OSãªãã§ãã¢ã¡ã¿ã«ã§åäœããŸããã
ãŒãçïŒ1969幎æ«ïŒ
ãã³ããœã³ãšãªãããŒã¯ãGEã§ã¯ãã¹ã¢ã»ã³ããªãå®å
šã«éçºãããã³ãããŒãã«ã³ãŒããç§»æ€ããŸããã ãã³ããœã³ã¯ç©æ¥µçã«ããã奜ãŸãªãã£ãããããã¡ã€ã«ã·ã¹ãã ããå§ããŠãPDP-7ã®OSãæžãå§ããŸããã ã·ã¹ãã ã¯1969幎ã®çµããã«çµã¿ç«ãŠããå§ããŸããã ãã§ã«ã«ãŒãã«ããšãã£ã¿ãŒãã¢ã»ã³ãã©ãŒãåçŽãªã·ã§ã«ãããã³
cat
ã
cp
ã
rm
ãªã©ã®ãã¡ã€ã«ãŠãŒãã£ãªãã£ããããŸããã ããã¯UNICSã§ãååã¯Multicsã埮åŠã«ãããŒãªã³ã°ããŸãã ãã®åŸãUNIXã§å€ç°ããŸããã ããã¯ãŒãçãšèŠãªãããšãã§ããŸãã
cp
ã³ãã³ãã®æåã®ããŒãžã§ã³ã¯ãåŒæ°ããã¢ã§åŠçããŸããã
dsw
ïŒã¹ã€ããã䜿çšããåé€ïŒã³ãã³ãã«ããããã¡ã€ã«ã察話圢åŒã§åé€ã§ããŸããã
Multicsããã³ããã«ä»¥åã®CTSSãçŸä»£ã®Unixã©ã€ã¯ãªã·ã¹ãã ã«äžãã圱é¿ïŒ
- ã·ã§ã«ãMulticsã§ã¯ãåã«ã·ã§ã«ãšåŒã°ããŠããŸããã UNIXã§ã¯ãçµæã代å
¥ããããšã¯ `command`ã®ããã«èŠããMulticsã§ã¯[command]ã®ããã«ãªããŸãã
ls
ã pwd
ã chdir
ïŒMulticsã®cwd
ïŒã mail
ã man
ïŒMulticsã®help
ïŒãªã©ã®å€ãã®ã³ãã³ããrc
ãã¡ã€ã«ãä»ããæ§æã CTSSã«ã¯RUNCOM
ããã°ã©ã ããããŸãããroff
ãããã¹ããã¬ã³ããªã³ã°ããããã®ã³ãã³ãã CTSSããã³Multicsã§ã¯ãããã¥ã¡ã³ãã¯RUNOFF
ããŒã ã«ãã£ãŠäœæãããŸãã- ãã€ãã®åçŽãªã¹ããªãŒã ãšããŠã®ãã¡ã€ã«
- æåãšæ¹è¡ã®ã¹ããªãŒã ãšããŠã®ããã¹ã
- ããªãŒãã¡ã€ã«ã·ã¹ãã
- äœã¬ãã«ã®ããŒããŠã§ã¢æ©èœãé ããã£ã¹ã¯ã¢ã¯ã»ã¹API
- I / O颿°ã®åŒæ°æ§é ã«ã¯ããã¡ã€ã«ãã³ãã©ããããã¡ãããã³å€ãã®æåãå«ãŸããŸã
- I / Oãªãã€ã¬ã¯ã
ãªãããŒã¯ã¹ããŒãªãŒèšäºã§æ¬¡ã®ããã«æžããŠããŸãããäžè¬çã«ãUNIXã¯éåžžã«ä¿å®çãªã·ã¹ãã ã§ãã ããã«å®è£
ãããŠããã¢ã€ãã¢ã®ã»ãã®äžéšã ããæ¬åœã«æ°ãããã®ã§ãã ããããCTSSã¬ã¬ã·ãŒã®å Žåãããã§ããæªããããŸããã ã
PDP-7 UNIXã«ã¯iããŒããåãããã¡ã€ã«ã·ã¹ãã ããããŸããããç©çãããã¯ã®ãªã¹ããšæå°éã®ã¡ã¿ããŒã¿ïŒãµã€ãºãäœææéããã¡ã€ã«ã¿ã€ãïŒãã»ãšãã©å«ãã§ããŸããã§ããã ç¹å¥ãªãã¡ã€ã«ãšãã£ã¬ã¯ããªããµããŒããããŸãããããã¡ã€ã«ãã¹ã¯ãããŸããã§ããã ãããããããã¡ãªã³ã°ããããŸããã å¥ã®éèŠãªå¶éïŒ
- ãã£ã¬ã¯ããªãšç¹æ®ãã¡ã€ã«ã¯ããã¡ã€ã«ã·ã¹ãã ãäœæãããšãã«ã®ã¿äœæã§ããŸãã
- ãã©ã€ãã¯1ã€ããååšã§ããŸãã
- ãã«ãããã°ã©ãã³ã°ã¯ãµããŒããããŠããŸããã åžžã«ã¡ã¢ãªã«ååšã§ããããã°ã©ã ã¯1ã€ã ãã§ãã
- ç©çãã£ã¹ã¯ã¢ã¯ã»ã¹ã«ããã·ã¹ãã ãå®å
šã«ãããã¯ããã
- forkãexecãwaitã®åŒã³åºãã¯ãããŸããã§ããã ã·ã§ã«ã¯æŸèæãä»ããŠæ©èœããŸãããããã°ã©ã ãèµ·åãããšãã·ã§ã«ã¯å®äºããå®äºæã«ããã°ã©ã ã¯ã·ã§ã«ãåèµ·åããŸããã
PDP-7 UNIXã¯ãBCPLèšèªã®åœ±é¿äžã§äœæãããé«ã¬ãã«èšèªBã®å§ãŸãã§ããããŸãã ããã¹ãªãããŒã¯ãBã¯åã®ãªãCã ãšèšããŸããã BCPLã¯8Kã®ã¡ã¢ãªã«åãŸãããã³ããœã³ã«ãã£ãŠæ
éã«åèšèšãããŸããã ç§ã¯åŸã
ã«Cã§è²ã¡ãŸãããã«ãŒãã«ãšPDP-7 UNIXããã°ã©ã ã¯å®å
šã«ã¢ã»ã³ãã©ãŒã§æžãããŠããããšãæãåºããŸãã
BCPLã®ããã€ã®å¡ã®äŸUNIXã¯PDP-9ã§ãæ©èœããŸããã 1969幎ã«ã¯ãæåã®ARPANETãéå§ãããæåã®RFCãå
¬éãããŸããã
UNIXéçºããŒã ã¯BTLãšãã£ããããŠã24 KBã®ã¡ã¢ãªãæèŒããããé«åºŠãªã³ã³ãã¥ãŒã¿ãŒã§ããPDP-11 / 20ã賌å
¥ããŸããã OSãªãã§å®è¡ããããã¥ã¡ã³ãã®ç·šéããã³ç·šéçšã®ã·ã¹ãã ãäœæããéçºã«ã®ã¿UNIXã䜿çšããããšãçŽæããŸããã UNIXã¯1971幎åé ã«æ°ããã³ã³ãã¥ãŒã¿ãŒã§èµ·åãããŸããã 12 KBã®ã¡ã¢ãªãã«ãŒãã«ã«ãã£ãŠå æãããããå°ãã¯ããã°ã©ã ã«ãã£ãŠå æããããã®ä»ã¯ãã¹ãŠramdriveã®äžã«çœ®ãããŸããã
åçïŒ1971幎11æïŒ
åçã¯ãMMUããã³ããŒããŠã§ã¢ã¡ã¢ãªä¿è·ãªãã§PDP-11 / 20ã§æ©èœããŸããã ãã®ãããäœæ¥ã®å®å®æ§ãšé害ã«å¯Ÿããæµæåã¯æšæºã«éããŸããã§ããã ãã«ãããã°ã©ãã³ã°ããããŸããã§ãããããã¡ã€ã«ãã¹ã¯ãã§ã«è¡šç€ºãããŠããŸããã ãã®ãããªã·ã¹ãã ã³ãŒã«ã®ããã¥ã¡ã³ãããããŸããïŒ
break, cemt, chdir, chmod, chown, close, creat, exec, exit, fork, fstat, getuid, gtty, ilgins, intr, link, mkdir, mount, open, quit, read, rele, seek, setuid, smdate, stat, stime, stty, tell, time, umount, unlink, wait, write.
ããã°ã©ãã³ã°èšèªã®ãã¡ãã¢ã»ã³ãã©ãŒãBãBASICãFORTRANããµããŒããããŠããŸããã ãŸã ãªãã®ã§ã
Bããã³ã¢ã»ã³ãã©ãŒã®éçºç°å¢ã®ãã¡ã€ã«ïŒ
/bin/as
ã¢ã»ã³ãã©
/bin/as
ã ããã©ã«ãã®åºåãã¡ã€ã«ã¯
a.out
ãšåŒã°ããŸã
/bin/ld
ãªã³ã¯ãšãã£ã¿
ïŒãªã³ã«ã¯ããã³ã³ããã¹ãã«äŸåããŠããŸãããå
ã®ç¿»èš³ãã翻蚳ãååŸããã®ã¯éåžžã«å°é£ã§ã-ãããã®ç¿»èš³ïŒ ã äžæãã¡ã€ã«ã®ç«¶åã®ãããäžåºŠã«1ã€ã®ãã£ã¬ã¯ããªã§äœæ¥ã§ãããŠãŒã¶ãŒã¯1人ã ãã§ãã
/bin/nm
ã¯ãã¢ã»ã³ãã©ãŒãŸãã¯ããŒãããŒããŒã®çµæããã·ã³ãã«ããŒãã«ãåºåããŸã
/bin/strip
ã¯ããã€ããªããäœåãªæåãåé€ããŸã
/bin/un
ã¯ãããã°ã©ã å
ã®æªå®çŸ©æåããªã¹ãããŸã
/etc/as2
ã»ã«ã³ããã¹
/etc/as2
/etc/ba
ã¢ã»ã³ãã©ãŒBïŒprog.i-> prog.sïŒ
/etc/bc
ã³ã³ãã€ã©BïŒprog.b-> prog.iïŒ
/etc/bilib
ã€ã³ã¿ããªã¿ã©ã€ãã©ãªB
/etc/brt1, /etc/brt2
ã©ã³ã¿ã€ã B
/etc/liba.a
ã«ãŒãã³
/etc/libb.a
Bã®ã«ãŒãã³ã©ã€ãã©ãª
/usr/b/rc
Bããã°ã©ã ããã€ããªã«ã³ã³ãã€ã«ããããã®ã·ã§ã«ã¹ã¯ãªããã ãã§ãŒã³ã§åäœããŸãprogram.b-> program.i-> program.s-> a.out
åçã§ã¯ãèäœæš©ã«ã€ããŠã¯ã©ãã«ãèšåããŠããŸããã ããã¥ã¡ã³ãã¯å°è±¡çãª7å·»ã®ãšãã£ã·ã§ã³
ã§ããïŒ
cm.bell-labs.com/cm/cs/who/dmr/1stEdman.html ã èŠçŽïŒ
- ããŒã ã ãŠãŒã¶ãŒãçŽæ¥åŒã³åºãããã°ã©ã
- ã·ã¹ãã ã³ãŒã« ç¹å¥ãªããã»ããµã³ãã³ããä»ããŠåŒã³åºãããŸã
- ã«ãŒãã³ã ãŠãŒã¶ãŒããã°ã©ã ã«ãã£ãŠåŒã³åºãããŸã
- ç¹å¥ãªãã¡ã€ã«
- ãã¡ã€ã«åœ¢åŒ
- éå€
ãã®åŸã®ãšãã£ã·ã§ã³ã§ã¯ãã·ã¹ãã ã¡ã³ããã³ã¹å°çšã®ç¬¬8å·»ãç»å ŽããŸããã
ããã¥ã¢ã«ã®åè«çããŒãžã¯ããã¥ã¢ã«
man page
ãšåŒã°ããã¿ã€ãã«ãç°¡åãªèª¬æãããã¹ãã圱é¿ãåãããã¡ã€ã«ã®ãªã¹ãããªã³ã¯ã蚺æããã°ãããã³äœæè
ãå«ãŸããŠããŸããã ããã¥ã¡ã³ãã¯
ed
ãšãã£ã¿ãŒã§æºåããã
roff
ããã°ã©ã ã§ãã©ãŒããããããŸããã æåã®ããŒãžã¯
cat
ããŒã å°çšã§ããã
第2çââïŒ1972幎6æïŒ
第2çââãã³ã³ãã€ã©Cã
远å ãããŸããã å¥ã®èšèªã§æžãããŠããŸãã æ°ããã³ãã³ããšã·ã¹ãã ã³ãŒã«ãç»å Ž::ïŒ
:(1), cc, echo(1), exit(1), goto(1), if(1), login(1), m6(1), man(1), mt(1), opr(1), stty(1), tmg(1), tss(1), kill(2), sleep(2), sync(2), atan(3), hypot(3), nlist(3), qsort(3), salloc(3), and sqrt(3).
:(1)
äœãããŸããã ããšããšã¯gotoã®ã©ãã«ã§ãããããã®ãããªè¡ãç¡èŠããããã«ã·ã§ã«ã«æããå¿
èŠããããŸãã
cc(1)
Cã³ã³ãã€ã©
m6(1)
æ±çšãã¯ãããã»ããµ
opr(1)
ã¯å°å·ãžã§ããéä¿¡ããŸã
tmg(1)
ã³ã³ãã€ã©ã³ã³ãã€ã©ã TMGã¯ãã³ã³ãã€ã©ãèšè¿°ããããã®èšèªã§ãã
Honeywell TSS OSãžã®ãªã¢ãŒãã¢ã¯ã»ã¹çšã®
tss(1)
ã€ã³ã¿ãŒãã§ã€ã¹ã
ä»»æã®é·ãã®æååãæäœããããã®
salloc(3)
ã©ã€ãã©ãª
第äºçã§ã¯ããã«ãããã°ã©ãã³ã°ãã¡ã¢ãªä¿è·ããããŸããã§ããããèäœæš©ãç»å ŽããŸãã
第3çïŒ1973幎2æïŒ
ãã®ããŒãžã§ã³ã¯ãPDP-11 / 45ã§åäœããã¡ã¢ãªä¿è·ãšãã®å€§å®¹éïŒæå€§256 KbïŒã®ãµããŒããåããŠããŸããã
æ°æ©èœã®ãã¡ããã€ãã©ã€ã³ãšãã«ãããã°ã©ãã³ã°ã«æ³šæãæãå¿
èŠããããŸãã ããã«ïŒ
cdb(1)
ãããã¬ãŒC
crypt(3)
ãã¹ã¯ãŒãæå·åæé
proof(1)
proto-diff
ps(8)
ããã»ã¹ãªã¹ã
sno(1)
SNOBOL IIIã³ã³ãã€ã©ãŒããã³ã€ã³ã¿ãŒããªã¿ãŒ
speak(1)
ã¹ããŒãã·ã³ã»ãµã€ã¶ãŒã å
¥åã§åèªã®ã¹ããªãŒã ãåãåããçºé³ãäžãã
typo(1)
ããã¥ã¢ã«ããã®åŒçšïŒ "...ããã¥ã¡ã³ãå
ã®ãŸããªåèªãã¿ã€ããã¹ãããã³
ãããã¯ã¹ã¬ãŽã¡ããæ€çŽ¢ããæšæºåºåã«åºåããŸã"ïŒ
yacc(6)
ã³ã³ãã€ã©ã³ã³ãã€ã©
第4çïŒ1973幎11æïŒ
ããã¯å®éã«ã¯Cã§æžãçŽããã第3çã§ããæ°ããPDP-11ã¢ãã«-/ 60ããã³/ 70ããµããŒããããŠããŸãã ããé«ã¬ãã«ã®èšèªã®éçºã«ãããã·ã¹ãã ã®ããªã¥ãŒã ã¯3åã®1å¢å ããŸããã ã³ãã³ãã«ãã€ããŒã¢ããããŒãããããèšèªBã¯é
ä¿¡ããé€å€ãããŸããã
Habréã®ãã®ããŒãã«é¢ãããã®ä»ã®äºé
habrahabr.ru/post/114588habrahabr.ru/post/126369habrahabr.ru/post/147774-éåžžã«ããæžãããŠããŸãã äž¡æ¹ã®èšäºãåããœãŒã¹ã«äŸåããŠãããããããã¹ãã¯å Žæã§ç¹°ãè¿ãããŸã
habrahabr.ru/post/46432