<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <id>tag:zed.0xff.me,2008:/posts</id>
  <link rel="alternate" type="text/html" href="http://zed.0xff.me/"/>
  <link rel="self" type="application/atom+xml" href="http://zed.0xff.me/posts.atom"/>
  <title>zed.0xff.me</title>
  <updated>2014-07-29T21:33:40Z</updated>
  <generator uri="http://enkiblog.com">Enki</generator>
  <author>
    <name>Andrey "Zed" Zaikin</name>
    <email>zed@0xff.me</email>
  </author>
  <entry>
    <id>tag:zed.0xff.me,2008:Post/93</id>
    <published>2015-01-16T12:00:00Z</published>
    <updated>2014-05-09T10:12:55Z</updated>
    <link rel="alternate" type="text/html" href="http://zed.0xff.me/2015/01/16/google-interview-1"/>
    <title>&#1058;&#1077;&#1083;&#1077;&#1092;&#1086;&#1085;&#1085;&#1086;&#1077; &#1080;&#1085;&#1090;&#1077;&#1088;&#1074;&#1100;&#1102; &#1074; Google &#8470;1</title>
    <content type="html">&lt;p&gt;(&#1085;&#1072; &#1089;&#1072;&#1084;&#1086;&#1084; &#1076;&#1077;&#1083;&#1077; &#1085;&#1077; &#1087;&#1077;&#1088;&#1074;&#1086;&#1077;, &#1072; &#1074;&#1090;&#1086;&#1088;&#1086;&#1077;, &#1087;&#1077;&#1088;&#1074;&#1086;&#1077; &#1073;&#1099;&#1083;&#1086; &#1091;&#1089;&#1087;&#1077;&#1096;&#1085;&#1086; &#1087;&#1088;&#1086;&#1074;&#1072;&#1083;&#1077;&#1085;&#1086; &#1072;&#1078; 4 &#1075;&#1086;&#1076;&#1072; &#1085;&#1072;&#1079;&#1072;&#1076;, &#1080;&#1079;-&#1079;&#1072; &#1087;&#1077;&#1088;&#1077;&#1085;&#1077;&#1088;&#1074;&#1085;&#1080;&#1095;&#1072;&#1085;&#1080;&#1103;)&lt;/p&gt;
&lt;p&gt;&#1048;&#1090;&#1072;&#1082;, &#1089;&#1085;&#1072;&#1095;&#1072;&#1083;&#1072; &#1076;&#1077;&#1074;&#1091;&#1096;&#1082;&#1072;-HR &#1084;&#1085;&#1077; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1083;&#1072; &#1077;mail, &#1074; &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1084; &#1084;&#1099; &#1076;&#1086;&#1075;&#1086;&#1074;&#1086;&#1088;&#1080;&#1083;&#1080;&#1089;&#1100; &#1082;&#1086;&#1075;&#1076;&#1072; &#1086;&#1085;&#1072; &#1084;&#1085;&#1077; &#1087;&#1086;&#1079;&#1074;&#1086;&#1085;&#1080;&#1090; &#1087;&#1086; &#1090;&#1077;&#1083;&#1077;&#1092;&#1086;&#1085;&#1091;. (&#1074;&#1089;&#1077; &#1086;&#1073;&#1097;&#1077;&#1085;&#1080;&#1077; &#1085;&#1072; &#1072;&#1085;&#1075;&#1083;&#1080;&#1081;&#1089;&#1082;&#1086;&#1084; &#1103;&#1079;&#1099;&#1082;&#1077; &#1082;&#1086;&#1085;&#1077;&#1095;&#1085;&#1086;)&lt;/p&gt;
&lt;p&gt;&#1055;&#1086;&#1090;&#1086;&#1084; &#1086;&#1085;&#1072; &#1087;&#1086;&#1079;&#1074;&#1086;&#1085;&#1080;&#1083;&#1072;, &#1089;&#1087;&#1088;&#1086;&#1089;&#1080;&#1083;&#1072; &#1082;&#1091;&#1076;&#1072; &#1103; &#1093;&#1086;&#1095;&#1091; &amp;#8211; &#1074; &#1044;&#1091;&#1073;&#1083;&#1080;&#1085; &#1080;&#1083;&#1080; &#1062;&#1102;&#1088;&#1080;&#1093;? &#1071; &#1091;&#1076;&#1080;&#1074;&#1080;&#1083;&#1089;&#1103;, &#1080;&#1073;&#1086; &#1087;&#1088;&#1086; &#1062;&#1102;&#1088;&#1080;&#1093; &#1085;&#1077; &#1079;&#1085;&#1072;&#1083; &#1085;&#1080; &#1089;&#1085;&#1086;&#1084; &#1085;&#1080; &#1076;&#1091;&#1093;&#1086;&#1084;&amp;#8230; &#1044;&#1091;&#1084;&#1072;&#1083; &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1074; &#1044;&#1091;&#1073;&#1083;&#1080;&#1085; &#1079;&#1086;&#1074;&#1091;&#1090;.&lt;/p&gt;
&lt;p&gt;&#1045;&#1097;&#1077; &#1089;&#1082;&#1072;&#1079;&#1072;&#1083;&#1072; &#1095;&#1090;&#1086; &#1091; &#1085;&#1080;&#1093; &#1077;&#1089;&#1090;&#1100; Software&#160;Engineers, &#1072; &#1077;&#1089;&#1090;&#1100; Systems&#160;Engineers, &#1082;&#1086;&#1088;&#1086;&#1095;&#1077; &#1090;&#1077;&#1093;&#1087;&#1086;&#1076;&#1076;&#1077;&#1088;&#1078;&#1082;&#1072; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;&#1086;&#1074; &#1080; &#1089;&#1077;&#1088;&#1074;&#1080;&#1089;&#1086;&#1074;. &#1057;&#1087;&#1088;&#1086;&#1089;&#1080;&#1083;&#1072; &#1084;&#1077;&#1085;&#1103; &#1082;&#1091;&#1076;&#1072; &#1103; &#1093;&#1086;&#1095;&#1091;, &#1103; &#1089;&#1082;&#1072;&#1079;&#1072;&#1083; &#1095;&#1090;&#1086; &#1085;&#1077; &#1091;&#1074;&#1077;&#1088;&#1077;&#1085;. (&#1085;&#1086; &#1074;&#1080;&#1076;&#1080;&#1084;&#1086; &#1084;&#1085;&#1077; &#1090;&#1072;&#1082;&#1080; &#1073;&#1083;&#1080;&#1078;&#1077; Systems Engineers :))&lt;/p&gt;
&lt;p&gt;&#1055;&#1086;&#1090;&#1086;&#1084; &#1085;&#1072;&#1095;&#1072;&#1083;&#1080;&#1089;&#1100; &#1090;&#1077;&#1093;&#1085;&#1080;&#1095;&#1077;&#1089;&#1082;&#1080;&#1077; &#1074;&#1086;&#1087;&#1088;&#1086;&#1089;&#1099;, &#1087;&#1086;&#1088;&#1103;&#1076;&#1082;&#1072; 20 &#1096;&#1090;&#1091;&#1082;, &#1076;&#1086;&#1074;&#1086;&#1083;&#1100;&#1085;&#1086; &#1101;&#1083;&#1077;&#1084;&#1077;&#1085;&#1090;&#1072;&#1088;&#1085;&#1099;&#1077;, &#1088;&#1072;&#1079;&#1076;&#1077;&#1083;&#1077;&#1085;&#1085;&#1099;&#1077; &#1085;&#1072; &#1088;&#1072;&#1079;&#1076;&#1077;&#1083;&#1099;:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;&#1072;&#1076;&#1084;&#1080;&#1085;&#1089;&#1090;&#1074;&#1086; *nix&lt;/li&gt;
	&lt;li&gt;&#1072;&#1083;&#1075;&#1086;&#1088;&#1080;&#1090;&#1084;&#1099;&lt;/li&gt;
	&lt;li&gt;&#1089;&#1090;&#1088;&#1091;&#1082;&#1090;&#1091;&#1088;&#1099; &#1076;&#1072;&#1085;&#1085;&#1099;&#1093;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&#1042;&#1086;&#1087;&#1088;&#1086;&#1089;&#1099; &#1080;&#1079; &#1088;&#1072;&#1079;&#1088;&#1103;&#1076;&#1072; &amp;#8220;&#1095;&#1090;&#1086; &#1090;&#1072;&#1082;&#1086;&#1077; inode&amp;#8221;, &amp;#8220;&#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1086; &#1073;&#1080;&#1090; &#1079;&#1072;&#1085;&#1080;&#1084;&#1072;&#1102;&#1090; &#1087;&#1088;&#1072;&#1074;&#1072; &#1074;&#1083;&#1072;&#1076;&#1077;&#1083;&#1100;&#1094;&#1072; &#1092;&#1072;&#1081;&#1083;&#1072; &#1074; &lt;span class="caps"&gt;UNIX&lt;/span&gt; &lt;span class="caps"&gt;ACL&lt;/span&gt;&amp;#8221;, &amp;#8220;&#1086;&#1094;&#1077;&#1085;&#1080;&#1090;&#1077; &#1074;&#1088;&#1077;&#1084;&#1103; &#1074;&#1099;&#1087;&#1086;&#1083;&#1085;&#1077;&#1085;&#1080;&#1103; qsearch &#1074; worst case &#1089;&#1083;&#1091;&#1095;&#1072;&#1077;&amp;#8221; (&#1085;&#1072; &#1087;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1080;&#1081; &#1103; &#1085;&#1077; &#1086;&#1090;&#1074;&#1077;&#1090;&#1080;&#1083;, &#1080;&#1073;&#1086; &#1074;&#1086; &#1074;&#1089;&#1103;&#1082;&#1080;&#1093; &#1101;&#1090;&#1080;&#1093; &#1074;&#1072;&#1096;&#1080;&#1093; N*log(N) &#1085;&#1077; &#1089;&#1080;&#1083;&#1077;&#1085; &#1095;&#1091;&#1090;&#1100; &#1073;&#1086;&#1083;&#1077;&#1077; &#1095;&#1077;&#1084; &#1085;&#1080;&#1082;&#1072;&#1082;)&lt;/p&gt;
&lt;p&gt;&#1042;&#1086;&#1073;&#1097;&#1077;&#1084; &#1085;&#1072; 1 &#1074;&#1086;&#1087;&#1088;&#1086;&#1089; &#1103; &#1085;&#1077; &#1086;&#1090;&#1074;&#1077;&#1090;&#1080;&#1083; &#1089;&#1086;&#1074;&#1089;&#1077;&#1084;, &#1077;&#1097;&#1077; &#1085;&#1072; 1 &#1086;&#1090;&#1074;&#1077;&#1090;&#1080;&#1083; &#1085;&#1072; 2/3, &#1072; &#1085;&#1072; &#1074;&#1089;&#1077; &#1086;&#1089;&#1090;&#1072;&#1083;&#1100;&#1085;&#1099;&#1077; &#1086;&#1090;&#1074;&#1077;&#1090;&#1080;&#1083; &#1085;&#1072; 97-110% ;)&lt;/p&gt;
&lt;p&gt;HR &#1089;&#1082;&#1072;&#1079;&#1072;&#1083;&#1072; &#1095;&#1090;&#1086; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1089;&#1090; &#1084;&#1086;&#1080; &#1086;&#1090;&#1074;&#1077;&#1090;&#1099; &#1080; &#1088;&#1077;&#1079;&#1102;&#1084;&#1077; &#1076;&#1072;&#1083;&#1100;&#1096;&#1077; &#1087;&#1086; &#1082;&#1086;&#1085;&#1074;&#1077;&#1081;&#1077;&#1088;&#1091; &#1080; &#1089;&#1086; &#1084;&#1085;&#1086;&#1081; &#1089;&#1074;&#1103;&#1078;&#1091;&#1090;&#1089;&#1103;..&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:zed.0xff.me,2008:Post/94</id>
    <published>2014-07-29T21:33:00Z</published>
    <updated>2014-07-29T21:33:40Z</updated>
    <link rel="alternate" type="text/html" href="http://zed.0xff.me/2014/07/29/dnevnik-bortinzhenera-aviakompanii-b-y"/>
    <title>&#1044;&#1085;&#1077;&#1074;&#1085;&#1080;&#1082; &#1073;&#1086;&#1088;&#1090;&#1080;&#1085;&#1078;&#1077;&#1085;&#1077;&#1088;&#1072; &#1072;&#1074;&#1080;&#1072;&#1082;&#1086;&#1084;&#1087;&#1072;&#1085;&#1080;&#1080; "B***Y"</title>
    <content type="html">&lt;p&gt;(&#1074;&#1089;&#1077; &#1087;&#1077;&#1088;&#1089;&#1086;&#1085;&#1072;&#1078;&#1080; &#1074;&#1099;&#1084;&#1099;&#1096;&#1083;&#1077;&#1085;&#1099;, &#1074;&#1089;&#1077; &#1089;&#1086;&#1074;&#1087;&#1072;&#1076;&#1077;&#1085;&#1080;&#1103; &#1089; &#1088;&#1077;&#1072;&#1083;&#1100;&#1085;&#1099;&#1084;&#1080; &#1083;&#1080;&#1095;&#1085;&#1086;&#1089;&#1090;&#1103;&#1084;&#1080; &#1089;&#1083;&#1091;&#1095;&#1072;&#1081;&#1085;&#1099;)&lt;/p&gt;
&lt;p&gt;&#1048;&#1085;&#1086;&#1075;&#1076;&#1072; &#1087;&#1080;&#1083;&#1086;&#1090;&#1099; &#1086;&#1073;&#1088;&#1072;&#1097;&#1072;&#1102;&#1090;&#1089;&#1103; &#1082;&#1086; &#1084;&#1085;&#1077;&lt;br /&gt;
&#1055;: &#1040; &#1074;&#1086;&#1090; &#1077;&#1089;&#1083;&#1080; &#1084;&#1099; &#1087;&#1086;&#1074;&#1077;&#1088;&#1085;&#1077;&#1084; &#1089;&#1077;&#1081;&#1095;&#1072;&#1089; &#1085;&#1072; 17 &#1075;&#1088;&#1072;&#1076;&#1091;&#1089;&#1086;&#1074; &#1074;&#1083;&#1077;&#1074;&#1086;, &#1090;&#1086; &#1091; &#1085;&#1072;&#1089; &#1082;&#1088;&#1099;&#1083;&#1086; &#1085;&#1077; &#1086;&#1090;&#1074;&#1072;&#1083;&#1080;&#1090;&#1089;&#1103;?&lt;br /&gt;
&#1071;: &#1061;&#1086;&#1088;&#1086;&#1096;&#1086; &#1095;&#1090;&#1086; &#1089;&#1087;&#1088;&#1086;&#1089;&#1080;&#1083;&#1080;. &#1054;&#1090;&#1074;&#1072;&#1083;&#1080;&#1090;&#1089;&#1103;. &#1044;&#1072;&#1074;&#1072;&#1081;&#1090;&#1077; &#1089;&#1077;&#1081;&#1095;&#1072;&#1089; &#1084;&#1086;&#1080; &#1088;&#1077;&#1073;&#1103;&#1090;&#1072; &#1074;&#1099;&#1081;&#1076;&#1091;&#1090; &#1085;&#1072; &#1082;&#1088;&#1099;&#1083;&#1086;, &#1089;&#1091;&#1087;&#1077;&#1088;&#1082;&#1083;&#1077;&#1077;&#1084; &#1085;&#1072;&#1084;&#1072;&#1078;&#1091;&#1090;, &#1072; &#1074;&#1099; &#1087;&#1086;&#1090;&#1086;&#1084; &#1074;&#1087;&#1088;&#1072;&#1074;&#1086; &#1087;&#1086;&#1074;&#1077;&#1088;&#1085;&#1077;&#1090;&#1077;, &#1080; &#1087;&#1086;&#1088;&#1077;&#1079;&#1095;&#1077;! &#1050;&#1088;&#1091;&#1078;&#1086;&#1082; &#1085;&#1072; &#1084;&#1077;&#1089;&#1090;&#1077; &#1089;&#1076;&#1077;&#1083;&#1072;&#1077;&#1084;, &#1079;&#1072;&#1086;&#1076;&#1085;&#1086; &#1080; &#1082;&#1088;&#1099;&#1083;&#1086; &#1087;&#1086;&#1076;&#1082;&#1083;&#1077;&#1080;&#1084;, &#1080; &#1087;&#1086;&#1074;&#1077;&#1088;&#1085;&#1077;&#1084; &#1082;&#1091;&#1076;&#1072; &#1085;&#1072;&#1076;&#1086;.&lt;br /&gt;
&#1055;: &#1054;&#1050;&lt;/p&gt;
&lt;p&gt;&#1048;&#1085;&#1086;&#1075;&#1076;&#1072; &#1087;&#1088;&#1080;&#1093;&#1086;&#1076;&#1103;&#1090; &#1089;&#1087;&#1080;&#1089;&#1082;&#1080; &#1087;&#1072;&#1089;&#1089;&#1072;&#1078;&#1080;&#1088;&#1086;&#1074; &#1074;&#1086;&#1090; &#1090;&#1072;&#1082;&#1086;&#1075;&#1086; &#1074;&#1080;&#1076;&#1072;:&lt;br /&gt;
1. &#1048;&#1074;&#1072;&#1085;&#1086;&#1074; &#1040;.&#1040;., &#1084;&#1091;&#1078;., &#1052;&#1086;&#1089;&#1082;&#1074;&#1072;&lt;br /&gt;
2. &#1057;&#1080;&#1076;&#1086;&#1088;&#1086;&#1074;&#1072; &#1045;.&#1048;., &#1078;&#1077;&#1085;., &#1057;.&#1055;&#1077;&#1090;&#1077;&#1088;&#1073;&#1091;&#1088;&#1075;&lt;br /&gt;
3. &#1066;&#1086;&#1088;&#1083;&#1097;&#1093;&#1078; &#1052;.&#1060;.&#1059;., &#1072;&#1098;&#1099;., &#1040;&#1083;&#1100;&#1092;&#1072;-&#1062;&#1077;&#1085;&#1090;&#1072;&#1074;&#1088;&#1072;&lt;br /&gt;
4. &#1052;&#1072;&#1082;&#1072;&#1088;&#1086;&#1074; &#1048;.&#1040;., &#1084;&#1091;&#1078;., &#1050;&#1091;&#1088;&#1075;&#1072;&#1085;&lt;br /&gt;
&#1040; &#1085;&#1072; &#1084;&#1077;&#1089;&#1090;&#1077; &#1087;&#1072;&#1089;&#1089;&#1072;&#1078;&#1080;&#1088;&#1072; &#8470;3 &#1083;&#1080;&#1073;&#1086; &#1087;&#1091;&#1089;&#1090;&#1086;, &#1083;&#1080;&#1073;&#1086; &#1086;&#1073;&#1099;&#1095;&#1085;&#1099;&#1081; &#1095;&#1077;&#1083;&#1086;&#1074;&#1077;&#1082; &#1089;&#1080;&#1076;&#1080;&#1090;. :(&lt;br /&gt;
&#1042;&#1086;&#1090; &#1090;&#1072;&#1082;&#1080;&#1077; &#1086;&#1085;&#1080;, &#1087;&#1086;&#1089;&#1090;&#1072;&#1074;&#1097;&#1080;&#1082;&#1080; &#1076;&#1072;&#1085;&#1085;&#1099;&#1093; &#1086; &#1087;&#1072;&#1089;&#1089;&#1072;&#1078;&#1080;&#1088;&#1072;&#1093;.&lt;/p&gt;
&lt;p&gt;&#1045;&#1089;&#1090;&#1100; &#1091; &#1085;&#1072;&#1089; &#1080; &#1089;&#1090;&#1102;&#1072;&#1088;&#1076;&#1077;&#1089;&#1089;&#1099;, &#1082;&#1086;&#1080; &#1086;&#1073;&#1103;&#1079;&#1072;&#1085;&#1099; &#1087;&#1072;&#1089;&#1089;&#1072;&#1078;&#1080;&#1088;&#1086;&#1074; &#1091;&#1089;&#1087;&#1086;&#1082;&#1072;&#1080;&#1074;&#1072;&#1090;&#1100;, &#1074;&#1089;&#1103;&#1095;&#1077;&#1089;&#1082;&#1080;&#1077; &#1080;&#1093; &#1087;&#1086;&#1090;&#1088;&#1077;&#1073;&#1085;&#1086;&#1089;&#1090;&#1080; &#1091;&#1076;&#1086;&#1074;&#1083;&#1077;&#1090;&#1074;&#1086;&#1088;&#1103;&#1090;&#1100;, &#1072; &#1090;&#1072;&#1082;&#1078;&#1077; &#1073;&#1099;&#1090;&#1100; &#1089;&#1074;&#1103;&#1079;&#1091;&#1102;&#1097;&#1080;&#1084; &#1079;&#1074;&#1077;&#1085;&#1086;&#1084; &#1084;&#1077;&#1078;&#1076;&#1091; &#1087;&#1072;&#1089;&#1089;&#1072;&#1078;&#1080;&#1088;&#1072;&#1084;&#1080; &#1080; &#1101;&#1082;&#1080;&#1087;&#1072;&#1078;&#1077;&#1084;.&lt;br /&gt;
&#1055;&#1072;&#1089;&#1089;&#1072;&#1078;&#1080;&#1088;&#1099; &#1073;&#1099;&#1074;&#1072;&#1102;&#1090; &#1088;&#1072;&#1079;&#1085;&#1099;&#1077;. &#1054;&#1076;&#1080;&#1085; &#1085;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088; &#1075;&#1083;&#1103;&#1085;&#1077;&#1090; &#1074; &#1080;&#1083;&#1083;&#1102;&#1084;&#1080;&#1085;&#1072;&#1090;&#1086;&#1088;, &#1072; &#1090;&#1072;&#1084; &#1082;&#1088;&#1099;&#1083;&#1086; &#1086;&#1090;&#1074;&#1072;&#1083;&#1080;&#1074;&#1072;&#1090;&#1100;&#1089;&#1103; &#1085;&#1072;&#1095;&#1080;&#1085;&#1072;&#1077;&#1090;, &#1080;&#1083;&#1080; &#1077;&#1097;&#1077; &#1082;&#1072;&#1082;&#1072;&#1103; &#1085;&#1072;&#1087;&#1072;&#1089;&#1090;&#1100;, &#1090;&#1072;&#1082; &#1086;&#1085; &#1090;&#1080;&#1093;&#1086; &#1087;&#1086;&#1076;&#1079;&#1086;&#1074;&#1077;&#1090; &#1089;&#1090;&#1102;&#1072;&#1088;&#1076;&#1077;&#1089;&#1089;&#1091;, &#1087;&#1086;&#1082;&#1072;&#1078;&#1077;&#1090; &#1087;&#1072;&#1083;&#1100;&#1095;&#1080;&#1082;&#1086;&#1084; &#1074; &#1086;&#1082;&#1085;&#1086;, &#1089;&#1090;&#1102;&#1072;&#1088;&#1076;&#1077;&#1089;&#1089;&#1072; &#1087;&#1077;&#1088;&#1077;&#1076;&#1072;&#1089;&#1090; &#1073;&#1099;&#1089;&#1090;&#1088;&#1077;&#1085;&#1100;&#1082;&#1086; &#1101;&#1082;&#1080;&#1087;&#1072;&#1078;&#1091;, &#1084;&#1086;&#1080; &#1088;&#1077;&#1073;&#1103;&#1090;&#1072; &#1074;&#1099;&#1073;&#1077;&#1075;&#1091;&#1090;, &#1087;&#1086;&#1076;&#1082;&#1083;&#1077;&#1103;&#1090; &#1090;&#1072;&#1084; &#1095;&#1077;&#1075;&#1086;&#1085;&#1080;&#1090;&#1100; &#1080;&#1079;&#1086;&#1083;&#1077;&#1085;&#1090;&#1086;&#1081;, &#1084;&#1077;&#1073;&#1077;&#1083;&#1100;&#1085;&#1099;&#1084; &#1089;&#1090;&#1077;&#1087;&#1083;&#1077;&#1088;&#1086;&#1084; &#1087;&#1086;&#1076;&#1089;&#1090;&#1077;&#1087;&#1083;&#1080;&#1088;&#1091;&#1102;&#1090; &#1080; &#1074;&#1089;&#1077; &#1054;&#1050;. &#1051;&#1077;&#1090;&#1080;&#1084; &#1076;&#1072;&#1083;&#1100;&#1096;&#1077;. &#1042;&#1089;&#1077; &#1076;&#1086;&#1074;&#1086;&#1083;&#1100;&#1085;&#1099;. &#1042;&#1085;&#1080;&#1084;&#1072;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1084;&#1091; &#1087;&#1072;&#1089;&#1089;&#1072;&#1078;&#1080;&#1088;&#1091; &#1073;&#1077;&#1089;&#1087;&#1083;&#1072;&#1090;&#1085;&#1099;&#1081; &#1085;&#1072;&#1087;&#1080;&#1090;&#1086;&#1082;.&lt;br /&gt;
&#1040; &#1076;&#1088;&#1091;&#1075;&#1086;&#1081;, &#1085;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;, &#1091;&#1074;&#1080;&#1076;&#1080;&#1090; &#1095;&#1090;&#1086; &#1090;&#1091;&#1088;&#1073;&#1080;&#1085;&#1072; &#1075;&#1086;&#1088;&#1080;&#1090;, &#1080; &#1076;&#1072;&#1074;&#1072;&#1081; &#1086;&#1088;&#1072;&#1090;&#1100; &#1073;&#1083;&#1072;&#1075;&#1080;&#1084; &#1084;&#1072;&#1090;&#1086;&#1084; &#1085;&#1072; &#1074;&#1077;&#1089;&#1100; &#1089;&#1072;&#1083;&#1086;&#1085;. &#1055;&#1088;&#1080;&#1093;&#1086;&#1076;&#1080;&#1090;&#1089;&#1103; &#1073;&#1077;&#1076;&#1085;&#1099;&#1084; &#1089;&#1090;&#1102;&#1072;&#1088;&#1076;&#1077;&#1089;&#1089;&#1072;&#1084; &#1086;&#1090;&#1076;&#1091;&#1074;&#1072;&#1090;&#1100;&#1089;&#1103;, &#1074;&#1088;&#1072;&#1090;&#1100; &#1095;&#1090;&#1086; &#1101;&#1090;&#1086; &#1086;&#1085; &#1085;&#1077; &#1076;&#1074;&#1080;&#1075;&#1072;&#1090;&#1077;&#1083;&#1100; &#1075;&#1086;&#1088;&#1080;&#1090;, &#1072; &#1101;&#1090;&#1086; &#1087;&#1088;&#1072;&#1079;&#1076;&#1085;&#1080;&#1095;&#1085;&#1099;&#1081; &#1089;&#1072;&#1083;&#1102;&#1090; &#1074; &#1095;&#1077;&#1089;&#1090;&#1100; &#1076;&#1085;&#1103; &#1088;&#1086;&#1078;&#1076;&#1077;&#1085;&#1080;&#1103; &#1074;&#1090;&#1086;&#1088;&#1086;&#1075;&#1086; &#1087;&#1080;&#1083;&#1086;&#1090;&#1072;, &#1091;&#1088;&#1072;-&#1091;&#1088;&#1072;! &#1048; &#1076;&#1072;&#1074;&#1072;&#1081; &#1093;&#1086;&#1088;&#1086;&#1074;&#1086;&#1076;&#1099; &#1074;&#1086;&#1076;&#1080;&#1090;&#1100;! &#1042;&#1086;&#1073;&#1097;&#1077;&#1084;, &#1091;&#1089;&#1087;&#1086;&#1082;&#1086;&#1080;&#1083;&#1080;.&lt;br /&gt;
&#1040; &#1090;&#1091;&#1088;&#1073;&#1080;&#1085;&#1072;? &#1053;&#1091; &#1087;&#1086;&#1075;&#1086;&#1088;&#1080;&#1090; &#1080; &#1087;&#1077;&#1088;&#1077;&#1089;&#1090;&#1072;&#1085;&#1077;&#1090;, &#1095;&#1072;&#1081; &#1085;&#1077; &#1087;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1103;&#1103;, &#1091; &#1085;&#1072;&#1089; &#1077;&#1097;&#1077; 5 &#1096;&#1090;&#1091;&#1082; &#1077;&#1089;&#1090;&#1100; )))&lt;/p&gt;
&lt;p&gt;&#1040; &#1085;&#1077;&#1076;&#1072;&#1074;&#1085;&#1086; &#1084;&#1099; &#1085;&#1072; &#1083;&#1077;&#1090;&#1091; &#1080;&#1079;&#1073;&#1072;&#1074;&#1080;&#1083;&#1080;&#1089;&#1100; &#1086;&#1090; &#1082;&#1072;&#1088;&#1073;&#1102;&#1088;&#1072;&#1090;&#1086;&#1088;&#1072;!!! &#1042;&#1086;&#1090;&#1082;&#1085;&#1091;&#1083;&#1080; &#1074;&#1084;&#1077;&#1089;&#1090;&#1086; &#1085;&#1077;&#1075;&#1086; &#1085;&#1086;&#1074;&#1077;&#1085;&#1100;&#1082;&#1080;&#1081; &#1080;&#1085;&#1078;&#1077;&#1082;&#1090;&#1086;&#1088; (&#1074;&#1079;&#1103;&#1083;&#1080; &#1087;&#1086;&#1076;&#1077;&#1096;&#1077;&#1074;&#1082;&#1077; &#1085;&#1072; &#1072;&#1074;&#1090;&#1086;&#1088;&#1099;&#1085;&#1082;&#1077;, &#1086;&#1090; &#1042;&#1040;&#1047; 21067, 2011 &#1075;.&#1074;.)&lt;br /&gt;
&#1057;&#1086;&#1074;&#1089;&#1077;&#1084; &#1076;&#1088;&#1091;&#1075;&#1080;&#1077; &#1086;&#1097;&#1091;&#1097;&#1077;&#1085;&#1080;&#1103;!&lt;br /&gt;
&#1050;&#1072;&#1082;&#1086;&#1075;&#1086; &#1093;&#1088;&#1077;&#1085;&#1072; &#1076;&#1077;&#1083;&#1072;&#1083; &#1082;&#1072;&#1088;&#1073;&#1102;&#1088;&#1072;&#1090;&#1086;&#1088; &#1085;&#1072; &#1089;&#1072;&#1084;&#1086;&#1083;&#1077;&#1090;&#1077;&amp;#8230; &#1091;&#1084;&#1072; &#1085;&#1077; &#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1091;, &#1074;&#1086;&#1090; &#1090;&#1072;&#1082; &#1074;&#1086;&#1090; &#1080;&#1089;&#1090;&#1086;&#1088;&#1080;&#1095;&#1077;&#1089;&#1082;&#1080; &#1089;&#1083;&#1086;&#1078;&#1080;&#1083;&#1086;&#1089;&#1100;.&lt;br /&gt;
&#1069;&#1090;&#1086; &#1103; &#1077;&#1097;&#1077; &#1084;&#1086;&#1083;&#1095;&#1091; &#1086; &#1090;&#1086;&#1084; &#1095;&#1090;&#1086; &#1082;&#1086;&#1075;&#1076;&#1072; &#1103; &#1087;&#1088;&#1080;&#1096;&#1077;&#1083; &#1085;&#1072; &#1101;&#1090;&#1086;&#1090; &#1089;&#1072;&#1084;&#1086;&#1083;&#1077;&#1090;, &#1090;&#1091;&#1090; &#1090;&#1091;&#1088;&#1073;&#1080;&#1085;&#1099; &#1074;&#1086;&#1086;&#1073;&#1097;&#1077; &#1082;&#1088;&#1091;&#1090;&#1080;&#1083;&#1080; &#1089;&#1087;&#1077;&#1094;&#1080;&#1072;&#1083;&#1100;&#1085;&#1086; &#1086;&#1073;&#1091;&#1095;&#1077;&#1085;&#1085;&#1099;&#1077; &#1073;&#1077;&#1083;&#1082;&#1080;! O_O &#1042;&#1086;&#1085;&#1103;&#1103;&#1103;&#1103;&#1083;&#1086;&#1086;&#1086;&#1086;&#1086;&amp;#8230;. &#1041;&#1086;&#769;&#1083;&#1100;&#1096;&#1072;&#1103; &#1095;&#1072;&#1089;&#1090;&#1100; &#1073;&#1072;&#1075;&#1072;&#1078;&#1085;&#1086;&#1075;&#1086; &#1086;&#1090;&#1089;&#1077;&#1082;&#1072; &#1073;&#1099;&#1083;&#1072; &#1079;&#1072;&#1073;&#1080;&#1090;&#1072; &#1082;&#1086;&#1088;&#1084;&#1086;&#1084; &#1076;&#1083;&#1103; &#1073;&#1077;&#1083;&#1086;&#1082;. &#1054;&#1085;&#1080; &#1077;&#1097;&#1077; &#1080; &#1076;&#1086;&#1093;&#1083;&#1080; &#1087;&#1077;&#1088;&#1080;&#1086;&#1076;&#1080;&#1095;&#1077;&#1089;&#1082;&#1080;, &#1072; &#1076;&#1088;&#1091;&#1075;&#1080;&#1077; &#1088;&#1072;&#1079;&#1084;&#1085;&#1086;&#1078;&#1072;&#1083;&#1080;&#1089;&#1100;. &#1055;&#1088;&#1080;&#1093;&#1086;&#1076;&#1080;&#1083;&#1086;&#1089;&#1100; &#1082;&#1072;&#1082;-&#1090;&#1086; &#1087;&#1086;&#1076;&#1076;&#1077;&#1088;&#1078;&#1080;&#1074;&#1072;&#1090;&#1100; &#1073;&#1072;&#1083;&#1072;&#1085;&#1089; &#1088;&#1086;&#1078;&#1076;&#1072;&#1077;&#1084;&#1086;&#1089;&#1090;&#1080;-&#1089;&#1084;&#1077;&#1088;&#1090;&#1085;&#1086;&#1089;&#1090;&#1080; &#1073;&#1077;&#1083;&#1086;&#1082;, &#1091;&#1090;&#1080;&#1083;&#1080;&#1079;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1080;&#1093; &#1082;&#1072;&#1082;&#1072;&#1096;&#1082;&#1080; &#1080; &#1090;&#1077;&#1083;&#1100;&#1094;&#1072;, &#1089;&#1083;&#1077;&#1076;&#1080;&#1090;&#1100; &#1079;&#1072; &#1090;&#1077;&#1084; &#1095;&#1090;&#1086;&#1073;&#1099; &#1086;&#1085;&#1080; &#1085;&#1077; &#1073;&#1077;&#1075;&#1072;&#1083;&#1080; &#1087;&#1086; &#1089;&#1072;&#1083;&#1086;&#1085;&#1091; &#1080; &#1085;&#1077; &#1082;&#1091;&#1089;&#1072;&#1083;&#1080; &#1087;&#1072;&#1089;&#1089;&#1072;&#1078;&#1080;&#1088;&#1086;&#1074;&amp;#8230;&lt;br /&gt;
&#1042;&#1086;&#1073;&#1097;&#1077;&#1084;, &#1080;&#1085;&#1078;&#1077;&#1082;&#1090;&#1086;&#1088; &amp;#8211; &#1101;&#1090;&#1086; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086; &#1084;&#1072;&#1085;&#1085;&#1072; &#1085;&#1077;&#1073;&#1077;&#1089;&#1085;&#1072;&#1103;!&lt;/p&gt;
&lt;p&gt;&#1058;&#1091;&#1072;&#1083;&#1077;&#1090; &#1074; &#1089;&#1072;&#1084;&#1086;&#1083;&#1077;&#1090;&#1077; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086; &#1082;&#1083;&#1072;&#1089;&#1089;! &#1054;&#1095;&#1077;&#1085;&#1100; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086;&#1088;&#1085;&#1099;&#1081; (0.5&#1093;0.5&#1093;1.5&#1084;) &#1080; &#1084;&#1085;&#1086;&#1075;&#1086;&#1092;&#1091;&#1085;&#1082;&#1094;&#1080;&#1086;&#1085;&#1072;&#1083;&#1100;&#1085;&#1099;&#1081; (&#1087;&#1086;&#1076;&#1076;&#1077;&#1088;&#1078;&#1080;&#1074;&#1072;&#1102;&#1090;&#1089;&#1103; &#1092;&#1091;&#1085;&#1082;&#1094;&#1080;&#1080; PP &#1080; KK). &#1045;&#1089;&#1090;&#1100; &#1086;&#1076;&#1080;&#1085; &#1085;&#1077;&#1073;&#1086;&#1083;&#1100;&#1096;&#1086;&#1081; &#1085;&#1102;&#1072;&#1085;&#1089;. &#1057; &#1074;&#1077;&#1088;&#1086;&#1103;&#1090;&#1085;&#1086;&#1089;&#1090;&#1100;&#1102; 10% &#1085;&#1077;&#1079;&#1072;&#1076;&#1072;&#1095;&#1083;&#1080;&#1074;&#1086;&#1075;&#1086; &#1087;&#1072;&#1089;&#1089;&#1072;&#1078;&#1080;&#1088;&#1072; &#1085;&#1072;&#1084;&#1077;&#1088;&#1090;&#1074;&#1086; &#1087;&#1088;&#1080;&#1089;&#1072;&#1089;&#1099;&#1074;&#1072;&#1077;&#1090; &#1082; &#1090;&#1086;&#1081; &#1089;&#1072;&#1084;&#1086;&#1081; &#1076;&#1099;&#1088;&#1082;&#1077;(&#1076;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077;&#1084; 4.04 psi), &#1072; &#1089; &#1076;&#1088;&#1091;&#1075;&#1086;&#1081; &#1089;&#1090;&#1086;&#1088;&#1086;&#1085;&#1099;, &#1089; &#1074;&#1077;&#1088;&#1086;&#1103;&#1090;&#1085;&#1086;&#1089;&#1090;&#1100;&#1102; &#1090;&#1077; &#1078;&#1077; 10% &#1086;&#1090;&#1090;&#1091;&#1076;&#1072; &#1087;&#1088;&#1103;&#1084;&#1086; &#1085;&#1072; &#1087;&#1072;&#1089;&#1089;&#1072;&#1078;&#1080;&#1088;&#1072; &#1085;&#1072;&#1095;&#1080;&#1085;&#1072;&#1077;&#1090; &#1092;&#1086;&#1085;&#1090;&#1072;&#1085;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; &#1076;&#1072;&#1074;&#1083;&#1077;&#1085;&#1080;&#1077;&#1084; 5.05 psi &#1074;&#1089;&#1077; &#1077;&#1075;&#1086; &#1091;&#1078;&#1072;&#1089;&#1085;&#1086;&#1077; &#1089;&#1086;&#1076;&#1077;&#1088;&#1078;&#1080;&#1084;&#1086;&#1077;&amp;#8230;&lt;br /&gt;
&#1053;&#1086;, &#1082;&#1072;&#1082; &#1086;&#1090;&#1084;&#1077;&#1090;&#1080;&#1083;&#1080; 80% &#1087;&#1072;&#1089;&#1089;&#1072;&#1078;&#1080;&#1088;&#1086;&#1074;: &amp;#8220;&#1091; &#1085;&#1072;&#1089; &#1074;&#1089;&#1077; &#1087;&#1086;&#1083;&#1091;&#1095;&#1080;&#1083;&#1086;&#1089;&#1100;&amp;#8221;, &#1090;&#1072;&#1082; &#1095;&#1090;&#1086; &#1085;&#1077; &#1088;&#1077;&#1084;&#1086;&#1085;&#1090; &#1090;&#1091;&#1072;&#1083;&#1077;&#1090;&#1072; &#1087;&#1086;&#1082;&#1072; &#1085;&#1077; &#1079;&#1072;&#1084;&#1086;&#1088;&#1072;&#1095;&#1080;&#1074;&#1072;&#1077;&#1084;&#1089;&#1103;.&lt;br /&gt;
&#1055;&#1086;&#1076;&#1072;&#1074;&#1083;&#1103;&#1102;&#1097;&#1077;&#1077; &#1073;&#1086;&#1083;&#1100;&#1096;&#1080;&#1085;&#1089;&#1090;&#1074;&#1086; &#1076;&#1086;&#1074;&#1086;&#1083;&#1100;&#1085;&#1086; &amp;#8211; &#1079;&#1085;&#1072;&#1095;&#1080;&#1090; &#1074;&#1089;&#1077; &#1091; &#1085;&#1072;&#1089; &#1093;&#1086;&#1088;&#1086;&#1096;&#1086;!!&lt;/p&gt;
&lt;p&gt;&#1040;&#1074;&#1080;&#1072;&#1082;&#1086;&#1084;&#1087;&#1072;&#1085;&#1080;&#1103; &#1091; &#1085;&#1072;&#1089; &#1086;&#1095;&#1077;&#1085;&#1100; &#1087;&#1088;&#1080;&#1073;&#1099;&#1083;&#1100;&#1085;&#1072;&#1103;. &#1055;&#1086;&#1090;&#1086;&#1084;&#1091; &#1095;&#1090;&#1086; &#1084;&#1099; &#1089;&#1090;&#1088;&#1077;&#1084;&#1080;&#1084;&#1089;&#1103; &#1087;&#1077;&#1088;&#1077;&#1074;&#1077;&#1079;&#1090;&#1080; &#1074;&#1089;&#1077;&#1093; &#1087;&#1072;&#1089;&#1089;&#1072;&#1078;&#1080;&#1088;&#1086;&#1074;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1093;&#1086;&#1090;&#1103;&#1090; &#1083;&#1077;&#1090;&#1077;&#1090;&#1100;. &#1055;&#1086;&#1101;&#1090;&#1086;&#1084;&#1091; &#1090;&#1077;&#1082;&#1091;&#1097;&#1080;&#1084; &#1088;&#1077;&#1084;&#1086;&#1085;&#1090;&#1086;&#1084; &#1080; &#1076;&#1072;&#1078;&#1077; &#1091;&#1089;&#1086;&#1074;&#1077;&#1088;&#1096;&#1077;&#1085;&#1089;&#1090;&#1074;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077;&#1084; &#1087;&#1088;&#1080;&#1093;&#1086;&#1076;&#1080;&#1090;&#1089;&#1103; &#1079;&#1072;&#1085;&#1080;&#1084;&#1072;&#1090;&#1100;&#1089;&#1103; &#1074; &#1087;&#1088;&#1103;&#1084;&#1086;&#1084; &#1089;&#1084;&#1099;&#1089;&#1083;&#1077; &amp;#8220;&#1085;&#1072; &#1083;&#1077;&#1090;&#1091;&amp;#8221;.&lt;br /&gt;
&#1061;&#1086;&#1088;&#1086;&#1096;&#1086; &#1095;&#1090;&#1086; &#1091; &#1085;&#1072;&#1089; &#1077;&#1089;&#1090;&#1100; &#1082;&#1086;&#1084;&#1072;&#1085;&#1076;&#1072; &#1073;&#1077;&#1089;&#1089;&#1090;&#1088;&#1072;&#1096;&#1085;&#1099;&#1093; &#1080;&#1085;&#1078;&#1077;&#1085;&#1077;&#1088;&#1086;&#1074;-&#1084;&#1077;&#1093;&#1072;&#1085;&#1080;&#1082;&#1086;&#1074;. &#1053;&#1086; &#1085;&#1077; &#1074;&#1089;&#1077;&#1075;&#1076;&#1072; &#1093;&#1086;&#1088;&#1086;&#1096;&#1086; &#1095;&#1090;&#1086; &#1073;&#1077;&#1089;&#1089;&#1090;&#1088;&#1072;&#1096;&#1085;&#1099;&#1093;.&lt;/p&gt;
&lt;p&gt;&#1053;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;, &#1080;&#1085;&#1078;&#1077;&#1085;&#1077;&#1088; &#1087;&#1086; &#1087;&#1088;&#1080;&#1073;&#1086;&#1088;&#1072;&#1084; &amp;#8211; &#1086;&#1095;&#1077;&#1085;&#1100; &#1090;&#1086;&#1083;&#1082;&#1086;&#1074;&#1099;&#1081; &#1087;&#1072;&#1088;&#1077;&#1085;&#1100;. &#1041;&#1083;&#1072;&#1075;&#1086;&#1076;&#1072;&#1088;&#1103; &#1077;&#1084;&#1091; &#1084;&#1099; &#1085;&#1072;&#1082;&#1086;&#1085;&#1077;&#1094;-&#1090;&#1086; &#1084;&#1086;&#1078;&#1077;&#1084; &#1074; &#1088;&#1077;&#1072;&#1083;&#1100;&#1085;&#1086;&#1084; &#1074;&#1088;&#1077;&#1084;&#1077;&#1085;&#1080; &#1074;&#1080;&#1076;&#1077;&#1090;&#1100; &#1089;&#1082;&#1086;&#1083;&#1100;&#1082;&#1086; &#1091; &#1085;&#1072;&#1089; &#1075;&#1086;&#1088;&#1102;&#1095;&#1077;&#1075;&#1086; &#1074; &#1073;&#1072;&#1082;&#1072;&#1093;, &#1079;&#1072;&#1088;&#1103;&#1076; &#1072;&#1082;&#1082;&#1091;&#1084;&#1091;&#1083;&#1103;&#1090;&#1086;&#1088;&#1086;&#1074;, &#1090;&#1077;&#1082;&#1091;&#1097;&#1091;&#1102; &#1089;&#1082;&#1086;&#1088;&#1086;&#1089;&#1090;&#1100;, &#1080; &#1076;&#1072;&#1078;&#1077; &#1074;&#1099;&#1087;&#1091;&#1089;&#1082;&#1072;&#1090;&#1100; &#1096;&#1072;&#1089;&#1089;&#1080;!! (&#1088;&#1072;&#1085;&#1100;&#1096;&#1077; &#1096;&#1072;&#1089;&#1089;&#1080; &#1073;&#1099;&#1083;&#1086; &#1082;&#1072;&#1082; &#1091; &amp;#8220;&#1082;&#1091;&#1082;&#1091;&#1088;&#1091;&#1079;&#1085;&#1080;&#1082;&#1072;&amp;#8221; &#1085;&#1072;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;)&lt;br /&gt;
&#1058;&#1072;&#1082; &#1074;&#1086;&#1090;, &#1085;&#1077;&#1076;&#1072;&#1074;&#1085;&#1086; &#1086;&#1085; &#1087;&#1088;&#1080;&#1076;&#1077;&#1083;&#1072;&#1083; &#1082;&#1083;&#1072;&#1089;&#1089;&#1085;&#1091;&#1102; &#1096;&#1090;&#1091;&#1082;&#1091;, &#1072;&#1083;&#1100;&#1090;&#1080;&#1084;&#1077;&#1090;&#1088; &#1085;&#1072;&#1079;&#1099;&#1074;&#1072;&#1077;&#1090;&#1089;&#1103;. &amp;#8220;&#1058;&#1077;&#1087;&#1077;&#1088;&#1100; &#1084;&#1099; &#1084;&#1086;&#1078;&#1077;&#1084; &#1074;&#1089;&#1077;&#1075;&#1076;&#1072; &#1079;&#1085;&#1072;&#1090;&#1100; &#1085;&#1072;&#1096;&#1091; &#1074;&#1099;&#1089;&#1086;&#1090;&#1091; &#1087;&#1086;&#1083;&#1077;&#1090;&#1072;! &#1040; &#1085;&#1077; &#1089;&#1087;&#1088;&#1072;&#1096;&#1080;&#1074;&#1072;&#1090;&#1100; &#1103;&#1079;&#1099;&#1082;&#1086;&#1084; &#1078;&#1077;&#1089;&#1090;&#1086;&#1074; &#1087;&#1088;&#1086;&#1083;&#1077;&#1090;&#1072;&#1102;&#1097;&#1080;&#1077; &#1084;&#1080;&#1084;&#1086; &#1073;&#1086;&#1088;&#1090;&#1072;&amp;#8221; &amp;#8211; &#1087;&#1086;&#1076;&#1091;&#1084;&#1072;&#1083;&#1080; &#1084;&#1099;.&lt;br /&gt;
&#1057;&#1074;&#1077;&#1078;&#1077;&#1074;&#1082;&#1083;&#1102;&#1095;&#1077;&#1085;&#1085;&#1099;&#1081; &#1072;&#1083;&#1100;&#1090;&#1080;&#1084;&#1077;&#1090;&#1088; &#1087;&#1086;&#1082;&#1072;&#1079;&#1072;&#1083; &#1074;&#1099;&#1089;&#1086;&#1090;&#1091; &#1095;&#1090;&#1086;-&#1090;&#1086; &#1086;&#1082;&#1086;&#1083;&#1086; 56&#1084;&#1083;&#1085; &#1082;&#1084; &#1085;&#1072;&#1076; &#1091;&#1088;&#1086;&#1074;&#1085;&#1077;&#1084; &#1084;&#1086;&#1088;&#1103;. O_O&lt;br /&gt;
 &amp;#8211; &#1050;&#1072;&#1082;&#1086;&#1075;&#1086; &#1084;&#1086;&#1088;&#1103;?!&lt;br /&gt;
 &amp;#8211; &lt;a href="http://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D1%80%D0%B5_%D0%AE%D0%B6%D0%BD%D0%BE%D0%B5_(%D0%9C%D0%B0%D1%80%D1%81)"&gt;&#1070;&#1078;&#1085;&#1086;&#1075;&#1086;&lt;/a&gt;&amp;#8230;&lt;br /&gt;
 &amp;#8211; &lt;code&gt;#(*$&amp;amp;^&amp;amp;&lt;/code&gt;#$(!!!!!&lt;br /&gt;
&#1058;&#1072;&#1082; &#1080; &#1078;&#1080;&#1074;&#1077;&#1084;&amp;#8230;&lt;/p&gt;
&lt;p&gt;&#1045;&#1097;&#1077; &#1077;&#1089;&#1090;&#1100; &#1089;&#1087;&#1077;&#1094;&#1080;&#1072;&#1083;&#1080;&#1089;&#1090; &#1087;&#1086; &#1090;&#1086;&#1085;&#1082;&#1086;&#1081; &#1101;&#1083;&#1077;&#1082;&#1090;&#1088;&#1086;&#1085;&#1080;&#1082;&#1077;. &#1052;&#1086;&#1078;&#1077;&#1090; &#1080;&#1079; &#1074;&#1086;&#1083;&#1086;&#1089;&#1082;&#1072; &#1080; &#1073;&#1072;&#1090;&#1072;&#1088;&#1077;&#1081;&#1082;&#1080; &#1087;&#1088;&#1080;&#1077;&#1084;&#1085;&#1080;&#1082; &#1089;&#1086;&#1073;&#1088;&#1072;&#1090;&#1100;. &#1058;&#1077;&#1083;&#1077;&#1074;&#1080;&#1079;&#1080;&#1086;&#1085;&#1085;&#1099;&#1081;.&lt;br /&gt;
&#1042;&#1079;&#1103;&#1083;&#1089;&#1103; &#1086;&#1085; &#1082;&#1072;&#1082;-&#1090;&#1086; &#1088;&#1072;&#1076;&#1072;&#1088; &#1088;&#1077;&#1084;&#1086;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1090;&#1100; (&#1095;&#1090;&#1086;-&#1090;&#1086; &#1089;&#1083;&#1080;&#1096;&#1082;&#1086;&#1084; &#1084;&#1085;&#1086;&#1075;&#1086; &#1053;&#1051;&#1054; &#1087;&#1086;&#1089;&#1083;&#1077;&#1076;&#1085;&#1077;&#1077; &#1074;&#1088;&#1077;&#1084;&#1103; &#1089;&#1090;&#1072;&#1083; &#1087;&#1086;&#1082;&#1072;&#1079;&#1099;&#1074;&#1072;&#1090;&#1100;)&lt;br /&gt;
&#1056;&#1077;&#1084;&#1086;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1083;-&#1088;&#1077;&#1084;&#1086;&#1085;&#1090;&#1080;&#1088;&#1086;&#1074;&#1072;&#1083;. &amp;#8220;&#1043;&#1086;&#1090;&#1086;&#1074;&#1086;&amp;#8221; &amp;#8211; &#1075;&#1086;&#1074;&#1086;&#1088;&#1080;&#1090;.&lt;br /&gt;
&#1042;&#1082;&#1083;&#1102;&#1095;&#1072;&#1077;&#1084;. &#1056;&#1072;&#1073;&#1086;&#1090;&#1072;&#1077;&#1090;. &#1053;&#1051;&#1054; &#1073;&#1086;&#1083;&#1100;&#1096;&#1077; &#1085;&#1077;&#1090;. &#1045;&#1089;&#1090;&#1100; &#1054;&#1056;&#1058;. &#1053;&#1072; &#1088;&#1072;&#1076;&#1072;&#1088;&#1077;.&lt;br /&gt;
&lt;strong&gt;facepalm&lt;/strong&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:zed.0xff.me,2008:Post/92</id>
    <published>2013-05-06T17:28:00Z</published>
    <updated>2013-05-06T17:28:28Z</updated>
    <link rel="alternate" type="text/html" href="http://zed.0xff.me/2013/05/06/demangle-msvc-delphi-and-c-builder-mangled-function-names-with-pure-ruby"/>
    <title>demangle MSVC, Delphi &amp; C++Builder mangled function names with pure Ruby</title>
    <content type="html">&lt;p&gt;Ever wanted to convert &lt;span style="background: #ffc; font-family:monospace; padding: 0 5px;"&gt;@afunc$qxzcupi&lt;/span&gt; or &lt;span style="background: #ffc; font-family:monospace; padding: 0 5px;"&gt;??3@YAXPAX@Z&lt;/span&gt; to something more human-readable?&lt;/p&gt;
&lt;p&gt;(ofcourse you wanted, and you know about &lt;code&gt;tdump.exe&lt;/code&gt; and &lt;code&gt;undname.exe&lt;/code&gt; :)&lt;/p&gt;
&lt;p&gt;And now you can do it using pure ruby, thanks to &lt;a href="https://github.com/zed-0xff/unmangler"&gt;unmangler&lt;/a&gt; gem:&lt;/p&gt;
&lt;h3&gt;Unmangling Borland mangled names&lt;/h3&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;require &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;unmangler&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;puts &lt;span class="co"&gt;Unmangler&lt;/span&gt;.unmangle &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;@afunc$qxzcupi&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;puts &lt;span class="co"&gt;Unmangler&lt;/span&gt;.unmangle &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;@Forms@TApplication@SetTitle$qqrx17System@AnsiString&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# output:&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# afunc(const signed char, int *)&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# __fastcall Forms::TApplication::SetTitle(const System::AnsiString)&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;h3&gt;Unmangling &lt;span class="caps"&gt;MSVC&lt;/span&gt; mangled names&lt;/h3&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;require &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;unmangler&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;puts &lt;span class="co"&gt;Unmangler&lt;/span&gt;.unmangle &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;??3@YAXPAX@Z&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;puts &lt;span class="co"&gt;Unmangler&lt;/span&gt;.unmangle &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;?AFXSetTopLevelFrame@@YAXPAVCFrameWnd@@@Z&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# output:&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# void __cdecl operator delete(void *)&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# void __cdecl AFXSetTopLevelFrame(class CFrameWnd *)&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;h3&gt;And now w/o arguments&lt;/h3&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;require &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;unmangler&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;puts &lt;span class="co"&gt;Unmangler&lt;/span&gt;.unmangle &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;@Forms@TApplication@SetTitle$qqrx17System@AnsiString&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="sy"&gt;:args&lt;/span&gt; =&amp;gt; &lt;span class="pc"&gt;false&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# outputs &amp;quot;Forms::TApplication::SetTitle&amp;quot;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;puts &lt;span class="co"&gt;Unmangler&lt;/span&gt;.unmangle &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;?AFXSetTopLevelFrame@@YAXPAVCFrameWnd@@@Z&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="sy"&gt;:args&lt;/span&gt; =&amp;gt; &lt;span class="pc"&gt;false&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# outputs &amp;quot;AFXSetTopLevelFrame&amp;quot;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;h3&gt;Links&lt;/h3&gt;
&lt;ol&gt;
	&lt;li&gt;&lt;a href="http://rubygems.org/gems/unmangler"&gt;unmangler gem on rubygems.org&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="https://github.com/zed-0xff/unmangler"&gt;unmangler sources on github.com&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span class="caps"&gt;TBD&lt;/span&gt;: &lt;span class="caps"&gt;GCC&lt;/span&gt; support&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:zed.0xff.me,2008:Post/91</id>
    <published>2013-01-17T07:44:00Z</published>
    <updated>2013-01-17T07:44:47Z</updated>
    <link rel="alternate" type="text/html" href="http://zed.0xff.me/2013/01/17/advanced-ruby-percent-literals"/>
    <title>Advanced Ruby: percent-literals</title>
    <content type="html">&lt;style&gt;
table.percent-literals { margin-top: 1em }
table.percent-literals td { padding: 0.5em 1em; text-align: center }
table.percent-literals td a { color: blue }
&lt;/style&gt;
&lt;h3&gt;most used %-literals:&lt;/h3&gt;
&lt;table class="t1 percent-literals"&gt;
	&lt;tr&gt;
		&lt;th&gt;% &lt;/th&gt;
		&lt;th&gt;code &lt;/th&gt;
		&lt;th&gt;result &lt;/th&gt;
		&lt;th&gt;description &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td style="font: 12pt bold;"&gt;&lt;code&gt;%q&lt;/code&gt; &lt;/td&gt;
		&lt;td&gt; &lt;code&gt;%q(all `quotes` 'are' "ok")&lt;/code&gt; &lt;/td&gt;
		&lt;td&gt; &lt;code&gt;"all `quotes` 'are' \"ok\""&lt;/code&gt;  &lt;/td&gt;
		&lt;td&gt; creates &lt;a href="http://www.ruby-doc.org/core/String.html"&gt;String&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td style="font: 12pt bold;"&gt;&lt;code&gt;%r&lt;/code&gt; &lt;/td&gt;
		&lt;td&gt; &lt;code&gt;%r(i_am/a/regexp)&lt;/code&gt; &lt;/td&gt;
		&lt;td&gt; &lt;code&gt;/i_am\/a\/regexp/&lt;/code&gt;  &lt;/td&gt;
		&lt;td&gt; creates &lt;a href="http://www.ruby-doc.org/core/Regexp.html"&gt;Regexp&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td style="font: 12pt bold;"&gt;&lt;code&gt;%w&lt;/code&gt; &lt;/td&gt;
		&lt;td&gt; &lt;code&gt;%w(abc def ghi)&lt;/code&gt; &lt;/td&gt;
		&lt;td&gt; &lt;code&gt;["abc", "def", "ghi"]&lt;/code&gt;  &lt;/td&gt;
		&lt;td&gt; splits string into &lt;a href="http://www.ruby-doc.org/core/Array.html"&gt;Array&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td style="font: 12pt bold;"&gt;&lt;code&gt;%x&lt;/code&gt; &lt;/td&gt;
		&lt;td&gt; &lt;code&gt;%x(ls -a /tmp)&lt;/code&gt; &lt;/td&gt;
		&lt;td&gt; &lt;code&gt;".\n..\nfile1\nfile2\n"&lt;/code&gt;  &lt;/td&gt;
		&lt;td&gt; alias of &lt;a href="http://www.ruby-doc.org/core/Kernel.html#method-i-60"&gt;`cmd`&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;h3&gt;highlighted&lt;/h3&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;&lt;span class="s"&gt;&lt;span class="dl"&gt;%q(&lt;/span&gt;&lt;span class="k"&gt;all `quotes` 'are' &amp;quot;ok&amp;quot;&lt;/span&gt;&lt;span class="dl"&gt;)&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;all `quotes` 'are' &lt;/span&gt;&lt;span class="ch"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;ok&lt;/span&gt;&lt;span class="ch"&gt;\&amp;quot;&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="rx"&gt;&lt;span class="dl"&gt;%r(&lt;/span&gt;&lt;span class="k"&gt;i_am/a/regexp&lt;/span&gt;&lt;span class="dl"&gt;)&lt;/span&gt;&lt;/span&gt;           =&amp;gt; &lt;span class="rx"&gt;&lt;span class="dl"&gt;/&lt;/span&gt;&lt;span class="k"&gt;i_am&lt;/span&gt;&lt;span class="ch"&gt;\/&lt;/span&gt;&lt;span class="k"&gt;a&lt;/span&gt;&lt;span class="ch"&gt;\/&lt;/span&gt;&lt;span class="k"&gt;regexp&lt;/span&gt;&lt;span class="dl"&gt;/&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="s"&gt;&lt;span class="dl"&gt;%w(&lt;/span&gt;&lt;span class="k"&gt;abc def ghi&lt;/span&gt;&lt;span class="dl"&gt;)&lt;/span&gt;&lt;/span&gt;             =&amp;gt; [&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;abc&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;ghi&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;]&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="sh"&gt;&lt;span class="dl"&gt;%x(&lt;/span&gt;&lt;span class="k"&gt;ls -a /tmp&lt;/span&gt;&lt;span class="dl"&gt;)&lt;/span&gt;&lt;/span&gt;              =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;.&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;..&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;file1&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="k"&gt;file2&lt;/span&gt;&lt;span class="ch"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;h3&gt;interpolation&lt;/h3&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;&lt;span class="c"&gt;# lowercase 'w': as-is&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="s"&gt;&lt;span class="dl"&gt;%w'&lt;/span&gt;&lt;span class="k"&gt;a #{2+2} b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; [&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\#&lt;/span&gt;&lt;span class="k"&gt;{2+2}&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;] &lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# uppercase 'W': interpolate&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="s"&gt;&lt;span class="dl"&gt;%W'&lt;/span&gt;&lt;span class="k"&gt;a &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;&lt;span class="i"&gt;2&lt;/span&gt;+&lt;span class="i"&gt;2&lt;/span&gt;&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="k"&gt; b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; [&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;4&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;] &lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# lowercase 'q': as-is&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="s"&gt;&lt;span class="dl"&gt;%q'&lt;/span&gt;&lt;span class="k"&gt;a #{2+2} b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;a &lt;/span&gt;&lt;span class="ch"&gt;\#&lt;/span&gt;&lt;span class="k"&gt;{2+2} b&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# uppercase 'Q': interpolate&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="s"&gt;&lt;span class="dl"&gt;%Q'&lt;/span&gt;&lt;span class="k"&gt;a &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;&lt;span class="i"&gt;2&lt;/span&gt;+&lt;span class="i"&gt;2&lt;/span&gt;&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="k"&gt; b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;a 4 b&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;h3&gt;other %-literals&lt;/h3&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;&lt;span class="c"&gt;# %s: convert to symbol&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="sy"&gt;&lt;span class="dl"&gt;%s'&lt;/span&gt;&lt;span class="k"&gt;foo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class="sy"&gt;:foo&lt;/span&gt; &lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# %i: convert to array of symbols - not released yet, will be in Ruby 2.0 ?&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;%i&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;foo bar baz&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; [&lt;span class="sy"&gt;:foo&lt;/span&gt;, &lt;span class="sy"&gt;:bar&lt;/span&gt;, &lt;span class="sy"&gt;:baz&lt;/span&gt;]&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;# '%' w/o any letter - alias for %Q&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="s"&gt;&lt;span class="dl"&gt;%'&lt;/span&gt;&lt;span class="k"&gt;a &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;&lt;span class="i"&gt;2&lt;/span&gt;+&lt;span class="i"&gt;2&lt;/span&gt;&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="k"&gt; b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;a 4 b&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
</content>
  </entry>
  <entry>
    <id>tag:zed.0xff.me,2008:Post/90</id>
    <published>2013-01-15T23:18:00Z</published>
    <updated>2013-01-15T23:18:51Z</updated>
    <link rel="alternate" type="text/html" href="http://zed.0xff.me/2013/01/15/advanced-ruby-break-value-and-next-value"/>
    <title>Advanced Ruby: break(value) &amp; next(value)</title>
    <content type="html">&lt;h2&gt;1. break(value)&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;break&lt;/code&gt; accepts a value that supplies the result of the expression it is &amp;#8220;breaking&amp;#8221; out of:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;  result = [&lt;span class="i"&gt;1&lt;/span&gt;, &lt;span class="i"&gt;2&lt;/span&gt;, &lt;span class="i"&gt;3&lt;/span&gt;].each &lt;span class="r"&gt;do&lt;/span&gt; |value|&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;break&lt;/span&gt; value * &lt;span class="i"&gt;2&lt;/span&gt; &lt;span class="r"&gt;if&lt;/span&gt; value.even?&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  p result &lt;span class="c"&gt;# prints 4&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;h2 style="margin-top:2em;"&gt;2. next(value)&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;next&lt;/code&gt; accepts an argument that can be used the result of the current block iteration:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;  result = [&lt;span class="i"&gt;1&lt;/span&gt;, &lt;span class="i"&gt;2&lt;/span&gt;, &lt;span class="i"&gt;3&lt;/span&gt;].map &lt;span class="r"&gt;do&lt;/span&gt; |value|&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;next&lt;/span&gt; value &lt;span class="r"&gt;if&lt;/span&gt; value.even?&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;    value * &lt;span class="i"&gt;2&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  p result &lt;span class="c"&gt;# prints [2, 2, 6]&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
</content>
  </entry>
  <entry>
    <id>tag:zed.0xff.me,2008:Post/89</id>
    <published>2013-01-11T23:16:00Z</published>
    <updated>2013-01-11T23:16:07Z</updated>
    <link rel="alternate" type="text/html" href="http://zed.0xff.me/2013/01/11/ruby-fastest-way-of-converting-string-into-array-of-characters"/>
    <title>Ruby: fastest way of converting string into array of characters</title>
    <content type="html">&lt;table class="t1"&gt;
&lt;tr&gt;&lt;th&gt;time&lt;th&gt;code&lt;th&gt;comment&lt;br /&gt;
&lt;tr style="color:gray"&gt;&lt;td&gt; 0.147 &lt;td&gt; &lt;code&gt;s.bytes.to_a&lt;/code&gt;&lt;td&gt;most fastest, but returns &lt;span class="caps"&gt;ASCII&lt;/span&gt; codes instead of chars&lt;br /&gt;
&lt;tr style="background:#6f6"&gt;&lt;td&gt; 0.242 &lt;td&gt; &lt;code&gt;s.chars.to_a&lt;/code&gt; &lt;td&gt;&lt;span class="caps"&gt;FASTEST&lt;/span&gt;&lt;br /&gt;
&lt;tr&gt;&lt;td&gt; 0.257 &lt;td&gt; &lt;code&gt;Array(s.chars)&lt;/code&gt;&lt;br /&gt;
&lt;tr&gt;&lt;td&gt; 0.265 &lt;td&gt; &lt;code&gt;a=[]; s.size.times{ |i| a&amp;lt;&amp;lt;s[i] }&lt;/code&gt; &lt;td&gt;&lt;br /&gt;
&lt;tr&gt;&lt;td&gt; 0.268 &lt;td&gt; &lt;code&gt;a=[]; s.chars.each{ |c| a&amp;lt;&amp;lt;c }&lt;/code&gt; &lt;td&gt;&lt;br /&gt;
&lt;tr&gt;&lt;td&gt; 0.278 &lt;td&gt; &lt;code&gt;s.bytes.map(&amp;amp;:chr)&lt;/code&gt; &lt;td&gt;&lt;br /&gt;
&lt;tr&gt;&lt;td&gt; 0.513 &lt;td&gt; &lt;code&gt;s.scan(/./)&lt;/code&gt; &lt;td&gt;&lt;br /&gt;
&lt;tr&gt;&lt;td&gt; 0.775 &lt;td&gt; &lt;code&gt;s.split(//)&lt;/code&gt; &lt;td&gt;&lt;br /&gt;
&lt;tr style="background:#f66"&gt;&lt;td&gt; 0.795 &lt;td&gt; &lt;code&gt;s.split('')&lt;/code&gt; &lt;td&gt;&lt;span class="caps"&gt;SLOWEST&lt;/span&gt;&lt;/table&gt;
&lt;p&gt;first column is time of 100.000 iterations on Core i5 1.7GHz&lt;/p&gt;
&lt;p&gt;code: &lt;a href="https://gist.github.com/4514850"&gt;bench-split.rb&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:zed.0xff.me,2008:Post/88</id>
    <published>2012-12-27T13:03:00Z</published>
    <updated>2012-12-27T13:03:49Z</updated>
    <link rel="alternate" type="text/html" href="http://zed.0xff.me/2012/12/27/breader"/>
    <title>bReader - &#1063;&#1080;&#1090;&#1072;&#1083;&#1082;&#1072; &#1094;&#1080;&#1090;&#1072;&#1090;&#1085;&#1080;&#1082;&#1086;&#1074;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1072;&#1103; &#1101;&#1082;&#1086;&#1085;&#1086;&#1084;&#1080;&#1090; &#1074;&#1072;&#1096;&#1077; &#1074;&#1088;&#1077;&#1084;&#1103; &#1080; &#1090;&#1088;&#1072;&#1092;&#1080;&#1082;</title>
    <content type="html">&lt;p&gt;&lt;a href="https://play.google.com/store/apps/details?id=me.zed_0xff.android.breader"&gt;&lt;img src="http://habrastorage.org/storage2/f0e/4b7/aa5/f0e4b7aa53716b9674068c0a7258ca34.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;&#1054;&#1089;&#1086;&#1073;&#1077;&#1085;&#1085;&#1099;&#1077; &#1091;&#1085;&#1080;&#1082;&#1072;&#1083;&#1100;&#1085;&#1086;&#1089;&#1090;&#1080;:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&#1055;&#1086;&#1076;&#1076;&#1077;&#1088;&#1078;&#1082;&#1072; &#1082;&#1072;&#1088;&#1090;&#1080;&#1085;&#1086;&#1082; (xkcd, bash, &#1095;&#1090;&#1086;-&#1090;&#1086; &#1077;&#1097;&#1077;)&lt;/li&gt;
&lt;li&gt;&#1062;&#1080;&#1090;&#1072;&#1090;&#1099; &#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1103;&#1102;&#1090;&#1089;&#1103; &#1095;&#1077;&#1088;&#1077;&#1079; &#1074;&#1099;&#1076;&#1077;&#1083;&#1077;&#1085;&#1085;&#1099;&#1081; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088; &#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1080;&#1081;, &#1095;&#1090;&#1086;: &lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;&#1075;&#1086;&#1088;&#1072;&#1079;&#1076;&#1086; &#1073;&#1099;&#1089;&#1090;&#1088;&#1077;&#1077;, &#1095;&#1077;&#1084; &#1087;&#1072;&#1088;&#1089;&#1080;&#1090;&#1100; &lt;span class="caps"&gt;HTML&lt;/span&gt;/&lt;span class="caps"&gt;XML&lt;/span&gt; &#1085;&#1072; &#1091;&#1089;&#1090;&#1088;&#1086;&#1081;&#1089;&#1090;&#1074;&#1077;&lt;/li&gt;
&lt;li&gt;&#1101;&#1082;&#1086;&#1085;&#1086;&#1084;&#1080;&#1090; &#1090;&#1088;&#1072;&#1092;&#1080;&#1082;, &#1089;&#1078;&#1080;&#1084;&#1072;&#1103; &#1077;&#1075;&#1086; &#1080; &#1085;&#1077; &#1079;&#1072;&#1075;&#1088;&#1091;&#1078;&#1072;&#1103; &#1087;&#1086;&#1074;&#1090;&#1086;&#1088;&#1085;&#1086; &#1090;&#1086;, &#1095;&#1090;&#1086; &#1091;&#1078;&#1077; &#1079;&#1072;&#1075;&#1088;&#1091;&#1078;&#1077;&#1085;&#1086;&lt;/li&gt;
&lt;li&gt;&#1042;&#1057;&#1045; &#1094;&#1080;&#1090;&#1072;&#1090;&#1085;&#1080;&#1082;&#1080; &#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1103;&#1102;&#1090;&#1089;&#1103; &#1086;&#1076;&#1085;&#1080;&#1084; &#1079;&#1072;&#1087;&#1088;&#1086;&#1089;&#1086;&#1084;, 2-3 &#1089;&#1077;&#1082;&#1091;&#1085;&#1076;&#1099; &amp;#8211; &#1080; &#1091; &#1074;&#1072;&#1089; &#1091;&#1078;&#1077; 200 &#1085;&#1086;&#1074;&#1099;&#1093; &#1094;&#1080;&#1090;&#1072;&#1090;&lt;/li&gt;
&lt;p&gt;&lt;/ul&gt;&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;&#1042;&#1089;&#1077; &#1094;&#1080;&#1090;&#1072;&#1090;&#1099; &#1086;&#1073;&#1088;&#1072;&#1079;&#1091;&#1102;&#1090; &#1077;&#1076;&#1080;&#1085;&#1091;&#1102; &#1083;&#1077;&#1085;&#1090;&#1091;, &#1085;&#1086; &#1087;&#1088;&#1080; &#1078;&#1077;&#1083;&#1072;&#1085;&#1080;&#1080; &#1084;&#1086;&#1078;&#1085;&#1086; &#1095;&#1080;&#1090;&#1072;&#1090;&#1100; &#1083;&#1102;&#1073;&#1086;&#1081; &#1094;&#1080;&#1090;&#1072;&#1090;&#1085;&#1080;&#1082; &#1086;&#1090;&#1076;&#1077;&#1083;&#1100;&#1085;&#1086;.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;&#1048;&#1085;&#1090;&#1077;&#1075;&#1088;&#1072;&#1094;&#1080;&#1103; &#1089; &#1090;&#1074;&#1080;&#1090;&#1090;&#1077;&#1088;&#1086;&#1084; (&#1085;&#1091; &#1082;&#1072;&#1082; &#1073;&#1077;&#1079; &#1085;&#1077;&#1075;&#1086;) + &#1074;&#1089;&#1077; &#1091;&#1088;&#1083;&#1099; &#1078;&#1084;&#1091;&#1090;&#1089;&#1103; &#1095;&#1077;&#1088;&#1077;&#1079; bit.ly, &#1090;&#1072;&#1082; &#1095;&#1090;&#1086; &#1074; &#1086;&#1076;&#1080;&#1085; &#1090;&#1074;&#1080;&#1090; &#1074;&#1083;&#1077;&#1079;&#1077;&#1090; &#1073;&#1086;&#1083;&#1100;&#1096;&#1077; &#1087;&#1086;&#1083;&#1077;&#1079;&#1085;&#1086;&#1075;&#1086; &#1090;&#1077;&#1082;&#1089;&#1090;&#1072;.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;&#1063;&#1080;&#1090;&#1072;&#1083;&#1082;&#1072; &#1080;&#1079;&#1085;&#1072;&#1095;&#1072;&#1083;&#1100;&#1085;&#1086; &#1079;&#1072;&#1088;&#1103;&#1078;&#1077;&#1085;&#1072; 512-&#1102; &#1094;&#1080;&#1090;&#1072;&#1090;&#1072;&#1084;&#1080;, &#1090;&#1072;&#1082; &#1095;&#1090;&#1086; &#1076;&#1072;&#1078;&#1077; &#1074; &#1075;&#1083;&#1091;&#1096;&#1080; &#1073;&#1077;&#1079; &#1048;&#1085;&#1090;&#1077;&#1088;&#1085;&#1077;&#1090;&#1072; &#1073;&#1091;&#1076;&#1077;&#1090; &#1095;&#1090;&#1086; &#1087;&#1086;&#1095;&#1080;&#1090;&#1072;&#1090;&#1100;.&lt;/li&gt;&lt;/p&gt;
&lt;/ul&gt;
&lt;h4&gt;&#1048;&#1079;&#1085;&#1072;&#1095;&#1072;&#1083;&#1100;&#1085;&#1086; &#1088;&#1077;&#1096;&#1080;&#1083; &#1087;&#1080;&#1089;&#1072;&#1090;&#1100; &#1089;&#1074;&#1086;&#1102; &#1095;&#1080;&#1090;&#1072;&#1083;&#1082;&#1091; &#1087;&#1086;&#1090;&#1086;&#1084;&#1091; &#1095;&#1090;&#1086;:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&#1085;&#1072;&#1076;&#1086;&#1077;&#1083;&#1086; &#1078;&#1076;&#1072;&#1090;&#1100; &#1082;&#1086;&#1075;&#1076;&#1072; &#1091;&#1078;&#1077; &#1086;&#1076;&#1085;&#1072; &#1085;&#1077;&#1073;&#1077;&#1079;&#1099;&#1079;&#1074;&#1077;&#1089;&#1090;&#1085;&#1072;&#1103; &#1095;&#1080;&#1090;&#1072;&#1083;&#1082;&#1072; &#1088;&#1072;&#1089;&#1087;&#1072;&#1088;&#1089;&#1080;&#1090; &#1074;&#1089;&#1077; &#1089;&#1074;&#1086;&#1080; &#1080;&#1089;&#1090;&#1086;&#1095;&#1085;&#1080;&#1082;&#1080;&lt;/li&gt;
&lt;li&gt;&#1087;&#1088;&#1080; &#1101;&#1090;&#1086;&#1084; &#1086;&#1085;&#1072; &#1077;&#1097;&#1077; &#1080; &#1084;&#1086;&#1076;&#1072;&#1083;&#1100;&#1085;&#1099;&#1084; &#1086;&#1082;&#1085;&#1086;&#1084; &#1079;&#1072;&#1075;&#1088;&#1091;&#1079;&#1082;&#1080; &#1074;&#1089;&#1077; &#1079;&#1072;&#1082;&#1088;&#1099;&#1074;&#1072;&#1077;&#1090;, &#1093;&#1086;&#1090;&#1103; &#1084;&#1086;&#1078;&#1085;&#1086; &#1073;&#1099;&#1083;&#1086; &#1073;&#1099; &#1080; &#1076;&#1072;&#1090;&#1100; &#1102;&#1079;&#1077;&#1088;&#1091; &#1087;&#1086;&#1095;&#1080;&#1090;&#1072;&#1090;&#1100; &#1090;&#1086; &#1095;&#1090;&#1086; &#1077;&#1089;&#1090;&#1100;, &#1087;&#1086;&#1082;&#1072; &#1085;&#1086;&#1074;&#1086;&#1077; &#1075;&#1088;&#1091;&#1079;&#1080;&#1090;&#1089;&#1103;&lt;/li&gt;
&lt;li&gt;&#1074; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077; &#1079;&#1072;&#1074;&#1080;&#1089;&#1072;&#1085;&#1080;&#1103; &#1089;&#1077;&#1090;&#1080;/&#1089;&#1072;&#1081;&#1090;&#1072;/&#1093;&#1079; &#1095;&#1077;&#1075;&#1086; &amp;#8211; &#1074;&#1080;&#1089;&#1083;&#1072; &#1074;&#1089;&#1103; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1072;, &#1094;&#1077;&#1083;&#1080;&#1082;&#1086;&#1084; &#1080; &#1087;&#1086;&#1083;&#1085;&#1086;&#1089;&#1090;&#1100;&#1102;&lt;/li&gt;
&lt;li&gt;&#1085;&#1077;&#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1094;&#1080;&#1090;&#1072;&#1090;&#1085;&#1080;&#1082;&#1080; (sramu.net) &#1074; &lt;span class="caps"&gt;RSS&lt;/span&gt; &#1080; &#1085;&#1072; &#1075;&#1083;&#1072;&#1074;&#1085;&#1086;&#1081; &#1094;&#1080;&#1090;&#1072;&#1090;&#1099; &#1086;&#1090;&#1076;&#1072;&#1102;&#1090; &#1085;&#1077; &#1094;&#1077;&#1083;&#1080;&#1082;&#1086;&#1084;, &#1072; &#1087;&#1086;&#1083;&#1086;&#1074;&#1080;&#1085;&#1082;&#1091; &#1089;&#1086; &#1089;&#1089;&#1099;&#1083;&#1082;&#1086;&#1081; &amp;#8220;&#1095;&#1080;&#1090;&#1072;&#1090;&#1100; &#1076;&#1072;&#1083;&#1100;&#1096;&#1077;&amp;#8221; &amp;#8211; &#1093;&#1086;&#1090;&#1077;&#1083;&#1086;&#1089;&#1100; &#1074;&#1089;&#1077;-&#1090;&#1072;&#1082;&#1080; &#1090;&#1072;&#1082;&#1080;&#1077; &#1094;&#1080;&#1090;&#1072;&#1090;&#1085;&#1080;&#1082;&#1080; &#1090;&#1086;&#1078;&#1077; &#1095;&#1080;&#1090;&#1072;&#1090;&#1100; &#1085;&#1086;&#1088;&#1084;&#1072;&#1083;&#1100;&#1085;&#1086; &#1080; &#1073;&#1077;&#1079; &#1083;&#1080;&#1096;&#1085;&#1080;&#1093; &#1082;&#1083;&#1080;&#1082;&#1086;&#1074;&lt;/li&gt;
&lt;li&gt;&#1085;&#1091; &#1080; &#1082;&#1086;&#1084;&#1080;&#1082;&#1089;&#1099; &#1090;&#1086;&#1078;&#1077; &#1080;&#1085;&#1090;&#1077;&#1088;&#1077;&#1089;&#1085;&#1086; &#1073;&#1099;&#1083;&#1086; &#1095;&#1090;&#1086;&#1073; &#1073;&#1099;&#1083;&#1080;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;&#1053;&#1077;&#1084;&#1085;&#1086;&#1075;&#1086; &#1090;&#1077;&#1093;&#1085;&#1080;&#1095;&#1077;&#1089;&#1082;&#1080;&#1093; &#1092;&#1072;&#1082;&#1090;&#1086;&#1074;&lt;/h4&gt;
&lt;ul&gt;
	&lt;li&gt;&#1080;&#1090;&#1086;&#1075;&#1086; &#1085;&#1072; &#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1085;&#1080;&#1077; &#1091;&#1096;&#1083;&#1086; &#1087;&#1086;&#1083;&#1075;&#1086;&#1076;&#1072;&lt;/li&gt;
	&lt;li&gt;&#1089;&#1072;&#1084; &#1095;&#1080;&#1090;&#1072;&#1102; &#1094;&#1080;&#1090;&#1072;&#1090;&#1085;&#1080;&#1082;&#1080; &#1082;&#1072;&#1078;&#1076;&#1099;&#1081; &#1076;&#1077;&#1085;&#1100;&lt;/li&gt;
	&lt;li&gt;AppStore &#1072;&#1085;&#1072;&#1083;&#1086;&#1075;&#1080;&#1095;&#1085;&#1086;&#1077; &#1084;&#1086;&#1077; &#1087;&#1088;&#1080;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1077; &#1086;&#1090;&#1082;&#1083;&#1086;&#1085;&#1080;&#1083;, &#1089;&#1074;&#1086;&#1083;&#1086;&#1095;&#1100;&lt;/li&gt;
	&lt;li&gt;backend: nginx, ruby, Sinatra, memcached&lt;/li&gt;
	&lt;li&gt;&#1093;&#1086;&#1089;&#1090;&#1080;&#1085;&#1075;: Amazon EC2 small instance&lt;/li&gt;
	&lt;li&gt;&lt;span class="caps"&gt;IDE&lt;/span&gt;: &lt;span class="caps"&gt;VIM&lt;/span&gt;, rake&lt;/li&gt;
&lt;/ul&gt;
&lt;habracut text="&#1057;&#1087;&#1080;&#1089;&#1086;&#1082; &#1094;&#1080;&#1090;&#1072;&#1090;&#1085;&#1080;&#1082;&#1086;&#1074;, &#1073;&#1086;&#1083;&#1100;&#1096;&#1077; &#1089;&#1082;&#1088;&#1080;&#1085;&#1096;&#1086;&#1090;&#1086;&#1074; &#1080; &#1089;&#1089;&#1099;&#1083;&#1082;&#1072; &#1085;&#1072; &#1073;&#1077;&#1089;&#1087;&#1083;&#1072;&#1090;&#1085;&#1086;&#1077; &#1089;&#1082;&#1072;&#1095;&#1080;&#1074;&#1072;&#1085;&#1080;&#1077;"/&gt;
&lt;h4&gt;&#1042;&#1089;&#1077; &#1094;&#1080;&#1090;&#1072;&#1090;&#1085;&#1080;&#1082;&#1080;: (38&#1096;&#1090;)&lt;/h4&gt;&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;span class="caps"&gt;QDB&lt;/span&gt;&lt;/th&gt;&lt;td&gt;bash.org (English)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;bash.altlinux.org&lt;/th&gt;&lt;td&gt;&lt;span class="caps"&gt;ALT&lt;/span&gt; Linux Fortunator&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;bash.org.by&lt;/th&gt;&lt;td&gt;&#1062;&#1080;&#1090;&#1072;&#1090;&#1085;&#1080;&#1082; &#1041;&#1072;&#1081;&#1085;&#1077;&#1090;&#1072;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;bash.org.ru&lt;/th&gt;&lt;td&gt;&#1062;&#1080;&#1090;&#1072;&#1090;&#1085;&#1080;&#1082; &#1056;&#1091;&#1085;&#1077;&#1090;&#1072;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;bash.org.ru &#1082;&#1086;&#1084;&#1080;&#1082;&#1089;&lt;/th&gt;&lt;td&gt;&#1082;&#1086;&#1084;&#1080;&#1082;&#1089;&#1099; &#1087;&#1086; &#1084;&#1086;&#1090;&#1080;&#1074;&#1072;&#1084; &#1094;&#1080;&#1090;&#1072;&#1090;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;besit2.ru&lt;/th&gt;&lt;td&gt;&#1077;&#1089;&#1083;&#1080; &#1085;&#1072;&#1082;&#1080;&#1087;&#1077;&#1083;&#1086;&amp;#8230;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;bezdna.su&lt;/th&gt;&lt;td&gt;&#1051;&#1091;&#1095;&#1096;&#1080;&#1077; &#1094;&#1080;&#1090;&#1072;&#1090;&#1099; &#1080;&#1079; &#1041;&#1077;&#1079;&#1076;&#1085;&#1099;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;comicsbook.ru&lt;/th&gt;&lt;td&gt;FFFuuu, trollface, forever alone, okay &#1080; &#1076;&#1088;&#1091;&#1075;&#1080;&#1077; &#1082;&#1086;&#1084;&#1080;&#1082;&#1089;&#1099;.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;delonevtebe.ru&lt;/th&gt;&lt;td&gt;&#1044;&#1077;&#1083;&#1086; &#1085;&#1077; &#1074; &#1090;&#1077;&#1073;&#1077; | &#1053;&#1077;&#1091;&#1076;&#1072;&#1095;&#1085;&#1099;&#1077; &#1089;&#1074;&#1080;&#1076;&#1072;&#1085;&#1080;&#1103;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;det.org.ru&lt;/th&gt;&lt;td&gt;&#1075;&#1086;&#1074;&#1086;&#1088;&#1103;&#1090; &#1076;&#1077;&#1090;&#1080;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;greatwords.ru&lt;/th&gt;&lt;td&gt;&#1042;&#1077;&#1083;&#1080;&#1082;&#1080;&#1077; &#1089;&#1083;&#1086;&#1074;&#1072; &#8212; &#1094;&#1080;&#1090;&#1072;&#1090;&#1099;, &#1072;&#1092;&#1086;&#1088;&#1080;&#1079;&#1084;&#1099;, &#1074;&#1099;&#1089;&#1082;&#1072;&#1079;&#1099;&#1074;&#1072;&#1085;&#1080;&#1103;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;hatewall.ru&lt;/th&gt;&lt;td&gt;&#1089;&#1090;&#1077;&#1085;&#1072; &#1085;&#1077;&#1085;&#1072;&#1074;&#1080;&#1089;&#1090;&#1080;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;ibash.org.ru&lt;/th&gt;&lt;td&gt;&#1053;&#1086;&#1074;&#1099;&#1081; &#1094;&#1080;&#1090;&#1072;&#1090;&#1085;&#1080;&#1082; &#1056;&#1091;&#1085;&#1077;&#1090;&#1072;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;inwebwetrust &#1082;&#1086;&#1084;&#1080;&#1082;&#1089;&lt;/th&gt;&lt;td&gt;&#1050;&#1086;&#1084;&#1080;&#1082;&#1089;&#1099; &#1086;&#1073; &#1048;&#1085;&#1090;&#1077;&#1088;&#1085;&#1077;&#1090;&#1077;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;ipfw.ru&lt;/th&gt;&lt;td&gt;&#1062;&#1080;&#1090;&#1072;&#1090;&#1085;&#1080;&#1082; &#1082;&#1072;&#1085;&#1072;&#1083;&#1072; #FreeBSD@RusNET&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;ithappens.ru&lt;/th&gt;&lt;td&gt;&#1050;&#1083;&#1080;&#1077;&#1085;&#1090; &#1080; &#1089;&#1072;&#1087;&#1087;&#1086;&#1088;&#1090;. &#1056;&#1072;&#1079;&#1088;&#1072;&#1073;&#1086;&#1090;&#1095;&#1080;&#1082; &#1080; &#1079;&#1072;&#1082;&#1072;&#1079;&#1095;&#1080;&#1082;. &#1055;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1080;&#1089;&#1090; &#1080; &#1087;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1072;.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;killmepls.ru&lt;/th&gt;&lt;td&gt;&#1050;&#1080;&#1083;&#1083; &#1052;&#1080; &#1055;&#1083;&#1079;: &#1046;&#1080;&#1079;&#1085;&#1100;. &#1042;&#1080;&#1076; &#1089;&#1079;&#1072;&#1076;&#1080;.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;kstatida.ru&lt;/th&gt;&lt;td&gt;&#1050;&#1086;&#1088;&#1086;&#1090;&#1082;&#1080;&#1077; &#1087;&#1086;&#1083;&#1077;&#1079;&#1085;&#1099;&#1077; &#1089;&#1086;&#1074;&#1077;&#1090;&#1099;, &#1086;&#1089;&#1085;&#1086;&#1074;&#1072;&#1085;&#1085;&#1099;&#1077; &#1085;&#1072; &#1083;&#1080;&#1095;&#1085;&#1086;&#1084; &#1078;&#1080;&#1079;&#1085;&#1077;&#1085;&#1085;&#1086;&#1084; &#1086;&#1087;&#1099;&#1090;&#1077;, &#1080;&#1085;&#1086;&#1075;&#1076;&#1072; &#1087;&#1077;&#1095;&#1072;&#1083;&#1100;&#1085;&#1086;&#1084;.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;la2bash.ru&lt;/th&gt;&lt;td&gt;Lineage 2 &#1073;&#1077;&#1089;&#1077;&#1076;&#1082;&#1072;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;lorquotes.ru&lt;/th&gt;&lt;td&gt;Latest fortunes from Linux.Org.Ru.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;nefart.ru&lt;/th&gt;&lt;td&gt;&#1042;&#1086;&#1090; &#1090;&#1072;&#1082;&#1086;&#1081; &#1085;&#1077; &#1092;&#1072;&#1088;&#1090;!&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;nextjoke.net&lt;/th&gt;&lt;td&gt;&#1057;&#1072;&#1084;&#1099;&#1077; &#1089;&#1084;&#1077;&#1096;&#1085;&#1099;&#1077; &#1096;&#1091;&#1090;&#1082;&#1080;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;pinator.org&lt;/th&gt;&lt;td&gt;&#1050;&#1088;&#1072;&#1090;&#1082;&#1080;&#1077; &#1084;&#1086;&#1090;&#1080;&#1074;&#1080;&#1088;&#1091;&#1102;&#1097;&#1080;&#1077; &#1074;&#1099;&#1089;&#1082;&#1072;&#1079;&#1099;&#1074;&#1072;&#1085;&#1080;&#1103;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;pip.ec&lt;/th&gt;&lt;td&gt;&#1057;&#1077;&#1075;&#1086;&#1076;&#1085;&#1103; &#1073;&#1099;&#1083; &#1055;&#1055;&#1062;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;polniyp.me&lt;/th&gt;&lt;td&gt;&#1055;&#1086;&#1083;&#1085;&#1099;&#1081; &#1055;!&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;psyhumor.ru&lt;/th&gt;&lt;td&gt;&#1055;&#1089;&#1080;&#1093;&#1086;&#1083;&#1086;&#1075;&#1080; &#1096;&#1091;&#1090;&#1103;&#1090;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;shortiki.com&lt;/th&gt;&lt;td&gt;&#1082;&#1086;&#1088;&#1086;&#1090;&#1082;&#1080;&#1077; &#1080; &#1089;&#1084;&#1077;&#1096;&#1085;&#1099;&#1077;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;sramu.net&lt;/th&gt;&lt;td&gt;&#1087;&#1086;&#1089;&#1090;&#1099;&#1076;&#1085;&#1099;&#1077; &#1080;&#1089;&#1090;&#1086;&#1088;&#1080;&#1080;, &#1088;&#1072;&#1089;&#1089;&#1082;&#1072;&#1079;&#1072;&#1085;&#1085;&#1099;&#1077; &#1088;&#1077;&#1072;&#1083;&#1100;&#1085;&#1099;&#1084;&#1080; &#1083;&#1102;&#1076;&#1100;&#1084;&#1080;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;ukrbash.org&lt;/th&gt;&lt;td&gt;&#1059;&#1082;&#1088;&#1041;&#1072;&#1096; &#8212; &#1091;&#1082;&#1088;&#1072;&#1111;&#1085;&#1089;&#1100;&#1082;&#1080;&#1081; &#1094;&#1080;&#1090;&#1072;&#1090;&#1085;&#1080;&#1082;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;wgbash.org&lt;/th&gt;&lt;td&gt;World of Tanks&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;wumocomicstrip.com&lt;/th&gt;&lt;td&gt;Wumo by Wulff &amp;amp; Morgenthaler &amp;#8211; a commentary on life&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;xkcd.com&lt;/th&gt;&lt;td&gt;A webcomic of romance, sarcasm, math, and language.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;xkcd.ru&lt;/th&gt;&lt;td&gt;xkcd &#1087;&#1086;-&#1088;&#1091;&#1089;&#1089;&#1082;&#1080;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;zadolba.li&lt;/th&gt;&lt;td&gt;&#1079;&#1072;&#1076;&#1086;&#1083;&#1073;&#1072;!&#1083;&#1080;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;&#1078;&#1078; ellustrator&lt;/th&gt;&lt;td&gt;&#1046;&#1046;: &#1050;&#1072;&#1088;&#1090;&#1080;&#1085;&#1082;&#1080; &#1079;&#1076;&#1077;&#1089;&#1100;!&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;&#1078;&#1078; pirozhki-ru&lt;/th&gt;&lt;td&gt;&#1046;&#1046;: &#1055;&#1080;&#1088;&#1086;&#1078;&#1082;&#1086;&#1074;&#1072;&#1103;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;&#1078;&#1078; poroshki&lt;/th&gt;&lt;td&gt;&#1046;&#1046;: &#1055;&#1086;&#1088;&#1086;&#1096;&#1082;&#1080;: &#1082;&#1088;&#1080;&#1089;&#1090;&#1072;&#1083;&#1083;&#1080;&#1079;&#1086;&#1074;&#1072;&#1085;&#1085;&#1072;&#1103; &#1087;&#1086;&#1101;&#1079;&#1080;&#1103;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;&#1078;&#1078; ru-comicstrip&lt;/th&gt;&lt;td&gt;&#1046;&#1046;: &#1082;&#1086;&#1084;&#1080;&#1082;&#1089;&#1099; &#1085;&#1072; &#1088;&#1091;&#1089;&#1089;&#1082;&#1086;&#1084;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;h4&gt;&#1057;&#1082;&#1088;&#1080;&#1085;&#1096;&#1086;&#1090;&#1080;&#1082;&#1080;&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://photobucket.0xff.me/albums/v624/photozed/android/device-2012-12-14-212237_zps6193d634.png" target="_blank"&gt;&lt;img src="http://photobucket.0xff.me/albums/v624/photozed/android/th_device-2012-12-14-212237_zps6193d634.png" border="0" alt="Photobucket" &gt;&lt;/a&gt; &lt;a href="http://photobucket.0xff.me/albums/v624/photozed/android/device-2012-12-14-211924_zps2b886680.png" target="_blank"&gt;&lt;img src="http://photobucket.0xff.me/albums/v624/photozed/android/th_device-2012-12-14-211924_zps2b886680.png" border="0" alt="Photobucket" &gt;&lt;/a&gt; &lt;a href="http://photobucket.0xff.me/albums/v624/photozed/android/device-2012-12-14-211602_zps3df65337.png" target="_blank"&gt;&lt;img src="http://photobucket.0xff.me/albums/v624/photozed/android/th_device-2012-12-14-211602_zps3df65337.png" border="0" alt="Photobucket" &gt;&lt;/a&gt; &lt;a href="http://photobucket.0xff.me/albums/v624/photozed/android/device-2012-12-14-211639_zps8107e940.png" target="_blank"&gt;&lt;img src="http://photobucket.0xff.me/albums/v624/photozed/android/th_device-2012-12-14-211639_zps8107e940.png" border="0" alt="Photobucket" &gt;&lt;/a&gt; &lt;a href="http://photobucket.0xff.me/albums/v624/photozed/android/device-2012-12-14-211528_zps7cd400ea.png" target="_blank"&gt;&lt;img src="http://photobucket.0xff.me/albums/v624/photozed/android/th_device-2012-12-14-211528_zps7cd400ea.png" border="0" alt="Photobucket" &gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;&#1057;&#1082;&#1072;&#1095;&#1072;&#1090;&#1100;&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://play.google.com/store/apps/details?id=me.zed_0xff.android.breader"&gt;bReader &#1074; Google.Play&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:zed.0xff.me,2008:Post/87</id>
    <published>2012-05-10T12:55:00Z</published>
    <updated>2012-05-10T12:55:09Z</updated>
    <link rel="alternate" type="text/html" href="http://zed.0xff.me/2012/05/10/grub2-simple-hardware-boot-switch"/>
    <title>grub2 simple hardware boot switch</title>
    <content type="html">&lt;h3&gt;1. take any old unused &lt;span class="caps"&gt;USB&lt;/span&gt; stick (any size, 16M is more than enough, mine was 128M)&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#fdisk -l /dev/sdc
Disk /dev/sdc: 126 MB, 126353408 bytes
16 heads, 32 sectors/track, 482 cylinders, total 246784 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x59d30b2a

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *          32      246271      123120   83  Linux&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. &lt;strong&gt;[optional]&lt;/strong&gt; format it to ext2&lt;/h3&gt;
&lt;h3&gt;3. find out its &lt;span class="caps"&gt;UUID&lt;/span&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#blkid /dev/sdc*
/dev/sdc1: UUID="3a5ef90f-0640-42c3-97c2-8743c822ba60" TYPE="ext2"
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4. do some simple grub2 scripting:&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;menuentry "auto" {
        set foo_uuid=3a5ef90f-0640-42c3-97c2-8743c822ba60
        set foo=empty

        insmod part_gpt
        insmod ext2
        insmod search_fs_uuid

        search --fs-uuid --no-floppy --set=foo $foo_uuid

        if [ $foo = "empty" ]; then
                # boot windows
                insmod fat
                insmod chain
                search --fs-uuid --no-floppy --set=root B0D7-DA71
                chainloader (${root})/efi/Microsoft/Boot/bootmgfw.efi
        else
                # boot linux
                set root='(hd0,gpt1)'
                search --no-floppy --fs-uuid --set=root 22c0603d-670e-4097-83d2-539b520fc75a
                linux /boot/vmlinuz root=/dev/sda1
        fi
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;So, if this (and exactly this, with unique &lt;span class="caps"&gt;UUID&lt;/span&gt;) &lt;span class="caps"&gt;USB&lt;/span&gt; stick is plugged in while computer boots &amp;#8211; it will boot Linux, otherwise Windows will boot.&lt;/h3&gt;</content>
  </entry>
  <entry>
    <id>tag:zed.0xff.me,2008:Post/86</id>
    <published>2012-04-02T17:20:00Z</published>
    <updated>2012-04-02T17:20:17Z</updated>
    <link rel="alternate" type="text/html" href="http://zed.0xff.me/2012/04/02/dwarf-fortress"/>
    <title>Dwarf Fortress</title>
    <content type="html">&lt;p&gt;&#1055;&#1077;&#1088;&#1074;&#1072;&#1103; &#1094;&#1080;&#1074;&#1080;&#1083;&#1080;&#1079;&#1072;&#1094;&#1080;&#1103; &#1087;&#1086;&#1075;&#1080;&#1073;&#1083;&#1072; &#1086;&#1090; (&#1087;&#1072;&#1088;&#1099;) &lt;strong&gt;&#1079;&#1083;&#1086;&#1073;&#1085;&#1099;&#1093; &#1075;&#1086;&#1073;&#1083;&#1080;&#1085;&#1086;&#1074;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&#1042;&#1090;&#1086;&#1088;&#1072;&#1103; &#1090;&#1086;&#1078;&#1077; =).&lt;/p&gt;
&lt;p&gt;&#1058;&#1088;&#1077;&#1090;&#1100;&#1103; &#1085;&#1072;&#1091;&#1095;&#1080;&#1083;&#1072;&#1089;&#1100; &#1089;&#1090;&#1088;&#1086;&#1080;&#1090;&#1100; &lt;strong&gt;&#1044;&#1042;&#1045;&#1056;&#1068;&lt;/strong&gt;(!!!) &#1085;&#1072; &#1074;&#1093;&#1086;&#1076;&#1077; &#1074; &#1087;&#1086;&#1089;&#1077;&#1083;&#1077;&#1085;&#1080;&#1077;. &#1055;&#1086;&#1075;&#1080;&#1073;&#1083;&#1072; &#1086;&#1090; &#1079;&#1083;&#1086;&#1073;&#1085;&#1086;&#1075;&#1086; &#1090;&#1088;&#1086;&#1083;&#1083;&#1103;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1091;&#1084;&#1077;&#1083; &#1083;&#1086;&#1084;&#1072;&#1090;&#1100; &#1076;&#1074;&#1077;&#1088;&#1080;.&lt;/p&gt;
&lt;p&gt;&#1063;&#1077;&#1090;&#1074;&#1077;&#1088;&#1090;&#1072;&#1103; &#1087;&#1086;&#1075;&#1080;&#1073;&#1083;&#1072; &#1086;&#1090; &lt;strong&gt;&#1078;&#1072;&#1078;&#1076;&#1099;&lt;/strong&gt;. &#1055;&#1086;&#1090;&#1086;&#1084;&#1091; &#1095;&#1090;&#1086; &#1074;&#1089;&#1077; &#1088;&#1077;&#1095;&#1082;&#1080; &#1080; &#1086;&#1079;&#1077;&#1088;&#1072; &#1079;&#1080;&#1084;&#1086;&#1081; &#1079;&#1072;&#1084;&#1077;&#1088;&#1079;&#1083;&#1080;, &#1076;&#1086; &#1087;&#1086;&#1076;&#1079;&#1077;&#1084;&#1085;&#1099;&#1093; &#1080;&#1089;&#1090;&#1086;&#1095;&#1085;&#1080;&#1082;&#1086;&#1074; &#1086;&#1085;&#1072; &#1076;&#1086;&#1082;&#1086;&#1087;&#1072;&#1090;&#1100;&#1089;&#1103; &#1085;&#1077; &#1091;&#1089;&#1087;&#1077;&#1083;&#1072;, &#1072; &#1082;&#1072;&#1082; &#1080;&#1079; &#1083;&#1100;&#1076;&#1072; &#1076;&#1086;&#1073;&#1099;&#1090;&#1100; &#1074;&#1086;&#1076;&#1091; &#1085;&#1077; &#1076;&#1086;&#1090;&#1091;&#1084;&#1082;&#1072;&#1083;&#1072;.&lt;/p&gt;
&lt;p&gt;&#1055;&#1103;&#1090;&#1072;&#1103; &#1089;&#1077;&#1081;&#1095;&#1072;&#1089; &#1087;&#1086;&#1075;&#1080;&#1073;&#1072;&#1077;&#1090; &#1086;&#1090;.. &lt;a href="http://dwarffortresswiki.org/index.php/DF2012:Release_information/0.34.07"&gt;&lt;strong&gt;&#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1080;&#1103; 34.07&lt;/strong&gt;&lt;/a&gt;, &#1087;&#1086;&#1089;&#1083;&#1077; &#1082;&#1086;&#1090;&#1086;&#1088;&#1086;&#1075;&#1086; &#1076;&#1077;&#1090;&#1080; &#1074;&#1076;&#1088;&#1091;&#1075; &#1089;&#1090;&#1072;&#1083;&#1080; &#1087;&#1072;&#1085;&#1080;&#1082;&#1086;&#1074;&#1072;&#1090;&#1100; &#1087;&#1086; &#1087;&#1086;&#1074;&#1086;&#1076;&#1091; &#1089;&#1074;&#1086;&#1077;&#1081; &#1086;&#1076;&#1077;&#1078;&#1076;&#1099; (&#1077;&#1077; &#1086;&#1090;&#1089;&#1091;&#1090;&#1089;&#1090;&#1074;&#1080;&#1103; &#1080;&#1083;&#1080; &#1087;&#1086;&#1085;&#1086;&#1096;&#1077;&#1085;&#1085;&#1086;&#1089;&#1090;&#1080;, &#1072; &#1085;&#1086;&#1074;&#1091;&#1102; &#1085;&#1072;&#1076;&#1077;&#1074;&#1072;&#1090;&#1100; &#1085;&#1077; &#1093;&#1086;&#1090;&#1103;&#1090;) &#1080; &#1089;&#1093;&#1086;&#1076;&#1080;&#1090;&#1100; &#1089; &#1091;&#1084;&#1072;..&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:zed.0xff.me,2008:Post/85</id>
    <published>2012-01-17T13:03:00Z</published>
    <updated>2012-01-17T13:03:34Z</updated>
    <link rel="alternate" type="text/html" href="http://zed.0xff.me/2012/01/17/raskodiruem-trojan-siggen3-35000"/>
    <title>&#1088;&#1072;&#1089;&#1082;&#1086;&#1076;&#1080;&#1088;&#1091;&#1077;&#1084; Trojan.Siggen3.35000</title>
    <content type="html">&lt;h2&gt;&#1083;&#1077;&#1095;&#1077;&#1085;&#1080;&#1077;&lt;/h2&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="https://gist.github.com/1626577"&gt;&#1076;&#1077;&#1082;&#1086;&#1076;&#1077;&#1088; &#1080;&#1089;&#1087;&#1086;&#1088;&#1095;&#1077;&#1085;&#1085;&#1099;&#1093; &#1092;&#1072;&#1081;&#1083;&#1086;&#1074;&lt;/a&gt; (&lt;a href="https://gist.github.com/gists/1626577/download"&gt;&#1087;&#1088;&#1103;&#1084;&#1072;&#1103; &#1089;&#1089;&#1099;&#1083;&#1082;&#1072; &#1085;&#1072; &#1089;&#1082;&#1088;&#1080;&#1087;&#1090;&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://rubyinstaller.org/"&gt;RubyInstaller &#1076;&#1083;&#1103; Windows&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&#1086;&#1073;&#1085;&#1072;&#1088;&#1091;&#1078;&#1077;&#1085;&#1080;&#1077;&lt;/h2&gt;
&lt;p&gt;&#1055;&#1086;&#1087;&#1072;&#1083;&#1089;&#1103; &#1084;&#1085;&#1077; &#1082;&#1072;&#1082;-&#1090;&#1086; &#1074; &#1088;&#1091;&#1082;&#1080; &#1090;&#1088;&#1086;&#1103;&#1085;&#1095;&#1080;&#1082;.&lt;br /&gt;
&#1042;&#1086;&#1090; &#1077;&#1075;&#1086; &#1072;&#1085;&#1072;&#1083;&#1080;&#1079; &#1085;&#1072; &lt;a href="http://pedump.me/2a8242105fed0d1708f56ae251c45e7e/"&gt;pedump.me&lt;/a&gt;&lt;br /&gt;
&#1042;&#1086;&#1090; &#1090;&#1072;&#1082; &#1086;&#1085; &#1086;&#1073;&#1085;&#1072;&#1088;&#1091;&#1078;&#1080;&#1074;&#1072;&#1077;&#1090;&#1089;&#1103; &#1088;&#1072;&#1079;&#1083;&#1080;&#1095;&#1085;&#1099;&#1084;&#1080; &#1072;&#1085;&#1090;&#1080;&#1074;&#1080;&#1088;&#1091;&#1089;&#1072;&#1084;&#1080;:&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;td&gt; AntiVir:         &lt;/td&gt;
		&lt;td style="color:red;"&gt;TR/Offend.6610086.8 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; BitDefender:     &lt;/td&gt;
		&lt;td style="color:red;"&gt;Trojan.Generic.6610086 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; ClamAV:          &lt;/td&gt;
		&lt;td style="color:red;"&gt;Trojan.Dropper-31300 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; DrWeb:           &lt;/td&gt;
		&lt;td style="color:red;"&gt;Trojan.Siggen3.35000 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; Emsisoft:        &lt;/td&gt;
		&lt;td style="color:red;"&gt;Trojan.SuspectCRC!IK &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; F-Secure:        &lt;/td&gt;
		&lt;td style="color:red;"&gt;Trojan.Generic.6610086 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; Fortinet:        &lt;/td&gt;
		&lt;td style="color:red;"&gt;W32/Filecoder.AA &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; GData:           &lt;/td&gt;
		&lt;td style="color:red;"&gt;Trojan.Generic.6610086 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; Ikarus:          &lt;/td&gt;
		&lt;td style="color:red;"&gt;Trojan.SuspectCRC &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; K7AntiVirus:     &lt;/td&gt;
		&lt;td style="color:red;"&gt;Riskware &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; Kaspersky:       &lt;/td&gt;
		&lt;td style="color:red;"&gt;&lt;span class="caps"&gt;UDS&lt;/span&gt;:DangerousObject.Multi.Generic &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; McAfee:          &lt;/td&gt;
		&lt;td style="color:red;"&gt;Artemis!2A8242105FED &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; NOD32:           &lt;/td&gt;
		&lt;td style="color:red;"&gt;Win32/Filecoder.AA &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; Norman:          &lt;/td&gt;
		&lt;td style="color:red;"&gt;W32/Malware.&lt;span class="caps"&gt;WVNX&lt;/span&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; Panda:           &lt;/td&gt;
		&lt;td style="color:red;"&gt;Trj/CI.A &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; TheHacker:       &lt;/td&gt;
		&lt;td style="color:red;"&gt;Trojan/Filecoder.ab &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;a href="https://www.virustotal.com/file/200c4a9de8f34ee08d1b9bd6e95e5cf7e0d761741d1c3143f9ea9d402d422ca1/analysis/1326698567/"&gt;&#1087;&#1086;&#1083;&#1085;&#1099;&#1081; &#1086;&#1090;&#1095;&#1077;&#1090; &#1085;&#1072; virustotal.com&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&#1072;&#1085;&#1072;&#1083;&#1080;&#1079;&lt;/h2&gt;
&lt;p&gt;&#1090;&#1088;&#1086;&#1103;&#1085; &#1087;&#1086;&#1088;&#1090;&#1080;&#1090; &lt;span class="caps"&gt;JPG&lt;/span&gt;, &lt;span class="caps"&gt;DOC&lt;/span&gt;, &lt;span class="caps"&gt;XLS&lt;/span&gt; &#1092;&#1072;&#1081;&#1083;&#1099;. &#1054;&#1073;&#1085;&#1072;&#1088;&#1091;&#1078;&#1080;&#1090;&#1100; &#1080;&#1089;&#1087;&#1086;&#1088;&#1095;&#1077;&#1085;&#1085;&#1099;&#1077; &#1092;&#1072;&#1081;&#1083;&#1099; &#1084;&#1086;&#1078;&#1085;&#1086; &#1074;&#1080;&#1079;&#1091;&#1072;&#1083;&#1100;&#1085;&#1086; &#1087;&#1086; &#1089;&#1083;&#1077;&#1076;&#1091;&#1102;&#1097;&#1077;&#1084;&#1091; &#1082;&#1091;&#1089;&#1082;&#1091; &#1076;&#1072;&#1085;&#1085;&#1099;&#1093; &#1074; &#1082;&#1086;&#1085;&#1094;&#1077; &#1092;&#1072;&#1081;&#1083;&#1072;:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;001a2cfb:  34 36 34 36 34 34 33 38  34 36 34 36 34 35 33 31  |4646443846464531|&lt;tt&gt;
&lt;/tt&gt;001a2d0b:  33 32 33 35 34 36 34 36  34 36 34 36 33 30 33 31  |3235464646463031|&lt;tt&gt;
&lt;/tt&gt;001a2d1b:  33 30 33 30 33 30 33 30  33 30 33 30 33 30 33 30  |3030303030303030|&lt;tt&gt;
&lt;/tt&gt;001a2d2b:  33 30 33 30 33 30 33 30  33 30 33 30 33 30 33 30  |3030303030303030|&lt;tt&gt;
&lt;/tt&gt;001a2d3b:  33 30 33 30 33 30 33 30  33 30 33 30 33 30 33 30  |3030303030303030|&lt;tt&gt;
&lt;/tt&gt;001a2d4b:  33 30 33 30 33 30 33 30  33 30 33 30 33 30 33 30  |3030303030303030|&lt;tt&gt;
&lt;/tt&gt;001a2d5b:  33 30 33 30 14 00 00 00  00 fb 2c 1a 00 14 00 04  |3030......,.....|&lt;tt&gt;
&lt;/tt&gt;001a2d6b:  00 00 0f 2d 1a 00 14 00  08 00 00 23 2d 1a 00 14  |...-.......#-...|&lt;tt&gt;
&lt;/tt&gt;001a2d7b:  00 0c 00 00 37 2d 1a 00  14 00 10 00 00 4b 2d 1a  |....7-.......K-.|&lt;tt&gt;
&lt;/tt&gt;001a2d8b:  00 05 &lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;(&#1082;&#1086;&#1085;&#1082;&#1088;&#1077;&#1090;&#1085;&#1099;&#1077; &#1076;&#1072;&#1085;&#1085;&#1099;&#1077; &#1088;&#1072;&#1079;&#1083;&#1080;&#1095;&#1085;&#1099; &#1074; &#1079;&#1072;&#1074;&#1080;&#1089;&#1080;&#1084;&#1086;&#1089;&#1090;&#1080; &#1086;&#1090; &#1089;&#1086;&#1076;&#1077;&#1088;&#1078;&#1080;&#1084;&#1086;&#1075;&#1086; &#1092;&#1072;&#1081;&#1083;&#1072;)&lt;/p&gt;
&lt;p&gt;&#1088;&#1077;&#1079;&#1091;&#1083;&#1100;&#1090;&#1072;&#1090; &#1073;&#1080;&#1085;&#1072;&#1088;&#1085;&#1086;&#1075;&#1086; &#1089;&#1088;&#1072;&#1074;&#1085;&#1077;&#1085;&#1080;&#1103; &#1085;&#1086;&#1088;&#1084;&#1072;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; (&#1089;&#1083;&#1077;&#1074;&#1072;) &#1080; &#1080;&#1089;&#1087;&#1086;&#1088;&#1095;&#1077;&#1085;&#1085;&#1086;&#1075;&#1086; (&#1089;&#1087;&#1088;&#1072;&#1074;&#1072;) &#1092;&#1072;&#1081;&#1083;&#1072;:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;15&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;25&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;00000000: ff 54&lt;tt&gt;
&lt;/tt&gt;00000001: d8 2f&lt;tt&gt;
&lt;/tt&gt;00000002: ff 54&lt;tt&gt;
&lt;/tt&gt;00000003: e1 38&lt;tt&gt;
&lt;/tt&gt;00000004: 25 7a&lt;tt&gt;
&lt;/tt&gt;00000400: ff 54&lt;tt&gt;
&lt;/tt&gt;00000401: ff 56&lt;tt&gt;
&lt;/tt&gt;00000402: 01 56&lt;tt&gt;
&lt;/tt&gt;00000403: 00 57&lt;tt&gt;
&lt;/tt&gt;00000404: 00 55&lt;tt&gt;
&lt;/tt&gt;00000800: 00 54&lt;tt&gt;
&lt;/tt&gt;00000801: 00 51&lt;tt&gt;
&lt;/tt&gt;00000802: 00 54&lt;tt&gt;
&lt;/tt&gt;00000803: 00 51&lt;tt&gt;
&lt;/tt&gt;00000804: 00 54&lt;tt&gt;
&lt;/tt&gt;00000c00: 00 54&lt;tt&gt;
&lt;/tt&gt;00000c01: 00 51&lt;tt&gt;
&lt;/tt&gt;00000c02: 00 54&lt;tt&gt;
&lt;/tt&gt;00000c03: 00 51&lt;tt&gt;
&lt;/tt&gt;00000c04: 00 54&lt;tt&gt;
&lt;/tt&gt;00001000: 00 54&lt;tt&gt;
&lt;/tt&gt;00001001: 00 51&lt;tt&gt;
&lt;/tt&gt;00001002: 00 54&lt;tt&gt;
&lt;/tt&gt;00001003: 00 51&lt;tt&gt;
&lt;/tt&gt;00001004: 00 54&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;[!]           168_ok.jpg is  1715451 bytes long&lt;tt&gt;
&lt;/tt&gt;[!]          168_bad.jpg is  1715597 bytes long&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;&#1092;&#1072;&#1082;&#1090;&#1080;&#1095;&#1077;&#1089;&#1082;&#1080; &#1090;&#1088;&#1086;&#1103;&#1085; &#1087;&#1086;&#1088;&#1090;&#1080;&#1090; &#1087;&#1086; 5 &#1073;&#1072;&#1081;&#1090; &#1074; &#1092;&#1072;&#1081;&#1083;&#1077; &#1089; &#1080;&#1085;&#1090;&#1077;&#1088;&#1074;&#1072;&#1083;&#1086;&#1084; &#1074; 1024 &#1073;&#1072;&#1081;&#1090;&#1072;. &#1085;&#1086; &#1085;&#1077; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086; &#1087;&#1086;&#1088;&#1090;&#1080;&#1090;, &#1072; &#1079;&#1072;&#1087;&#1080;&#1089;&#1099;&#1074;&#1072;&#1077;&#1090; &#1086;&#1088;&#1080;&#1075;&#1080;&#1085;&#1072;&#1083; &#1074; &#1082;&#1086;&#1085;&#1077;&#1094; &#1080;&#1089;&#1087;&#1086;&#1088;&#1095;&#1077;&#1085;&#1085;&#1086;&#1075;&#1086; &#1092;&#1072;&#1081;&#1083;&#1072;. &#1074;&#1086;&#1090; &#1085;&#1072;&#1075;&#1083;&#1103;&#1076;&#1085;&#1099;&#1081; &#1074;&#1080;&#1076; &#1095;&#1077;&#1075;&#1086; &#1086;&#1085; &#1090;&#1072;&#1084; &#1087;&#1086;&#1085;&#1072;&#1087;&#1080;&#1089;&#1072;&#1083;:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;001a2d5f:  14  00 00 00 00  fb 2c 1a 00  |......,..|&lt;tt&gt;
&lt;/tt&gt;001a2d68:  14  00 04 00 00  0f 2d 1a 00  |......-..|&lt;tt&gt;
&lt;/tt&gt;001a2d71:  14  00 08 00 00  23 2d 1a 00  |.....#-..|&lt;tt&gt;
&lt;/tt&gt;001a2d7a:  14  00 0c 00 00  37 2d 1a 00  |.....7-..|&lt;tt&gt;
&lt;/tt&gt;001a2d83:  14  00 10 00 00  4b 2d 1a 00  |.....K-..|&lt;tt&gt;
&lt;/tt&gt;001a2d8c:  05         &lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
</content>
  </entry>
  <entry>
    <id>tag:zed.0xff.me,2008:Post/84</id>
    <published>2011-10-24T16:43:00Z</published>
    <updated>2011-10-24T16:43:27Z</updated>
    <link rel="alternate" type="text/html" href="http://zed.0xff.me/2011/10/24/radare2-0-8-x-unnecessary-memory-zeroing-fix"/>
    <title>radare2 0.8.x unnecessary memory zeroing fix</title>
    <content type="html">&lt;p&gt;&lt;a href="http://radare.org/"&gt;radare2&lt;/a&gt; &lt;a href="http://radare.org/y/bugs.php?bugs&amp;amp;s=view&amp;amp;id=49"&gt;bug&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;the bug only appears when debugging 32-bit binary on a 64-bit host&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;15&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;25&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;29&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;31&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;&lt;span class="line c"&gt;diff -r e96275c214b5 libr/io/p/io_ptrace.c&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="line head"&gt;&lt;span class="head"&gt;--- &lt;/span&gt;a/libr/io/p/io_ptrace.c        Mon Oct 24 04:35:42 2011 +0200&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="line head"&gt;&lt;span class="head"&gt;+++ &lt;/span&gt;b/libr/io/p/io_ptrace.c        Mon Oct 24 16:48:31 2011 +0300&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="line chg"&gt;&lt;span class="chg"&gt;@@&lt;/span&gt; -34,9 +34,11 &lt;span class="chg"&gt;@@&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt; #if __OpenBSD__ || __KFBSD__&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt; #define debug_read_raw(x,y) ptrace(PTRACE_PEEKTEXT, (pid_t)(x), (caddr_t)(y), 0)&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt; #define debug_write_raw(x,y,z) ptrace(PTRACE_POKEDATA, (pid_t)(x), (caddr_t)(y), (int)(size_t)(z))&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="line ins"&gt;&lt;span class="ins"&gt;+&lt;/span&gt;typedef int ptrace_word;   // int ptrace(int request, pid_t pid, caddr_t addr, int data);&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt; #else&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt; #define debug_read_raw(x,y) ptrace(PTRACE_PEEKTEXT, x, y, 0)&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt; #define debug_write_raw(x,y,z) ptrace(PTRACE_POKEDATA, x, y, z)&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="line ins"&gt;&lt;span class="ins"&gt;+&lt;/span&gt;typedef void* ptrace_word; // long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt; #endif&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt; &lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt; static int debug_os_read_at(int pid, ut32 *buf, int sz, ut64 addr) {&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="line chg"&gt;&lt;span class="chg"&gt;@@&lt;/span&gt; -63,10 +65,11 &lt;span class="chg"&gt;@@&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt; }&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt; &lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt; static int ptrace_write_at(int pid, const ut8 *pbuf, int sz, ut64 addr) {&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="line del"&gt;&lt;span class="del"&gt;-&lt;/span&gt;        ut32 *buf = (ut32*)pbuf;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="line del"&gt;&lt;span class="del"&gt;-&lt;/span&gt;        ut32 words = sz / sizeof (ut32);&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="line del"&gt;&lt;span class="del"&gt;-&lt;/span&gt;        ut32 last = sz % sizeof (ut32);&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="line del"&gt;&lt;span class="del"&gt;-&lt;/span&gt;        ut32 x, lr, *at = (ut32*)(size_t)addr;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="line ins"&gt;&lt;span class="ins"&gt;+&lt;/span&gt;        ptrace_word *buf = (ptrace_word*)pbuf;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="line ins"&gt;&lt;span class="ins"&gt;+&lt;/span&gt;        ut32 words = sz / sizeof (ptrace_word);&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="line ins"&gt;&lt;span class="ins"&gt;+&lt;/span&gt;        ut32 last = sz % sizeof (ptrace_word);&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="line ins"&gt;&lt;span class="ins"&gt;+&lt;/span&gt;        ut32 x, *at = (ptrace_word*)(size_t)addr;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="line ins"&gt;&lt;span class="ins"&gt;+&lt;/span&gt;        ptrace_word lr;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;         if (sz&amp;lt;1 || addr==UT64_MAX)&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;                 return -1;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;         for (x=0; x&amp;lt;words; x++)&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
</content>
  </entry>
  <entry>
    <id>tag:zed.0xff.me,2008:Post/83</id>
    <published>2011-10-13T20:08:00Z</published>
    <updated>2011-10-13T18:08:01Z</updated>
    <link rel="alternate" type="text/html" href="http://zed.0xff.me/2011/10/13/printing-from-osx-and-ios-to-canon-mf-4018-shared-via-wndr3700"/>
    <title>printing from OSX &amp; iOS to Canon MF-4018 shared via WNDR3700</title>
    <content type="html">&lt;h1&gt;0. Reason for this all&lt;/h1&gt;
&lt;p&gt;&lt;img src="http://mdata.yandex.net/i?path=b0914115153_img_id5396653333269105302.jpg" style="width:200px;float:left;" title="HP Photosmart 5510" alt="HP Photosmart 5510" /&gt;&lt;/p&gt;
&lt;p&gt;Just bought an &lt;strong&gt;HP Photosmart 5510&lt;/strong&gt; with wifi &amp;amp; ePrint and my MacBook Air found and installed it via wifi without the need of any drivers or anything.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://mdata.yandex.net/i?path=b0710105442_img_id1853200644329217696.jpg" style="float:right;" title="Canon MF4018" alt="Canon MF4018" /&gt;&lt;/p&gt;
&lt;p&gt;But I also have older &lt;strong&gt;Canon MF4018&lt;/strong&gt;, connected directly to &lt;strong&gt;WNDR3700&lt;/strong&gt; via usb, and which I failed to set up for printing from my Macs via wifi.&lt;/p&gt;
&lt;h1 style="clear:both;"&gt;1. Drivers&lt;/h1&gt;
&lt;p&gt;&lt;img src="http://mdata.yandex.net/i?path=b0402152750_img_id8036593573375676882.jpg" style="float:left;" title="Netgear WNDR3700" alt="Netgear WNDR3700" /&gt;&lt;/p&gt;
&lt;p&gt;The main reason why I failed is Canon&amp;#8217;s drivers for MF4018 (or MF4010, their printing functions are the same). They only have more or less usable drivers for Windows and Linux, closed-source and bad designed, with a lot of proprietary stuff.&lt;/p&gt;
&lt;p&gt;There is a &lt;a href="http://wiki.openwrt.org/doc/howto/p910nd.server"&gt;way to make your OpenWRT router act like a print server&lt;/a&gt; for Windows &amp;amp; Linux clients, but it refuses to work with &lt;span class="caps"&gt;OSX&lt;/span&gt; client.&lt;/p&gt;
&lt;p&gt;And even if we&amp;#8217;ll somehow force it to work with &lt;span class="caps"&gt;OSX&lt;/span&gt; client, it will still need a lot of Canon drivers installed on Mac and carefully configured. And definitely &lt;strong&gt;will not work with iOS&lt;/strong&gt;&lt;/p&gt;
&lt;h1 style="clear:both;"&gt;2. Workaround&lt;/h1&gt;
&lt;p&gt;You can use one simple workaround if you have an &lt;code&gt;x86&lt;/code&gt; or &lt;code&gt;x86_64&lt;/code&gt; computer running 24/7 at your place. Or if you want to manually turn it on every time when you need to print something.&lt;/p&gt;
&lt;p&gt;You can then install &lt;a href="http://www.cups.org/"&gt;&lt;span class="caps"&gt;CUPS&lt;/span&gt;&lt;/a&gt; on your device, or use a Windows Printer Sharing.&lt;/p&gt;
&lt;p&gt;Unacceptable for me. I only have &lt;strong&gt;WNDR3700&lt;/strong&gt; on &lt;code&gt;ar71xx&lt;/code&gt; platform, and &lt;strong&gt;AppleTV2&lt;/strong&gt; on &lt;code&gt;ARM Cortex A8&lt;/code&gt; running nearly 24/7 at my home.&lt;/p&gt;
&lt;h1&gt;3. An Insight&lt;/h1&gt;
&lt;h2&gt;If I can&amp;#8217;t run an x86 PC 24/7 at my place &amp;#8212; who or what can stop me to run it somewhere on Internet?!&lt;/h2&gt;
&lt;p&gt;(I already have a pair of servers on Internet, so let&amp;#8217;s increase their load average a little :)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class="caps"&gt;IMPORTANT&lt;/span&gt;&lt;/strong&gt;: You&amp;#8217;ll need to have a Real IP address at your place, or some other way of receiving data from your Internet server, like a &lt;a href="http://www.revsys.com/writings/quicktips/ssh-tunnel.html"&gt;&lt;span class="caps"&gt;SSH&lt;/span&gt; tunnel&lt;/a&gt;.&lt;/p&gt;
&lt;h1&gt;4. Step-by-step guide&lt;/h1&gt;
&lt;ol&gt;
	&lt;li&gt;WNDR3700 (or other OpenWrt-based router, or DD-&lt;span class="caps"&gt;WRT&lt;/span&gt; one, or &lt;a href="http://code.google.com/p/wl500g/"&gt;wl500g&lt;/a&gt;)
	&lt;ol&gt;
		&lt;li&gt;Connect MF4018 via usb&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://wiki.openwrt.org/doc/howto/p910nd.server"&gt;Set up p910nd&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;Open port 9100 in firewall:&lt;br/&gt;&lt;code&gt;iptables -A INPUT -j ACCEPT -p tcp -s your.internet.server.real.ip --dport 9100&lt;/code&gt;&lt;/li&gt;
	&lt;/ol&gt;&lt;/li&gt;
	&lt;li&gt;Internet server
	&lt;ol&gt;
		&lt;li&gt;install &lt;a href="http://www.cups.org/"&gt;&lt;span class="caps"&gt;CUPS&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;install Canon Proprietary drivers: for example &lt;a href="http://www.canon-europe.com/Support/Consumer_Products/products/Fax__Multifunctionals/Laser/LaserBase_MF_series/i-SENSYS_MF4010.aspx?DLtcmuri=tcm:13-823016&amp;amp;page=1&amp;amp;type=download"&gt;&lt;span class="caps"&gt;UFRII&lt;/span&gt;/&lt;span class="caps"&gt;UFRII&lt;/span&gt; LT Printer Driver for Linux v2.20&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;Add a printer:&lt;br/&gt;&lt;code&gt;lpadmin -p mf4010 -P CNCUPSMF4010ZK.ppd -v socket://my.home.real.ip:9100 -o printer-is-shared=true&lt;/code&gt;&lt;/li&gt;
		&lt;li&gt;enable &lt;span class="caps"&gt;CUPS&lt;/span&gt; Internet sharing: &lt;br/&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/blog/cups20111013.png" alt="" /&gt;&lt;/li&gt;
		&lt;li&gt;set up &lt;span class="caps"&gt;CUPS&lt;/span&gt; and/or firewall to only allow connections from &lt;span class="caps"&gt;YOUR&lt;/span&gt; home/office network&lt;/li&gt;
	&lt;/ol&gt;&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Optional steps&lt;/strong&gt;, needed only for seamless printer autoconfiguration for &lt;span class="caps"&gt;OSX&lt;/span&gt;/iOS devices
	&lt;ol&gt;
		&lt;li&gt;Configure
		&lt;ol&gt;
			&lt;li&gt;Internet server: use &lt;a href="https://github.com/tjfontaine/airprint-generate"&gt;airprint-generate&lt;/a&gt; to generate a &lt;code&gt;.service&lt;/code&gt; file for your printer&lt;/li&gt;
			&lt;li&gt;edit generated file: add &lt;code&gt;&amp;lt;host-name&amp;gt;my.internet.server.real.ip&amp;lt;/host-name&amp;gt;&lt;/code&gt;&lt;/li&gt;
			&lt;li&gt;WNDR3700: install &lt;code&gt;avahi-daemon&lt;/code&gt;, feed it with previously generated file, start it&lt;/li&gt;
		&lt;/ol&gt;&lt;/li&gt;
		&lt;li&gt;Now in &lt;span class="caps"&gt;OSX&lt;/span&gt; &amp;#8220;Add Printers&amp;#8221; Dialog just click &amp;#8220;&lt;strong&gt;&lt;code&gt;+&lt;/code&gt;&lt;/strong&gt;&amp;#8221; and it should see your printer, iOS should see your printer when you&amp;#8217;ll try to print some photo&lt;/li&gt;
	&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;my autogenerated &amp;amp; edited &lt;code&gt;mf4010.service&lt;/code&gt; file:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;15&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;&lt;span class="pp"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="dt"&gt;&amp;lt;!DOCTYPE service-group SYSTEM &amp;quot;avahi-service.dtd&amp;quot;&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="ta"&gt;&amp;lt;service-group&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="ta"&gt;&amp;lt;name&lt;/span&gt; &lt;span class="an"&gt;replace-wildcards&lt;/span&gt;=&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;yes&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class="ta"&gt;&amp;gt;&lt;/span&gt;Canon MF4018&lt;span class="ta"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="ta"&gt;&amp;lt;service&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="ta"&gt;&amp;lt;type&amp;gt;&lt;/span&gt;_ipp._tcp&lt;span class="ta"&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="ta"&gt;&amp;lt;subtype&amp;gt;&lt;/span&gt;_universal._sub._ipp._tcp&lt;span class="ta"&gt;&amp;lt;/subtype&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="ta"&gt;&amp;lt;port&amp;gt;&lt;/span&gt;631&lt;span class="ta"&gt;&amp;lt;/port&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="ta"&gt;&amp;lt;host-name&amp;gt;&lt;/span&gt;my.internet.server.real.ip&lt;span class="ta"&gt;&amp;lt;/host-name&amp;gt;&lt;/span&gt;       &lt;span class="c"&gt;&amp;lt;!-- EDIT THIS --&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="ta"&gt;&amp;lt;txt-record&amp;gt;&lt;/span&gt;txtvers=1&lt;span class="ta"&gt;&amp;lt;/txt-record&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="ta"&gt;&amp;lt;txt-record&amp;gt;&lt;/span&gt;qtotal=1&lt;span class="ta"&gt;&amp;lt;/txt-record&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="ta"&gt;&amp;lt;txt-record&amp;gt;&lt;/span&gt;Transparent=T&lt;span class="ta"&gt;&amp;lt;/txt-record&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="ta"&gt;&amp;lt;txt-record&amp;gt;&lt;/span&gt;URF=none&lt;span class="ta"&gt;&amp;lt;/txt-record&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="ta"&gt;&amp;lt;txt-record&amp;gt;&lt;/span&gt;rp=printers/mf4010&lt;span class="ta"&gt;&amp;lt;/txt-record&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="ta"&gt;&amp;lt;txt-record&amp;gt;&lt;/span&gt;note=laser&lt;span class="ta"&gt;&amp;lt;/txt-record&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="ta"&gt;&amp;lt;txt-record&amp;gt;&lt;/span&gt;product=(GPL Ghostscript)&lt;span class="ta"&gt;&amp;lt;/txt-record&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="ta"&gt;&amp;lt;txt-record&amp;gt;&lt;/span&gt;printer-state=3&lt;span class="ta"&gt;&amp;lt;/txt-record&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="ta"&gt;&amp;lt;txt-record&amp;gt;&lt;/span&gt;printer-type=0x821484&lt;span class="ta"&gt;&amp;lt;/txt-record&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="ta"&gt;&amp;lt;txt-record&amp;gt;&lt;/span&gt;pdl=application/octet-stream,application/pdf,application/postscript,image/gif,image/jpeg,image/png,image/tiff,text/html,text/plain,application/vnd.cups-banner,application/vnd.cups-postscript,application/vnd.cups-raw,application/vnd.hp-hpgl,image/x-bitmap&lt;span class="ta"&gt;&amp;lt;/txt-record&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="ta"&gt;&amp;lt;/service&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="ta"&gt;&amp;lt;/service-group&amp;gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
</content>
  </entry>
  <entry>
    <id>tag:zed.0xff.me,2008:Post/82</id>
    <published>2011-09-21T17:38:00Z</published>
    <updated>2011-09-21T17:38:56Z</updated>
    <link rel="alternate" type="text/html" href="http://zed.0xff.me/2011/09/21/hack-lu-2011-ctf-unknown-planet-writeup"/>
    <title>hack.lu 2011 CTF -- Unknown Planet -- writeup</title>
    <content type="html">&lt;p&gt;[ &lt;a href="http://lobotomy.me"&gt;Lobotomy&lt;/a&gt; ]&lt;/p&gt;
&lt;h1&gt;0. original image file&lt;/h1&gt;
&lt;p&gt;&lt;img src="https://github.com/zed-0xff/ctf/raw/master/2011.hacklu/200.unknown.planet+/0_8c4f14e28155a2c3cf4b2538c1e0958b.jpg" alt="" /&gt;&lt;/p&gt;
&lt;h1&gt;1. analyzing image&lt;/h1&gt;
&lt;p&gt;all JPEGs have special &lt;span class="caps"&gt;EOF&lt;/span&gt; marker &lt;strong&gt;&lt;code&gt;FF D9&lt;/code&gt;&lt;/strong&gt; and no data must be after this marker.&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;[zed&lt;span class="iv"&gt;@zmac&lt;/span&gt; &lt;span class="i"&gt;200&lt;/span&gt;.unknown.planet+]&lt;span class="c"&gt;#irb -E binary&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;ruby-&lt;span class="fl"&gt;1.9&lt;/span&gt;.&lt;span class="i"&gt;2&lt;/span&gt;-p290 :&lt;span class="i"&gt;004&lt;/span&gt; &amp;gt; data=&lt;span class="co"&gt;File&lt;/span&gt;.read &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;0_8c4f14e28155a2c3cf4b2538c1e0958b.jpg&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;; data.size&lt;tt&gt;
&lt;/tt&gt; =&amp;gt; &lt;span class="i"&gt;194420&lt;/span&gt; &lt;tt&gt;
&lt;/tt&gt;ruby-&lt;span class="fl"&gt;1.9&lt;/span&gt;.&lt;span class="i"&gt;2&lt;/span&gt;-p290 :&lt;span class="i"&gt;005&lt;/span&gt; &amp;gt; data.split(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\xff&lt;/span&gt;&lt;span class="ch"&gt;\xd9&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;).map(&amp;amp;&lt;span class="sy"&gt;:size&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt; =&amp;gt; [&lt;span class="i"&gt;192405&lt;/span&gt;, &lt;span class="i"&gt;2013&lt;/span&gt;] &lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;so, we can see that there&amp;#8217;s &lt;strong&gt;2013&lt;/strong&gt; spare bytes after &lt;span class="caps"&gt;EOF&lt;/span&gt; marker.&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;&lt;span class="co"&gt;File&lt;/span&gt;.open(&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;foo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;w&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;){ |f| f&amp;lt;&amp;lt; data.split(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\xff&lt;/span&gt;&lt;span class="ch"&gt;\xd9&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;).last }&lt;tt&gt;
&lt;/tt&gt; =&amp;gt; &lt;span class="c"&gt;#&amp;lt;File:foo (closed)&amp;gt; &lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;ruby-&lt;span class="fl"&gt;1.9&lt;/span&gt;.&lt;span class="i"&gt;2&lt;/span&gt;-p290 :&lt;span class="i"&gt;007&lt;/span&gt; &amp;gt; ^&lt;span class="co"&gt;D&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;[zed&lt;span class="iv"&gt;@zmac&lt;/span&gt; &lt;span class="i"&gt;200&lt;/span&gt;.unknown.planet+]&lt;span class="c"&gt;#file foo&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="ke"&gt;foo&lt;/span&gt;: &lt;span class="co"&gt;Zip&lt;/span&gt; archive data, at least v2.&lt;span class="i"&gt;0&lt;/span&gt; to extract&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;&lt;span class="caps"&gt;AHA&lt;/span&gt;! It&amp;#8217;s a zip! :)&lt;/p&gt;
&lt;h1&gt;2. unzipping&lt;/h1&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;15&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;25&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;29&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;31&lt;tt&gt;
&lt;/tt&gt;32&lt;tt&gt;
&lt;/tt&gt;33&lt;tt&gt;
&lt;/tt&gt;34&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;[zed@zmac 200.unknown.planet+]#unzip foo &lt;tt&gt;
&lt;/tt&gt;Archive:  foo&lt;tt&gt;
&lt;/tt&gt;  inflating: 5IIUED7GheR             &lt;tt&gt;
&lt;/tt&gt;  inflating: 6JXtwsTTh9k             &lt;tt&gt;
&lt;/tt&gt;  inflating: 87F1s5POUJc             &lt;tt&gt;
&lt;/tt&gt;  inflating: BPiIOASG_Z6             &lt;tt&gt;
&lt;/tt&gt;  inflating: nLPA8X0UJqf             &lt;tt&gt;
&lt;/tt&gt;  inflating: rySOWi4fZkA             &lt;tt&gt;
&lt;/tt&gt;  inflating: uvlSlG3Tgow             &lt;tt&gt;
&lt;/tt&gt;  inflating: Uw105aD3qYh             &lt;tt&gt;
&lt;/tt&gt;  inflating: Yui5oq58hlx    &lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;[zed@zmac 200.unknown.planet+]#ls -la&lt;tt&gt;
&lt;/tt&gt;-rw-r--r--@  1 zed  staff  20000 Apr 25 16:45 5IIUED7GheR&lt;tt&gt;
&lt;/tt&gt;-rw-r--r--@  1 zed  staff  20000 Apr 25 16:45 6JXtwsTTh9k&lt;tt&gt;
&lt;/tt&gt;-rw-r--r--@  1 zed  staff  20000 Apr 25 16:45 87F1s5POUJc&lt;tt&gt;
&lt;/tt&gt;-rw-r--r--@  1 zed  staff  20000 Apr 25 16:45 BPiIOASG_Z6&lt;tt&gt;
&lt;/tt&gt;-rw-r--r--@  1 zed  staff  20000 Apr 25 16:45 Uw105aD3qYh&lt;tt&gt;
&lt;/tt&gt;-rw-r--r--@  1 zed  staff  20000 Apr 25 16:45 Yui5oq58hlx&lt;tt&gt;
&lt;/tt&gt;-rw-r--r--@  1 zed  staff   1324 Apr 25 16:45 nLPA8X0UJqf&lt;tt&gt;
&lt;/tt&gt;-rw-r--r--@  1 zed  staff  20000 Apr 25 16:45 rySOWi4fZkA&lt;tt&gt;
&lt;/tt&gt;-rw-r--r--@  1 zed  staff  20000 Apr 25 16:45 uvlSlG3Tgow&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;[zed@zmac 200.unknown.planet+]#file *&lt;tt&gt;
&lt;/tt&gt;5IIUED7GheR: data&lt;tt&gt;
&lt;/tt&gt;6JXtwsTTh9k: data&lt;tt&gt;
&lt;/tt&gt;87F1s5POUJc: 8086 relocatable (Microsoft)&lt;tt&gt;
&lt;/tt&gt;BPiIOASG_Z6: data&lt;tt&gt;
&lt;/tt&gt;Uw105aD3qYh: data&lt;tt&gt;
&lt;/tt&gt;Yui5oq58hlx: data&lt;tt&gt;
&lt;/tt&gt;nLPA8X0UJqf: 8086 relocatable (Microsoft)&lt;tt&gt;
&lt;/tt&gt;rySOWi4fZkA: data&lt;tt&gt;
&lt;/tt&gt;uvlSlG3Tgow: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 8 bit, mono 8000 Hz&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Looks like audio file, that was split in chunks of 20000 bytes each. &lt;br /&gt;
&lt;strong&gt;&lt;code&gt;uvlSlG3Tgow&lt;/code&gt;&lt;/strong&gt; is a first chunk b/c it has a &lt;span class="caps"&gt;RIFF&lt;/span&gt; &lt;span class="caps"&gt;WAVE&lt;/span&gt; header.&lt;br /&gt;
&lt;strong&gt;&lt;code&gt;nLPA8X0UJqf&lt;/code&gt;&lt;/strong&gt; is a last tail chunk b/c it&amp;#8217;s size less than 20000.&lt;/p&gt;
&lt;h1&gt;3. gluing waves&lt;/h1&gt;
&lt;p&gt;importing files in Audacity (or any other sound editor) discovers that source file is supposed to be a &lt;a href="http://en.wikipedia.org/wiki/Morse_code"&gt;Morse&lt;/a&gt; &amp;#8211; coded message. But we must find a correct order of chunks.&lt;br /&gt;
So, morse code consists of &lt;code&gt;dots&lt;/code&gt; and &lt;code&gt;dashes&lt;/code&gt;. Each kind must have fixed length.&lt;br /&gt;
We suppose that source file was generated programmatically, not recorder from line or mic. So, it&amp;#8217;s timings must be perfect.&lt;br /&gt;
Following tool helps to manually find a correct chunks order.&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;15&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;25&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;29&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;31&lt;tt&gt;
&lt;/tt&gt;32&lt;tt&gt;
&lt;/tt&gt;33&lt;tt&gt;
&lt;/tt&gt;34&lt;tt&gt;
&lt;/tt&gt;35&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;&lt;span class="dt"&gt;#!/usr/bin/env ruby&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="co"&gt;STDOUT&lt;/span&gt;.sync = &lt;span class="pc"&gt;true&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;if&lt;/span&gt; &lt;span class="pc"&gt;ARGV&lt;/span&gt;.size == &lt;span class="i"&gt;0&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  raise &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;gimme at least one chunk filename&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;b0 = &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\x80&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;*&lt;span class="i"&gt;8&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;b1 = &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="ch"&gt;\x27&lt;/span&gt;&lt;span class="ch"&gt;\x01&lt;/span&gt;&lt;span class="ch"&gt;\x27&lt;/span&gt;&lt;span class="ch"&gt;\x80&lt;/span&gt;&lt;span class="ch"&gt;\xd9&lt;/span&gt;&lt;span class="ch"&gt;\xff&lt;/span&gt;&lt;span class="ch"&gt;\xd9&lt;/span&gt;&lt;span class="ch"&gt;\x80&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;data = &lt;span class="pc"&gt;ARGV&lt;/span&gt;.map{ |x| &lt;span class="co"&gt;File&lt;/span&gt;.read(x) }.join.force_encoding(&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;binary&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;if&lt;/span&gt; data[&lt;span class="i"&gt;0&lt;/span&gt;,&lt;span class="i"&gt;4&lt;/span&gt;] == &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;RIFF&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  data = data[&lt;span class="i"&gt;44&lt;/span&gt;..&lt;span class="i"&gt;-1&lt;/span&gt;]&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="co"&gt;N&lt;/span&gt;=&lt;span class="i"&gt;120&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;b0 = b0*&lt;span class="co"&gt;N&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;b1 = b1*&lt;span class="co"&gt;N&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;r = &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="i"&gt;0&lt;/span&gt;.step(data.size-&lt;span class="i"&gt;1&lt;/span&gt;,b0.size) &lt;span class="r"&gt;do&lt;/span&gt; |i|&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;case&lt;/span&gt; (d=data[i,b0.size])&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;when&lt;/span&gt; b0&lt;tt&gt;
&lt;/tt&gt;    print &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;.&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    r &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;when&lt;/span&gt; b1&lt;tt&gt;
&lt;/tt&gt;    print &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;#&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    r &amp;lt;&amp;lt; &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;else&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    raise &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;SYNC ERROR&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="r"&gt;if&lt;/span&gt; d.size == b0.size&lt;tt&gt;
&lt;/tt&gt;    raise &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;NOT ENOUGH DATA &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;d.size&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="k"&gt;/&lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;b0.size&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    raise &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;unknown &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;d.size&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="k"&gt; (normal: &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;b0.size&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="k"&gt;) bytes of data &lt;/span&gt;&lt;span class="il"&gt;&lt;span class="idl"&gt;#{&lt;/span&gt;d.split(&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;).map{|x| &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;%02x &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; % x.ord}.join&lt;span class="idl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;calling with a single chunk &amp;#8211; script says that it needs more data (more chunks):&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;[zed&lt;span class="iv"&gt;@zmac&lt;/span&gt; &lt;span class="i"&gt;1&lt;/span&gt;]&lt;span class="c"&gt;#./2_manually_guess_chunk_order.rb uvlSlG3Tgow &lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;##..######..######.../2_manually_guess_chunk_order.rb:32:in `block in &amp;lt;main&amp;gt;': NOT ENOUGH DATA 756/960&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;calling with wrong 2nd chunk =&amp;gt; &lt;code&gt;SYNC ERROR&lt;/code&gt;:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;[zed&lt;span class="iv"&gt;@zmac&lt;/span&gt; &lt;span class="i"&gt;1&lt;/span&gt;]&lt;span class="c"&gt;#./2_manually_guess_chunk_order.rb uvlSlG3Tgow 6JXtwsTTh9k &lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;##..######..######..###./2_manually_guess_chunk_order.rb:31:in `block in &amp;lt;main&amp;gt;': SYNC ERROR &lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;two chunks in correct order, script says it needs more chunks:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;[zed&lt;span class="iv"&gt;@zmac&lt;/span&gt; &lt;span class="i"&gt;1&lt;/span&gt;]&lt;span class="c"&gt;#./2_manually_guess_chunk_order.rb uvlSlG3Tgow 5IIUED7GheR &lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;##..######..######..##......##..##..##..#./2_manually_guess_chunk_order.rb:32:in `block in &amp;lt;main&amp;gt;': NOT ENOUGH DATA 596/960 &lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;all chunks in correct order:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;[zed&lt;span class="iv"&gt;@zmac&lt;/span&gt; &lt;span class="i"&gt;1&lt;/span&gt;]&lt;span class="c"&gt;#./2_manually_guess_chunk_order.rb uvlSlG3Tgow 5IIUED7GheR rySOWi4fZkA 87F1s5POUJc 6JXtwsTTh9k Uw105aD3qYh BPiIOASG_Z6 Yui5oq58hlx nLPA8X0UJqf &lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="c"&gt;##..######..######..##......##..##..##..##......##......##..##......######..##..######......######..##..######..######......######..######..######......##..##..##......&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;h1&gt;4. decoding Morse&lt;/h1&gt;
&lt;p&gt;we&amp;#8217;ll need a &lt;a href="http://rubygems.org/gems/morse"&gt;ruby morse gem&lt;/a&gt;. install it with &amp;#8220;&lt;strong&gt;&lt;code&gt;gem install morse&lt;/code&gt;&lt;/strong&gt;&amp;#8221;&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;[zed&lt;span class="iv"&gt;@zmac&lt;/span&gt; &lt;span class="i"&gt;200&lt;/span&gt;.unknown.planet+]&lt;span class="c"&gt;#irb&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;ruby-&lt;span class="fl"&gt;1.9&lt;/span&gt;.&lt;span class="i"&gt;2&lt;/span&gt;-p290 :&lt;span class="i"&gt;001&lt;/span&gt; &amp;gt; r=&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;##..######..######..##......##..##..##..##......##......##..##......######..##..######......######..##..######..######......######..######..######......##..##..##......&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;ruby-&lt;span class="fl"&gt;1.9&lt;/span&gt;.&lt;span class="i"&gt;2&lt;/span&gt;-p290 :&lt;span class="i"&gt;002&lt;/span&gt; &amp;gt; require &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;morse&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt; =&amp;gt; &lt;span class="pc"&gt;true&lt;/span&gt; &lt;tt&gt;
&lt;/tt&gt;ruby-&lt;span class="fl"&gt;1.9&lt;/span&gt;.&lt;span class="i"&gt;2&lt;/span&gt;-p290 :&lt;span class="i"&gt;005&lt;/span&gt; &amp;gt; puts &lt;span class="co"&gt;Morse&lt;/span&gt;.decode(r.gsub(&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;......&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt; &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;).gsub(&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;######&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;-&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;).gsub(&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;).gsub(&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;##&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;))&lt;tt&gt;
&lt;/tt&gt;&lt;span class="co"&gt;PHEIKYOS&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Voila! &amp;#8220;&lt;strong&gt;Pheikyos&lt;/strong&gt;&amp;#8221; is the answer. Case-sensitive.&lt;/p&gt;
&lt;p style="color:gray;"&gt;PS: all source &amp;amp; data files are available at my &lt;a href="https://github.com/zed-0xff/ctf/tree/master/2011.hacklu/200.unknown.planet+" style="color:gray;"&gt;ctf github repo&lt;/a&gt;.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:zed.0xff.me,2008:Post/81</id>
    <published>2011-09-15T09:58:00Z</published>
    <updated>2011-09-15T09:58:12Z</updated>
    <link rel="alternate" type="text/html" href="http://zed.0xff.me/2011/09/15/iphone-glossy-buttons"/>
    <title>iphone glossy buttons howto</title>
    <content type="html">&lt;h2&gt;sample images&lt;/h2&gt;
&lt;table&gt;&lt;tr align=center&gt;&lt;td&gt;one big sample image&lt;/td&gt;&lt;td&gt;33 individual button images&lt;/td&gt;&lt;p&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;
&lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/glossy-accept-buttons.png" alt="" /&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnR00.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnG00.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnB00.png" alt="" /&gt;&lt;br /&gt;
&lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnR01.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnG01.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnB01.png" alt="" /&gt;&lt;br /&gt;
&lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnR02.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnG02.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnB02.png" alt="" /&gt;&lt;br /&gt;
&lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnR03.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnG03.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnB03.png" alt="" /&gt;&lt;br /&gt;
&lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnR04.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnG04.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnB04.png" alt="" /&gt;&lt;br /&gt;
&lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnR05.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnG05.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnB05.png" alt="" /&gt;&lt;br /&gt;
&lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnR06.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnG06.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnB06.png" alt="" /&gt;&lt;br /&gt;
&lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnR07.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnG07.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnB07.png" alt="" /&gt;&lt;br /&gt;
&lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnR08.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnG08.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnB08.png" alt="" /&gt;&lt;br /&gt;
&lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnR09.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnG09.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnB09.png" alt="" /&gt;&lt;br /&gt;
&lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnR10.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnG10.png" alt="" /&gt; &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnB10.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;
&lt;h2&gt;ObjC code&lt;/h2&gt;
&lt;p&gt;Following ObjC code uses iphone Private &lt;span class="caps"&gt;API&lt;/span&gt; (&lt;strong&gt;&lt;code&gt;UIGlassButton&lt;/code&gt;&lt;/strong&gt; class), so it may be rejected from AppStore.&lt;br /&gt;
&lt;span class="caps"&gt;BUT&lt;/span&gt; you can generate a lot of iphone-style glossy button images with it, save to &lt;span class="caps"&gt;PNG&lt;/span&gt;, and use in your projects.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class="caps"&gt;IMPORTANT&lt;/span&gt;:&lt;/strong&gt; this code must be run on &lt;strong&gt;iPhone simulator&lt;/strong&gt;. it saves &lt;span class="caps"&gt;PNG&lt;/span&gt; images to &lt;code&gt;/tmp&lt;/code&gt; folder on your computer&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;15&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;25&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;&lt;span class="pp"&gt;#define&lt;/span&gt; UIColorFromRGBA(rgbValue,a) [UIColor colorWithRed:((&lt;span class="pt"&gt;float&lt;/span&gt;)((rgbValue &amp;amp; &lt;span class="hx"&gt;0xFF0000&lt;/span&gt;) &amp;gt;&amp;gt; &lt;span class="i"&gt;16&lt;/span&gt;))/&lt;span class="i"&gt;25&lt;/span&gt;&lt;span class="fl"&gt;5&lt;/span&gt;&lt;span class="fl"&gt;.0&lt;/span&gt; \&lt;tt&gt;
&lt;/tt&gt;  green:((&lt;span class="pt"&gt;float&lt;/span&gt;)((rgbValue &amp;amp; &lt;span class="hx"&gt;0xFF00&lt;/span&gt;) &amp;gt;&amp;gt; &lt;span class="i"&gt;8&lt;/span&gt;))/&lt;span class="i"&gt;25&lt;/span&gt;&lt;span class="fl"&gt;5&lt;/span&gt;&lt;span class="fl"&gt;.0&lt;/span&gt; \&lt;tt&gt;
&lt;/tt&gt;  blue:((&lt;span class="pt"&gt;float&lt;/span&gt;)(rgbValue &amp;amp; &lt;span class="hx"&gt;0xFF&lt;/span&gt;))/&lt;span class="i"&gt;25&lt;/span&gt;&lt;span class="fl"&gt;5&lt;/span&gt;&lt;span class="fl"&gt;.0&lt;/span&gt; alpha:a]&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;Class theClass = NSClassFromString(&lt;span class="er"&gt;@&lt;/span&gt;&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;UIGlassButton&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class="r"&gt;for&lt;/span&gt;(&lt;span class="pt"&gt;int&lt;/span&gt; j=&lt;span class="i"&gt;0&lt;/span&gt;;j&amp;lt;&lt;span class="i"&gt;3&lt;/span&gt;;j++){&lt;tt&gt;
&lt;/tt&gt;    &lt;span class="r"&gt;for&lt;/span&gt;(&lt;span class="pt"&gt;int&lt;/span&gt; i=&lt;span class="i"&gt;0&lt;/span&gt;;i&amp;lt;=&lt;span class="i"&gt;10&lt;/span&gt;;i++){&lt;tt&gt;
&lt;/tt&gt;        UIButton *theButton = [[[theClass alloc] initWithFrame:CGRectMake(&lt;span class="i"&gt;5&lt;/span&gt;+&lt;span class="i"&gt;120&lt;/span&gt;*j, &lt;span class="i"&gt;5&lt;/span&gt;+i*&lt;span class="i"&gt;44&lt;/span&gt;, &lt;span class="i"&gt;120&lt;/span&gt;, &lt;span class="i"&gt;44&lt;/span&gt;)] autorelease];&lt;tt&gt;
&lt;/tt&gt;        [theButton setValue:UIColorFromRGBA(&lt;span class="hx"&gt;0xff&lt;/span&gt;&amp;lt;&amp;lt;(j*&lt;span class="i"&gt;8&lt;/span&gt;),&lt;span class="fl"&gt;0&lt;/span&gt;&lt;span class="fl"&gt;.1&lt;/span&gt;*i) forKey:&lt;span class="er"&gt;@&lt;/span&gt;&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;tintColor&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;];&lt;tt&gt;
&lt;/tt&gt;        &lt;span class="c"&gt;//[theButton setTitle:@&amp;quot;Accept&amp;quot; forState:UIControlStateNormal];&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;        [self.view addSubview:theButton];&lt;tt&gt;
&lt;/tt&gt;        &lt;tt&gt;
&lt;/tt&gt;        UIGraphicsBeginImageContext(theButton.frame.size);&lt;tt&gt;
&lt;/tt&gt;        CGContextRef theContext = UIGraphicsGetCurrentContext();&lt;tt&gt;
&lt;/tt&gt;        [theButton.layer renderInContext:theContext];&lt;tt&gt;
&lt;/tt&gt;        &lt;tt&gt;
&lt;/tt&gt;        UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();&lt;tt&gt;
&lt;/tt&gt;        NSData *theData = UIImagePNGRepresentation(theImage);&lt;tt&gt;
&lt;/tt&gt;        [theData writeToFile:[NSString stringWithFormat:&lt;tt&gt;
&lt;/tt&gt;                              &lt;span class="er"&gt;@&lt;/span&gt;&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;/tmp/btn%@%02i.png&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,&lt;tt&gt;
&lt;/tt&gt;                              j==&lt;span class="i"&gt;0&lt;/span&gt; ? &lt;span class="er"&gt;@&lt;/span&gt;&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;B&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; : (j==&lt;span class="i"&gt;1&lt;/span&gt; ? &lt;span class="er"&gt;@&lt;/span&gt;&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;G&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; : &lt;span class="er"&gt;@&lt;/span&gt;&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;R&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;),&lt;tt&gt;
&lt;/tt&gt;                              i] atomically:NO];&lt;tt&gt;
&lt;/tt&gt;        &lt;tt&gt;
&lt;/tt&gt;        UIGraphicsEndImageContext();&lt;tt&gt;
&lt;/tt&gt;    }&lt;tt&gt;
&lt;/tt&gt;}&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;h2&gt;and now make them stretch&lt;/h2&gt;
&lt;p&gt;automatically stretching &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/btnB10.png" alt="" /&gt; to &lt;img src="http://photobucket.0xff.me/albums/v624/photozed/iphone/glossy-buttons/long-button.png" alt="" /&gt;&lt;br /&gt;
&lt;span style="color:gray"&gt;(oops, button lost a shadow during screen capture, not important here though)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;note that &lt;strong&gt;&lt;code&gt;stretchableImageWithLeftCapWidth&lt;/code&gt;&lt;/strong&gt; method:&lt;/p&gt;&lt;table class="CodeRay"&gt;&lt;tr&gt;
  &lt;td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class="code"&gt;&lt;pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"&gt;            UIButton* button = [[UIButton alloc] init];&lt;tt&gt;
&lt;/tt&gt;            [button setTitle:&lt;span class="er"&gt;@&lt;/span&gt;&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;  looong long long very long text  &lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; forState:UIControlStateNormal];&lt;tt&gt;
&lt;/tt&gt;            [button setBackgroundImage:[[UIImage imageNamed:&lt;span class="er"&gt;@&lt;/span&gt;&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;btnB10.png&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;] stretchableImageWithLeftCapWidth:&lt;span class="i"&gt;10&lt;/span&gt; topCapHeight:&lt;span class="i"&gt;10&lt;/span&gt;] forState:UIControlStateNormal];&lt;tt&gt;
&lt;/tt&gt;            [button sizeToFit];&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;NB:&lt;/strong&gt; Don&amp;#8217;t forget to &lt;code&gt;release&lt;/code&gt; a &lt;code&gt;button&lt;/code&gt; ! :)&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:zed.0xff.me,2008:Post/80</id>
    <published>2011-09-04T07:19:00Z</published>
    <updated>2011-09-04T06:44:58Z</updated>
    <link rel="alternate" type="text/html" href="http://zed.0xff.me/2011/09/04/nanoissledovanie-twitter"/>
    <title>&#1053;&#1072;&#1085;&#1086;&#1080;&#1089;&#1089;&#1083;&#1077;&#1076;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1090;&#1074;&#1080;&#1090;&#1090;&#1077;&#1088;&#1072; :)</title>
    <content type="html">&lt;h2&gt;1. &#1054;&#1095;&#1077;&#1074;&#1080;&#1076;&#1085;&#1099;&#1081; &#1092;&#1072;&#1082;&#1090; &amp;#8211; &#1084;&#1080;&#1085;&#1080;&#1084;&#1072;&#1083;&#1100;&#1085;&#1072;&#1103; &#1076;&#1083;&#1080;&#1085;&#1072; &#1102;&#1079;&#1077;&#1088;&#1085;&#1077;&#1081;&#1084;&#1072; &#1074; &#1090;&#1074;&#1080;&#1090;&#1090;&#1077;&#1088;&#1077; = 1 &#1089;&#1080;&#1084;&#1074;&#1086;&#1083;&lt;/h2&gt;
&lt;p&gt;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;&#1099;: &lt;a href="http://twitter.com/#!/a"&gt;@a&lt;/a&gt; &lt;a href="http://twitter.com/#!/b"&gt;@b&lt;/a&gt; &lt;a href="http://twitter.com/#!/0"&gt;@0&lt;/a&gt;&lt;br /&gt;
&#1077;&#1089;&#1090;&#1077;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1086;, &#1085;&#1072; &#1076;&#1072;&#1085;&#1085;&#1099;&#1081; &#1084;&#1086;&#1084;&#1077;&#1085;&#1090; &#1086;&#1085;&#1080; &#1091;&#1078;&#1077; &#1074;&#1089;&#1077; &#1076;&#1072;&#1074;&#1085;&#1086; &#1079;&#1072;&#1085;&#1103;&#1090;&#1099; :)&lt;/p&gt;
&lt;h2&gt;2. &#1053;&#1077; &#1074;&#1089;&#1103;&#1082;&#1080;&#1081; @lol &#1101;&#1090;&#1086; &lt;span class="caps"&gt;LOL&lt;/span&gt; &#1080; &#1085;&#1077; &#1074;&#1089;&#1103;&#1082;&#1080;&#1081; @nike &#1101;&#1090;&#1086; Nike&lt;/h2&gt;
&lt;p&gt;&#1087;&#1088;&#1080;&#1084;&#1077;&#1088;&#1099;:&lt;/p&gt;
&lt;table class="t1"&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://twitter.com/#!/nike"&gt;@nike&lt;/a&gt; &lt;/td&gt;
		&lt;td style="text-align:right;"&gt;&lt;strong&gt;1K&lt;/strong&gt; followers &lt;/td&gt;
		&lt;td style="text-align:right;"&gt;0 tweets &lt;/td&gt;
		&lt;td style="color:red;"&gt;&#1085;&#1080; &#1088;&#1072;&#1079;&#1091; &#1085;&#1077; &#1085;&#1072;&#1081;&#1082; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://twitter.com/#!/adidas"&gt;@adidas&lt;/a&gt; &lt;/td&gt;
		&lt;td style="text-align:right;"&gt;&lt;strong&gt;4K&lt;/strong&gt; followers &lt;/td&gt;
		&lt;td style="text-align:right;"&gt;170 tweets &lt;/td&gt;
		&lt;td&gt; &#1074;&#1088;&#1086;&#1076;&#1077; &#1082;&#1072;&#1082; &#1072;&#1076;&#1080;&#1076;&#1072;&#1089; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://twitter.com/#!/puma"&gt;@puma&lt;/a&gt; &lt;/td&gt;
		&lt;td style="text-align:right;"&gt;&lt;strong&gt;21K&lt;/strong&gt; followers &lt;/td&gt;
		&lt;td style="text-align:right;"&gt;1200 tweets &lt;/td&gt;
		&lt;td&gt; &#1072;&#1091;&#1090;&#1077;&#1085;&#1090;&#1080;&#1095;&#1085;&#1072;&#1103; &#1087;&#1091;&#1084;&#1072; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://twitter.com/#!/sela"&gt;@sela&lt;/a&gt; &lt;/td&gt;
		&lt;td style="text-align:right;"&gt;46 followers &lt;/td&gt;
		&lt;td style="text-align:right;"&gt;4 tweets &lt;/td&gt;
		&lt;td style="color:red;"&gt;&#1082;&#1072;&#1082;&#1086;&#1081;-&#1090;&#1086; &#1084;&#1091;&#1078;&#1080;&#1082; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://twitter.com/#!/mcdonalds"&gt;@mcdonalds&lt;/a&gt; &lt;/td&gt;
		&lt;td style="text-align:right;"&gt;&lt;strong&gt;163K&lt;/strong&gt; followers &lt;/td&gt;
		&lt;td style="text-align:right;"&gt;5500 tweets &lt;/td&gt;
		&lt;td&gt; &#1072;&#1091;&#1090;&#1077;&#1085;&#1090;&#1080;&#1095;&#1085;&#1099;&#1081; &#1084;&#1072;&#1082;&#1076;&#1072;&#1082; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td colspan="4"&gt;&amp;nbsp; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://twitter.com/#!/lol"&gt;@lol&lt;/a&gt; &lt;/td&gt;
		&lt;td style="text-align:right;"&gt;800 followers &lt;/td&gt;
		&lt;td style="text-align:right;"&gt;41 tweets &lt;/td&gt;
		&lt;td style="color:red;"&gt;&#1089;&#1086;&#1074;&#1089;&#1077;&#1084; &#1085;&#1077; &#1089;&#1084;&#1077;&#1096;&#1085;&#1086; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://twitter.com/#!/humor"&gt;@humor&lt;/a&gt; &lt;/td&gt;
		&lt;td style="text-align:right;"&gt;1200 followers &lt;/td&gt;
		&lt;td style="text-align:right;"&gt;13 tweets &lt;/td&gt;
		&lt;td style="color:red;"&gt;&#1072;&#1085;&#1072;&#1083;&#1086;&#1075;&#1080;&#1095;&#1085;&#1086; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td colspan="4"&gt;&amp;nbsp; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://twitter.com/#!/yandex"&gt;@yandex&lt;/a&gt; &lt;/td&gt;
		&lt;td style="text-align:right;"&gt;&lt;strong&gt;65K&lt;/strong&gt; followers &lt;/td&gt;
		&lt;td style="text-align:right;"&gt;800 tweets &lt;/td&gt;
		&lt;td&gt; &#1072;&#1091;&#1090;&#1077;&#1085;&#1090;&#1080;&#1095;&#1085;&#1099;&#1081; &#1103;&#1085;&#1076;&#1077;&#1082;&#1089; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://twitter.com/#!/google"&gt;@google&lt;/a&gt; &lt;/td&gt;
		&lt;td style="text-align:right;"&gt;&lt;strong&gt;3.5M&lt;/strong&gt; followers &lt;/td&gt;
		&lt;td style="text-align:right;"&gt;2800 tweets &lt;/td&gt;
		&lt;td&gt; &#1072;&#1091;&#1090;&#1077;&#1085;&#1090;&#1080;&#1095;&#1085;&#1099;&#1081; &#1075;&#1091;&#1075;&#1083; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; &lt;a href="http://twitter.com/#!/apple"&gt;@apple&lt;/a&gt; &lt;/td&gt;
		&lt;td style="text-align:right;"&gt;&lt;strong&gt;2K&lt;/strong&gt; followers &lt;/td&gt;
		&lt;td style="text-align:right;"&gt;2 tweets &lt;/td&gt;
		&lt;td style="color:red;"&gt;&#1085;&#1077; &#1101;&#1087;&#1087;&#1083; &#1085;&#1080; &#1088;&#1072;&#1079;&#1091; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;h2&gt;&#1042;&#1099;&#1074;&#1086;&#1076; &#8470;1: &#1087;&#1086;&#1087;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1081; &#1102;&#1079;&#1077;&#1088;&#1085;&#1077;&#1081;&#1084; &#1074;&#1088;&#1086;&#1076;&#1077; @apple &#1080;&#1083;&#1080; @humor &#1084;&#1086;&#1078;&#1077;&#1090; &#1087;&#1088;&#1080;&#1085;&#1077;&#1089;&#1090;&#1080; &#1087;&#1072;&#1088;&#1091; &#1090;&#1099;&#1089;&#1103;&#1095; &#1083;&#1080;&#1096;&#1085;&#1080;&#1093; &#1092;&#1086;&#1083;&#1083;&#1086;&#1074;&#1077;&#1088;&#1086;&#1074;&lt;/h2&gt;
&lt;h2&gt;&#1042;&#1099;&#1074;&#1086;&#1076; &#8470;2: &#1095;&#1090;&#1086; &#1089;&#1083;&#1077;&#1076;&#1091;&#1077;&#1090; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1090;&#1074;&#1080;&#1090;&#1090;&#1077;&#1088;&#1091;&lt;/h2&gt;
&lt;p&gt;&#1058;&#1074;&#1080;&#1090;&#1090;&#1077;&#1088;&#1091; &#1089;&#1083;&#1077;&#1076;&#1091;&#1077;&#1090; &#1089;&#1076;&#1077;&#1083;&#1072;&#1090;&#1100; &#1074;&#1086;&#1079;&#1084;&#1086;&#1078;&#1085;&#1086;&#1089;&#1090;&#1100; &#1087;&#1086;&#1082;&#1091;&#1087;&#1082;&#1080; &#1091;&#1078;&#1077; &#1089;&#1091;&#1097;&#1077;&#1089;&#1090;&#1074;&#1091;&#1102;&#1097;&#1080;&#1093; &#1080;&#1084;&#1077;&#1085;. &#1053;&#1077; &#1087;&#1088;&#1080;&#1085;&#1091;&#1076;&#1080;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1081; &#1077;&#1089;&#1090;&#1077;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1086;. &#1055;&#1088;&#1086;&#1089;&#1090;&#1086; &#1087;&#1088;&#1080; &#1079;&#1072;&#1093;&#1086;&#1076;&#1077; &#1074; &#1095;&#1091;&#1078;&#1086;&#1081; &#1087;&#1088;&#1086;&#1092;&#1080;&#1083;&#1100; &#1082;&#1085;&#1086;&#1087;&#1086;&#1095;&#1082;&#1072; &amp;#8220;&lt;strong&gt;I want to buy this username&lt;/strong&gt;&amp;#8221; &#1080; &#1082;&#1072;&#1082; &#1085;&#1072; &#1077;&#1073;&#1077;&#1077; &amp;#8211; &#1089;&#1090;&#1072;&#1074;&#1082;&#1080;, &#1084;&#1080;&#1085;&#1080;&#1084;&#1072;&#1083;&#1100;&#1085;&#1072;&#1103; &#1094;&#1077;&#1085;&#1072;, &#1072;&#1091;&#1082;&#1094;&#1080;&#1086;&#1085; (&#1086;&#1087;&#1094;&#1080;&#1086;&#1085;&#1072;&#1083;&#1100;&#1085;&#1086;) &#1080; &#1090;.&#1087;.&lt;br /&gt;
&#1040; &#1084;&#1086;&#1078;&#1077;&#1090; &#1080; &#1089;&#1072;&#1084; &#1074;&#1083;&#1072;&#1076;&#1077;&#1083;&#1077;&#1094; &#1087;&#1088;&#1086;&#1092;&#1080;&#1083;&#1103; &#1091; &#1089;&#1077;&#1073;&#1103; &#1074; &#1085;&#1072;&#1089;&#1090;&#1088;&#1086;&#1081;&#1082;&#1072;&#1093; &#1074;&#1099;&#1089;&#1090;&#1072;&#1074;&#1083;&#1103;&#1090;&#1100; &amp;#8220;&lt;strong&gt;I would sell this username for at least $5000&lt;/strong&gt;&amp;#8221;.&lt;br /&gt;
&#1057;&#1086;&#1086;&#1090;&#1074;&#1077;&#1090;&#1089;&#1090;&#1074;&#1077;&#1085;&#1085;&#1086; &#1077;&#1089;&#1083;&#1080; &#1082;&#1090;&#1086;-&#1090;&#1086; &#1085;&#1072; &#1101;&#1090;&#1091; &#1082;&#1085;&#1086;&#1087;&#1086;&#1095;&#1082;&#1091; &#1085;&#1072;&#1078;&#1072;&#1083;, &#1080; &#1089;&#1091;&#1084;&#1084;&#1091; &#1091;&#1082;&#1072;&#1079;&#1072;&#1083;, &#1086;&#1085; &#1087;&#1086;&#1076;&#1090;&#1074;&#1077;&#1088;&#1078;&#1076;&#1072;&#1077;&#1090; &#1095;&#1090;&#1086; &#1086;&#1085; &#1085;&#1077; &#1087;&#1088;&#1086;&#1089;&#1090;&#1086; &#1090;&#1072;&#1082; &#1085;&#1072;&#1078;&#1072;&#1083;, &#1072; &#1101;&#1090;&#1080;&#1084; &#1074;&#1079;&#1103;&#1083; &#1085;&#1072; &#1089;&#1077;&#1073;&#1103; &lt;strong&gt;&#1086;&#1073;&#1103;&#1079;&#1072;&#1090;&#1077;&#1083;&#1100;&#1089;&#1090;&#1074;&#1086;&lt;/strong&gt; &#1074; &lt;strong&gt;&#1089;&#1083;&#1091;&#1095;&#1072;&#1077; &#1089;&#1086;&#1075;&#1083;&#1072;&#1089;&#1080;&#1103; &#1074;&#1083;&#1072;&#1076;&#1077;&#1083;&#1100;&#1094;&#1072; &#1102;&#1079;&#1077;&#1088;&#1085;&#1077;&#1081;&#1084;&#1072;&lt;/strong&gt; &#1082;&#1091;&#1087;&#1080;&#1090;&#1100; &#1077;&#1075;&#1086; (&#1102;&#1079;&#1077;&#1088;&#1085;&#1077;&#1081;&#1084;, &#1072; &#1085;&#1077; &#1074;&#1083;&#1072;&#1076;&#1077;&#1083;&#1100;&#1094;&#1072; :) &#1079;&#1072; &#1091;&#1082;&#1072;&#1079;&#1072;&#1085;&#1085;&#1091;&#1102; &#1089;&#1091;&#1084;&#1084;&#1091;.&lt;/p&gt;</content>
  </entry>
</feed>
