Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.
2014-01-31
ArcMap – Hadoop
Posted by
Valentin
at
12:30
0
comments
2014-01-30
Проблема демократии
Posted by
Valentin
at
12:30
0
comments
Labels: gov.ru
2014-01-29
Package
mkdir ~/projects/translit.bot; pushd ~/projects/translit.bot
virtualenv --no-site-packages env source env/bin/activate
CHANGELOG COPYING README.rst
mkdir translitbot
translitbot/__init__.py
translitbot/__main__.py
python -m translitbot
#!/usr/bin/env python # -*- mode: python; coding: utf-8 -*- from translitbot.translit_xmpp_bot import main main()
Posted by
Valentin
at
12:30
0
comments
Labels: python
2014-01-28
Норматив
fgz = cStringIO.StringIO() with gzip.GzipFile(filename=FILENAME, mode='wb', fileobj=fgz) as gzip_obj: gzip_obj.write(STUFF_TO_GZIP) filesize = pycurl_simulator(fgz) print filesize
Posted by
Valentin
at
12:30
0
comments
Labels: python
2014-01-27
Hangouts
Posted by
Valentin
at
12:30
0
comments
Labels: im
2014-01-24
Интригующий заголовок
Posted by
Valentin
at
12:30
0
comments
Labels: citation
2014-01-23
Crunch
final PTable<Long, Long> counts = pipeline. readTextFile(args[0]). parallelDo(new PointInPolygon(), Writables.longs()). count();
Posted by
Valentin
at
12:30
0
comments
2014-01-22
backup
[repozo] recipe = zc.recipe.egg eggs = ZODB3 scripts = repozo
- bin/backup makes an incremental backup.
- bin/fullbackup always makes a full backup.
- bin/restore restores the latest backup.
- bin/snapshotbackup makes a full backup, separate from the regular backups. Handy for copying the current production database to your laptop or right before a big change in the site.
Posted by
Valentin
at
12:30
0
comments
Labels: Zope(Plone)
2014-01-21
Числа
Если кто плохо (как я) считает в уме, то возьмите калькулятор:
Posted by
Valentin
at
12:30
0
comments
2014-01-20
Total Trainer
original post http://vasnake.blogspot.com/2014/01/total-trainer.html
Posted by
Valentin
at
12:30
0
comments
Labels: video
2014-01-17
One reason why law in Russia is incoherent
Это Ян Митчел вот об этом пассаже:
Posted by
Valentin
at
12:30
0
comments
Labels: language
2014-01-16
За свободу надо бороться
На всякий случай я ролик скопипиздил http://youtu.be/szhB4hj91mQ
Posted by
Valentin
at
12:30
0
comments
Labels: gov.ru
2014-01-15
Коллбеки императивны
Posted by
Valentin
at
12:30
0
comments
Labels: JS, programming
2014-01-14
Побочные эффекты
# CREATE TABLE foo (id SERIAL NOT NULL PRIMARY KEY, value INTEGER NOT NULL); # INSERT INTO foo (value) SELECT i FROM generate_series(1, 1000000) i; # \timing # SELECT * FROM foo WHERE value = 1; Time: 124.278 ms # \! sudo sync # \! echo 3 | sudo tee -a /proc/sys/vm/drop_caches # SELECT * FROM foo WHERE value = 1; Time: 265.871 ms
Posted by
Valentin
at
12:30
0
comments
Labels: SQL
2014-01-13
Агрессор
Posted by
Valentin
at
12:30
0
comments
Labels: бытовуха
2014-01-10
О космонавтике
Планета
|
Радиус, млн. км
|
---|---|
Меркурий
|
0,11
|
Венера
|
0,62
|
Земля
|
0,93
|
Марс
|
0,58
|
Юпитер
|
48,5
|
Сатурн
|
54,4
|
Уран
|
52,0
|
Нептун
|
87,5
|
Высота, км
|
Параболическая
скорость, км/сек
|
---|---|
0
|
11,19
|
500
|
10,77
|
1000
|
10,40
|
2000
|
9,76
|
5000
|
8,37
|
10000
|
6,98
|
Планета
|
Параболическая
скорость, км/сек
|
---|---|
Меркурий
|
4,15
|
Венера
|
10,25
|
Земля
|
11,19
|
Луна
|
2,36
|
Марс
|
5,09
|
Юпитер
|
60,2
|
Сатурн
|
36,2
|
Уран
|
21,4
|
Нептун
|
23,4
|
Posted by
Valentin
at
12:30
0
comments
Labels: Book
2014-01-09
Пошлина
Posted by
Valentin
at
12:30
0
comments
Labels: gov.ru
2014-01-08
CoffeeScript
npm install -g coffee-script
set wd=%~dp0 pushd "%wd%" coffee -w -c -o c:\mapedit\javascript\vs\obj\ c:\mapedit\javascript\vs\
require("vs/meapp"], function(meapp) { try {vsapp.log('try vsapp');} catch(ex) {vsapp = new meapp();} vsapp.log(" vsapp ready");
require(["vs/obj/meapp"], function(meapp) { try {vsapp.log('try vsapp');} catch(ex) {vsapp = new meapp();} vsapp.log(" vsapp ready");
Ниже тройной гист с кодом:
// deprecated. using meapp.coffee now | |
console.log('meapp enter'); | |
var vappFactory = null; | |
define( | |
["dojo/_base/declare", "dojo/dom", 'dojo/has', | |
"vs/mpvlib"], | |
function(declare, dom, has, mpvlib) { | |
console.log('meapp dojo/define. define app classes'); | |
try {vslib.log('try vslib');} catch(ex) {vslib = new mpvlib();} | |
vslib.log('vs.mpvlib declare vappFactory'); | |
vappFactory = { | |
constructor: function(args) { | |
vslib.log('vs.meapp constructor'); | |
declare.safeMixin(this, args); | |
}, | |
//Create menu of editor options | |
createEditorMenu : function createEditorMenu() { | |
require( | |
["dijit/Menu", | |
"dijit/MenuItem", | |
"dijit/CheckedMenuItem", | |
"dijit/MenuSeparator", | |
"dijit/PopupMenuItem", | |
"dojo/domReady!"], | |
dojo.hitch(this, function(Menu, MenuItem, CheckedMenuItem, MenuSeparator, PopupMenuItem){ | |
this.log("createEditorMenu"); | |
// editor menu | |
var menu = new dijit.DropDownMenu({ | |
style : "display: none;" | |
}); | |
var menuItem = new dijit.MenuItem({ | |
label : "Шаблоны", | |
iconClass : "dijitIconSearch", | |
onClick : function() { | |
console.log("editor menu, templates menuitem onclick. ", arguments); | |
navigateStack('editPanel'); | |
} | |
}); | |
menu.addChild(menuItem); | |
// tables submenu | |
var tabsmenu = new Menu(); | |
tabsmenu.addChild(new MenuItem({ | |
label: "Отключающие устройства", | |
iconClass : "dijitFolderOpened", | |
onClick : dojo.hitch(this, function() { | |
console.log("editor menu, table onclick. ", arguments); | |
this.loadFCTable("http://cgis.allgis.org/arcgis/rest/services/edit_Газовая_сеть/FeatureServer/0"); | |
}) | |
})); | |
tabsmenu.addChild(new MenuItem({ | |
label: "СКЗ", | |
iconClass : "dijitFolderOpened", | |
onClick : dojo.hitch(this, function() { | |
console.log("editor menu, table onclick. ", arguments); | |
this.loadFCTable("http://cgis.allgis.org/arcgis/rest/services/edit_Газовая_сеть/FeatureServer/1"); | |
}) | |
})); | |
tabsmenu.addChild(new MenuItem({ | |
label: "Газопроводы", | |
iconClass : "dijitFolderOpened", | |
onClick : dojo.hitch(this, function() { | |
console.log("editor menu, table onclick. ", arguments); | |
this.loadFCTable("http://cgis.allgis.org/arcgis/rest/services/edit_Газовая_сеть/FeatureServer/2"); | |
}) })); | |
tabsmenu.addChild(new MenuItem({ | |
label: "ГРП", | |
iconClass : "dijitFolderOpened", | |
onClick : dojo.hitch(this, function() { | |
console.log("editor menu, table onclick. ", arguments); | |
this.loadFCTable("http://cgis.allgis.org/arcgis/rest/services/edit_Газовая_сеть/FeatureServer/3"); | |
}) })); | |
menu.addChild(new PopupMenuItem({ | |
label: "Таблицы", | |
popup: tabsmenu, | |
iconClass : "dijitFolderOpened" | |
})); | |
// create dropdown button to display menu | |
var menuButton = new dijit.form.DropDownButton({ | |
label : "Редактирование", | |
id : 'editorDropDownButton', | |
title : "Шаблоны, таблицы", | |
dropDown : menu, | |
iconClass : "dijitFolderOpened" | |
}); | |
menuButton.startup(); | |
dojo.byId('webmap-toolbar-left').appendChild(menuButton.domNode); | |
})); | |
}, // createEditorMenu | |
//this.loadFCTable("http://cgis.allgis.org/arcgis/rest/services/edit_Газовая_сеть/FeatureServer/0"); | |
loadFCTable: function(fcUrl) { | |
this.log("loadFCTable"); | |
console.debug("loadFCTable. fcUrl: ", arguments); | |
}, // loadFCTable | |
log: function(str, doalert) { // write app messages to log | |
vslib.log("vs.meapp." + str, doalert); | |
} // log | |
}; // vlibFactory | |
vslib.log('meapp dojo/declare vs.meapp'); | |
return declare("vs.meapp", null, vappFactory); | |
} | |
); // define | |
console.log('meapp leave'); |
### | |
Mapedit app classes. | |
Author: vasnake@gmail.com | |
### | |
console.log "meapp enter" | |
if vappFactory? | |
alert "vappFactory defined already!" | |
else | |
vappFactory = {} | |
define(["dojo/_base/declare", "dojo/dom", 'dojo/has', "vs/mpvlib"], | |
(declare, dom, has, mpvlib) -> | |
console.log 'meapp dojo/define. define app classes' | |
try | |
vslib.log('try vslib') | |
catch | |
window.vslib = new mpvlib() | |
vslib.log('vs.mpvlib declare vappFactory') | |
vappFactory = { # meapp object factory | |
# used as: require(["vs/obj/meapp"], function(meapp) { vsapp = new meapp(); ... | |
constructor: (args) -> | |
vslib.log('vs.meapp constructor') | |
declare.safeMixin(this, args) | |
log: (str, doalert) -> # write app messages to log | |
vslib.log("vs.meapp.#{str}", doalert); | |
# this.loadFCTable("http://cgis.allgis.org/arcgis/rest/services/edit_Газовая_сеть/FeatureServer/0"); | |
loadFCTable: (fcUrl, fcName = '') -> | |
this.log("loadFCTable") | |
console.debug("loadFCTable. fcUrl: ", arguments) | |
# Create editor menu | |
createEditorMenu : () -> | |
require( | |
["dijit/Menu", | |
"dijit/MenuItem", | |
"dijit/CheckedMenuItem", | |
"dijit/MenuSeparator", | |
"dijit/PopupMenuItem", | |
"dojo/domReady!"], | |
dojo.hitch(this, | |
(Menu, MenuItem, CheckedMenuItem, MenuSeparator, PopupMenuItem) -> | |
this.log("createEditorMenu") | |
# tables submenu | |
subdata = [ | |
{label: "Отключающие устройства", url: "http://cgis.allgis.org/arcgis/rest/services/edit_Газовая_сеть/FeatureServer/0"}, | |
{label: "СКЗ", url: "http://cgis.allgis.org/arcgis/rest/services/edit_Газовая_сеть/FeatureServer/1"}, | |
{label: "Газопроводы", url: "http://cgis.allgis.org/arcgis/rest/services/edit_Газовая_сеть/FeatureServer/2"}, | |
{label: "ГРП", url: "http://cgis.allgis.org/arcgis/rest/services/edit_Газовая_сеть/FeatureServer/3"} | |
] | |
self = this | |
tabsmenu = new Menu | |
tabsmenu.addChild new MenuItem { | |
label: sd.label, | |
iconClass : "dijitFolderOpened", | |
fClassUrl: sd.url, | |
onClick : () -> | |
console.log("editor menu, table menuitem onclick. ", arguments) | |
self.loadFCTable(this.fClassUrl, this.label) | |
} for sd, idx in subdata | |
# editor menu | |
menu = new dijit.DropDownMenu { style : "display: none;" } | |
menu.addChild MenuItem { | |
label : "Шаблоны", | |
iconClass : "dijitIconSearch", | |
onClick : () -> | |
console.log("editor menu, templates menuitem onclick. ", arguments) | |
navigateStack('editPanel') | |
} | |
menu.addChild new PopupMenuItem { | |
label: "Таблицы", | |
popup: tabsmenu, | |
iconClass : "dijitFolderOpened" | |
} | |
# create dropdown button to display menu | |
menuButton = new dijit.form.DropDownButton { | |
label : "Редактирование", | |
id : 'editorDropDownButton', | |
title : "Шаблоны, таблицы", | |
dropDown : menu, | |
iconClass : "dijitFolderOpened" | |
} | |
menuButton.startup | |
dojo.byId('webmap-toolbar-left').appendChild(menuButton.domNode) | |
) # dojo.hitch | |
) # require | |
# createEditorMenu | |
} # vappFactory | |
vslib.log('meapp dojo/declare vs.meapp') | |
# return from define | |
declare("vs.meapp", null, vappFactory) | |
# define inner function | |
) # dojo/define | |
console.log "meapp leave" |
// Generated by CoffeeScript 1.6.3 | |
/* | |
Mapedit app classes. | |
Author: vasnake@gmail.com | |
*/ | |
(function() { | |
var vappFactory; | |
console.log("meapp enter"); | |
if (typeof vappFactory !== "undefined" && vappFactory !== null) { | |
alert("vappFactory defined already!"); | |
} else { | |
vappFactory = {}; | |
} | |
define(["dojo/_base/declare", "dojo/dom", 'dojo/has', "vs/mpvlib"], function(declare, dom, has, mpvlib) { | |
console.log('meapp dojo/define. define app classes'); | |
try { | |
vslib.log('try vslib'); | |
} catch (_error) { | |
window.vslib = new mpvlib(); | |
} | |
vslib.log('vs.mpvlib declare vappFactory'); | |
vappFactory = { | |
constructor: function(args) { | |
vslib.log('vs.meapp constructor'); | |
return declare.safeMixin(this, args); | |
}, | |
log: function(str, doalert) { | |
return vslib.log("vs.meapp." + str, doalert); | |
}, | |
loadFCTable: function(fcUrl, fcName) { | |
if (fcName == null) { | |
fcName = ''; | |
} | |
this.log("loadFCTable"); | |
return console.debug("loadFCTable. fcUrl: ", arguments); | |
}, | |
createEditorMenu: function() { | |
return require(["dijit/Menu", "dijit/MenuItem", "dijit/CheckedMenuItem", "dijit/MenuSeparator", "dijit/PopupMenuItem", "dojo/domReady!"], dojo.hitch(this, function(Menu, MenuItem, CheckedMenuItem, MenuSeparator, PopupMenuItem) { | |
var idx, menu, menuButton, sd, self, subdata, tabsmenu, _i, _len; | |
this.log("createEditorMenu"); | |
subdata = [ | |
{ | |
label: "Отключающие устройства", | |
url: "http://cgis.allgis.org/arcgis/rest/services/edit_Газовая_сеть/FeatureServer/0" | |
}, { | |
label: "СКЗ", | |
url: "http://cgis.allgis.org/arcgis/rest/services/edit_Газовая_сеть/FeatureServer/1" | |
}, { | |
label: "Газопроводы", | |
url: "http://cgis.allgis.org/arcgis/rest/services/edit_Газовая_сеть/FeatureServer/2" | |
}, { | |
label: "ГРП", | |
url: "http://cgis.allgis.org/arcgis/rest/services/edit_Газовая_сеть/FeatureServer/3" | |
} | |
]; | |
self = this; | |
tabsmenu = new Menu; | |
for (idx = _i = 0, _len = subdata.length; _i < _len; idx = ++_i) { | |
sd = subdata[idx]; | |
tabsmenu.addChild(new MenuItem({ | |
label: sd.label, | |
iconClass: "dijitFolderOpened", | |
fClassUrl: sd.url, | |
onClick: function() { | |
console.log("editor menu, table menuitem onclick. ", arguments); | |
return self.loadFCTable(this.fClassUrl, this.label); | |
} | |
})); | |
} | |
menu = new dijit.DropDownMenu({ | |
style: "display: none;" | |
}); | |
menu.addChild(MenuItem({ | |
label: "Шаблоны", | |
iconClass: "dijitIconSearch", | |
onClick: function() { | |
console.log("editor menu, templates menuitem onclick. ", arguments); | |
return navigateStack('editPanel'); | |
} | |
})); | |
menu.addChild(new PopupMenuItem({ | |
label: "Таблицы", | |
popup: tabsmenu, | |
iconClass: "dijitFolderOpened" | |
})); | |
menuButton = new dijit.form.DropDownButton({ | |
label: "Редактирование", | |
id: 'editorDropDownButton', | |
title: "Шаблоны, таблицы", | |
dropDown: menu, | |
iconClass: "dijitFolderOpened" | |
}); | |
menuButton.startup; | |
return dojo.byId('webmap-toolbar-left').appendChild(menuButton.domNode); | |
})); | |
} | |
}; | |
vslib.log('meapp dojo/declare vs.meapp'); | |
return declare("vs.meapp", null, vappFactory); | |
}); | |
console.log("meapp leave"); | |
}).call(this); |
Posted by
Valentin
at
12:30
0
comments
Labels: JS
2014-01-07
Semantic MediaWiki
Form:Сотрудник
и в первом приближении выглядит так:<noinclude>Этот текст будет показан при просмотре страницы.
Обычно он содержит описание формы.
Само определение формы находится внутри тега includeonly.</noinclude>
<includeonly>
{{{for template|Сотрудник}}}
Должность: {{{field|Должность}}}
Отдел: {{{field|Отдел}}}
{{{end template}}}
</includeonly>
Введите Фамилию Имя Отчество сотрудника чтобы создать или редактировать его страницу:
{{#forminput:form=Сотрудник}}
Результатом будет поле ввода названия новой/редактируемой страницы и кнопка:
Как и ожидается, по нажатию на кнопку откроется страница с формой:
[[Отдел::особый]]
В нашем шаблоне Должность и Отдел — естественные кандидаты на роль свойств. Зафиксируем это в шаблоне:
Должность: [[Должность::{{{Должность}}}]]
Отдел: [[Отдел::{{{Отдел}}}]]
[[Category:Сотрудник]]
Визуально практически ничего не изменилось — вместо определения свойства выводится его значение, то есть значение параметра шаблона
{{#ask: [[Category:Сотрудник]]
|?Должность
|?Отдел
|format=table}}
Сначала пара слов для общего понимания синтаксиса:
{{#f: ... }}
— это
вызов функции с именем f. Функции
определяются в расширениях, я не пробовал
определять их. Вертикальные палки
разделяют параметры функции. То есть,
мы имеем вызов функции ask с четырьмя
параметрами.Этот запрос состоит их двух частей. Первая часть (первый параметр функции ask) выбирает страницы, удовлетворяющие определённому правилу. В данном случае — принадлежащие категории
Сотрудник
. Вторая часть
(остальные параметры) определяет способ
вывода результатов. В данном случае это
будет таблица с тремя столбцами:- Имя страницы. Столбец выводится по умолчанию, но это можно подавить при необходимости параметром
mainlabel=-
. - Должность. Этот уже мы задали.
- Отдел. И этот тоже мы.
Posted by
Valentin
at
12:30
0
comments
Labels: DBMS
2014-01-06
Евангелист
// destroy grid // освободить хандлеры событий if(featureEditor.dgridRowClickListener != null) featureEditor.dgridRowClickListener.remove(); if(featureEditor.dgridCellDblClickListener != null) featureEditor.dgridCellDblClickListener.remove(); featureEditor.dgridRowClickListener = null; featureEditor.dgridCellDblClickListener = null; // грохнуть грид. Пичалька, но тут пропадает DOM элемент, поэтому приходится его пересоздавать if(featureEditor.grid) { featureEditor.loadingIcon.destroy(); featureEditor.grid.revert(); featureEditor.grid.destroy(); featureEditor.grid = null; dojo.place('<div id="grid" class="grid1"></div>', 'grid-legend-parent', 'before'); } ... // когда надо, создаем грид featureEditor.store = new Memory({ data: [], idProperty: fields[0].field // OBJECTID probably }); // Dojo's dGrid var DataGrid = declare([OnDemandGrid, Selection, CellSelection, Keyboard]); featureEditor.grid = new DataGrid({ store: featureEditor.store, columns: fields, selectionMode: 'single' /*, noDataMessage:'Nothing found.' */ }, 'grid'); featureEditor.grid.startup(); featureEditor.utils._setListeners(); ... // и когда надо, обновляем данные в гриде featureEditor.grid.set("store", featureEditor.store); featureEditor.grid.refresh(); |
Posted by
Valentin
at
12:30
0
comments