Congratulations!

[Valid RSS] This is a valid RSS feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://akinfold.blogspot.com/feeds/posts/default?alt=rss

  1. <?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-7567979188867436004</atom:id><lastBuildDate>Wed, 13 Mar 2024 14:15:56 +0000</lastBuildDate><category>PHP</category><category>Windows</category><category>Python</category><category>HowTo</category><category>.NET</category><category>Android</category><category>Archos</category><category>Django</category><category>Joomla</category><category>PHPLinq</category><category>ООП</category><category>Хранилища Данных</category><category>Apache</category><category>BH-503</category><category>Blogger</category><category>C#</category><category>CASE</category><category>D-Link</category><category>DHCP</category><category>DIR-130</category><category>Docker</category><category>ERWin</category><category>Erlang</category><category>FreeBSD</category><category>Google</category><category>How-To</category><category>Links</category><category>Nokia</category><category>Nokia 3250</category><category>OLAP</category><category>PlayStation 3</category><category>Psycopg2</category><category>PyCharm</category><category>QIP</category><category>SSL</category><category>SVN</category><category>SyntaxHighliter</category><category>Trac</category><category>VMware</category><category>Virtual PC</category><category>XternalX Userbars</category><category>Стандарты</category><category>прошивка</category><title>Roman Akinfold notes</title><description>Live 4 Drum, Die 4 Bass, Coding 4 Food, ...</description><link>http://akinfold.blogspot.com/</link><managingEditor>noreply@blogger.com (Anonymous)</managingEditor><generator>Blogger</generator><openSearch:totalResults>28</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-4479108338888112499</guid><pubDate>Sun, 30 Oct 2016 00:54:00 +0000</pubDate><atom:updated>2016-10-30T08:07:06.486+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Docker</category><category domain="http://www.blogger.com/atom/ns#">PyCharm</category><category domain="http://www.blogger.com/atom/ns#">Python</category><category domain="http://www.blogger.com/atom/ns#">Windows</category><title>PyCharm 2016.2.3 and Docker for Windows</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
  2. I just spent a couple of days trying to configure &lt;b&gt;PyCharm&lt;/b&gt; to use remote python interpreter in &lt;b&gt;Docker&lt;/b&gt; container. Since then, as docker team released native &lt;b&gt;Docker for Windows&lt;/b&gt;, all instructions on how to use python interpreter inside &lt;b&gt;Docker &lt;/b&gt;container in &lt;b&gt;PyCharm &lt;/b&gt;became useless.&lt;br /&gt;
  3. On &lt;b&gt;Windows &lt;/b&gt;there is no more VirtualBox machine with &lt;b&gt;Docker &lt;/b&gt;API on &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;192.168.x.x:2376&lt;/span&gt; and there is no more &lt;i&gt;Certificates folder&lt;/i&gt;. Almost all conversations about this problem ended up with conclusion, that &lt;b&gt;Docker for Windows&lt;/b&gt; now using named pipe &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;npipe:////./pipe/docker_engine&lt;/span&gt; for its API, but Java client for &lt;b&gt;Docker&lt;/b&gt;, which uses &lt;b&gt;PyCharm&lt;/b&gt;, doesn&#39;t support &lt;b&gt;Windows &lt;/b&gt;named pipes. So it seems that we have no choice, but to use different kinds of messy workarounds. But finally I found simple solution on docker forums: &lt;a data-select-like-a-boss=&quot;1&quot; href=&quot;https://forums.docker.com/t/how-to-find-the-remote-api/20988?u=akinfold&quot; target=&quot;_blank&quot;&gt;https://forums.docker.com/t/how-to-find-the-remote-api/20988?u=akinfold&lt;/a&gt;&lt;br /&gt;
  4. &lt;br /&gt;
  5. Just use &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;http://localhost:2375&lt;/span&gt; as &lt;i&gt;API URL&lt;/i&gt; in &lt;b&gt;PyCharm &lt;/b&gt;and leave &lt;i&gt;Certificates folder&lt;/i&gt; field blank. :)&lt;br /&gt;
  6. &lt;br /&gt;
  7. &lt;a href=&quot;http://1.bp.blogspot.com/-8VKy0qBTPF0/WBVDOyPudTI/AAAAAAAAWPE/bY6J9weUG5oWep7aOLQCbqFSYWV_CmeswCK4B/s1600/pycharm-docker-for-windows.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;401&quot; src=&quot;https://1.bp.blogspot.com/-8VKy0qBTPF0/WBVDOyPudTI/AAAAAAAAWPE/bY6J9weUG5oWep7aOLQCbqFSYWV_CmeswCK4B/s640/pycharm-docker-for-windows.png&quot; title=&quot;PyCharm Docker settings&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
  8. </description><link>http://akinfold.blogspot.com/2016/10/pycharm-201623-and-docker-for-windows.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/-8VKy0qBTPF0/WBVDOyPudTI/AAAAAAAAWPE/bY6J9weUG5oWep7aOLQCbqFSYWV_CmeswCK4B/s72-c/pycharm-docker-for-windows.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-7199288380713090885</guid><pubDate>Wed, 13 Mar 2013 10:09:00 +0000</pubDate><atom:updated>2013-03-13T18:09:38.191+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Psycopg2</category><category domain="http://www.blogger.com/atom/ns#">Python</category><category domain="http://www.blogger.com/atom/ns#">Windows</category><title>Install Psycopg2 to Virtualenv under Windows</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
  9. Activate your vitualenv, and run: &lt;br /&gt;
  10. &lt;pre&gt;easy_install http://www.stickpeople.com/projects/python/win-psycopg/2.4.6/psycopg2-2.4.6.win32-py2.7-pg9.2.2-release.exe
  11. &lt;/pre&gt;
  12. Psycopg2 precompiled Windows binaries: &lt;a href=&quot;http://www.stickpeople.com/projects/python/win-psycopg/&quot;&gt;http://www.stickpeople.com/projects/python/win-psycopg/&lt;/a&gt;&lt;br /&gt;
  13. Source: &lt;a href=&quot;http://stackoverflow.com/a/5383266/1570936&quot;&gt;http://stackoverflow.com/a/5383266/1570936&lt;/a&gt;
  14. &lt;/div&gt;
  15. </description><link>http://akinfold.blogspot.com/2013/03/install-psycopg2-to-virtualenv-under.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-6082367527631532715</guid><pubDate>Sun, 10 Mar 2013 09:05:00 +0000</pubDate><atom:updated>2013-03-10T17:13:06.659+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Erlang</category><category domain="http://www.blogger.com/atom/ns#">FreeBSD</category><category domain="http://www.blogger.com/atom/ns#">How-To</category><title>Install Erlang on FreeBSD</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
  16. &lt;pre&gt;$ fetch http://www.erlang.org/download/otp_src_R16B.tar.gz
  17. $ gunzip -c otp_src_R16B.tar.gz | tar xf -
  18. $ cd otp_src_R16B
  19. $ ./configure --disable-hipe
  20. $ gmake
  21. # gmake install&lt;/pre&gt;
  22. &lt;p&gt;Also I found (but doesn&#39;t try) interesting option to install Erlang &lt;a href=&quot;https://github.com/spawngrid/kerl&quot;&gt;https://github.com/spawngrid/kerl&lt;/a&gt;&lt;/p&gt;
  23. &lt;/div&gt;
  24. </description><link>http://akinfold.blogspot.com/2013/03/install-erlang-on-freebsd.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-2287273771519287449</guid><pubDate>Fri, 14 Dec 2012 18:46:00 +0000</pubDate><atom:updated>2013-03-18T17:50:43.160+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Python</category><category domain="http://www.blogger.com/atom/ns#">Windows</category><title>Install PIL on Windows</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
  25. I&#39;m tired to remember how to do it every time when I start new project. So here is how we doing.&lt;br /&gt;
  26. &lt;br /&gt;
  27. Activate virtualenv:&lt;br /&gt;
  28. &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;\Users\MyUser\.virtualenvs\myvirtualenv\&lt;/span&gt;Scripts\activate.bat&lt;/span&gt;&lt;br /&gt;
  29. &lt;br /&gt;
  30. Building PIL C libraries from sources under Windows is rather painful, so we will install precompiled binaries, which can be found &lt;a href=&quot;https://pypi.python.org/pypi/Pillow/2.0.0#downloads&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;:&lt;br /&gt;
  31. &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;gt; easy_install https://pypi.python.org/packages/2.7/P/Pillow/Pillow-2.0.0-py2.7-win32.egg&lt;/span&gt;&lt;br /&gt;
  32. &lt;br /&gt;&lt;/div&gt;
  33. </description><link>http://akinfold.blogspot.com/2012/12/install-pil-on-windows-7-x64.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-2302107645474851598</guid><pubDate>Thu, 13 Dec 2012 21:38:00 +0000</pubDate><atom:updated>2012-12-14T05:38:45.181+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Django</category><category domain="http://www.blogger.com/atom/ns#">Python</category><title>DateTimeField doesn&#39;t accept ISO 8601 formatted date string</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
  34. &lt;br /&gt;
  35. &lt;br /&gt;
  36. You can find roots of this problem &lt;a href=&quot;https://github.com/django/django/blob/1.4.3/django/forms/fields.py#L441&quot;&gt;here in django sources&lt;/a&gt; and &lt;a href=&quot;http://bugs.python.org/issue6641&quot;&gt;here in python bugs&lt;/a&gt;.&lt;br /&gt;
  37. &lt;br /&gt;
  38. You can even find some solutions for this problem which suggests you to append extended patterns (with &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;%z&lt;/span&gt; key) to &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;DATETIME_INPUT_FORMATS&lt;/span&gt;, but they doesn&#39;t work in most cases.&lt;br /&gt;
  39. &lt;br /&gt;
  40. So here is my workaround to solve this problem: just install python-dateutil package and add to your settings.py following lines:&lt;br /&gt;
  41. &lt;br /&gt;
  42. &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;# Patch datetime field parser&lt;br /&gt;from dateutil import parser&lt;br /&gt;from django.forms import fields&lt;br /&gt;fields.DateTimeField.strptime = lambda o, v, f: parser.parse(v)&lt;/span&gt;&lt;/div&gt;
  43. </description><link>http://akinfold.blogspot.com/2012/12/datetimefield-doesnt-accept-iso-8601.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-6016804834815484492</guid><pubDate>Sat, 12 May 2012 07:06:00 +0000</pubDate><atom:updated>2012-05-12T15:08:40.925+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Django</category><category domain="http://www.blogger.com/atom/ns#">Python</category><title>Python UnicodeEncodeError: &#39;ascii&#39; codec can&#39;t encode character</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
  44. Я столкнулся с данной проблемой используя &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;urllib.urlencode()&lt;/span&gt; для формирования POST запроса с юникодом внутри. Кто-то возможно сталкивался с этой ошибкой и при других обстоятельствах.&lt;br /&gt;
  45. &lt;br /&gt;
  46. Проблема заключается в том, что &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;urlencode&lt;/span&gt; применяет ко всем элементам передаваемого dict&#39;а метод &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;str()&lt;/span&gt; который и генерирует ошибку, когда ему пытаются скормить под видом строки не ASCII символы. &lt;br /&gt;
  47. &lt;br /&gt;
  48. В Django проблема решается очень просто. Прежде чем отдавать параметры POST запроса в &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;urlencode()&lt;/span&gt; нужно обработать их методом &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;smart_str()&lt;/span&gt;:&lt;br /&gt;
  49. &lt;br /&gt;
  50. &lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; import urllib
  51. &amp;gt;&amp;gt;&amp;gt; from django.utils.encoding import smart_str
  52. &amp;gt;&amp;gt;&amp;gt;
  53. &amp;gt;&amp;gt;&amp;gt; data = {&#39;name&#39; : u&#39;Иван&#39;}
  54. &amp;gt;&amp;gt;&amp;gt; data = smart_str(data)
  55. &amp;gt;&amp;gt;&amp;gt; print urllib.urlencode(data)
  56. &lt;/pre&gt;
  57. &lt;br /&gt;
  58. Источники:&lt;br /&gt;
  59. &lt;ul style=&quot;text-align: left;&quot;&gt;
  60. &lt;li&gt;&lt;a href=&quot;http://www.b-list.org/weblog/2007/nov/10/unicode/&quot;&gt;http://www.b-list.org/weblog/2007/nov/10/unicode/&lt;/a&gt;&lt;/li&gt;
  61. &lt;/ul&gt;
  62. &lt;/div&gt;</description><link>http://akinfold.blogspot.com/2012/05/python-unicodeencodeerror-ascii-codec.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-8113986951229559581</guid><pubDate>Wed, 27 Jul 2011 08:25:00 +0000</pubDate><atom:updated>2011-07-27T16:26:00.950+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Android</category><category domain="http://www.blogger.com/atom/ns#">Archos</category><title>Archos Internet Tablet. Установка Android Market</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
  63. По следам &lt;a href=&quot;http://akinfold.blogspot.com/2011/07/archos-43-internet-tablet-appslib.html&quot;&gt;предыдущей заметки про AppsLib&lt;/a&gt;.&lt;br /&gt;
  64. Нашел лёгкий способ установки &lt;b&gt;Android Market&lt;/b&gt; на &lt;b&gt;Archos 101/70/43/32/28 Internet Tablet&lt;/b&gt; со всем вытекающим из этого профитом для владельца одного из перечисленных планшетов.&lt;br /&gt;
  65. &lt;br /&gt;
  66. &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  67. &lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.youtube.com/embed/LWyjeMXQMOU?feature=player_embedded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/div&gt;
  68. &lt;br /&gt;
  69. P.S.: Выбирать в Arctools пункт Default Apps &amp;amp; Market v2.2.7 вместо Default Apps &amp;amp; Market v3.0.26 не обязательно, у меня и с Default Apps &amp;amp; Market v3.0.26 всё работает.&lt;/div&gt;
  70. </description><link>http://akinfold.blogspot.com/2011/07/archos-internet-tablet-android-market.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-1591544193208153605</guid><pubDate>Wed, 27 Jul 2011 08:15:00 +0000</pubDate><atom:updated>2013-06-01T17:59:30.653+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Android</category><category domain="http://www.blogger.com/atom/ns#">Archos</category><title>Archos 43 Internet Tablet. Установка и обновление AppsLib</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
  71. Появился сравнительно недавно у меня планшет под названием &lt;b&gt;Archos 43 Internet Tablet&lt;/b&gt; - этакий смартфон без GPRS модуля. Аппарат имеет несколько неприятных ограничений от производителя, среди которых отсутствие &lt;b&gt;Android Market&lt;/b&gt;, вместо которого по-умолчанию установлен &lt;b&gt;AppsLib &lt;/b&gt;(жалкое подобие маркета с таким же жалким выбором), который при полном сбросе планшета куда-то пропадает. Чтобы вернуть &lt;b&gt;AppsLib&lt;/b&gt; на место в своём &lt;b&gt;Archos Internet Tablet&lt;/b&gt; нужно сделать следующее:&lt;br /&gt;
  72. &lt;ol style=&quot;text-align: left;&quot;&gt;
  73. &lt;li&gt;Открыть браузер.&lt;/li&gt;
  74. &lt;li&gt;Перейти по адресу: &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;a href=&quot;http://appslib.com/latest&quot;&gt;appslib.com/latest&lt;/a&gt;&lt;/span&gt;. Сразу начнётся загрузка приложения.&lt;/li&gt;
  75. &lt;li&gt;Когда загрузка завершится, открыть статусбар и ткнуть по закачанному файлу.&lt;/li&gt;
  76. &lt;li&gt;Далее, остаётся лишь следовать инструкциям установщика.&lt;/li&gt;
  77. &lt;/ol&gt;
  78. &lt;/div&gt;
  79. </description><link>http://akinfold.blogspot.com/2011/07/archos-43-internet-tablet-appslib.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-4423811625501982127</guid><pubDate>Tue, 26 Jul 2011 06:44:00 +0000</pubDate><atom:updated>2012-02-05T23:26:11.294+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">QIP</category><title>QIP. Отключение web-камеры</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
  80. &lt;b&gt;QIP 2012&lt;/b&gt; не умеет адекватно обращаться с &lt;b&gt;вэб-камерой&lt;/b&gt;, об этом уже много написано. Способа лечения данной проблемы 2:&lt;br /&gt;
  81. &lt;ol style=&quot;text-align: left;&quot;&gt;
  82. &lt;li&gt;удалить &lt;b&gt;QIP&lt;/b&gt; нафиг и забыть, как страшный сон;&lt;/li&gt;
  83. &lt;li&gt;после каждого обновления &lt;b&gt;QIP&lt;/b&gt; удалять из папки программы несколько папок и файл.&lt;/li&gt;
  84. &lt;/ol&gt;
  85. Первый способ не вариант (см. P.S.). Поэтому пользуюсь вторым. Однако заколебался я уже после каждого обновления этого чуда мучительно вспоминать, что там надо такое удалить, чтоб таки &lt;b&gt;отучить QIP от камеры&lt;/b&gt;. В итоге накидал сегодня для себя небольшой батничек работающий исключительно под Windows 7 x64, если кто желает может переделать и поделиться универсальным батничком, а пока так:&lt;br /&gt;
  86. &lt;br /&gt;
  87. &lt;pre class=&quot;brush: shell&quot;&gt;C:
  88. cd &quot;C:\Program Files (x86)\QIP 2012&quot;
  89. rd /S /Q Protos\SIP
  90. rd /S /Q Protos\XIMSS
  91. del /F /Q Core\voip.dll
  92. &lt;/pre&gt;
  93. &lt;br /&gt;
  94. Ноги растут &lt;a href=&quot;http://forum.qip.ru/showthread.php?t=42716&quot;&gt;от сюда&lt;/a&gt;.&lt;br /&gt;
  95. &lt;br /&gt;
  96. P.S.: &lt;b&gt;QIP&lt;/b&gt; конечно отстой - хранит пароли от всех зарегистрированных в нём сервисов и т.п. Но пока не вижу альтернатив схожих по возможностям, а посему надо с ним как-то уживаться.&lt;/div&gt;</description><link>http://akinfold.blogspot.com/2011/07/qip-web.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-1608961269865942295</guid><pubDate>Thu, 14 Jul 2011 11:17:00 +0000</pubDate><atom:updated>2011-07-14T19:17:19.052+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">VMware</category><title>Порты необходимые для удалённого подключения VMware Remote Console</title><description>Для работы с виртуальными машинами развёрнутыми &lt;b&gt;на удалённом сервере&lt;/b&gt; с помощью &lt;b&gt;VMware Server 2&lt;/b&gt; в firewall&#39;е этого самого удалённого сервера надо открыть следующие порты:&lt;ul&gt;
  97. &lt;li&gt;&lt;b&gt;8222&lt;/b&gt; -- http соединения (пока не понял для чего, ибо по http так ни разу и не довелось подключиться, но при установке &lt;b&gt;VMware Server 2&lt;/b&gt; просит этот порт).&lt;/li&gt;
  98. &lt;li&gt;&lt;b&gt;8333&lt;/b&gt; -- https соединения. Через этот порт в основном и происходит всё взаимодействие с &lt;b&gt;VMware Server 2&lt;/b&gt;.&lt;/li&gt;
  99. &lt;li&gt;&lt;b&gt;902&lt;/b&gt; -- порт необходим для общения &lt;b&gt;VMware Remote Console&lt;/b&gt; с &lt;b&gt;VMware Server 2&lt;/b&gt;. Без него будет работать &lt;b&gt;VMware Infrastructure Web Access&lt;/b&gt;, но достучаться до консолей виртуальных машин вы не сможете.&lt;/li&gt;
  100. &lt;/ul&gt;
  101. </description><link>http://akinfold.blogspot.com/2011/07/vmware-remote-console.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-670361925669222294</guid><pubDate>Thu, 26 May 2011 14:52:00 +0000</pubDate><atom:updated>2011-05-27T00:47:49.885+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">DHCP</category><category domain="http://www.blogger.com/atom/ns#">Virtual PC</category><category domain="http://www.blogger.com/atom/ns#">Windows</category><title>Отключение встроенного DHCP сервер в Virtual PC</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;На днях создал себе на &lt;b&gt;Virtual PC&lt;/b&gt; небольшую виртуальную сеть из контроллера домена (dc) и двух рабочих станций (pc1 и pc2). На всех виртуальных машинах был настроен тип сети &lt;i&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Внутренняя сеть&lt;/span&gt;&lt;/i&gt;. Естественно при такой организации все машины получали IP-шники вида 169.254.x.x.&lt;br /&gt;
  102. &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-3Qo4q0M1fMk/Td5kG9-bevI/AAAAAAAAAI4/GxAImGz1ETE/s1600/network-type.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;206&quot; src=&quot;http://1.bp.blogspot.com/-3Qo4q0M1fMk/Td5kG9-bevI/AAAAAAAAAI4/GxAImGz1ETE/s320/network-type.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
  103. После настройки на контроллере домена статических настроек соединения и поднятия &lt;b&gt;DHCP&lt;/b&gt;, обнаружилась неприятная неожиданность: рабочие станции продолжили получать IP-шники вида 169.254.x.x, не смотря ни на что. Более того, клиентские машины утверждали, что они &lt;b&gt;получили эти IP-шники от DHCP&lt;/b&gt;.&lt;br /&gt;
  104. &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-YGImO3WAlGc/Td5jy6Gi00I/AAAAAAAAAI0/1PoSSqdHEjw/s1600/networks-status.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;http://4.bp.blogspot.com/-YGImO3WAlGc/Td5jy6Gi00I/AAAAAAAAAI0/1PoSSqdHEjw/s320/networks-status.png&quot; width=&quot;265&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Как выяснилось, в режиме &lt;i&gt;Внутренней сети&lt;/i&gt; &lt;b&gt;Virtual PC&lt;/b&gt; включает &lt;b&gt;встроенный DHCP сервер&lt;/b&gt; и раздаёт с него настройки сети с IP адресами вида 169.254.x.x. &lt;b&gt;Встроенный DHCP сервер Virtual PC&lt;/b&gt; отвечает на запросы клиентских машин быстрее виртуального DHCP на контроллере домена.&lt;br /&gt;
  105. Раскопки показали, что&lt;b&gt; проблема со встроенным DHCP Virtual PC&lt;/b&gt; решается правкой конфигурационного файла &lt;b&gt;Virtual PC&lt;/b&gt; &lt;i&gt;Options.xml&lt;/i&gt;, расположенного в &lt;i&gt;%LocalAppData%\Microsoft\Windows Virtual PC\&lt;/i&gt;. В этом файле есть секция &lt;i&gt;preferences/virtual_network/virtual_server/dhcp&lt;/i&gt;, отвечающая за &lt;b&gt;параметры встроенного DHCP&lt;/b&gt; и позволяющая его отключить установив параметр &lt;i&gt;enabled&lt;/i&gt; равным &lt;i&gt;false&lt;/i&gt;. После чего следует перезапустить виртуальные машины и радоваться корректной работе виртуальной сети.&lt;/div&gt;</description><link>http://akinfold.blogspot.com/2011/05/dhcp-virtual-pc.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-3Qo4q0M1fMk/Td5kG9-bevI/AAAAAAAAAI4/GxAImGz1ETE/s72-c/network-type.png" height="72" width="72"/><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-8982463181511093108</guid><pubDate>Sat, 27 Nov 2010 21:13:00 +0000</pubDate><atom:updated>2010-11-28T04:13:29.953+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">HowTo</category><category domain="http://www.blogger.com/atom/ns#">PlayStation 3</category><title>Как загрузить mp3 на HDD Sony Playstation 3</title><description>&lt;ol&gt;&lt;li&gt;Берём &lt;b&gt;флэшку&lt;/b&gt;.&lt;/li&gt;
  106. &lt;li&gt;Форматируем в &lt;b&gt;FAT32&lt;/b&gt; (если она в чём другом).&lt;/li&gt;
  107. &lt;li&gt;Заливаем на неё &lt;b&gt;музыку&lt;/b&gt;.&lt;/li&gt;
  108. &lt;li&gt;Втыкаем &lt;b&gt;флэшку&lt;/b&gt; в &lt;b&gt;Sony Playstation 3&lt;/b&gt;.&lt;/li&gt;
  109. &lt;li&gt;Идём на &lt;b&gt;Playstation 3&lt;/b&gt; в раздел &lt;b&gt;&quot;Музыка&quot;&lt;/b&gt; выбираем в нём &lt;b&gt;флэшку&lt;/b&gt;.&lt;/li&gt;
  110. &lt;li&gt;Жмём &quot;треугольник&quot; на джойстике.&lt;/li&gt;
  111. &lt;li&gt;В появившемся меню выбираем &quot;Показать всё&quot; и жмём &quot;крестик&quot; для принятия.&lt;/li&gt;
  112. &lt;li&gt;Снова выбираем в разделе &lt;b&gt;&quot;Музыка&quot;&lt;/b&gt; &lt;b&gt;флэшку&lt;/b&gt; и жмём &quot;крестик&quot; - видим содержимое &lt;b&gt;флэшки&lt;/b&gt;.&lt;/li&gt;
  113. &lt;li&gt;Выбираем файл/папку которые нужно скопировать на &lt;b&gt;жесткий диск&lt;/b&gt; &lt;b&gt;Playstation 3&lt;/b&gt; и жмём &quot;треугольник&quot; на джойстике.&lt;/li&gt;
  114. &lt;li&gt;В открывшемся меню выбираем &lt;b&gt;&quot;Копировать&quot;&lt;/b&gt; и жмём &quot;крестик&quot; для принятия.&lt;/li&gt;
  115. &lt;li&gt;Ждём пока указанное содержимое &lt;b&gt;флэшки&lt;/b&gt; скопируется на &lt;b&gt;жесткий диск&lt;/b&gt; &lt;b&gt;Playstation 3&lt;/b&gt;.&lt;/li&gt;
  116. &lt;/ol&gt;</description><link>http://akinfold.blogspot.com/2010/11/mp3-hdd-sony-playstation-3.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-7847725384171015101</guid><pubDate>Fri, 02 Apr 2010 17:34:00 +0000</pubDate><atom:updated>2010-04-03T03:37:53.260+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">BH-503</category><category domain="http://www.blogger.com/atom/ns#">HowTo</category><category domain="http://www.blogger.com/atom/ns#">Nokia</category><category domain="http://www.blogger.com/atom/ns#">Windows</category><title>Connecting Nokia BH-503 to Windows 7 via Asus USB-BT21</title><description>Давненько не писал в блог, всё дела, дела... Но сегодня появилась кое какая информация, которую хотелось бы увековечить в блоге, дабы в последствии не забыть.&lt;br /&gt;Сразу к делу (о том, как всё это началось и о том какие всё таки чудесные аппараты делают финны в Китае как нибудь в другой раз).&lt;br /&gt;Итак, имеем ноутбук&lt;span style=&quot;font-weight: bold;&quot;&gt; без встроенного Bluetooth&lt;/span&gt;, блютуз адаптер &lt;span style=&quot;font-weight: bold;&quot;&gt;Asus USB-BT21 &lt;/span&gt;(маленький такой удобный, почти не торчащий из корпуса ноута) и гранитуру &lt;span style=&quot;font-weight: bold;&quot;&gt;Nokia BH-503&lt;/span&gt;.&lt;br /&gt;Для того чтобы &lt;span style=&quot;font-weight: bold;&quot;&gt;подключить блютуз гарнитуру Nokia BH-503&lt;/span&gt; к ноутбуку/pc под &lt;span style=&quot;font-weight: bold;&quot;&gt;Windows 7&lt;/span&gt; через Bluetooth адаптер &lt;span style=&quot;font-weight: bold;&quot;&gt;Asus USB-BT21&lt;/span&gt; делаемследующее:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Втыкаем в ноутбук &lt;span style=&quot;font-weight: bold;&quot;&gt;BT21&lt;/span&gt; и дожидаемся сообщения о том, что устройство установлено и готово к использованию.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.broadcom.com/support/bluetooth/update.php&quot;&gt;Отправляемся на сайт компании Broadcom&lt;/a&gt; -- производителя чипа на котором сделан наш &lt;span style=&quot;font-weight: bold;&quot;&gt;Asus USB-BT21&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;На открывшейся страничке жмём кнопочку Download Now.&lt;/li&gt;&lt;li&gt;На следующей страничке сайта соглашаемся с лицензионным соглашением, нажав кнопочку Accept.&lt;/li&gt;&lt;li&gt;Сохраняем предложенный для загрузки файл, например, на рабочий стол.&lt;/li&gt;&lt;li&gt;Запускаем скачанный файл и устанавливаем драйвер.&lt;/li&gt;&lt;li&gt;После установки драйвера идём в &lt;span style=&quot;font-weight: bold;&quot;&gt;Панель управления -&gt; Оборудование и звук -&gt; Диспетчер устройств&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;В &lt;span style=&quot;font-weight: bold;&quot;&gt;Диспетчере устройств&lt;/span&gt; раскрываем пункт &lt;span style=&quot;font-weight: bold;&quot;&gt;Радиомодули Bluetooth&lt;/span&gt;, выбираем подпункт &lt;span style=&quot;font-weight: bold;&quot;&gt;Generic Bluetooth Adapter&lt;/span&gt; и заходим в его &lt;span style=&quot;font-weight: bold;&quot;&gt;свойства&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;В свойствах &lt;span style=&quot;font-weight: bold;&quot;&gt;переходим на вкладку Драйвер&lt;/span&gt; и нажимамем кнопку &lt;span style=&quot;font-weight: bold;&quot;&gt;Обновить...&lt;/span&gt;&lt;/li&gt;&lt;li&gt;В появившемся окне выбираем пункт &lt;span style=&quot;font-weight: bold;&quot;&gt;Выполнить поиск драйверов на этом компьютере&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Далее выбираем пункт &lt;span style=&quot;font-weight: bold;&quot;&gt;Выбрать драйвер из списка уже установленных драйверов&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;В появившемся окне убираем галочку &lt;span style=&quot;font-weight: bold;&quot;&gt;Только совместимые устройства&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Теперь в левом списке под заголовком &lt;span style=&quot;font-weight: bold;&quot;&gt;Изготовитель&lt;/span&gt; выбираем пункт &lt;span style=&quot;font-weight: bold;&quot;&gt;Broadcom&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Далее в правом списке выбираем пункт &lt;span style=&quot;font-weight: bold;&quot;&gt;Broadcom 2046 Bluetooth 2.1 + ERD USB Device&lt;/span&gt; и устанавливаем этот драйвер несмотря на предупреждения &lt;span style=&quot;font-weight: bold;&quot;&gt;Windows&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;После установки драйвера &lt;span style=&quot;font-weight: bold;&quot;&gt;перезагружаемся&lt;/span&gt; для пущей надёжности.&lt;/li&gt;&lt;li&gt;Теперь можно приступить к подключению гарнитурки! :)&lt;/li&gt;&lt;li&gt;Отправляемся в &lt;span style=&quot;font-weight: bold;&quot;&gt;Панель управления -&gt; Оборудование и звук -&gt; Добавление устройства Bluetooth&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;На гарнитуре Nokia BH-503 зажимаем&lt;/span&gt; т.н. &lt;span style=&quot;font-style: italic;&quot;&gt;Многофункциональную клавишу&lt;/span&gt; (проще говоря, кнопку с нарисованной телефонной трубкой) и держим до тех пор, пока индикатор не &lt;span style=&quot;font-weight: bold;&quot;&gt;начнёт часто мигать синим&lt;/span&gt; (держать придётся долго, за это время гарнитура обычно успевает ещё раза два моргнуть зелёным).&lt;/li&gt;&lt;li&gt;Теперь ждём пока &lt;span style=&quot;font-weight: bold;&quot;&gt;Windows&lt;/span&gt; обнаружит нашу гарнитуру.&lt;/li&gt;&lt;li&gt;После того, как &lt;span style=&quot;font-weight: bold;&quot;&gt;гарнитура&lt;/span&gt; будет обнаружена, подключите и дождитесь сообщения о том, что &lt;span style=&quot;font-weight: bold;&quot;&gt;устройство подключено и готово к использованию&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Затем &lt;span style=&quot;font-weight: bold;&quot;&gt;перезагружаемся не выключая ни блютуз ни гарнитуру&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;После перезагрузки &lt;span style=&quot;font-weight: bold;&quot;&gt;Windows&lt;/span&gt; автоматически подключится к гарнитуре, если вы её не выключили, и начнёт передавать звук на неё.&lt;/li&gt;&lt;/ol&gt;</description><link>http://akinfold.blogspot.com/2010/04/connecting-nokia-bh-503-to-windows-7.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>7</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-7224597305610733114</guid><pubDate>Mon, 19 Oct 2009 20:03:00 +0000</pubDate><atom:updated>2009-10-20T04:20:50.102+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><title>.NET Label with transparent background</title><description>Чтобы организовать средствами &lt;span style=&quot;font-weight: bold;&quot;&gt;.NET Framework&lt;/span&gt; такое чудо современных технологий разработки &lt;span style=&quot;font-weight: bold;&quot;&gt;GUI&lt;/span&gt;, как текстовое поле с прозрачным фоном размещённое поверх какой-то картинки в &lt;span style=&quot;font-weight: bold;&quot;&gt;Win Forms&lt;/span&gt; нужно:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Разместить на форме компонент &lt;span style=&quot;font-weight: bold;&quot;&gt;Panel&lt;/span&gt;, задав в качестве свойства &lt;span style=&quot;font-weight: bold;&quot;&gt;BackgroundImage&lt;/span&gt; желаемую картинку.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Затем поместить на этот &lt;span style=&quot;font-weight: bold;&quot;&gt;Panel&lt;/span&gt; новый &lt;span style=&quot;font-weight: bold;&quot;&gt;Label&lt;/span&gt; и задать в качестве параметра &lt;span style=&quot;font-weight: bold;&quot;&gt;BackColor&lt;/span&gt; значение &lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;Transparent&lt;/span&gt;. &lt;/li&gt;&lt;/ol&gt;Если же, по каким-то причинам использовать &lt;span style=&quot;font-weight: bold;&quot;&gt;Panel&lt;/span&gt; с размещённым на нём &lt;span style=&quot;font-weight: bold;&quot;&gt;Label&lt;/span&gt; вам не с руки, то можно использовать для этих целей компонент &lt;span style=&quot;font-weight: bold;&quot;&gt;PictureBox&lt;/span&gt; (&lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;MyPicture&lt;/span&gt;) с нужной картинкой и расположенный поверх него &lt;span style=&quot;font-weight: bold;&quot;&gt;Label&lt;/span&gt; со значением свойства &lt;span style=&quot;font-weight: bold;&quot;&gt;BackColor&lt;/span&gt; равным &lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;Transparent&lt;/span&gt; и свойством &lt;span style=&quot;font-weight: bold;&quot;&gt;Parent&lt;/span&gt; программно установленным в значение &lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;MyPicture&lt;/span&gt; (Label1.Parent = MyPicture;).</description><link>http://akinfold.blogspot.com/2009/10/net-label-with-transparent-background.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-3532659105450316573</guid><pubDate>Tue, 22 Sep 2009 08:04:00 +0000</pubDate><atom:updated>2009-12-23T17:21:24.934+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Apache</category><category domain="http://www.blogger.com/atom/ns#">Links</category><category domain="http://www.blogger.com/atom/ns#">SSL</category><category domain="http://www.blogger.com/atom/ns#">SVN</category><category domain="http://www.blogger.com/atom/ns#">Trac</category><category domain="http://www.blogger.com/atom/ns#">Windows</category><title>Links: Trac &amp; Apache with Open SSL on Windows</title><description>&lt;a href=&quot;http://r3code.livejournal.com/77730.html&quot;&gt;http://r3code.livejournal.com/77730.html&lt;/a&gt; - Немного уже устаревший, но всё ещё очень полезный материал годовой давности по настройке Trac 0.11.1 + Python 2.5 + Apache 2.0.x + Subversion 1.5.2 под Windows.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.neilstuff.com/apache/apache2-ssl-windows.htm&quot;&gt;http://www.neilstuff.com/apache/apache2-ssl-windows.htm&lt;/a&gt; - Хорошая How-to-шка по настройке Apache + Open SSL.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://vingrad.ru/blogs/Bishop/2009/07/19/ustanovka-trac-pod-windows/&quot;&gt;http://vingrad.ru/blogs/Bishop/2009/07/19/ustanovka-trac-pod-windows/&lt;/a&gt; - Тоже хорошая How-to-шка по установке Trac под Windows, но без Apache и Open SSL.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://stackoverflow.com/questions/309412/how-to-setup-setuptools-for-python-2-6-on-windows&quot;&gt;http://stackoverflow.com/questions/309412/how-to-setup-setuptools-for-python-2-6-on-windows&lt;/a&gt; - setuptools под Python 2.6.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://badwords.org/w/Compile_mod_python_for_Python_2.6&quot;&gt;http://badwords.org/w/Compile_mod_python_for_Python_2.6&lt;/a&gt; - Компиляция mod_python.so для Apache под Python 2.6. С этим делом у меня так ничего и не получилось, ибо исходники mod_python из релиза компилиться отказались, вывалив мне 2 какието ошибки во время компиляции, а до репозитория я достучаться так и не смог.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Из личного опыта&lt;/span&gt;&lt;br /&gt;Процесс установки из статьи r3code, в принципе, очень прост, не занимает много времени и сил. Проблемы начинаются, когда хочется отойти от инструкций и поставить версию софта посовременне и сделать что нибудь, чего r3code не описал. С Apache 2.2 проблем никаких не возникло. При попытке настроить SSL шифрование только в директории /svn/ на одном из виртуальных хостов своего Apache пришлось долго и упорно плясать с бубном по причине отсутствия опыта и понимания опций конфига Open SSL. Далее мне приспичило вместо Python 2.5, как в статье, поставить Python 2.6. В итоге убил не один час на разбор вопроса &quot;где взять setuptools для питона 2.6 под винду?&quot; и попытки откомпилить mod_python.so для Apache под всё тот же Python 2.6. Провозившись с питоном 2.6 несколько часов, плюнул и установил 2.5.&lt;br /&gt;P.S.: На этом процесс поднятия Trac пока застопорился по причине моей занятости на другом проекте. Позже отпишу, как прошли остальные этапы установки.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-size:130%;&quot; &gt;Update&lt;/span&gt;&lt;br /&gt;&lt;a href=&quot;http://trac.edgewall.org/wiki/CookBook/Installation/TracOnWindowsWithAccountManager&quot;&gt;http://trac.edgewall.org/wiki/CookBook/Installation/TracOnWindowsWithAccountManager&lt;/a&gt; - Пошаговая инструкция по установке Trac под Windows (Eng).</description><link>http://akinfold.blogspot.com/2009/09/links-trac-apache-with-open-ssl-on.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-1830196222866376256</guid><pubDate>Wed, 19 Aug 2009 15:44:00 +0000</pubDate><atom:updated>2011-07-27T03:03:38.417+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">HowTo</category><category domain="http://www.blogger.com/atom/ns#">XternalX Userbars</category><title>Last.fm recently played list by XternalX Userbars</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Итак, наконец-то мой друг &lt;a href=&quot;http://xternalx.com/&quot;&gt;Виктор XternalX&lt;/a&gt; выпустил первую бета версию своих динамических юзербаров, с чем я его от всей души и поздравляю! :) И в этом блогпосте я постараюсь описать процесс создания юзербара отображающего списко последних пяти прослушанных мной на &lt;a href=&quot;http://lastfm.ru/user/Akinfold&quot; style=&quot;font-weight: bold;&quot;&gt;Last.FM&lt;/a&gt; композиций. Надо сказать, что родной сервис юзербаров от last.fm работает, мягко говоря, не корректно, поэтому сервис динамических юзербаров &lt;a href=&quot;http://userbars.xternalx.com/&quot; style=&quot;font-weight: bold;&quot;&gt;XternalX Userbars&lt;/a&gt; тут оказался, как нельзя кстати.&lt;br /&gt;
  117. &lt;br /&gt;
  118. &lt;div style=&quot;text-align: center;&quot;&gt;&lt;img alt=&quot;Last.FM XternalX Userbar&quot; src=&quot;http://xternalx.7pe.net/userbar/img-Akinfold-3.png&quot; /&gt;&lt;/div&gt;&lt;br /&gt;
  119. Первое, что мы делаем, регистрируем себе новый аккаунт в &lt;a href=&quot;http://userbars.xternalx.com/&quot; style=&quot;font-weight: bold;&quot;&gt;XternalX Userbars&lt;/a&gt;. Форма регистрации находится &lt;a href=&quot;http://userbars.xternalx.com/register.lua&quot;&gt;здесь&lt;/a&gt;. После чего &lt;a href=&quot;http://userbars.xternalx.com/login.lua&quot;&gt;войдя в &lt;span style=&quot;font-weight: bold;&quot;&gt;XternalX Userbars&lt;/span&gt;&lt;/a&gt; под только что созданной учётной записью, мы попадаем в редактор юзербаров (Рис. 1).&lt;br /&gt;
  120. &lt;br /&gt;
  121. &lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_kzECh2qTOCo/Sowi42xLO5I/AAAAAAAAAEM/hKKGVPTeuLE/s1600-h/xternalxuserbar01.jpg&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5371706815715949458&quot; src=&quot;http://1.bp.blogspot.com/_kzECh2qTOCo/Sowi42xLO5I/AAAAAAAAAEM/hKKGVPTeuLE/s400/xternalxuserbar01.jpg&quot; style=&quot;cursor: pointer; display: block; height: 230px; margin: 0px auto 10px; text-align: center; width: 400px;&quot; /&gt;&lt;/a&gt;Рис. 1 Панель управления XternalX Userbars&lt;/div&gt;&lt;br /&gt;
  122. &lt;br /&gt;
  123. Не вдаваясь в подробности описания интерфейса, опишу непосредственно сам процесс создания моего юзербарчика.&lt;br /&gt;
  124. Для начала, нам необходимо зайти в &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;Файловый менеджер&lt;/span&gt;&quot; (Рис. 2) и выбрать там основу (или фон) нашего юзербара.&lt;br /&gt;
  125. &lt;br /&gt;
  126. &lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_kzECh2qTOCo/SowlvWphALI/AAAAAAAAAEU/_fH5js25fcI/s1600-h/xternalxuserbar02.jpg&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5371709951009947826&quot; src=&quot;http://1.bp.blogspot.com/_kzECh2qTOCo/SowlvWphALI/AAAAAAAAAEU/_fH5js25fcI/s400/xternalxuserbar02.jpg&quot; style=&quot;cursor: pointer; display: block; height: 379px; margin: 0px auto 10px; text-align: center; width: 400px;&quot; /&gt;&lt;/a&gt;Рис. 2 Файловый менеджер&lt;/div&gt;&lt;br /&gt;
  127. В файловом менеджере уже есть несколько картинок, которые можно использовать в качестве фона, но мы загрузим свою картинку. Для этого внизу окна файлового менеджера щёлкнем ссылку &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;Загрузить файл&lt;/span&gt;&quot;. Откроется диалог изображенный на рисунке 3.&lt;br /&gt;
  128. &lt;br /&gt;
  129. &lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_kzECh2qTOCo/SownrE1i9vI/AAAAAAAAAEc/IZyguYUjkM8/s1600-h/xternalxuserbar03.jpg&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5371712076532348658&quot; src=&quot;http://1.bp.blogspot.com/_kzECh2qTOCo/SownrE1i9vI/AAAAAAAAAEc/IZyguYUjkM8/s400/xternalxuserbar03.jpg&quot; style=&quot;cursor: pointer; display: block; height: 55px; margin: 0px auto 10px; text-align: center; width: 400px;&quot; /&gt;&lt;/a&gt;Рис. 3 Диалог загрузки фона юзербара&lt;/div&gt;&lt;br /&gt;
  130. Нажмём кнопку &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;Обзор...&lt;/span&gt;&quot; и выберем нужный нам фон, в моём случае -- это давно заготовленная картинка, которую я безуспешно пытался, в своё время, скормить сервису юзербаров&lt;a href=&quot;http://lastfm.ru/user/Akinfold&quot;&gt; last.fm&lt;/a&gt;. &lt;span style=&quot;font-weight: bold;&quot;&gt;Учтите, что картинка обязательно должна быть в формате PNG!&lt;/span&gt;&lt;br /&gt;
  131. Теперь понравившийся нам фон выбран, жмём ссылку &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;Загрузить&lt;/span&gt;&quot; внизу диалога загрузки фонового изображения. После загрузки мы снова окажемся в Файловом менеджере. Не спешите искать в списке файлов, только что загруженный нами, его там нет (бета версия как ни как ;)). &lt;span style=&quot;font-weight: bold;&quot;&gt;Необходимо закрыть файловый менеджер, щелчком по крестику в его верхнем правом углу, и открыть его снова.&lt;/span&gt; Теперь список файлов в файловом менеджере обновился и мы можем спокойно найти только что загруженный нами файл и выбрать его (Рис. 4).&lt;br /&gt;
  132. &lt;br /&gt;
  133. &lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_kzECh2qTOCo/SowqIQWBuoI/AAAAAAAAAEk/zFimZbZz_x8/s1600-h/xternalxuserbar04.jpg&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5371714776860834434&quot; src=&quot;http://1.bp.blogspot.com/_kzECh2qTOCo/SowqIQWBuoI/AAAAAAAAAEk/zFimZbZz_x8/s400/xternalxuserbar04.jpg&quot; style=&quot;cursor: pointer; display: block; height: 379px; margin: 0px auto 10px; text-align: center; width: 400px;&quot; /&gt;&lt;/a&gt;Рис. 4 Предпросмотр выбранного в файловом менеджере изображения&lt;/div&gt;&lt;br /&gt;
  134. Теперь закрываем файловый менеджер (да-да, я не опечатался, именно закрываем). И в панели управления &lt;a href=&quot;http://userbars.xternalx.com/&quot; style=&quot;font-weight: bold;&quot;&gt;XternalX Userbars&lt;/a&gt; щёлкаем плюсик справа от поля &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;Основа юзербара&lt;/span&gt;&quot;. Теперь в текстовом поле &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;Основа юзербара&lt;/span&gt;&quot; образовалось название только что загруженного нами файла. Для того, чтобы выбранный нами фон отобразился в предпросмотре юзербара нажмём кнопочку &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;Сохранить&lt;/span&gt;&quot; внизу панели упарвления &lt;a href=&quot;http://userbars.xternalx.com/&quot; style=&quot;font-weight: bold;&quot;&gt;XternalX Userbars&lt;/a&gt;. Результат на рисунке 5.&lt;br /&gt;
  135. &lt;br /&gt;
  136. &lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/_kzECh2qTOCo/Sowsdqq_tSI/AAAAAAAAAEs/LM4lUh4G7qQ/s1600-h/xternalxuserbar05.jpg&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5371717343728612642&quot; src=&quot;http://4.bp.blogspot.com/_kzECh2qTOCo/Sowsdqq_tSI/AAAAAAAAAEs/LM4lUh4G7qQ/s400/xternalxuserbar05.jpg&quot; style=&quot;cursor: pointer; display: block; height: 237px; margin: 0px auto 10px; text-align: center; width: 400px;&quot; /&gt;&lt;/a&gt;Рис. 5 Предпросмотр юзербара&lt;/div&gt;&lt;br /&gt;
  137. Теперь включим необходимые нам плагины. Для этого заходим в &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;Расширения&lt;/span&gt;&quot; и приводим там всё в соответствие с рисунком 6.&lt;br /&gt;
  138. &lt;br /&gt;
  139. &lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_kzECh2qTOCo/SowtPxAF7rI/AAAAAAAAAE0/u-EnTijumZA/s1600-h/xternalxuserbar06.jpg&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5371718204421172914&quot; src=&quot;http://3.bp.blogspot.com/_kzECh2qTOCo/SowtPxAF7rI/AAAAAAAAAE0/u-EnTijumZA/s400/xternalxuserbar06.jpg&quot; style=&quot;cursor: pointer; display: block; height: 189px; margin: 0px auto 10px; text-align: center; width: 391px;&quot; /&gt;&lt;/a&gt;Рис. 6 Менеджер расширений &lt;a href=&quot;http://userbars.xternalx.com/&quot;&gt;XternalX Userbars&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
  140. Затем щёлкаем по гаечному ключу справа от расширения &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;Last.FM Track Feed&lt;/span&gt;&quot; и настраиваем его (Рис. 7). В поле &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;Введите URL до Вашей RSS Ленты&lt;/span&gt;&quot; вводим следующий адрес: &lt;a href=&quot;http://ws.audioscrobbler.com/1.0/user/Akinfold/recenttracks.rss&quot;&gt;http://ws.audioscrobbler.com/1.0/user/Akinfold/recenttracks.rss&lt;/a&gt; естественно, заменяя имя пользователя &lt;a href=&quot;http://lastfm.ru/user/Akinfold&quot;&gt;last.fm&lt;/a&gt; на своё. В поле &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;Формат даты и времени&lt;/span&gt;&quot; вводим &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;H:i&lt;/span&gt;&quot;. И нажимаем &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;Сохранить&lt;/span&gt;&quot;.&lt;br /&gt;
  141. &lt;br /&gt;
  142. &lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_kzECh2qTOCo/SowuEbJJBrI/AAAAAAAAAE8/SjgEqG2EehY/s1600-h/xternalxuserbar07.jpg&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5371719109086611122&quot; src=&quot;http://1.bp.blogspot.com/_kzECh2qTOCo/SowuEbJJBrI/AAAAAAAAAE8/SjgEqG2EehY/s400/xternalxuserbar07.jpg&quot; style=&quot;cursor: pointer; display: block; height: 108px; margin: 0px auto 10px; text-align: center; width: 400px;&quot; /&gt;&lt;/a&gt;Рис. 7 Настройки Last.FM Track Feed&lt;/div&gt;&lt;br /&gt;
  143. &lt;br /&gt;
  144. Закрываем диалог менеджера расширений и теперь приступаем к написанию кода нашего юзербара. В листинге 1 приведён весь код, который я разберу подробно далее.&lt;br /&gt;
  145. &lt;br /&gt;
  146. Листинг 1.&lt;br /&gt;
  147. &lt;pre class=&quot;brush:php&quot;&gt;str(100,12,7,0,arial,000000,lastfm(1,date))
  148. str(130,7,12,0,arial,000000,lastFm(1,title))
  149.  
  150. str(100,24,7,0,arial,666666,lastfm(2,date))
  151. str(130,23,8,0,arial,666666,lastFm(2,title))
  152.  
  153. str(100,36,7,0,arial,666666,lastfm(3,date))
  154. str(130,35,8,0,arial,666666,lastFm(3,title))
  155.  
  156. str(100,48,7,0,arial,666666,lastfm(4,date))
  157. str(130,47,8,0,arial,666666,lastFm(4,title))
  158.  
  159. str(100,60,7,0,arial,666666,lastfm(5,date))
  160. str(130,59,8,0,arial,666666,lastFm(5,title))&lt;/pre&gt;Как мы видим, код юзербара разбит на 5 однотипных блоков. Каждый блок кода отвечает за вывод одной строки формата &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;lt;время&amp;gt; &amp;lt;композиция&amp;gt;&lt;/span&gt;. Каждый такой блок состоит из двух вызовов функции &lt;span style=&quot;font-weight: bold;&quot;&gt;str&lt;/span&gt;, которая отвечает за вывод текста в &lt;a href=&quot;http://userbars.xternalx.com/&quot; style=&quot;font-weight: bold;&quot;&gt;XternalX Userbars&lt;/a&gt;. Эта функция принимает 7 параметров:&lt;br /&gt;
  161. &lt;ol&gt;&lt;li&gt;Горизонтальное положение левой границы надписи относительно левого края юзербара. Или, проще говоря, &lt;span style=&quot;font-weight: bold;&quot;&gt;координата текста по оси X&lt;/span&gt;.&lt;/li&gt;
  162. &lt;li&gt;Вертикальное положение верхней границы надписи относительно верхнего края юзербара. Или, проще говоря, &lt;span style=&quot;font-weight: bold;&quot;&gt;координата надписи по оси Y&lt;/span&gt;.&lt;/li&gt;
  163. &lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Размер&lt;/span&gt; шрифта в пикселях.&lt;/li&gt;
  164. &lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Угол&lt;/span&gt; поворота текста.&lt;/li&gt;
  165. &lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Шрифт&lt;/span&gt;, которым будет отрисовываться текст на юзербаре.&lt;/li&gt;
  166. &lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Цвет&lt;/span&gt; шрифта.&lt;/li&gt;
  167. &lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Текст&lt;/span&gt;. В нашем случае текст возвращает функция &lt;span style=&quot;font-weight: bold;&quot;&gt;lastFm&lt;/span&gt; речь о которой пойдёт далее.&lt;/li&gt;
  168. &lt;/ol&gt;Таким образом, каждая первая строка блока отображает время, когда была прослушана композиция, а каждая вторая строка отвечает за отображение названия и автора композиции. В нашем примере для вывода информации о композициях мы используем функцию &lt;span style=&quot;font-weight: bold;&quot;&gt;lastfm&lt;/span&gt;, которая принимает два параметра:&lt;br /&gt;
  169. &lt;ol&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Номер композиции&lt;/span&gt; в списке недавно прослушанных композиций. Последняя прослушанная композиция имеет номер 1, прослушанная до неё композиция имеет номер 2 и так далее.&lt;/li&gt;
  170. &lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ключевое слово&lt;/span&gt;, сообщающее функции, какую информацию о композиции выводить. В нашем случае мы выводим время прослушивания композиции (ключевое слово &lt;span style=&quot;font-weight: bold;&quot;&gt;date&lt;/span&gt;) и название композиции (ключевое слово &lt;span style=&quot;font-weight: bold;&quot;&gt;title&lt;/span&gt;).&lt;/li&gt;
  171. &lt;/ol&gt;Ну вот, наконец-то всё готово и мы жмём ссылку &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;Сохранить&lt;/span&gt;&quot; внизу панели управления &lt;a href=&quot;http://userbars.xternalx.com/&quot; style=&quot;font-weight: bold;&quot;&gt;XternalX Userbars&lt;/a&gt;. Теперь результат наших трудов отображается в предпросмотре юзербара (Рис. 8).&lt;br /&gt;
  172. &lt;br /&gt;
  173. &lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_kzECh2qTOCo/Sow1mMW0PBI/AAAAAAAAAFE/4euGNQc_360/s1600-h/xternalxuserbar08.jpg&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5371727385814383634&quot; src=&quot;http://3.bp.blogspot.com/_kzECh2qTOCo/Sow1mMW0PBI/AAAAAAAAAFE/4euGNQc_360/s400/xternalxuserbar08.jpg&quot; style=&quot;cursor: pointer; display: block; height: 237px; margin: 0px auto 10px; text-align: center; width: 400px;&quot; /&gt;&lt;/a&gt;Рис. 8 Юзербар готов к употреблению&lt;/div&gt;&lt;br /&gt;
  174. Теперь смело копируем ссылку на наш юзербар из поля &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ссылка на Ваш юзербар&lt;/span&gt;&quot; и вставляем в подпись на форумах, в блогах и т.д. и т.п. кому на что фантазии хватит. ;)&lt;br /&gt;
  175. &lt;br /&gt;
  176. &lt;a href=&quot;http://xternalx.com/forum/index.php?topic=14.0&quot; style=&quot;font-weight: bold;&quot;&gt;Форум XternalX Userbars&lt;/a&gt;.&lt;/div&gt;</description><link>http://akinfold.blogspot.com/2009/08/lastfm-recently-played-list-by-xternalx.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_kzECh2qTOCo/Sowi42xLO5I/AAAAAAAAAEM/hKKGVPTeuLE/s72-c/xternalxuserbar01.jpg" height="72" width="72"/><thr:total>7</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-7939679092511594872</guid><pubDate>Fri, 14 Aug 2009 13:38:00 +0000</pubDate><atom:updated>2009-08-14T22:49:16.252+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Google</category><category domain="http://www.blogger.com/atom/ns#">Nokia 3250</category><title>Google Sync, а счастье было так близко, казалось рукой подать...</title><description>... ан нет! Оказалось не всё так просто.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.google.com/mobile/products/sync.html#p=nokia_smart&quot;&gt;Google Sync&lt;/a&gt; -- это новый, хотя уже и не особо, сервис от google inc. Идея сервиса заключается в глобальной синхронизации контактов, календарей, почтовых ящиков и т.д. и т.п. на мобильных девайсах с гуглесервисами. На данный момент синхронизируются только контакты и календарь. Синхронизация происходит с помощью протокола Microsoft® Exchange ActiveSync®, поэтому google настоятельно рекомендует для синхронизации использовать спец. софтину &lt;a href=&quot;http://www.businesssoftware.nokia.com/mail_for_exchange_downloads.php&quot;&gt;Nokia Mail for Exchange&lt;/a&gt;. Хотя в интернете мелькают &lt;a href=&quot;http://smartzone.ru/soft/574-nastrojki-google-sync-dlya-symbian-s60.html&quot;&gt;инструкции&lt;/a&gt; по настройке синхронизации и без неё (но у меня сей вариант не прошёл).&lt;br /&gt;&lt;br /&gt;Скачав и установив на свой Nokia 3250 спец. софтину, я бэкапнул все настройки телефона с помощью &lt;span style=&quot;font-weight: bold;&quot;&gt;Nokia PC Suite&lt;/span&gt; и полез в &lt;a style=&quot;font-weight: bold;&quot; href=&quot;http://www.google.com/support/mobile/bin/answer.py?answer=147951&amp;amp;ctx=sibling&quot;&gt;инструкцию по установке Google Sync&lt;/a&gt;. Первое и единственное на чём я споткнулся, было поле &quot;Домен&quot;, которое по инструкции следовало бы оставить пустым, но mail for exchange категорически отказалась принимать настройки с пустым полем &quot;Домен&quot;, пришлось написать там &quot;m.google.com&quot;, не знаю на сколько это решение было верно, ибо после первого же запуска, залез в настройки и опустошил это поле, как того требует инструкция. В принципе, установка и настройка потребовали минимум времени и прошли легко и не принуждённо.&lt;br /&gt;&lt;br /&gt;Далее, причесав контакты в &lt;a href=&quot;http://www.gmail.com&quot;&gt;Gmail&lt;/a&gt; аккаунте, я попытался синхронизировать контакты gmail&#39;а и телефона. Залез в &quot;Мои приложения&quot;, запустил Mail for Exchange, и начал синхронизацию. Порадовало, что и этот процесс прошел без малейших осложнений. Софтина аккуратно в течении всего процесса синхронизации показывала сколько записей она обновила и где, хотя вполне можно было и не следить за этим, закрыв приложение.&lt;br /&gt;&lt;br /&gt;Собственно вот тут то, сразу после синхронизации, меня и ждало первое и последнее разочарование. Оказалось, что гугыль не понимает русских ФИО и пытается &quot;колбасить&quot; все контакты на буржуйский лад (ИФ). В итоге я получил телефонную книжку телефона полную всяких Ивановичей Ивановых, Сидоровичей Сидоровых и Петровичей Петровых. Первой мыслью было причесать контакты в gmail на буржуйский лад. Сделал. Синхронизировал всё. Получил полную записную книжку почти нормальных записей, благо кроме ФИО ни с чем больше проблем не возникло, все остальные поля синхронизируются великолепно. Однако gmail решил не передавать на телефон отчества контактов. Сначала я решил, что с этим минусом, скрепя сердце, ещё как то можно ужиться, но вскоре пришло понимание и второго минуса. Заключался он в том, что теперь все мои контакты в gmail оказались отсортированы не по фамилии, а по имени. В итоге у меня получилась две какие-то дефективные синхронизированные запсиные книжки. В одной нет отчеств контактов (зато картинки были аккуратненько выкачаны из гмэйла и установлены на контакты в телефоне), по другой не возможно никого найти. Потом выискался ещё один минус, gmail не понимает группы контактов со смарта, а последний, в свою очередь, не хочет понимать группы gmail&#39;овских контактов.&lt;br /&gt;&lt;br /&gt;Итог. После экспериментов с контактами, пробовать тоже самое и на календаре желание как-то само собой отпало. Удалил с телефона &lt;a href=&quot;http://www.businesssoftware.nokia.com/mail_for_exchange_downloads.php&quot;&gt;Nokia Mail for Exchange&lt;/a&gt; и решил на полгодика-годик забыть о тотальной синхронизации девайсов, а там поглядим...</description><link>http://akinfold.blogspot.com/2009/08/google-sync.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-5038179762719134236</guid><pubDate>Tue, 11 Aug 2009 04:00:00 +0000</pubDate><atom:updated>2009-08-11T16:43:06.857+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">ООП</category><category domain="http://www.blogger.com/atom/ns#">Стандарты</category><title>Следование стандартам...</title><description>Так сложилось, что вот уже несколько месяцев занимаюсь программированием на &lt;span style=&quot;font-weight: bold;&quot;&gt;PHP&lt;/span&gt;, пишу свои классы и модули, попутно ковыряя чужие, верстаю и т.д. и т.п. И за всё это время я не видил НИ ОДНОГО продукта (естественно опенсорс) полностью соответствующего стандартам &lt;span style=&quot;font-weight: bold;&quot;&gt;W3C&lt;/span&gt; и парадигмам &lt;span style=&quot;font-weight: bold;&quot;&gt;ООП&lt;/span&gt;. Интересно, почему разработчики столь наплевательски относятся к стандартам, по сути писавшимся для них, дабы облегчить их нелёгкий труд?&lt;br /&gt;&lt;br /&gt;С &lt;span style=&quot;font-weight: bold;&quot;&gt;ООП&lt;/span&gt; всё, более или менее, понятно. &lt;span style=&quot;font-weight: bold;&quot;&gt;PHP&lt;/span&gt; изначально был процедурным языком и ни о каком &lt;span style=&quot;font-weight: bold;&quot;&gt;ООП&lt;/span&gt; в нём речи не шло. Да и сейчас в версии 5.1 часть парадигм &lt;span style=&quot;font-weight: bold;&quot;&gt;ООП&lt;/span&gt; не полностью поддерживается или поддерживается с помощью всевозможных &quot;костылей&quot; выдаваемых за преимущества &lt;span style=&quot;font-weight: bold;&quot;&gt;PHP&lt;/span&gt;.&lt;br /&gt;Например в &lt;span style=&quot;font-weight: bold;&quot;&gt;PHP&lt;/span&gt; нет т.н. акцессоров и мутаторов, точнее они &quot;как бы&quot; есть, предлагается пользоваться следующей конструкцией:&lt;br /&gt;&lt;pre class=&quot;brush: php&quot;&gt;&amp;lt;?php&lt;br /&gt;class MyClass {&lt;br /&gt;       private $properties;&lt;br /&gt;       function __set($name, $value) {&lt;br /&gt;               echo &quot;задание нового свойства $name = $value&quot;;&lt;br /&gt;               $this-&amp;gt;properties[$name]=$value;&lt;br /&gt;       }&lt;br /&gt;       function __get($name) {&lt;br /&gt;               echo &quot;чтение значения свойства &quot;, $name;&lt;br /&gt;               return $this-&amp;gt;properties[$name];&lt;br /&gt;       }&lt;br /&gt;}&lt;br /&gt;$obj = new MyClass;&lt;br /&gt;$obj-&amp;gt;property = 1; // Выводит &quot;задание нового свойства property=1&quot;&lt;br /&gt;$a = $obj-&amp;gt;property; // Выводит &quot;чтение значения свойства property&quot;&lt;br /&gt;echo $a; // выводит 1;&lt;br /&gt;?&amp;gt;&lt;/pre&gt;&lt;br /&gt;Таким методом конечно можно обрабатывать изменения свойств объектов, но для того чтобы заставить класс принимать только нужные (запланированные) параметры придётся писать switch и в нём проверять имена указываемых пользователем параметров, что не слишком то удобно.&lt;br /&gt;&lt;br /&gt;А вот со стандартами косорциума &lt;span style=&quot;font-weight: bold;&quot;&gt;W3C&lt;/span&gt; всё не так просто. По какой то не ведомой мне причине практически все разработчики плюют на эти стандарты и воротят ТАКОЕ, что хватаешься за голову.&lt;br /&gt;Вроде бы &lt;span style=&quot;font-weight: bold;&quot;&gt;HTML&lt;/span&gt; все в школе/техникуме/институте изучают, да и &lt;span style=&quot;font-weight: bold;&quot;&gt;W3C&lt;/span&gt; на месте не сидит, создавая для разработчиков всякие валидаторы, обнаруживающие ошибки в гипертексте странички и подробно разбирая каждую в соответствии со стандартом. В инете полно русско-язычных (и не только русско) ресурсов с подробным объяснением всех этих стандартов. И тем не менее разработчики продолжают испытывать браузеры на прочность своим бредом в гипертексте и жабаскрипте. Просто ради интереса зайдите вот сюда -&gt; &lt;a href=&quot;http://validator.w3.org/check?uri=http%3A%2F%2Fwww.lastfm.ru%2F&amp;charset=%28detect+automatically%29&amp;doctype=Inline&amp;group=0&amp;user-agent=W3C_Validator%2F1.654&quot;&gt;http://validator.w3.org/check?uri=http%3A%2F%2Fwww.lastfm.ru%2F&amp;charset=%28detect+automatically%29&amp;doctype=Inline&amp;group=0&amp;user-agent=W3C_Validator%2F1.654&lt;/a&gt; и обалдейте от количества ошибок и варнингов найденных валидатором в коде странички (страничка подвернулась случайно, просто этот сайт упорно отказывается у меня работать под оперой уже в течении двух его версий).&lt;br /&gt;А вот и тест любимого &lt;span style=&quot;font-weight: bold;&quot;&gt;ВКонтакта&lt;/span&gt; -&gt; &lt;a href=&quot;http://validator.w3.org/check?uri=http%3A%2F%2Fvkontakte.ru&amp;charset=%28detect+automatically%29&amp;doctype=Inline&amp;group=0&quot;&gt;http://validator.w3.org/check?uri=http%3A%2F%2Fvkontakte.ru&amp;charset=%28detect+automatically%29&amp;doctype=Inline&amp;group=0&lt;/a&gt;&lt;br /&gt;Причём заметьте, и тот и другой -- являются коммерческими проектами. Про не коммерческий код я вообще молчу...</description><link>http://akinfold.blogspot.com/2009/08/blog-post.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-3751988513915415017</guid><pubDate>Mon, 10 Aug 2009 20:25:00 +0000</pubDate><atom:updated>2009-08-11T04:30:45.756+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Joomla</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><title>SEF Service Map &amp; UTF-8 encoded URLs</title><description>&lt;span style=&quot;font-weight: bold;&quot;&gt;SEF Service Map&lt;/span&gt; это компонент, перед которым стоит задача создания полной карты сайта.&lt;br /&gt;Кроме того компонент совместим со всеми стандартными расширениями &lt;span style=&quot;font-weight: bold;&quot;&gt;Joomla!&lt;/span&gt; (статьи, RSS ленты, ссылки, контакты и т.д.),&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;SEF Service Map&lt;/span&gt; является открытым компонентом - это позволяет интегрировать его с другими компонентами,&lt;br /&gt;такими как галереи, форумы, каталоги и другие, благодаря встроенным механизмам интеграции!&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;SEF Service Map&lt;/span&gt; создает не только карту сайта, но и карту совместимую со стандартом sitemaps.org :&lt;br /&gt;- &lt;span style=&quot;font-weight: bold;&quot;&gt;XML&lt;/span&gt; карта (например: для Google)&lt;br /&gt;- &lt;span style=&quot;font-weight: bold;&quot;&gt;TXT&lt;/span&gt; карта (например: для Yahoo)&lt;br /&gt;&lt;br /&gt;Но эта зараза на отрез отказывается работать совместно с русскоязычными &lt;span style=&quot;font-weight: bold;&quot;&gt;UTF-8&lt;/span&gt; урликами вида: http://some.site/Новости/Новости-сайта/Превеееед-медвед.html&lt;br /&gt;Точнее работать то она с ними работает и даже HTML-карту генерирует валидную, а вот с &lt;span style=&quot;font-weight: bold;&quot;&gt;XML&lt;/span&gt;- и &lt;span style=&quot;font-weight: bold;&quot;&gt;TXT&lt;/span&gt;- картами проблема. Все красивые русские урлики в них выглядят примерно так: http://some.site/Ð?овоÑ?ти/Ð?овоÑ?ти-Ñ?айта/&lt;br /&gt;&lt;br /&gt;Порывшись в коде нашёл проблему. Разработчики при генерации &lt;span style=&quot;font-weight: bold;&quot;&gt;XML&lt;/span&gt;- и &lt;span style=&quot;font-weight: bold;&quot;&gt;TXT&lt;/span&gt;- карт выполняют перекодировку линка на статью в &lt;span style=&quot;font-weight: bold;&quot;&gt;UTF-8&lt;/span&gt;. Вобщем проблема решается таким образом:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Открываем файлик &lt;joomla!&gt;/components/com_sefservicemap/sefservicemap.html.php&lt;/joomla!&gt;&lt;/li&gt;&lt;li&gt;Закомменчиваем или удаляем все вхождения строки &quot;$link = utf8_encode($link);&quot; (их 2)&lt;/li&gt;&lt;li&gt;Радуемся жизни... ;)&lt;/li&gt;&lt;/ol&gt;</description><link>http://akinfold.blogspot.com/2009/08/sef-service-map-utf-8-encoded-urls.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-2821599737387529771</guid><pubDate>Sat, 08 Aug 2009 00:58:00 +0000</pubDate><atom:updated>2009-08-08T21:49:12.092+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.NET</category><category domain="http://www.blogger.com/atom/ns#">C#</category><title>Автопрокрутка многострочного Textbox из .NET Framework</title><description>Понадобилось сегодня сделать автопрокрутку лога приложения, нашёл для себя два способа реализовать задуманное.&lt;br /&gt;Первый и, пожалуй, самый простой способ:&lt;br /&gt;Устанавливать, например в обработчике события TextChanged, позицию начала выделения текста равной длине текста в textbox&#39;е и, затем, перематывать scrollbar textbox&#39;а до текущей позиции каретки.&lt;br /&gt;&lt;pre class=&quot;brush: csharp&quot;&gt;private void tbLog_TextChanged(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;    this.tbLog.SelectionStart = this.tbLog.TextLength;&lt;br /&gt;    this.tbLog.ScrollToCaret();&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Однако, у этого способа есть один недостаток: при такой перемотке scrollbar&#39;а перемещается каретка ввода текста, что не всегда бывает приемлемо.&lt;br /&gt;&lt;br /&gt;Второй способ немного интереснее и лишён вышеописанного недостатка, хотя и немного сложнее:&lt;br /&gt;Посылать textbox&#39;у, например всё в томже обработчике события TextChanged, сообщение WM_VSCROLL.&lt;br /&gt;&lt;pre class=&quot;brush: csharp&quot;&gt;private const int WM_VSCROLL = 0x115;&lt;br /&gt;private const int SB_BOTTOM = 7;&lt;br /&gt;&lt;br /&gt;[DllImport(&quot;user32.dll&quot;, CharSet=CharSet.Auto)]&lt;br /&gt;private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);&lt;br /&gt;&lt;br /&gt;private void tbLog_TextChanged(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;    SendMessage(this.tbLog.Handle, WM_VSCROLL, (IntPtr) SB_BOTTOM, IntPtr.Zero);&lt;br /&gt;}&lt;/pre&gt;</description><link>http://akinfold.blogspot.com/2009/08/textbox-net-framework.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-7090001149269414153</guid><pubDate>Tue, 28 Jul 2009 17:23:00 +0000</pubDate><atom:updated>2009-07-29T02:57:26.216+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">PHPLinq</category><title>&quot;Продвинутый&quot; пример использования PHPLinq</title><description>&lt;span style=&quot;font-weight: bold;&quot;&gt;Музыка:&lt;/span&gt; &lt;a href=&quot;http://www.discogs.com/Various-Hospital-MixSix-Mixed-By-Cyantific/release/1235465&quot;&gt;Hospital Mix.Six (Mixed By Cyantific)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Продолжая &lt;a href=&quot;http://akinfold.blogspot.com/2009/07/phplinq-language-integrated-query-for.html&quot;&gt;прошлую заметку посвящённую &lt;span style=&quot;font-weight: bold;&quot;&gt;PHPLinq&lt;/span&gt;&lt;/a&gt;, решил перевести ещё и, как гласит &lt;a href=&quot;http://www.phplinq.net/&quot;&gt;сайт проекта&lt;/a&gt;, &quot;продвинутый&quot; пример использования &lt;span style=&quot;font-weight: bold;&quot;&gt;PHPLinq&lt;/span&gt;.&lt;br /&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 298px; height: 100px;&quot; src=&quot;http://download.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=PHPLinq&amp;amp;DownloadId=56621&amp;amp;Build=15399&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;Итак, вольный перевод &lt;a href=&quot;http://phplinq.codeplex.com/Wiki/View.aspx?title=Examples&quot;&gt;данного материала&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Представим, что есть у нас &lt;span style=&quot;text-decoration: line-through;&quot;&gt;пять яблок&lt;/span&gt; массив объектов Employee (служащий). А нужно нам отсортировать этот массив по имени и возрасту служащих и получить в результате массив только тех служащих, имя которых состоит из четырёх символов. И чтобы уж совсем усложнить задачу, в результате мы хотим получить не массив экземпляров класса Employee, а массив объектов, содержащих мыло и домен почтового сервера служащего. Жестоко, не правдали? ;)&lt;br /&gt;Перво на перво, объявим класс служащих и заполним массив экземплярами этого класса:&lt;br /&gt;&lt;pre class=&quot;brush: php&quot;&gt;&lt;br /&gt;class Employee {&lt;br /&gt;   public $Name;&lt;br /&gt;   public $Email;&lt;br /&gt;   public $Age;&lt;br /&gt;&lt;br /&gt;   public function __construct($name, $email, $age) {&lt;br /&gt;       $this-&amp;gt;Name     = $name;&lt;br /&gt;       $this-&amp;gt;Email     = $email;&lt;br /&gt;       $this-&amp;gt;Age        = $age;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$employees = array(&lt;br /&gt;   new Employee(&#39;Maarten&#39;, &#39;maarten@example.com&#39;, 24),&lt;br /&gt;   new Employee(&#39;Paul&#39;, &#39;paul@example.com&#39;, 30),&lt;br /&gt;   new Employee(&#39;Bill&#39;, &#39;bill.a@example.com&#39;, 29),&lt;br /&gt;   new Employee(&#39;Bill&#39;, &#39;bill.g@example.com&#39;, 28),&lt;br /&gt;   new Employee(&#39;Xavier&#39;, &#39;xavier@example.com&#39;, 40)&lt;br /&gt;);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;А теперь легко и не принуждённо с помощью PHPLinq &lt;span style=&quot;text-decoration: line-through;&quot;&gt;брюки превращаются... превращаются...&lt;/span&gt; выполним, поставленную в начале, задачу:&lt;br /&gt;&lt;pre class=&quot;brush: php&quot;&gt;&lt;br /&gt;$result = from(&#39;$employee&#39;)-&amp;gt;in($employees)&lt;br /&gt;           -&amp;gt;where(&#39;$employee =&amp;gt; strlen($employee-&amp;gt;Name) == 4&#39;)&lt;br /&gt;           -&amp;gt;orderBy(&#39;$employee =&amp;gt; $employee-&amp;gt;Name&#39;)&lt;br /&gt;           -&amp;gt;thenByDescending(&#39;$employee =&amp;gt; $employee-&amp;gt;Age&#39;)&lt;br /&gt;           -&amp;gt;select(&#39;new {&lt;br /&gt;                   &quot;EmailAddress&quot; =&amp;gt; $employee-&amp;gt;Email,&lt;br /&gt;                   &quot;Domain&quot; =&amp;gt; substr($employee-&amp;gt;Email, strpos($employee-&amp;gt;Email, &quot;@&quot;) + 1)&lt;br /&gt;                 }&#39;);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;И снова, как и в предыдущем примере, вы могли заметить странный код &#39;new { }&#39;. Что он делает? А он конвертируется в объект анонимного типа (класса). Например, конструкция вида new { &quot;name&quot; =&amp;gt; &quot;test&quot; } преобразуется в объект содержащий поле &quot;name&quot; со значением &quot;test&quot;.</description><link>http://akinfold.blogspot.com/2009/07/phplinq.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-7149197439127432610</guid><pubDate>Mon, 20 Jul 2009 07:31:00 +0000</pubDate><atom:updated>2009-07-20T16:45:12.067+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">PHPLinq</category><title>PHPLinq: Language Integrated Query for PHP</title><description>&lt;span style=&quot;font-weight: bold;&quot;&gt;PHPLinq&lt;/span&gt; -- это набор классов &lt;span style=&quot;font-weight: bold;&quot;&gt;PHP&lt;/span&gt; имитирующий функциональность предоставляемую расширением &lt;span style=&quot;font-weight: bold;&quot;&gt;LINQ&lt;/span&gt; языка &lt;span style=&quot;font-weight: bold;&quot;&gt;C#&lt;/span&gt;. &lt;span style=&quot;font-weight: bold;&quot;&gt;LINQ&lt;/span&gt; позволят обращаться к данным из программы, способом очень сильно напоминающим &lt;span style=&quot;font-weight: bold;&quot;&gt;SQL&lt;/span&gt;, но минуя написание &lt;span style=&quot;font-weight: bold;&quot;&gt;SQL&lt;/span&gt; запросов как таковых.&lt;br /&gt;Например, пусть у нас есть массив строк и мы хотим выбрать из него только те строки, длина которых меньше пяти символов. Обычным способом нам потребовалось бы писать цикл, в котором мы бы проверяли длину каждого элемента массива и добавляли бы подходящие по длине элементы во временную переменную:&lt;br /&gt;&lt;pre class=&quot;brush: php&quot;&gt;// Создаём массив строк&lt;br /&gt;$Names = array(&quot;John&quot;, &quot;Peter&quot;, &quot;Joe&quot;, &quot;Patrick&quot;, &quot;Donald&quot;, &quot;Eric&quot;);&lt;br /&gt;$Result = array();&lt;br /&gt;foreach ($Name in $Names) {&lt;br /&gt; if (strlen($Name) &amp;lt; 5) {&lt;br /&gt;   $Result[] = $Name;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;С помощью &lt;span style=&quot;font-weight: bold;&quot;&gt;PHPLinq&lt;/span&gt; это легко сделать следующим способом:&lt;br /&gt;&lt;pre class=&quot;brush: php&quot;&gt;// Создаём массив строк&lt;br /&gt;$Names = array(&quot;John&quot;, &quot;Peter&quot;, &quot;Joe&quot;, &quot;Patrick&quot;, &quot;Donald&quot;, &quot;Eric&quot;);&lt;br /&gt;$Result = from(&#39;$Name&#39;)-&amp;gt;in($Names)&lt;br /&gt;     -&amp;gt;where(&#39;$Name =&amp;gt; strlen($Name) &amp;lt; 5&#39;)&lt;br /&gt;     -&amp;gt;select(&#39;$Name&#39;);&lt;/pre&gt;Похоже на &lt;span style=&quot;font-weight: bold;&quot;&gt;SQL&lt;/span&gt;? ;) Кроме того, решение с использованием &lt;span style=&quot;font-weight: bold;&quot;&gt;PHPLinq&lt;/span&gt; гораздо компактнее и выглядит гораздо более красиво. Сам автор &lt;span style=&quot;font-weight: bold;&quot;&gt;PHPLinq&lt;/span&gt;, &lt;a href=&quot;http://blog.maartenballiauw.be/&quot;&gt;Maarten Balliauw&lt;/a&gt;, пишет:&lt;blockquote&gt;С LINQ есть одна проблемка... Если вы начали использовать его, то вы не захотите больше обращаться к источникам данных иными способами.&lt;/blockquote&gt;P.S.: В четвёртой строчке второго листинга вы могли заметить странную конструкцию &#39;$Name =&amp;gt; strlen($Name) &amp;lt; 5. Эта конструкция преобразуется в анонимную функцию или другими словами &lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%9B%D1%8F%D0%BC%D0%B1%D0%B4%D0%B0-%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5&quot;&gt;лямбда-выражение&lt;/a&gt;. Эта функция принимает параметр $Name и возвращает булево значение которое является результатом вычисления выражения strlen($Name) &amp;lt; 5.&lt;br /&gt;&lt;br /&gt;Домашняя страничка PHPLinq -&amp;gt; &lt;a href=&quot;http://www.phplinq.net/&quot;&gt;http://www.phplinq.net/&lt;/a&gt;</description><link>http://akinfold.blogspot.com/2009/07/phplinq-language-integrated-query-for.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-1613564633703694281</guid><pubDate>Fri, 10 Jul 2009 09:27:00 +0000</pubDate><atom:updated>2009-07-10T18:34:54.892+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">CASE</category><category domain="http://www.blogger.com/atom/ns#">ERWin</category><category domain="http://www.blogger.com/atom/ns#">Хранилища Данных</category><title>Поддержка нотации Dimensional в CA ERWin Data Modeler</title><description>&lt;span style=&quot;font-weight: bold;&quot;&gt;Музыка:&lt;/span&gt; &lt;a href=&quot;http://www.discogs.com/Noisia-FabricLive40/release/1360506&quot;&gt;Noisia - Fabric Live.40&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;В продукте ERWin Data Modeler компании Computer Associates имеетя поддержка нотации Dimensional, предназначенной для поддержки методологии размерного проектирования хранилищ данных. Данная нотация в ERWin доступна только для физической модели. Для её включения в &lt;span style=&quot;font-weight: bold;&quot;&gt;ERWin 3.x&lt;/span&gt;:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Создай новую модель (Меню &lt;span style=&quot;font-weight: bold;&quot;&gt;File / New...&lt;/span&gt;).&lt;/li&gt;&lt;li&gt;В диалоге &lt;span style=&quot;font-weight: bold;&quot;&gt;Template Selection&lt;/span&gt; выбери из списка предлагаемых шаблонов -- &lt;span style=&quot;font-weight: bold;&quot;&gt;Dimension&lt;/span&gt;.&lt;/li&gt;&lt;/ol&gt;В &lt;span style=&quot;font-weight: bold;&quot;&gt;ERWin 4.x&lt;/span&gt; и старше эта нотация &quot;вшита&quot; уже более жестко и подключается не файлом шаблона, а в настройках модели:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Создай новую (Меню &lt;span style=&quot;font-weight: bold;&quot;&gt;File / New...&lt;/span&gt;) или открой уже существующую физическую или смешанную модель.&lt;/li&gt;&lt;li&gt;Открой свойства модели (Меню &lt;span style=&quot;font-weight: bold;&quot;&gt;Model / Model Properties...&lt;/span&gt;).&lt;/li&gt;&lt;li&gt;В диалоговом окне &lt;span style=&quot;font-weight: bold;&quot;&gt;Model Properties&lt;/span&gt; перейди на вкладку &lt;span style=&quot;font-weight: bold;&quot;&gt;Notation&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;В группе &lt;span style=&quot;font-weight: bold;&quot;&gt;Physical Notation&lt;/span&gt; выбери &lt;span style=&quot;font-weight: bold;&quot;&gt;DM (Dimensional Modeling)&lt;/span&gt; и нажми &lt;span style=&quot;font-weight: bold;&quot;&gt;OK&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Если выполняется конвертация уже существующей модели, а не новой пустой, то ERWin проверит возможность конвертации всех связей и типов данных в модели и в случае возникновения каких либо конфликтов спросит, что делать.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;</description><link>http://akinfold.blogspot.com/2009/07/dimensional-ca-erwin-data-modeler.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-1261331655479798510</guid><pubDate>Tue, 07 Jul 2009 13:04:00 +0000</pubDate><atom:updated>2009-07-07T21:43:56.063+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">OLAP</category><category domain="http://www.blogger.com/atom/ns#">Хранилища Данных</category><title>Введение в OLAP: часть 2. Хранилища данных.</title><description>&lt;span style=&quot;font-weight: bold;&quot;&gt;Музыка:&lt;/span&gt; &lt;a href=&quot;http://www.discogs.com/Noisia-FabricLive40/release/1360506&quot;&gt;Noisia - Fabric Live.40&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Да простят меня авторы оригинальной статьи, Алексей Федоров и Наталия Елманова, преподаватели УКЦ &quot;Interface Ltd&quot;, опубликовавшие её в пятом номере журнала КомпьютерПресс за 2001 год, но уж больно не хочется терять такую ценную статью из вида.&lt;br /&gt;&lt;br /&gt;Итак...&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:180%;&quot;&gt;Введение в OLAP: часть 2. Хранилища данных.&lt;/span&gt;&lt;br /&gt;Первая статья данного цикла (см. Введение в OLAP: часть 1. Основы OLAP) была посвящена основам OLAP (On-Line Analytical Processing) — технологии многомерного анализа данных. В ней мы обсудили концепции хранилищ данных и OLAP, требования к хранилищам данных и OLAP-средствам, логическую организацию OLAP-данных, а также основные термины и понятия, относящиеся к многомерному анализу.&lt;br /&gt;В настоящей статье мы рассмотрим типичную структуру хранилищ данных, поговорим о том, что представляет собой OLAP на клиенте и на сервере, а также обсудим некоторые технические аспекты многомерного хранения данных.&lt;br /&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;br /&gt;Типичная структура хранилищ данных&lt;/span&gt;&lt;br /&gt;Как мы уже знаем, конечной целью использования OLAP является анализ данных и представление результатов этого анализа в виде, удобном для восприятия и принятия решений. Основная идея OLAP заключается в построении многомерных кубов, которые будут доступны для пользовательских запросов. Однако исходные данные для построения OLAP-кубов обычно хранятся в реляционных базах данных. Нередко это специализированные реляционные базы данных, называемые также хранилищами данных (Data Warehouse). В отличие от так называемых оперативных баз данных, с которыми работают приложения, модифицирующие данные, хранилища данных предназначены исключительно для обработки и анализа информации, поэтому проектируются они таким образом, чтобы время выполнения запросов к ним было минимальным. Обычно данные копируются в хранилище из оперативных баз данных согласно определенному расписанию.&lt;br /&gt;Типичная структура хранилища данных существенно отличается от структуры обычной реляционной СУБД. Как правило, эта структура денормализована (это позволяет повысить скорость выполнения запросов), поэтому может допускать избыточность данных.&lt;br /&gt;Для дальнейших примеров мы снова воспользуемся базой данных Northwind, входящей в комплекты поставки Microsoft SQL Server и Microsoft Access. Ее структура данных приведена на рис. 1.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_kzECh2qTOCo/SlNLHCGccnI/AAAAAAAAABw/IXFHTNIV6g4/s1600-h/olap_i2_1.gif&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 355px; height: 372px;&quot; src=&quot;http://2.bp.blogspot.com/_kzECh2qTOCo/SlNLHCGccnI/AAAAAAAAABw/IXFHTNIV6g4/s400/olap_i2_1.gif&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5355706966068720242&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Рис. 1. Структура базы данных Northwind &lt;/div&gt;&lt;br /&gt;Основными составляющими структуры хранилищ данных являются таблица фактов (fact table) и таблицы измерений (dimension tables).&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Таблица фактов&lt;/span&gt;&lt;br /&gt;Таблица фактов является основной таблицей хранилища данных. Как правило, она содержит сведения об объектах или событиях, совокупность которых будет в дальнейшем анализироваться. Обычно говорят о четырех наиболее часто встречающихся типах фактов. К ним относятся:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;факты, связанные с транзакциями (Transaction facts). Они основаны на отдельных событиях (типичными примерами которых являются телефонный звонок или снятие денег со счета с помощью банкомата);&lt;/li&gt;&lt;li&gt;факты, связанные с «моментальными снимками» (Snapshot facts). Основаны на состоянии объекта (например, банковского счета) в определенные моменты времени, например на конец дня или месяца. Типичными примерами таких фактов являются объем продаж за день или дневная выручка;&lt;/li&gt;&lt;li&gt;факты, связанные с элементами документа (Line-item facts). Основаны на том или ином документе (например, счете за товар или услуги) и содержат подробную информацию об элементах этого документа (например, количестве, цене, проценте скидки);&lt;/li&gt;&lt;li&gt;факты, связанные с событиями или состоянием объекта (Event or state facts). Представляют возникновение события без подробностей о нем (например, просто факт продажи или факт отсутствия таковой без иных подробностей).&lt;/li&gt;&lt;/ul&gt;Для примера рассмотрим факты, связанные с элементами документа (в данном случае счета, выставленного за товар).&lt;br /&gt;Таблица фактов, как правило, содержит уникальный составной ключ, объединяющий первичные ключи таблиц измерений. Чаще всего это целочисленные значения либо значения типа «дата/время» — ведь таблица фактов может содержать сотни тысяч или даже миллионы записей, и хранить в ней повторяющиеся текстовые описания, как правило, невыгодно — лучше поместить их в меньшие по объему таблицы измерений. При этом как ключевые, так и некоторые неключевые поля должны соответствовать будущим измерениям OLAP-куба. Помимо этого таблица фактов содержит одно или несколько числовых полей, на основании которых в дальнейшем будут получены агрегатные данные.&lt;br /&gt;Пример таблицы фактов, которая может быть построена на основе базы данных Northwind, приведен на рис. 2.&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_kzECh2qTOCo/SlNM1jjY3PI/AAAAAAAAAB4/0_vDwA51Uf0/s1600-h/olap_i2_2a.gif&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 177px;&quot; src=&quot;http://4.bp.blogspot.com/_kzECh2qTOCo/SlNM1jjY3PI/AAAAAAAAAB4/0_vDwA51Uf0/s400/olap_i2_2a.gif&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5355708864834100466&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_kzECh2qTOCo/SlNM17Kr_QI/AAAAAAAAACA/W-W0clL65hc/s1600-h/olap_i2_2b.gif&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 166px; height: 208px;&quot; src=&quot;http://4.bp.blogspot.com/_kzECh2qTOCo/SlNM17Kr_QI/AAAAAAAAACA/W-W0clL65hc/s400/olap_i2_2b.gif&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5355708871172947202&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;Рис. 2. Пример таблицы фактов &lt;/div&gt;&lt;br /&gt;В данном примере измерениям будущего куба соответствуют первые шесть полей, а агрегатным данным — последние четыре.&lt;br /&gt;&lt;br /&gt;Отметим, что для многомерного анализа пригодны таблицы фактов, содержащие как можно более подробные данные (то есть соответствующие членам нижних уровней иерархии соответствующих измерений). В данном случае предпочтительнее взять за основу факты продажи товаров отдельным заказчикам, а не суммы продаж для разных стран — последние все равно будут вычислены OLAP-средством. Исключение можно сделать, пожалуй, только для клиентских OLAP-средств (о них мы поговорим чуть позже), поскольку в силу ряда ограничений они не могут манипулировать большими объемами данных.&lt;br /&gt;&lt;br /&gt;Отметим, что в таблице фактов нет никаких сведений о том, как группировать записи при вычислении агрегатных данных. Например, в ней есть идентификаторы продуктов или клиентов, но отсутствует информация о том, к какой категории относится данный продукт или в каком городе находится данный клиент. Эти сведения, в дальнейшем используемые для построения иерархий в измерениях куба, содержатся в таблицах измерений.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Таблицы измерений&lt;/span&gt;&lt;br /&gt;Таблицы измерений содержат неизменяемые либо редко изменяемые данные. В подавляющем большинстве случаев эти данные представляют собой по одной записи для каждого члена нижнего уровня иерархии в измерении. Таблицы измерений также содержат как минимум одно описательное поле (обычно с именем члена измерения) и, как правило, целочисленное ключевое поле (обычно это суррогатный ключ) для однозначной идентификации члена измерения. Если будущее измерение, основанное на данной таблице измерений, содержит иерархию, то таблица измерений также может содержать поля, указывающие на «родителя» данного члена в этой иерархии. Нередко (но не всегда) таблица измерений может содержать и поля, указывающие на «прародителей», и иных «предков» в данной иерархии (это обычно характерно для сбалансированных иерархий), а также дополнительные атрибуты членов измерений, содержавшиеся в исходной оперативной базе данных (например, адреса и телефоны клиентов).&lt;br /&gt;Каждая таблица измерений должна находиться в отношении «один ко многим» с таблицей фактов.&lt;br /&gt;Отметим, что скорость роста таблиц измерений должна быть незначительной по сравнению со скоростью роста таблицы фактов; например, добавление новой записи в таблицу измерений, характеризующую товары, производится только при появлении нового товара, не продававшегося ранее.&lt;br /&gt;Пример таблицы измерений приведен на рис. 3.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_kzECh2qTOCo/SlNNsRmxLTI/AAAAAAAAACI/dVLqYgNZ3ww/s1600-h/olap_i2_3a.gif&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 241px;&quot; src=&quot;http://4.bp.blogspot.com/_kzECh2qTOCo/SlNNsRmxLTI/AAAAAAAAACI/dVLqYgNZ3ww/s400/olap_i2_3a.gif&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5355709804909243698&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://3.bp.blogspot.com/_kzECh2qTOCo/SlNNsi_b2_I/AAAAAAAAACQ/lD9XjyJlSrI/s1600-h/olap_i2_3b.gif&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 162px; height: 133px;&quot; src=&quot;http://3.bp.blogspot.com/_kzECh2qTOCo/SlNNsi_b2_I/AAAAAAAAACQ/lD9XjyJlSrI/s400/olap_i2_3b.gif&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5355709809576106994&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Рис. 3. Пример таблицы измерений&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;Одно измерение куба может содержаться как в одной таблице (в том числе и при наличии нескольких уровней иерархии), так и в нескольких связанных таблицах, соответствующих различным уровням иерархии в измерении. Если каждое измерение содержится в одной таблице, такая схема хранилища данных носит название «звезда» (star schema). Пример такой схемы приведен на рис. 4.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://4.bp.blogspot.com/_kzECh2qTOCo/SlNOCHGqVkI/AAAAAAAAACY/eI2obph4KqQ/s1600-h/olap_i2_4.gif&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 377px; height: 400px;&quot; src=&quot;http://4.bp.blogspot.com/_kzECh2qTOCo/SlNOCHGqVkI/AAAAAAAAACY/eI2obph4KqQ/s400/olap_i2_4.gif&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5355710180047345218&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Рис. 4. Пример схемы «звезда»&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Если же хотя бы одно измерение содержится в нескольких связанных таблицах, такая схема хранилища данных носит название «снежинка» (snowflake schema). Дополнительные таблицы измерений в такой схеме, обычно соответствующие верхним уровням иерархии измерения и находящиеся в соотношении «один ко многим» в главной таблице измерений, соответствующей нижнему уровню иерархии, иногда называют консольными таблицами (outrigger table). Пример схемы «снежинка» приведен на рис. 5.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://2.bp.blogspot.com/_kzECh2qTOCo/SlNORYBTygI/AAAAAAAAACg/BLyX_9nZCDE/s1600-h/olap_i2_5.gif&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 357px; height: 400px;&quot; src=&quot;http://2.bp.blogspot.com/_kzECh2qTOCo/SlNORYBTygI/AAAAAAAAACg/BLyX_9nZCDE/s400/olap_i2_5.gif&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5355710442286336514&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Рис. 5. Пример схемы «снежинка»&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;Отметим, что даже при наличии иерархических измерений с целью повышения скорости выполнения запросов к хранилищу данных нередко предпочтение отдается схеме «звезда».&lt;br /&gt;Однако не все хранилища данных проектируются по двум приведенным выше схемам. Так, довольно часто вместо ключевого поля для измерения, содержащего данные типа «дата», и соответствующей таблицы измерений сама таблица фактов может содержать ключевое поле типа «дата». В этом случае соответствующая таблица измерений просто отсутствует.&lt;br /&gt;В случае несбалансированной иерархии (например, такой, которая может быть основана на таблице Employees базы данных Northwind, имеющей поле EmployeeID, которое одновременно является и первичным, и внешним ключом и отражает подчиненность одних сотрудников другим (см. рис. 1) в схему «снежинка» также следует вносить коррективы. В этом случае обычно в таблице измерений присутствует связь, аналогичная соответствующей связи в оперативной базе данных.&lt;br /&gt;Еще один пример отступления от правил — наличие нескольких разных иерархий для одного и того же измерения. Типичные примеры таких иерархий — иерархии для календарного и финансового года (при условии, что финансовый год начинается не с 1 января), или с различными способами группировки членов измерения (например, группировать товары можно по категориям, а можно и по компаниям-поставщикам). В этом случае таблица измерений содержит поля для всех возможных иерархий с одними и теми же членами нижнего уровня, но с разными членами верхних уровней (пример такой таблицы приведен на рис. 3).&lt;br /&gt;Как мы уже отмечали выше, таблица измерений может содержать поля, не имеющие отношения к иерархиям и представляющие собой просто дополнительные атрибуты членов измерений (member properties). Иногда такие атрибуты могут быть использованы при анализе данных.&lt;br /&gt;Более подробно о проектировании хранилищ данных и одном из CASE-инструментов, способных упростить процесс их создания, — CA ERwin, рассказано в статье Сергея Маклакова «Хранилища данных и их проектирование с помощью CA ERwin», КомпьютерПресс, CD-ROM № 1’2001).&lt;br /&gt;Следует сказать, что для создания реляционных хранилищ данных нередко применяются специализированные СУБД, хранение данных в которых оптимизировано с точки зрения скорости выполнения запросов. Примером такого продукта является Sybase Adaptive Server IQ, реализующий нетрадиционный способ хранения данных в таблицах (не по строкам, а по столбцам). Однако создавать хранилища можно и в обычных реляционных СУБД.&lt;br /&gt;Итак, обсудив типичную структуру хранилища данных, на основе которых обычно строятся OLAP-кубы, вернемся к созданию OLAP-кубов и поговорим о том, какими бывают OLAP-инструменты.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;OLAP на клиенте и на сервере&lt;/span&gt;&lt;br /&gt;Многомерный анализ данных может быть произведен с помощью различных средств, которые условно можно разделить на клиентские и серверные OLAP-средства.&lt;br /&gt;Клиентские OLAP-средства представляют собой приложения, осуществляющие вычисление агрегатных данных (сумм, средних величин, максимальных или минимальных значений) и их отображение, при этом сами агрегатные данные содержатся в кэше внутри адресного пространства такого OLAP-средства.&lt;br /&gt;Если исходные данные содержатся в настольной СУБД, вычисление агрегатных данных производится самим OLAP-средством. Если же источник исходных данных — серверная СУБД, многие из клиентских OLAP-средств посылают на сервер SQL-запросы, содержащие оператор GROUP BY, и в результате получают агрегатные данные, вычисленные на сервере.&lt;br /&gt;Как правило, OLAP-функциональность реализована в средствах статистической обработки данных (из продуктов этого класса на российском рынке широко распространены продукты компаний StatSoft и SPSS) и в некоторых электронных таблицах. В частности, неплохими средствами многомерного анализа обладает Microsoft Excel 2000. С помощью этого продукта можно создать и сохранить в виде файла небольшой локальный многомерный OLAP-куб и отобразить его двух- или трехмерные сечения.&lt;br /&gt;Многие средства разработки содержат библиотеки классов или компонентов, позволяющие создавать приложения, реализующие простейшую OLAP-функциональность (такие, например, как компоненты DecisionCube в Borland Delphi и Borland C++Builder). Помимо этого многие компании предлагают элементы управления ActiveX и другие библиотеки, реализующие подобную функциональность.&lt;br /&gt;Отметим, что клиентские OLAP-средства применяются, как правило, при малом числе измерений (обычно рекомендуется не более шести) и небольшом разнообразии значений этих параметров, — ведь полученные агрегатные данные должны умещаться в адресном пространстве подобного средства, а их количество растет экспоненциально при увеличении числа измерений. Поэтому даже самые примитивные клиентские OLAP-средства, как правило, позволяют произвести предварительный подсчет объема требуемой оперативной памяти для создания в ней многомерного куба.&lt;br /&gt;Многие (но не все!) клиентские OLAP-средства позволяют сохранить содержимое кэша с агрегатными данными в виде файла, что, в свою очередь, позволяет не производить их повторное вычисление. Отметим, что нередко такая возможность используется для отчуждения агрегатных данных с целью передачи их другим организациям или для публикации. Типичным примером таких отчуждаемых агрегатных данных является статистика заболеваемости в разных регионах и в различных возрастных группах, которая является открытой информацией, публикуемой министерствами здравоохранения различных стран и Всемирной организацией здравоохранения. При этом собственно исходные данные, представляющие собой сведения о конкретных случаях заболеваний, являются конфиденциальными данными медицинских учреждений, которые ни в коем случае не должны попадать в руки страховых компаний и тем более становиться достоянием гласности.&lt;br /&gt;Идея сохранения кэша с агрегатными данными в файле получила свое дальнейшее развитие в серверных OLAP-средствах, в которых сохранение и изменение агрегатных данных, а также поддержка содержащего их хранилища осуществляются отдельным приложением или процессом, называемым OLAP-сервером. Клиентские приложения могут запрашивать подобное многомерное хранилище и в ответ получать те или иные данные. Некоторые клиентские приложения могут также создавать такие хранилища или обновлять их в соответствии с изменившимися исходными данными.&lt;br /&gt;Преимущества применения серверных OLAP-средств по сравнению с клиентскими OLAP-средствами сходны с преимуществами применения серверных СУБД по сравнению с настольными: в случае применения серверных средств вычисление и хранение агрегатных данных происходят на сервере, а клиентское приложение получает лишь результаты запросов к ним, что позволяет в общем случае снизить сетевой трафик, время выполнения запросов и требования к ресурсам, потребляемым клиентским приложением. Отметим, что средства анализа и обработки данных масштаба предприятия, как правило, базируются именно на серверных OLAP-средствах, например, таких как Oracle Express Server, Microsoft SQL Server 2000 Analysis Services, Hyperion Essbase, продуктах компаний Crystal Decisions, BusinessObjects, Cognos, SAS Institute. Поскольку все ведущие производители серверных СУБД производят (либо лицензировали у других компаний) те или иные серверные OLAP-средства, выбор их достаточно широк и почти во всех случаях можно приобрести OLAP-сервер того же производителя, что и у самого сервера баз данных.&lt;br /&gt;Отметим, что многие клиентские OLAP-средства (в частности, Microsoft Excel 2000, Seagate Analysis и др.) позволяют обращаться к серверным OLAP-хранилищам, выступая в этом случае в роли клиентских приложений, выполняющих подобные запросы. Помимо этого имеется немало продуктов, представляющих собой клиентские приложения к OLAP-средствам различных производителей.&lt;br /&gt;OLAP-серверы могут хранить многомерные данные разными способами, которые мы и обсудим в следующем разделе.&lt;br /&gt;&lt;br /&gt;Технические аспекты многомерного хранения данных&lt;br /&gt;В многомерных хранилищах данных содержатся агрегатные данные различной степени подробности, например, объемы продаж по дням, месяцам, годам, по категориям товаров и т.п. Цель хранения агрегатных данных — сократить время выполнения запросов, поскольку в большинстве случаев для анализа и прогнозов интересны не детальные, а суммарные данные. Поэтому при создании многомерной базы данных всегда вычисляются и сохраняются некоторые агрегатные данные.&lt;br /&gt;Отметим, что сохранение всех агрегатных данных не всегда оправданно. Дело в том, что при добавлении новых измерений объем данных, составляющих куб, растет экспоненциально (иногда говорят о «взрывном росте» объема данных). Если говорить более точно, степень роста объема агрегатных данных зависит от количества измерений куба и членов измерений на различных уровнях иерархий этих измерений. Для решения проблемы «взрывного роста» применяются разнообразные схемы, позволяющие при вычислении далеко не всех возможных агрегатных данных достичь приемлемой скорости выполнения запросов.&lt;br /&gt;Как исходные, так и агрегатные данные могут храниться либо в реляционных, либо в многомерных структурах. Поэтому в настоящее время применяются три способа хранения данных:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;MOLAP (Multidimensional OLAP) — исходные и агрегатные данные хранятся в многомерной базе данных. Хранение данных в многомерных структурах позволяет манипулировать данными как многомерным массивом, благодаря чему скорость вычисления агрегатных значений одинакова для любого из измерений. Однако в этом случае многомерная база данных оказывается избыточной, так как многомерные данные полностью содержат исходные реляционные данные.&lt;/li&gt;&lt;li&gt;ROLAP (Relational OLAP) — исходные данные остаются в той же реляционной базе данных, где они изначально и находились. Агрегатные же данные помещают в специально созданные для их хранения служебные таблицы в той же базе данных.&lt;/li&gt;&lt;li&gt;HOLAP (Hybrid OLAP) — исходные данные остаются в той же реляционной базе данных, где они изначально находились, а агрегатные данные хранятся в многомерной базе данных.&lt;/li&gt;&lt;/ul&gt;Некоторые OLAP-средства поддерживают хранение данных только в реляционных структурах, некоторые — только в многомерных. Однако большинство современных серверных OLAP-средств поддерживают все три способа хранения данных. Выбор способа хранения зависит от объема и структуры исходных данных, требований к скорости выполнения запросов и частоты обновления OLAP-кубов.&lt;br /&gt;Отметим также, что подавляющее большинство современных OLAP-средств не хранит «пустых» значений (примером «пустого» значения может быть отсутствие продаж сезонного товара вне сезона).&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Заключение&lt;/span&gt;&lt;br /&gt;В данной статье мы рассмотрели типичную структуру реляционных хранилищ данных. Итак, теперь мы знаем, что:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;типичная структура хранилища данных существенно отличается от структуры обычной реляционной СУБД — как правило, она денормализована;&lt;/li&gt;&lt;li&gt;основными составляющими структуры хранилищ данных являются таблица фактов (fact table) и таблицы измерений (dimension tables); &lt;/li&gt;&lt;li&gt;таблица фактов является основной таблицей хранилища данных. Обычно она содержит сведения об объектах или событиях, совокупность которых будет в дальнейшем анализироваться; таблица фактов, как правило, содержит уникальный составной ключ, состоящий из первичных ключей таблиц измерений. При этом как ключевые, так и некоторые неключевые ее поля должны соответствовать будущим измерениям OLAP-куба. Помимо этого таблица фактов содержит одно или несколько числовых полей, на основании которых в дальнейшем вычисляются агрегатные данные; таблицы измерений содержат неизменяемые либо редко изменяемые данные — как правило, по одной записи для каждого члена нижнего уровня иерархии в измерении;&lt;/li&gt;&lt;li&gt;таблицы измерений содержат как минимум одно описательное поле и, как правило, целочисленное ключевое поле для однозначной идентификации члена измерения;&lt;/li&gt;&lt;li&gt;каждая таблица измерений должна находиться в отношении «один ко многим» с таблицей фактов;   &lt;/li&gt;&lt;li&gt;если каждое измерение содержится в одной таблице измерений, такая схема хранилища данных носит название «звезда». Если же хотя бы одно измерение содержится в нескольких связанных таблицах, такая схема хранилища данных носит название «снежинка».&lt;/li&gt;&lt;/ul&gt;Далее мы обсудили особенности клиентских и серверных OLAP-средств. Мы узнали, что:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;клиентские OLAP-средства представляют собой приложения, осуществляющие вычисление агрегатных данных (сумм, средних величин, максимальных или минимальных значений) и их отображение, при этом сами агрегатные данные содержатся в кэше внутри адресного пространства такого OLAP-средства;&lt;/li&gt;&lt;li&gt;в серверных OLAP-средствах сохранение и изменение агрегатных данных, а также поддержка содержащего их хранилища осуществляются отдельным приложением или процессом, называемым OLAP-сервером;&lt;/li&gt;&lt;li&gt;в случае применения серверных средств вычисление и хранение агрегатных данных происходят на сервере, что позволяет в общем случае снизить требования к ресурсам, потребляемым клиентским приложением, а также сетевой трафик и время выполнения запросов.&lt;/li&gt;&lt;li&gt;наконец, мы рассмотрели различные технические аспекты многомерного хранения данных. Мы узнали, что в настоящее время применяются три способа хранения данных:&lt;/li&gt;&lt;li&gt;&lt;ul&gt;&lt;li&gt;MOLAP (Multidimensional OLAP) — и детальные, и агрегатные данные хранятся в многомерной базе данных. В этом случае многомерные данные полностью содержат исходные детальные данные;&lt;/li&gt;&lt;li&gt;ROLAP (Relational OLAP) — детальные данные остаются в той же реляционной базе данных, где они находились изначально. Агрегатные же данные помещаются в специально созданные для их хранения служебные таблицы в той же самой базе данных;&lt;/li&gt;&lt;li&gt;HOLAP (Hybrid OLAP) — детальные данные остаются в той же реляционной базе данных, где они и находились изначально, а агрегатные данные хранятся в многомерной базе данных.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;Мы также узнали, что подавляющее большинство современных OLAP-средств не хранит «пустых» значений.&lt;br /&gt;В следующей статье данного цикла мы рассмотрим архитектуру Microsoft Analysis Services — OLAP-сервера фирмы Microsoft, входящего в комплект поставки Microsoft SQL Server 2000 Enterpise Edition.&lt;br /&gt;&lt;h3&gt;&lt;/h3&gt; &lt;h3&gt;&lt;/h3&gt;&lt;/div&gt;&lt;h3&gt;&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://akinfold.blogspot.com/2009/07/olap-2.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_kzECh2qTOCo/SlNLHCGccnI/AAAAAAAAABw/IXFHTNIV6g4/s72-c/olap_i2_1.gif" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7567979188867436004.post-1404928975666958691</guid><pubDate>Tue, 28 Apr 2009 17:27:00 +0000</pubDate><atom:updated>2009-04-29T05:05:26.615+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">D-Link</category><category domain="http://www.blogger.com/atom/ns#">DIR-130</category><category domain="http://www.blogger.com/atom/ns#">прошивка</category><title>Восстановление D-Link DIR-130 после не удачной прошивки</title><description>&lt;span style=&quot;font-weight: bold;&quot;&gt;Музыка:&lt;/span&gt; &lt;a href=&quot;http://blogs.myspace.com/index.cfm?fuseaction=blog.view&amp;amp;friendId=6138742&amp;amp;blogId=209906250&quot;&gt;I.N.I - Desimal  Tribute Mix&lt;/a&gt; (&lt;a href=&quot;http://kapsil.net/mixes/DESIMAL_a_tribute_mix_by_INI_dnbnation.mp3&quot;&gt;Скачать&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Пару недель назад установил я на свой &lt;span style=&quot;font-weight: bold;&quot;&gt;DIR-130&lt;/span&gt; &lt;a href=&quot;ftp://ftp.dlink.ru/pub/Router/DIR-130/Firmware/old/DIR130A1_FW121B15.bin&quot;&gt;новую прошивку&lt;/a&gt; с &lt;a href=&quot;ftp://ftp.dlink.ru/&quot;&gt;ftp://ftp.dlink.ru/&lt;/a&gt;, после чего аппарат скоропостижно скончался. Времени отнести его в сервис (благо роутер пока ещё на гарантии) в рабочее время всё как-то не находилось, вот и решил попробовать решить проблему своими силами.&lt;br /&gt;Оказалось, что для восстановления &lt;span style=&quot;font-weight: bold;&quot;&gt;DIR-130&lt;/span&gt; после не удачной прошивки, нужно совершить всего лишь несколько простых телодвижений:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Качаем с &lt;a href=&quot;ftp://ftp.dlink.ru/pub/Router/DIR-130/Firmware/&quot;&gt;ftp://ftp.dlink.ru/&lt;/a&gt; прошивку.&lt;/li&gt;&lt;li&gt;Втыкаем витую пару от компьютера в любое &lt;span style=&quot;font-weight: bold;&quot;&gt;LAN&lt;/span&gt; гнездо роутера.&lt;/li&gt;&lt;li&gt;Настраиваем вручную параметры соединения на компьютере:&lt;ul&gt;&lt;li&gt;IP-адрес: &lt;span style=&quot;font-weight: bold;&quot;&gt;192.168.0.2&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Маска подсети: &lt;span style=&quot;font-weight: bold;&quot;&gt;255.255.255.0&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Выключаем питание роутера.&lt;/li&gt;&lt;li&gt;Зажимаем кнопку &lt;span style=&quot;font-weight: bold;&quot;&gt;Reset&lt;/span&gt; (например зубочисткой).&lt;/li&gt;&lt;li&gt;Включаем питание роутера и держим Reset зажатым &lt;span style=&quot;font-weight: bold;&quot;&gt;5 секунд&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;В браузере переходим по адресу &lt;span style=&quot;font-weight: bold;&quot;&gt;http://192.168.0.1/&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;На открывшейся страничке указываем &lt;span style=&quot;font-weight: bold;&quot;&gt;файл с прошивкой из п.1&lt;/span&gt; и нажимаем &lt;span style=&quot;font-weight: bold;&quot;&gt;Send&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Ждём, пока прошивка установится (~2 минуты).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;После этого DIR-130 перезагрузится и запустится с новой прошивки.&lt;/li&gt;&lt;/ol&gt;</description><link>http://akinfold.blogspot.com/2009/04/d-link-dir-130.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>8</thr:total></item></channel></rss>

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid RSS" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=http%3A//akinfold.blogspot.com/feeds/posts/default%3Falt%3Drss

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda