shoorick: (Рыжий)
За весь отпуск на велосипеде пройдено совсем мало — километров сорок едва ли наберётся.

Прокатился по Самаре (точнее, возле Мастрюковских озёр — они находятся на территории Красноглинского района города), вдоль берега Тургояка (по знакомым дорогам) да возле Шемахи, заехав в какую-то почти непроходимую чащу.

Граф велошатаний, как и в начале мая, по-прежнему состоит из 11 областей — минус Медведево плюс Самара: )
shoorick: (На велосипеде)
В минувшие выходные слегка прокатился возле берегов Аргазинского водохранилища — размялся и собрал немного треков местных дорог для OSM. Сегодня обновил граф велошатаний — получается, что он состоит уже из девяти несвязных областей. Надо связывать!

Граф велошатаний
shoorick: (Default)
Обнаружил у Анатолия Шарифулина в твитере ссылочку на очередной метод построения картинок без помощи графического редактора: ditaa — программа, которая чертит диаграммы, принимая в качестве исходного текста обычный текстовой файл, где нужные фигуры обозначены нарисованы символами <:*|+->. Я попробовал — получается. Например, из файла, описывающего некую структуру базы данных
              /---------------------------\
+---------+   : +----------+    +-------+ |
| pages   |   | | user     |    | group | |
+---------+   | +----------+    +-------+ |
| id      | +-->* id       | +->* id    | |
| owner   *-+ | | group    *-+  | name  | |
| title   |   | | login    |    | descr | |
| content |   | | password |    +-------+ |
+---------+   | +----------+              |
              \---------------------------/

получается картинка:

Результат работы ditaa

Русский язык поддерживается, помимо прямоугольников доступны и другие распространённые фигуры: можно рисовать не только структуры баз данных, но и схемы алгоритмов. Написано на яве, то есть долно быть кроссплатформенным. Под убунтой работает.
shoorick: (Default)
Что-то я не вижу нормальных методов менять внешний вид графа. Приходится использовать грязный хак, напрямую обращаясь к полям объекта, созданного при генерации графа:
# Dirty hack: direct access
$graph->{'RANK_DIR'} = 1;
$graph->{'NODE_ATTRS'}->{'fontname'} = 'DejaVuSansCondensed';
$graph->{'NODE_ATTRS'}->{'fontsize'} = 8;
$graph->{'EDGE_ATTRS'}->{'color'} = 'grey';
Получаем:
Дерево
Cкрипт (а точнее, GraphViz) может ругаться на отсутствие шрифтов:
Error: Could not find/open font
Чтобы не ругался, ему можно указать путь к шрифтам, например в переменной окружения DOTFONTPATH.
shoorick: (Default)
Вчера сгоряча чуть было не написал программулину по рисованию дерева со структурой XML-файла. Даже, взяв напильник, слегка обточил какой-то старый скрипт разбора XML так, что он стал выдавать вместо текста вида
root
:  + first
:  :  + one
:  + second
+ three
исходный текст для GraphViz, из которого уже можно получать картинки.

Сегодня, погуглив на свежую голову, нашёл, что на CPAN, конечно же, есть нужный модуль. Теперь нарисовать дерево можно совсем просто:
#!/usr/bin/perl -w

use GraphViz::XML;
use File::Slurp;

my $data = read_file shift @ARGV;
my $graph = GraphViz::XML->new($data);
print $graph->as_png;
Получается такая картинка:
Структура XML-файла
Если нужен другой формат готовой картинки, то помимо PNG, модулем поддерживаются и другие форматы, как растровые (GIF, JPEG), так и векторные (PostScript, SVG) — для этого предназначены методы с вполне предсказуемыми именами as_gif, as_jpeg, as_ps, as_svg и т. п. А если не устраивает внешний вид графа, можно получить исходный dot-файл — для этого существуют методы as_canon и as_text: второй, в отличие от первого, выдаёт ещё и координаты вершин.

Можно ещё попробовать указать нужные свойства графа прямо в скрипте. Но это уже совсем другая история.
shoorick: (Default)
Когда-то задумался: почему степные озёра солёные, а горные — пресные. Может, потому, что горные — проточные?
Накидал граф, убедился, что гипотеза подтвердилась, забыл.
А тут, читая тред в graphграфском ЖЖ, вспомнил об этом графе. Пришлось раскопать своих подвалов, найти граф, подновить да и выкинуть в сеть здоровенный PNG на 50 кБ.
shoorick: (Рыжий)
Вчера услышал, что производится очередная замена телефонных номеров: 93 => 90

Это чё ж выходит? За последний десяток лет сменили не менее чем у полутора десятков АТС. Ой!
Замена номеров
shoorick: (Рыжий)
После извещения о роЖЖдении skorpoishaСкорпиоши развернулась дискуссия, в которой, помимо прочего, задумались относительно того, кто кому папа-мама.

Решил нарисовать:
Папа-мама

# dot file for Chelyabinsk:
digraph G {
  {
  node [URL="http://www.livejournal.com/userinfo.bml?user=\N"]
  node [fontsize=10, color=lightskyblue, style=filled]
  edge [arrowsize=0.7]
  
# Сообщества
  { node [shape=doublecircle] uralochka}
# Иногородние
  { node [color=yellow]
  dymka xfyre tainos igors paranoidality lakmus antonme corzo yhh}

# Кто кому папа-мама
# Челябинск

# Агитация и причастность вообще
  edge [color=cornflowerblue]
  shoorick -> { aka_scandale aliska_fly ant_r anyutka artyom dryhlya lench mcilove }
  shoorick -> { mitlosh pa_namka skorpiosha tanush vasiliev zauberer zyakwa }
  bootyavka -> { "graph" frambozensmaak iskif velga }
  tanush -> { vasiliev mikle }
  zyakwa -> { vasiliev pa_namka yhh }
  sopelka-> { fantom_k gour freckle_ bivis }
  kdlog -> aisedora
  mope_ru -> { dr_prog nikta }
  "graph" -> { olha alex_sherman honner }
  frambozensmaak -> zauberer
  prickle_ -> { uran_238 leha_ }
  mcilove -> { ynga }
  hobober -> { basyanya dennisgorelik }
  kankana -> { panferov }
  freckle_ -> { orthan klevernaya }

# Именно коды
  edge [color=maroon, style="setlinewidth(2)"]
  kukushk -> shoorick -> bootyavka -> petrolium -> "graph" -> frambozensmaak -> corzo -> iskif
  skorpiosha -> mcilove -> olha -> honner
  slach -> denswor
  gour -> melhiora
  sopelka -> uralochka -> fantom_k -> kankana -> dimkasan -> aisedora
  aisedora -> hobober -> eilte -> sneaky_ -> basyanya
  fantom_k -> { dennisgorelik yhh }
  greyslin -> kdlog
  tanush -> velogirl -> advis -> dryhlya -> pa_namka -> ant_r
  sappa -> ping8 -> aiz -> maxss -> colba
  bitlz -> virux
  zyakwa -> artyom -> aliska_fly -> anyutka -> ynga -> lench
  alex_black -> prickle_ -> lyaisana -> alex_sherman -> uran_238 -> leha_
  bivis -> mope_ru -> shu5010 -> dr_prog
  aka_scandale -> zauberer -> vasiliev -> mitlosh
  kbace4ka -> klevernaya

# Корни
  xfyre->{kukushk}
  igors->{skorpiosha aka_scandale}
  dymka->{sopelka}
  tainos->{tanush}
  paranoidality->{slach}
  lakmus->{greyslin}
  antonme->{zyakwa}

  }
}
Кто ещё?

Папой-мамой считается тот, кто позвал тебя в ЖЖ или дал код. Посему я смело причисляю к дочерям свом не только bootyavkaЮльку, но и tanushТанюш, и skorpioshaСкорпиошу

История добавок:

  • 11.10, 19:04 —   7 лжеюзеров
  • 11.10, 19:45 — 12
  • 14.10, 11:15 — 14
  • 14.10, 13:11 — 16. Добавлены иногородние корни (жёлтые)
  • 18.10, 20:59 — 22. Ныне несуществующие журналы — белые с рыжей каймой
  • 18.10, 21:52 — 23. Агитация — синяя стрелка, код — коричневая
  • 23.10, 17:12 — 26. Предполагаемая связь — серая стрелка
  • 24.10, 13:05 — 28. Проектируемые лжеюзеры — белые с голубой каймой. Стрелки — голубые
  • 25.10, 09:47 — 30.
  • 28.10, 09:15 — 32.
  • 29.10, 10:37 — 35.
  • 13.01, 15:19 — 52.
  • 13.01, 20:42 — 54.
  • 14.01, 12:12 — 55. Код — жирная бордовая стрелка
  • 27.01, 18:34 — 64.
  • 31.01, 19:16 — 65.
  • 21.01, 19:16 — 78.

shoorick: (Default)
Если кто рисует графы дружб, то есть список челябинцев.
Пользовать так: в выкачанном файле твой_ник.dot меняем строку
  "твой_ник" [color=yellow, style=filled]
на:
# Челябинские лжеюзеры
  { node [color=yellow]
  "graph" aisedora alex_black andrew_moran ava_schatz bitlz
  bootyavka bullin chooda denswor dimkasan eilte fantom_k
  freckle_ gour greyslin hobober kankana kbace4ka kdlog
  kukushk melhiora netsurfer openixxx paslen petrolium
  prickle_ pushistik shilov shoorick slach sopelka tanush
  uralochka }
  твой_ник [color=orange]
И получается толпа жёлтых челябинцев и рыжий виновник торжества.
shoorick: (Default)
Надобавлял друзей, сам был добавлен

Тут свежая версия картинки: 919 x 866, 39 кБ )

Заодно идея для [livejournal.com profile] goura: не самый лучший из вариантов, но:
а что если брать всё же описания графов и делать результат на их основе? Как показала практика, пропадают связи меж друзьями интересующей нас персоны. Но связи меж этой персоной и друзьями (равно как и обратные: от того, кому он friend of, к нему) все есть. Может, имеет смысл выкачавать соответствующий .dot, оставлять там только строки, где упоминается конкретный юзер, а потом (рекурсивно ли?) проделать аналогичную операцию для всех его друзей в обе стороны. Я усомнился в рекурсивности, ибо глубина рекурсии слишком мала, хотя и имеет место.

Правда, зависимость трафика от числа друзей нелинейна: если твой файл весит полтора кила, то файл для меня весит 7 кг, а у дружелюбного [livejournal.com profile] paslenа — свыше 120
shoorick: (Default)
Общественность интересовалась дружностью, а может и дружбованием. Посему — набор картинок. Правда, мал-мала глюкавых: не все связи есть на них... Делал, пока не надоело. Кому из неперечисленных надо — напишите, сделаю как-нить...
andrew_moran3188
ava_schatz58756
bitlz18294
bootyavka19601
chooda2006
denswor10291
fantom_k4557
gour3664
graph2419
greyslin15830
kankana6883
kbace4ka5048
kdlog19325
kukushk14340
petrolium5476
pushistik5635
shilov57705
shoorick23009
slach98232
sopelka33146
shoorick: (Default)
Тут вот [livejournal.com profile] gour интересовался дружбованьем народным

Об ём: ava_schatz bootyavka fif gour shilov shoorick slach sopelka

Profile

shoorick: (Default)
shoorick

December 2016

S M T W T F S
    1 23
45678910
11121314151617
18 19 2021222324
25262728293031

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 13th, 2025 05:02 pm
Powered by Dreamwidth Studios