<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"> <channel><title>empty pages</title> <link>http://look-in.net</link> <description /> <lastBuildDate>Mon, 05 Dec 2011 06:07:14 +0000</lastBuildDate> <generator>http://wordpress.org/?v=2.9.2</generator> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/look-in/EmptyPages" /><feedburner:info uri="look-in/emptypages" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>“Flexible” protocol buffer implementation.</title><link>http://feedproxy.google.com/~r/look-in/EmptyPages/~3/lLJvtryL7i8/</link> <comments>http://look-in.net/2011/06/25/flexible-protocol-buffer/#comments</comments> <pubDate>Sat, 25 Jun 2011 10:08:45 +0000</pubDate> <dc:creator>slookin</dc:creator> <category><![CDATA[java]]></category> <category><![CDATA[projects]]></category> <category><![CDATA[google]]></category> <category><![CDATA[protocolbuf]]></category> <guid isPermaLink="false">http://look-in.net/?p=463</guid> <description><![CDATA[Every body knows about protobuf from Google team. It is very useful and effective protocol for data exchanges.
&#8220;Protocol Buffers are a way of encoding structured data in an efficient yet extensible format. Google uses Protocol Buffers for almost all of  its internal RPC protocols and file formats.&#8221;
For my project  I need to implement specific [...]]]></description> <content:encoded><![CDATA[<p>Every body knows about <a
href="http://code.google.com/p/protobuf/" target="_blank">protobuf</a> from Google team. It is very useful and effective protocol for data exchanges.</p><p
style="text-align: left;"><em>&#8220;Protocol Buffers are a way of encoding structured data in an efficient yet extensible format. Google uses Protocol Buffers for almost all of  its internal RPC protocols and file formats.&#8221;</em></p><p>For my project<em> </em> I need to implement specific router for messages from different clients. So my router (receiver) should be able to read (parse) body of message in order to get information about for routing. But I couldn’t predict all protobuf message format on design phase, as result I should analyze message format on runtime.</p><p><span
id="more-463"></span></p><p>Google team suggest to use special technique &#8220;<a
href="http://code.google.com/apis/protocolbuffers/docs/techniques.html#self-description" target="_blank">Self-describing Messages</a>&#8221; : insert additional field to message with full protocol description. As result all messages will have information about their structue. It is good trick, but the message size will extremely big. (main advantage of protobuf in my project is small message size). So I decide to have full message format catalogue on my router and update this catalogue in runtime.</p><p>The plain-text .proto file should be prepared as message using descriptor.proto and protoc utility.</p><p>The code below shows how router will read protocol format from file system and parse incoming message.</p><p>We will use <strong>addressbook.proto</strong> from examples:</p><pre>package tutorial;
option java_package = "com.example.tutorial";
option
java_outer_classname = "AddressBookProtos";
message Person {
  required string name = 1;
  required int32 id = 2;        // Unique ID number for this person.
  optional string email = 3;
  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
}
  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }
  repeated PhoneNumber phone = 4;
}
// Our address book file is just one of these.
message AddressBook {
  repeated Person person = 1;
}</pre><p>Clients (sender) can implement classical way for producing message (generate java classes via protoc):</p><p><strong>protoc &#8211;java_out=. addressbook.proto </strong></p><p>And following example of message generate:</p><div><p><span
style="font-family: Courier New; font-size: 10pt;"> </span></p><pre>
<div><span style="font-family: Courier New; font-size: 10pt;">   Person.Builder person = Person.<em>newBuilder</em>();</span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">   person.setId(Integer.<em>valueOf</em>(42));</span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">   person.setEmail(</span><span style="font-family: Courier New; color: #2a00ff; font-size: 10pt;">"test_email@gmail.com");</span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">   person.setName(</span><span style="font-family: Courier New; color: #2a00ff; font-size: 10pt;">"Viktor Villari");</span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">   Person p = person.build();</span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">   FileOutputStream fstream = </span><span style="font-family: Courier New; color: #7f0055; font-size: 10pt;"><strong>new</strong></span><span style="font-family: Courier New; font-size: 10pt;"> FileOutputStream(</span><span style="font-family: Courier New; color: #0000c0; font-size: 10pt;"><em>messagePath);</em></span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">   CodedOutputStream outSream = CodedOutputStream.<em>newInstance</em>(fstream);</span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">   p.writeTo(outSream);</span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">   outSream.flush();</span></div>
</pre><pre>as result we will have file with message (<span style="font-family: Courier New; color: #0000c0; font-size: 10pt;"><em>messagePath</em></span>)</pre><pre>After it we should generate descriptor for our addressbook.proto:</pre><pre><strong>protoc --descriptor_set_out=address.proto.descriptor  addressbook.proto </strong></pre><pre>I transfer address.proto.descriptor to receiver format catalogue and following code allow me to parse message:</pre><pre>
<div><span style="font-family: Courier New; color: #3f7f5f; font-size: 10pt;">   // read protocol Descriptor</span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">   FileInputStream input = </span><span style="font-family: Courier New; color: #7f0055; font-size: 10pt;"><strong>new</strong></span><span style="font-family: Courier New; font-size: 10pt;"> FileInputStream(</span><span style="font-family: Courier New; color: #0000c0; font-size: 10pt;"><em>protoDescripter);</em></span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">   DescriptorProtos.FileDescriptorSet fdsProto = DescriptorProtos.FileDescriptorSet.<em>parseFrom</em>(input);</span></div>
<div><span style="font-family: Courier New; color: #3f7f5f; font-size: 10pt;">// point to specific file in FileDescriptorSet</span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">   System.</span><span style="font-family: Courier New; color: #0000c0; font-size: 10pt;"><em>out</em></span><span style="font-family: Courier New; font-size: 10pt;">.println(</span><span style="font-family: Courier New; color: #2a00ff; font-size: 10pt;">"File name = "</span><span style="font-family: Courier New; font-size: 10pt;"> + fdsProto.getFile(0).getName());</span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">   FileDescriptor fileDescr = FileDescriptor.<em>buildFrom</em>(fdsProto.getFile(0), </span><span style="font-family: Courier New; color: #7f0055; font-size: 10pt;"><strong>new</strong></span><span style="font-family: Courier New; font-size: 10pt;"> FileDescriptor[0]);</span></div>
<div><span style="font-family: Courier New; color: #3f7f5f; font-size: 10pt;">// point to specific message type in FileDescriptor</span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">   System.</span><span style="font-family: Courier New; color: #0000c0; font-size: 10pt;"><em>out</em></span><span style="font-family: Courier New; font-size: 10pt;">.println(</span><span style="font-family: Courier New; color: #2a00ff; font-size: 10pt;">"Message type = "</span><span style="font-family: Courier New; font-size: 10pt;"> + fileDescr.getMessageTypes().get(0).getName());</span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">   Descriptor messageType=fileDescr.getMessageTypes().get(0);</span></div>
<div><span style="font-family: Courier New; color: #3f7f5f; font-size: 10pt;">// read and parse incomming message</span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">   input = </span><span style="font-family: Courier New; color: #7f0055; font-size: 10pt;"><strong>new</strong></span><span style="font-family: Courier New; font-size: 10pt;"> FileInputStream(</span><span style="font-family: Courier New; color: #0000c0; font-size: 10pt;"><em>messagePath);</em></span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">   DynamicMessage dm = DynamicMessage.<em>parseFrom</em>(messageType, input);</span></div>
<div><span style="font-family: Courier New; color: #3f7f5f; font-size: 10pt;">// output fields from message</span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">   Iterator&lt;FieldDescriptor&gt; i = messageType.getFields().iterator();</span></div>
<div><span style="font-family: Courier New; color: #7f0055; font-size: 10pt;"><strong>while</strong></span><span style="font-family: Courier New; font-size: 10pt;"> (i.hasNext()) {</span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">    FieldDescriptor field = i.next();</span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">    System.</span><span style="font-family: Courier New; color: #0000c0; font-size: 10pt;"><em>out</em></span><span style="font-family: Courier New; font-size: 10pt;">.println(messageType.getName() + </span><span style="font-family: Courier New; color: #2a00ff; font-size: 10pt;">"."</span><span style="font-family: Courier New; font-size: 10pt;"> + field.getName() + </span><span style="font-family: Courier New; color: #2a00ff; font-size: 10pt;">" value="</span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">      + dm.getField(field) + </span><span style="font-family: Courier New; color: #2a00ff; font-size: 10pt;">" type="</span><span style="font-family: Courier New; font-size: 10pt;"> + field.getJavaType());</span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">   }</span></div>
<div><span style="font-family: Courier New; font-size: 10pt;">So, output of code:</span></div>
File name = addressbook.proto
Message type = Person
Person.name value=Viktor Villari type=STRING
Person.id value=42 type=INT
Person.email value=test_email@gmail.com type=STRING
Person.phone value= type=MESSAGE
<span style="font-family: Courier New; font-size: 10pt;"></span></pre><pre><span style="font-family: Courier New; font-size: 10pt;"><strong>Resume</strong>: using this technique you able to build dynamic message parsing without increase size of each message.</span></pre></div> <img src="http://feeds.feedburner.com/~r/look-in/EmptyPages/~4/lLJvtryL7i8" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://look-in.net/2011/06/25/flexible-protocol-buffer/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://look-in.net/2011/06/25/flexible-protocol-buffer/</feedburner:origLink></item> <item><title>RSS с cайта http://brickpop.com/</title><link>http://feedproxy.google.com/~r/look-in/EmptyPages/~3/1A7gcdHITNg/</link> <comments>http://look-in.net/2011/06/14/rss-s-cayta/#comments</comments> <pubDate>Tue, 14 Jun 2011 08:19:18 +0000</pubDate> <dc:creator>slookin</dc:creator> <category><![CDATA[WebDev]]></category> <category><![CDATA[lego]]></category> <category><![CDATA[rss]]></category> <guid isPermaLink="false">http://look-in.net/?p=460</guid> <description><![CDATA[Через Yaho.pipe сделал что бы картинки в RSS подгружались, а то скучно читать их RSS.
Новый URL RSS: http://feeds.feedburner.com/lego_Brickpop
И да, кто не знает, brickpop публикует изображения интересных lego моделей.
]]></description> <content:encoded><![CDATA[<p>Через Yaho.pipe сделал что бы картинки в RSS подгружались, а то скучно читать их RSS.<br
/> Новый URL RSS: <a
href="http://feeds.feedburner.com/lego_Brickpop">http://feeds.feedburner.com/lego_Brickpop</a></p><p>И да, кто не знает, brickpop публикует изображения интересных lego моделей.</p> <img src="http://feeds.feedburner.com/~r/look-in/EmptyPages/~4/1A7gcdHITNg" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://look-in.net/2011/06/14/rss-s-cayta/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://look-in.net/2011/06/14/rss-s-cayta/</feedburner:origLink></item> <item><title>RSS потоки с форума DoubleBrick</title><link>http://feedproxy.google.com/~r/look-in/EmptyPages/~3/uYGf9VquVeo/</link> <comments>http://look-in.net/2011/04/17/rss-doublebrick/#comments</comments> <pubDate>Sun, 17 Apr 2011 11:31:22 +0000</pubDate> <dc:creator>slookin</dc:creator> <category><![CDATA[WebDev]]></category> <category><![CDATA[nxt]]></category> <category><![CDATA[projects]]></category> <category><![CDATA[lego]]></category> <category><![CDATA[rss]]></category> <guid isPermaLink="false">http://look-in.net/?p=450</guid> <description><![CDATA[Всем добрый день!
Как и все разработчики, я готов потратить несколько часов сейчас, что бы потом получить дополнительные удобства и экономию времени. Так и сейчас, вместо того что бы регулярно читать форум &#8211; настроил RSS потоки, которые содержат основные обновления. Пользуйтесь, может и вам будет полезно:
DoubleBrick Творчество/технический
http://feeds.feedburner.com/doublebrick_creative_technic
RSS с форума http://www.doublebrick.ru/forums/. Работы участников форума, технический подраздел.
DoubleBrick &#8220;Технодром&#8221;
http://feeds.feedburner.com/doublebrick_technic
RSS [...]]]></description> <content:encoded><![CDATA[<p>Всем добрый день!</p><p>Как и все разработчики, я готов потратить несколько часов сейчас, что бы потом получить дополнительные удобства и экономию времени. Так и сейчас, вместо того что бы регулярно читать форум &#8211; настроил RSS потоки, которые содержат основные обновления. Пользуйтесь, может и вам будет полезно:</p><div><table
border="0" cellspacing="0" cellpadding="4" width="60%" align="center"><tbody><tr
style="background-color: #a6b7c7;" valign="middle"><td><a
href="http://feeds.feedburner.com/doublebrick_creative_technic" target="_blank"><img
src="http://look-in.net/wp-includes/images/rss.png" border="0" alt="rss" width="14" height="14" align="bottom" /></a></td><td>DoubleBrick Творчество/технический</td><td><a
href="http://feeds.feedburner.com/doublebrick_creative_technic" target="_blank">http://feeds.feedburner.com/doublebrick_creative_technic</a></td><td>RSS с форума http://www.doublebrick.ru/forums/. Работы участников форума, технический подраздел.</td></tr><tr
style="background-color: #f0f0f0;" valign="middle"><td><a
href="http://feeds.feedburner.com/doublebrick_technic" target="_blank"><img
src="http://look-in.net/wp-includes/images/rss.png" border="0" alt="rss" width="14" height="14" align="bottom" /></a></td><td>DoubleBrick &#8220;Технодром&#8221;</td><td><a
href="http://feeds.feedburner.com/doublebrick_technic">http://feeds.feedburner.com/doublebrick_technic</a></td><td>RSS c форума http://www.doublebrick.ru/forums/. Lego Technic &#8211; интересные решения и вопросы.</td></tr><tr
style="background-color: #a6b7c7;" valign="middle"><td><a
href="http://feeds.feedburner.com/doublebrick_buy" target="_blank"><img
src="http://look-in.net/wp-includes/images/rss.png" border="0" alt="rss" width="14" height="14" align="bottom" /></a></td><td>DoubleBrick &#8220;Куплю&#8221;</td><td><a
href="http://feeds.feedburner.com/doublebrick_buy" target="_blank">http://feeds.feedburner.com/doublebrick_buy</a></td><td>RSS c форума http://www.doublebrick.ru/forums/. О прокупке наборов и деталей лего.</td></tr><tr
style="background-color: #f0f0f0;" valign="middle"><td><a
href="http://feeds.feedburner.com/doublebrick_sell" target="_blank"><img
src="http://look-in.net/wp-includes/images/rss.png" border="0" alt="rss" width="14" height="14" align="bottom" /></a></td><td>DoubleBrick &#8220;Продам&#8221;</td><td><a
href="http://feeds.feedburner.com/doublebrick_sell">http://feeds.feedburner.com/doublebrick_sell</a></td><td>RSS c форума http://www.doublebrick.ru/forums/. О продаже наборов лего.</td></tr><tr
style="background-color: #a6b7c7;" valign="middle"><td><a
href="http://feeds.feedburner.com/doublebrick_sell_parts" target="_blank"><img
src="http://look-in.net/wp-includes/images/rss.png" border="0" alt="rss" width="14" height="14" align="bottom" /></a></td><td>DoubleBrick &#8220;Продам детали&#8221;</td><td><a
href="http://feeds.feedburner.com/doublebrick_sell_parts" target="_blank">http://feeds.feedburner.com/doublebrick_sell_parts</a></td><td>RSS c форума http://www.doublebrick.ru/forums/. О продаже деталей лего.</td></tr></tbody></table></div><p><span
id="more-450"></span></p><p><strong>RSS</strong> — семейство <a
href="http://ru.wikipedia.org/wiki/XML">XML</a>-форматов, предназначенных для описания лент новостей, <a
title="Анонс" href="http://ru.wikipedia.org/wiki/%D0%90%D0%BD%D0%BE%D0%BD%D1%81">анонсов</a> статей, изменений в <a
title="Блог" href="http://ru.wikipedia.org/wiki/%D0%91%D0%BB%D0%BE%D0%B3">блогах</a> и т. п. Информация из различных источников, представленная в формате RSS, может быть собрана, обработана и представлена пользователю в удобном для него виде специальными <a
title="RSS-агрегатор" href="http://ru.wikipedia.org/wiki/RSS-%D0%B0%D0%B3%D1%80%D0%B5%D0%B3%D0%B0%D1%82%D0%BE%D1%80">программами-агрегаторами</a>.</p><p><strong>Лего</strong> &#8211; Основой наборов является <em>кирпичик LEGO</em> — деталь, представляющая собой полый пластмассовый блок, соединяющийся с другими такими же кирпичиками на <a
class="new" title="Шип (техника) (страница отсутствует)" href="http://ru.wikipedia.org/w/index.php?title=%D0%A8%D0%B8%D0%BF_%28%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D0%BA%D0%B0%29&#038;action=edit&#038;redlink=1">шипах</a>. В наборы также могут входить множество других деталей: фигурки людей и животных, колёса и т.д. Существуют наборы, в которые входят электродвигатели, различного рода датчики и даже <a
title="Микроконтроллер" href="http://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D1%80">микроконтроллеры</a>. Наборы позволяют собирать модели автомобилей, самолётов, кораблей, зданий, роботов. Воплощает идею <a
title="Модульность" href="http://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C">модульности</a>, наглядно демонстрирующий детям то, как можно решать некоторые технические проблемы, также прививает навыки <a
title="Сборка" href="http://ru.wikipedia.org/wiki/%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0">сборки</a>, <a
title="Ремонт" href="http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BC%D0%BE%D0%BD%D1%82">ремонта</a> и разборки <a
title="Техника" href="http://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%85%D0%BD%D0%B8%D0%BA%D0%B0">техники</a>).</p> <img src="http://feeds.feedburner.com/~r/look-in/EmptyPages/~4/uYGf9VquVeo" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://look-in.net/2011/04/17/rss-doublebrick/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://look-in.net/2011/04/17/rss-doublebrick/</feedburner:origLink></item> <item><title>Набор Lego  8269 Cyber Stinger</title><link>http://feedproxy.google.com/~r/look-in/EmptyPages/~3/gqJI2S-mO-M/</link> <comments>http://look-in.net/2011/04/06/nabor-lego-8269-cyber-stinger/#comments</comments> <pubDate>Wed, 06 Apr 2011 14:09:47 +0000</pubDate> <dc:creator>slookin</dc:creator> <category><![CDATA[nxt]]></category> <category><![CDATA[8269]]></category> <category><![CDATA[lego]]></category> <category><![CDATA[technic]]></category> <guid isPermaLink="false">http://look-in.net/?p=399</guid> <description><![CDATA[Обзора этого набора на русском я не нашел, поэтому решил сделать его сам.
Артикул Lego: 8269
Год выпуска: 1999
Количество деталей: 329
Кол-во минифигурок: 1 (зато какая)
Описание: Bricker, Brickset, BrickLink, Peeron
Набор относится к соревновательной серии техник (Technic Competition), что подразумевает что набор позволит &#34;соревноваться&#34; двум игрокам.
В данном наборе все именно так: картинка на задней части коробки обещает [...]]]></description> <content:encoded><![CDATA[<p>Обзора этого набора на русском я не нашел, поэтому решил сделать его сам.</p><p>Артикул Lego: 8269</p><p>Год выпуска: 1999</p><p>Количество деталей: 329</p><p>Кол-во минифигурок: 1 (зато какая)</p><p>Описание: <a
href="http://bricker.ru/sets/8269/" target="_blank">Bricker</a>, <a
href="http://www.brickset.com/detail/?Set=8269-1" target="_blank">Brickset</a>, <a
href="http://www.bricklink.com/catalogItem.asp?S=8269-1" target="_blank">BrickLink</a>, <a
href="http://www.peeron.com/inv/sets/8269-1" target="_blank">Peeron</a></p><p>Набор относится к соревновательной серии техник (Technic Competition), что подразумевает что набор позволит &quot;соревноваться&quot; двум игрокам.</p><p>В данном наборе все именно так: картинка на задней части коробки обещает что два игрока будут яростно сражаться с помощью двух &quot;стрекоз&quot; и большого мяча темно бирюзового цвета.</p><p><img
alt="Коробка сзади" src="http://look-in.net/wp-content/uploads/2011/04/IMG_11693.jpg" border="0" hspace="8" align="top" width="640" height="505" /></p><p>Передняя вид коробки, что досталась мне, был очень печальный: порванная полоза по краю коробки.</p><p><img
src="http://look-in.net/wp-content/uploads/2011/04/IMG_11723.jpg" border="0" hspace="8" alt="IMG_1172" align="top" width="640" height="469" /></p><p>Но я то знал, что внутри этой большой коробки есть две маленькие: абсолютно целые и запечатанные.</p><p><img
src="http://look-in.net/wp-content/uploads/2011/04/IMG_11803.jpg" border="0" hspace="8" alt="IMG_1180" align="top" width="640" height="467" /></p><p>Именно в этих коробках и лежат детали для каждой стрекозы отдельно, пурпурная и бирюзовая стрекоза.</p><p><img
src="http://look-in.net/wp-content/uploads/2011/04/IMG_11823.jpg" border="0" hspace="8" alt="IMG_1182" align="top" width="640" height="426" /></p><p>Инструкция для каждой стрекозы отдельная, то есть сборку можно начать параллельно не мешая друг другу.</p><p>Внимательно посмотрев на изображение стрекоз становится понятно что бирюзовая стрекоза интереснее &#8211; в ней есть летчик и в эту же коробку вложены мяч и конусы. Именно с этой стрекозы я и начал собирать:</p><p><img
src="http://look-in.net/wp-content/uploads/2011/04/IMG_11833.jpg" border="0" hspace="8" alt="IMG_1183" align="top" width="640" height="342" /></p><p>Отдельно собирается хвост с кабиной, &quot;жало&quot; и крылья. Так же резиновые стяги ставятся в последний момент.</p><p><img
src="http://look-in.net/wp-content/uploads/2011/04/IMG_11853.jpg" border="0" hspace="8" alt="IMG_1185" align="top" width="640" height="413" /></p><p>Стрекоза в сборе, летчик готовится к посадке в кабину.</p><p><img
src="http://look-in.net/wp-content/uploads/2011/04/IMG_11862.jpg" border="0" hspace="8" alt="IMG_1186" align="top" width="640" height="338" /></p><p>Кабина открывается как пасть, у летчика глубокая посадка (кресла в насекомых не полагается), зато есть два рычага управления стрекозой.</p><p><img
src="http://look-in.net/wp-content/uploads/2011/04/IMG_118912.jpg" border="0" hspace="8" alt="IMG_1189" align="top" width="640" height="823" /></p><p>К бою, летчик изучает мяч которым приодеться сражаться.</p><p>Аналогичным путем собирается и вторая стрекоза, правда в ней нет летчика, а вместо кабины просто пасть, которая открывается так же как и бирюзовой стрекозе.</p><p><img
src="http://look-in.net/wp-content/uploads/2011/04/IMG_11922.jpg" border="0" hspace="8" alt="IMG_1192" align="top" width="640" height="402" /></p><p>Пурпурная стрекоза отличается крыльями и кабиной/пастью, в остальном стрекозы одинаковые (соревнования честные же ведь).</p><p><img
src="http://look-in.net/wp-content/uploads/2011/04/IMG_11952.jpg" border="0" hspace="8" alt="IMG_1195" align="top" width="640" height="454" /></p><p><img
src="http://look-in.net/wp-content/uploads/2011/04/IMG_11962.jpg" border="0" hspace="8" alt="IMG_1196" align="top" width="640" height="483" /></p><p>С закрытой пастью, готова к бою.</p><p><img
src="http://look-in.net/wp-content/uploads/2011/04/IMG_11912.jpg" border="0" hspace="8" alt="IMG_1191" align="top" width="640" height="227" /></p><p>Встреча перед боем.</p><p><img
src="http://look-in.net/wp-content/uploads/2011/04/IMG_12062.jpg" border="0" hspace="8" alt="IMG_1206" align="top" width="640" height="304" /></p><p>Насекомые спорят у кого жало больше.</p><p>А теперь самое интересное, механизм работы &quot;жала&quot;: черно-желтый рычага на верху стрекозы толкает жало вперед, а оно уже в свою очередь ударяет по мячу.</p><p>Возвращается жало в исходное состояние с помощью двух резинок растяжек.</p><p><img
src="http://look-in.net/wp-content/uploads/2011/04/move2.jpg" border="0" hspace="8" alt="move" align="top" width="640" height="980" /></p><p>Резюме: Отличный набор, жаль человечек только в одной стрекозе. Детали неожиданного цвета (в рамках текущих техник наборов).</p><p>и еще пару фотографий:</p><p><img
src="http://look-in.net/wp-content/uploads/2011/04/IMG_1212.jpg" border="0" hspace="8" alt="IMG_1212" align="top" width="640" height="371" /></p><p>Полевой ремонт спускового механизма.</p><p><img
src="http://look-in.net/wp-content/uploads/2011/04/IMG_1207.jpg" border="0" hspace="8" alt="IMG_1207" align="top" width="640" height="550" /></p><p>Мяч действительно большой.</p> <img src="http://feeds.feedburner.com/~r/look-in/EmptyPages/~4/gqJI2S-mO-M" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://look-in.net/2011/04/06/nabor-lego-8269-cyber-stinger/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://look-in.net/2011/04/06/nabor-lego-8269-cyber-stinger/</feedburner:origLink></item> <item><title>OS-commerce: анализ заказов и их выполнений</title><link>http://feedproxy.google.com/~r/look-in/EmptyPages/~3/GSU_XmkAdZE/</link> <comments>http://look-in.net/2011/01/03/os-commerce-analiz-zakazov-i-ih-vyipolneniy/#comments</comments> <pubDate>Mon, 03 Jan 2011 12:20:53 +0000</pubDate> <dc:creator>admin</dc:creator> <category><![CDATA[WebDev]]></category> <category><![CDATA[oscommerce]]></category> <category><![CDATA[sql]]></category> <guid isPermaLink="false">http://look-in.net/?p=387</guid> <description><![CDATA[Задача: посмотреть сколько денег было потерянно на отмененных заказах:
Решение:
SELECT t.orders_id,o.date_purchased, t.value
, s.orders_status_id, st.orders_status_name
, (case s.orders_status_id when 4 then t.value else 0 end) canceled
, (case s.orders_status_id when 3 then t.value else 0 end) delivered
FROM `orders_total` t, orders o
,orders_status_history s
,orders_status st
WHERE
t.orders_id=o.orders_id
and t.class='ot_total'
[...]]]></description> <content:encoded><![CDATA[<pre>Задача: посмотреть сколько денег было потерянно на отмененных заказах:
Решение:
SELECT t.orders_id,o.date_purchased, t.value
  , s.orders_status_id, st.orders_status_name
  , (case s.orders_status_id when 4 then t.value else 0 end) canceled
  , (case s.orders_status_id when 3 then t.value else 0 end) delivered
FROM `orders_total` t, orders o
  ,orders_status_history s
  ,orders_status st
WHERE
  t.orders_id=o.orders_id
  and t.class='ot_total'
  and  s.orders_id=o.orders_id
  and st.orders_status_id=s.orders_status_id
  and  s.orders_status_history_id=(select max(s1.orders_status_history_id) from orders_status_history s1 where s1.orders_id=o.orders_id group by s1.orders_id)
  order by o.date_purchased desc;
Результат:<span id="more-387"></span></pre><table><tbody><tr><td><strong>orders_id<br
/> </strong></td><td><strong>date_purchased</strong></td><td><strong>value</strong></td><td><strong>orders_status_id</strong></td><td><strong>orders_status_name</strong></td><td><strong>canceled</strong></td><td><strong>delivered</strong></td></tr><tr><td>310</td><td>2010-12-29 19:29:09</td><td>10960.0000</td><td>4</td><td>Отменен</td><td>10960.0000</td><td>0.0000</td></tr><tr><td>309</td><td>2010-12-28 18:14:13</td><td>2950.0000</td><td>2</td><td>В обработке</td><td>0.0000</td><td>0.0000</td></tr><tr><td>308</td><td>2010-12-28 12:36:32</td><td>2895.0000</td><td>4</td><td>Отменен</td><td>2895.0000</td><td>0.0000</td></tr><tr><td>307</td><td>2010-12-26 23:47:54</td><td>1002.0000</td><td>4</td><td>Отменен</td><td>1002.0000</td><td>0.0000</td></tr><tr><td>306</td><td>2010-12-24 16:28:59</td><td>3513.0000</td><td>1</td><td>В ожидании</td><td>0.0000</td><td>0.0000</td></tr><tr><td>305</td><td>2010-12-24 16:03:10</td><td>10960.0000</td><td>4</td><td>Отменен</td><td>10960.0000</td><td>0.0000</td></tr><tr><td>304</td><td>2010-12-23 17:57:48</td><td>3631.0000</td><td>4</td><td>Отменен</td><td>3631.0000</td><td>0.0000</td></tr><tr><td>303</td><td>2010-12-23 15:54:17</td><td>10960.0000</td><td>4</td><td>Отменен</td><td>10960.0000</td><td>0.0000</td></tr><tr><td>302</td><td>2010-12-23 00:45:34</td><td>3435.0000</td><td>4</td><td>Отменен</td><td>3435.0000</td><td>0.0000</td></tr><tr><td>301</td><td>2010-12-22 16:26:13</td><td>17900.0000</td><td>4</td><td>Отменен</td><td>17900.0000</td><td>0.0000</td></tr><tr><td>300</td><td>2010-12-22 12:44:10</td><td>1166.0000</td><td>4</td><td>Отменен</td><td>1166.0000</td><td>0.0000</td></tr><tr><td>299</td><td>2010-12-21 22:48:16</td><td>10960.0000</td><td>4</td><td>Отменен</td><td>10960.0000</td><td>0.0000</td></tr><tr><td>298</td><td>2010-12-21 14:21:18</td><td>17900.0000</td><td>4</td><td>Отменен</td><td>17900.0000</td><td>0.0000</td></tr><tr><td>297</td><td>2010-12-20 17:36:44</td><td>1516.0000</td><td>4</td><td>Отменен</td><td>1516.0000</td><td>0.0000</td></tr><tr><td>296</td><td>2010-12-20 13:07:16</td><td>2600.0000</td><td>4</td><td>Отменен</td><td>2600.0000</td><td>0.0000</td></tr><tr><td>295</td><td>2010-12-20 10:41:19</td><td>1324.0000</td><td>4</td><td>Отменен</td><td>1324.0000</td><td>0.0000</td></tr><tr><td>294</td><td>2010-12-20 02:12:01</td><td>1760.0000</td><td>4</td><td>Отменен</td><td>1760.0000</td><td>0.0000</td></tr><tr><td>293</td><td>2010-12-20 01:14:21</td><td>370.0000</td><td>4</td><td>Отменен</td><td>370.0000</td><td>0.0000</td></tr><tr><td>292</td><td>2010-12-15 15:54:30</td><td>1116.0000</td><td>4</td><td>Отменен</td><td>1116.0000</td><td>0.0000</td></tr><tr><td>291</td><td>2010-12-13 02:11:44</td><td>510.0000</td><td>4</td><td>Отменен</td><td>510.0000</td><td>0.0000</td></tr><tr><td>290</td><td>2010-12-12 15:08:08</td><td>748.0000</td><td>4</td><td>Отменен</td><td>748.0000</td><td>0.0000</td></tr><tr><td>289</td><td>2010-12-11 15:36:55</td><td>1189.0000</td><td>4</td><td>Отменен</td><td>1189.0000</td><td>0.0000</td></tr><tr><td>288</td><td>2010-12-10 12:36:33</td><td>2400.0000</td><td>3</td><td>Доставлен</td><td>0.0000</td><td>2400.0000</td></tr><tr><td>287</td><td>2010-12-07 15:22:32</td><td>10843.0000</td><td>1</td><td>В ожидании</td><td>0.0000</td><td>0.0000</td></tr><tr><td>286</td><td>2010-12-07 15:16:19</td><td>8008.0000</td><td>1</td><td>В ожидании</td><td>0.0000</td><td>0.0000</td></tr><tr><td>285</td><td>2010-12-06 19:58:11</td><td>10960.0000</td><td>4</td><td>Отменен</td><td>10960.0000</td><td>0.0000</td></tr><tr><td>284</td><td>2010-12-04 22:03:37</td><td>10960.0000</td><td>4</td><td>Отменен</td><td>10960.0000</td><td>0.0000</td></tr></tbody></table> <img src="http://feeds.feedburner.com/~r/look-in/EmptyPages/~4/GSU_XmkAdZE" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://look-in.net/2011/01/03/os-commerce-analiz-zakazov-i-ih-vyipolneniy/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://look-in.net/2011/01/03/os-commerce-analiz-zakazov-i-ih-vyipolneniy/</feedburner:origLink></item> <item><title>Statistics from RequisitePro via RPX</title><link>http://feedproxy.google.com/~r/look-in/EmptyPages/~3/GvGLG9iAkHo/</link> <comments>http://look-in.net/2010/11/08/statistics-from-requisitepro-via-rpx/#comments</comments> <pubDate>Sun, 07 Nov 2010 21:34:15 +0000</pubDate> <dc:creator>slookin</dc:creator> <category><![CDATA[java]]></category> <category><![CDATA[projects]]></category> <category><![CDATA[requistepro]]></category> <category><![CDATA[rpx]]></category> <guid isPermaLink="false">http://look-in.net/?p=382</guid> <description><![CDATA[
I&#8217;m spent this long weekend for study RXP protocol which IBM recommend to communicate with IBM Rational RequisitePro.
As I know java, I decide to write small utility on Java RPX. I was my mistake, because IBM Java RPX is worst API which I sow in last years. Methods like OpenProject(arg0, arg1, arg2, arg3, arg4, [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: center;"><a
href="http://look-in.net/wp-content/uploads/2010/11/screen.png" class="thickbox no_icon" rel="gallery-382" title="screen"><img
class="size-full wp-image-383 aligncenter" title="screen" src="http://look-in.net/wp-content/uploads/2010/11/screen.png" alt="" width="404" height="247" /></a></p><p>I&#8217;m spent this long weekend for study RXP protocol which IBM recommend to communicate with<a
href="http://www-01.ibm.com/software/awdtools/reqpro/" target="_blank"> IBM Rational RequisitePro</a>. <span
id="more-382"></span></p><p>As I know java, I decide to write small utility on Java <a
href="http://www.ibm.com/developerworks/rational/library/445.html#N10045" target="_blank">RPX</a>. I was my mistake, because IBM Java RPX is worst API which I sow in last years. Methods like OpenProject(arg0, arg1, arg2, arg3, arg4, arg5) make me crazy.</p><p>As result I use VBA RPX API as reference and Java RPX API just as implementation.</p><p>In any case, result of my homework &#8211; I&#8217;m able to build statistics based on RequisirePro repository about how often I change requirements in project. It helps me to analyse time when my requirements set is stable and ready for implementation. Also this simple chart show me which external actions affect requirements (architecture overview stage, review requirements by development team or test team).</p><p>In my next step I going to implement RSS stream for all requirements changes in project scope, it should help my team follow in any changes in product in frame iterative process.</p> <img src="http://feeds.feedburner.com/~r/look-in/EmptyPages/~4/GvGLG9iAkHo" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://look-in.net/2010/11/08/statistics-from-requisitepro-via-rpx/feed/</wfw:commentRss> <slash:comments>4</slash:comments> <feedburner:origLink>http://look-in.net/2010/11/08/statistics-from-requisitepro-via-rpx/</feedburner:origLink></item> <item><title>Памятка: Принятие решений</title><link>http://feedproxy.google.com/~r/look-in/EmptyPages/~3/SrPpgenuHq0/</link> <comments>http://look-in.net/2010/10/14/decison-analysis-resolution/#comments</comments> <pubDate>Thu, 14 Oct 2010 11:02:40 +0000</pubDate> <dc:creator>slookin</dc:creator> <category><![CDATA[Uncategorized]]></category> <category><![CDATA[CMMI]]></category> <category><![CDATA[CMMI-DEV]]></category> <category><![CDATA[DAR]]></category> <guid isPermaLink="false">http://look-in.net/?p=376</guid> <description><![CDATA[0) Подумать, а на сколько критично вообще решение в данном вопросе.
Если не критичное место, то возможно первое попавшееся решение будет приемлемо. (Мне, например, без разницы какого цвета стикеры использовать, и формализовывать процесс выбора стикера &#8211; трата времени).
SW:  решение о том на какой платформе стоит разрабатывать новый продукт &#8211; достойно формального анализа, а вот цвет кнопки  [...]]]></description> <content:encoded><![CDATA[<p><strong>0) Подумать, а на сколько критично вообще решение в данном вопросе.</strong></p><p>Если не критичное место, то возможно первое попавшееся решение будет приемлемо. (Мне, например, без разницы какого цвета стикеры использовать, и формализовывать процесс выбора стикера &#8211; трата времени).</p><p>SW:  решение о том на какой платформе стоит разрабатывать новый продукт &#8211; достойно формального анализа, а вот цвет кнопки  &#8211; может и не стоит анализировать, ее влияние на конечный результат минимально.</p><p><strong>1) Определить критерии для оценки альтернатив</strong></p><p>Обозначить величины и их приоритеты (если несколько критериев). Рекомендуется использовать опыт предыдущих анализов, очень вероятно что критерии повторятся.</p><p>SW: критерии для выбора платформы &#8211; доступность разработчиков под эту платформу, стоимость решений на этой платформе, потенциальная производительность, риски.</p><p><strong>2) Обозначить альтернативы</strong></p><p>Поиск альтернатив проводить как внутри команды, так и используя внешние знания (поиск, анализ конкурентов).</p><p>SW: кластерное решение системы управления базами данных: MS SQL server, Oracle, или как показал поиск по гуглу &#8211; то еще MySQL.</p><p><strong>3) Выбрать способ оценки альтернатив</strong></p><p>Совсем не стоит полностью строить решение на всех альтернативах что бы понять какие лучше. Может некий симулятор или проверка подмножества функций позволить уже оценить выбранные критерии в п2.</p><p>Понять во что обойдется (время, стоимость и пр) оценка альтернатив по выбранному способу.</p><p>SW: синтетические тесты, экспертная оценка, моделирование &#8211; первые пришедшие в голову примеры методик оценки.</p><p><strong>4) Проанализировать альтернативы используя п1 и п2</strong></p><p>Не забыть сделать отчет по анализу каждой альтернативы, сохранить для потомков.</p><p>Возможно вернуться к п3 и анализировать другим методом если выбранный метод ранее не дал отчетливых значений выбранных критериев в п1.</p><p>SW: выполнить моделирование/тесты, выделить значния важных критериев, сохранить отчеты в репозиторий.</p><p><strong>5) Выбрать из п2. базируясь на п1</strong></p><p>Так как, часто анализ выполняется по моделям (то есть не полной информации), то при рекомендации одной из альтернатив не забыть указать в рисках, как было выбрана эта альтернатива.</p><p>SW: выбрали RAC Oracle, т.к. среди прочего показал больший рост производительности при добавлении ноды &#8211; риск: тестировали с ограничением на типы операций и объемы данных.</p><p><strong>Резюме:</strong></p><p>Звучит формально и надуманно, но забывать про первые три пункта не стоит. Опыт показывает, что все сразу приступают к п4 не обозначив, как будут выбирать,  по какому критерию и вообще не держа в голове все возможные альтернативы решений.</p> <img src="http://feeds.feedburner.com/~r/look-in/EmptyPages/~4/SrPpgenuHq0" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://look-in.net/2010/10/14/decison-analysis-resolution/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://look-in.net/2010/10/14/decison-analysis-resolution/</feedburner:origLink></item> <item><title>Prestashop: Изменения в базовых модулях</title><link>http://feedproxy.google.com/~r/look-in/EmptyPages/~3/fg2XPB2MyDY/</link> <comments>http://look-in.net/2010/06/15/cart-lefcolumn-hook/#comments</comments> <pubDate>Tue, 15 Jun 2010 20:00:34 +0000</pubDate> <dc:creator>slookin</dc:creator> <category><![CDATA[WebDev]]></category> <category><![CDATA[projects]]></category> <category><![CDATA[module]]></category> <category><![CDATA[prestashop]]></category> <guid isPermaLink="false">http://look-in.net/?p=367</guid> <description><![CDATA[Для одного из сайтов понадобилось перенести несколько модулей из правой колонки в левую. (в частности blockcart &#8211; корзину покупателя)
В базовом функционале модули этого не делали.
Исправить просто, надо добавить регистрацию модуля для нового (левого) &#8220;хука&#8221; и переустановить модуль.
$this-&#62;registerHook('rightColumn')
Для двух модулей (корзина, и модуль скидок), я эти изменения сделал &#8211; можно скачать здесь.
blockcart.zip
blockspecials.zip
PS базировался на последней на [...]]]></description> <content:encoded><![CDATA[<p>Для одного из сайтов понадобилось перенести несколько модулей из правой колонки в левую. (в частности blockcart &#8211; корзину покупателя)</p><p>В базовом функционале модули этого не делали.</p><p><span
id="more-367"></span>Исправить просто, надо добавить регистрацию модуля для нового (левого) &#8220;хука&#8221; и переустановить модуль.</p><pre>$this-&gt;registerHook('rightColumn')</pre><p>Для двух модулей (корзина, и модуль скидок), я эти изменения сделал &#8211; можно скачать здесь.</p><p><a
href="http://look-in.net/wp-content/uploads/2010/06/blockcart.zip " target="_self">blockcart.zip</a><br
/> <a
href="http://look-in.net/wp-content/uploads/2010/06/blockcart.zip " target="_self">blockspecials.zip</a></p><p>PS базировался на последней на данный момент версии prestashop 1.3.1</p> <img src="http://feeds.feedburner.com/~r/look-in/EmptyPages/~4/fg2XPB2MyDY" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://look-in.net/2010/06/15/cart-lefcolumn-hook/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://look-in.net/2010/06/15/cart-lefcolumn-hook/</feedburner:origLink></item> <item><title>SVN to RSS для Prestashop</title><link>http://feedproxy.google.com/~r/look-in/EmptyPages/~3/38H6al2PsTg/</link> <comments>http://look-in.net/2010/06/09/svn-to-rss-prestashop/#comments</comments> <pubDate>Wed, 09 Jun 2010 17:16:30 +0000</pubDate> <dc:creator>slookin</dc:creator> <category><![CDATA[WebDev]]></category> <category><![CDATA[prestashop]]></category> <category><![CDATA[rss]]></category> <category><![CDATA[svn]]></category> <guid isPermaLink="false">http://look-in.net/?p=363</guid> <description><![CDATA[
Создал RSS поток для Prestashop SVN &#8211; дабы отслеживать все изменения в исходных кодах.
Добавить RSS
]]></description> <content:encoded><![CDATA[<p><a
href="http://svnfeed.com/convert?url=http%3A%2F%2Fsvn.prestashop.com%2Ftrunk&#038;x=21&#038;y=27"><img
class="alignnone" title="RSS" src="http://svnfeed.com/images/rss_icon.gif" alt="" width="64" height="64" /></a></p><p>Создал RSS поток для Prestashop SVN &#8211; дабы отслеживать все изменения в исходных кодах.</p><p><a
href="http://svnfeed.com/convert?url=http%3A%2F%2Fsvn.prestashop.com%2Ftrunk&#038;x=21&#038;y=27" target="_blank">Добавить RSS</a></p> <img src="http://feeds.feedburner.com/~r/look-in/EmptyPages/~4/38H6al2PsTg" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://look-in.net/2010/06/09/svn-to-rss-prestashop/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://look-in.net/2010/06/09/svn-to-rss-prestashop/</feedburner:origLink></item> <item><title>PrestaShop – обновление в безопасности. версия 1.3.1</title><link>http://feedproxy.google.com/~r/look-in/EmptyPages/~3/nZBAGNUGNkI/</link> <comments>http://look-in.net/2010/06/07/important-security-update-prestashop-v-1-3-1/#comments</comments> <pubDate>Mon, 07 Jun 2010 18:29:25 +0000</pubDate> <dc:creator>slookin</dc:creator> <category><![CDATA[translation]]></category> <category><![CDATA[prestashop]]></category> <guid isPermaLink="false">http://look-in.net/?p=358</guid> <description><![CDATA[PrestaShop v.1.3.1 &#8211; Important security update
Внимание, обращаем внимание на новую версию prestashop.
При поддержке John JEAN из Wargan Solutions компании, что специализируется на компьютерной безопасности, мы нашли и исправили  несколько уязвимостей в коде которые затрагивает все версии prestashop (с v0.8 до v1.3).
Крайне рекомендуется обновить ваш магазин PrestaShop для решения проблем с безопасностью:
Для обновления вы можете:
- [...]]]></description> <content:encoded><![CDATA[<h2>PrestaShop v.1.3.1 &#8211; Important security update</h2><p><strong>Внимание, обращаем внимание на новую версию prestashop.</strong></p><p>При поддержке John JEAN из <a
title="audit de sécurité informatique &amp; test d'intrusion informatique" href="http://www.wargan.com/" target="_blank">Wargan Solutions</a> компании, что специализируется на компьютерной безопасности, мы нашли и исправили  <span
style="color: #800000;"><strong>несколько уязвимостей в коде которые затрагивает все версии prestashop (с v0.8 до v1.3). </strong></span></p><p><span
style="color: #800000;"><strong><span
id="more-358"></span><br
/> </strong></span></p><p><strong><span
style="color: #de1f61;"><span
style="color: #800000;">Крайне рекомендуется обновить ваш магазин PrestaShop для решения проблем с безопасностью:</span><br
/> </span></strong></p><p><strong>Для обновления вы можете:</strong></p><p>- Обновить PrestaShop новой версией 1.3.1.</p><p><strong>Эта версия идентична  1.3 (не включает исправления ошибок) и только проблемы безопасности исправлены</strong></p><p>или вы можете исправить уязвимости вручную:</p><p><strong> /!\ Не забудьте сделать копию своего магазина.</strong></p><p><strong>Файл:</strong> /config/smarty.config.inc.php<br
/> где: в конце файла, перед &#8220;?&gt;&#8221;<br
/> добавить: $smarty-&gt;register_modifier(&#8217;secureReferrer&#8217;, array(&#8216;Tools&#8217;, &#8217;secureReferrer&#8217;));</p><p><strong>Файл:</strong> /modules/paypalapi/error.tpl<br
/> где: строка 13<br
/> заменить : {$smarty.server.HTTP_REFERER}<br
/> на : {$smarty.server.HTTP_REFERER|secureReferrer}</p><p><strong>Файл:</strong> /themes/prestashop/errors.tpl :<br
/> где: строка 9<br
/> заменить: {$smarty.server.HTTP_REFERER|escape:&#8217;htmlall&#8217;:'UTF-8&#8242;}<br
/> на: {$smarty.server.HTTP_REFERER|escape:&#8217;htmlall&#8217;:'UTF-8&#8242;|secureReferrer}</p><p><strong>Файл:</strong>/themes/prestashop/shopping-cart.tpl :<br
/> где: строка 255<br
/> заменить: {$smarty.server.HTTP_REFERER|escape:&#8217;htmlall&#8217;:'UTF-8&#8242;}<br
/> на: {$smarty.server.HTTP_REFERER|escape:&#8217;htmlall&#8217;:'UTF-8&#8242;|secureReferrer}</p><p><strong>Файл:</strong> /admin/login.php<br
/> где: строка 67<br
/> заменить:<br
/> $cookie-&gt;passwd = $employee-&gt;passwd;<br
/> $cookie-&gt;write();<br
/> на:<br
/> $cookie-&gt;passwd = $employee-&gt;passwd;<br
/> $cookie-&gt;remote_addr = ip2long($_SERVER['REMOTE_ADDR']);<br
/> $cookie-&gt;write();</p><p><strong>Файл:</strong> /admin/confirm.php<br
/> где: строка 22<br
/> заменить: $referer = rawurldecode(Tools::getValue(&#8216;referer&#8217;));<br
/> на: $referer = Tools::htmlentitiesUTF8(rawurldecode(Tools::getValue(&#8216;referer&#8217;)));</p><p><strong>Файл:</strong> /classes/Tools.php<br
/> где: строка 17<br
/> После: &#8220;class Tools<br
/> {&#8221;<br
/> Добавить две новых функции:</p><p>/**<br
/> * Get the server variable SERVER_NAME<br
/> *<br
/> * @param string $referrer URL referrer<br
/> */<br
/> static function getServerName()<br
/> {<br
/> if (isset($_SERVER['HTTP_X_FORWARDED_SERVER']) AND $_SERVER['HTTP_X_FORWARDED_SERVER'])<br
/> return $_SERVER['HTTP_X_FORWARDED_SERVER'];<br
/> return $_SERVER['SERVER_NAME'];<br
/> }</p><p>/**<br
/> * Secure an URL referrer<br
/> *<br
/> * @param string $referrer URL referrer<br
/> */<br
/> static public function secureReferrer($referrer)<br
/> {<br
/> if (preg_match(&#8216;/^http[s]?:\/\/&#8217;.self::getServerName().&#8217;\/.*$/Ui&#8217;, $referrer))<br
/> return $referrer;<br
/> return __PS_BASE_URI__;<br
/> }</p><p><strong>Файл:</strong> /classes/Cookie.php<br
/> где: строка 164<br
/> Заменить функцию isLoggedBack() новой<br
/> function isLoggedBack()<br
/> {<br
/> /* Employee is valid only if it can be load and if cookie password is the same as database one */<br
/> if ($this-&gt;id_employee AND Validate::isUnsignedId($this-&gt;id_employee) AND<br
/> Employee::checkPassword(intval($this-&gt;id_employee), $this-&gt;passwd) AND (!isset($this-&gt;_content['remote_addr']) OR<br
/> $this-&gt;_content['remote_addr'] == ip2long($_SERVER['REMOTE_ADDR'])))<br
/> return true;<br
/> return false;<br
/> }</p> <img src="http://feeds.feedburner.com/~r/look-in/EmptyPages/~4/nZBAGNUGNkI" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://look-in.net/2010/06/07/important-security-update-prestashop-v-1-3-1/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://look-in.net/2010/06/07/important-security-update-prestashop-v-1-3-1/</feedburner:origLink></item> </channel> </rss>

