<?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:georss='http://www.georss.org/georss' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-8459658944588680024</atom:id><lastBuildDate>Tue, 24 Mar 2009 04:45:31 +0000</lastBuildDate><title>Записки по компютъра</title><description></description><link>http://blog.igurbev.net/</link><managingEditor>igurbev@gmail.com (igurbev)</managingEditor><generator>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8459658944588680024.post-3746759279412631797</guid><pubDate>Sun, 08 Mar 2009 06:39:00 +0000</pubDate><atom:updated>2009-03-07T23:31:11.446-08:00</atom:updated><title>Cross-domain policy файл</title><description>Cross-domain policy файл е xml документ, който дава разрешение на уеб клиент (например Adobe Flash Player) да използва ресурси от различен домейн. Когато уеб приложението се хоства в един домейнт, но самото приложение прави заявки към друг, тогава е необходимо на външния домейн да бъде сложен &lt;span style="font-style: italic;"&gt;cross-domain policy &lt;/span&gt;файл, който указва главния домейн и позволява на клиента да извиква ресурси от този. Разрешението включва четене на данни и позволение за включване на хедъри при заявките между двата домейна.&lt;br /&gt;Същият файл може да се използва за разрешаване на свързване през сокети. В този случай файлът трябва да бъде поставен и при двата домейна, за да разреши свързването помежду им.&lt;br /&gt;Най-често на сървъра въпросният файл се разполага в основната директория на домейна с името &lt;span style="font-weight: bold; font-style: italic;"&gt;crossdomain.xml&lt;/span&gt;  - клиентът по подразбиране проверя този адрес, когато разрешението е нужно. Така разположениея файл се нарича &lt;span style="font-style: italic;"&gt;master policy fil&lt;/span&gt;e.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE cross-domain-policy SYSTEM&lt;br /&gt;"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"&amp;gt;&lt;br /&gt;&amp;lt;cross-domain-policy&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;site-control permitted-cross-domain-policies="master-only"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;allow-access-from domain="*"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;allow-http-request-headers-from domain="*" headers="SOAPAction"/&amp;gt;&lt;br /&gt;&amp;lt;/cross-domain-policy&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Елементът &lt;span style="font-style: italic;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;site-control&lt;/span&gt; &lt;/span&gt;в применра указва, че само този &lt;span style="font-style: italic;"&gt;master policy file&lt;/span&gt; може да бъде приеман за валиден за този домейн.  Елементът &lt;span style="font-style: italic; color: rgb(51, 102, 255);"&gt;allow-access-from&lt;/span&gt; посочва, че съдържание от всеки друг домейн може да достъпва данни от домейна (където policy файлът е разположен). Елементът &lt;span style="font-style: italic; color: rgb(51, 102, 255);"&gt;allow-http-request-headers-from&lt;/span&gt; казва, че е разрешено SOAPAction хедъри да бъдат изпращани със заявките към този домейн.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/8459658944588680024-3746759279412631797?l=blog.igurbev.net'/&gt;&lt;/div&gt;</description><link>http://blog.igurbev.net/2009/03/cross-domain-policy.html</link><author>igurbev@gmail.com (igurbev)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8459658944588680024.post-3658996706304006443</guid><pubDate>Sat, 07 Mar 2009 06:49:00 +0000</pubDate><atom:updated>2009-03-07T00:32:45.419-08:00</atom:updated><title>Динамичен html таг в xsl template</title><description>Проблемът е следния:&lt;br /&gt;Искам чрез xsl да форматирам xml документ в html такъв. Това е стандартна процедура.&lt;br /&gt;&lt;br /&gt;Например имам my_movie.xml:&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-size:85%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="color: rgb(51, 102, 255);font-size:85%;" &gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;?xml-stylesheet type="text/xsl" href="movie.xsl"?&amp;gt;&lt;br /&gt;&amp;lt;movie&amp;gt;&lt;br /&gt; &amp;lt;name&amp;gt;YouTube&amp;lt;/name&amp;gt;&lt;br /&gt; &amp;lt;src&amp;gt;Whant to put movie here&amp;lt;/src&amp;gt;&lt;br /&gt;&amp;lt;/movie&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Имам също темплейт movie.xsl:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-size:85%;" &gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:template match="movie"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;title&amp;gt;&amp;lt;xsl:value-of select="name"/&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;h1&amp;gt;&amp;lt;xsl:value-of select="name"/&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;p id="src"&amp;gt;&amp;lt;xsl:value-of select="src"/&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/html&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&amp;lt;/xsl:stylesheet&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Слагам тези два файла в една директория, след това казвам на някой браузер да отвори movie.xml. Показва се html страница, тъй като към xml-а съм добавил реда &amp;lt;?xml-stylesheet type="text/xsl" href="movie.xsl"?&amp;gt;, който указва как да бъде форматиран.&lt;br /&gt;&lt;br /&gt;Дотук добре, но това, което аз искам да направя е, е да сложа не текст като съдържание на тага src, а всъщност html таг, например:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="color: rgb(51, 102, 255);font-size:85%;" &gt;&amp;lt;object width="425" height="344"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param name="movie" value="http://www.youtube.com/v/2-xIulyVsG8&amp;hl=en&amp;fs=1"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param name="allowFullScreen" value="true"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param name="allowscriptaccess" value="always"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;embed src="http://www.youtube.com/v/2-xIulyVsG8&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&amp;gt;&amp;lt;/embed&amp;gt;&lt;br /&gt;&amp;lt;/object&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;така щото във форматираната страница да ми се показва не друго, а филмчето.&lt;br /&gt;&lt;br /&gt;Ако сложа горното директно като съдържание на src тага няма да се получи, защото &amp;lt;object&amp;gt; ще бъде интерпретиран като нов xml таг, а не както аз искам - като текст.&lt;br /&gt;&lt;br /&gt;Възможно е да има стандартно и просто разрешение на този проблем. Пуснах няколко търсения в гугъл, но не можах да го намеря - може би защото нямах достатъчно хъс за търсене. Наложи ми се да се замисля и ето какво измислих:&lt;br /&gt;&lt;br /&gt;Възможно е да се използва &amp;lt;![CDATA[...]]&amp;gt;, за да се ескейпне съдържанието на src тага. Тогава movie.xml ще изглежда така:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="color: rgb(51, 102, 255);font-size:85%;" &gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;?xml-stylesheet type="text/xsl" href="movie.xsl"?&amp;gt;&lt;br /&gt;&amp;lt;movie&amp;gt;&lt;br /&gt;&amp;lt;name&amp;gt;YouTube&amp;lt;/name&amp;gt;&lt;br /&gt;&amp;lt;src&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;&amp;lt;object width="425" height="344"&amp;gt;&lt;br /&gt;&amp;lt;param name="movie" value="http://www.youtube.com/v/2-xIulyVsG8&amp;amp;hl=en&amp;amp;fs=1"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;lt;param name="allowFullScreen" value="true"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;lt;param name="allowscriptaccess" value="always"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;lt;embed src="http://www.youtube.com/v/2-xIulyVsG8&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&amp;gt;&amp;lt;/embed&amp;gt;&lt;br /&gt;]]&amp;gt;&amp;lt;/object&amp;gt;&lt;br /&gt;&amp;lt;/src&amp;gt;&lt;br /&gt;&amp;lt;/movie&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;По такъв начин интерпретаторът ще разбере, че тук става дума за съдържание на тага, не нов таг. За съжаление обаче, той ще подмени специалните символи като '&amp;lt;' и '&amp;gt;' с '&amp;amp;lt;' и '&amp;amp;gt;' при което браузера ще покаже кода и пак не това, което аз искам.&lt;br /&gt;&lt;br /&gt;Остава да вземем контра мерки и с javascript да върнем &amp;lt; и &amp;gt; обратно.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;function replaceSpecial(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var text = document.getElementById("src").innerHTML;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while(text.indexOf('&amp;amp;lt;') != -1){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text = text.replace('&amp;amp;lt;', '&amp;lt;');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while(text.indexOf('&amp;amp;gt;') != -1){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text = text.replace('&amp;amp;gt;', '&amp;gt;');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.getElementById("src").innerHTML = text;&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Добавяме в movie.xls извикване на тази javascript функция преди затварящия таг &amp;lt;/body&amp;gt;:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-size:85%;" &gt;&amp;lt;script type="text/javascript"&amp;gt;replaceSpecial();&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Работи.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/8459658944588680024-3658996706304006443?l=blog.igurbev.net'/&gt;&lt;/div&gt;</description><link>http://blog.igurbev.net/2009/03/html-xsl-template.html</link><author>igurbev@gmail.com (igurbev)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8459658944588680024.post-7334582181995379774</guid><pubDate>Wed, 04 Mar 2009 19:30:00 +0000</pubDate><atom:updated>2009-03-04T12:40:09.936-08:00</atom:updated><title>PostgerSql Array и Java</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://igurbev.net/blog/images/postgresql.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 206px;" src="http://igurbev.net/blog/images/postgresql.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Java разбира се предлага мапинг за базовите типове данни в PostgreSql, но има един интересен - Array. По какъв начин можем да подадем Array в PostgreSql функция?&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Необходимо е да използваме интерфейса java.sql.Array, но как? Този интерфейс ни задължава да имплементираме хиляда и един метода, кой от кой по непонятно изглеждащи. Може да загубите часове проследявайки връзките кое какво е, при това без явен напредък. Аз поне доста се измъчих, но накрая успях. Ето как може да се справите. Лично за мен способът е потресаващ :-):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;import java.sql.Array;&lt;br /&gt;import java.sql.ResultSet;&lt;br /&gt;import java.sql.SQLException;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.Map;&lt;br /&gt;&lt;br /&gt;public class PgArray implements Array{&lt;br /&gt;&amp;nbsp;&amp;nbsp;public static final String TEXT = "text";&lt;br /&gt;&amp;nbsp;&amp;nbsp;public static final String INTEGER = "int4";&lt;br /&gt;&amp;nbsp;&amp;nbsp;private String m_pgArray;&lt;br /&gt;&amp;nbsp;&amp;nbsp;private String m_dataType;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;public PgArray(ArrayList&amp;lt;Object&amp;gt; array, String dataType)throws &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLException{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  m_dataType = dataType;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  StringBuilder sb = new StringBuilder("{");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  for(Object obj : array){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   sb.append(escape(obj.toString()));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   sb.append(',');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(sb.length() &gt; 1){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  sb.deleteCharAt(sb.length()-1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  }else{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new SQLException("Array is empty");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sb.append("}");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_pgArray = sb.toString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;private String escape(String text){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text = text.replace(",", "\\,");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text = text.replace("'", "\\'");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return text;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp; public int getBaseType() throws SQLException {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(TEXT.equals(m_dataType))   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return java.sql.Types.VARCHAR;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}else if(INTEGER.equals(m_dataType)){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  return java.sql.Types.INTEGER;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;public String getBaseTypeName() throws SQLException {  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  return m_dataType;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;public String toString(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return m_pgArray;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;// ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;//тук следват 1000 метода, &lt;br /&gt;&amp;nbsp;&amp;nbsp;//които оставяте с празно съдържание&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;За този, който би се зачудил какво толкова странно има тук, ще сложа този линк към документацията за Array интерфейса:&lt;br /&gt;&lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/sql/Array.html"&gt;http://java.sun.com/j2se/1.4.2/docs/api/java/sql/Array.html&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;И така, на практика единствения използван метод от предлаганите от интерфейса е &lt;span style="font-style:italic;"&gt;getBaseTypeName()&lt;/span&gt;, който указва от какъв тип е съдържанието на масива(на java типа &lt;span style="font-style:italic;"&gt;String&lt;/span&gt; отговаря &lt;span style="font-style:italic;"&gt;text&lt;/span&gt;). Другото, което се прави е, да се пренапише &lt;span style="font-style:italic;"&gt;toString()&lt;/span&gt;, така че връщаното от него да представя масива в "{...,...,...,...}" формат. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Вярвате или не, това нещо работи.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/8459658944588680024-7334582181995379774?l=blog.igurbev.net'/&gt;&lt;/div&gt;</description><link>http://blog.igurbev.net/2009/03/postgersql-array-java.html</link><author>igurbev@gmail.com (igurbev)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8459658944588680024.post-4763508804298462163</guid><pubDate>Tue, 03 Mar 2009 15:24:00 +0000</pubDate><atom:updated>2009-03-03T10:08:29.928-08:00</atom:updated><title>Web злодеяния</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://igurbev.net/blog/images/villain.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 150px; height: 205px;" src="http://igurbev.net/blog/images/villain.jpg" alt="" border="0" /&gt;&lt;/a&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Разбира се почти всеки в днешно време може "да си направи сайт" - мисля че това е термина.  От това уеб пространството дали печели или прото става все по-претрупано, не е ясно. И не с това искам да се занимавам тук.&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Аз самият не оставам по-назад в общото течение, още повече, че правенето на сайтове има връзка с едно от образованията ми. И така - в свободното си време, аз, също хората, които ми помагат, сядаме (стига да имаме настроение за това) и започваме на превеждаме статии, предимно от английски, за да ги публикуваме в сайта. Превеждането на статии наистина не е така трудно как писането им, но въпреки това изисква усилия и време. След това тези статии се редактират, форматират се според необходимото за изгледа в html формат, после започва търсена на съответната картинка, защото статия без картинка не може, а пък самата картинка се обработва, за да си пасне с общия формат. След като всичко е готово, започва самото публикуване, което изисква поредица от разпръснати промени на много места, които промени винаги остават за в бъдеще да бъдат автоматизирани. И после всичко е готово. Оглеждаме сайта и сме доволни, поздравяваме се един друг. Не че някой има сметка, но човек се чувства доволен пред удачно свършената работа.&lt;br /&gt;   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Всичко върви добре, когато един ден откривам как някакъв безочлив сайтоправител просто копира съдържанието от нашите статии в собствения си сайт. Не само, ами дотам е безочлив, че дори не си прави труда да открадне картинките, ами просто копира адресите и използва хостнатите изображения.&lt;br /&gt;   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Откривайки последното, преминавам в "свинско настроение" (Хемингуей имаше такава приказка: "Свинско е да се чувстваш така, ама какво да направя като някои хора те карат да се чувстваш свински?") и струва ми се обяснимо започвам да кроя планове как да направя лошо на крадливия уебмастер.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    Злодеяние първо:&lt;/span&gt; първото, което ми хрумва е, че тъй като противникът показва картинки, които са на моя сървър, аз мога да подменя картинките с други, (с неприлично съдържание например), след което той ще продължи да ги показва.  Речено сторено: намирам една картинка, на която е показана ръка с щтръкнал среден пръст, слагам я отделна директория на сървъра(смисълът на това ще стане ясен) и използвайки вързможностите за редирект на апача слагам в директорията с картинките файл с име .htaccess със следното кратко съдържание:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;RewriteEngine On    &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;    RewriteBase / &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;    RewriteCond %{HTTP_REFERER} !^.*&amp;lt;моя сайт&amp;gt;.* &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;    RewriteRule (.*) http://&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;&amp;lt;моя сайт&amp;gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;/finger.jpg [R,L]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Смисълът на тези редове е, че те проверяват дали заявката за картинката идва от моя съврвър и ако не е така, препраща към друг адрес - в случая към картинката с щтръкнал пръст.&lt;br /&gt;   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;След като правя това, отварям сайта на лошите и виждам собствените си статии гарнирани с неприлични жестове. Доволен съм - решавам че контрамерката е ефектна и ще откажа крадльото от следващи злодеяния.&lt;br /&gt;   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;През следващите няколко дена хвърлям по едно око, за да проверя има ли развитие. Накрая с потрес установявам, че е открадната нова статия! Този път крадецът е трябвало да се откаже да ползва картинката наготово и му се е наложило да потърси друга - но ето на - безочието няма граници. Виждам също, че не всички щтръкнали пръсти от старите статии са махнати, което ме навежда на мисълта, че противника е немърлив или просто не е твърде схватлив.&lt;br /&gt;   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Написвам няколко коментара към статиите със забежки към стореното и слаба надежда, че ще имат ефект. Коментарите скоро биват изтрити.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    Злодеяние второ:&lt;/span&gt; Но разбира се коментарите не е нужно да се пишат на ръка. Всеки, който поне малко се е занимавал с уеб програмиране знае, каква напаст са тези масирани, спам коментари и защо вече почти навсякъде е нужно да се прибягва към мерки от сорта на "напишете кода от картинката", за да се спаси от тях.  Решавам, че ако на оня му се наложи непрестанно да трие маса коментари, накрая ще се види принуден да се откаже от откраднатите статии.&lt;br /&gt;   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Хвърлям един поглед на кода на страниците на лошите, виждам имената на променливите и пиша една java дето ще праща POST заявки до безкрай. Разбира се заниманието не върви гладко - трябва да се заобикалят защити. Онзи използва &lt;a href="http://wordpress.org/"&gt;WordPress&lt;/a&gt; - което от една страна е добре, затощо е opensource и аз свалям кода и започвам да го разглеждам, ама скоро започва да ме домързява, а и казано честно много не си падам по PHP. Затова просто се връщам  на написаната java, слагам разни хитрини, за да се правят леки промени в коментарите всеки път, защото се прави проверка за дублиращи се коментари, послед добавям приспиване на нишката за 15 сек, че и по време има някаква защита. Накрая нещото работи, къде с пълен, къде не толкова пълен успех и през следващите дни наистина успявам да наводня лошия сайт. Онзи трие коментари. Ето техниката на пращане на POST заявки през java:&lt;br /&gt;&lt;br /&gt;  p&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;ublic static void sendPostRequest() {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        // Build parameter string&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        String data = "param1=paramValue&amp;amp;param2=param2Value&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        try {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            // Send the request&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            URL url = new URL("сайтът на лошите");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            URLConnection conn = url.openConnection();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            conn.setDoOutput(true);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            OutputStreamWriter writer = new OutputStreamWriter(conn&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;                    .getOutputStream());&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            // write parameters&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            writer.write(data);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            writer.flush();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            // Get the response&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            StringBuffer answer = new StringBuffer();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            BufferedReader reader = new BufferedReader(new InputStreamReader(&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;                    conn.getInputStream()));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            String line;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            while ((line = reader.readLine()) != null) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;                answer.append(line);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            writer.close();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            reader.close();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            // Output the response&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            System.out.println(answer.toString());&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        } catch (MalformedURLException ex) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            ex.printStackTrace();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        } catch (IOException ex) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            ex.printStackTrace();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/8459658944588680024-4763508804298462163?l=blog.igurbev.net'/&gt;&lt;/div&gt;</description><link>http://blog.igurbev.net/2009/03/web.html</link><author>igurbev@gmail.com (igurbev)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8459658944588680024.post-5125765487402620854</guid><pubDate>Mon, 02 Mar 2009 09:58:00 +0000</pubDate><atom:updated>2009-03-13T22:26:29.697-07:00</atom:updated><title>Английско-български и българо-английски речник за линукс</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://igurbev.net/blog/images/kbedic.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 134px;" src="http://igurbev.net/blog/images/kbedic.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Говорейки за линукс всъщност имам конкретно предвид Ubuntu, но не виждам защо казаното тук не би важало и в общия случай.&lt;br /&gt;&lt;br /&gt;Става дума за &lt;span style="font-weight: bold;"&gt;KBE Dictionary&lt;/span&gt;:&lt;br /&gt;&lt;a href="http://kbedic.sourceforge.net/"&gt;http://kbedic.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Детайлна демонстрация на инсталирането за Ubuntu през Synaptic е показана тук:&lt;br /&gt;&lt;a href="http://skss.learnfree.eu/archives/62"&gt;http://skss.learnfree.eu/archives/62&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;При инсталацията обаче възниква едно усложнение. Както бива споменато на цитирания сайт, по време на инсталацията трябва да изникне въпроса дали да бъдат "изтеглени речниците". Този въпрос не възникава и причаната е следната:&lt;br /&gt;&lt;a href="http://ftp1.sourceforge.net/kbedic/kbedic-4.0.tar.gz"&gt;http://ftp1.sourceforge.net/kbedic/kbedic-4.0.tar.gz&lt;/a&gt;&lt;br /&gt;или с други думи поради нещо адресът не отговаря.  При стартирането си речникът търси data файловете en_bg.dat и bg_en.dat и не ги намира - защото тях ги няма.&lt;br /&gt;&lt;br /&gt;Предполагам има някаква причина да ги няма, но нямам представа. Това, което нас ни интересува е речника - работещ. Може да се направи следното:&lt;br /&gt;&lt;br /&gt;Изтегляте от архива (&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=12724"&gt;http://sourceforge.net/project/showfiles.php?group_id=12724&lt;/a&gt;) въпросните файлове, записвате ги на диска, след това в /home/&amp;lt;username&amp;gt;&lt;username&gt;/.kbedic (ако няма такъв файл, го създавате с текстов редактор) посочвате къде се намират.&lt;br /&gt;&lt;br /&gt;Най-простият вариант (вариантът е същият, просто съм спестил някои от немногото стъпки) е да свалите само това, което ви трябва от тук:&lt;br /&gt;&lt;a href="http://igurbev.net/blog/repository/kbedic.tar"&gt;kdedic_data&lt;/a&gt;&lt;br /&gt;&lt;/username&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Сваляте архива bkedic.tar и го записвате в /home/&amp;lt;username&amp;gt;/ - директорията си - ако го запишете някъде другаде ще е необходимо след това да го преместите във въпросната директория или - както ще стане дума - да опишете пътя до новата директория в .kbedic.&lt;/li&gt;&lt;li&gt;Разархивирате.&lt;/li&gt;&lt;li&gt;В /home/&amp;lt;username&amp;gt;/ трябва да се е появила папка kbedic, която съдържа 3 файла: bg_en.dat, en_bg.dat, .kbedic. За да видите третия файл, който е скрит, трябва да натиснете ctrl + h.&lt;/li&gt;&lt;li&gt;Отваряте .kbedic с текстов редактор. &lt;/li&gt;&lt;li&gt;Той изглежда така:&lt;/li&gt;&lt;/ul&gt;DataDir=/home/&amp;lt;username&amp;gt;/kbedic/&lt;br /&gt;FontName=Sans Serif&lt;br /&gt;FontSize=10&lt;br /&gt;FontWeight=50&lt;br /&gt;FontItalic=false&lt;br /&gt;&lt;br /&gt;Същественият ред в случая е първия. Подменяте &amp;lt;username&amp;gt; с логин името си или просто копирате текущия адрес от файловия браузер така че DataDir=адреса, където сте в момента.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Запаметявате файла, след което го премествате в горната директория (/home/&amp;lt;username&amp;gt;)&lt;/li&gt;&lt;li&gt;Отваряте терминала и стартирате речника с&lt;span style="font-weight: bold;"&gt; kbedic&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Това е.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/8459658944588680024-5125765487402620854?l=blog.igurbev.net'/&gt;&lt;/div&gt;</description><link>http://blog.igurbev.net/2009/03/blog-post.html</link><author>igurbev@gmail.com (igurbev)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></item></channel></rss>
