<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>FaTune в дебрях Geox'а</title>
	<atom:link href="http://fatune.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://fatune.wordpress.com</link>
	<description>Выживание миниатюрной linux-машины и ее владельца в рамках НИИ среди угрюмых безликих роботов - порождений алчных корпорациий.</description>
	<lastBuildDate>Wed, 19 Jan 2011 00:42:54 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='fatune.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>FaTune в дебрях Geox'а</title>
		<link>http://fatune.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://fatune.wordpress.com/osd.xml" title="FaTune в дебрях Geox&#039;а" />
	<atom:link rel='hub' href='http://fatune.wordpress.com/?pushpress=hub'/>
		<item>
		<title>pycairo и сплайны</title>
		<link>http://fatune.wordpress.com/2009/06/24/pycairo-%d0%b8-%d1%81%d0%bf%d0%bb%d0%b0%d0%b9%d0%bd%d1%8b/</link>
		<comments>http://fatune.wordpress.com/2009/06/24/pycairo-%d0%b8-%d1%81%d0%bf%d0%bb%d0%b0%d0%b9%d0%bd%d1%8b/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 23:12:45 +0000</pubDate>
		<dc:creator>fatune</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bezier]]></category>
		<category><![CDATA[pycairo]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://fatune.wordpress.com/?p=115</guid>
		<description><![CDATA[Вот тут есть неплохой пост про использование pycairo для сглаживания ломанных линий в сплайны Безье. Вот только код не работает если попытаться сгладить вот такую ломанную: Правильно нарисован только верхний ряд. Нижний и вертикальный сгладились как-то шиворот-навыворот. Исправил функцию prepare_curve_data с использованием библиотеки vec2d И вот результат: Программа, рисующая эту картинку: Posted in Open Source, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatune.wordpress.com&amp;blog=862586&amp;post=115&amp;subd=fatune&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Вот <a href="http://pea.somemilk.org/2008/10/29/how-draw-smooth-curve-chart/">тут</a> есть неплохой пост про использование pycairo для сглаживания ломанных линий в сплайны Безье. Вот только код не работает если попытаться сгладить вот такую ломанную:<img class="alignnone size-full wp-image-116" title="ломанная" src="http://fatune.files.wordpress.com/2009/06/plain.png?w=380" alt="ломанная"   /></p>
<p><img class="alignnone size-full wp-image-117" title="curve_" src="http://fatune.files.wordpress.com/2009/06/curve_.png?w=380" alt="curve_"   /></p>
<p>Правильно нарисован только верхний ряд. Нижний и вертикальный сгладились как-то шиворот-навыворот.</p>
<p>Исправил функцию prepare_curve_data с использованием библиотеки <a href="http://www.pygame.org/wiki/2DVectorClass">vec2d</a></p>
<p><pre class="brush: python;">
def prepare_curve_data(graph_data):
    from vec2d import *
    prepared_data = []
    for i in range(len(graph_data)):
        x, y = graph_data[i][0], graph_data[i][1]
        cur_point = vec2d(graph_data[i][0], graph_data[i][1])
        
        
        if (i != 0) and (i != len(graph_data) - 1):
            back_point = vec2d(graph_data[i - 1][0], graph_data[i - 1][1])
            forw_point = vec2d(graph_data[i + 1][0], graph_data[i + 1][1])
                        
            back_vect = back_point - cur_point
            forw_vect = forw_point - cur_point
            back_vect_proj = back_vect / 2.0
            forw_vect_proj = forw_vect / 2.0
            
            angle_between = back_vect.get_angle_between(forw_vect) / 2.0          
            
            back_vect.rotate(angle_between - 90)
            forw_vect.rotate(90 - angle_between)
            
            back_vect = back_vect_proj.projection(back_vect)
            forw_vect = forw_vect_proj.projection(forw_vect)
            
            back_cpoint = cur_point + back_vect
            forw_cpoint = cur_point + forw_vect
            
            cx1, cy1 = back_cpoint[0], back_cpoint[1]
            cx2, cy2 = forw_cpoint[0], forw_cpoint[1]
        
        else:
           cx1, cy1, cx2, cy2 = x, y, x, y 
        
        prepared_data.append((x, y, cx1, cy1, cx2, cy2))
        
    return prepared_data
</pre></p>
<p>И вот результат:</p>
<p><img class="alignnone size-full wp-image-118" title="curve" src="http://fatune.files.wordpress.com/2009/06/curve.png?w=380" alt="curve"   /></p>
<p>Программа, рисующая эту картинку:</p>
<p><pre class="brush: python;">

import cairo
from math import pi, sqrt

width = 500
height = 500
graph_data = [
(0, 10),(20, 50),(40, 80),(60, 5),(80, 10),(100, 20),
(120, 30),(140, 60),(160, 95),(180, 30),(200, 50),
(220, 70),(240, 80),(260, 10),(280, 60),(300, 30),
(320, 90),(340, 95),(360, 30),(380, 10),(400, 5),
(420, 20),(440, 80),(460, 70),(480, 20),(500, 40),
(490, 0), (450, 20), (420, 40), (495, 60), (490, 80),
(480, 100), (470, 120), (440, 140), (405, 160), 
(470, 180), (450, 200), (430, 220), (420, 240),
(490, 260), (440, 280), (470, 300), (410, 320),
(405, 340), (470, 360), (490, 380), (495, 400), 
(480, 420), (420, 440), (430, 460), (480, 480), (460, 500),
(500, 490), (480, 450), (460, 420), (440, 495), (420, 490), 
(400, 480), (380, 470), (360, 440), (340, 405), (320, 470), 
(300, 450), (280, 430), (260, 420), (240, 490), (220, 440), 
(200, 470), (180, 410), (160, 405), (140, 470), (120, 490), 
(100, 495), (80, 480), (60, 420), (40, 430), (20, 480), (0, 460)
]

def prepare_curve_data(graph_data):
    from vec2d import *
    prepared_data = []
    for i in range(len(graph_data)):
        x, y = graph_data[i][0], graph_data[i][1]
        cur_point = vec2d(graph_data[i][0], graph_data[i][1])
        
        
        if (i != 0) and (i != len(graph_data) - 1):
            back_point = vec2d(graph_data[i - 1][0], graph_data[i - 1][1])
            forw_point = vec2d(graph_data[i + 1][0], graph_data[i + 1][1])
                        
            back_vect = back_point - cur_point
            forw_vect = forw_point - cur_point
            back_vect_proj = back_vect / 2.0
            forw_vect_proj = forw_vect / 2.0
            
            angle_between = back_vect.get_angle_between(forw_vect) / 2.0          
            
            back_vect.rotate(angle_between - 90)
            forw_vect.rotate(90 - angle_between)
            
            back_vect = back_vect_proj.projection(back_vect)
            forw_vect = forw_vect_proj.projection(forw_vect)
            
            back_cpoint = cur_point + back_vect
            forw_cpoint = cur_point + forw_vect
            
            cx1, cy1 = back_cpoint[0], back_cpoint[1]
            cx2, cy2 = forw_cpoint[0], forw_cpoint[1]
        
        else:
           cx1, cy1, cx2, cy2 = x, y, x, y 
        
        prepared_data.append((x, y, cx1, cy1, cx2, cy2))
        
    return prepared_data

def draw_point(x, y, opacity):
    cr.move_to(x + 2, y)
    cr.arc(x, y, 2, 0, 2 * pi)
    cr.set_source_rgba(0, 0, 1, opacity)
    cr.stroke()

def debug_points(cr, prepared_data):
    for i in range(0, len(prepared_data)):
        x, y = prepared_data[i][0], prepared_data[i][1]
        cx1, cy1 = prepared_data[i][2], prepared_data[i][3]
        cx2, cy2 = prepared_data[i][4], prepared_data[i][5]

        draw_point(x, y, 1)
        if cx1 != x or cy1 != y:
            draw_point(cx1, cy1, 0.3)
            cr.move_to(x, y)
            cr.line_to(cx1, cy1)
            cr.set_source_rgb(0.5, 0.5, 0.5)
            cr.stroke()

        if cx2 != x or cy2 != y:
            draw_point(cx2, cy2, 0.3)
            cr.move_to(x, y)
            cr.line_to(cx2, cy2)
            cr.set_source_rgb(0.5, 0.5, 0.5)
            cr.stroke()

def poly_curve(cr, prepared_data):
    for i in range(0, len(prepared_data) - 1):
        x, y = prepared_data[i][0], prepared_data[i][1]
        cx1, cy1 = prepared_data[i][4], prepared_data[i][5]
        cx2, cy2 = prepared_data[i + 1][2], prepared_data[i + 1][3]
        x2, y2 = prepared_data[i + 1][0], prepared_data[i + 1][1]
        cr.move_to(x, y)
        cr.curve_to(cx1, cy1, cx2, cy2, x2, y2)


surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
cr = cairo.Context(surface)
cr.set_line_width(1)
cr.set_source_rgb(1, 1, 1)
cr.set_operator (cairo.OPERATOR_SOURCE)
cr.paint()

prepared_data = prepare_curve_data(graph_data)
debug_points(cr, prepared_data)
cr.set_line_width(2)
poly_curve(cr, prepared_data)
cr.set_source_rgb(0, 0, 0)
cr.stroke()

surface.write_to_png('curve.png')

</pre></p>
<br />Posted in Open Source, Uncategorized  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fatune.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fatune.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fatune.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fatune.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fatune.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fatune.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fatune.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fatune.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fatune.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fatune.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fatune.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fatune.wordpress.com/115/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fatune.wordpress.com/115/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fatune.wordpress.com/115/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatune.wordpress.com&amp;blog=862586&amp;post=115&amp;subd=fatune&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fatune.wordpress.com/2009/06/24/pycairo-%d0%b8-%d1%81%d0%bf%d0%bb%d0%b0%d0%b9%d0%bd%d1%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ec6a21d58278d578c93c607210be6655?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fatune</media:title>
		</media:content>

		<media:content url="http://fatune.files.wordpress.com/2009/06/plain.png" medium="image">
			<media:title type="html">ломанная</media:title>
		</media:content>

		<media:content url="http://fatune.files.wordpress.com/2009/06/curve_.png" medium="image">
			<media:title type="html">curve_</media:title>
		</media:content>

		<media:content url="http://fatune.files.wordpress.com/2009/06/curve.png" medium="image">
			<media:title type="html">curve</media:title>
		</media:content>
	</item>
		<item>
		<title>Построение изолиний в python</title>
		<link>http://fatune.wordpress.com/2009/05/28/isoline_python/</link>
		<comments>http://fatune.wordpress.com/2009/05/28/isoline_python/#comments</comments>
		<pubDate>Thu, 28 May 2009 04:02:03 +0000</pubDate>
		<dc:creator>fatune</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://fatune.wordpress.com/?p=110</guid>
		<description><![CDATA[Понадобилось мне для матрицы значений получить координаты изолинии этих значений. Матрица, разумеется, с регулярным шагом. Так как основная моя программа написана на python, то и программу, реализующую это тоже хотелось бы на питоне. Однако стихийный поиск не навёл меня на уже готовое решение. Разумеется, это можно было бы реализовать при помощи PyNGL или тому подобного, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatune.wordpress.com&amp;blog=862586&amp;post=110&amp;subd=fatune&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Понадобилось мне для матрицы значений получить координаты изолинии этих значений. Матрица, разумеется, с регулярным шагом. Так как основная моя программа написана на python, то и программу, реализующую это тоже хотелось бы на питоне. Однако стихийный поиск не навёл меня на уже готовое решение. Разумеется, это можно было бы реализовать при помощи PyNGL  или тому подобного, но мне необходимы сами координаты этих изолиний.<br />
В общем, после непродолжительных мытарств, решился написать <a href="http://pyfract.googlepages.com/isolines.py">свой велосипед</a>. Задача решена в лоб, и примитивно.  Но, может, кому пригодиться.</p>
<p>Пример использования:</p>
<p>import isolines</p>
<p>data = [[21, 35, 55, 41], \<br />
[24, 47, 77, 56], \<br />
[12, 46, 54, 27], \<br />
[8, 70, 82, 38], \<br />
[6, 81, 109, 63], \<br />
[9, 56, 77, 47], \<br />
[11, 27, 54, 46], \<br />
[20, 38, 82, 70]]</p>
<p># список интервалов, через которые будут проведены изолинии<br />
intervals=range(0,100,10)</p>
<p>&raquo;&#8217;<br />
prepared_matrix &#8211; подготовленные ячейки, для дальнейших расчетов<br />
calculated_dots &#8211; точки пересечения граней квадратов с горизонтальной плоскостью<br />
coords &#8211; результат. координаты отрезков изолиний.<br />
&raquo;&#8217;<br />
prepared_matrix=isolines.prepare_matrix(data)<br />
calculated_dots=isolines.calculate_dots(prepared_matrix,intervals)<br />
coords=isolines.calculate_coords(calculated_dots)</p>
<p>print coords</p>
<p>Результат выполнения:</p>
<p>[[[30, 1.1428571428571428, 0.5, 0.76086956521739135, 1.5], \<br />
[40, 1.5, 0.91666666666666674, 1.1956521739130435, 1.5]], \<br />
[[40, 1.75, 0.5, 1.5, 0.91666666666666674], \<br />
[50, 2.25, 0.5, 1.6000000000000001, 1.5], \<br />
[60, 2.5, 0.72727272727272729, 1.9333333333333333, 1.5], \<br />
[70, 2.5, 1.1818181818181817, 2.2666666666666666, 1.5]], &#8230;.</p>
<p>Список, в котором отдельно для каждой ячейки и для каждой стороны этой ячейки содержатся координаты отрезков изолиний, и их значений в виде:<br />
[значение изолинии, x1, y1, x2, y2]</p>
<p>А вот как это решение выглядит в графическом виде:<br />
<img class="alignnone size-full wp-image-111" title="Изолинии" src="http://fatune.files.wordpress.com/2009/05/debian.png?w=380" alt="Изолинии"   /><br />
Не самая красивая диаграмма. Но характер распределения передает.</p>
<p>Может, у кого-то есть более изящное решение?</p>
<br />Posted in Uncategorized  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fatune.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fatune.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fatune.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fatune.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fatune.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fatune.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fatune.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fatune.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fatune.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fatune.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fatune.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fatune.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fatune.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fatune.wordpress.com/110/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatune.wordpress.com&amp;blog=862586&amp;post=110&amp;subd=fatune&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fatune.wordpress.com/2009/05/28/isoline_python/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ec6a21d58278d578c93c607210be6655?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fatune</media:title>
		</media:content>

		<media:content url="http://fatune.files.wordpress.com/2009/05/debian.png" medium="image">
			<media:title type="html">Изолинии</media:title>
		</media:content>
	</item>
		<item>
		<title>ВНИМАНИЕ!</title>
		<link>http://fatune.wordpress.com/2009/04/01/%d0%b2%d0%bd%d0%b8%d0%bc%d0%b0%d0%bd%d0%b8%d0%b5/</link>
		<comments>http://fatune.wordpress.com/2009/04/01/%d0%b2%d0%bd%d0%b8%d0%bc%d0%b0%d0%bd%d0%b8%d0%b5/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 00:26:45 +0000</pubDate>
		<dc:creator>fatune</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://fatune.wordpress.com/?p=94</guid>
		<description><![CDATA[Недавно исследователи открыли факт заражения наших водопроводных систем опасным химикатом. Этот химикат бесцветный, безвкусный и не имеет запаха. Правительство не предприняло никаких попыток регулирования этого опасного заражения. Данный химикат называется дигидрогена монооксид (Dihydrogen monoxide). Химикат используется для следующих целей: В производстве как растворитель и охладитель В ядерных реакторах В производстве пенопласта В огнетушителях В химических [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatune.wordpress.com&amp;blog=862586&amp;post=94&amp;subd=fatune&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Недавно исследователи открыли факт заражения наших водопроводных систем опасным химикатом. Этот химикат бесцветный, безвкусный и не имеет запаха. Правительство не предприняло никаких попыток регулирования этого опасного заражения. Данный химикат называется дигидрогена монооксид (Dihydrogen monoxide).</p>
<p>Химикат используется для следующих целей:<br />
В производстве как растворитель и охладитель<br />
В ядерных реакторах<br />
В производстве пенопласта<br />
В огнетушителях<br />
В химических и биологических лабораториях<br />
В производстве пестицидов<br />
В искусственных пищевых добавках<br />
Химикат является основной составляющей кислотных дождей<br />
Действует на эрозию почвы<br />
Ускоряет коррозию и вредит большинству электроприборов<br />
Длительный контакт с химикатом в его твёрдой форме приводит к серьёзным повреждениям кожи человека<br />
Контакт с газообразной формой химиката приводит к сильным ожогам<br />
Вдыхание даже небольшого количества химиката грозит смертельным исходом<br />
Химикат обнаружен в злокачественных опухолях, нарывах, язвах и прочих болезненных изменениях тела<br />
Химикат развивает наркозависимость; жертвам при воздержании от потребления химиката грозит смерть в течение 168 часов<br />
Ни один известный очиститель не способен полностью очистить воду от этого химиката.</p>
<p>Несмотря на эти опасности, химикат активно и безнаказанно используется в индустрии. Многие корпорации ежедневно получают тонны химиката через специально проложенные подземные трубопроводы. Люди, работающие с химикатом, как правило, не получают спецодежды и инструктажа. Отработанный химикат тоннами выливается в реки и моря.</p>
<p>Мы призываем население проявить сознательность и протестовать против дальнейшего использования этого опасного химиката.</p>
<p>Источник http://ru.wikipedia.org/wiki/Дигидроген_моноксид</p>
<br />Posted in Uncategorized  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fatune.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fatune.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fatune.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fatune.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fatune.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fatune.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fatune.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fatune.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fatune.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fatune.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fatune.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fatune.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fatune.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fatune.wordpress.com/94/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatune.wordpress.com&amp;blog=862586&amp;post=94&amp;subd=fatune&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fatune.wordpress.com/2009/04/01/%d0%b2%d0%bd%d0%b8%d0%bc%d0%b0%d0%bd%d0%b8%d0%b5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ec6a21d58278d578c93c607210be6655?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fatune</media:title>
		</media:content>
	</item>
		<item>
		<title>Построение стереограмм в linux</title>
		<link>http://fatune.wordpress.com/2008/08/12/stereo_gmt/</link>
		<comments>http://fatune.wordpress.com/2008/08/12/stereo_gmt/#comments</comments>
		<pubDate>Tue, 12 Aug 2008 05:15:46 +0000</pubDate>
		<dc:creator>fatune</dc:creator>
				<category><![CDATA[GMT]]></category>
		<category><![CDATA[стереограмма]]></category>

		<guid isPermaLink="false">http://fatune.wordpress.com/?p=46</guid>
		<description><![CDATA[Построение стереограмм трещиноватости является повседневной задачей в структурной геологии. Для её решения уже разработано большое количество программных средств под Windows, но под Linux специальной утилиты пока не существует. Есть лишь небольшое количество малофункциональных программ. Но так как строить такие стереограммы мне необходимо, да еще и в больших количествах, я написал скрипт, осуществляющий такие построения, используя [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatune.wordpress.com&amp;blog=862586&amp;post=46&amp;subd=fatune&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Построение стереограмм трещиноватости является повседневной задачей в структурной геологии. Для её решения уже разработано большое количество программных средств под Windows, но под Linux специальной утилиты пока не существует. Есть лишь небольшое количество малофункциональных программ.</p>
<p>Но так как строить такие стереограммы мне необходимо, да еще и в больших количествах, я написал скрипт, осуществляющий такие построения, используя функционал GMT.</p>
<p>#!/bin/bash<br />
fig=test.ps<br />
title=&raquo;Проверка&raquo;<br />
grid=test.grd<br />
cpt=test.cpt</p>
<p>gmtset CHAR_ENCODING ISO-8859-5</p>
<p>echo &#8217;0, -90&#8242; | psxy -R0/360/-90/0 \<br />
-JS0/-90/16c -Sx0.4c -Ba90f90/g90:.$title: \<br />
&#8211;BASEMAP_TYPE=plain -K -V &gt; $fig</p>
<p>#рисуем нормали к плоскостям<br />
cat test_n.txt | awk -F&raquo;\t&raquo; &#8216;{print $1, $2-90}&#8217; \<br />
| psxy -R -J -Sc0.2c -N -Gblack -Wwhite -O -K &gt;&gt; $fig</p>
<p>#рисуем направления смещений по плоскостям<br />
cat test_v.txt | awk -F&raquo;\t&raquo; &#8216;{print $1, $2-90, -$3+90, &laquo;1&#8243;}&#8217; \<br />
| psxy -R -J -SV0.08/0.3c/0.12c -N -Gblack -O -K &gt;&gt; $fig</p>
<p>echo &laquo;50 5 12 0 0 CT Тестовая стереограмма&raquo; | pstext -R0/50/0/50 -JX16c -N -O &gt;&gt; $fig</p>
<p>Результатом выполнения скрипта будет вот такая стереограмма:<a href="http://fatune.files.wordpress.com/2008/08/test1.png"><img src="http://fatune.files.wordpress.com/2008/08/test1.png?w=90&#038;h=95" alt="" width="90" height="95" class="aligncenter size-thumbnail wp-image-48" /></a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/fatune.wordpress.com/46/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/fatune.wordpress.com/46/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fatune.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fatune.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fatune.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fatune.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fatune.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fatune.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fatune.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fatune.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fatune.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fatune.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fatune.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fatune.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fatune.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fatune.wordpress.com/46/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatune.wordpress.com&amp;blog=862586&amp;post=46&amp;subd=fatune&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fatune.wordpress.com/2008/08/12/stereo_gmt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ec6a21d58278d578c93c607210be6655?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fatune</media:title>
		</media:content>

		<media:content url="http://fatune.files.wordpress.com/2008/08/test1.png?w=90" medium="image" />
	</item>
		<item>
		<title>Пространственная кластеризация точечных данных</title>
		<link>http://fatune.wordpress.com/2008/05/12/clust/</link>
		<comments>http://fatune.wordpress.com/2008/05/12/clust/#comments</comments>
		<pubDate>Mon, 12 May 2008 04:01:23 +0000</pubDate>
		<dc:creator>fatune</dc:creator>
				<category><![CDATA[Grass]]></category>
		<category><![CDATA[R]]></category>
		<category><![CDATA[clustering]]></category>

		<guid isPermaLink="false">http://fatune.wordpress.com/?p=39</guid>
		<description><![CDATA[Пост является переводом Spatial Clustering of Point Data с небольшими дополнениями. Задача: Есть n точек, распределенных каким-то образом в пределах заданной территории. Каждая точка кроме пространственного положения обладает значением (например, содержанием химического элемента) Требуется объединить точки в m групп. Инструменты: GRASS, R. Задача теоретическая. Точки генерируем случайным образом, и по ходу решения задачи, попытаемся определиться с [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatune.wordpress.com&amp;blog=862586&amp;post=39&amp;subd=fatune&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Пост является переводом <a href="http://casoilresource.lawr.ucdavis.edu/drupal/node/340">Spatial Clustering of Point Data</a> с небольшими дополнениями.</p>
<p>Задача: Есть <strong><em>n</em></strong> точек, распределенных каким-то образом в пределах заданной территории. Каждая точка кроме пространственного положения обладает значением (например, содержанием химического элемента)<br />
Требуется объединить точки в <strong><em>m</em></strong> групп.</p>
<p>Инструменты: <strong>GRASS</strong>, <strong>R</strong>.</p>
<p>Задача теоретическая. Точки генерируем случайным образом, и по ходу решения задачи, попытаемся определиться с числом групп в которые эти точки надо объединить.<br />
Для наглядности сгенерируем растровую карту и возьмем с неё значения для точек:</p>
<blockquote><p><strong>r.surf.fractal</strong> out=surf.fract d=2.05<br />
<strong>v.random</strong> out=pnts n=100<br />
<strong>v.drape</strong> pnts type=point rast=surf.fract out=points</p>
<p><strong>d.rast</strong> surf.fract<br />
<strong>d.vect</strong> points icon=basic/box fcol=black col=black size=6</p></blockquote>
<p><a href="http://fatune.files.wordpress.com/2008/05/011.png"><img class="alignnone size-medium wp-image-43" src="http://fatune.files.wordpress.com/2008/05/011.png?w=300&#038;h=225" alt="" width="300" height="225" /></a></p>
<blockquote><p><strong>v.out.ascii</strong> in=points out=points.xy</p></blockquote>
<p>На соседнем терминале запускаем R</p>
<blockquote><p>x &lt;- <strong>read.table</strong>(&#8216;points.xy&#8217;,'sep=&#8217;|')<br />
<strong>names</strong>(x) &lt;- c(&#8216;easting&#8217;, &#8216;northing&#8217;, &#8216;surf&#8217; ,&#8217;cat&#8217;)<br />
# отсекаем столбец cat<br />
y &lt;- <strong>data.frame</strong>(x[,1:3])<br />
<strong>row.names</strong>(y) &lt;- x$cat</p>
<p># загружаем библиотеки для кластерного анализа<br />
<strong>library</strong>(cluster)<br />
<strong>library</strong>(flexclust)</p>
<p># попытаемся найти оптимальное число групп<br />
s &lt;- <strong>stepFlexclust</strong>(y, K=2:10, nrep=20)<br />
<strong>plot</strong>(s)</p></blockquote>
<p><a href="http://fatune.files.wordpress.com/2008/05/021.png"><img class="alignnone size-medium wp-image-44" src="http://fatune.files.wordpress.com/2008/05/021.png?w=300&#038;h=300" alt="" width="300" height="300" /></a></p>
<blockquote><p># похоже, оптимальное число 5<br />
y.pam &lt;- <strong>pam</strong>(y, 5, stand=TRUE)</p>
<p># подготовим данные для экспорта<br />
y$cluster &lt;- y.pam$clustering<br />
y$orig_cat &lt;- <strong>as.numeric</strong>(row.names(y))</p>
<p># экспортируем данные в текстовый файл<br />
<strong>write.table</strong>(y, file=&#8217;points.clust&#8217;, row.names=FALSE)</p></blockquote>
<p>возвращаемся в GRASS и импортируем текстовый файл</p>
<blockquote><p><strong>v.in.ascii</strong> in=points.clust out=pclust fs=&raquo; &raquo; columns=&#8217;x double, y double, srf double, orig_cat integer, cluster integer&#8217; skip=1</p>
<p><strong>for</strong> x <strong>in</strong> $(<strong>seq</strong> 1 5)<br />
<strong>do v.extract</strong> &#8211;o in=pclust where=&raquo;cluster=$x&raquo; out=pclust_$x<br />
<strong>v.hull</strong> &#8211;o in=pclust_$x out=pclust_hull_$x<br />
<strong>d.vect</strong> pclust_hull_$x type=boundary fcol=none width=2 col=white<br />
<strong>done</strong><br />
<strong></strong><strong>d.vect</strong> pclust icon=basic/box fcol=black col=black size=6</p></blockquote>
<p><a href="http://fatune.files.wordpress.com/2008/05/031.png"><img class="alignnone size-medium wp-image-45" src="http://fatune.files.wordpress.com/2008/05/031.png?w=300&#038;h=225" alt="" width="300" height="225" /></a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/fatune.wordpress.com/39/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/fatune.wordpress.com/39/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fatune.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fatune.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fatune.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fatune.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fatune.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fatune.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fatune.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fatune.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fatune.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fatune.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fatune.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fatune.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fatune.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fatune.wordpress.com/39/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatune.wordpress.com&amp;blog=862586&amp;post=39&amp;subd=fatune&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fatune.wordpress.com/2008/05/12/clust/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ec6a21d58278d578c93c607210be6655?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fatune</media:title>
		</media:content>

		<media:content url="http://fatune.files.wordpress.com/2008/05/011.png?w=300" medium="image" />

		<media:content url="http://fatune.files.wordpress.com/2008/05/021.png?w=300" medium="image" />

		<media:content url="http://fatune.files.wordpress.com/2008/05/031.png?w=300" medium="image" />
	</item>
		<item>
		<title>Начало работы с GMT</title>
		<link>http://fatune.wordpress.com/2008/03/19/gmt-2-2/</link>
		<comments>http://fatune.wordpress.com/2008/03/19/gmt-2-2/#comments</comments>
		<pubDate>Wed, 19 Mar 2008 07:00:31 +0000</pubDate>
		<dc:creator>fatune</dc:creator>
				<category><![CDATA[GMT]]></category>

		<guid isPermaLink="false">http://fatune.wordpress.com/?p=37</guid>
		<description><![CDATA[На сайте gis-lab опубликована статья &#171;Начало работы с GMT&#171;, в которой показаны основы работы с этим пакетом. Спасибо Максиму Дубинину за помощь и терпеливую корректировку сего опуса.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatune.wordpress.com&amp;blog=862586&amp;post=37&amp;subd=fatune&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>На сайте gis-lab опубликована статья &laquo;<a href="http://gis-lab.info/qa/gmt.html">Начало работы с GMT</a>&laquo;, в которой показаны основы работы с этим пакетом. Спасибо Максиму Дубинину за помощь и терпеливую корректировку сего опуса.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/fatune.wordpress.com/37/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/fatune.wordpress.com/37/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fatune.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fatune.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fatune.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fatune.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fatune.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fatune.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fatune.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fatune.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fatune.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fatune.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fatune.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fatune.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fatune.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fatune.wordpress.com/37/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatune.wordpress.com&amp;blog=862586&amp;post=37&amp;subd=fatune&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fatune.wordpress.com/2008/03/19/gmt-2-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ec6a21d58278d578c93c607210be6655?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fatune</media:title>
		</media:content>
	</item>
		<item>
		<title>Русское руководство по GRASS</title>
		<link>http://fatune.wordpress.com/2008/03/04/russian-grass/</link>
		<comments>http://fatune.wordpress.com/2008/03/04/russian-grass/#comments</comments>
		<pubDate>Tue, 04 Mar 2008 21:49:22 +0000</pubDate>
		<dc:creator>fatune</dc:creator>
				<category><![CDATA[Grass]]></category>

		<guid isPermaLink="false">http://fatune.wordpress.com/?p=35</guid>
		<description><![CDATA[Наконец-то, после напряженных месяцев кропотливой работы, ребята с сайта gis-lab.info завершили перевод на русский язык учебного руководства по GRASS. Молодцы, большое дело сделали!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatune.wordpress.com&amp;blog=862586&amp;post=35&amp;subd=fatune&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Наконец-то, после напряженных месяцев кропотливой работы, ребята с сайта gis-lab.info завершили перевод на русский язык <a href="http://gis-lab.info/docs/grass/tutorial60/index.html">учебного руководства по GRASS</a>. Молодцы, большое дело сделали!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/fatune.wordpress.com/35/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/fatune.wordpress.com/35/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fatune.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fatune.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fatune.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fatune.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fatune.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fatune.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fatune.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fatune.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fatune.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fatune.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fatune.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fatune.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fatune.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fatune.wordpress.com/35/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatune.wordpress.com&amp;blog=862586&amp;post=35&amp;subd=fatune&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fatune.wordpress.com/2008/03/04/russian-grass/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ec6a21d58278d578c93c607210be6655?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fatune</media:title>
		</media:content>
	</item>
		<item>
		<title>Почему работа в командной строке &#8211; умирающее искусство?</title>
		<link>http://fatune.wordpress.com/2008/02/06/console/</link>
		<comments>http://fatune.wordpress.com/2008/02/06/console/#comments</comments>
		<pubDate>Wed, 06 Feb 2008 06:09:14 +0000</pubDate>
		<dc:creator>fatune</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[command line interface]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://fatune.wordpress.com/?p=33</guid>
		<description><![CDATA[На днях на блоге PerryGeo обнаружил сей замечательный пост. Думаю, он актуален и для многих отечественных ГИС (и не только) пользователей. Поэтому, ниже предлагаю вольный перевод: К сожалению, большинство пользователей ГИС довольно далеки от командной строки (CLI &#8211; command line interface). Порой, даже опытные пользователи, оказываясь один на один с командной строкой, испытывают шок. Насквозь [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatune.wordpress.com&amp;blog=862586&amp;post=33&amp;subd=fatune&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<blockquote><p>На днях на блоге PerryGeo обнаружил <a href="http://www.perrygeo.net/wordpress/?p=105" target="_blank">сей замечательный пост</a>. Думаю, он актуален и для многих отечественных ГИС (и не только) пользователей. Поэтому, ниже предлагаю вольный перевод:</p></blockquote>
<p>К сожалению, большинство пользователей ГИС довольно далеки от командной строки (CLI &#8211; command line interface). Порой, даже опытные пользователи, оказываясь один на один с командной строкой, испытывают шок. Насквозь оконные интерфейсы нынешних лидеров ГИС-рынка, облекающие любую операцию в ГУЕвую оболочку (GUI &#8211; graphical user interface), только способствуют этому (тех кто еще помнит как работать в командной строке ESRI Arc/Info уже называют &laquo;старая гвардия&raquo;). К тому же, у пользователей XP и Vista отсутствует доступ к командной строке DOS. У Linux-пользователей дела с этим обстоят по-лучше, но разница уже не так велика, по причине наступления таких дистрибутивов, как Ubuntu (с через чур &#8216;дружелюбным&#8217; интерфейсом).<br />
Так что же такого ужасного в командной строке? Почему считается, что командная строка сложнее графического интерфейса? Я пришел к выводу что в некоторых случаях все совсем наоборот &#8211; набрать что-то и получить назад ответ проще простого! К тому же, создается ощущение полного контроля за компьютером (что, на самом деле правда). Компьютер всегда выполняет только те приказания, которые вы ему даете, каким интерфейсом вы бы не пользовались (GUI или CLI). Вот только GUI не концентрируется на мелочах, поэтому, вам не обязательно точно знать что вы приказали компьютеру. Такая легкость дается ценой многих важных факторов.<span id="more-33"></span> Судите сами:</p>
<ul>
<li><b> Автоматизация.</b> Представьте, что вы осуществляете мониторинг данных, и должны обрабатывать их каждый час. Неужели вы будете сидеть за компьютером все 24 часа в сутки?</li>
<li><b> Воспроизводимость.</b> Как только я показываю кому-нибудь операцию, осуществляемую через командную строку, первое, что мне говорят (ну, или хотя бы думают) &#8211; &laquo;Командная строка &#8211; это слишком сложно&raquo;. Взгляните на следующую команду конвертации картинки из .tif формата в формат ERDAS .img (HFA):<br />
<blockquote><p>cd /data/images<br />
gdal_translate -of HFA aerial.tif aerial.tif.img</p></blockquote>
<p>Вы, вероятно, спросите, &laquo;А почему бы не воспользоваться графическим интерфейсом, Кликнуть пару кнопок, и получить результат&raquo;? Возможно, но повторите это для 2000 картинок. В командной строке вам надо набрать всего лишь:</p>
<blockquote><p>cd /data/images<br />
for i in *.tif; do<br />
gdal_translate -of HFA $i $i.img;<br />
done</p></blockquote>
</li>
<li><b>Протоколирование</b> (документирование). В ГИС анализе нет ничего важнее чем документирование работы. Вообразите напряженные пять часов работы. Все уже должно быть готово к 2 часам&#8230; наконец, работа закончена, теперь нужен протокол работ &#8211; какие процедуры и методы, и как были применены. В CLI вы просто копируете команды из терминала, или смотрите историю введенных команд. Вы можете сохранить историю в простом текстовом файле, и спустя месяц, вновь повторить те же шаги. В GUI вам надо запомнить каждый клик, каждую вкладку, каждую опцию, каждое действие. Часто, это предполагает наличие каких-то дополнительных пояснений, скриншотов и т.п., которые, конечно же, автоматически не сохранялись. И, конечно же, когда на следующий день вдруг понадобиться выполнить те же действия, но на другом материале, ни о каком автоматизированном повторении работы и речи быть не может.</li>
<li><b> Доступность.</b> В командной строке используется простой &laquo;плоский&raquo; (plain) текст без форматирования. Вы можете распечатать его, и изучить по дороге на работу. Можете отправить его по электронной почте коллегам. Можете использовать cvs для отслеживания изменений. Вы можете передать большой объем информации без необходимости сидеть, и записывать каждую процедуру шаг за шагом, клик за кликом в графическом интерфейсе.</li>
<li><b> Точность.</b> Слишком часто бывает, что GUI-дизайнеры &laquo;перемудрили&raquo; с интерфейсом в приложении, считая что пользователю не нужно знать ничего кроме необходимого минимума. Проводя аналогию с машиной, можно сказать что вы садитесь за руль, поворачиваете ключ, давите на педаль и едете. И совершенно не заботитесь о том, что происходит под капотом. Но иногда бывает нужно выполнить специфическую процедуру, о которой дизайнеры GUI даже не догадывались. Интерфейс командной строки не связывает ваши руки (так как выполняет именно то, что вы говорите), он осуществляет более точное взаимодействие с компьютером, и гораздо более удобен при отладке сложной проблемы.</li>
</ul>
<p>Так что не думайте что все окна содержат волшебную кнопку, нажав на которую будет сделана работа. Во многих случаях использование командной строки более эффективно, и даже необходимо.</p>
<p>Далее, автор советует почитать книгу Нила Стивенсона поосновам работы в конслои. Она, разумеется на английском, так что от себя добавляю несколько ссылок на русскоязычные ресурсы по теме:<br />
<a href="http://zero.kanet.ru/site/index.php?page=15">http://zero.kanet.ru/site/index.php?page=15</a> &#8211; командная строка Linux<br />
<a href="http://heap.altlinux.org/alt-docs/modules/unix_base_admin.dralex/ch02.html">http://heap.altlinux.org/alt-docs/modules/unix_base_admin.dralex/ch02.html</a> командная строка UNIX</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/fatune.wordpress.com/33/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/fatune.wordpress.com/33/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fatune.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fatune.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fatune.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fatune.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fatune.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fatune.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fatune.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fatune.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fatune.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fatune.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fatune.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fatune.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fatune.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fatune.wordpress.com/33/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatune.wordpress.com&amp;blog=862586&amp;post=33&amp;subd=fatune&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fatune.wordpress.com/2008/02/06/console/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ec6a21d58278d578c93c607210be6655?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fatune</media:title>
		</media:content>
	</item>
		<item>
		<title>Установка GMT в Debian/Ububtu</title>
		<link>http://fatune.wordpress.com/2008/02/01/gmt-install/</link>
		<comments>http://fatune.wordpress.com/2008/02/01/gmt-install/#comments</comments>
		<pubDate>Fri, 01 Feb 2008 01:00:16 +0000</pubDate>
		<dc:creator>fatune</dc:creator>
				<category><![CDATA[GMT]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://fatune.wordpress.com/?p=31</guid>
		<description><![CDATA[Не знаю как в других дистрибутивах, но у меня в Debian4.0 (дома) и в Ubuntu7.10 (на работе) команда sudo apt-get install gmt устанавливает GMT не полностью и не до конца. Данные высокого разрешения по береговым линиям и границам государств отсутствуют, и путь к GMT в системе не прописан. Поэтому, чтобы можно было нормально работать, после [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatune.wordpress.com&amp;blog=862586&amp;post=31&amp;subd=fatune&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Не знаю как в других дистрибутивах, но у меня в Debian4.0 (дома) и в Ubuntu7.10 (на работе) команда <b>sudo apt-get install gmt</b> устанавливает <b>GMT</b> не полностью и не до конца. Данные высокого разрешения по береговым линиям и границам государств отсутствуют, и путь к <b>GMT</b> в системе не прописан. Поэтому, чтобы можно было нормально работать, после установки этой программы аптгетом нужно сделать следующее:</p>
<ul>
<li>Прописать в системе путь к <b>GMT</b>. Просто вставляем в конец файла ~/.bashrc строчки:</li>
</ul>
<blockquote><p><b>export</b> GMTHOME=/usr/lib/gmt/<br />
<b>export</b> PATH=/usr/lib/gmt/bin/:$PATH</p></blockquote>
<ul>
<li>Установить данные о береговых линиях континентов высоко разрешения (взято с сache.ath.cx/Linux/map):</li>
</ul>
<blockquote><p><b>cd</b> /tmp<br />
<b>ftp</b> ftp.geologi.uio.no<br />
username ftp<br />
password guest<br />
<b>cd</b> pub/gmt/3<br />
<b>get</b> GMT3_high.tar.gz<br />
<b>get</b> GMT3_full.tar.gz<br />
<b>quit</b><br />
<b>tar</b> -xzvf GMT3_high.tar.gz<br />
<b>tar</b> -xzvf GMT3_full.tar.gz<br />
<b>cd</b> share<br />
<b>sudo mv</b> share/*.cdf   /usr/share/gmt</p></blockquote>
<p>После этих действий <b>GMT</b> наконец будет установлена правильно.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/fatune.wordpress.com/31/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/fatune.wordpress.com/31/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fatune.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fatune.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fatune.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fatune.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fatune.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fatune.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fatune.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fatune.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fatune.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fatune.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fatune.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fatune.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fatune.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fatune.wordpress.com/31/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatune.wordpress.com&amp;blog=862586&amp;post=31&amp;subd=fatune&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fatune.wordpress.com/2008/02/01/gmt-install/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ec6a21d58278d578c93c607210be6655?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fatune</media:title>
		</media:content>
	</item>
		<item>
		<title>Язык статистических расчетов R</title>
		<link>http://fatune.wordpress.com/2008/01/25/r/</link>
		<comments>http://fatune.wordpress.com/2008/01/25/r/#comments</comments>
		<pubDate>Fri, 25 Jan 2008 04:14:41 +0000</pubDate>
		<dc:creator>fatune</dc:creator>
				<category><![CDATA[R]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[science]]></category>

		<guid isPermaLink="false">http://fatune.wordpress.com/?p=27</guid>
		<description><![CDATA[Если вы желаете придать своей работе больший вес и решили для этой цели в тексте расставить в случайных местах такие слова как &#171;корреляционный анализ&#187;, &#171;распределение Гаусса&#187; и &#171;критерий Фишера&#187;, то язык для статистических расчетов R будет как раз к стати. К тому же, он умеет строить внушительные графики, при известных навыках работы с R, обескураживающие [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatune.wordpress.com&amp;blog=862586&amp;post=27&amp;subd=fatune&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Если вы желаете придать своей работе больший вес и решили для этой цели в тексте расставить в случайных местах такие слова как &laquo;корреляционный анализ&raquo;, &laquo;распределение Гаусса&raquo; и &laquo;критерий Фишера&raquo;, то язык для статистических расчетов <b>R</b> будет как раз к стати. К тому же, он умеет строить внушительные графики, при известных навыках работы с <b>R</b>, обескураживающие бывалых математиков.<span id="more-27"></span></p>
<p>Рассмотрим работу в системе <b>R</b>. Пусть у нас есть цифровая модель рельефа в формате <b>GRASS</b>. Чтобы иметь возможность пользоваться ей в <b>R</b>, <a href="http://fatune.wordpress.com/2007/12/18/%d0%ad%d0%ba%d1%81%d0%bf%d0%be%d1%80%d1%82-%d1%80%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b2%d0%be%d0%b9-%d0%ba%d0%b0%d1%80%d1%82%d1%8b-%d0%b8%d0%b7-grass-%d0%b2-xyz/" target="_blank">экспортируем ее в формат .xyz</a>.</p>
<p>Теперь запускаем <b>R</b> и присваиваем переменной elevation матрицу данных из файла elevation.xyz.</p>
<blockquote><p>elevation <b>&lt;-</b> <b>read.table</b>(&laquo;~/elevation.xyz&raquo;)</p></blockquote>
<p>В скобках через запятую можно также перечислить параметры описывающие файл подробнее: <b>header</b>=TRUE &#8211; если в файле в первой строке находятся заголовки таблицы; <b>sep</b>=&raquo;;&raquo; &#8211; разделитель столбцов; <b>na.string</b>=&raquo;NA&raquo; &#8211; символьное выражение, которое будет интерпретироватся как отсутствие данных (null). Полный перечень параметов можно узнать набрав:</p>
<blockquote><p><b>?read.table</b></p></blockquote>
<blockquote><p>Вообще, такой способ интеграции <b>GRASS</b> и <b>R</b> мягко говоря кривой. Для этой цели служит специальный пакет <b>spgrass6</b>. Учитывая неоценимую значимость этого пакета для пространственных исследований, в дальнейшем планирую подробно его описать в блоге. Пока же, привел этот пример чтобы показать возможность импорта в <b>R</b> внешних данных, хранящихся в простом текстовом файле. Обычно такой способ хранения удобнее, чем использование сложных бинарных форматов.</p></blockquote>
<p>Чтобы просмотреть какого рода данные у нас в переменной elevation вводим:</p>
<blockquote><p><b>str</b>(elevation)</p>
<p>&#8216;data.frame&#8217;:   229843 obs. of  3 variables:<br />
$ V1: int  2 3 4 5 6 7 8 9 10 11 &#8230;<br />
$ V2: int  2 2 2 2 2 2 2 2 2 2 &#8230;<br />
$ V3: int  128 155 180 196 219 232 233 236 239 238 &#8230;</p></blockquote>
<p>&#8230;что означает что переменная содержит таблицу данных из трех колонок V1, V2, V3, и типом данных каждой их них является integer. Краткую статистическую характеристику можно увидеть набрав:</p>
<blockquote><p><b>summary</b>(elevation)</p>
<p>V1               V2              V3<br />
Min.   :   2.0   Min.   :  2.0   Min.   :   1.0<br />
1st Qu.: 196.0   1st Qu.:148.0   1st Qu.:  74.0<br />
Median : 380.0   Median :220.0   Median : 163.0<br />
Mean   : 401.5   Mean   :216.9   Mean   : 195.2<br />
3rd Qu.: 593.0   3rd Qu.:283.0   3rd Qu.: 282.0<br />
Max.   :1199.0   Max.   :450.0   Max.   :1293.0</p></blockquote>
<p>Работать с такими малоговорящими названиями как V3 не совсем удобно, поэтому лучше переименовать их в понятные &laquo;x&raquo;, &laquo;y&raquo;, &laquo;z&raquo;:</p>
<blockquote><p><b>names</b>(elevation)  <b>&lt;-</b> <b>c</b>(&laquo;x&raquo;,&raquo;y&raquo;,&raquo;z&raquo;)</p></blockquote>
<p>Смотрим гитограмму высот:</p>
<div align="left">
<blockquote><p> <b>hist</b>(elevation$x,main=&raquo;Histogram of elevation&raquo;, xlab=&raquo;Elevation, m&raquo;)</p></blockquote>
</div>
<p><a href="http://fatune.files.wordpress.com/2008/01/elevation1.png" title="elevation.png"><img src="http://fatune.files.wordpress.com/2008/01/elevation1.thumbnail.png?w=380" alt="elevation.png" /></a></p>
<p>Чтобы записать гистограмму в файл, вводим:</p>
<blockquote><p><b>postscript</b>(&laquo;elevation.ps&raquo;)</p></blockquote>
<p>После этого все графики, что мы рисуем, вместо графического окна будут отправляться на postcript-driver. Запись post-script файла на диск осуществляется командой:</p>
<blockquote><p><b>dev.off</b>()</p>
<p><a href="http://fatune.files.wordpress.com/2008/01/elevation2.png" title="elevation.png"><img src="http://fatune.files.wordpress.com/2008/01/elevation2.thumbnail.png?w=380" alt="elevation.png" /></a></p></blockquote>
<p>Для записи png файла используется оператор <b>png</b>().</p>
<p>Разумеется <b>R </b>нужен не только для рисования гистограмм. Это довольно мощная система активно разрабатываемая и используемая учеными во всем мире. К тому же, она бесплатна, в отличие от <b>STATISTICA</b>.</p>
<p>Основная информация об <b>R</b> находится, естественно, на сайте разработчиков: <a href="http://www.r-project.org/" target="_blank">http://www.r-project.org/</a>.</p>
<p>Хорошую подборку материалов на русском языке можно найти на сайте А.Шипунова: <a href="http://herba.msu.ru/shipunov/software/r/r-ru.htm" target="_blank">http://herba.msu.ru/shipunov/software/r/r-ru.htm</a>. Также, базовые знания можно получить из этой замечательной методички: <a href="http://gis-lab.info/docs/r-metoda-2006.10.23.pdf">http://gis-lab.info/docs/r-metoda-2006.10.23.pd.</a> А здесь методичка подробнее: <a href="http://www.uic.nnov.ru/~zny/ml//Materials/lab1.pdf"> http://www.uic.nnov.ru/~zny/ml//Materials/lab1.pdf</a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/fatune.wordpress.com/27/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/fatune.wordpress.com/27/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fatune.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fatune.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fatune.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fatune.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fatune.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fatune.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fatune.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fatune.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fatune.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fatune.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fatune.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fatune.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fatune.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fatune.wordpress.com/27/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fatune.wordpress.com&amp;blog=862586&amp;post=27&amp;subd=fatune&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fatune.wordpress.com/2008/01/25/r/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ec6a21d58278d578c93c607210be6655?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fatune</media:title>
		</media:content>

		<media:content url="http://fatune.files.wordpress.com/2008/01/elevation1.thumbnail.png" medium="image">
			<media:title type="html">elevation.png</media:title>
		</media:content>

		<media:content url="http://fatune.files.wordpress.com/2008/01/elevation2.thumbnail.png" medium="image">
			<media:title type="html">elevation.png</media:title>
		</media:content>
	</item>
	</channel>
</rss>
