Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
#[[RepRap wiki|http://ru.wikipedia.org/wiki/RepRap]]
#[[RepRap 3D принтер Gen X|http://skb-kiparis.ru/products]]
#[[3D принтер Люмен|http://cnc.maket-city.ru/index.php/shop/oborudovanie]]
#[[3DPrintoPedia|http://wiki.livelyminds.ru/w/Заглавная_страница]]
#[[MakerBot wiki|http://en.wikipedia.org/wiki/MakerBot_Industries]]
#[[RepRap Хамелеон|http://reprap-russia.org/]]
#[[Makerbot Replicator|http://www.thingprint.ru/models.php]]
#[[Народный 3D принтер|http://habrahabr.ru/company/materialise/blog/94193/]]
#[[fabathome.org|http://www.fabathome.org/]]
#[[printandplay.ru|http://printandplay.ru/]]
#[[open3dprinter.ru|http://www.open3dprinter.ru/]]
#[[sexshop3d.com|http://sexshop3d.com/store/]]
#[[Подвешиваем CD-диск, или практический пример моделирования на базе OpenSCAD для 3д печати|http://habrahabr.ru/company/makeitlab/blog/219601/]]
#[[OpenSCAD - Введение |http://www.lugrap.com/2013/11/openscad-beginning.html]]
#[[OpenSCAD/Преобразования|https://ru.wikibooks.org/wiki/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F_%D0%BF%D0%BE_OpenSCAD/%D0%9F%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F]]
#[[OpenSCAD/Примитивы|https://ru.wikibooks.org/wiki/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F_%D0%BF%D0%BE_OpenSCAD/%D0%9F%D1%80%D0%B8%D0%BC%D0%B8%D1%82%D0%B8%D0%B2%D1%8B_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BC%D0%BD%D1%8B%D1%85_%D1%82%D0%B5%D0%BB#.D0.9C.D0.BD.D0.BE.D0.B3.D0.BE.D0.B3.D1.80.D0.B0.D0.BD.D0.BD.D0.B8.D0.BA]]
{{{
(o_
(o_ (o_ //\
(/)_ (/)_ V_/_
}}}
{{{
(o_
//\
V_/_
}}}
{{{
(o_
(/)_
}}}
{{{
(\__/)
(='.'=)
(")_(")
}}}
{{{
(\ /)
(•.•)
(")(")
}}}
{{{
(\(\
(='.')
(,(")(")
}}}
{{{
(\ /)
( . .)
C('')('')
}}}
{{{
(\_/)
(o.O)
(> <)
}}}
{{{
(\_/)
(О.о)
(> <)
() ()
}}}
{{{
_ " _
(_\|/_)
(/|\)
}}}
{{{
(.\\//.)
\ () /
(_/\_)
}}}
{{{
o___o
(^o^)
o/( )\o
O_.^._O
}}}
{{{
@..@
(\--/)
(.>__<.)
^^^ ^^^
}}}
{{{
/\ /\
(‘• •’)
=*=
(\| |/)~~**
}}}
{{{
/|、
(゚、 。7
︱ ︶ヽ
_U U c )ノ
}}}
{{{
(¯)„(¯)
( ړײ)
/█\
(„)♥(”)
}}}
{{{
/|、
(゚、。7
︱︶ヽ
_UUc)ノ
}}}
{{{
()()
(ړײ) ♥
c(")(")
}}}
{{{
()"()
('o')
(„)(„)
}}}
{{{
()""()
( 'o' )
(‚‚)(‚‚)
}}}
{{{
()()
=(';')=
(")(")
}}}
{{{
/\_/\ ♥
>^,^<
/ \
’(___)__
}}}
{{{
()''""()
(. 'o'.)
==")=")<-@
("),,,(")
}}}
{{{
()"""()
("(,'o',)")
(") (")
}}}
{{{
/\__/\
| O_O |
\___ /
}}}
{{{
()_()_.-""-.,/)
; . . `; -._ , `)_
( o_ )` __,) `-._)
}}}
{{{
./|_ /|
.>^,^<
(_(__)
}}}
{{{
/\___/\
(_*+*_)
()<$>()
(_____)
}}}
{{{
../'´'´'\
.//^ ^\\
(/(_♥_)\)
._/''*''\_
(/_)^(_\)
}}}
{{{
◤------◥
| ● ▄ ◉ |
| ‿/ʊ\‿ |
| ══o══ |
︳ ︳ ︳ |⊃
}}}
{{{
/╲ ︵ ╱\
| (◉)(◉) |
\ ︶ V︶ /
/ ↺↺↺↺ \
}}}
{{{
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░║░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒
▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░║░╬▒▒▒▒▒▒▒▒▒▒▒▒▒▒
▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▓░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒
▒▒▒▒▒▒▒▒▒▒▒▒▒╬░░▓░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒
▒▒▒▒▒▒▒▒▒▒▒▒▒░░▐▓▌░░▒▒▒▒▒▒▒▒▒▒▒▒▒
▒▒▒▒▒▒▒▒▒▒▒▒▒░░▐▓▌░░▒▒▒▒▒▒▒▒▒▒▒▒▒
▒▒▒▒▒▒▒▒▒▒▒▒▒░░▐▓▌░░▒▒▒▒▒▒▒▒▒▒▒▒▒
▒▒▒▒▒▒▒▒▒░░░░░░▄▓▄░░░╬░░▒▒▒▒▒▒▒▒▒
▒▒▒▒▒╬░░░░░░▄▄█████▄▄░░░░░░░▒▒▒▒▒
▒▒▒▒░░▄▄▄███████████████▄▄▄░░▒▒▒▒
▒▒▒▒░░▐░░░▀▓▓▒▓▓▒▓▓▒▓▓▀░░░▌░░▒▒▒▒
▒▒▒▒░░░░░▄█████████████▄░░░╬░▒▒▒▒
▒▒▒░░▄▄███████████████████▄▄░░▒▒▒
▒▒▒░░▐░░░▀▓▓▒▓▓▓▒▓▓▓▒▓▓▀░░░▌░░▒▒▒
▒▒▒▒░░░▒░░▓▓▓▓▓▓▓▓▓▓▓▓▓░░▒░░░▒▒▒▒
▒▒▒░╬░░░▄███████████████▄░░░░░▒▒▒
▒▒░░▄▄█████████████████████▄▄░░▒▒
▒▒░░▐░░░▀▓▓▒▓▓▓▓▒▓▓▓▓▒▓▓▀░░░▌░░▒▒
▒▒▒░░░▒░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░▒░░░▒▒▒
▒▒░░░░░▄█████████████████▄░░░░╬▒▒
▒░░▄▄███████████████████████▄▄░░▒
▒░░▐░░░▀▓▓▒▓▓▓▓▓▒▓▓▓▓▓▒▓▓▀░░░▌░░▒
▒▒░░░▒░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░▒░░░▒▒
▒░╬░░░▄███████████████████▄░░░░░▒
░░▄▄█████████████████████████▄▄░░
░░▐░░░▀▓▓▒▓▓▓▓▓▓▒▓▓▓▓▓▓▒▓▓▀░░░▌░░
▒░░▄▄███████████████████████▄▄░░▒
▒▒░░░▓║║▓║║▓║║▓█▓█▓║║▓║║▓║║▓░░░╬▒
▒╬░░▄▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▄░░▒▒
░░▄██████████▓▄▄▄▄▄▓██████████▄░░
▄████████████▓▄▄▄▄▄▓████████████▄
}}}
{{{
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░▐▀▄▐▀█▐█▐▌▌▀█▀░▐▀▄▐▀█▐█▐▌█▐▀░
░░▐░█▐░█▐▐█▌░░█░░▐▄█▐▀█▐▐█▌█▐░░
░░▐█▀▐██▐▐█▌░░█░░▐░░▐░█▐▐█▌█▐█░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░▄▀▀▀▀▀▀▀▄░░░░░░░░░░░
░░░░░░░░░▄▀░░░░░░░░░▀▄░░░░░░░░░
░░░░░░░░▄██▄██▄░▄██▄██▄░░░░░░░░
░░░░░░░░██████▀░▀██████░░░░░░░░
░░░░░░░░█▀███▀░░░▀███▀█░░░░░░░░
░░░░░░░░▀▄░▀░░░░░░░▀░▄▀░░░░░░░░
░░░░░░░░░░▀▄░░▀▀▀░░▄▀░░░░░░░░░░
░░░░░░░░░░░░▀▀▀▀▀▀▀░░░░░░░░░░░░
}}}
{{{
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░▐▀▄▐▀█▐█▐▌▌▀█▀░▐▀▄▐▀█▐█▐▌█▐▀░
░░▐░█▐░█▐▐█▌░░█░░▐▄█▐▀█▐▐█▌█▐░░
░░▐█▀▐██▐▐█▌░░█░░▐░░▐░█▐▐█▌█▐█░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░▄▀▀▀▀▀▀▀▄░░░░░░░░░░░
░░░░░░░░░▄▀░░░░░░░░░▀▄░░░░░░░░░
░░░░░░░░▄██▄██▄░▄██▄██▄░░░░░░░░
░░░░░░░░██████▀░▀██████░░░░░░░░
░░░░░░░░█▀███▀░░░▀███▀█░░░░░░░░
░░░░░░░░▀▄░▀░░░░░░░▀░▄▀░░░░░░░░
░░░░░░░░░░▀▄░░▀▀▀░░▄▀░░░░░░░░░░
░░░░░░░░░░░░▀▀▀▀▀▀▀░░░░░░░░░░░░
}}}
/***
|Name|AliasPlugin|
|Source|http://www.TiddlyTools.com/#AliasPlugin|
|Documentation|http://www.TiddlyTools.com/#AliasPluginInfo|
|Version|1.1.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Create text-substitution macros|
Define macros for abbreviations and other "aliases", and then embed them in the rest of your tiddler content to quickly insert common terms, phrases and links without a lot of repetitive typing.
!!!!!Documentation
> see [[AliasPluginInfo]]
!!!!!Revisions
<<<
2009.09.09 1.1.1 'tiddler' arg passed to wikify() so aliases containing macros render with correct context
| Please see [[AliasPluginInfo]] for previous revision details |
2005.08.12 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.AliasPlugin= {major: 1, minor: 1, revision: 1, date: new Date(2009,9,9)};
config.macros.alias= { };
config.macros.alias.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
var alias=params.shift(); if (!alias) return; alias=alias.replace(/ /g,"_"); // don't allow spaces in alias
if (config.macros[alias]==undefined) { // create new macro (as needed)
config.macros[alias] = { };
config.macros[alias].handler =
function (place,macroName,params,wikifier,paramString,tiddler)
{ wikify(config.macros[macroName].text.format(params),place,null,tiddler); }
}
config.macros[alias].text = params[0]?params.join(' '):alias; // set alias text
}
//}}}
<<miniBrowser noplayer http://www.amyeditor.com/api/embed/test_php.html>>
До тех пор, пока у меня есть [[HTC Tattoo]] и пока присутствует желание его улучшать, я обязуюсь выкладывать здесь различные интересные статьи и размышления о платформе [[Android]].
Как сделать снимок экрана:
{{{
adb pull /dev/graphics/fb0
convert -depth 8 -size 800x600 rgba:fb0 -separate -swap 0,2 -combine screen.png
}}}
или
{{{
adb pull /dev/graphics/fb0 fb0
ffmpeg -vframes 1 -vcodec rawvideo -f rawvideo -pix_fmt rgb32 -s 320x480 -i fb0 -f image2 -vcodec png image.png
}}}
дебаг нативных программ
{{{
strace programname
}}}
дебаг нативных программ
{{{
input tap x y
(also input text, swipe, keyevent are available)
adb shell input tap x y
adb shell input swipe x1 y1 x2 y2
adb shell input text Hello!
adb shell input keyevent ID
}}}
By this way you do not need to care about hardware implementation. Using events you will have to imeplemnt them for each device. All these commands could be executed on device or on PC via ADB.
Happy testing! (:
To send touch event you need to do:
1 Set coordinates:
{{{
adb shell sendevent /dev/input/event2 3 0 x
adb shell sendevent /dev/input/event2 3 1 y
}}}
2 Send touch event (must have 0 0 0 pair):
{{{
adb shell sendevent /dev/input/event2 1 330 1
adb shell sendevent /dev/input/event2 0 0 0
}}}
3 Send release finger event (must have 0 0 0 pair):
{{{
adb shell sendevent /dev/input/event2 1 330 0
adb shell sendevent /dev/input/event2 0 0 0
}}}
Please note:
1 You can record events:
{{{
adb shell getevent
}}}
How I did it:
1. Start dump motion event you need to reproduce:
{{{
~$ adb shell getevent | grep event2
}}}
grep is very useful to filter output.
2. Do motion event you want to reproduce;
3. Than just convert all values from hex in dump to decimal values! :)
To find what eventX is working for you do following:
1. Start terminal and type
{{{
~$ adb shell getevent
}}}
You will see quickly moving traces with for example /dev/input/event4 ......
2. Touch screen once
You must see between event4 few eventX and these eventX right in the moment of the touch
will be yours input interface for reproducing motion events! :)
enable wifi from svc
{{{
adb shell svc wifi enable
}}}
enable wifi from key events
{{{
adb shell am start -a android.intent.action.MAIN -n com.android.settings/.wifi.WifiSettings
adb shell input keyevent 20 & adb shell input keyevent 23
}}}
https://android-review.googlesource.com/#/
#[[start-stop-built-in-wi-fi-usb-tethering-from-code|http://stackoverflow.com/questions/3436280/start-stop-built-in-wi-fi-usb-tethering-from-code]]
#[[android-2-2-wifi-hotspot-api|http://stackoverflow.com/questions/3023226/android-2-2-wifi-hotspot-api]]
#[[can-i-emulate-a-wi-fi-connection-to-test-wi-fi-direct|http://stackoverflow.com/questions/13542531/can-i-emulate-a-wi-fi-connection-to-test-wi-fi-direct]]
#[[how-to-determine-wether-the-device-is-connecting-or-connected-to-a-wi-fi-hotspot|http://stackoverflow.com/questions/12329340/how-to-determine-wether-the-device-is-connecting-or-connected-to-a-wi-fi-hotspot]]
#[[via-wi-fi-hotspot-on-andr|http://stackoverflow.com/questions/8267207/how-to-start-a-local-network-connection-programmically-via-wi-fi-hotspot-on-andr]]
#[[how-to-turn-off-wifi-via-adb|http://stackoverflow.com/questions/10033757/how-to-turn-off-wifi-via-adb]]
#[[adb-shell-input-events|http://stackoverflow.com/questions/7789826/adb-shell-input-events]]
#[[screenshot-of-the-nexus-one-from-adb|http://stackoverflow.com/questions/2807070/screenshot-of-the-nexus-one-from-adb]]
#[[Автоматизация тестирования Android приложений|http://habrahabr.ru/company/intel/blog/152122/]]
{{{
ssh -D 4545 server
}}}
[[Хабра жжот|http://habrahabr.ru/post/158829/]]
# [[LOR|http://www.linux.org.ru/forum/talks/7722002]]
# [[chip-nn.ru|http://chip-nn.ru/30.php]]
# [[multion.ru|http://www.multion.ru/3d/index.html]]
# [[FreeDuino|http://www.freeduino.ru/arduino/dealers.html]]
# [[hobby-nn.ru|http://www.hobby-nn.ru/]]
/***
|Name|AttachFilePlugin|
|Source|http://www.TiddlyTools.com/#AttachFilePlugin|
|Documentation|http://www.TiddlyTools.com/#AttachFilePluginInfo|
|Version|4.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|AttachFilePluginFormatters, AttachFileMIMETypes|
|Description|Store binary files as base64-encoded tiddlers with fallback links for separate local and/or remote file storage|
Store or link binary files (such as jpg, gif, pdf or even mp3) within your TiddlyWiki document and then use them as images or links from within your tiddler content.
> Important note: As of version 3.6.0, in order to //render// images and other binary attachments created with this plugin, you must also install [[AttachFilePluginFormatters]], which extends the behavior of the TiddlyWiki core formatters for embedded images ({{{[img[tooltip|image]]}}}), linked embedded images ({{{[img[tooltip|image][link]]}}}), and external/"pretty" links ({{{[[label|link]]}}}), so that these formatter will process references to attachment tiddlers as if a normal file reference had been provided. |
!!!!!Documentation
>see [[AttachFilePluginInfo]]
!!!!!Inline interface (live)
>see [[AttachFile]] (shadow tiddler)
><<tiddler AttachFile>>
!!!!!Revisions
<<<
2009.06.04 [4.0.0] changed attachment storage format to use //sections// instead of embedded substring markers.
|please see [[AttachFilePluginInfo]] for additional revision details|
2005.07.20 [1.0.0] Initial Release
<<<
!!!!!Code
***/
// // version
//{{{
version.extensions.AttachFilePlugin= {major: 4, minor: 0, revision: 0, date: new Date(2009,6,4)};
// shadow tiddler
config.shadowTiddlers.AttachFile="<<attach inline>>";
// add 'attach' backstage task (insert before built-in 'importTask')
if (config.tasks) { // for TW2.2b or above
config.tasks.attachTask = {
text: "attach",
tooltip: "Attach a binary file as a tiddler",
content: "<<attach inline>>"
}
config.backstageTasks.splice(config.backstageTasks.indexOf("importTask"),0,"attachTask");
}
config.macros.attach = {
// // lingo
//{{{
label: "attach file",
tooltip: "Attach a file to this document",
linkTooltip: "Attachment: ",
typeList: "AttachFileMIMETypes",
titlePrompt: " enter tiddler title...",
MIMEPrompt: "<option value=''>select MIME type...</option><option value='editlist'>[edit list...]</option>",
localPrompt: " enter local path/filename...",
URLPrompt: " enter remote URL...",
tiddlerErr: "Please enter a tiddler title",
sourceErr: "Please enter a source path/filename",
storageErr: "Please select a storage method: embedded, local or remote",
MIMEErr: "Unrecognized file format. Please select a MIME type",
localErr: "Please enter a local path/filename",
URLErr: "Please enter a remote URL",
fileErr: "Invalid path/file or file not found",
tiddlerFormat: '!usage\n{{{%0}}}\n%0\n!notes\n%1\n!type\n%2\n!file\n%3\n!url\n%4\n!data\n%5\n',
//}}}
// // macro definition
//{{{
handler:
function(place,macroName,params) {
if (params && !params[0])
{ createTiddlyButton(place,this.label,this.tooltip,this.toggleAttachPanel); return; }
var id=params.shift();
this.createAttachPanel(place,id+"_attachPanel",params);
document.getElementById(id+"_attachPanel").style.position="static";
document.getElementById(id+"_attachPanel").style.display="block";
},
//}}}
//{{{
createAttachPanel:
function(place,panel_id,params) {
if (!panel_id || !panel_id.length) var panel_id="_attachPanel";
// remove existing panel (if any)
var panel=document.getElementById(panel_id); if (panel) panel.parentNode.removeChild(panel);
// set styles for this panel
setStylesheet(this.css,"attachPanel");
// create new panel
var title=""; if (params && params[0]) title=params.shift();
var types=this.MIMEPrompt+this.formatListOptions(store.getTiddlerText(this.typeList)); // get MIME types
panel=createTiddlyElement(place,"span",panel_id,"attachPanel",null);
var html=this.html.replace(/%id%/g,panel_id);
html=html.replace(/%title%/g,title);
html=html.replace(/%disabled%/g,title.length?"disabled":"");
html=html.replace(/%IEdisabled%/g,config.browser.isIE?"disabled":"");
html=html.replace(/%types%/g,types);
panel.innerHTML=html;
if (config.browser.isGecko) { // FF3 FIXUP
document.getElementById("attachSource").style.display="none";
document.getElementById("attachFixPanel").style.display="block";
}
return panel;
},
//}}}
//{{{
toggleAttachPanel:
function (e) {
if (!e) var e = window.event;
var parent=resolveTarget(e).parentNode;
var panel = document.getElementById("_attachPanel");
if (panel==undefined || panel.parentNode!=parent)
panel=config.macros.attach.createAttachPanel(parent,"_attachPanel");
var isOpen = panel.style.display=="block";
if(config.options.chkAnimate)
anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,"none"));
else
panel.style.display = isOpen ? "none" : "block" ;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
return(false);
},
//}}}
//{{{
formatListOptions:
function(text) {
if (!text || !text.trim().length) return "";
// get MIME list content from text
var parts=text.split("\n----\n");
var out="";
for (var p=0; p<parts.length; p++) {
var lines=parts[p].split("\n");
var label=lines.shift(); // 1st line=display text
var value=lines.shift(); // 2nd line=item value
out +='<option value="%1">%0</option>'.format([label,value]);
}
return out;
},
//}}}
// // interface definition
//{{{
css:
".attachPanel { display: none; position:absolute; z-index:10; width:35em; right:105%; top:0em;\
background-color: #eee; color:#000; font-size: 8pt; line-height:110%;\
border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;\
padding: 0.5em; margin:0em; -moz-border-radius:1em;-webkit-border-radius:1em; text-align:left }\
.attachPanel form { display:inline;border:0;padding:0;margin:0; }\
.attachPanel select { width:99%;margin:0px;font-size:8pt;line-height:110%;}\
.attachPanel input { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%}\
.attachPanel textarea { width:98%;margin:0px;height:2em;font-size:8pt;line-height:110%}\
.attachPanel table { width:100%;border:0;margin:0;padding:0;color:inherit; }\
.attachPanel tbody, .attachPanel tr, .attachPanel td { border:0;margin:0;padding:0;color:#000; }\
.attachPanel .box { border:1px solid black; padding:.3em; margin:.3em 0px; background:#f8f8f8; \
-moz-border-radius:5px;-webkit-border-radius:5px; }\
.attachPanel .chk { width:auto;border:0; }\
.attachPanel .btn { width:auto; }\
.attachPanel .btn2 { width:49%; }\
",
//}}}
//{{{
html:
'<form>\
attach from source file\
<input type="file" id="attachSource" name="source" size="56"\
onChange="config.macros.attach.onChangeSource(this)">\
<div id="attachFixPanel" style="display:none"><!-- FF3 FIXUP -->\
<input type="text" id="attachFixSource" style="width:90%"\
title="Enter a path/file to attach"\
onChange="config.macros.attach.onChangeSource(this);">\
<input type="button" style="width:7%" value="..."\
title="Enter a path/file to attach"\
onClick="config.macros.attach.askForFilename(document.getElementById(\'attachFixSource\'));">\
</div><!--end FF3 FIXUP-->\
<div class="box">\
<table style="border:0"><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
embed data <input type=checkbox class=chk name="useData" %IEdisabled% \
onclick="if (!this.form.MIMEType.value.length)\
this.form.MIMEType.selectedIndex=this.checked?1:0; "> \
</td><td style="border:0">\
<select size=1 name="MIMEType" \
onchange="this.title=this.value; if (this.value==\'editlist\')\
{ this.selectedIndex=this.form.useData.checked?1:0; story.displayTiddler(null,config.macros.attach.typeList,2); return; }">\
<option value=""></option>\
%types%\
</select>\
</td></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
local link <input type=checkbox class=chk name="useLocal"\
onclick="this.form.local.value=this.form.local.defaultValue=this.checked?config.macros.attach.localPrompt:\'\';"> \
</td><td style="border:0">\
<input type=text name="local" size=15 autocomplete=off value=""\
onchange="this.form.useLocal.checked=this.value.length" \
onkeyup="this.form.useLocal.checked=this.value.length" \
onfocus="if (!this.value.length) this.value=config.macros.attach.localPrompt; this.select()">\
</td></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
remote link <input type=checkbox class=chk name="useURL"\
onclick="this.form.URL.value=this.form.URL.defaultValue=this.checked?config.macros.attach.URLPrompt:\'\';\"> \
</td><td style="border:0">\
<input type=text name="URL" size=15 autocomplete=off value=""\
onfocus="if (!this.value.length) this.value=config.macros.attach.URLPrompt; this.select()"\
onchange="this.form.useURL.checked=this.value.length;"\
onkeyup="this.form.useURL.checked=this.value.length;">\
</td></tr></table>\
</div>\
<table style="border:0"><tr style="border:0"><td style="border:0;text-align:right;vertical-align:top;width:1%;white-space:nowrap">\
notes \
</td><td style="border:0" colspan=2>\
<textarea name="notes" style="width:98%;height:3.5em;margin-bottom:2px"></textarea>\
</td><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
attach as \
</td><td style="border:0" colspan=2>\
<input type=text name="tiddlertitle" size=15 autocomplete=off value="%title%"\
onkeyup="if (!this.value.length) { this.value=config.macros.attach.titlePrompt; this.select(); }"\
onfocus="if (!this.value.length) this.value=config.macros.attach.titlePrompt; this.select()" %disabled%>\
</td></tr></tr><tr style="border:0"><td style="border:0;text-align:right;width:1%;white-space:nowrap">\
add tags \
</td><td style="border:0">\
<input type=text name="tags" size=15 autocomplete=off value="" onfocus="this.select()">\
</td><td style="width:40%;text-align:right;border:0">\
<input type=button class=btn2 value="attach"\
onclick="config.macros.attach.onClickAttach(this)"><!--\
--><input type=button class=btn2 value="close"\
onclick="var panel=document.getElementById(\'%id%\'); if (panel) panel.parentNode.removeChild(panel);">\
</td></tr></table>\
</form>',
//}}}
// // control processing
//{{{
onChangeSource:
function(here) {
var form=here.form;
var list=form.MIMEType;
var theFilename = here.value;
var theExtension = theFilename.substr(theFilename.lastIndexOf('.')).toLowerCase();
// if theFilename is in current document folder, remove path prefix and use relative reference
var h=document.location.href; folder=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf("/")+1)));
if (theFilename.substr(0,folder.length)==folder) theFilename='./'+theFilename.substr(folder.length);
else theFilename='file:///'+theFilename; // otherwise, use absolute reference
theFilename=theFilename.replace(/\\/g,"/"); // fixup: change \ to /
form.useLocal.checked = true;
form.local.value = theFilename;
form.useData.checked = !form.useData.disabled;
list.selectedIndex=1;
for (var i=0; i<list.options.length; i++) // find matching MIME type
if (list.options[i].value.indexOf(theExtension)!=-1) { list.selectedIndex = i; break; }
if (!form.tiddlertitle.disabled)
form.tiddlertitle.value=theFilename.substr(theFilename.lastIndexOf('/')+1); // get tiddlername from filename
},
//}}}
//{{{
onClickAttach:
function (here) {
clearMessage();
// get input values
var form=here.form;
var src=form.source; if (config.browser.isGecko) src=document.getElementById("attachFixSource");
src=src.value!=src.defaultValue?src.value:"";
var when=(new Date()).formatString(config.macros.timeline.dateFormat);
var title=form.tiddlertitle.value;
var local = form.local.value!=form.local.defaultValue?form.local.value:"";
var url = form.URL.value!=form.URL.defaultValue?form.URL.value:"";
var notes = form.notes.value;
var tags = "attachment excludeMissing "+form.tags.value;
var useData=form.useData.checked;
var useLocal=form.useLocal.checked;
var useURL=form.useURL.checked;
var mimetype = form.MIMEType.value.length?form.MIMEType.options[form.MIMEType.selectedIndex].text:"";
// validate checkboxes and get filename
if (useData) {
if (src.length) { if (!theLocation) var theLocation=src; }
else { alert(this.sourceErr); src.focus(); return false; }
}
if (useLocal) {
if (local.length) { if (!theLocation) var theLocation = local; }
else { alert(this.localErr); form.local.focus(); return false; }
}
if (useURL) {
if (url.length) { if (!theLocation) var theLocation = url; }
else { alert(this.URLErr); form.URL.focus(); return false; }
}
if (!(useData||useLocal||useURL))
{ form.useData.focus(); alert(this.storageErr); return false; }
if (!theLocation)
{ src.focus(); alert(this.sourceErr); return false; }
if (!title || !title.trim().length || title==this.titlePrompt)
{ form.tiddlertitle.focus(); alert(this.tiddlerErr); return false; }
// if not already selected, determine MIME type based on filename extension (if any)
if (useData && !mimetype.length && theLocation.lastIndexOf('.')!=-1) {
var theExt = theLocation.substr(theLocation.lastIndexOf('.')).toLowerCase();
var theList=form.MIMEType;
for (var i=0; i<theList.options.length; i++)
if (theList.options[i].value.indexOf(theExt)!=-1)
{ var mimetype=theList.options[i].text; theList.selectedIndex=i; break; }
}
// attach the file
return this.createAttachmentTiddler(src, when, notes, tags, title,
useData, useLocal, useURL, local, url, mimetype);
},
getMIMEType:
function(src,def) {
var ext = src.substr(src.lastIndexOf('.')).toLowerCase();
var list=store.getTiddlerText(this.typeList);
if (!list || !list.trim().length) return def;
// get MIME list content from tiddler
var parts=list.split("\n----\n");
for (var p=0; p<parts.length; p++) {
var lines=parts[p].split("\n");
var mime=lines.shift(); // 1st line=MIME type
var match=lines.shift(); // 2nd line=matching extensions
if (match.indexOf(ext)!=-1) return mime;
}
return def;
},
createAttachmentTiddler:
function (src, when, notes, tags, title, useData, useLocal, useURL, local, url, mimetype, noshow) {
if (useData) { // encode the data
if (!mimetype.length) {
alert(this.MIMEErr);
form.MIMEType.selectedIndex=1; form.MIMEType.focus();
return false;
}
var d = this.readFile(src); if (!d) { return false; }
displayMessage('encoding '+src);
var encoded = this.encodeBase64(d);
displayMessage('file size='+d.length+' bytes, encoded size='+encoded.length+' bytes');
}
var usage=(mimetype.substr(0,5)=="image"?'[img[%0]]':'[[%0|%0]]').format([title]);
var theText=this.tiddlerFormat.format([
usage, notes.length?notes:'//none//', mimetype,
useLocal?local.replace(/\\/g,'/'):'', useURL?url:'',
useData?('data:'+mimetype+';base64,'+encoded):'' ]);
store.saveTiddler(title,title,theText,config.options.txtUserName,new Date(),tags);
var panel=document.getElementById("attachPanel"); if (panel) panel.style.display="none";
if (!noshow) { story.displayTiddler(null,title); story.refreshTiddler(title,null,true); }
displayMessage('attached "'+title+'"');
return true;
},
//}}}
// // base64 conversion
//{{{
encodeBase64:
function (d) {
if (!d) return null;
// encode as base64
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var out="";
var chr1,chr2,chr3="";
var enc1,enc2,enc3,enc4="";
for (var count=0,i=0; i<d.length; ) {
chr1=d.charCodeAt(i++);
chr2=d.charCodeAt(i++);
chr3=d.charCodeAt(i++);
enc1=chr1 >> 2;
enc2=((chr1 & 3) << 4) | (chr2 >> 4);
enc3=((chr2 & 15) << 2) | (chr3 >> 6);
enc4=chr3 & 63;
if (isNaN(chr2)) enc3=enc4=64;
else if (isNaN(chr3)) enc4=64;
out+=keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4);
chr1=chr2=chr3=enc1=enc2=enc3=enc4="";
}
return out;
},
decodeBase64: function(input) {
var out="";
var chr1,chr2,chr3;
var enc1,enc2,enc3,enc4;
var i = 0;
// remove all characters that are not A-Z, a-z, 0-9, +, /, or =
input=input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
do {
enc1=keyStr.indexOf(input.charAt(i++));
enc2=keyStr.indexOf(input.charAt(i++));
enc3=keyStr.indexOf(input.charAt(i++));
enc4=keyStr.indexOf(input.charAt(i++));
chr1=(enc1 << 2) | (enc2 >> 4);
chr2=((enc2 & 15) << 4) | (enc3 >> 2);
chr3=((enc3 & 3) << 6) | enc4;
out=out+String.fromCharCode(chr1);
if (enc3!=64) out=out+String.fromCharCode(chr2);
if (enc4!=64) out=out+String.fromCharCode(chr3);
} while (i<input.length);
return out;
},
//}}}
// // I/O functions
//{{{
readFile: // read local BINARY file data
function(filePath) {
if(!window.Components) { return null; }
try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
catch(e) { alert("access denied: "+filePath); return null; }
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
try { file.initWithPath(filePath); } catch(e) { alert("cannot read file - invalid path: "+filePath); return null; }
if (!file.exists()) { alert("cannot read file - not found: "+filePath); return null; }
var inputStream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
inputStream.init(file, 0x01, 00004, null);
var bInputStream = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream);
bInputStream.setInputStream(inputStream);
return(bInputStream.readBytes(inputStream.available()));
},
//}}}
//{{{
writeFile:
function(filepath,data) {
// TBD: decode base64 and write BINARY data to specified local path/filename
return(false);
},
//}}}
//{{{
askForFilename: // for FF3 fixup
function(target) {
var msg=config.messages.selectFile;
if (target && target.title) msg=target.title; // use target field tooltip (if any) as dialog prompt text
// get local path for current document
var path=getLocalPath(document.location.href);
var p=path.lastIndexOf("/"); if (p==-1) p=path.lastIndexOf("\\"); // Unix or Windows
if (p!=-1) path=path.substr(0,p+1); // remove filename, leave trailing slash
var file=""
var result=window.mozAskForFilename(msg,path,file,true); // FF3 FIXUP ONLY
if (target && result.length) // set target field and trigger handling
{ target.value=result; target.onchange(); }
return result;
}
};
//}}}
//{{{
if (window.mozAskForFilename===undefined) { // also defined by CoreTweaks (for ticket #604)
window.mozAskForFilename=function(msg,path,file,mustExist) {
if(!window.Components) return false;
try {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
picker.init(window, msg, mustExist?nsIFilePicker.modeOpen:nsIFilePicker.modeSave);
var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
thispath.initWithPath(path);
picker.displayDirectory=thispath;
picker.defaultExtension='';
picker.defaultString=file;
picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);
if (picker.show()!=nsIFilePicker.returnCancel)
var result=picker.file.persistentDescriptor;
}
catch(ex) { displayMessage(ex.toString()); }
return result;
}
}
//}}}
BXT ([[Big XML Table]] or Binary eXtending Table) - в будущем файловая система не имеющая никаких ограничений на уровне стандарта этой файловой системы.
Воплощение некоторых идей в виде некоторого C/C++ кода
//{{{
getSize(void * ret, uint32 size)
{
byte b = get_byte();
if ( b&0x80 == 0 )
{
// read next byte
vector bytes;
bytes.push_back(b);
do {
b = get_byte();
bytes.push_back(b);
} while(b&0x80 == 0);
size = actual_size(bytes.size());
ret = malloc(size);
ret = copy_data(bytes);
}
else if ( b&0x40 == 0 )
{
size = size_of(byte);
ret = malloc(size);
*ret = b&0x3F;
}
else
{
*ret = 0;
size = 0;
}
}
//}}}
Системы умирают, системы возрождаются из пепла. В очередной раз пытаясь сделать бэкап моей любимой убунточки перед переустановкой я осознал простую вещь, единственное ценное что есть в системе это .bash_history, а всё остальное в бэкапе не нуждается.
Посудите сами все фотки уже давно в фэйсбуке и на фликре, видео давно на ютьюбе, музыка в ластфм, документы двно уже в гуглодоксах, проекты на гитхабе, программы всегда доступны из репов, даже порнушка давно записана на диск и упрятана в коробку из под конфет под кроватью.
А хистори хранит в себе все взлёты и провалы, ошибки и озарения, повседневные рутинные действия и крупицы истинны в гениальных однострочниках. Для восстановления привычной среды ненужно ничего кроме того десятка заветных строк которые были нагуглены и введены год назад один раз и позабыты.
И вот система умерает и чтобы возродиться из пепла, из ста гигабайт /home раздела нужен всего один маленький файлик на десяток килобайт.
Хистори можно и нужно хранить, кто-то публикует хистори в твитере http://twitter.com/bash_history я же предлагаю сохранять хистори в системе контроля версий, например в [[Fossil|http://ru.wikipedia.org/wiki/Fossil]] для этого достаточно:
# скачать клиент системы например тут [[Download|http://www.fossil-scm.org/download.html]]
# закинуть его например в ~/fossil
# почитать к нему справку и создать репозиторий
# написать скрипт сохраняющий историю в репозитории например такой:
{{{
#!/bin/bash
rm -f ./bash_history
./fossil open ./bash-history.fossil "$(hostname)"
./fossil update "$(hostname)"
# The \cp and -f is to overwrite the file
cp -f "$HOME/.bash_history" ./bash_history
./fossil ci -f -m "Commiting the bash_history for $(hostname) as of $(date +%Y-%m-%d-%H:%M)" ./bash_history
./fossil close
rm -f ./bash_history
}}}
# и добавить запуск скрипта в cron каждый час например так:
{{{
#!/bin/bash
echo "1 * * * * cd $HOME/fossil/ && bash $HOME/fossil/bash_history_backup.sh" > ./cron.txt
crontab ./cron.txt
rm ./cron.txt
}}}
Идея нагло спёрта отсюда http://shlomif.livejournal.com/31980.html только переделана под другой репозиторий.
http://www.adminworld.ru/tag/bash_history
http://twitter.com/bash_history
http://www.gentoo-wiki.info/SECURITY_Bash_History_Functions
[[Inotify или автоматизация рутинных операций с помощью incron|http://habrahabr.ru/post/66569/]]
[[BXT]] (Big XML Table or Binary eXtending Table) - в будущем файловая система не имеющая никаких ограничений на уровне стандарта файловой системы.
[[BXT on GitHub|https://github.com/mm3/BXT]]
[[Небольшие наброски кода|BXT code]]
ссылки:
[[Reizer4fs]] - ФС Reizer4fs на основе которого буду писать свой код.
[[fuse-rofs|https://github.com/cognusion/fuse-rofs]] - примеры раоты с fuse
[[fuse-exfat|http://code.google.com/p/exfat/source/browse/]]
[[fuse-helloworld|http://sourceforge.net/apps/mediawiki/fuse/index.php?title=Hello_World]]
[[wiki fuse|http://sourceforge.net/apps/mediawiki/fuse/index.php?title=Option_parsing]]
object structure
//{{{
[ header ][other object, raw data or free space]
[[size][ header_data ]][other object, raw data or free space]
[[size][[ field_name ][ field_data ][ field_name ][ field_data ]...]][other object, raw data or free space]
[[size][[[size][field_name]][[size][field_data]][[size][[field_name]][[size][field_data]]...]][other object, raw data or free space]
//}}}
size field structure
//{{{
[ size bytes ][data]
0 xxxxxxx 0 xxxxxxx 1 xxxxxxx [data]
0[ size ] 0[ bits ] 1[ last ] [data]
//}}}
or if size of data < 128 bytes
//{{{
[size byte][data]
10 xxxxxx [data]
10[ size ] [data]
//}}}
or if size of data < 7 bit
//{{{
11 xxxxxx
11[ data ]
//}}}
Основные идеи и постулаты
# В основе лежит бинарное представление XML
# По сути файловая система представляет из себя один большой бинарный XML объект.
# Любой объект файловой системы состоит из двух основных частей: заголовка и тела.
# Любой элемент заголовка задаётся в виде размер - данные.
# Размер - это несколько байт элемента начиная от первого и заканчивая ближайшим большим 127 включительно. То есть если первый байт больше 127 то в нём хранится размер элемента.
# Т.е. если старший бит первого байта равен 0 значит нужно найти ближайший байт у которого он равен 1 и все эти байты будут содержать в себе размер элемента.
# А если старший бит первого байта равен 1 то тут надо проверить второй по старшинству бит и если он равен 0 то оставшиеся 6 бит содержат размер. иначе эти 6 бит содержат данные размер которых не превышает 6 бит - функция сжатия размера.
# Сам заголовок также состоит из размера и собственно заголовка.
# Заголовок содержит набор обязательных полей (описаны ниже) и любое количество необязательных, порядок следования полей произвольный.
# Поле имеет формат имя - значение ( оба в виде размер - данные).
# Тело есть набор объектов, бинарные данные или пустое место.
Объекты ФС.
# Суперблок - объект включающий в себя все другие объекты ФС, в том числе и обьекты директорий и файлов в корне ФС.
# Копия суперблока - обьект дублирующий критически важные для работы ФС данные.
# Директория - содержит в себе обьекты директорий, файлов и ссылок.
# Файл - содержит в себе данные либо обьекты указывающие в каких блоках располагаются данные.
# Ссылка - обьект указывающий на один или несколько других обьектов.
# Карта свободных блоков - обьект упрощяющий поиск блоков в которые можно записть данные.
# Дерево файлов - обьект содержащий данные упрощающий навигацию по файловой структуре.
# Дерево обьектов - обьект упрощающий работу с обьектами ФС
# Журнал - обьект упрощяющий контроль целосности операций с данными
# Индекс - обьект упрощяющий поис по данным.
# Тэг - обьект обьект обеспечивающий механизм создания снапшотов, хранит структуру блоков актуальных на момент создания снапшота.
Обязательные поля для любого обьекта
# уникальный идентификатор (id), префиксный, тоесть состоит из идентификатора родителя и идентификатора самого обьекта.
# размер объекта(включая заголовок),
# размер данных в теле, исключая заголовок и свободное место после
Обязательные поля заголовка суперблока
# Сигнатура суперблока - поле имеет имя, заданное спецификацией, по которому можно определить, что данный блок данных содержит суперблок, в качестве значения выступает хэш-сумма заголовка суперблока, в котором значение поля сигнатуры установленно в нули. Если в некотором массиве байт обнаружена сигнатура, то можно можно востановить суперблок по следующему методу. Извесно, что сигнатура располагается внутри заголовка суперблока, так же извесно, что сразу после сигнатуры идёт хэш-сумма заголовка суперблока, следовательно необходимо итерративно читать байты до сигнатуры считая их началом заголовка суперблока, до тех пор пока не распарсится валидная структура суперблока, хэш-сумма заголовка которого совпадает с числом записанным после сигнатуры.
# версия спецификации
Дополнительные возможности которые может предоставлять драйвер ФС:
# В корне ФС располагается служебная директория обеспечивающяя доступ к дополнительным возможностям ФС, таким как: манипулирование файлами имена которых не поддерживаются данной операционной системой, поиск файлов по разным параметрам, балансировка, дефрагментация, востановление удалённых либо старых версий файлов, удаление старых версий файлов, зануление свободных блоков, оперирование снапшотами, конфигурирование ФС, задание директорий для временных файлов не имеющих представительства на диске, задание директорий для логов не ведущих журналирование и версионирование изменений, механизмы обеспечения атомарности операций.
[[CHAOS wiki|http://en.wikipedia.org/wiki/CHAOS_%28operating_system%29]]
/***
''Name:'' Calendar plugin
''Author:'' SteveRumsby
// // updated by Jeremy Sheeley to add cacheing for reminders
// // see http://www.geocities.com/allredfaq/reminderMacros.html
''Configuration:''
|''First day of week:''|<<option txtCalFirstDay>>|(Monday = 0, Sunday = 6)|
|''First day of weekend:''|<<option txtCalStartOfWeekend>>|(Monday = 0, Sunday = 6)|
''Syntax:''
|{{{<<calendar>>}}}|Produce a full-year calendar for the current year|
|{{{<<calendar year>>}}}|Produce a full-year calendar for the given year|
|{{{<<calendar year month>>}}}|Produce a one-month calendar for the given month and year|
|{{{<<calendar thismonth>>}}}|Produce a one-month calendar for the current month|
|{{{<<calendar lastmonth>>}}}|Produce a one-month calendar for last month|
|{{{<<calendar nextmonth>>}}}|Produce a one-month calendar for next month|
***/
// //Modify this section to change the text displayed for the month and day names, to a different language for example. You can also change the format of the tiddler names linked to from each date, and the colours used.
// // ''Changes by ELS 2005.10.30:''
// // config.macros.calendar.handler()
// // ^^use "tbody" element for IE compatibility^^
// // ^^IE returns 2005 for current year, FF returns 105... fix year adjustment accordingly^^
// // createCalendarDays()
// // ^^use showDate() function (if defined) to render autostyled date with linked popup^^
// // calendar stylesheet definition
// // ^^use .calendar class-specific selectors, add text centering and margin settings^^
//{{{
config.macros.calendar = {};
config.macros.calendar.monthnames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
config.macros.calendar.daynames = ["M", "T", "W", "T", "F", "S", "S"];
config.macros.calendar.weekendbg = "#c0c0c0";
config.macros.calendar.monthbg = "#e0e0e0";
config.macros.calendar.holidaybg = "#ffc0c0";
//}}}
// //''Code section:''
// (you should not need to alter anything below here)//
//{{{
if(config.options.txtCalFirstDay == undefined)
config.options.txtCalFirstDay = 0;
if(config.options.txtCalStartOfWeekend == undefined)
config.options.txtCalStartOfWeekend = 5;
config.macros.calendar.tiddlerformat = "0DD/0MM/YYYY"; // This used to be changeable - for now, it isn't// <<smiley :-(>>
version.extensions.calendar = { major: 0, minor: 6, revision: 0, date: new Date(2006, 1, 22)};
config.macros.calendar.monthdays = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
config.macros.calendar.holidays = [ ]; // Not sure this is required anymore - use reminders instead
//}}}
// //Is the given date a holiday?
//{{{
function calendarIsHoliday(date)
{
var longHoliday = date.formatString("0DD/0MM/YYYY");
var shortHoliday = date.formatString("0DD/0MM");
for(var i = 0; i < config.macros.calendar.holidays.length; i++) {
if(config.macros.calendar.holidays[i] == longHoliday || config.macros.calendar.holidays[i] == shortHoliday) {
return true;
}
}
return false;
}
//}}}
// //The main entry point - the macro handler.
// //Decide what sort of calendar we are creating (month or year, and which month or year)
// // Create the main calendar container and pass that to sub-ordinate functions to create the structure.
// ELS 2005.10.30: added creation and use of "tbody" for IE compatibility and fixup for year >1900//
// ELS 2005.10.30: fix year calculation for IE's getYear() function (which returns '2005' instead of '105')//
//{{{
config.macros.calendar.handler = function(place,macroName,params)
{
var calendar = createTiddlyElement(place, "table", null, "calendar", null);
var tbody = createTiddlyElement(calendar, "tbody", null, null, null);
var today = new Date();
var year = today.getYear();
if (year<1900) year+=1900;
if (params[0] == "thismonth")
{
cacheReminders(new Date(year, today.getMonth(), 1, 0, 0), 31);
createCalendarOneMonth(tbody, year, today.getMonth());
}
else if (params[0] == "lastmonth") {
var month = today.getMonth()-1; if (month==-1) { month=11; year--; }
cacheReminders(new Date(year, month, 1, 0, 0), 31);
createCalendarOneMonth(tbody, year, month);
}
else if (params[0] == "nextmonth") {
var month = today.getMonth()+1; if (month>11) { month=0; year++; }
cacheReminders(new Date(year, month, 1, 0, 0), 31);
createCalendarOneMonth(tbody, year, month);
}
else {
if (params[0]) year = params[0];
if(params[1])
{
cacheReminders(new Date(year, params[1]-1, 1, 0, 0), 31);
createCalendarOneMonth(tbody, year, params[1]-1);
}
else
{
cacheReminders(new Date(year, 0, 1, 0, 0), 366);
createCalendarYear(tbody, year);
}
}
window.reminderCacheForCalendar = null;
}
//}}}
//{{{
//This global variable is used to store reminders that have been cached
//while the calendar is being rendered. It will be renulled after the calendar is fully rendered.
window.reminderCacheForCalendar = null;
//}}}
//{{{
function cacheReminders(date, leadtime)
{
if (window.findTiddlersWithReminders == null)
return;
window.reminderCacheForCalendar = {};
var leadtimeHash = [];
leadtimeHash [0] = 0;
leadtimeHash [1] = leadtime;
var t = findTiddlersWithReminders(date, leadtimeHash, null, 1);
for(var i = 0; i < t.length; i++) {
//just tag it in the cache, so that when we're drawing days, we can bold this one.
window.reminderCacheForCalendar[t[i]["matchedDate"]] = "reminder:" + t[i]["params"]["title"];
}
}
//}}}
//{{{
function createCalendarOneMonth(calendar, year, mon)
{
var row = createTiddlyElement(calendar, "tr", null, null, null);
createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon] + " " + year, true, year, mon);
row = createTiddlyElement(calendar, "tr", null, null, null);
createCalendarDayHeader(row, 1);
createCalendarDayRowsSingle(calendar, year, mon);
}
//}}}
//{{{
function createCalendarMonth(calendar, year, mon)
{
var row = createTiddlyElement(calendar, "tr", null, null, null);
createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon] + " " + year, false, year, mon);
row = createTiddlyElement(calendar, "tr", null, null, null);
createCalendarDayHeader(row, 1);
createCalendarDayRowsSingle(calendar, year, mon);
}
//}}}
//{{{
function createCalendarYear(calendar, year)
{
var row;
row = createTiddlyElement(calendar, "tr", null, null, null);
var back = createTiddlyElement(row, "td", null, null, null);
var backHandler = function() {
removeChildren(calendar);
createCalendarYear(calendar, year-1);
};
createTiddlyButton(back, "<", "Previous year", backHandler);
back.align = "center";
var yearHeader = createTiddlyElement(row, "td", null, "calendarYear", year);
yearHeader.align = "center";
yearHeader.setAttribute("colSpan", 19);
var fwd = createTiddlyElement(row, "td", null, null, null);
var fwdHandler = function() {
removeChildren(calendar);
createCalendarYear(calendar, year+1);
};
createTiddlyButton(fwd, ">", "Next year", fwdHandler);
fwd.align = "center";
createCalendarMonthRow(calendar, year, 0);
createCalendarMonthRow(calendar, year, 3);
createCalendarMonthRow(calendar, year, 6);
createCalendarMonthRow(calendar, year, 9);
}
//}}}
//{{{
function createCalendarMonthRow(cal, year, mon)
{
var row = createTiddlyElement(cal, "tr", null, null, null);
createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon], false, year, mon);
createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+1], false, year, mon);
createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+2], false, year, mon);
row = createTiddlyElement(cal, "tr", null, null, null);
createCalendarDayHeader(row, 3);
createCalendarDayRows(cal, year, mon);
}
//}}}
//{{{
function createCalendarMonthHeader(cal, row, name, nav, year, mon)
{
var month;
if(nav) {
var back = createTiddlyElement(row, "td", null, null, null);
back.align = "center";
back.style.background = config.macros.calendar.monthbg;
/*
back.setAttribute("colSpan", 2);
var backYearHandler = function() {
var newyear = year-1;
removeChildren(cal);
cacheReminders(new Date(newyear, mon , 1, 0, 0), 31);
createCalendarOneMonth(cal, newyear, mon);
};
createTiddlyButton(back, "<<", "Previous year", backYearHandler);
*/
var backMonHandler = function() {
var newyear = year;
var newmon = mon-1;
if(newmon == -1) { newmon = 11; newyear = newyear-1;}
removeChildren(cal);
cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);
createCalendarOneMonth(cal, newyear, newmon);
};
createTiddlyButton(back, "<", "Previous month", backMonHandler);
month = createTiddlyElement(row, "td", null, "calendarMonthname", name)
// month.setAttribute("colSpan", 3);
month.setAttribute("colSpan", 5);
var fwd = createTiddlyElement(row, "td", null, null, null);
fwd.align = "center";
fwd.style.background = config.macros.calendar.monthbg;
// fwd.setAttribute("colSpan", 2);
var fwdMonHandler = function() {
var newyear = year;
var newmon = mon+1;
if(newmon == 12) { newmon = 0; newyear = newyear+1;}
removeChildren(cal);
cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);
createCalendarOneMonth(cal, newyear, newmon);
};
createTiddlyButton(fwd, ">", "Next month", fwdMonHandler);
/*
var fwdYear = createTiddlyElement(row, "td", null, null, null);
var fwdYearHandler = function() {
var newyear = year+1;
removeChildren(cal);
cacheReminders(new Date(newyear, mon , 1, 0, 0), 31);
createCalendarOneMonth(cal, newyear, mon);
};
createTiddlyButton(fwd, ">>", "Next year", fwdYearHandler);
*/
} else {
month = createTiddlyElement(row, "td", null, "calendarMonthname", name)
month.setAttribute("colSpan", 7);
}
month.align = "center";
month.style.background = config.macros.calendar.monthbg;
}
//}}}
//{{{
function createCalendarDayHeader(row, num)
{
var cell;
for(var i = 0; i < num; i++) {
for(var j = 0; j < 7; j++) {
var d = j + (config.options.txtCalFirstDay - 0);
if(d > 6) d = d - 7;
cell = createTiddlyElement(row, "td", null, null, config.macros.calendar.daynames[d]);
if(d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))
cell.style.background = config.macros.calendar.weekendbg;
}
}
}
//}}}
//{{{
function createCalendarDays(row, col, first, max, year, mon)
{
var i;
for(i = 0; i < col; i++) {
createTiddlyElement(row, "td", null, null, null);
}
var day = first;
for(i = col; i < 7; i++) {
var d = i + (config.options.txtCalFirstDay - 0);
if(d > 6) d = d - 7;
var daycell = createTiddlyElement(row, "td", null, null, null);
var isaWeekend = ((d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))? true:false);
if(day > 0 && day <= max) {
var celldate = new Date(year, mon, day);
// ELS 2005.10.30: use <<date>> macro's showDate() function to create popup
if (window.showDate) {
showDate(daycell,celldate,"popup","DD","DD-MMM-YYYY",true, isaWeekend);
} else {
if(isaWeekend) daycell.style.background = config.macros.calendar.weekendbg;
var title = celldate.formatString(config.macros.calendar.tiddlerformat);
if(calendarIsHoliday(celldate)) {
daycell.style.background = config.macros.calendar.holidaybg;
}
if(window.findTiddlersWithReminders == null) {
var link = createTiddlyLink(daycell, title, false);
link.appendChild(document.createTextNode(day));
} else {
var button = createTiddlyButton(daycell, day, title, onClickCalendarDate);
}
}
}
day++;
}
}
//}}}
// //We've clicked on a day in a calendar - create a suitable pop-up of options.
// //The pop-up should contain:
// // * a link to create a new entry for that date
// // * a link to create a new reminder for that date
// // * an <hr>
// // * the list of reminders for that date
//{{{
function onClickCalendarDate(e)
{
var button = this;
var date = button.getAttribute("title");
var dat = new Date(date.substr(6,4), date.substr(3,2)-1, date.substr(0, 2));
date = dat.formatString(config.macros.calendar.tiddlerformat);
var popup = createTiddlerPopup(this);
popup.appendChild(document.createTextNode(date));
var newReminder = function() {
var t = store.getTiddlers(date);
displayTiddler(null, date, 2, null, null, false, false);
if(t) {
document.getElementById("editorBody" + date).value += "\n<<reminder day:" + dat.getDate() +
" month:" + (dat.getMonth()+1) +
" year:" + (dat.getYear()+1900) + " title: >>";
} else {
document.getElementById("editorBody" + date).value = "<<reminder day:" + dat.getDate() +
" month:" + (dat.getMonth()+1) +
" year:" + (dat.getYear()+1900) + " title: >>";
}
};
var link = createTiddlyButton(popup, "New reminder", null, newReminder);
popup.appendChild(document.createElement("hr"));
var t = findTiddlersWithReminders(dat, [0,14], null, 1);
for(var i = 0; i < t.length; i++) {
link = createTiddlyLink(popup, t[i].tiddler, false);
link.appendChild(document.createTextNode(t[i].tiddler));
}
}
//}}}
//{{{
function calendarMaxDays(year, mon)
{
var max = config.macros.calendar.monthdays[mon];
if(mon == 1 && (year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0)) {
max++;
}
return max;
}
//}}}
//{{{
function createCalendarDayRows(cal, year, mon)
{
var row = createTiddlyElement(cal, "tr", null, null, null);
var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first1 < 0) first1 = first1 + 7;
var day1 = -first1 + 1;
var first2 = (new Date(year, mon+1, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first2 < 0) first2 = first2 + 7;
var day2 = -first2 + 1;
var first3 = (new Date(year, mon+2, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first3 < 0) first3 = first3 + 7;
var day3 = -first3 + 1;
var max1 = calendarMaxDays(year, mon);
var max2 = calendarMaxDays(year, mon+1);
var max3 = calendarMaxDays(year, mon+2);
while(day1 <= max1 || day2 <= max2 || day3 <= max3) {
row = createTiddlyElement(cal, "tr", null, null, null);
createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;
createCalendarDays(row, 0, day2, max2, year, mon+1); day2 += 7;
createCalendarDays(row, 0, day3, max3, year, mon+2); day3 += 7;
}
}
//}}}
//{{{
function createCalendarDayRowsSingle(cal, year, mon)
{
var row = createTiddlyElement(cal, "tr", null, null, null);
var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first1 < 0) first1 = first1+ 7;
var day1 = -first1 + 1;
var max1 = calendarMaxDays(year, mon);
while(day1 <= max1) {
row = createTiddlyElement(cal, "tr", null, null, null);
createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;
}
}
//}}}
// //ELS 2005.10.30: added styles
//{{{
setStylesheet(".calendar, .calendar table, .calendar th, .calendar tr, .calendar td { text-align:center; } .calendar, .calendar a { margin:0px !important; padding:0px !important; }", "calendarStyles");
//}}}
//{{{
Intro
=====
This document is designed to provide a list of the minimum levels of
software necessary to run the 2.6 kernels, as well as provide brief
instructions regarding any other "Gotchas" users may encounter when
trying life on the Bleeding Edge. If upgrading from a pre-2.4.x
kernel, please consult the Changes file included with 2.4.x kernels for
additional information; most of that information will not be repeated
here. Basically, this document assumes that your system is already
functional and running at least 2.4.x kernels.
This document is originally based on my "Changes" file for 2.0.x kernels
and therefore owes credit to the same people as that file (Jared Mauch,
Axel Boldt, Alessandro Sigala, and countless other users all over the
'net).
Current Minimal Requirements
============================
Upgrade to at *least* these software revisions before thinking you've
encountered a bug! If you're unsure what version you're currently
running, the suggested command should tell you.
Again, keep in mind that this list assumes you are already
functionally running a Linux 2.4 kernel. Also, not all tools are
necessary on all systems; obviously, if you don't have any ISDN
hardware, for example, you probably needn't concern yourself with
isdn4k-utils.
o Gnu C 3.2 # gcc --version
o Gnu make 3.80 # make --version
o binutils 2.12 # ld -v
o util-linux 2.10o # fdformat --version
o module-init-tools 0.9.10 # depmod -V
o e2fsprogs 1.41.4 # e2fsck -V
o jfsutils 1.1.3 # fsck.jfs -V
o reiserfsprogs 3.6.3 # reiserfsck -V 2>&1|grep reiserfsprogs
o xfsprogs 2.6.0 # xfs_db -V
o squashfs-tools 4.0 # mksquashfs -version
o btrfs-progs 0.18 # btrfsck
o pcmciautils 004 # pccardctl -V
o quota-tools 3.09 # quota -V
o PPP 2.4.0 # pppd --version
o isdn4k-utils 3.1pre1 # isdnctrl 2>&1|grep version
o nfs-utils 1.0.5 # showmount --version
o procps 3.2.0 # ps --version
o oprofile 0.9 # oprofiled --version
o udev 081 # udevinfo -V
o grub 0.93 # grub --version
o mcelog 0.6
o iptables 1.4.2 # iptables -V
Kernel compilation
==================
GCC
---
The gcc version requirements may vary depending on the type of CPU in your
computer.
Make
----
You will need Gnu make 3.80 or later to build the kernel.
Binutils
--------
Linux on IA-32 has recently switched from using as86 to using gas for
assembling the 16-bit boot code, removing the need for as86 to compile
your kernel. This change does, however, mean that you need a recent
release of binutils.
Perl
----
You will need perl 5 and the following modules: Getopt::Long, Getopt::Std,
File::Basename, and File::Find to build the kernel.
System utilities
================
Architectural changes
---------------------
DevFS has been obsoleted in favour of udev
(http://www.kernel.org/pub/linux/utils/kernel/hotplug/)
32-bit UID support is now in place. Have fun!
Linux documentation for functions is transitioning to inline
documentation via specially-formatted comments near their
definitions in the source. These comments can be combined with the
SGML templates in the Documentation/DocBook directory to make DocBook
files, which can then be converted by DocBook stylesheets to PostScript,
HTML, PDF files, and several other formats. In order to convert from
DocBook format to a format of your choice, you'll need to install Jade as
well as the desired DocBook stylesheets.
Util-linux
----------
New versions of util-linux provide *fdisk support for larger disks,
support new options to mount, recognize more supported partition
types, have a fdformat which works with 2.4 kernels, and similar goodies.
You'll probably want to upgrade.
Ksymoops
--------
If the unthinkable happens and your kernel oopses, you may need the
ksymoops tool to decode it, but in most cases you don't.
In the 2.6 kernel it is generally preferred to build the kernel with
CONFIG_KALLSYMS so that it produces readable dumps that can be used as-is
(this also produces better output than ksymoops).
If for some reason your kernel is not build with CONFIG_KALLSYMS and
you have no way to rebuild and reproduce the Oops with that option, then
you can still decode that Oops with ksymoops.
Module-Init-Tools
-----------------
A new module loader is now in the kernel that requires module-init-tools
to use. It is backward compatible with the 2.4.x series kernels.
Mkinitrd
--------
These changes to the /lib/modules file tree layout also require that
mkinitrd be upgraded.
E2fsprogs
---------
The latest version of e2fsprogs fixes several bugs in fsck and
debugfs. Obviously, it's a good idea to upgrade.
JFSutils
--------
The jfsutils package contains the utilities for the file system.
The following utilities are available:
o fsck.jfs - initiate replay of the transaction log, and check
and repair a JFS formatted partition.
o mkfs.jfs - create a JFS formatted partition.
o other file system utilities are also available in this package.
Reiserfsprogs
-------------
The reiserfsprogs package should be used for reiserfs-3.6.x
(Linux kernels 2.4.x). It is a combined package and contains working
versions of mkreiserfs, resize_reiserfs, debugreiserfs and
reiserfsck. These utils work on both i386 and alpha platforms.
Xfsprogs
--------
The latest version of xfsprogs contains mkfs.xfs, xfs_db, and the
xfs_repair utilities, among others, for the XFS filesystem. It is
architecture independent and any version from 2.0.0 onward should
work correctly with this version of the XFS kernel code (2.6.0 or
later is recommended, due to some significant improvements).
PCMCIAutils
-----------
PCMCIAutils replaces pcmcia-cs (see below). It properly sets up
PCMCIA sockets at system startup and loads the appropriate modules
for 16-bit PCMCIA devices if the kernel is modularized and the hotplug
subsystem is used.
Pcmcia-cs
---------
PCMCIA (PC Card) support is now partially implemented in the main
kernel source. The "pcmciautils" package (see above) replaces pcmcia-cs
for newest kernels.
Quota-tools
-----------
Support for 32 bit uid's and gid's is required if you want to use
the newer version 2 quota format. Quota-tools version 3.07 and
newer has this support. Use the recommended version or newer
from the table above.
Intel IA32 microcode
--------------------
A driver has been added to allow updating of Intel IA32 microcode,
accessible as a normal (misc) character device. If you are not using
udev you may need to:
mkdir /dev/cpu
mknod /dev/cpu/microcode c 10 184
chmod 0644 /dev/cpu/microcode
as root before you can use this. You'll probably also want to
get the user-space microcode_ctl utility to use with this.
Powertweak
----------
If you are running v0.1.17 or earlier, you should upgrade to
version v0.99.0 or higher. Running old versions may cause problems
with programs using shared memory.
udev
----
udev is a userspace application for populating /dev dynamically with
only entries for devices actually present. udev replaces the basic
functionality of devfs, while allowing persistent device naming for
devices.
FUSE
----
Needs libfuse 2.4.0 or later. Absolute minimum is 2.3.0 but mount
options 'direct_io' and 'kernel_cache' won't work.
Networking
==========
General changes
---------------
If you have advanced network configuration needs, you should probably
consider using the network tools from ip-route2.
Packet Filter / NAT
-------------------
The packet filtering and NAT code uses the same tools like the previous 2.4.x
kernel series (iptables). It still includes backwards-compatibility modules
for 2.2.x-style ipchains and 2.0.x-style ipfwadm.
PPP
---
The PPP driver has been restructured to support multilink and to
enable it to operate over diverse media layers. If you use PPP,
upgrade pppd to at least 2.4.0.
If you are not using udev, you must have the device file /dev/ppp
which can be made by:
mknod /dev/ppp c 108 0
as root.
Isdn4k-utils
------------
Due to changes in the length of the phone number field, isdn4k-utils
needs to be recompiled or (preferably) upgraded.
NFS-utils
---------
In 2.4 and earlier kernels, the nfs server needed to know about any
client that expected to be able to access files via NFS. This
information would be given to the kernel by "mountd" when the client
mounted the filesystem, or by "exportfs" at system startup. exportfs
would take information about active clients from /var/lib/nfs/rmtab.
This approach is quite fragile as it depends on rmtab being correct
which is not always easy, particularly when trying to implement
fail-over. Even when the system is working well, rmtab suffers from
getting lots of old entries that never get removed.
With 2.6 we have the option of having the kernel tell mountd when it
gets a request from an unknown host, and mountd can give appropriate
export information to the kernel. This removes the dependency on
rmtab and means that the kernel only needs to know about currently
active clients.
To enable this new functionality, you need to:
mount -t nfsd nfsd /proc/fs/nfsd
before running exportfs or mountd. It is recommended that all NFS
services be protected from the internet-at-large by a firewall where
that is possible.
mcelog
------
In Linux 2.6.31+ the i386 kernel needs to run the mcelog utility
as a regular cronjob similar to the x86-64 kernel to process and log
machine check events when CONFIG_X86_NEW_MCE is enabled. Machine check
events are errors reported by the CPU. Processing them is strongly encouraged.
All x86-64 kernels since 2.6.4 require the mcelog utility to
process machine checks.
Getting updated software
========================
Kernel compilation
******************
gcc
---
o <ftp://ftp.gnu.org/gnu/gcc/>
Make
----
o <ftp://ftp.gnu.org/gnu/make/>
Binutils
--------
o <ftp://ftp.kernel.org/pub/linux/devel/binutils/>
System utilities
****************
Util-linux
----------
o <ftp://ftp.kernel.org/pub/linux/utils/util-linux/>
Ksymoops
--------
o <ftp://ftp.kernel.org/pub/linux/utils/kernel/ksymoops/v2.4/>
Module-Init-Tools
-----------------
o <ftp://ftp.kernel.org/pub/linux/kernel/people/rusty/modules/>
Mkinitrd
--------
o <ftp://rawhide.redhat.com/pub/rawhide/SRPMS/SRPMS/>
E2fsprogs
---------
o <http://prdownloads.sourceforge.net/e2fsprogs/e2fsprogs-1.29.tar.gz>
JFSutils
--------
o <http://jfs.sourceforge.net/>
Reiserfsprogs
-------------
o <http://www.namesys.com/pub/reiserfsprogs/reiserfsprogs-3.6.3.tar.gz>
Xfsprogs
--------
o <ftp://oss.sgi.com/projects/xfs/download/>
Pcmciautils
-----------
o <ftp://ftp.kernel.org/pub/linux/utils/kernel/pcmcia/>
Pcmcia-cs
---------
o <http://pcmcia-cs.sourceforge.net/>
Quota-tools
----------
o <http://sourceforge.net/projects/linuxquota/>
DocBook Stylesheets
-------------------
o <http://nwalsh.com/docbook/dsssl/>
XMLTO XSLT Frontend
-------------------
o <http://cyberelk.net/tim/xmlto/>
Intel P6 microcode
------------------
o <http://www.urbanmyth.org/microcode/>
Powertweak
----------
o <http://powertweak.sourceforge.net/>
udev
----
o <http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html>
FUSE
----
o <http://sourceforge.net/projects/fuse>
mcelog
------
o <ftp://ftp.kernel.org/pub/linux/utils/cpu/mce/mcelog/>
Networking
**********
PPP
---
o <ftp://ftp.samba.org/pub/ppp/ppp-2.4.0.tar.gz>
Isdn4k-utils
------------
o <ftp://ftp.isdn4linux.de/pub/isdn4linux/utils/isdn4k-utils.v3.1pre1.tar.gz>
NFS-utils
---------
o <http://sourceforge.net/project/showfiles.php?group_id=14>
Iptables
--------
o <http://www.iptables.org/downloads.html>
Ip-route2
---------
o <ftp://ftp.tux.org/pub/net/ip-routing/iproute2-2.2.4-now-ss991023.tar.gz>
OProfile
--------
o <http://oprofile.sf.net/download/>
NFS-Utils
---------
o <http://nfs.sourceforge.net/>
//}}}
//{{{
Intro
=====
This document is designed to provide a list of the minimum levels of
software necessary to run the 2.6 kernels, as well as provide brief
instructions regarding any other "Gotchas" users may encounter when
trying life on the Bleeding Edge. If upgrading from a pre-2.4.x
kernel, please consult the Changes file included with 2.4.x kernels for
additional information; most of that information will not be repeated
here. Basically, this document assumes that your system is already
functional and running at least 2.4.x kernels.
This document is originally based on my "Changes" file for 2.0.x kernels
and therefore owes credit to the same people as that file (Jared Mauch,
Axel Boldt, Alessandro Sigala, and countless other users all over the
'net).
Current Minimal Requirements
============================
Upgrade to at *least* these software revisions before thinking you've
encountered a bug! If you're unsure what version you're currently
running, the suggested command should tell you.
Again, keep in mind that this list assumes you are already
functionally running a Linux 2.4 kernel. Also, not all tools are
necessary on all systems; obviously, if you don't have any ISDN
hardware, for example, you probably needn't concern yourself with
isdn4k-utils.
o Gnu C 3.2 # gcc --version
o Gnu make 3.80 # make --version
o binutils 2.12 # ld -v
o util-linux 2.10o # fdformat --version
o module-init-tools 0.9.10 # depmod -V
o e2fsprogs 1.41.4 # e2fsck -V
o jfsutils 1.1.3 # fsck.jfs -V
o reiserfsprogs 3.6.3 # reiserfsck -V 2>&1|grep reiserfsprogs
o reiser4progs 1.0.0 # fsck.reiser4 -V
o xfsprogs 2.6.0 # xfs_db -V
o squashfs-tools 4.0 # mksquashfs -version
o btrfs-progs 0.18 # btrfsck
o pcmciautils 004 # pccardctl -V
o quota-tools 3.09 # quota -V
o PPP 2.4.0 # pppd --version
o isdn4k-utils 3.1pre1 # isdnctrl 2>&1|grep version
o nfs-utils 1.0.5 # showmount --version
o procps 3.2.0 # ps --version
o oprofile 0.9 # oprofiled --version
o udev 081 # udevinfo -V
o grub 0.93 # grub --version
o mcelog 0.6
o iptables 1.4.2 # iptables -V
Kernel compilation
==================
GCC
---
The gcc version requirements may vary depending on the type of CPU in your
computer.
Make
----
You will need Gnu make 3.80 or later to build the kernel.
Binutils
--------
Linux on IA-32 has recently switched from using as86 to using gas for
assembling the 16-bit boot code, removing the need for as86 to compile
your kernel. This change does, however, mean that you need a recent
release of binutils.
Perl
----
You will need perl 5 and the following modules: Getopt::Long, Getopt::Std,
File::Basename, and File::Find to build the kernel.
System utilities
================
Architectural changes
---------------------
DevFS has been obsoleted in favour of udev
(http://www.kernel.org/pub/linux/utils/kernel/hotplug/)
32-bit UID support is now in place. Have fun!
Linux documentation for functions is transitioning to inline
documentation via specially-formatted comments near their
definitions in the source. These comments can be combined with the
SGML templates in the Documentation/DocBook directory to make DocBook
files, which can then be converted by DocBook stylesheets to PostScript,
HTML, PDF files, and several other formats. In order to convert from
DocBook format to a format of your choice, you'll need to install Jade as
well as the desired DocBook stylesheets.
Util-linux
----------
New versions of util-linux provide *fdisk support for larger disks,
support new options to mount, recognize more supported partition
types, have a fdformat which works with 2.4 kernels, and similar goodies.
You'll probably want to upgrade.
Ksymoops
--------
If the unthinkable happens and your kernel oopses, you may need the
ksymoops tool to decode it, but in most cases you don't.
In the 2.6 kernel it is generally preferred to build the kernel with
CONFIG_KALLSYMS so that it produces readable dumps that can be used as-is
(this also produces better output than ksymoops).
If for some reason your kernel is not build with CONFIG_KALLSYMS and
you have no way to rebuild and reproduce the Oops with that option, then
you can still decode that Oops with ksymoops.
Module-Init-Tools
-----------------
A new module loader is now in the kernel that requires module-init-tools
to use. It is backward compatible with the 2.4.x series kernels.
Mkinitrd
--------
These changes to the /lib/modules file tree layout also require that
mkinitrd be upgraded.
E2fsprogs
---------
The latest version of e2fsprogs fixes several bugs in fsck and
debugfs. Obviously, it's a good idea to upgrade.
JFSutils
--------
The jfsutils package contains the utilities for the file system.
The following utilities are available:
o fsck.jfs - initiate replay of the transaction log, and check
and repair a JFS formatted partition.
o mkfs.jfs - create a JFS formatted partition.
o other file system utilities are also available in this package.
Reiserfsprogs
-------------
The reiserfsprogs package should be used for reiserfs-3.6.x
(Linux kernels 2.4.x). It is a combined package and contains working
versions of mkreiserfs, resize_reiserfs, debugreiserfs and
reiserfsck. These utils work on both i386 and alpha platforms.
Reiser4progs
------------
The reiser4progs package contains utilities for the reiser4 file system.
Detailed instructions are provided in the README file located at:
<ftp://ftp.namesys.com/pub/reiser4progs/README>.
Xfsprogs
--------
The latest version of xfsprogs contains mkfs.xfs, xfs_db, and the
xfs_repair utilities, among others, for the XFS filesystem. It is
architecture independent and any version from 2.0.0 onward should
work correctly with this version of the XFS kernel code (2.6.0 or
later is recommended, due to some significant improvements).
PCMCIAutils
-----------
PCMCIAutils replaces pcmcia-cs (see below). It properly sets up
PCMCIA sockets at system startup and loads the appropriate modules
for 16-bit PCMCIA devices if the kernel is modularized and the hotplug
subsystem is used.
Pcmcia-cs
---------
PCMCIA (PC Card) support is now partially implemented in the main
kernel source. The "pcmciautils" package (see above) replaces pcmcia-cs
for newest kernels.
Quota-tools
-----------
Support for 32 bit uid's and gid's is required if you want to use
the newer version 2 quota format. Quota-tools version 3.07 and
newer has this support. Use the recommended version or newer
from the table above.
Intel IA32 microcode
--------------------
A driver has been added to allow updating of Intel IA32 microcode,
accessible as a normal (misc) character device. If you are not using
udev you may need to:
mkdir /dev/cpu
mknod /dev/cpu/microcode c 10 184
chmod 0644 /dev/cpu/microcode
as root before you can use this. You'll probably also want to
get the user-space microcode_ctl utility to use with this.
Powertweak
----------
If you are running v0.1.17 or earlier, you should upgrade to
version v0.99.0 or higher. Running old versions may cause problems
with programs using shared memory.
udev
----
udev is a userspace application for populating /dev dynamically with
only entries for devices actually present. udev replaces the basic
functionality of devfs, while allowing persistent device naming for
devices.
FUSE
----
Needs libfuse 2.4.0 or later. Absolute minimum is 2.3.0 but mount
options 'direct_io' and 'kernel_cache' won't work.
Networking
==========
General changes
---------------
If you have advanced network configuration needs, you should probably
consider using the network tools from ip-route2.
Packet Filter / NAT
-------------------
The packet filtering and NAT code uses the same tools like the previous 2.4.x
kernel series (iptables). It still includes backwards-compatibility modules
for 2.2.x-style ipchains and 2.0.x-style ipfwadm.
PPP
---
The PPP driver has been restructured to support multilink and to
enable it to operate over diverse media layers. If you use PPP,
upgrade pppd to at least 2.4.0.
If you are not using udev, you must have the device file /dev/ppp
which can be made by:
mknod /dev/ppp c 108 0
as root.
Isdn4k-utils
------------
Due to changes in the length of the phone number field, isdn4k-utils
needs to be recompiled or (preferably) upgraded.
NFS-utils
---------
In 2.4 and earlier kernels, the nfs server needed to know about any
client that expected to be able to access files via NFS. This
information would be given to the kernel by "mountd" when the client
mounted the filesystem, or by "exportfs" at system startup. exportfs
would take information about active clients from /var/lib/nfs/rmtab.
This approach is quite fragile as it depends on rmtab being correct
which is not always easy, particularly when trying to implement
fail-over. Even when the system is working well, rmtab suffers from
getting lots of old entries that never get removed.
With 2.6 we have the option of having the kernel tell mountd when it
gets a request from an unknown host, and mountd can give appropriate
export information to the kernel. This removes the dependency on
rmtab and means that the kernel only needs to know about currently
active clients.
To enable this new functionality, you need to:
mount -t nfsd nfsd /proc/fs/nfsd
before running exportfs or mountd. It is recommended that all NFS
services be protected from the internet-at-large by a firewall where
that is possible.
mcelog
------
In Linux 2.6.31+ the i386 kernel needs to run the mcelog utility
as a regular cronjob similar to the x86-64 kernel to process and log
machine check events when CONFIG_X86_NEW_MCE is enabled. Machine check
events are errors reported by the CPU. Processing them is strongly encouraged.
All x86-64 kernels since 2.6.4 require the mcelog utility to
process machine checks.
Getting updated software
========================
Kernel compilation
******************
gcc
---
o <ftp://ftp.gnu.org/gnu/gcc/>
Make
----
o <ftp://ftp.gnu.org/gnu/make/>
Binutils
--------
o <ftp://ftp.kernel.org/pub/linux/devel/binutils/>
System utilities
****************
Util-linux
----------
o <ftp://ftp.kernel.org/pub/linux/utils/util-linux/>
Ksymoops
--------
o <ftp://ftp.kernel.org/pub/linux/utils/kernel/ksymoops/v2.4/>
Module-Init-Tools
-----------------
o <ftp://ftp.kernel.org/pub/linux/kernel/people/rusty/modules/>
Mkinitrd
--------
o <ftp://rawhide.redhat.com/pub/rawhide/SRPMS/SRPMS/>
E2fsprogs
---------
o <http://prdownloads.sourceforge.net/e2fsprogs/e2fsprogs-1.29.tar.gz>
JFSutils
--------
o <http://jfs.sourceforge.net/>
Reiserfsprogs
-------------
o <http://www.namesys.com/pub/reiserfsprogs/reiserfsprogs-3.6.3.tar.gz>
Reiser4progs
------------
o <ftp://ftp.namesys.com/pub/reiser4progs/>
Xfsprogs
--------
o <ftp://oss.sgi.com/projects/xfs/download/>
Pcmciautils
-----------
o <ftp://ftp.kernel.org/pub/linux/utils/kernel/pcmcia/>
Pcmcia-cs
---------
o <http://pcmcia-cs.sourceforge.net/>
Quota-tools
----------
o <http://sourceforge.net/projects/linuxquota/>
DocBook Stylesheets
-------------------
o <http://nwalsh.com/docbook/dsssl/>
XMLTO XSLT Frontend
-------------------
o <http://cyberelk.net/tim/xmlto/>
Intel P6 microcode
------------------
o <http://www.urbanmyth.org/microcode/>
Powertweak
----------
o <http://powertweak.sourceforge.net/>
udev
----
o <http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html>
FUSE
----
o <http://sourceforge.net/projects/fuse>
mcelog
------
o <ftp://ftp.kernel.org/pub/linux/utils/cpu/mce/mcelog/>
Networking
**********
PPP
---
o <ftp://ftp.samba.org/pub/ppp/ppp-2.4.0.tar.gz>
Isdn4k-utils
------------
o <ftp://ftp.isdn4linux.de/pub/isdn4linux/utils/isdn4k-utils.v3.1pre1.tar.gz>
NFS-utils
---------
o <http://sourceforge.net/project/showfiles.php?group_id=14>
Iptables
--------
o <http://www.iptables.org/downloads.html>
Ip-route2
---------
o <ftp://ftp.tux.org/pub/net/ip-routing/iproute2-2.2.4-now-ss991023.tar.gz>
OProfile
--------
o <http://oprofile.sf.net/download/>
NFS-Utils
---------
o <http://nfs.sourceforge.net/>
//}}}
Для установки Chromium в Windows достаточно скачать установщик с сайта http://getchromium.org/
/***
|Name:|CloseOnCancelPlugin|
|Description:|Closes the tiddler if you click new tiddler then cancel. Default behaviour is to leave it open|
|Version:|3.0.1 Rev: 3861|
|Source:|http://mptw.tiddlyspot.com/#CloseOnCancelPlugin|
***/
//{{{
merge(config.commands.cancelTiddler,{
handler_mptw_orig_closeUnsaved: config.commands.cancelTiddler.handler,
handler: function(event,src,title) {
this.handler_mptw_orig_closeUnsaved(event,src,title);
if (!store.tiddlerExists(title) && !store.isShadowTiddler(title))
story.closeTiddler(title,true);
return false;
}
});
//}}}
Name: MptwTeal
Background: #fff
Foreground: #000
PrimaryPale: #B5D1DF
PrimaryLight: #618FA9
PrimaryMid: #1a3844
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #f8f8f8
TertiaryLight: #bbb
TertiaryMid: #999
TertiaryDark: #888
Error: #f88
#[[briar|http://briar.sourceforge.net/index.html]]
Распределённая система контроля версий написанная на JavaScript как фрондэнд к Fossil
<<miniBrowser noplayer http://darkcopy.com/fullscreen.html>>
/***
|''Name:''|DateFormatString|
|''Version:''||
|''Source:''|[[AiddlyWiki|http://aiddlywiki.sourceforge.net]]|
|''Author:''|[[Arphen Lin|mailto:arphenlin@gmail.com]]|
|''Type:''|WikiBar addon|
|''Required:''|WikiBar 2.0.0+|
!Description
Add date format string syntax.
!Installation
#Install WikiBar firstly.
#Create your addon as a tiddler and add 'wikibarAddons' tag.
!Code
***/
//{{{
//----------------------------------------------------------------------------
// addon install function: this is a must
//----------------------------------------------------------------------------
function wikibar_addonInstall(unused)
{
// define tools
var dateFormatString={
TYPE:'MENU',
CAPTION: 'date format string',
TOOLTIP: 'often used with \"today\" macro',
YYYY:
{
TOOLTIP: 'full year',
syntax: 'YYYY',
HANDLER: wikibar_editFormatByCursor
},
YY:
{
TOOLTIP: '2-digit year',
syntax: 'YY',
HANDLER: wikibar_editFormatByCursor
},
MMM:
{
TOOLTIP: 'month name',
syntax: 'MMM',
HANDLER: wikibar_editFormatByCursor
},
MM:
{
TOOLTIP: 'month',
syntax: 'MM',
HANDLER: wikibar_editFormatByCursor
},
OMM:
{
TOOLTIP: 'zero-leading month',
syntax: '0MM',
HANDLER: wikibar_editFormatByCursor
},
DDD:
{
TOOLTIP: 'week day',
syntax: 'DDD',
HANDLER: wikibar_editFormatByCursor
},
DD:
{
TOOLTIP: 'day',
syntax: 'DD',
HANDLER: wikibar_editFormatByCursor
},
'0DD':
{
TOOLTIP: 'zero-leading day',
syntax: '0DD',
HANDLER: wikibar_editFormatByCursor
},
DDth:
{
TOOLTIP: 'day with trailing (English) suffix',
syntax: 'DDth',
HANDLER: wikibar_editFormatByCursor
},
hh:
{
TOOLTIP: 'hour',
syntax: 'hh',
HANDLER: wikibar_editFormatByCursor
},
'0hh':
{
TOOLTIP: 'zero-leading hour',
syntax: '0hh',
HANDLER: wikibar_editFormatByCursor
},
mm:
{
TOOLTIP: 'minute',
syntax: 'mm',
HANDLER: wikibar_editFormatByCursor
},
'0mm':
{
TOOLTIP: 'zero-leading minute',
syntax: '0mm',
HANDLER: wikibar_editFormatByCursor
},
ss:
{
TOOLTIP: 'second',
syntax: 'ss',
HANDLER: wikibar_editFormatByCursor
},
'0ss':
{
TOOLTIP: 'zero-leading second',
syntax: '0ss',
HANDLER: wikibar_editFormatByCursor
}
};
// register tools
wikibarStore.addon.dateFormatString = dateFormatString;
}
// for debugging: you can turn it off in final release ----------------------
wikibar_addonInstall();
//}}}
/***
|Name|[[DatePlugin]]|
|Source|http://www.TiddlyTools.com/#DatePlugin|
|Documentation|http://www.TiddlyTools.com/#DatePluginInfo|
|Version|2.7.2|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|formatted dates plus popup menu with 'journal' link, changes and (optional) reminders|
This plugin provides a general approach to displaying formatted dates and/or links and popups that permit easy navigation and management of tiddlers based on their creation/modification dates.
!!!!!Documentation
>see [[DatePluginInfo]]
!!!!!Configuration
<<<
<<option chkDatePopupHideCreated>> omit 'created' section from date popups
<<option chkDatePopupHideChanged>> omit 'changed' section from date popups
<<option chkDatePopupHideTagged>> omit 'tagged' section from date popups
<<option chkDatePopupHideReminders>> omit 'reminders' section from date popups
<<option chkShowJulianDate>> display Julian day number (1-365) below current date
see [[DatePluginConfig]] for additional configuration settings, for use in calendar displays, including:
*date formats
*color-coded backgrounds
*annual fixed-date holidays
*weekends
<<<
!!!!!Revisions
<<<
2010.12.15 2.7.2 omit date highlighting when hiding popup items (created/changed/tagged/reminders)
|please see [[DatePluginInfo]] for additional revision details|
2005.10.30 0.9.0 pre-release
<<<
!!!!!Code
***/
//{{{
version.extensions.DatePlugin= {major: 2, minor: 7, revision: 2, date: new Date(2010,12,15)};
config.macros.date = {
format: 'YYYY.0MM.0DD', // default date display format
linkformat: 'YYYY.0MM.0DD', // 'dated tiddler' link format
linkedbg: '#babb1e',
todaybg: '#ffab1e',
weekendbg: '#c0c0c0',
holidaybg: '#ffaace',
createdbg: '#bbeeff',
modifiedsbg: '#bbeeff',
remindersbg: '#c0ffee',
weekend: [ 1,0,0,0,0,0,1 ], // [ day index values: sun=0, mon=1, tue=2, wed=3, thu=4, fri=5, sat=6 ],
holidays: [ '01/01', '07/04', '07/24', '11/24' ]
// NewYearsDay, IndependenceDay(US), Eric's Birthday (hooray!), Thanksgiving(US)
};
config.macros.date.handler = function(place,macroName,params)
{
// default: display current date
var now =new Date();
var date=now;
var mode='display';
if (params[0]&&['display','popup','link'].contains(params[0].toLowerCase()))
{ mode=params[0]; params.shift(); }
if (!params[0] || params[0]=='today')
{ params.shift(); }
else if (params[0]=='filedate')
{ date=new Date(document.lastModified); params.shift(); }
else if (params[0]=='tiddler')
{ date=store.getTiddler(story.findContainingTiddler(place).id.substr(7)).modified; params.shift(); }
else if (params[0].substr(0,8)=='tiddler:')
{ var t; if ((t=store.getTiddler(params[0].substr(8)))) date=t.modified; params.shift(); }
else {
var y = eval(params.shift().replace(/Y/ig,(now.getYear()<1900)?now.getYear()+1900:now.getYear()));
var m = eval(params.shift().replace(/M/ig,now.getMonth()+1));
var d = eval(params.shift().replace(/D/ig,now.getDate()+0));
date = new Date(y,m-1,d);
}
// date format with optional custom override
var format=this.format; if (params[0]) format=params.shift();
var linkformat=this.linkformat; if (params[0]) linkformat=params.shift();
showDate(place,date,mode,format,linkformat);
}
window.showDate=showDate;
function showDate(place,date,mode,format,linkformat,autostyle,weekend)
{
mode =mode||'display';
format =format||config.macros.date.format;
linkformat=linkformat||config.macros.date.linkformat;
// format the date output
var title=date.formatString(format);
var linkto=date.formatString(linkformat);
// just show the formatted output
if (mode=='display') { place.appendChild(document.createTextNode(title)); return; }
// link to a 'dated tiddler'
var link = createTiddlyLink(place, linkto, false);
link.appendChild(document.createTextNode(title));
link.title = linkto;
link.date = date;
link.format = format;
link.linkformat = linkformat;
// if using a popup menu, replace click handler for dated tiddler link
// with handler for popup and make link text non-italic (i.e., an 'existing link' look)
if (mode=='popup') {
link.onclick = onClickDatePopup;
link.style.fontStyle='normal';
}
// format the popup link to show what kind of info it contains (for use with calendar generators)
if (autostyle) setDateStyle(place,link,weekend);
}
//}}}
//{{{
// NOTE: This function provides default logic for setting the date style when displayed in a calendar
// To customize the date style logic, please see[[DatePluginConfig]]
function setDateStyle(place,link,weekend) {
// alias variable names for code readability
var date=link.date;
var fmt=link.linkformat;
var linkto=date.formatString(fmt);
var cmd=config.macros.date;
var co=config.options; // abbrev
if ((weekend!==undefined?weekend:isWeekend(date))&&(cmd.weekendbg!=''))
{ place.style.background = cmd.weekendbg; }
if (hasModifieds(date)||hasCreateds(date)||hasTagged(date,fmt))
{ link.style.fontStyle='normal'; link.style.fontWeight='bold'; }
if (hasReminders(date))
{ link.style.textDecoration='underline'; }
if (isToday(date))
{ link.style.border='1px solid black'; }
if (isHoliday(date)&&(cmd.holidaybg!=''))
{ place.style.background = cmd.holidaybg; }
if (hasCreateds(date)&&(cmd.createdbg!=''))
{ place.style.background = cmd.createdbg; }
if (hasModifieds(date)&&(cmd.modifiedsbg!=''))
{ place.style.background = cmd.modifiedsbg; }
if ((hasTagged(date,fmt)||store.tiddlerExists(linkto))&&(cmd.linkedbg!=''))
{ place.style.background = cmd.linkedbg; }
if (hasReminders(date)&&(cmd.remindersbg!=''))
{ place.style.background = cmd.remindersbg; }
if (isToday(date)&&(cmd.todaybg!=''))
{ place.style.background = cmd.todaybg; }
if (config.options.chkShowJulianDate) { // optional display of Julian date numbers
var m=[0,31,59,90,120,151,181,212,243,273,304,334];
var d=date.getDate()+m[date.getMonth()];
var y=date.getFullYear();
if (date.getMonth()>1 && (y%4==0 && y%100!=0) || y%400==0)
d++; // after February in a leap year
wikify('@@font-size:80%;<br>'+d+'@@',place);
}
}
//}}}
//{{{
function isToday(date) // returns true if date is today
{ var now=new Date(); return ((now-date>=0) && (now-date<86400000)); }
function isWeekend(date) // returns true if date is a weekend
{ return (config.macros.date.weekend[date.getDay()]); }
function isHoliday(date) // returns true if date is a holiday
{
var longHoliday = date.formatString('0MM/0DD/YYYY');
var shortHoliday = date.formatString('0MM/0DD');
for(var i = 0; i < config.macros.date.holidays.length; i++) {
var holiday=config.macros.date.holidays[i];
if (holiday==longHoliday||holiday==shortHoliday) return true;
}
return false;
}
//}}}
//{{{
// Event handler for clicking on a day popup
function onClickDatePopup(e) { e=e||window.event;
var p=Popup.create(this); if (!p) return false;
// always show dated tiddler link (or just date, if readOnly) at the top...
if (!readOnly || store.tiddlerExists(this.date.formatString(this.linkformat)))
createTiddlyLink(createTiddlyElement(p,'li'),this.date.formatString(this.linkformat),true);
else
createTiddlyText(createTiddlyElement(p,'li'),this.date.formatString(this.linkformat));
addCreatedsToPopup(p,this.date,this.format);
addModifiedsToPopup(p,this.date,this.format);
addTaggedToPopup(p,this.date,this.linkformat);
addRemindersToPopup(p,this.date,this.linkformat);
Popup.show(); e.cancelBubble=true; if(e.stopPropagation)e.stopPropagation(); return false;
}
//}}}
//{{{
function indexCreateds() // build list of tiddlers, hash indexed by creation date
{
var createds= { };
var tiddlers = store.getTiddlers('title','excludeLists');
for (var t = 0; t < tiddlers.length; t++) {
var date = tiddlers[t].created.formatString('YYYY0MM0DD')
if (!createds[date])
createds[date]=new Array();
createds[date].push(tiddlers[t].title);
}
return createds;
}
function hasCreateds(date) // returns true if date has created tiddlers
{
if (config.options.chkDatePopupHideCreated) return false;
if (!config.macros.date.createds) config.macros.date.createds=indexCreateds();
return (config.macros.date.createds[date.formatString('YYYY0MM0DD')]!=undefined);
}
function addCreatedsToPopup(p,when,format)
{
if (config.options.chkDatePopupHideCreated) return false;
var force=(store.isDirty() && when.formatString('YYYY0MM0DD')==new Date().formatString('YYYY0MM0DD'));
if (force || !config.macros.date.createds) config.macros.date.createds=indexCreateds();
var indent=String.fromCharCode(160)+String.fromCharCode(160);
var createds = config.macros.date.createds[when.formatString('YYYY0MM0DD')];
if (createds) {
createds.sort();
var e=createTiddlyElement(p,'div',null,null,'created ('+createds.length+')');
for(var t=0; t<createds.length; t++) {
var link=createTiddlyLink(createTiddlyElement(p,'li'),createds[t],false);
link.appendChild(document.createTextNode(indent+createds[t]));
}
}
}
//}}}
//{{{
function indexModifieds() // build list of tiddlers, hash indexed by modification date
{
var modifieds= { };
var tiddlers = store.getTiddlers('title','excludeLists');
for (var t = 0; t < tiddlers.length; t++) {
var date = tiddlers[t].modified.formatString('YYYY0MM0DD')
if (!modifieds[date])
modifieds[date]=new Array();
modifieds[date].push(tiddlers[t].title);
}
return modifieds;
}
function hasModifieds(date) // returns true if date has modified tiddlers
{
if (config.options.chkDatePopupHideChanged) return false;
if (!config.macros.date.modifieds) config.macros.date.modifieds = indexModifieds();
return (config.macros.date.modifieds[date.formatString('YYYY0MM0DD')]!=undefined);
}
function addModifiedsToPopup(p,when,format)
{
if (config.options.chkDatePopupHideChanged) return false;
var date=when.formatString('YYYY0MM0DD');
var force=(store.isDirty() && date==new Date().formatString('YYYY0MM0DD'));
if (force || !config.macros.date.modifieds) config.macros.date.modifieds=indexModifieds();
var indent=String.fromCharCode(160)+String.fromCharCode(160);
var mods = config.macros.date.modifieds[date];
if (mods) {
// if a tiddler was created on this date, don't list it in the 'changed' section
if (config.macros.date.createds && config.macros.date.createds[date]) {
var temp=[];
for(var t=0; t<mods.length; t++)
if (!config.macros.date.createds[date].contains(mods[t]))
temp.push(mods[t]);
mods=temp;
}
mods.sort();
var e=createTiddlyElement(p,'div',null,null,'changed ('+mods.length+')');
for(var t=0; t<mods.length; t++) {
var link=createTiddlyLink(createTiddlyElement(p,'li'),mods[t],false);
link.appendChild(document.createTextNode(indent+mods[t]));
}
}
}
//}}}
//{{{
function hasTagged(date,format) // returns true if date is tagging other tiddlers
{
if (config.options.chkDatePopupHideTagged) return false;
return store.getTaggedTiddlers(date.formatString(format)).length>0;
}
function addTaggedToPopup(p,when,format)
{
if (config.options.chkDatePopupHideTagged) return false;
var indent=String.fromCharCode(160)+String.fromCharCode(160);
var tagged=store.getTaggedTiddlers(when.formatString(format));
if (tagged.length) var e=createTiddlyElement(p,'div',null,null,'tagged ('+tagged.length+')');
for(var t=0; t<tagged.length; t++) {
var link=createTiddlyLink(createTiddlyElement(p,'li'),tagged[t].title,false);
link.appendChild(document.createTextNode(indent+tagged[t].title));
}
}
//}}}
//{{{
function indexReminders(date,leadtime) // build list of tiddlers with reminders, hash indexed by reminder date
{
var reminders = { };
if(window.findTiddlersWithReminders!=undefined) { // reminder plugin is installed
var t = findTiddlersWithReminders(date, [0,leadtime], null, null, 1);
for(var i=0; i<t.length; i++) reminders[t[i].matchedDate]=true;
}
return reminders;
}
function hasReminders(date) // returns true if date has reminders
{
if (config.options.chkDatePopupHideReminders) return false;
if (window.reminderCacheForCalendar)
return window.reminderCacheForCalendar[date]; // use calendar cache
if (!config.macros.date.reminders)
config.macros.date.reminders = indexReminders(date,90); // create a 90-day leadtime reminder cache
return (config.macros.date.reminders[date]);
}
function addRemindersToPopup(p,when,format)
{
if (config.options.chkDatePopupHideReminders) return false;
if(window.findTiddlersWithReminders==undefined) return; // reminder plugin not installed
var indent = String.fromCharCode(160)+String.fromCharCode(160);
var reminders=findTiddlersWithReminders(when, [0,31],null,null,1);
createTiddlyElement(p,'div',null,null,'reminders ('+(reminders.length||'none')+')');
for(var t=0; t<reminders.length; t++) {
link = createTiddlyLink(createTiddlyElement(p,'li'),reminders[t].tiddler,false);
var diff=reminders[t].diff;
diff=(diff<1)?'Today':((diff==1)?'Tomorrow':diff+' days');
var txt=(reminders[t].params['title'])?reminders[t].params['title']:reminders[t].tiddler;
link.appendChild(document.createTextNode(indent+diff+' - '+txt));
}
if (readOnly) return; // readonly... omit 'new reminder...' command
var rem='\\<\\<reminder day:%0 month:%1 year:%2 title:"Enter a reminder title here"\\>\\>';
rem=rem.format([when.getDate(),when.getMonth()+1,when.getYear()+1900]);
var cmd="<<newTiddler label:[["+indent+"new reminder...]] prompt:[[add a reminder to '%0']]"
+" title:[[%0]] text:{{var t=store.getTiddlerText('%0','');t+(t.length?'\\n':'')+'%1'}} tag:%2>>";
wikify(cmd.format([when.formatString(format),rem,config.options.txtCalendarReminderTags||'']),
createTiddlyElement(p,'li'));
}
//}}}
[[Hello people]]
[[Начало]]
/***
|Name|EditFieldPlugin|
|Source|http://www.TiddlyTools.com/#EditFieldPlugin|
|Version|1.6.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|extend core edit macro for use in ViewTemplates or direct embedding in tiddler content|
!!!!!Usage
<<<
Normally, when a tiddler is edited, a set of input fields is displayed (as defined by the [[EditTemplate]]), and any changes you make are only saved when you press the "done" (or "cancel") command in the tiddler editor's toolbar. However, you can also ''embed an input field directly in //viewed// tiddler content'' by writing:
{{{
<<edit fieldname numberOfLines defaultValue>>
<<edit fieldname@TiddlerName numberOfLines defaultValue>>
}}}
or in the [[ViewTemplate]] (to add it to every tiddler):
{{{
<span macro='edit fieldname numberOfLines defaultValue'></span>
<span macro='edit fieldname@TiddlerName numberOfLines defaultValue'></span>
}}}
Unfortunately, while the input field will be displayed, the "done" command item is not available when //viewing// a tiddler, so the 'save/discard' handling cannot be invoked once you have decided that your input activities are complete, and any changes you make will not stored anywhere. To address this, the plugin extends the input field handler so that when a field is embedded in normal tiddler content and you make changes, it can automatically save/discard your changes as soon as you press ENTER or move away ('onBlur' handling) from that input field. You can also abandon your changes to input field content by pressing ESCAPE.
The plugin also adds support for an optional 'remote field reference' syntax: "{{{fieldname@TiddlerName}}}" so you can display and edit fields stored in other tiddlers. This allows you to create, for example, 'summary' tiddlers for reviewing/editing field values from several tiddlers at the same time.
Note: a message is displayed before saving/discarding any field changes. To suppress either (or both) of these confirmation messages, you can add the following configuration settings to [[EditFieldPluginConfig]] (or any other tiddler you are using to store and apply 'persistent settings'):
{{{
config.macros.edit.cancelMsg = "";
config.macros.edit.saveMsg = "";
}}}
<<<
!!!!!Examples
<<<
*"""<<edit foobar>>"""<br><<edit foobar>>
*"""<<edit foobar@SomeTiddler>>"""<br><<edit foobar@SomeTiddler>>
*"""<<edit tags>>"""<br><<edit tags>>
*"""<<edit text 15>>"""<br>{{editor{<<edit text 15>>}}}
<<<
!!!!!Revisions
<<<
2010.11.15 [1.6.1] In handler(), corrected display field values for 'non-stored' tiddler content (e.g., shadows, tags, default new tiddler)
2010.10.31 [1.6.0] In handler(), fixed display of remote field values. In onblur(), refactored save/cancel message text for easier customization and bypass confirmation if text is blank.
2009.09.16 [1.5.1] fixed 'onblur' handling for local fields (fieldname@here). Added support for '@here' syntax
2009.09.05 [1.5.0] code refactored. added handling for fieldname@tiddlername
2007.08.22 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.EditFieldPlugin= {major: 1, minor: 6, revision: 1, date: new Date(2010,11,15)};
config.macros.edit.editFieldPlugin_savedHandler=config.macros.edit.handler;
config.macros.edit.cancelMsg = "Abandon changes to %0@%1?";
config.macros.edit.saveMsg = "Save changes to %0@%1?";
config.macros.edit.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
// let core render input/textarea, then get resulting element
config.macros.edit.editFieldPlugin_savedHandler.apply(this,arguments);
var fieldType=params[0]=="text"||params[1]?'textarea':'input';
var elems=place.getElementsByTagName(fieldType); var e=elems[elems.length-1];
// extended fieldname@tiddlername handling
var parts=e.getAttribute("edit").split('@');
var field=parts[0];
var title=parts[1]||tiddler.title;
if (title=='here') title=tiddler.title;
// stop field from being saved with 'done' button
if (parts[1]) { e.setAttribute("edit",null); e.setAttribute("field",field); }
// save starting value and target tiddler
e.value=store.getValue(title,field)||e.value; // get field value
e.setAttribute("currval",e.value); // save starting value
e.setAttribute("tiddler",title);
// force height for textarea field
if (fieldType=="textarea" && params[1]) e.style.height=params[1]+"em";
// if viewing tiddler, add autosave handlers
var here=story.findContainingTiddler(place);
var isViewed=here&&here.getAttribute("template").indexOf("ViewTemplate")!=-1;
if (parts[1]||isViewed) { // remote reference or view mode editing...
story.setDirty(tiddler.title,false); // clear tiddler ("dirty") flag (set by core)
e.onkeydown=function(ev) { // ENTER key=save (for single-line input)
var event=ev?ev:window.event;
this.setAttribute("keyCode",event.keyCode); // save last keyCode (for blur)
if (event.keyCode==13 && this.nodeName.toUpperCase()!="TEXTAREA")
this.saveField(); // save input to tiddler field
}
e.onblur=function(ev) { // confirm input when focus moves away
var event=ev?ev:window.event;
var tid=this.getAttribute("tiddler"); if (!tid || !tid.length) return;
var field=this.getAttribute("edit")||this.getAttribute("field");
if (this.value==this.getAttribute("currval")) return; // no change
if (this.getAttribute("keyCode")=="27") { // if user pressed ESC
var msg=config.macros.edit.cancelMsg.format([field,tid]);
if (!msg.length || confirm(msg)) this.value=this.getAttribute("currval"); // reset value
this.id=new Date().getTime(); // set unique ID for delayed re-focus after blur
setTimeout("document.getElementById('"+this.id+"').focus()",1);
} else { // other focus change events
var msg=config.macros.edit.saveMsg.format([field,tid]);
if (!msg.length || confirm(msg)) this.saveField(); // save value
else this.value=this.getAttribute("currval");
}
};
e.saveField=function() { // unpack/validate attribs and then save the field
var tid=this.getAttribute("tiddler"); if (!tid || !tid.length) return;
var field=this.getAttribute("edit")||this.getAttribute("field");
var title=(field=="title")?this.value:tid;
if (!title.length) { // error: blank tiddler title
this.value=this.getAttribute("currval"); // reset value
this.id=new Date().getTime(); // set unique ID for delayed messages/refocus
setTimeout("displayMessage('Please enter a non-blank value')",1);
setTimeout("document.getElementById('"+this.id+"').focus()",2);
return;
}
config.macros.edit.saveField(tid,title,field,this.value);
this.setAttribute("currval",this.value); // remember new starting value
};
}
}
//}}}
//{{{
// save input value to tiddler field (create/touch/rename tiddler as needed)
config.macros.edit.saveField = function(tid,title,field,val) {
var t=store.getTiddler(tid);
store.suspendNotifications();
var anim=config.options.chkAnimate; config.options.chkAnimate=false; // suspend animation
var who=t&&config.options.chkForceMinorUpdate?t.modifier:config.options.txtUserName;
var when=t&&config.options.chkForceMinorUpdate?t.modified:new Date();
store.saveTiddler(t?tid:title,title,t?t.text:"",who,when,t?t.tags:[],t?t.fields:null);
store.setValue(title,field,val); // save field
if (tid!=title) // new title... show renamed tiddler in place of current one
{ story.displayTiddler(story.getTiddler(tid),title); story.closeTiddler(tid); }
if (field=="text") // content changed, refresh tiddler display
{ story.refreshTiddler(title,null,true); }
config.options.chkAnimate=anim; // resume animation
store.resumeNotifications();
store.notify(title,true);
}
//}}}
<<miniBrowser noplayer http://www.editpad.org/>>
Поднять свой smtp сервер (на примере debian)
{{{
sudo apt-get postfix
}}}
и поставить sendemail
{{{
apt-get install sendemail
}}}
Дальше всего одна строчка:
{{{
sendemail -f from@gmail.com -t username@facebook.com -u subj -m message
}}}
/***
|Name:|ExtentTagButtonPlugin|
|Description:|Adds a New tiddler button in the tag drop down|
|Version:|3.2 Rev: 3861|
|Source:|http://mptw.tiddlyspot.com/#ExtendTagButtonPlugin|
***/
//{{{
window.onClickTag_mptw_orig = window.onClickTag;
window.onClickTag = function(e) {
window.onClickTag_mptw_orig.apply(this,arguments);
var tag = this.getAttribute("tag");
var title = this.getAttribute("tiddler");
var popup = Popup.stack[Popup.stack.length-1].popup;
createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div");
wikify("<<newTiddler label:'New tiddler' tag:'"+tag+"'>>",createTiddlyElement(popup,"li"));
return false;
}
//}}}
Показать информацию по файлу:
{{{
ffmpeg -i sample.avi
}}}
Склеить изображений в видео:
{{{
ffmpeg -f image2 -i image%d.jpg video.mpg
}}}
Все картинки из текущей директории с именами файлов image1.jpg, image2.jpg и т.д. будут преобразованы в один ролик video.mpg.
Разложение видеоряда на кадры:
{{{
ffmpeg -i video.mpg image%d.jpg
}}}
Будут сгенерированы файлы image1.jpg, image2.jpg и т.д… Поддерживаемые графические форматы: PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF, SGI.
Кодирование видеоряда для Apple iPod/iPhone:
{{{
ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4
}}}
Извлечение звука из видео с последующим сохранением в MP3:
{{{
ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3
}}}
Преобразование WAV в MP3:
{{{
ffmpeg -i son_original.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3
}}}
AVI в MPG:
{{{
ffmpeg -i video_source.avi video_final.mpg
}}}
MPG в AVI:
{{{
ffmpeg -i video_source.mpg video_final.avi
}}}
Конвертация AVI-файла в несжатый анимированный GIF:
{{{
ffmpeg -i video_source.avi gif_anime.gif
}}}
Смешение аудио- и видеопотока в один результирующий файл:
{{{
ffmpeg -i son.wav -i video_source.avi video_final.mpg
}}}
Преобразование AVI в FLV:
{{{
ffmpeg -i video_source.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_final.flv
}}}
FLV в AVI:
{{{
ffmpeg -i video_source.flv -ab 56 -ar 44100 -b 200 -s 320x240 video_final.avi
}}}
[[Linux SysAdmin|http://a.dmin.msk.ru/?p=407]]
[[Wiki FFmpeg|http://ru.wikipedia.org/wiki/FFmpeg]]
# [[Fossil wiki|http://ru.wikipedia.org/wiki/Fossil]]
# [[Download Fossil|http://www.fossil-scm.org/download.html]]
# [[Cookbook Fossil|http://www.hwaci.com/cgi-bin/fossil/wiki?name=Cookbook]]
# [[Fuel|http://code.google.com/p/fuel-scm/]]
# [[Jurassic|http://code.google.com/p/jurassic-fossil/]]
<<miniBrowser noplayer http://4pda.ru/forum/index.php?autocom=favtopics>>
<<miniBrowser noplayer http://mm-3.blogspot.com/>>
<<miniBrowser noplayer http://mm-3.livejournal.com/friends>>
<<miniBrowser noplayer http://www.linux.org.ru/tracker/>>
<<miniBrowser noplayer http://statly.ru/red.html>>
<<miniBrowser noplayer http://mm3.tumblr.com/>>
<<miniBrowser noplayer http://mm3.tiddlyspot.com/#FrameBrowserTS>>
# [[findicons|http://findicons.com/pack/756/ginux]]
# [[iconfinder|http://www.iconfinder.com/search/?q=iconset:49handdrawing]]
#[[Gource — визуализируем историю работы над проектом|http://habrahabr.ru/post/75780/]]
#[[Про GitHub|http://habrahabr.ru/post/125799/]]
#[[Git to SVN|http://leonid.shevtsov.me/ru/perenos-svn-repozitariya-v-git]]
#[[LOR about git-svn|http://www.linux.org.ru/forum/development/5157592]]
#[[Habra about git|http://habrahabr.ru/post/68341/]]
#[[cloning-a-non-standard-svn-repository-with-git-svn|http://stackoverflow.com/questions/572893/cloning-a-non-standard-svn-repository-with-git-svn]]
коментарии к коммитам надо вставлять так:
{{{
git commit "$(curl -s http://whatthecommit.com/index.txt)"
}}}
Комманда git up (аналог svn up) добавляется так:
{{{
git config --global alias.up '!(git add . && git stash && git pull --rebase >&2) | grep -v "No local changes to save" && git stash pop'
}}}
git up при надобности ныкает все ещё незакоммиченные изменения в stash, обновляет локальную ветку до свежайшей и восстанавливает локальные изменения назад. В том числе переносит ещё неотправленные локальные коммиты в самый конец делая историю линейной как в Subversion, т.е. избегая веток и лишних merge-коммитов.
Если всё прошло гладко (без конфликтов) можно сразу же делать git push. В редких случаях конфликтов (вы и кто-то меняли одну и ту же строку) rebase остановится и далее конечно придется разбираться самому и завершать апдейт с помощью git rebase - - continue сколько нужно раз и git stash apply чтобы вернуть заныканные изменения.
Есть много аналогов, но в большинстве своем это нелаконичные скрипты. Алиас легко добавить на любом сервере вместе с другими просто вставив в консоль всё это:
{{{
# git up
git config --global alias.up '!(git add . && git stash && git pull --rebase >&2) | grep -v "No local changes to save" && git stash pop'
# git in / git out — смотреть какие коммиты придут/уйдут перед выполнением pull/push
git config --global alias.in '!git remote update -p; git log ..@{u}'
git config --global alias.out 'log @{u}..'
# git addremove - добавить в индекс новые файлы/изменения и удалить всё что удалилось
git config --global alias.addremove \!"git add . && git ls-files --deleted | xargs --no-run-if-empty git rm"
# git unstage - убрать всё из индекса (чтобы например добавить/закоммитить сначала что-то другое)
git config --global alias.unstage "reset HEAD --"
# git backup - заархивировать весь локальный репозиторий перед экспериментированием
git config --global alias.backup \!'file=../`git describe`.tar && echo "Creating `readlink -f $file`" && tar cf $file .'
# Просто удобные сокращения
git config --global alias.st "status -sb"
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.bra "branch -a"
git config --global alias.chp cherry-pick
git config --global alias.pr "pull --rebase"
git config --global alias.bl "blame -b -w"
git config --global alias.cia "commit --amend"
git config --global alias.lg "log --pretty=format:'%h was %an, %ar, message: %s' --graph"
git config --global alias.who "shortlog -s --"
# what else?
}}}
Делитесь полезными алиасами!
[[источник на хабре|http://habrahabr.ru/post/155391/]]
{{{
-------------------OO---------
--------------------OO--------
-------------------O----------
------------------------------
--------------------------O---
--------------------------O-O-
--------------------------OO--
------------------------------
------OO----------------------
-----OO-----------------------
-------O----------------------
------------------------------
-------------------------O----
--------------------------OO--
-------------------------OO---
----OOO-----------------------
------O-----------------------
-----O------------------------
------------------------------
-----------O-O----------------
-----------OO-----------------
------------O-----------------
------------------------------
--------------------OOO-------
--------------------O---------
---------------------O--------
------------------------------
-----------O------------------
------------O-----------------
----------OOO-----------------
}}}
{{{
--------------------------------------
------------------------O-------------
----------------------O-O-------------
------------OO------OO------------OO--
-----------O---O----OO------------OO--
OO--------O-----O---OO----------------
OO--------O---O-OO----O-O-------------
----------O-----O-------O-------------
-----------O---O----------------------
------------OO------------------------
--------------------------------------
--------------------------------------
--------------------------------------
--------------------------------------
--------------------------------------
--------------------------------------
--------------------------------------
--------------------------------------
--------------------------------------
--------------------------------------
--------------------------------------
--------------------------------------
-------------------------------------#
-------------------------------------#
-----------------------------------###
}}}
/***
|Name|HTMLFormattingPlugin|
|Source|http://www.TiddlyTools.com/#HTMLFormattingPlugin|
|Version|2.1.5|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|'HTML' formatter|
|Description|embed wiki syntax formatting inside of HTML content|
The shorthand Wiki-style formatting syntax of ~TiddlyWiki is very convenient and enables most content to be reasonably well presented. However, there are times when tried-and-true HTML formatting syntax allows more more precise control of the content display.
When HTML formatting syntax is embedded within a tiddler (in between {{{<}}}{{{html>}}} and {{{<}}}{{{/html>}}} markers) TiddlyWiki passes this content to the browser for processing as 'native' HTML. However, TiddlyWiki does not also process the HTML source content for any embedded wiki-formatting syntax it may contain. This means that while you can use HTML formatted content, you cannot mix wiki-formatted content within the HTML formatting.
!!!!!Usage
<<<
The ~HTMLFormatting plugin allows you to freely ''mix wiki-style formatting syntax within HTML formatted content'' by extending the action of the standard TiddlyWiki formatting handler.
When a tiddler is about to be displayed, ~TiddlyWiki looks for tiddler content contained within ''<{{{html}}}>'' and ''<{{{/html}}}>'' HTML tags. This content (if any) is passed directly to the browser's internal "rendering engine" to process as ~HTML-formatted content. Once the HTML formatting has been processed, all the pieces of text occuring in between the HTML formatting are then processed by the ~TiddlyWiki rendering engine, one piece at a time, so that normal wiki-style formatting can be applied to the individual text pieces.
<<<
!!!!!Line breaks
<<<
One major difference between Wiki formatting and HTML formatting is how "line breaks" are processed. Wiki formatting treats all line breaks as literal content to be displayed //as-is//. However, because HTML normally ignores line breaks and actually processes them as simple "word separators" instead, many people who write HTML include extra line breaks in their documents, just to make the "source code" easier to read.
Even though you can use HTML tags within your tiddler content, the default treatment for line breaks still follows the Wiki-style rule (i.e., all new lines are displayed as-is). When adding HTML content to a tiddler (especially if you cut-and-paste it from another web page), you should take care to avoid adding extra line breaks to the text.
If removing all the extra line breaks from your HTML content would be a big hassle, you can quickly //override the default Wiki-style line break rule// so that the line breaks use the standard HTML rules instead. Placing a ''<{{{hide linebreaks}}}>'' tag within the tiddler's HTML content changes all line breaks to spaces before rendering the content, so that the literal line breaks will be processed as simple word-breaks instead.
Note: this does //not// alter the actual tiddler content that is stored in the document, just the manner in which it is displayed. Any line breaks contained in the tiddler will still be there when you edit its content. Also, to include a literal line break when the ''<{{{hide linebreaks}}}>'' tag is present, you will need to use a ''<{{{br}}}>'' or ''<{{{p}}}>'' HTML tag instead of simply typing a line break.
<<<
!!!!!How it works
<<<
The TW core support for HTML does not let you put ANY wiki-style syntax (including TW macros) *inside* the {{{<html>...</html>}}} block. Everything between {{{<html>}}} and {{{</html>}}} is handed to the browser for processing and that is it. Fortunately, this plugin ADDS the ability to let you put wiki-syntax (including macros) inside the html. It does this by first giving the tiddler source content to the browser to process the HTML, and then handling any wiki-based syntax that remains afterward.
However, not all wiki syntax can be safely passed through the browser's parser. Specifically, any TW macros inside the HTML will get 'eaten' by the browser since the macro brackets, {{{<<...>>}}} use the "<" and ">" that normally delimit the HTML/XML syntax recognized by the browser's parser.
Similarly, you can't use InlineJavascript within the HTML because the {{{<script>...</script>}}} syntax will also be consumed by the browser and there will be nothing left to process afterward. Note: unfortunately, even though the browser removes the {{{<script>...</script>}}} sequence, it doesn't actually execute the embedded javascript code that it removes, so any scripts contained inside of <html> blocks in TW are currently being ignored. :-(
As a work-around to allow TW *macros* (but not inline scripts) to exist inside of <html> formatted blocks of content, the plugin first converts the {{{<<}}} and {{{>>}}} into "%%(" and ")%%", making them "indigestible" so they can pass unchanged through the belly of the beast (the browser's HTML parser).
After the browser has done its job, the wiki syntax sequences (including the "undigested" macros) are contained in #text nodes in the browser-generated DOM elements. The plugin then recursively locates and processes each #text node, converts the %%( and )%% back into {{{<<}}} and {{{>>}}}, passes the result to wikify() for further rendering of the wiki-formatted syntax into a containing SPAN that replaces the previous #text node. At the end of this process, none of the encoded %%( and )%% sequences remain in the rendered tiddler output.
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''HTMLFormattingPlugin'' (tagged with <<tag systemConfig>>)
^^documentation and javascript for HTMLFormatting handling^^
<<<
!!!!!Revision History
<<<
''2007.12.04 [*.*.*]'' update for TW2.3.0: replaced deprecated core functions, regexps, and macros
''2007.06.14 [2.1.5]'' in formatter, removed call to e.normalize(). Creates an INFINITE RECURSION error in Safari!!!!
''2006.09.10 [2.1.4]'' update formatter for 2.1 compatibility (use this.lookaheadRegExp instead of temp variable)
''2006.05.28 [2.1.3]'' in wikifyTextNodes(), decode the *value* of TEXTAREA nodes, but don't wikify() its children. (thanks to "ayj" for bug report)
''2006.02.19 [2.1.2]'' in wikifyTextNodes(), put SPAN element into tiddler DOM (replacing text node), BEFORE wikifying the text content. This ensures that the 'place' passed to any macros is correctly defined when the macro is evaluated, so that calls to story.findContainingTiddler(place) will work as expected. (Thanks for bug report from GeoffSlocock)
''2006.02.05 [2.1.1]'' wrapped wikifier hijack in init function to eliminate globals and avoid FireFox 1.5.0.1 crash bug when referencing globals
''2005.12.01 [2.1.0]'' don't wikify #TEXT nodes inside SELECT and TEXTAREA elements
''2005.11.06 [2.0.1]'' code cleanup
''2005.10.31 [2.0.0]'' replaced hijack wikify() with hijack config.formatters["html"] and simplified recursive WikifyTextNodes() code
''2005.10.09 [1.0.2]'' combined documentation and code into a single tiddler
''2005.08.05 [1.0.1]'' moved HTML and CSS definitions into plugin code instead of using separate tiddlers
''2005.07.26 [1.0.1]'' Re-released as a plugin. Added <{{{html}}}>...</{{{nohtml}}}> and <{{{hide newlines}}}> handling
''2005.07.20 [1.0.0]'' Initial Release (as code adaptation)
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
<<<
!!!!!Code
***/
//{{{
version.extensions.HTMLFormatting = {major: 2, minor: 1, revision: 5, date: new Date(2007,6,14)};
// find the formatter for HTML and replace the handler
initHTMLFormatter();
function initHTMLFormatter()
{
for (var i=0; i<config.formatters.length && config.formatters[i].name!="html"; i++);
if (i<config.formatters.length) config.formatters[i].handler=function(w) {
if (!this.lookaheadRegExp) // fixup for TW2.0.x
this.lookaheadRegExp = new RegExp(this.lookahead,"mg");
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var html=lookaheadMatch[1];
// optionally suppress wiki-style literal handling of newlines
// strip any carriage returns added by Internet Explorer's textarea edit field
// encode newlines as \n so Internet Explorer's HTML parser won't eat them
// encode macro brackets (<< and >>) so HTML parser won't eat them
if (html.indexOf('<hide linebreaks>')!=-1) html=html.replace(/\n/g,' ');
html=html.replace(/\r/g,'');
html=html.replace(/\n/g,'\\n');
html=html.replace(/<</g,'%%(').replace(/>>/g,')%%');
// create span to hold HTML
// parse HTML and normalize the results
// walk node tree and call wikify() on each text node
var e = createTiddlyElement(w.output,"span");
e.innerHTML=html;
// REMOVED: e.normalize(); // THIS CAUSED INFINITE RECURSION IN SAFARI
wikifyTextNodes(e);
// advance to next parse position
w.nextMatch = this.lookaheadRegExp.lastIndex;
}
}
}
// wikify text nodes remaining after HTML content is processed (pre-order recursion)
function wikifyTextNodes(theNode)
{
// textarea node doesn't get wikified, just decoded...
if (theNode.nodeName.toLowerCase()=='textarea')
theNode.value=theNode.value.replace(/\%%\(/g,'<<').replace(/\)\%%/g,'>>').replace(/\\n/g,'\n');
else for (var i=0;i<theNode.childNodes.length;i++) {
var theChild=theNode.childNodes.item(i);
if (theChild.nodeName.toLowerCase()=='option') continue;
if (theChild.nodeName.toLowerCase()=='select') continue;
wikifyTextNodes(theChild);
if (theChild.nodeName=='#text') {
var txt=theChild.nodeValue;
// decode macro brackets and newlines
txt=txt.replace(/\%%\(/g,'<<').replace(/\)\%%/g,'>>').replace(/\\n/g,'\n');
// replace text node with wikified() span
var newNode=createTiddlyElement(null,"span");
theNode.replaceChild(newNode,theChild);
wikify(txt,newNode);
}
}
}
//}}}
Ладно, раз уж вы сюда забрели, то можете для [[начала|Начало]] можно побольше узнать про TiddlyWiki
и насладиться зайчиком:
{{{
(\__/)
(='.'=)
(")_(")
}}}
и пингвинами
{{{
(o_
(o_ (o_ //\
(/)_ (/)_ V_/_
}}}
Любовь – это когда ты кодишь. Она подошла сзади. Обняла. Посмотрела на то, чем ты занимаешься, и прошептала на ухо: «Кавычки закрой на 127 строке, программист хренов.»
Тяжела и неказиста жизнь простого даосиста...
Кстати, а вы никогда не задумывались над тем как вы будете выглядеть (весело, нелепо, вызывающе или наоборот успокаивающе) с точки зрения жителя какой нибудь другой планеты?
представьте себе существо яркого жёлто-красного цвета с редкими полу прозрачными вставками, с головой в нижней точке туловища, семью конечностями согнутыми в пяти местах да ещё и разно длинны, перемещающееся опусканием туловища на землю и одновременным перемещением всех конечностей... ведь нигде не сказано, что на другой планете существа обязательно должны иметь чётное количество конечностей, быть прямо ходящими и голова непременно должна находиться вверху...
вот примерно таким же странным и неказистым я показался моим новым знакомымс планеты Эгрт (вроде так оно произносится) в системе NGC 1397, но обовсём этом чуть по позже...
если я напишу ещё хоть одну букву, значит я всётаки вернулся из путешествия по NGC 4414...
{{{
Бѣ - мудрое слово
ѣѣ - второе мудрое слово
}}}
[[Простой блокнот с форматированием|data:text/html, <html contenteditable>]]
[[Простой блокнот без форматирования в хроме|data:text/html, <html contenteditable=plaintext-only>]]
[[Простой блокнот без форматирования везде|data:text/html, <html><textarea style="width:100%;height:100%"/>]]
[[Свобода]]
[[Медитация]]
[[Обучение]]
[[Linux]]
[[firefox]]
[[карты]]
[[3D принтер]]
[[квадрокоптер]]
[[QR-code]]
[[Браузерные игры]]
[[Карточные игры]]
[[ZPG]]
[[Public Lab|http://publiclab.org/]]
[[Самое интересное]]
[[Мои ссылки]]
[[Благодатная почва]]
/***
|Name:|HideWhenPlugin|
|Description:|Allows conditional inclusion/exclusion in templates|
|Version:|3.1 Rev: 3919|
|Source:|http://mptw.tiddlyspot.com/#HideWhenPlugin|
For use in ViewTemplate and EditTemplate. Example usage:
{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}
{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}
***/
//{{{
window.hideWhenLastTest = false;
window.removeElementWhen = function(test,place) {
window.hideWhenLastTest = test;
if (test) {removeChildren(place);place.parentNode.removeChild(place);}
};
merge(config.macros,{
hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {removeElementWhen( eval(paramString), place);}},
showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {removeElementWhen( !eval(paramString), place);}},
hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {removeElementWhen( tiddler.tags.containsAll(params), place);}},
showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {removeElementWhen( !tiddler.tags.containsAll(params), place);}},
hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {removeElementWhen( tiddler.tags.containsAny(params), place);}},
showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {removeElementWhen( !tiddler.tags.containsAny(params), place);}},
hideWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {removeElementWhen( tiddler.tags.containsAll(params), place);}},
showWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {removeElementWhen( !tiddler.tags.containsAll(params), place);}},
hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place);}},
showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place);}},
hideWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {removeElementWhen( tiddler.title == params[0], place);}},
showWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {removeElementWhen( tiddler.title != params[0], place);}},
'else': { handler: function(place,macroName,params,wikifier,paramString,tiddler) {removeElementWhen( !window.hideWhenLastTest, place); }}
});
//}}}
#[[Free hosting|http://members.host1free.com/vps?ac=h1f_register_vps]]
I2P
http://www.i2p2.i2p/ главная страница проекта в сети I2P
http://i2p-projekt.i2p/ зеркало для http://www.i2p2.i2p/
http://i2plugins.i2p/ плагины I2P
http://i2pbote.i2p/ распределённая p2p почта I2P 2010 (плагин)
http://inr.i2p/ про eepsites [ru, en]
http://forum.i2p/ I2P форум
http://forum.rus.i2p/ русский I2P форум [ru]
http://rus.i2p/ русская I2P вики
Каталоги сайтов и сеть
http://ugha.i2p/ I2P Вики и стартовые страницы в сети I2P, каталог eepsites
http://inproxy.tino.i2p/ список eepsites и индикация их активности, статистика I2P сети
http://epsilon.i2p/ поисковик по eepsites
http://yacysearch.i2p/ поисковик по eepsites
http://search.rus.i2p/ поисковик
http://i2host.i2p/ можно получить 64-разр. номер указанного eepsite (try it)
http://stats.i2p/ статистика I2P сети
Трекеры и файлы
http://exotrack.i2p/ трекер
http://tracker2.postman.i2p/ большой трекер
http://imules-weed.i2p/ трекер iMules
http://tracker.rus.i2p/ трекер (заброшенный) [ru]
http://anonymouszero.i2p/ скачать все сезоны Rozen Maiden [ru]
http://1c.i2p/ дистрибутивы 1C [ru]
Bitcoin
http://bitcoin4cash.i2p/ купить bitcoins
http://bitcoin2cc.i2p/ обмен bitcoins на виртуальную VISA карту
http://bitcoin-escrow.i2p/ безопасные транзакции bitcoins продавец-покупатель
Библиотеки и подборки книг
http://blacklib.i2p/ библиотека книг на английском языке
http://de-ebook-archiv.i2p/ библиотека книг на немецком языке
http://bookpusher.i2p/ личная библиотека книг
http://anarchydocuments.i2p/ коллекция анархических текстов
Блоги и странички
http://zzz.i2p/ сайт разработчика
http://godfrey.i2p/ godfrey's блог (активный) - политика [ru]
http://darkman.i2p/ darkman's блог (заброшенный) [ru]
http://gaunergazette.i2p/ блог Gaunergazette - новости [de]
http://ident.i2p/ zwitter
http://hq.postman.i2p/ блог почтовой службы I2P
http://killyourtv.i2p/ ubunter's eepsite
http://fakeboobs.i2p/ галерея эротики
http://duck.i2p/ блог Tahoe-LAFS, криптоказино за bitcoins
Форумы
http://hiddenchan.i2p/ I2P board [ru]
http://4chan.i2p/
Разное
http://jonatan.walck.i2p/ страничка программиста
http://hashparty.i2p/ hello, anonymous cyberpank
http://h2ik.i2p/ h2ik's eepsite
http://i2p-bt.postman.i2p/ i2p bt торрент клиент 2005
http://hips.i2p/ блог
http://darktunnel.i2p/ I2P - TOR Gateway
Бралось это отсюда: http://serverzona.ru/index.php/menu-i2p.html
#[[Mac OS X в эмуляторе QEMU под Linux|http://habrahabr.ru/post/68489/]]
#[[iPhone Toolchain|http://www.saurik.com/id/4]]
/***
|Name:|InstantTimestampPlugin|
|Description:|A handy way to insert timestamps in your tiddler content|
|Version:|1.0.10 ($Rev: 3646 $)|
|Date:|$Date: 2008-02-27 02:34:38 +1000 (Wed, 27 Feb 2008) $|
|Source:|http://mptw.tiddlyspot.com/#InstantTimestampPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Usage
If you enter {ts} in your tiddler content (without the spaces) it will be replaced with a timestamp when you save the tiddler. Full list of formats:
* {ts} or {t} -> timestamp
* {ds} or {d} -> datestamp
* !ts or !t at start of line -> !!timestamp
* !ds or !d at start of line -> !!datestamp
(I added the extra ! since that's how I like it. Remove it from translations below if required)
!!Notes
* Change the timeFormat and dateFormat below to suit your preference.
* See also http://mptw2.tiddlyspot.com/#AutoCorrectPlugin
* You could invent other translations and add them to the translations array below.
***/
//{{{
config.InstantTimestamp = {
// adjust to suit
timeFormat: 'DD/0MM/YY 0hh:0mm',
dateFormat: 'DD/0MM/YY',
translations: [
[/^!ts?$/img, "'!!{{ts{'+now.formatString(config.InstantTimestamp.timeFormat)+'}}}'"],
[/^!ds?$/img, "'!!{{ds{'+now.formatString(config.InstantTimestamp.dateFormat)+'}}}'"],
// thanks Adapted Cat
[/\{ts?\}(?!\}\})/ig,"'{{ts{'+now.formatString(config.InstantTimestamp.timeFormat)+'}}}'"],
[/\{ds?\}(?!\}\})/ig,"'{{ds{'+now.formatString(config.InstantTimestamp.dateFormat)+'}}}'"]
],
excludeTags: [
"noAutoCorrect",
"noTimestamp",
"html",
"CSS",
"css",
"systemConfig",
"systemConfigDisabled",
"zsystemConfig",
"Plugins",
"Plugin",
"plugins",
"plugin",
"javascript",
"code",
"systemTheme",
"systemPalette"
],
excludeTiddlers: [
"StyleSheet",
"StyleSheetLayout",
"StyleSheetColors",
"StyleSheetPrint"
// more?
]
};
TiddlyWiki.prototype.saveTiddler_mptw_instanttimestamp = TiddlyWiki.prototype.saveTiddler;
TiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created) {
tags = tags ? tags : []; // just in case tags is null
tags = (typeof(tags) == "string") ? tags.readBracketedList() : tags;
var conf = config.InstantTimestamp;
if ( !tags.containsAny(conf.excludeTags) && !conf.excludeTiddlers.contains(newTitle) ) {
var now = new Date();
var trans = conf.translations;
for (var i=0;i<trans.length;i++) {
newBody = newBody.replace(trans[i][0], eval(trans[i][1]));
}
}
// TODO: use apply() instead of naming all args?
return this.saveTiddler_mptw_instanttimestamp(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created);
}
// you can override these in StyleSheet
setStylesheet(".ts,.ds { font-style:italic; }","instantTimestampStyles");
//}}}
<<miniBrowser noplayer http://jsbin.com/>>
JSLinux - это Linux в виртуальной машине на JavaScript
# [[Ода на Хабре|http://habrahabr.ru/post/119424/]]
# [[Новость на ЛОРе|http://www.linux.org.ru/news/linux-general/6276830]]
# [[Офф сайт|http://bellard.org/jslinux/]]
# [[Про крутого чувака на вики|http://ru.wikipedia.org/wiki/Беллар,_Фабрис]]
# [[Сайт крутого чувака на котором много вкусняшек|http://bellard.org/]]
# [[Поддержка сети в JSLinux|http://habrahabr.ru/post/123371/]]
# [[JSModem|https://github.com/ewiger/jsmodem]]
# [[Новость про вкусности|http://opennet.ru/opennews/art.shtml?num=31979]]
# [[JsLinux с поддержкой локального хранения|http://stud.hro.nl/0814604/jslinuxdemo/]]
# [[JsLinux с поддержкой локального хранения прямая ссылка|http://stud.hro.nl/0814604/jslinuxdemo/emulator.html]]
# [[Компилятор в JavaScript|https://github.com/kripken/emscripten]]
# [[Эмулятор x86 на JavaScript|http://habrahabr.ru/post/198192/]]
# [[Virtual x86|http://copy.sh/v24/]]
# [[Список эмуляторов на JavaScript|https://gist.github.com/ysangkok/5606032]]
https://github.com/ozaki-r/arm-js
https://github.com/ubercomp/jslm32
https://github.com/s-macke/jor1k
https://github.com/asmblah/jemul8
https://github.com/codinguncut/jsbochs
http://sourceforge.net/p/jsdosbox/home/Home/
http://bellard.org/jslinux/
http://jsmachines.net/ (PCjs)
https://github.com/thibaultimbert/Intel8080
http://copy.sh/v24/
http://jamesfriend.com.au/pce-js/pce-js-apps/
[[JSLinux в браузере|JSLinuxLocal]]
[[JsLinux с поддержкой локального хранения в браузере|JSLinuxHddLocal]]
<<miniBrowser noplayer http://stud.hro.nl/0814604/jslinuxdemo/emulator.html>>
<<miniBrowser noplayer http://bellard.org/jslinux/>>
#[[Javascript Open Source Games|http://www.java2s.com/Open-Source/Javascript/Game/CatalogGame.htm]]
#[[Open Source HTML5 Game Engines|http://mobilegameengines.com/html5/open_source_game_engines]]
#[[javascript-движки |http://html5gamedevelopment.ru/category/game-engines/]]
#[[Direct port of the Bullet physics engine to JavaScript using Emscripten|https://github.com/kripken/ammo.js/]]
#[[ammo.js-demos by schteppe|http://schteppe.github.io/ammo.js-demos/]]
#[[three.js|http://mrdoob.github.io/three.js/]]
#[[Game-Engines|https://github.com/bebraw/jswiki/wiki/Game-Engines]]
#[[jsGameWiki|https://github.com/DaRaFF/jsgamewiki]]
#[[voxel.js|http://voxeljs.com/]]
#[[cannon.js|http://schteppe.github.io/cannon.js/]]
#[[developer.mozilla.org demos|https://developer.mozilla.org/en-US/demos/search?q=3d]]
#[[open source javascript game engine for serious developers |http://ntt.cc/2011/01/31/66-open-source-javascript-game-engine-for-serious-developers.html]]
/***
|''Name:''|LegacyStrikeThroughPlugin|
|''Description:''|Support for legacy (pre 2.1) strike through formatting|
|''Version:''|1.0.2|
|''Date:''|Jul 21, 2006|
|''Source:''|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin|
|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|
|''License:''|[[BSD open source license]]|
|''CoreVersion:''|2.1.0|
***/
//{{{
// Ensure that the LegacyStrikeThrough Plugin is only installed once.
if(!version.extensions.LegacyStrikeThroughPlugin) {
version.extensions.LegacyStrikeThroughPlugin = {installed:true};
config.formatters.push(
{
name: "legacyStrikeByChar",
match: "==",
termRegExp: /(==)/mg,
element: "strike",
handler: config.formatterHelpers.createElementAndWikify
});
} //# end of "install only once"
//}}}
/***
|Name:|LessBackupsPlugin|
|Description:|Intelligently limit the number of backup files you create|
|Version:|3.0.1 ($Rev: 2320 $)|
|Date:|$Date: 2007-06-18 22:37:46 +1000 (Mon, 18 Jun 2007) $|
|Source:|http://mptw.tiddlyspot.com/#LessBackupsPlugin|
|Author:|Simon Baird|
|Email:|simon.baird@gmail.com|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Description
You end up with just backup one per year, per month, per weekday, per hour, minute, and second. So total number won't exceed about 200 or so. Can be reduced by commenting out the seconds/minutes/hours line from modes array
!!Notes
Works in IE and Firefox only. Algorithm by Daniel Baird. IE specific code by by Saq Imtiaz.
***/
//{{{
var MINS = 60 * 1000;
var HOURS = 60 * MINS;
var DAYS = 24 * HOURS;
if (!config.lessBackups) {
config.lessBackups = {
// comment out the ones you don't want or set config.lessBackups.modes in your 'tweaks' plugin
modes: [
["YYYY", 365*DAYS], // one per year for ever
["MMM", 31*DAYS], // one per month
["ddd", 7*DAYS], // one per weekday
//["d0DD", 1*DAYS], // one per day of month
["h0hh", 24*HOURS], // one per hour
["m0mm", 1*HOURS], // one per minute
["s0ss", 1*MINS], // one per second
["latest",0] // always keep last version. (leave this).
]
};
}
window.getSpecialBackupPath = function(backupPath) {
var now = new Date();
var modes = config.lessBackups.modes;
for (var i=0;i<modes.length;i++) {
// the filename we will try
var specialBackupPath = backupPath.replace(/(\.)([0-9]+\.[0-9]+)(\.html)$/,
'$1'+now.formatString(modes[i][0]).toLowerCase()+'$3')
// open the file
try {
if (config.browser.isIE) {
var fsobject = new ActiveXObject("Scripting.FileSystemObject")
var fileExists = fsobject.FileExists(specialBackupPath);
if (fileExists) {
var fileObject = fsobject.GetFile(specialBackupPath);
var modDate = new Date(fileObject.DateLastModified).valueOf();
}
}
else {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(specialBackupPath);
var fileExists = file.exists();
if (fileExists) {
var modDate = file.lastModifiedTime;
}
}
}
catch(e) {
// give up
return backupPath;
}
// expiry is used to tell if it's an 'old' one. Eg, if the month is June and there is a
// June file on disk that's more than an month old then it must be stale so overwrite
// note that "latest" should be always written because the expiration period is zero (see above)
var expiry = new Date(modDate + modes[i][1]);
if (!fileExists || now > expiry)
return specialBackupPath;
}
}
// hijack the core function
window.getBackupPath_mptw_orig = window.getBackupPath;
window.getBackupPath = function(localPath) {
return getSpecialBackupPath(getBackupPath_mptw_orig(localPath));
}
//}}}
#[[Javascript и canvas в игре «Жизнь» Джона Конвея|http://habrahabr.ru/post/111686/]]
#[[Пишем и оптимизируем Жизнь Конуэя на JS|http://habrahabr.ru/post/144237/]]
#[[Игра «Жизнь» Джона Конуэя|http://habrahabr.ru/post/67790/]]
#[[Поиграем в жизнь|http://habrahabr.ru/post/63848/]]
#[[Wiki Жизнь|http://ru.wikipedia.org/wiki/Жизнь_(игра)]]
#[[TiddlyLife]]
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
# [[Настройка Indicator-Sysmonitor|indicator-sysmonitor]]
# [[PortableLinuxApps|http://portablelinuxapps.org/]]
# [[lm-sensors|http://www.aboutubuntu.ru/content/monitoring-apparatnogo-obespecheniya-s-pomoshchyu-sensors]]
# [[Conky|http://help.ubuntu.ru/wiki/conky]]
# [[http://guac-dev.org/|http://guac-dev.org/]]
# http://ubuntunews.ru/apps/indicator-applet-ubuntu.html
# [[Как собрать бинарный deb пакет|http://habrahabr.ru/post/78094/]]
# [[LFS|http://www.linuxfromscratch.org/lfs/read.html]]
# [[LFS-RU|http://lfs.linux.kiev.ua/doc.html]]
# [[Dosbox wiki|http://ru.wikipedia.org/wiki/Dosbox]]
# [[DosBox|http://www.dosbox.com/download.php?main=1]]
# [[Обзор *top утилит|http://habrahabr.ru/post/114082/]]
# [[REST|http://ru.wikipedia.org/wiki/REST]]
# [[SETI@home|http://en.wikipedia.org/wiki/List_of_distributed_computing_projects]]
# [[RetroShare|http://retroshare.sourceforge.net/downloads.html]]
# http://tkachenkosi.blogspot.com/2009/10/firewall.html
# [[Spark TF101|http://www.paulburton.eu/projects/transformer-android/]]
# [[running Debain native|http://forum.xda-developers.com/showthread.php?t=1138661]]
# [[dwl-2100ap|http://wiki.openwrt.org/toh/d-link/dwl-2100ap]]
# [[VNC server in Ubuntu|http://habrahabr.ru/post/77159/]]
# [[Сборка программ и deb пакетов|http://www.ubuntologia.ru/manual-app-install]]
# [[Ubuntu 11.04 Narwhals|http://www.weebls-stuff.com/songs/Narwhals/]]
# [[SSH VPN over Internet (SSH tun туннелирование) |http://habrahabr.ru/post/87197/]]
# [[Logreplica: сбор логов со всего кластера в единую точку в реальном времени|http://habrahabr.ru/post/126470/]]
# [[SSH за проксей|http://welinux.ru/post/2667/]]
# [[ssh over http proxy|http://wombat-house.blogspot.de/2011/05/ssh-over-http-proxy-linux-mint-10.html]]
# [[Corkscrew - ssh over https|http://wiki.kartbuilding.net/index.php/Corkscrew_-_ssh_over_https]]
# [[Bash хитрости|http://unedeuxtrois.ru/blog/Bash_v_Linux_nastroyka_komandyi.html]]
Кросс компиляция Win32 на Linux:
# [[Кросс-компиляция C/C++ программ для Windows в Linux |http://usefulbytes.blogspot.ru/2009/09/cc-windows-linux.html]]
# [[QtCreator: Qt кросс-компиляция из linux 64 в linux 32, win32, win64 и Mac OS X; upx, usb, dmg, etc|http://habrahabr.ru/post/198142/]]
Отобразить загрузку процессора можно простой командой:
{{{
echo 100-$(vmstat 1 2|tail -1|sed 's/\ \{1,\}/ /g'|cut -d ' ' -f16)|bc|sed -e 's/\..*//'
}}}
запуск программы на отдельном X сервере
{{{
startx steam -- :1
}}}
прокладываем туннели до vps1, с vps1 до vps2, и с vps2 уже на vps3 запускаем socks5 сервер. Теперь у себя в браузере указываем прокси сервер localhost, порт 8080, тип socks5. socks5 сервер это часть ssh демона, т.е. кроме самого ssh вам больше ничего не нужно. Опция -D (порт) поднимает проксю на хосте, которая теперь доступна с вашего локалхоста на указанном порту.
{{{
ssh -t -L 8080:localhost:8080 vps1 ssh -t -L 8080:localhost:8080 vps2 ssh -t -D 8080 vps3
}}}
перекодировка субтитров
{{{
enca -x UTF-8 -c *.ass
find * -name "*.ass" -exec enca -L ru -x utf8 "{}" \;
find . -name "*.ass" -type f -exec rename 's/\.ass/\.srt/g' '{}' \;
find . -name "*.srt" -type f -exec iconv -f cp1251 -t utf8 '{}' -o '{}' \;
for i in *ass; do iconv -c -f utf-8 -t cp1251 "$i" > "/tmp/$i"; mv "/tmp/$i" .; done
}}}
По умолчанию при включении работы Firefox через Socks прокси, DNS запросы продолжают обрабатываться локальным резолвером, что приводит к неработе преобразования имен в Firefox при отсутствии на машине иного выхода в сеть, кроме socks сервера.
Решение: в настройках about:config следует поменять значение переменной network.proxy.socks_remote_dns с false на true, тогда DNS запросы начнут транслироваться через socks сервер. При нахождении в недоверительной сети, самый простой способ поднять socks туннель через внешний сервер:
{{{
ssh -D 1080 логин@ip_сервера
}}}
а затем настроить на локальной машине доступ через socks5 127.0.0.1:1080
[[Туннели с использованием SSH. Режим эмуляции Socks proxy в SSH|http://www.opennet.ru/tips/1691_ssh_tunnel_socks.shtml]]
[[SSH авторизация по ключам|http://nix-sa.blogspot.ru/2011/06/ssh.html]]
[[Памятка пользователям ssh|http://habrahabr.ru/post/122445/]]
[[Памятка по SSH]]
[[Node.js proxy]]
вместо make install
{{{
checkinstall -D --install=no
dpkg -i package_name.deb
}}}
или вручную
{{{
mkdir /tmp/package
make install DESTDIR=/tmp/package
cd /tmp/package
dpkg-deb -b package_name.deb
}}}
[[Сборка ПО и создание .deb-пакетов из исходников|http://help.ubuntu.ru/wiki/создание_deb_пакетов]]
Удаление старых ядер Ubuntu:
Смотрим установленные ядра:
{{{
dpkg -l | grep linux-image
}}}
Удаляем лишние ядра:
{{{
sudo apt-get remove linux-image-[номер_версии]-generic linux-image-[номер_версии]-generic
sudo apt-get remove linux-headers-[номер_версии] linux-image-[номер_версии]-generic
}}}
обновим grub:
{{{
$ sudo update-grub
}}}
или странным скриптом
{{{
sudo apt-get purge $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | head -n -1) --assume-yes
}}}
[[Удаление старых ядер|http://help.ubuntu.ru/wiki/%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D1%82%D0%B0%D1%80%D1%8B%D1%85_%D1%8F%D0%B4%D0%B5%D1%80]]
[[Автоматическое удаление старых ядер|http://habrahabr.ru/post/116336/]]
или более понятным скриптом:
{{{
dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge
}}}
[[Удаление старых ядер ( linux-kernel ) одной командой|http://meandubuntu.ru/2014/05/удаление-старых-ядер-linux-kernel-1-командой/]]
[[КАК востановить GRUB на UEFI]]
/***
|''Name:''|LoadRemoteFileThroughProxy (previous LoadRemoteFileHijack)|
|''Description:''|When the TiddlyWiki file is located on the web (view over http) the content of [[SiteProxy]] tiddler is added in front of the file url. If [[SiteProxy]] does not exist "/proxy/" is added. |
|''Version:''|1.1.0|
|''Date:''|mar 17, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#LoadRemoteFileHijack|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
***/
//{{{
version.extensions.LoadRemoteFileThroughProxy = {
major: 1, minor: 1, revision: 0,
date: new Date("mar 17, 2007"),
source: "http://tiddlywiki.bidix.info/#LoadRemoteFileThroughProxy"};
if (!window.bidix) window.bidix = {}; // bidix namespace
if (!bidix.core) bidix.core = {};
bidix.core.loadRemoteFile = loadRemoteFile;
loadRemoteFile = function(url,callback,params)
{
if ((document.location.toString().substr(0,4) == "http") && (url.substr(0,4) == "http")){
url = store.getTiddlerText("SiteProxy", "/proxy/") + url;
}
return bidix.core.loadRemoteFile(url,callback,params);
}
//}}}
MPTW is a distribution or edition of TiddlyWiki that includes a standard TiddlyWiki core packaged with some plugins designed to improve usability and provide a better way to organise your information. For more information see http://mptw.tiddlyspot.com/.
[[Начало]]
[[Напоминания|День варенья]]
[[Мечты]]
[[BXT|Big XML Table]]
[[node.js]]
[[Mini Browser]]
[[Шифраторы]]
[[Мои ссылки]]
[[Справка|Вики-разметка (примеры)]]
[[Календарь]]
<<calendar thismonth>>
[[Как запустить Meld под windows|https://live.gnome.org/Meld/Windows]]
[[Home Meld|http://meld.sourceforge.net/]]
[[Meld в Windows|http://habrahabr.ru/post/87597/]]
[[Meld Installer|https://bitbucket.org/grozeille/meld/downloads]]
[[Diffuse|http://diffuse.sourceforge.net/]]
<<miniBrowser noplayer http://mm3.name/>>
/***
|Name|MiniBrowserPlugin|
|Source|http://www.TiddlyTools.com/#MiniBrowserPlugin|
|Version|1.3.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|PlayerPlugin (optional, recommended)|
|Overrides||
|Options|##Configuration|
|Description|embedded browser-in-browser with favorites lists and media support|
!!!!!Usage
<<<
{{{<<miniBrowser noplayer hidecontrols URL TiddlerName TiddlerName TiddlerName...>>}}}
* ''noplayer'' (optional)<br>disables support for embedded media player (using [[PlayerPlugin]], if installed)
* ''hidecontrols'' (optional)<br>hide initial display of minibrowser controls (except for 'show controls' checkbox)<br>//note: if no initial URL is specified, controls will be shown anyway//
* ''URL'' (optional)<br>specifies an initial URL to open when the mini browser is rendered
* ''TiddlerName'', ''TiddlerName''... (optional)<br>indicates one or more tiddlers containing "HR-separated" lists of favorites.<br>//notes: if no tiddler is specified, [[MiniBrowserList]] is used by default. In addition, when adding/deleting favorites, the plugin automatically updates [[MiniBrowserList]], regardless of any alternative lists of favorites stored in separate tiddlers. After changes to [[MiniBrowserList]] are made, you can then use cut/paste to manually move entries from that tiddler into other tiddlers.//
<<<
!!!!!Configuration
<<<
Default mini browser size:
width: <<option txtMiniBrowserWidth>> height: <<option txtMiniBrowserHeight>>
<<<
!!!!!Example
>{{{<<miniBrowser>>}}}<br>{{smallform small{<<miniBrowser>>}}}
>{{{<<miniBrowser hidecontrols http://www.TiddlyWiki.com>>}}}<br>{{smallform small{<<miniBrowser hidecontrols http://www.TiddlyWiki.com>>}}}
!!!!!Revisions
<<<
2008.08.12 [1.3.0] added support for wikifying content from favorites lists to enable use of forEachTiddler or inline script output to generate lists on the fly.
2008.08.06 [1.2.2] corrected size control buttons to use fixed width
2008.04.07 [1.2.1] added txtMiniBrowserWidth and txtMiniBrowserHeight. cleanup init handling (somewhat)
2008.04.06 [1.2.0] added support for specifying initial URL to view (suggested by Richard Berg). When opening a URL, select matching entry (if any) in bookmarks droplist. Added support for hiding minibrowser controls.
2008.01.19 [1.1.0] added support for optional extra favorites lists stored in separate tiddlers
2007.10.15 [1.0.0] combined MiniBrowser and MediaCenter inline scripts and converted to true plugin
2006.03.01 [0.0.0] inline script
<<<
!!!!!Code
***/
//{{{
version.extensions.MiniBrowser={major: 1, minor: 3, revision: 0, date: new Date(2008,8,12)};
//}}}
//{{{
config.shadowTiddlers.MiniBrowser="<<miniBrowser>>";
//}}}
//{{{
if (config.options.txtMiniBrowserWidth==undefined) config.options.txtMiniBrowserWidth="100%";
if (config.options.txtMiniBrowserHeight==undefined) config.options.txtMiniBrowserHeight="480";
//}}}
//{{{
config.macros.miniBrowser= {
favoritesList:
"MiniBrowserList",
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var noPlayer=params[0]&¶ms[0].toLowerCase()=="noplayer"; if (noPlayer) params.shift();
if (!config.macros.player) noPlayer=true; // if PlayerPlugin not installed
var hideControls=params[0]&¶ms[0].toLowerCase()=="hidecontrols"; if (hideControls) params.shift();
var url=(params[0]&&!store.tiddlerExists(params[0]))?params.shift():"";
hideControls=hideControls&&url.length; // if no initial URL, then show controls anyway
var w=config.options.txtMiniBrowserWidth;
var h=config.options.txtMiniBrowserHeight;
// create form
var guid=new Date().getTime()+Math.random().toString(); // globally unique ID
var html=this.html;
html=html.replace(/%id%/g,guid);
html=html.replace(/%noplayer%/g,noPlayer?"true":"");
html=html.replace(/%hidecontrols%/g,hideControls?"none":"block");
html=html.replace(/%favorites%/g,params[0]||config.macros.miniBrowser.favoritesList);
createTiddlyElement(place,"span").innerHTML=html;
// init form
document.getElementById("minibrowser_controls_"+guid).style.display=hideControls?"none":"block";
document.getElementById("minibrowser_resize_"+guid).style.display=hideControls?"none":"block";
document.getElementById("minibrowser_togglecontrols_"+guid).checked=!hideControls;
document.getElementById("minibrowser_form_"+guid).url.value=url;
document.getElementById("minibrowser_form_"+guid).w.value=w;
document.getElementById("minibrowser_form_"+guid).h.value=h;
if (noPlayer) { // hide "type" list no PlayerPlugin
document.getElementById("minibrowser_type_"+guid).style.display="none";
document.getElementById("minibrowser_url_"+guid).style.width="36%";
}
// load bookmarks droplist from HR-separated tiddler contents
var b=document.getElementById("minibrowser_bookmarks_"+guid);
while (b.options[1]) b.options[1]=null; // clear list but leave 'prompt' item
var p; while (p=params.shift()) this.getFavorites(b,p); // load custom bookmarks
if (b.length<2) this.getFavorites(b,config.macros.miniBrowser.favoritesList); // default list
// load initial URL (if any)
var place=document.getElementById("minibrowser_player_"+guid);
this.load(place,guid,"","",w,h,true,noPlayer);
this.go(document.getElementById("minibrowser_form_"+guid));
},
getFavorites: function(list,tid) {
var txt=store.getTiddlerText(tid); if (!txt||!txt.trim().length) return;
txt=this.getWikifiedData(txt);
var parts=txt.split("\n----\n");
for (var p=0; p<parts.length; p++) {
var lines=parts[p].split("\n");
var label=lines.shift()||""; // 1st line=display text
var value=lines.shift()||""; // 2nd line=item value
var indent=value&&value.length?"\xa0\xa0":"";
list.options[list.length]=new Option(indent+label,value,false,false);
}
},
getWikifiedData: // wikify tiddler content, then extract text WITH newlines and HRs included
function(txt) {
var e=createTiddlyElement(document.body,"div"); wikify(txt,e);
var breaks=e.getElementsByTagName("br");
for (var b=0; b<breaks.length; b++)
breaks[b].parentNode.insertBefore(document.createTextNode("\n"),breaks[b]);
var lines=e.getElementsByTagName("hr");
for (var l=0; l<lines.length; l++)
lines[l].parentNode.insertBefore(document.createTextNode("----\n"),lines[l]);
var items=e.getElementsByTagName("li");
for (var i=0; i<items.length; i++)
items[i].parentNode.insertBefore(document.createTextNode("\n"),items[i]);
var txt=getPlainText(e); removeNode(e); return txt;
},
load: function(place,id,type,url,w,h,showcontrols,noPlayer) {
if (noPlayer) {
if (!place) place=document.getElementById(id).parentNode;
place.innerHTML="<iframe name='"+id+"' id='"+id+"' \
src='"+url+"' width='"+w+"' height='"+h+"' \
style='background:#fff;border:1px solid'></iframe>"
} else
config.macros.player.loadURL(place,id,type,url,w,h,showcontrols);
},
go: function(f) {
var url=f.url.value.trim();
if (!url.length) url=f.url.value=f.bookmarks.value.trim();
if (!url.length) { this.done(f); return false; }
var id=f.playerID.value;
document.getElementById("minibrowser_player_"+id).style.display="block";
document.getElementById("minibrowser_controls2_"+id).style.display="block";
this.load(null,id,f.type.value,f.url.value,f.w.value,f.h.value,f.ctrls.checked,f.noPlayer.value=="true");
var matched=false; for (var i=0; i<f.bookmarks.options.length; i++) // select matching bookmark
if (f.bookmarks.options[i].value==url) { f.bookmarks.selectedIndex=i; matched=true; break; }
if (!matched) f.bookmarks.selectedIndex=0;
f.done.disabled=false;
return false;
},
done: function(f) {
var id=f.playerID.value;
this.load(null,id,null,null,f.w.value,0,f.ctrls.checked,f.noPlayer.value=="true");
document.getElementById("minibrowser_player_"+id).style.display="none";
document.getElementById("minibrowser_controls2_"+id).style.display="none";
f.done.disabled=true;
return false;
},
fit: function(place) {
var trim=89; // fudge factor to account for the other controls + padding + borders. ADJUST THIS VALUE TO FIT LAYOUT
var t=story.findContainingTiddler(place);
if (!t) { t=place; while (t && t.className!='floatingPanel') t=t.parentNode; } if (!t) return;
var w="100%"; // horizontal stretching via CSS works, but vertical stretching doesn't... so:
var h=t.offsetHeight-trim; // workaround: get containing panel/tiddler height and subtract "trim" height
var f=place.form;
this.load(null,f.playerID.value,f.type.value,f.url.value,w,h,f.ctrls.checked,f.noPlayer.value=="true"); // reload player with new size
place.form.w.value=w; place.form.h.value=h; // update width/height input fields
},
add: function(place,title) {
var v=place.value; if (!v.length) return;
var d=prompt("Please enter a description for\n"+place.value); if (!d || !d.length) return;
var who=config.options.txtUserName;
var when=new Date();
var tid=store.getTiddler(title);
var txt="%0\n%1\n----\n%2".format([d,v,tid?tid.text:""]);
store.saveTiddler(title,title,txt,who,when,tid?tid.tags:[],tid?tid.fields:{});
if (!tid) story.displayTiddler(story.findContainingTiddler(place),title);
else story.refreshTiddler(title,1,true);
var here=story.findContainingTiddler(place);
if (here) story.refreshTiddler(here.getAttribute("tiddler"),1,true);
},
del: function(place,title) {
var v=place.value; if (!v.length) return;
var d=place.options[place.selectedIndex].text; if (!d.length) return;
if (!confirm("Are you sure you want to remove this favorite?\n\n"+d+"\n"+v)) return;
var tid=store.getTiddler(title); if (!tid) return;
var who=config.options.txtUserName;
var when=new Date();
var pat='%0\n%1\n----\n'.format([d.replace(/\xa0/g,''),v]); var re=new RegExp(pat,"i");
var txt=tid.text.replace(re,"");
store.saveTiddler(title,title,txt,who,when,tid?tid.tags:[],tid?tid.fields:{});
story.refreshTiddler(title,1,true);
var here=story.findContainingTiddler(place);
if (here) story.refreshTiddler(here.getAttribute("tiddler"),1,true);
},
html: "<form id='minibrowser_form_%id%' style='display:block;margin:0;padding:0' onsubmit='return config.macros.miniBrowser.go(this);'><!-- \
--><nobr><input type='hidden' name='playerID' value='%id%'><input type='hidden' name='noPlayer' value='%noplayer%'><!-- \
--><div id='minibrowser_controls_%id%' style='display:%hidecontrols%'><!-- \
--><input type='button' value='<' title='back' style='font-size:8pt;width:3%' \
onclick='try{window.frames[\"player_%id%\"].history.go(-1)}catch(e){window.history.go(-1)}' ><!-- \
--><input type='button' value='>' title='forward' style='font-size:8pt;width:3%' \
onclick='try{window.frames[\"player_%id%\"].history.go(+1)}catch(e){window.history.go(+1)}'><!-- \
--><input type='button' value='+' title='refresh'style='font-size:8pt;width:3%' \
onclick='try{window.frames[\"player_%id%\"].location.reload()}catch(e){;}'><!-- \
--><input type='button' value='x' title='stop'style='font-size:8pt;width:3%' \
onclick='window.stop()'><!-- \
--><select name='bookmarks' id='minibrowser_bookmarks_%id%' size='1' style='font-size:8pt;width:20%' \
onchange='this.form.url.value=this.value; return config.macros.miniBrowser.go(this.form);'><!-- \
--><option value=''>bookmarks...</option><!-- \
--></select><!-- \
--><input type='button' value='add' title='add URL to the bookmarks' style='font-size:8pt;width:5%' \
favorites=\"%favorites%\" \
onclick='config.macros.miniBrowser.add(this.form.url,this.getAttribute(\"favorites\"));'><!-- \
--><input type='button' value='del' title='remove URL from the bookmarks' style='font-size:8pt;width:5%' \
favorites=\"%favorites%\" \
onclick='config.macros.miniBrowser.del(this.form.bookmarks,this.getAttribute(\"favorites\"));'><!-- \
--><input type='button' value='edit' title='edit the bookmarks list' style='font-size:8pt;width:5%' \
favorites=\"%favorites%\" \
onclick='story.displayTiddler(null,this.getAttribute(\"favorites\"),2)'><!-- \
--><input type='text' name='url' id='minibrowser_url_%id%' size='60' value='' style='font-size:8pt;width:23%' \
onfocus='this.select()'><!-- \
--><select name='type' id='minibrowser_type_%id%' size='1' style='font-size:8pt;width:13%'><!-- \
--><option value=''>media type...</option><!-- \
--><option value=''>auto-detect</option><!-- \
--><option value='iframe'>web page</option><!-- \
--><option value='windows'>windows media</option><!-- \
--><option value='realone'>real one</option><!-- \
--><option value='quicktime'>quicktime</option><!-- \
--><option value='flash'>flash</option><!-- \
--><option value='image'>jpg/gif/png</option><!-- \
--></select><!-- \
--><input type='submit' value='go' title='view URL in embedded player' style='font-size:8pt;width:4%'><!-- \
--><input type='button' value='open' title='view URL in a separate player' style='font-size:8pt;width:6%' \
onclick='if (this.form.url.value.length) window.open(this.form.url.value)'><!-- \
--><input type='button' value='done' name='done' disabled title='disconnect from URL' style='font-size:8pt;width:6%' \
onclick='return config.macros.miniBrowser.done(this.form);'><!-- \
--></div><!-- \
--><div id='minibrowser_player_%id%' style='display:none;text-align:center'></div><!-- \
--><span id='minibrowser_controls2_%id%' style='margin-top:2px;display:none;font-size:8pt;'><!-- \
--><div id='minibrowser_resize_%id%' style='display:%hidecontrols%;float:right;font-size:8pt'><!-- \
--> size: <input type='text' name='w' size='3' value='' style='font-size:8pt;' \
onfocus='this.select()'><!-- \
-->x<input type='text' name='h' size='3' value='' style='font-size:8pt;' \
onfocus='this.select()'><!-- \
--> <input type='submit' value='set' style='font-size:8pt;width:5em' \
onclick='var f=this.form; \
if(!f.w.value.trim().length) f.w.value=config.options.txtMiniBrowserWidth; \
if(!f.h.value.trim().length) f.h.value=config.options.txtMiniBrowserHeight; \
config.options.txtMiniBrowserWidth=f.w.value; config.options.txtMiniBrowserHeight=f.h.value; \
saveOptionCookie(\"txtMiniBrowserWidth\"); saveOptionCookie(\"txtMiniBrowserHeight\");'><!-- \
--><input type='submit' value='reset' style='font-size:8pt;width:5em' \
onclick='var f=this.form; f.ctrls.checked=true; f.w.value=\"100%\"; f.h.value=\"480\"; \
config.options.txtMiniBrowserWidth=f.w.value; config.options.txtMiniBrowserHeight=f.h.value; \
saveOptionCookie(\"txtMiniBrowserWidth\"); saveOptionCookie(\"txtMiniBrowserHeight\");'><!-- \
--><input type='button' value='fit' title='resize player to fit containing window' style='font-size:8pt;width:5em' \
onclick='config.macros.miniBrowser.fit(this)'><!-- \
--></div><!-- \
--> <input type='checkbox' name='ctrls' id='minibrowser_togglecontrols_%id%' title='toggle minibrowser controls' CHECKED \
onclick='document.getElementById(\"minibrowser_controls_%id%\").style.display=this.checked?\"block\":\"none\"; \
document.getElementById(\"minibrowser_resize_%id%\").style.display=this.checked?\"block\":\"none\";' \
><a href='' title='toggle minibrowser controls' \
onclick='this.previousSibling.click();return false;'>show controls</a><!-- \
--></span><!-- \
--></nobr></form> \
"
}
//}}}
# [[Mono wiki|http://ru.wikipedia.org/wiki/Mono]]
# [[Mono home page|http://www.mono-project.com/Main_Page]]
Name: MptwBlack
Background: #000
Foreground: #fff
PrimaryPale: #333
PrimaryLight: #555
PrimaryMid: #888
PrimaryDark: #aaa
SecondaryPale: #111
SecondaryLight: #222
SecondaryMid: #555
SecondaryDark: #888
TertiaryPale: #222
TertiaryLight: #666
TertiaryMid: #888
TertiaryDark: #aaa
Error: #300
This is in progress. Help appreciated.
Name: MptwSmoke
Background: #fff
Foreground: #000
PrimaryPale: #aaa
PrimaryLight: #777
PrimaryMid: #111
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
|Name|MptwStandard|
|Description|Mptw Theme with the default TiddlyWiki PageLayout and Styles|
|ViewTemplate|MptwTheme##ViewTemplate|
|EditTemplate|MptwTheme##EditTemplate|
|Name|MptwTheme|
|Description|Mptw Theme including custom PageLayout|
|PageTemplate|##PageTemplate|
|ViewTemplate|##ViewTemplate|
|EditTemplate|##EditTemplate|
|StyleSheet|##StyleSheet|
http://mptw.tiddlyspot.com/#MptwTheme ($Rev: 1829 $)
!PageTemplate
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<!-- horizontal MainMenu -->
<div id='topMenu' refresh='content' tiddler='MainMenu'></div>
<!-- original MainMenu menu -->
<!-- <div id='mainMenu' refresh='content' tiddler='MainMenu'></div> -->
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
!ViewTemplate
<!--{{{-->
[[MptwTheme##ViewTemplateToolbar]]
<div class="tagglyTagged" macro="tags"></div>
<div class='titleContainer'>
<span class='title' macro='view title'></span>
<span macro="miniTag"></span>
</div>
<div class='subtitle'>
(updated <span macro='view modified date {{config.mptwDateFormat?config.mptwDateFormat:"MM/0DD/YY"}}'></span>
by <span macro='view modifier link'></span>)
<!--
(<span macro='message views.wikified.createdPrompt'></span>
<span macro='view created date {{config.mptwDateFormat?config.mptwDateFormat:"MM/0DD/YY"}}'></span>)
-->
</div>
<div macro="showWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')">
<div class='viewer'><pre macro='view text'></pre></div>
</div>
<div macro="else">
<div class='viewer' macro='view text wikified'></div>
</div>
<div class="tagglyTagging" macro="tagglyTagging"></div>
<!--}}}-->
!ViewTemplateToolbar
<!--{{{-->
<div class='toolbar'>
<span macro="showWhenTagged systemConfig">
<span macro="toggleTag systemConfigDisable . '[[disable|systemConfigDisable]]'"></span>
</span>
<span macro="showWhenTagged systemTheme"><span macro="applyTheme"></span></span>
<span macro="showWhenTagged systemPalette"><span macro="applyPalette"></span></span>
<span macro="showWhen tiddler.tags.contains('css') || tiddler.title == 'StyleSheet'"><span macro="refreshAll"></span></span>
<span style="padding:1em;"></span>
<span macro='toolbar closeTiddler closeOthers +editTiddler deleteTiddler > fields syncing permalink references jump'></span> <span macro='newHere label:"new here"'></span>
<span macro='newJournalHere {{config.mptwJournalFormat?config.mptwJournalFormat:"MM/0DD/YY"}}'></span>
</div>
<!--}}}-->
!EditTemplate
<!--{{{-->
<div class="toolbar" macro="toolbar +saveTiddler saveCloseTiddler closeOthers -cancelTiddler cancelCloseTiddler deleteTiddler"></div>
<div class="title" macro="view title"></div>
<div class="editLabel">Title</div><div class="editor" macro="edit title"></div>
<div macro='annotations'></div>
<div class="editLabel">Content</div><div class="editor" macro="edit text"></div>
<div class="editLabel">Tags</div><div class="editor" macro="edit tags"></div>
<div class="editorFooter"><span macro="message views.editor.tagPrompt"></span><span macro="tagChooser"></span></div>
<!--}}}-->
!StyleSheet
/*{{{*/
/* a contrasting background so I can see where one tiddler ends and the other begins */
body {
background: [[ColorPalette::TertiaryLight]];
}
/* sexy colours and font for the header */
.headerForeground {
color: [[ColorPalette::PrimaryPale]];
}
.headerShadow, .headerShadow a {
color: [[ColorPalette::PrimaryMid]];
}
/* separate the top menu parts */
.headerForeground, .headerShadow {
padding: 1em 1em 0;
}
.headerForeground, .headerShadow {
font-family: 'Trebuchet MS' sans-serif;
font-weight:bold;
}
.headerForeground .siteSubtitle {
color: [[ColorPalette::PrimaryLight]];
}
.headerShadow .siteSubtitle {
color: [[ColorPalette::PrimaryMid]];
}
/* make shadow go and down right instead of up and left */
.headerShadow {
left: 1px;
top: 1px;
}
/* prefer monospace for editing */
.editor textarea, .editor input {
font-family: 'Consolas' monospace;
background-color:[[ColorPalette::TertiaryPale]];
}
/* sexy tiddler titles */
.title {
font-size: 250%;
color: [[ColorPalette::PrimaryLight]];
font-family: 'Trebuchet MS' sans-serif;
}
/* more subtle tiddler subtitle */
.subtitle {
padding:0px;
margin:0px;
padding-left:1em;
font-size: 90%;
color: [[ColorPalette::TertiaryMid]];
}
.subtitle .tiddlyLink {
color: [[ColorPalette::TertiaryMid]];
}
/* a little bit of extra whitespace */
.viewer {
padding-bottom:3px;
}
/* don't want any background color for headings */
h1,h2,h3,h4,h5,h6 {
background-color: transparent;
color: [[ColorPalette::Foreground]];
}
/* give tiddlers 3d style border and explicit background */
.tiddler {
background: [[ColorPalette::Background]];
border-right: 2px [[ColorPalette::TertiaryMid]] solid;
border-bottom: 2px [[ColorPalette::TertiaryMid]] solid;
margin-bottom: 1em;
padding:1em 2em 2em 1.5em;
}
/* make options slider look nicer */
#sidebarOptions .sliderPanel {
border:solid 1px [[ColorPalette::PrimaryLight]];
}
/* the borders look wrong with the body background */
#sidebar .button {
border-style: none;
}
/* this means you can put line breaks in SidebarOptions for readability */
#sidebarOptions br {
display:none;
}
/* undo the above in OptionsPanel */
#sidebarOptions .sliderPanel br {
display:inline;
}
/* horizontal main menu stuff */
#displayArea {
margin: 1em 15.7em 0em 1em; /* use the freed up space */
}
#topMenu br {
display: none;
}
#topMenu {
background: [[ColorPalette::PrimaryMid]];
color:[[ColorPalette::PrimaryPale]];
}
#topMenu {
padding:2px;
}
#topMenu .button, #topMenu .tiddlyLink, #topMenu a {
margin-left: 0.5em;
margin-right: 0.5em;
padding-left: 3px;
padding-right: 3px;
color: [[ColorPalette::PrimaryPale]];
font-size: 115%;
}
#topMenu .button:hover, #topMenu .tiddlyLink:hover {
background: [[ColorPalette::PrimaryDark]];
}
/* make 2.2 act like 2.1 with the invisible buttons */
.toolbar {
visibility:hidden;
}
.selected .toolbar {
visibility:visible;
}
/* experimental. this is a little borked in IE7 with the button
* borders but worth it I think for the extra screen realestate */
.toolbar { float:right; }
/* fix for TaggerPlugin. from sb56637. improved by FND */
.popup li .tagger a {
display:inline;
}
/* makes theme selector look a little better */
#sidebarOptions .sliderPanel .select .button {
padding:0.5em;
display:block;
}
#sidebarOptions .sliderPanel .select br {
display:none;
}
/* make it print a little cleaner */
@media print {
#topMenu {
display: none ! important;
}
/* not sure if we need all the importants */
.tiddler {
border-style: none ! important;
margin:0px ! important;
padding:0px ! important;
padding-bottom:2em ! important;
}
.tagglyTagging .button, .tagglyTagging .hidebutton {
display: none ! important;
}
.headerShadow {
visibility: hidden ! important;
}
.tagglyTagged .quickopentag, .tagged .quickopentag {
border-style: none ! important;
}
.quickopentag a.button, .miniTag {
display: none ! important;
}
}
/* get user styles specified in StyleSheet */
[[StyleSheet]]
/*}}}*/
Голосовой P2P чат с поддержкой конференций работающий прямо из браузера (без установки дополнительных программ).
[[WebRTC|http://habrahabr.ru/post/136605/]]
[[LibJingle|http://code.google.com/p/libjingle/]]
[[SpeechApi|http://code.google.com/p/speechapi/]]
[[Mutual-authentication with web services|http://stackoverflow.com/questions/2240931/mutual-authentication-with-web-services/2918525#2918525]]
[[How to create Custom CA and Certificates for SSL using Open SSL|http://oshogsb.blogspot.ru/2007/07/how-to-create-custom-ca-and.html]]
[[Client cert authentication with java|http://vafer.org/blog/20061010073725/]]
[[Two-Way SSL in Weblogic for Developers |http://red-3.blogspot.ru/2006/11/two-way-ssl-in-weblogic-for-developers.html]]
[[The Fifteen Minute Guide to Mutual Authentication|http://monduke.com/2006/06/04/the-fifteen-minute-guide-to-mutual-authentication/]]
[[Example: Mutual Certificates Security (MCS)|http://docs.oracle.com/cd/E17802_01/webservices/webservices/reference/tutorials/wsit/doc/WSIT_Security9.html]]
[[The TLS Protocol Version 1.0|http://www.ietf.org/rfc/rfc2246]]
[[The TLS Protocol Version 1.2|http://www.ietf.org/rfc/rfc5246.txt]]
[[WebServiceContext.getUserPrincipal returns “ANONYMOUS” when using mutual authentication|http://stackoverflow.com/questions/3082633/webservicecontext-getuserprincipal-returns-anonymous-when-using-mutual-authent?rq=1]]
[[MTLS ( mutual TLS) details|http://stackoverflow.com/questions/19601420/mtls-mutual-tls-details]]
[[Configure SSL Mutual (Two-way) Authentication|http://security.stackexchange.com/questions/34897/configure-ssl-mutual-two-way-authentication]]
[[Transport Layer Security (TLS) Vs. Mutual Transport Layer Security (MTLS)|http://gunnalag.com/2011/04/24/transport-layer-security-tls-vs-mutual-transport-layer-security-mtls-in-live-communications-server-lcs/]]
[[Configuring Apache 2.0 for SSL/TLS Mutual Authentication using an OpenSSL Certificate Authority|http://www.cafesoft.com/products/cams/ps/docs31/admin/ConfiguringApache2ForSSLTLSMutualAuthentication.html]]
[[A few frequently used SSL commands|http://shib.kuleuven.be/docs/ssl_commands.shtml]]
# [[NetCat and other|http://proft.me/2011/08/9/primery-ispolzovaniya-netstat-ss-netcat/]]
# [[netcat|http://mylinuxbook.com/linux-netcat-command/]]
# [[NetCat wiki en|http://en.wikipedia.org/wiki/Netcat]]
# [[NetCat wiki ru|http://ru.wikipedia.org/wiki/Netcat]]
# [[Полезные Unix утилиты. Netcat|http://handynotes.ru/2010/01/unix-utility-netcat.html]]
# [[HTTP сервер на BASH|http://www.opennet.ru/tips/info/1451.shtml]]
# [[HTTP сервер в одну строку: версия 2.0|http://alexey.sveshnikov.ru/blog/2007/08/30/bash-httpd-2/]]
открываем шелл, на сервере
{{{
mkfifo /tmp/pipe;
sh /tmp/pipe | nc -l 1234 > /tmp/pipe
}}}
или
{{{
cat /tmp/tmp_fifo | /bin/sh -i 2>&1 | nc -l 1567 > /tmp/tmp_fifo
}}}
на клиенте вводим
{{{
nc 127.0.0.1 1234
}}}
и потом пишем команды
{{{
(echo -e "HTTP/1.1 200 OK\nContent-Type: text/html\n\n Hello World";) | nc -vv -l -p 8080
}}}
{{{
mkfifo tmp
mkfifo tmp2
nc -l 8080 -k > tmp < tmp2 &
while [ 1 ]
do
openssl s_client -connect www.google.com:443 -quiet < tmp > tmp2
done
}}}
HTTP сервер на BASH
{{{
while :;do nc -p8080 -vnlc’r=read;e=”echo -e”;$r a b c;while [ -n "`$e $a|tr -d "\r\n"`" ];do $r a;done;f=`$e $b|sed s/.//`;h=”HTTP/1.0″;z=”404 Not Found\n”;[ -z $f ]&&(ls|while $r n;do [ -f $n ]&&$e “$n“;done)||([ -f $f ]&&($e “$h 200 OK\r\nContent-Type: `file -ib $f`\n”;cat $f)||$e “$h $z\n$z”)’;done
}}}
или
{{{
true; while [ $? -eq 0 ];do nc -vlp 8080 -c'(r=read;e=echo;$r a b c;E=NOTYET;while [ ${#E} -gt 0 ];do $r E;E=`$e $E|tr -d "\r\n"`;done;f=`$e $b|sed 's/[^a-z0-9_.-]//gi'`;h="HTTP/1.0";o="$h 200 OK\r\n";c="Content";if [ -z $f ];then($e -e $o;ls|(while $r n;do if test -f ${n}; then $e "<a href=\"/$n\">$n</a><br>";fi;done););elif [ -f $f ];then $e -e "$o$c-Type: `file -ib $f`\n$c-Length: `stat -c%s $f`\n";cat $f;else $e -e "$h 404 Not Found\n\n404\n";fi)';done
}}}
/***
|Name:|NewHerePlugin|
|Description:|Creates the new here and new journal macros|
|Version:|3.0 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#NewHerePlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
merge(config.macros, {
newHere: {
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
wikify("<<newTiddler "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);
}
},
newJournalHere: {
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
wikify("<<newJournal "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);
}
}
});
//}}}
http://stackoverflow.com/questions/20351637/how-to-create-a-simple-http-proxy-in-node-js
https://github.com/request/request
https://newspaint.wordpress.com/2012/11/05/node-js-http-and-https-proxy/
http://www.catonmat.net/http-proxy-in-nodejs/
http://blog.vanamco.com/proxy-requests-in-node-js/
https://www.glype.com/
http://www.steve.org.uk/Software/node-reverse-proxy/
https://github.com/skx/node-reverse-proxy.js
http://albertolarripa.com/2013/11/10/node-as-proxy-proxying-http-and-websockets/
https://www.pgrs.net/2010/02/01/web-proxy-in-node-js-for-high-availability/
Есть одна такая финская кампания, которая в прошлом делала неплохие телефоны, а сейчас некоторым заказчикам необходимо писать приложения для этих телефонов, вот и приходиться искать ссылки на документацию.
[[Library|http://www.developer.nokia.com/Resources/Library/]]
[[Java|http://www.developer.nokia.com/Resources/Library/Java/]]
[[S60 C++|http://library.developer.nokia.com/index.jsp?topic=/GUID-E35887BB-7E58-438C-AA27-97B2CDE7E069/GUID-E35887BB-7E58-438C-AA27-97B2CDE7E069_cover.html]]
<<miniBrowser noplayer http://notesave.ru/>>
#[[JPC - эмулятор x86 на Java|http://www.linux.org.ru/news/java/3848177]]
#[[JPC source|http://sourceforge.net/projects/jpc/]]
#[[Dioscuri - modular emulator|http://sourceforge.net/p/dioscuri/code/371/tree/]]
Paranoicus - это браузер с параноидальными настройками безопасности, который открывает только те сайты которые явно прописаны в его настройках по принципу белого списка и до кучи ещё имеет чёрный список контента который не загружать, даже если он проходит по белому списку.
Все мы ежедневно просматриваем ограниченный набор сайтов (ЛОР, хабра, жж, твиттер, контакт, фейсбук и ещё некоторые) и только иногда что-то гуглим, но при этом по умолчанию разрешаем браузеру грузить абсолютно всё что ему вздумается и даже не имеем возможности хоть как-то это контролировать.
Paranoicus грузит то и только то что ему разрешено и игнорирует любой другой контент.
В качестве фичи можно рассматривать презагруженные стандартные скрипты такие как jQuery, отображение списка правил по которым загружен контент на странице, быстрый доступ к белому и чёрному спискам с лёгкой возможностью их редактирования.
/***
|''Name:''|PasswordOptionPlugin|
|''Description:''|Extends TiddlyWiki options with non encrypted password option.|
|''Version:''|1.0.2|
|''Date:''|Apr 19, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#PasswordOptionPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
***/
//{{{
version.extensions.PasswordOptionPlugin = {
major: 1, minor: 0, revision: 2,
date: new Date("Apr 19, 2007"),
source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
author: 'BidiX (BidiX (at) bidix (dot) info',
license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
coreVersion: '2.2.0 (Beta 5)'
};
config.macros.option.passwordCheckboxLabel = "Save this password on this computer";
config.macros.option.passwordInputType = "password"; // password | text
setStylesheet(".pasOptionInput {width: 11em;}\n","passwordInputTypeStyle");
merge(config.macros.option.types, {
'pas': {
elementType: "input",
valueField: "value",
eventName: "onkeyup",
className: "pasOptionInput",
typeValue: config.macros.option.passwordInputType,
create: function(place,type,opt,className,desc) {
// password field
config.macros.option.genericCreate(place,'pas',opt,className,desc);
// checkbox linked with this password "save this password on this computer"
config.macros.option.genericCreate(place,'chk','chk'+opt,className,desc);
// text savePasswordCheckboxLabel
place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));
},
onChange: config.macros.option.genericOnChange
}
});
merge(config.optionHandlers['chk'], {
get: function(name) {
// is there an option linked with this chk ?
var opt = name.substr(3);
if (config.options[opt])
saveOptionCookie(opt);
return config.options[name] ? "true" : "false";
}
});
merge(config.optionHandlers, {
'pas': {
get: function(name) {
if (config.options["chk"+name]) {
return encodeCookie(config.options[name].toString());
} else {
return "";
}
},
set: function(name,value) {config.options[name] = decodeCookie(value);}
}
});
// need to reload options to load passwordOptions
loadOptionsCookie();
/*
if (!config.options['pasPassword'])
config.options['pasPassword'] = '';
merge(config.optionsDesc,{
pasPassword: "Test password"
});
*/
//}}}
# [[PhoneGap wiki|http://ru.wikipedia.org/wiki/PhoneGap]]
# [[Offsite|http://www.phonegap.com/]]
<<miniBrowser noplayer http://demo.qooxdoo.org/current/playground/#>>
# 209.244.0.3 / 209.244.0.4 - Level3
# 8.8.8.8 / 8.8.4.4 -Google
# 184.169.143.224 / 184.169.161.155 - Securly
# 8.26.56.26 / 8.20.247.20 - Comodo Secure DNS
# 208.67.222.222 / 208.67.220.220 - OpenDNS
# 156.154.70.1 / 156.154.71.1 - DNS Advantage
# 198.153.192.1 / 198.153.194.1 - Norton DNS
# 67.138.54.120 / 207.225.209.77 - ScrubIT
# 74.207.247.4 / 64.0.55.201 - OpenNIC
# 199.5.157.131 / 208.71.35.137 - Public-Root
# 208.76.50.50 / 208.76.51.51 - SmartViper
Cisco (San Jose, CA, US)
64.102.255.44
128.107.241.185
Level 3 Communications (Broomfield, CO, US)
4.2.2.1
4.2.2.2
4.2.2.3
4.2.2.4
4.2.2.5
4.2.2.6
Verizon (Reston, VA, US)
151.197.0.38
151.197.0.39
151.202.0.84
151.202.0.85
151.202.0.85
151.203.0.84
151.203.0.85
199.45.32.37
199.45.32.38
199.45.32.40
199.45.32.43
GTE (Irving, TX, US)
192.76.85.133
206.124.64.1
SpeakEasy (Seattle, WA, US)
66.93.87.2
216.231.41.2
216.254.95.2
64.81.45.2
64.81.111.2
64.81.127.2
64.81.79.2
64.81.159.2
66.92.64.2
66.92.224.2
66.92.159.2
64.81.79.2
64.81.159.2
64.81.127.2
64.81.45.2
216.27.175.2
66.92.159.2
66.93.87.2
Sprintlink (Overland Park, KS, US)
199.2.252.10
204.97.212.10
204.117.214.10
Яндекс.DNS
Базовый
77.88.8.8
77.88.8.1
Безопасный
77.88.8.88
77.88.8.2
Семейный
77.88.8.7
77.88.8.3
# [ПростоVPN.АнтиЗапрет|http://antizapret.prostovpn.org/]
# [Как обойти блокировку сайтов |http://ntv.livejournal.com/272969.html]
# [Обзор специализированных способов обхода блокировок в интернете|http://habrahabr.ru/post/219623/]
http://anonymouse.org
http://www.hidemyass.com
http://www.shadowsurf.com
http://www.proxyforall.com
http://www.proxyweb.net
http://www.pagewash.com
http://webwarper.net
https://www.megaproxy.com
http://www.anonymizer.ru
http://habrahabr.ru/post/206924/
http://geektimes.ru/post/117778/
http://android-mobile.ru/qr-code/generator
http://mojiq.kazina.com/
https://www.unitag.io/qrcode
/***
|Name:|QuickOpenTagPlugin|
|Description:|Changes tag links to make it easier to open tags as tiddlers|
|Version:|3.0.1 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#QuickOpenTagPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
config.quickOpenTag = {
dropdownChar: (document.all ? "\u25bc" : "\u25be"), // the little one doesn't work in IE?
createTagButton: function(place,tag,excludeTiddler) {
// little hack so we can do this: <<tag PrettyTagName|RealTagName>>
var splitTag = tag.split("|");
var pretty = tag;
if (splitTag.length == 2) {
tag = splitTag[1];
pretty = splitTag[0];
}
var sp = createTiddlyElement(place,"span",null,"quickopentag");
createTiddlyText(createTiddlyLink(sp,tag,false),pretty);
var theTag = createTiddlyButton(sp,config.quickOpenTag.dropdownChar,
config.views.wikified.tag.tooltip.format([tag]),onClickTag);
theTag.setAttribute("tag",tag);
if (excludeTiddler)
theTag.setAttribute("tiddler",excludeTiddler);
return(theTag);
},
miniTagHandler: function(place,macroName,params,wikifier,paramString,tiddler) {
var tagged = store.getTaggedTiddlers(tiddler.title);
if (tagged.length > 0) {
var theTag = createTiddlyButton(place,config.quickOpenTag.dropdownChar,
config.views.wikified.tag.tooltip.format([tiddler.title]),onClickTag);
theTag.setAttribute("tag",tiddler.title);
theTag.className = "miniTag";
}
},
allTagsHandler: function(place,macroName,params) {
var tags = store.getTags(params[0]);
var filter = params[1]; // new feature
var ul = createTiddlyElement(place,"ul");
if(tags.length == 0)
createTiddlyElement(ul,"li",null,"listTitle",this.noTags);
for(var t=0; t<tags.length; t++) {
var title = tags[t][0];
if (!filter || (title.match(new RegExp('^'+filter)))) {
var info = getTiddlyLinkInfo(title);
var theListItem =createTiddlyElement(ul,"li");
var theLink = createTiddlyLink(theListItem,tags[t][0],true);
var theCount = " (" + tags[t][1] + ")";
theLink.appendChild(document.createTextNode(theCount));
var theDropDownBtn = createTiddlyButton(theListItem," " +
config.quickOpenTag.dropdownChar,this.tooltip.format([tags[t][0]]),onClickTag);
theDropDownBtn.setAttribute("tag",tags[t][0]);
}
}
},
// todo fix these up a bit
styles: [
"/*{{{*/",
"/* created by QuickOpenTagPlugin */",
".tagglyTagged .quickopentag, .tagged .quickopentag ",
" { margin-right:1.2em; border:1px solid #eee; padding:2px; padding-right:0px; padding-left:1px; }",
".quickopentag .tiddlyLink { padding:2px; padding-left:3px; }",
".quickopentag a.button { padding:1px; padding-left:2px; padding-right:2px;}",
"/* extra specificity to make it work right */",
"#displayArea .viewer .quickopentag a.button, ",
"#displayArea .viewer .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink ",
" { border:0px solid black; }",
"#displayArea .viewer .quickopentag a.button, ",
"#mainMenu .quickopentag a.button ",
" { margin-left:0px; padding-left:2px; }",
"#displayArea .viewer .quickopentag a.tiddlyLink, ",
"#mainMenu .quickopentag a.tiddlyLink ",
" { margin-right:0px; padding-right:0px; padding-left:0px; margin-left:0px; }",
"a.miniTag {font-size:150%;} ",
"#mainMenu .quickopentag a.button ",
" /* looks better in right justified main menus */",
" { margin-left:0px; padding-left:2px; margin-right:0px; padding-right:0px; }",
"#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }",
"#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }",
"#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }",
"/*}}}*/",
""].join("\n"),
init: function() {
// we fully replace these builtins. can't hijack them easily
window.createTagButton = this.createTagButton;
config.macros.allTags.handler = this.allTagsHandler;
config.macros.miniTag = { handler: this.miniTagHandler };
config.shadowTiddlers["QuickOpenTagStyles"] = this.styles;
store.addNotification("QuickOpenTagStyles",refreshStyles);
}
}
config.quickOpenTag.init();
//}}}
http://www.htc.com/uk/SupportViewNews.aspx?dl_id=948&news_id=653
Давай чтоли по проектируем немного.
RSS-Reader - Состоит из двух частей:
1. UI - в первом приближении браузерное приложение отображающее фиды в удобном виде, может работать, как с агрегатором так и с источниками фидов на прямую. В последствии можно написать нативные приложения под все популярные платформы, работающее по тому же принцыпу.
UI -состоит из следующих частей:
1.1. преобразователь массива json обьектов в дивы для встраивания в dom - обьект страницы
1.2. парсер данных из rss или atom формата в массив json обьектов
1.3. остальная обьвязка и верстка
2. RSS-агрегатор - серверная часть, осуществляет сбор и хранение фидов, а также обеспечивает доступ к фидам по REST протоколу, отдавая контент в json, rss или atom формате. Так же есть идея отдавать контент в виде статических html страниц с нужным форматированием.
агрегатор состоит из следующих частей:
2.1. паук забирающий по расписанию rss-фиды
2.2. база для хранения фидов
2.3. REST - сервер
2.4 отдача статики, скриптов и стилей.
sitename/rssreader/ - дефолтное приложение для анонимного пользователя
sitename/rssreader/admin - административная панель
sitename/rssreader/feeds - промофиды для анонимного пользователя
sitename/rssreader/feeds/feedid/json - фид в json формате
sitename/rssreader/feeds/feedid/rss - фид в rss формате
sitename/rssreader/feedid/atom - фид в atom формате
sitename/rssreader/feeds/feedid/html - фид в html формате
sitename/rssreader/feeds/feedid/settings - настройки фида
sitename/rssreader/search - поиск по всем фидам
sitename/rssreader/auth - аутентификация
sitename/rssreader/username - приложение для залогиненого пользователя
sitename/rssreader/username/auth - аутентификация пользователя
sitename/rssreader/username/search - поиск для залогиненого пользователя
sitename/rssreader/username/favorites - отмеченые пользователем посты
sitename/rssreader/username/settings - настройки пользователя
sitename/rssreader/username/feeds - фиды пользователя
sitename/rssreader/username/feeds/feedid - определённый фид в дефолтном формате
sitename/rssreader/username/feeds/feedid/json - фид в json формате
sitename/rssreader/username/feeds/feedid/rss - фид в rss формате
sitename/rssreader/username/feeds/feedid/atom - фид в atom формате
sitename/rssreader/username/feeds/feedid/html - фид в html формате
sitename/rssreader/username/feeds/feedid/items - отдельная запись фида в дефолтном формате
sitename/rssreader/username/feeds/feedid/items/json - отдельная запись фида в json формате
sitename/rssreader/username/feeds/feedid/items/rss - отдельная запись фида в rss формате
sitename/rssreader/username/feeds/feedid/items/atom - отдельная запись фида в atom формате
sitename/rssreader/username/feeds/feedid/items/html - отдельная запись фида в html формате
sitename/rssreader/username/feeds/feedid/settings - настройки фида
sitename/rssreader/username/feeds/feedid/search - поиск в фиде
sitename/rssreader/username/feeds/feedid/favorites - отмеченые пользователем записи в фиде
sitename/rssreader/username/feeds/feedid/favorites/search - поиск в отмеченых пользователем записях в фиде
#[[Habra|http://habrahabr.ru/post/95526/]]
#[[Node-rss|https://github.com/dylang/node-rss]]
#[[Node-feedparser|https://github.com/danmactough/node-feedparser]]
#[[Node-js-rss-module|http://stackoverflow.com/questions/5722638/node-js-rss-module]]
#[[Node-rssparser|https://github.com/tk120404/node-rssparser]]
#[[selfoss|http://selfoss.aditu.de/]]
#[[NewsBlur|https://github.com/samuelclay/NewsBlur]]
#[[Tiny Tiny RSS|http://tt-rss.org/index.html]]
#[[Создание веб-паука на Node.js|http://nodejs.ru/268]]
#[[Бенчмарк HTML парсеров|http://habrahabr.ru/post/163979/]]
#[[Получение погоды на Node.JS|http://redspirit.ru/busy/poluchenie-pogody-na-node-js.html]]
#[[2000 часов в одиночестве, или как был сделан RSS reader|http://habrahabr.ru/post/95526/]]
#[[google-fucked-up|http://lifehacker.ru/2013/03/14/google-fucked-up/]]
#[[Ищем альтернативы Google Reader|http://habrahabr.ru/post/172725/]]
#[[Свой Google Reader методом Бендера|http://habrahabr.ru/post/172727/]]
#[[Обзор RSS-ридеров — self-hosted альтернативы Google Reader|http://habrahabr.ru/post/172967/]]
#[[Как использовать Gmail вместо Google Reader |http://lifehacker.ru/2013/03/20/kak-ispolzovat-gmail-vmesto-google-reader/]]
#[[Готовясь к отключению Google Reader-а|http://habrahabr.ru/post/174315/]]
!ФС Reizer4fs на основе которого буду писать свой код
|>|>|>|!linux-2.6.35|>|>|>|!reiser4-for-2.6.35.patch|>|>|>|!bxt-for-2.6.35.patch|
| \doc | [[Changes|Changes_old]] | | | \doc | [[Changes|Changes_r4]] | | | \doc | | | |
| | | | | | \filesystems | [[reiser4.txt|reiser4_txt_r4]] | | | | | |
| \mm | [[filemap.c|filemap_c_old]] | | | \mm | [[filemap.c|filemap_c_r4]] | | | \mm | | | |
| | [[page-writeback.c|page-writeback_c_old]] | | | | [[page-writeback.c|page-writeback_c_r4]] | | | | | | |
| \include | \linux | [[fs.h|fs_h_old]] | | \include | \linux | [[fs.h|fs_h_r4]] | | \include | | | |
| | | [[mm.h|mm_h_old]] | | | | [[mm.h|mm_h_r4]] | | | | | |
| | | [[writeback.h|writeback_h_old]] | | | | [[writeback.h|writeback_h_r4]] | | | | | |
| \fs | [[Kconfig|Kconfig_old]] | | | \fs | [[Kconfig|Kconfig_r4]] | | | \fs | | | |
| | [[Makefile|Makefile_old]] | | | | [[Makefile|Makefile_r4]] | | | | | | |
| | [[fs-writeback.c|fs-writeback_c_old]] | | | | [[fs-writeback.c|fs-writeback_c_r4]] | | | | | | |
| | [[inode.c|inode_c_old]] | | | | [[inode.c|inode_c_r4]] | | | | | | |
| | | | | | \reiser4 | [[Kconfig|reiser4_Kconfig]] | | | | | |
| | | | | | | [[Makefile|reiser4_Makefile]] | | | | | |
| | | | | | | [[README|reiser4_README]] | | | | | |
| | | | | | | | | | | | |
! Ссылки по теме.
http://www.samag.ru/cgi-bin/go.pl?q=articles;n=04.2006;a=10
http://www.linuxcenter.ru/enc/file-sys.htm
http://www.ibm.com/developerworks/ru/library/l-linux-filesystem/index.html
http://www.linux.org.ru/wiki/en/Reiser4
http://www.opennet.ru/base/sys/xfs_struct.txt.html
/***
|''Name:''|ReminderPlugin|
|''Version:''|2.3.8 (Mar 9, 2006)|
|''Source:''|http://www.geocities.com/allredfaq/reminderMacros.html|
|''Author:''|Jeremy Sheeley(pop1280 [at] excite [dot] com)|
|''Licence:''|[[BSD open source license]]|
|''Macros:''|reminder, showreminders, displayTiddlersWithReminders, newReminder|
|''TiddlyWiki:''|2.0+|
|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|
|''Hacked by:'' | //Cleb. Support for Russian dates added// |
|''Hack version:'' | //0.8b// |
|''Hack source:'' | http://glebsite.ru/tw |
!Description
This plugin provides macros for tagging a date with a reminder. Use the {{{reminder}}} macro to do this. The {{{showReminders}}} and {{{displayTiddlersWithReminder}}} macros automatically search through all available tiddlers looking for upcoming reminders.
!Installation
* Create a new tiddler in your tiddlywiki titled ReminderPlugin and give it the {{{systemConfig}}} tag. The tag is important because it tells TW that this is executable code.
* Double click this tiddler, and copy all the text from the tiddler's body.
* Paste the text into the body of the new tiddler in your TW.
* Save and reload your TW.
* You can copy some examples into your TW as well. See [[Simple examples]], [[Holidays]], [[showReminders]] and [[Personal Reminders]]
!Syntax:
|>|See [[ReminderSyntax]] and [[showRemindersSyntax]]|
!Revision history
* v2.3.8 (Mar 9, 2006)
**Bug fix: A global variable had snuck in, which was killing FF 1.5.0.1
**Feature: You can now use TIDDLER and TIDDLERNAME in a regular reminder format
* v2.3.6 (Mar 1, 2006)
**Bug fix: Reminders for today weren't being matched sometimes.
**Feature: Solidified integration with DatePlugin and CalendarPlugin
**Feature: Recurring reminders will now return multiple hits in showReminders and the calendar.
**Feature: Added TIDDLERNAME to the replacements for showReminders format, for plugins that need the title without brackets.
* v2.3.5 (Feb 8, 2006)
**Bug fix: Sped up reminders lots. Added a caching mechanism for reminders that have already been matched.
* v2.3.4 (Feb 7, 2006)
**Bug fix: Cleaned up code to hopefully prevent the Firefox 1.5.0.1 crash that was causing lots of plugins
to crash Firefox. Thanks to http://www.jslint.com
* v2.3.3 (Feb 2, 2006)
**Feature: newReminder now has drop down lists instead of text boxes.
**Bug fix: A trailing space in a title would trigger an infinite loop.
**Bug fix: using tag:"birthday !reminder" would filter differently than tag:"!reminder birthday"
* v2.3.2 (Jan 21, 2006)
**Feature: newReminder macro, which will let you easily add a reminder to a tiddler. Thanks to Eric Shulman (http://www.elsdesign.com) for the code to do this.
** Bug fix: offsetday was not working sometimes
** Bug fix: when upgrading to 2.0, I included a bit to exclude tiddlers tagged with excludeSearch. I've reverted back to searching through all tiddlers
* v2.3.1 (Jan 7, 2006)
**Feature: 2.0 compatibility
**Feature AlanH sent some code to make sure that showReminders prints a message if no reminders are found.
* v2.3.0 (Jan 3, 2006)
** Bug Fix: Using "Last Sunday (-0)" as a offsetdayofweek wasn't working.
** Bug Fix: Daylight Savings time broke offset based reminders (for example year:2005 month:8 day:23 recurdays:7 would match Monday instead of Tuesday during DST.
!Code
***/
//{{{
//============================================================================
//============================================================================
// ReminderPlugin
//============================================================================
//============================================================================
version.extensions.ReminderPlugin = {major: 2, minor: 3, revision: 8, date: new Date(2006,3,9), source: "http://www.geocities.com/allredfaq/reminderMacros.html"};
//============================================================================
// Configuration
// Modify this section to change the defaults for
// leadtime and display strings
//============================================================================
config.macros.reminders = {};
config.macros["reminder"] = {};
config.macros["newReminder"] = {};
config.macros["showReminders"] = {};
config.macros["displayTiddlersWithReminders"] = {};
config.macros.reminders["defaultLeadTime"] = [0,6000];
config.macros.reminders["defaultReminderMessage"] = "DIFF: TITLE: DATE ANNIVERSARY";
config.macros.reminders["defaultShowReminderMessage"] = "DIFF: TITLE: DATE ANNIVERSARY -- TIDDLER";
config.macros.reminders["defaultAnniversaryMessage"] = "(DIFF-летие)";
config.macros.reminders["untitledReminder"] = "Что-то";
config.macros.reminders["noReminderFound"] = "В ближайшие дни (LEADTIMEUPPER) TITLE отсутствует в планах."
config.macros.reminders["todayString"] = "''Сегодня''";
config.macros.reminders["tomorrowString"] = "''Завтра''";
config.macros.reminders["ndaysString"] = "Через DIFF дней";
config.macros.reminders["emtpyShowRemindersString"] = "Ничего не запланировано!";
//============================================================================
// Code
// You should not need to edit anything
// below this. Make sure to edit this tiddler and copy
// the code from the text box, to make sure that
// tiddler rendering doesn't interfere with the copy
// and paste.
//============================================================================
// This line is to preserve 1.2 compatibility
if (!story) var story=window;
//this object will hold the cache of reminders, so that we don't
//recompute the same reminder over again.
var reminderCache = {};
config.macros.showReminders.handler = function showReminders(place,macroName,params)
{
var now = new Date().getMidnight();
var paramHash = {};
var leadtime = [0,14];
paramHash = getParamsForReminder(params);
var bProvidedDate = (paramHash["year"] != null) ||
(paramHash["month"] != null) ||
(paramHash["day"] != null) ||
(paramHash["dayofweek"] != null);
if (paramHash["leadtime"] != null)
{
leadtime = paramHash["leadtime"];
if (bProvidedDate)
{
//If they've entered a day, we need to make
//sure to find it. We'll reset the
//leadtime a few lines down.
paramHash["leadtime"] = [-10000, 10000];
}
}
var matchedDate = now;
if (bProvidedDate)
{
var leadTimeLowerBound = new Date().getMidnight().addDays(paramHash["leadtime"][0]);
var leadTimeUpperBound = new Date().getMidnight().addDays(paramHash["leadtime"][1]);
matchedDate = findDateForReminder(paramHash, new Date().getMidnight(), leadTimeLowerBound, leadTimeUpperBound);
}
var arr = findTiddlersWithReminders(matchedDate, leadtime, paramHash["tag"], paramHash["limit"]);
var elem = createTiddlyElement(place,"span",null,null, null);
var mess = "";
if (arr.length == 0)
{
mess += config.macros.reminders.emtpyShowRemindersString;
}
for (var j = 0; j < arr.length; j++)
{
if (paramHash["format"] != null)
{
arr[j]["params"]["format"] = paramHash["format"];
}
else
{
arr[j]["params"]["format"] = config.macros.reminders["defaultShowReminderMessage"];
}
mess += getReminderMessageForDisplay(arr[j]["diff"], arr[j]["params"], arr[j]["matchedDate"], arr[j]["tiddler"]);
mess += "\n";
}
wikify(mess, elem, null, null);
};
config.macros.displayTiddlersWithReminders.handler = function displayTiddlersWithReminders(place,macroName,params)
{
var now = new Date().getMidnight();
var paramHash = {};
var leadtime = [0,14];
paramHash = getParamsForReminder(params);
var bProvidedDate = (paramHash["year"] != null) ||
(paramHash["month"] != null) ||
(paramHash["day"] != null) ||
(paramHash["dayofweek"] != null);
if (paramHash["leadtime"] != null)
{
leadtime = paramHash["leadtime"];
if (bProvidedDate)
{
//If they've entered a day, we need to make
//sure to find it. We'll reset the leadtime
//a few lines down.
paramHash["leadtime"] = [-10000,10000];
}
}
var matchedDate = now;
if (bProvidedDate)
{
var leadTimeLowerBound = new Date().getMidnight().addDays(paramHash["leadtime"][0]);
var leadTimeUpperBound = new Date().getMidnight().addDays(paramHash["leadtime"][1]);
matchedDate = findDateForReminder(paramHash, new Date().getMidnight(), leadTimeLowerBound, leadTimeUpperBound);
}
var arr = findTiddlersWithReminders(matchedDate, leadtime, paramHash["tag"], paramHash["limit"]);
for (var j = 0; j < arr.length; j++)
{
displayTiddler(null, arr[j]["tiddler"], 0, null, false, false, false);
}
};
config.macros.reminder.handler = function reminder(place,macroName,params)
{
var dateHash = getParamsForReminder(params);
if (dateHash["hidden"] != null)
{
return;
}
var leadTime = dateHash["leadtime"];
if (leadTime == null)
{
leadTime = config.macros.reminders["defaultLeadTime"];
}
var leadTimeLowerBound = new Date().getMidnight().addDays(leadTime[0]);
var leadTimeUpperBound = new Date().getMidnight().addDays(leadTime[1]);
var matchedDate = findDateForReminder(dateHash, new Date().getMidnight(), leadTimeLowerBound, leadTimeUpperBound);
if (!window.story)
{
window.story=window;
}
if (!store.getTiddler)
{
store.getTiddler=function(title) {return this.tiddlers[title];};
}
var title = window.story.findContainingTiddler(place).id.substr(7);
if (matchedDate != null)
{
var diff = matchedDate.getDifferenceInDays(new Date().getMidnight());
var elem = createTiddlyElement(place,"span",null,null, null);
var mess = getReminderMessageForDisplay(diff, dateHash, matchedDate, title);
wikify(mess, elem, null, null);
}
else
{
createTiddlyElement(place,"span",null,null, config.macros.reminders["noReminderFound"].replace("TITLE", dateHash["title"]).replace("LEADTIMEUPPER", leadTime[1]).replace("LEADTIMELOWER", leadTime[0]).replace("TIDDLERNAME", title).replace("TIDDLER", "[[" + title + "]]") );
}
};
config.macros.newReminder.handler = function newReminder(place,macroName,params)
{
var today=new Date().getMidnight();
var formstring = '<html><form>год: <select name="year"><option value="">Каждый год</option>';
for (var i = 0; i < 5; i++)
{
formstring += '<option' + ((i == 0) ? ' selected' : '') + ' value="' + (today.getFullYear() +i) + '">' + (today.getFullYear() + i) + '</option>';
}
formstring += '</select> день:<select name="day"><option value="">Каждый день</option>';
for (i = 1; i < 32; i++)
{
formstring += '<option' + ((i == (today.getDate() )) ? ' selected' : '') + ' value="' + i + '">' + i + '</option>';
}
formstring += '</select> месяца:<select name="month"><option value="">Каждый месяц</option>';
for (i = 0; i < 12; i++)
{
formstring += '<option' + ((i == today.getMonth()) ? ' selected' : '') + ' value="' + (i+1) + '">' + config.messages.dates.months[i] + '</option>';
}
formstring += '</select> <br />название:<input type="text" size="40" name="title" value="Введите название. Можно форматировать." onfocus="this.select();"><input type="button" value="Добавить" onclick="addReminderToTiddler(this.form)"></form></html>';
var panel = config.macros.slider.createSlider(place,null,"Добавить новое напоминание","Откройте, чтобы добавить напоминание в эту запись");
wikify(formstring ,panel,null,store.getTiddler(params[1]));
};
// onclick: process input and insert reminder at 'marker'
window.addReminderToTiddler = function(form) {
if (!window.story)
{
window.story=window;
}
if (!store.getTiddler)
{
store.getTiddler=function(title) {return this.tiddlers[title];};
}
var title = window.story.findContainingTiddler(form).id.substr(7);
var tiddler=store.getTiddler(title);
var txt='\n<<reminder ';
if (form.year.value != "")
txt += 'year:'+form.year.value + ' ';
if (form.month.value != "")
txt += 'month:'+form.month.value + ' ';
if (form.day.value != "")
txt += 'day:'+form.day.value + ' ';
txt += 'title:"'+form.title.value+'" ';
txt +='>>';
tiddler.set(null,tiddler.text + txt);
window.story.refreshTiddler(title,1,true);
store.setDirty(true);
};
function hasTag(tiddlerTags, tagFilters)
{
//Make sure we respond well to empty tiddlerTaglists or tagFilterlists
if (tagFilters.length==0 || tiddlerTags.length==0)
{
return true;
}
var bHasTag = false;
/*bNoPos says: "'till now there has been no check using a positive filter"
Imagine a filterlist consisting of 1 negative filter:
If the filter isn't matched, we want hasTag to be true.
Yet bHasTag is still false ('cause only positive filters cause bHasTag to change)
If no positive filters are present bNoPos is true, and no negative filters are matched so we have not returned false
Thus: hasTag returns true.
If at any time a positive filter is encountered, we want at least one of the tags to match it, so we turn bNoPos to false, which
means bHasTag must be true for hasTag to return true*/
var bNoPos=true;
for (var t3 = 0; t3 < tagFilters.length; t3++)
{
for(var t2=0; t2<tiddlerTags.length; t2++)
{
if (tagFilters[t3].length > 1 && tagFilters[t3].charAt(0) == '!')
{
if (tiddlerTags[t2] == tagFilters[t3].substring(1))
{
//If at any time a negative filter is matched, we return false
return false;
}
}
else
{
if (bNoPos)
{
//We encountered the first positive filter
bNoPos=false;
}
if (tiddlerTags[t2] == tagFilters[t3])
{
//A positive filter is matched. As long as no negative filter is matched, hasTag will return true
bHasTag=true;
}
}
}
}
return (bNoPos || bHasTag);
};
//This function searches all tiddlers for the reminder //macro. It is intended that other plugins (like //calendar) will use this function to query for
//upcoming reminders.
//The arguments to this function filter out reminders //based on when they will fire.
//
//ARGUMENTS:
//baseDate is the date that is used as "now".
//leadtime is a two element int array, with leadtime[0]
// as the lower bound and leadtime[1] as the
// upper bound. A reasonable default is [0,14]
//tags is a space-separated list of tags to use to filter
// tiddlers. If a tag name begins with an !, then
// only tiddlers which do not have that tag will
// be considered. For example "examples holidays"
// will search for reminders in any tiddlers that
// are tagged with examples or holidays and
// "!examples !holidays" will search for reminders
// in any tiddlers that are not tagged with
// examples or holidays. Pass in null to search
// all tiddlers.
//limit. If limit is null, individual reminders can
// override the leadtime specified earlier.
// Pass in 1 in order to override that behavior.
window.findTiddlersWithReminders = function findTiddlersWithReminders(baseDate, leadtime, tags, limit)
{
//function(searchRegExp,sortField,excludeTag)
// var macroPattern = "<<([^>\\]+)(?:\\*)([^>]*)>>";
var macroPattern = "<<(reminder)(.*)>>";
var macroRegExp = new RegExp(macroPattern,"mg");
var matches = store.search(macroRegExp,"title","");
var arr = [];
var tagsArray = null;
if (tags != null)
{
tagsArray = tags.split(" ");
}
for(var t=matches.length-1; t>=0; t--)
{
if (tagsArray != null)
{
//If they specified tags to filter on, and this tiddler doesn't
//match, skip it entirely.
if ( ! hasTag(matches[t].tags, tagsArray))
{
continue;
}
}
var targetText = matches[t].text;
do {
// Get the next formatting match
var formatMatch = macroRegExp.exec(targetText);
if(formatMatch && formatMatch[1] != null && formatMatch[1].toLowerCase() == "reminder")
{
//Find the matching date.
var params = formatMatch[2] != null ? formatMatch[2].readMacroParams() : {};
var dateHash = getParamsForReminder(params);
if (limit != null || dateHash["leadtime"] == null)
{
if (leadtime == null)
dateHash["leadtime"] = leadtime;
else
{
dateHash["leadtime"] = [];
dateHash["leadtime"][0] = leadtime[0];
dateHash["leadtime"][1] = leadtime[1];
}
}
if (dateHash["leadtime"] == null)
dateHash["leadtime"] = config.macros.reminders["defaultLeadTime"];
var leadTimeLowerBound = baseDate.addDays(dateHash["leadtime"][0]);
var leadTimeUpperBound = baseDate.addDays(dateHash["leadtime"][1]);
var matchedDate = findDateForReminder(dateHash, baseDate, leadTimeLowerBound, leadTimeUpperBound);
while (matchedDate != null)
{
var hash = {};
hash["diff"] = matchedDate.getDifferenceInDays(baseDate);
hash["matchedDate"] = new Date(matchedDate.getFullYear(), matchedDate.getMonth(), matchedDate.getDate(), 0, 0);
hash["params"] = cloneParams(dateHash);
hash["tiddler"] = matches[t].title;
hash["tags"] = matches[t].tags;
arr.pushUnique(hash);
if (dateHash["recurdays"] != null || (dateHash["year"] == null))
{
leadTimeLowerBound = leadTimeLowerBound.addDays(matchedDate.getDifferenceInDays(leadTimeLowerBound)+ 1);
matchedDate = findDateForReminder(dateHash, baseDate, leadTimeLowerBound, leadTimeUpperBound);
}
else matchedDate = null;
}
}
}while(formatMatch);
}
if(arr.length > 1) //Sort the array by number of days remaining.
{
arr.sort(function (a,b) {if(a["diff"] == b["diff"]) {return(0);} else {return (a["diff"] < b["diff"]) ? -1 : +1; } });
}
return arr;
};
//This function takes the reminder macro parameters and
//generates the string that is used for display.
//This function is not intended to be called by
//other plugins.
window.getReminderMessageForDisplay= function getReminderMessageForDisplay(diff, params, matchedDate, tiddlerTitle)
{
var anniversaryString = "";
var reminderTitle = params["title"];
if (reminderTitle == null)
{
reminderTitle = config.macros.reminders["untitledReminder"];
}
if (params["firstyear"] != null)
{
anniversaryString = config.macros.reminders["defaultAnniversaryMessage"].replace("DIFF", (matchedDate.getFullYear() - params["firstyear"]));
}
var mess = "";
var diffString = "";
if (diff == 0)
{
diffString = config.macros.reminders["todayString"];
}
else if (diff == 1)
{
diffString = config.macros.reminders["tomorrowString"];
}
else if (diff == 2)
{
diffString = "''Послезавтра''";
}
else if (diff == -1)
{
diffString = "//Вчера//";
}
else if (diff == -2)
{
diffString = "//Позавчера//";
}
else
{
diff-=1; //HACK(ru)
diffString = config.macros.reminders["ndaysString"].replace("DIFF", diff);
}
var format = config.macros.reminders["defaultReminderMessage"];
if (params["format"] != null)
{
format = params["format"];
}
mess = format;
//HACK! -- Avoid replacing DD in TIDDLER with the date
mess = mess.replace(/TIDDLER/g, "TIDELER");
mess = matchedDate.formatStringDateOnly(mess);
mess = mess.replace(/TIDELER/g, "TIDDLER");
if (tiddlerTitle != null)
{
mess = mess.replace(/TIDDLERNAME/g, tiddlerTitle);
mess = mess.replace(/TIDDLER/g, "[[" + tiddlerTitle + "]]");
}
mess = mess.replace("DIFF", diffString).replace("TITLE", reminderTitle).replace("DATE", matchedDate.formatString("DDD, [[DD MMM]], YYYY")).replace("ANNIVERSARY", anniversaryString);
//RUSSIAN LANGUAGE HACK
var daysS = diff.toString();
var lastD = daysS.charAt(daysS.length-1);
var lastDs = daysS.substring(daysS.length-2 );
var rD = "дней";
var rD1 = "1";
var rD234 = "2-3-4";
var rD5_9 = "5-6-7-8-9";
daysS = daysS.substring(daysS.length-2);
if( (lastDs.indexOf("14") == -1)&&(lastDs.indexOf("13") == -1)&&(lastDs.indexOf("12") == -1)&&(lastDs.indexOf("11") == -1) ){
if (rD1.indexOf(lastD)!=-1){
rD = "день";
}
if (rD234.indexOf(lastD)!=-1){
rD = "дня";
}
}
if(diff<0){
mess = mess.replace(/Через -/, "" );
mess = mess.replace(/ дней/, " дней назад" );
}
mess = mess.replace(/ дней/, " "+rD );
//HACK ENDS
return mess;
};
// Parse out the macro parameters into a hashtable. This
// handles the arguments for reminder, showReminders and
// displayTiddlersWithReminders.
window.getParamsForReminder = function getParamsForReminder(params)
{
var dateHash = {};
var type = "";
var num = 0;
var title = "";
for(var t=0; t<params.length; t++)
{
var split = params[t].split(":");
type = split[0].toLowerCase();
var value = split[1];
for (var i=2; i < split.length; i++)
{
value += ":" + split[i];
}
if (type == "nolinks" || type == "limit" || type == "hidden")
{
num = 1;
}
else if (type == "leadtime")
{
var leads = value.split("...");
if (leads.length == 1)
{
leads[1]= leads[0];
leads[0] = 0;
}
leads[0] = parseInt(leads[0], 10);
leads[1] = parseInt(leads[1], 10);
num = leads;
}
else if (type == "offsetdayofweek")
{
if (value.substr(0,1) == "-")
{
dateHash["negativeOffsetDayOfWeek"] = 1;
value = value.substr(1);
}
num = parseInt(value, 10);
}
else if (type != "title" && type != "tag" && type != "format")
{
num = parseInt(value, 10);
}
else
{
title = value;
t++;
while (title.substr(0,1) == '"' && title.substr(title.length - 1,1) != '"' && params[t] != undefined)
{
title += " " + params[t++];
}
//Trim off the leading and trailing quotes
if (title.substr(0,1) == "\"" && title.substr(title.length - 1,1)== "\"")
{
title = title.substr(1, title.length - 2);
t--;
}
num = title;
}
dateHash[type] = num;
}
//date is synonymous with day
if (dateHash["day"] == null)
{
dateHash["day"] = dateHash["date"];
}
return dateHash;
};
//This function finds the date specified in the reminder
//parameters. It will return null if no match can be
//found. This function is not intended to be used by
//other plugins.
window.findDateForReminder= function findDateForReminder( dateHash, baseDate, leadTimeLowerBound, leadTimeUpperBound)
{
if (baseDate == null)
{
baseDate = new Date().getMidnight();
}
var hashKey = baseDate.convertToYYYYMMDDHHMM();
for (var k in dateHash)
{
hashKey += "," + k + "|" + dateHash[k];
}
hashKey += "," + leadTimeLowerBound.convertToYYYYMMDDHHMM();
hashKey += "," + leadTimeUpperBound.convertToYYYYMMDDHHMM();
if (reminderCache[hashKey] == null)
{
//If we don't find a match in this run, then we will
//cache that the reminder can't be matched.
reminderCache[hashKey] = false;
}
else if (reminderCache[hashKey] == false)
{
//We've already tried this date and failed
return null;
}
else
{
return reminderCache[hashKey];
}
var bOffsetSpecified = dateHash["offsetyear"] != null ||
dateHash["offsetmonth"] != null ||
dateHash["offsetday"] != null ||
dateHash["offsetdayofweek"] != null ||
dateHash["recurdays"] != null;
// If we are matching the base date for a dayofweek offset, look for the base date a
//little further back.
var tmp1leadTimeLowerBound = leadTimeLowerBound;
if ( dateHash["offsetdayofweek"] != null)
{
tmp1leadTimeLowerBound = leadTimeLowerBound.addDays(-6);
}
var matchedDate = baseDate.findMatch(dateHash, tmp1leadTimeLowerBound, leadTimeUpperBound);
if (matchedDate != null)
{
var newMatchedDate = matchedDate;
if (dateHash["recurdays"] != null)
{
while (newMatchedDate.getTime() < leadTimeLowerBound.getTime())
{
newMatchedDate = newMatchedDate.addDays(dateHash["recurdays"]);
}
}
else if (dateHash["offsetyear"] != null ||
dateHash["offsetmonth"] != null ||
dateHash["offsetday"] != null ||
dateHash["offsetdayofweek"] != null)
{
var tmpdateHash = cloneParams(dateHash);
tmpdateHash["year"] = dateHash["offsetyear"];
tmpdateHash["month"] = dateHash["offsetmonth"];
tmpdateHash["day"] = dateHash["offsetday"];
tmpdateHash["dayofweek"] = dateHash["offsetdayofweek"];
var tmpleadTimeLowerBound = leadTimeLowerBound;
var tmpleadTimeUpperBound = leadTimeUpperBound;
if (tmpdateHash["offsetdayofweek"] != null)
{
if (tmpdateHash["negativeOffsetDayOfWeek"] == 1)
{
tmpleadTimeLowerBound = matchedDate.addDays(-6);
tmpleadTimeUpperBound = matchedDate;
}
else
{
tmpleadTimeLowerBound = matchedDate;
tmpleadTimeUpperBound = matchedDate.addDays(6);
}
}
newMatchedDate = matchedDate.findMatch(tmpdateHash, tmpleadTimeLowerBound, tmpleadTimeUpperBound);
//The offset couldn't be matched. return null.
if (newMatchedDate == null)
{
return null;
}
}
if (newMatchedDate.isBetween(leadTimeLowerBound, leadTimeUpperBound))
{
reminderCache[hashKey] = newMatchedDate;
return newMatchedDate;
}
}
return null;
};
//This does much the same job as findDateForReminder, but
//this one doesn't deal with offsets or recurring
//reminders.
Date.prototype.findMatch = function findMatch(dateHash, leadTimeLowerBound, leadTimeUpperBound)
{
var bSpecifiedYear = (dateHash["year"] != null);
var bSpecifiedMonth = (dateHash["month"] != null);
var bSpecifiedDay = (dateHash["day"] != null);
var bSpecifiedDayOfWeek = (dateHash["dayofweek"] != null);
if (bSpecifiedYear && bSpecifiedMonth && bSpecifiedDay)
{
return new Date(dateHash["year"], dateHash["month"]-1, dateHash["day"], 0, 0);
}
var bMatchedYear = !bSpecifiedYear;
var bMatchedMonth = !bSpecifiedMonth;
var bMatchedDay = !bSpecifiedDay;
var bMatchedDayOfWeek = !bSpecifiedDayOfWeek;
if (bSpecifiedDay && bSpecifiedMonth && !bSpecifiedYear && !bSpecifiedDayOfWeek)
{
//Shortcut -- First try this year. If it's too small, try next year.
var tmpMidnight = this.getMidnight();
var tmpDate = new Date(this.getFullYear(), dateHash["month"]-1, dateHash["day"], 0,0);
if (tmpDate.getTime() < leadTimeLowerBound.getTime())
{
tmpDate = new Date((this.getFullYear() + 1), dateHash["month"]-1, dateHash["day"], 0,0);
}
if ( tmpDate.isBetween(leadTimeLowerBound, leadTimeUpperBound))
{
return tmpDate;
}
else
{
return null;
}
}
var newDate = leadTimeLowerBound;
while (newDate.isBetween(leadTimeLowerBound, leadTimeUpperBound))
{
var tmp = testDate(newDate, dateHash, bSpecifiedYear, bSpecifiedMonth, bSpecifiedDay, bSpecifiedDayOfWeek);
if (tmp != null)
return tmp;
newDate = newDate.addDays(1);
}
};
function testDate(testMe, dateHash, bSpecifiedYear, bSpecifiedMonth, bSpecifiedDay, bSpecifiedDayOfWeek)
{
var bMatchedYear = !bSpecifiedYear;
var bMatchedMonth = !bSpecifiedMonth;
var bMatchedDay = !bSpecifiedDay;
var bMatchedDayOfWeek = !bSpecifiedDayOfWeek;
if (bSpecifiedYear)
{
bMatchedYear = (dateHash["year"] == testMe.getFullYear());
}
if (bSpecifiedMonth)
{
bMatchedMonth = ((dateHash["month"] - 1) == testMe.getMonth() );
}
if (bSpecifiedDay)
{
bMatchedDay = (dateHash["day"] == testMe.getDate());
}
if (bSpecifiedDayOfWeek)
{
bMatchedDayOfWeek = (dateHash["dayofweek"] == testMe.getDay());
}
if (bMatchedYear && bMatchedMonth && bMatchedDay && bMatchedDayOfWeek)
{
return testMe;
}
};
//Returns true if the date is in between two given dates
Date.prototype.isBetween = function isBetween(lowerBound, upperBound)
{
return (this.getTime() >= lowerBound.getTime() && this.getTime() <= upperBound.getTime());
}
//Return a new date, with the time set to midnight (0000)
Date.prototype.getMidnight = function getMidnight()
{
return new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0);
};
// Add the specified number of days to a date.
Date.prototype.addDays = function addDays(numberOfDays)
{
return new Date(this.getFullYear(), this.getMonth(), this.getDate() + numberOfDays, 0, 0);
};
//Return the number of days between two dates.
Date.prototype.getDifferenceInDays = function getDifferenceInDays(otherDate)
{
//I have to do it this way, because this way ignores daylight savings
var tmpDate = this.addDays(0);
if (this.getTime() > otherDate.getTime())
{
var i = 0;
for (i = 0; tmpDate.getTime() > otherDate.getTime(); i++)
{
tmpDate = tmpDate.addDays(-1);
}
return i;
}
else
{
var i = 0;
for (i = 0; tmpDate.getTime() < otherDate.getTime(); i++)
{
tmpDate = tmpDate.addDays(1);
}
return i * -1;
}
return 0;
};
function cloneParams(what) {
var tmp = {};
for (var i in what) {
tmp[i] = what[i];
}
return tmp;
}
// Substitute date components into a string
Date.prototype.formatStringDateOnly = function formatStringDateOnly(template)
{
template = template.replace("YYYY",this.getFullYear());
template = template.replace("YY",String.zeroPad(this.getFullYear()-2000,2));
template = template.replace("MMM",config.messages.dates.months[this.getMonth()]);
template = template.replace("0MM",String.zeroPad(this.getMonth()+1,2));
template = template.replace("MM",this.getMonth()+1);
template = template.replace("DDD",config.messages.dates.days[this.getDay()]);
template = template.replace("0DD",String.zeroPad(this.getDate(),2));
template = template.replace("DD",this.getDate());
return template;
};
//}}}
/***
|Name:|RenameTagsPlugin|
|Description:|Allows you to easily rename or delete tags across multiple tiddlers|
|Version:|3.0 ($Rev: 5501 $)|
|Date:|$Date: 2008-06-10 23:11:55 +1000 (Tue, 10 Jun 2008) $|
|Source:|http://mptw.tiddlyspot.com/#RenameTagsPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
Rename a tag and you will be prompted to rename it in all its tagged tiddlers.
***/
//{{{
config.renameTags = {
prompts: {
rename: "Rename the tag '%0' to '%1' in %2 tidder%3?",
remove: "Remove the tag '%0' from %1 tidder%2?"
},
removeTag: function(tag,tiddlers) {
store.suspendNotifications();
for (var i=0;i<tiddlers.length;i++) {
store.setTiddlerTag(tiddlers[i].title,false,tag);
}
store.resumeNotifications();
store.notifyAll();
},
renameTag: function(oldTag,newTag,tiddlers) {
store.suspendNotifications();
for (var i=0;i<tiddlers.length;i++) {
store.setTiddlerTag(tiddlers[i].title,false,oldTag); // remove old
store.setTiddlerTag(tiddlers[i].title,true,newTag); // add new
}
store.resumeNotifications();
store.notifyAll();
},
storeMethods: {
saveTiddler_orig_renameTags: TiddlyWiki.prototype.saveTiddler,
saveTiddler: function(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created) {
if (title != newTitle) {
var tagged = this.getTaggedTiddlers(title);
if (tagged.length > 0) {
// then we are renaming a tag
if (confirm(config.renameTags.prompts.rename.format([title,newTitle,tagged.length,tagged.length>1?"s":""])))
config.renameTags.renameTag(title,newTitle,tagged);
if (!this.tiddlerExists(title) && newBody == "")
// dont create unwanted tiddler
return null;
}
}
return this.saveTiddler_orig_renameTags(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created);
},
removeTiddler_orig_renameTags: TiddlyWiki.prototype.removeTiddler,
removeTiddler: function(title) {
var tagged = this.getTaggedTiddlers(title);
if (tagged.length > 0)
if (confirm(config.renameTags.prompts.remove.format([title,tagged.length,tagged.length>1?"s":""])))
config.renameTags.removeTag(title,tagged);
return this.removeTiddler_orig_renameTags(title);
}
},
init: function() {
merge(TiddlyWiki.prototype,this.storeMethods);
}
}
config.renameTags.init();
//}}}
/***
|''Name:''|RuStyle|
|''Description:''|TW russianization|
|''Version:''|0.6.0|
|''Date:''|2006|
|''Source:''|http://www.glebsite.ru|
|''Author:''|Глеб Тржемецкий (Gleb Trzhemetski)|
|''License:''|BSD open source license|
|''CoreVersion:''|2.1.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
***/
//{{{
merge(config.messages,{
customConfigError: "Возникли проблемы при загрузке плагинов. См. PluginManager ",
pluginError: "Ошибка: %0",
pluginDisabled: "Не задействован, так как помечен 'systemConfigDisable' ",
pluginForced: "Задействован, так как помечен 'systemConfigForce' ",
pluginVersionError: "Не задействован из-за несоответствия версий",
nothingSelected: "Ничего не выделено.",
savedSnapshotError: "Похоже, эта wiki была неправильно сохранена. См. http://www.tiddlywiki.com/#DownloadSoftware ",
subtitleUnknown: "(неизвестно)",
undefinedTiddlerToolTip: "Записи '%0' не существует",
shadowedTiddlerToolTip: "Запись '%0' заполнена по умолчанию.",
tiddlerLinkTooltip: "%0 - %1, %2",
externalLinkTooltip: "Ссылка: %0",
noTags: "Нет помеченных записей",
notFileUrlError: "Сохраните TiddlyWiki в файл, чтобы иметь возможность сохранять изменения ",
cantSaveError: "Сохранение невозможно. Либо ваш браузер не подерживает эту функцию (используйте по возможности FireFox), либо путь к файлу содержит недопустимые символы",
invalidFileError: "Файл '%0' не похож на файл TiddlyWiki",
backupSaved: "Резервная копия сохранена",
backupFailed: "Не получилось сохранить резервную копию",
rssSaved: "RSS сохранен",
rssFailed: "Не получилось сохранить RSS",
emptySaved: "Пустой шаблон сохранен",
emptyFailed: "Не получилось сохранить пустой шаблон",
mainSaved: "Файл TiddlyWiki сохранен",
mainFailed: "Не получилось сохранить файл TiddlyWiki. Изменения не сохранены",
macroError: "Ошибка в сценарии <<%0>>",
macroErrorDetails: "Ошибка при выполнении сценария <<%0>>:\n%1",
missingMacro: "Нет такого сценария",
overwriteWarning: "Запись '%0' уже есть. Нажмите OK, чтобы перезаписать",
unsavedChangesWarning: "ВНИМАНИЕ! Есть несохраненные изменения! \n\nНажмите OK, чтобы сохранить\nНажмите CANCEL чтобы не сохранять",
confirmExit: "--------------------------------\n\nИзменения в TiddlyWiki не сохранены. Если вы продолжите, они потеряются.\n\n--------------------------------",
saveInstructions: "SaveChanges",
unsupportedTWFormat: "Неподдерживаемый TiddlyWiki формат '%0'",
tiddlerSaveError: "Ошибка при сохранении записи '%0'",
tiddlerLoadError: "Ошибка при открытии записи '%0'",
wrongSaveFormat: "Не получается сохранить в формате '%0'. Сохранено в стандартном формате.",
invalidFieldName: "Недопустимое имя поля %0",
fieldCannotBeChanged: "Поле '%0' нельзя изменять"});
merge(config.messages.messageClose,{
text: "×",
tooltip: "скрыть сообщение"});
config.messages.dates.months = ["января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября","декабря"];
config.messages.dates.days = ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"];
config.messages.dates.shortMonths = ["I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII"];
config.messages.dates.shortDays = ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"];
merge(config.views.wikified.tag,{
labelNoTags: "меток нет",
labelTags: "метки: ",
openTag: "Открыть метку '%0'",
tooltip: "Показать записи, помеченные как '%0'",
openAllText: "Открыть все",
openAllTooltip: "Открыть все эти записи",
popupNone: "Нет других записей с меткой '%0'"});
merge(config.views.wikified,{
defaultText: "Записи '%0' не существует. Создайте ее двойным щелчком.",
defaultModifier: "(?)",
shadowModifier: "(системная запись)",
createdPrompt: "создана: "});
merge(config.views.editor,{
tagPrompt: "Введите метки, разделенные пробелами, [[используйте квадратные скобки]] если нужно, или выберите метки из списка.",
defaultText: "Здесь мог бы быть осмысленный текст на тему '%0'"});
merge(config.views.editor.tagChooser,{
text: "метки",
tooltip: "Выберите метки из списка",
popupNone: "Меток пока нет",
tagTooltip: "Добавить метку '%0'"});
merge(config.macros.search,{
label: "поиск",
prompt: "Поиск по всем записям",
accessKey: "F",
successMsg: "%0 записей, соответствующих критерию: %1",
failureMsg: "Не найдено записей по запросу: %0"});
merge(config.macros.tagging,{
label: "отмечены: ",
labelNotTag: "нету",
tooltip: "Список записей, помеченных: '%0'"});
merge(config.macros.timeline,{
dateFormat: "DD.mmm.YYYY"});
merge(config.macros.allTags,{
tooltip: "Показать записи, помеченные '%0'",
noTags: "Нет таких записей"});
config.macros.list.all.prompt = "Все записи по алфавиту";
config.macros.list.missing.prompt = "Ненаписанные";
config.macros.list.orphans.prompt = "Записи, на которые нет ссылок";
config.macros.list.shadowed.prompt = "Системные записи";
merge(config.macros.closeAll,{
label: "закрыть все",
prompt: "Закрыть все записи \(кроме редактируемых\)"});
merge(config.macros.permaview,{
label: "ссылка",
prompt: "Постоянная ссылка"});
merge(config.macros.saveChanges,{
label: "сохранить изменения",
prompt: "Сохранить всё",
accessKey: "S"});
merge(config.macros.newTiddler,{
label: "новая запись",
prompt: "Создать новую запись",
title: "Новая запись",
accessKey: "N"});
merge(config.macros.newJournal,{
label: "новая датированная запись",
prompt: "Создать запись, с названием, соответствующим текущей дате",
accessKey: "J"});
merge(config.macros.plugins,{
skippedText: "(Этот плагин не запущен, так как был добавлен после запуска)",
noPluginText: "Плагинов нет",
confirmDeleteText: "Вы действительно хотите удалить записи:\n\n%0",
listViewTemplate : {
columns: [
{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
{name: 'Title', field: 'title', tiddlerLink: 'title', title: "Title", type: 'TiddlerLink'},
{name: 'Forced', field: 'forced', title: "Forced", tag: 'systemConfigForce', type: 'TagCheckbox'},
{name: 'Disabled', field: 'disabled', title: "Disabled", tag: 'systemConfigDisable', type: 'TagCheckbox'},
{name: 'Executed', field: 'executed', title: "Loaded", type: 'Boolean', trueText: "Yes", falseText: "No"},
{name: 'Error', field: 'error', title: "Status", type: 'Boolean', trueText: "Error", falseText: "OK"},
{name: 'Log', field: 'log', title: "Log", type: 'StringList'}
],
rowClasses: [
{className: 'error', field: 'error'},
{className: 'warning', field: 'warning'}
],
actions: [
{caption: "Действия...", name: ''},
{caption: "Сделать не системной записью", name: 'remove'},
{caption: "Удалить из wiki", name: 'delete'}
]}
});
merge(config.macros.refreshDisplay,{
label: "обновить",
prompt: "Обновить отображение"
});
merge(config.macros.importTiddlers,{
defaultPath: "http://www.tiddlywiki.com/index.html",
fetchLabel: "загрузить",
fetchPrompt: "Загрузить файл TiddlyWiki",
fetchError: "Ошибка при загрузке файла",
confirmOverwriteText: "Вы уверены, что хотите перезаписать следующие записи:\n\n%0",
wizardTitle: "Импорт записей из файла TiddlyWiki",
step1: "Шаг 1: Введите путь к файлу",
step1prompt: "Введите URL или путь к локальному файлу: ",
step1promptFile: "...или выберите тут: ",
step1promptFeeds: "...или из предустановленных: ",
step1feedPrompt: "Выберите...",
step2: "Шаг 2: Загрузка файла",
step2Text: "Дождитесь окончания загрузки: %0",
step3: "Шаг 3: Выберите записи для импорта:",
step4: "%0 записей импортировано",
step5: "Готово!",
listViewTemplate: {
columns: [
{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
{name: 'Title', field: 'title', title: "Title", type: 'String'},
{name: 'Snippet', field: 'text', title: "Snippet", type: 'String'},
{name: 'Tags', field: 'tags', title: "Tags", type: 'Tags'}
],
rowClasses: [
],
actions: [
{caption: "Действия...", name: ''},
{caption: "Импортировать", name: 'import'}
]}
});
merge(config.commands.closeTiddler,{
text: "закрыть",
tooltip: "Закрыть запись"});
merge(config.commands.closeOthers,{
text: "закрыть остальные",
tooltip: "Закрыть все записи, кроме этой"});
merge(config.commands.editTiddler,{
text: "редактировать",
tooltip: "Редактировать запись",
readOnlyText: "исходный код",
readOnlyTooltip: "Просмотреть исходный код записи"});
merge(config.commands.saveTiddler,{
text: "готово",
tooltip: "Сохранить изменения"});
merge(config.commands.cancelTiddler,{
text: "отменить",
tooltip: "Отменить изменения",
warning: "Вы уверены, что не хотите сохранить запись '%0'?",
readOnlyText: "обычный вид",
readOnlyTooltip: "Вернуться к обычному просмотру"});
merge(config.commands.deleteTiddler,{
text: "удалить",
tooltip: "Удалить запись",
warning: "Вы действительно хотите удалить '%0'?"});
merge(config.commands.permalink,{
text: "ссылка",
tooltip: "Постоянная ссылка на эту запись"});
merge(config.commands.references,{
text: "ссылки сюда",
tooltip: "Показать записи, ссылающиеся на эту",
popupNone: "Ссылок нет"});
merge(config.commands.jump,{
text: "перейти...",
tooltip: "Перейти на другие открытые записи"});
merge(config.shadowTiddlers,{
DefaultTiddlers: "GettingStarted",
MainMenu: "GettingStarted",
SiteTitle: "~TiddlyWiki(ru)",
SiteSubtitle: "нелинейный гипертекстовый органайзер",
SiteUrl: "http://www.tiddlywiki.com/",
GettingStarted: "Для того, чтобы начать работать с TiddlyWiki, вы можете поменять следующие записи:\n* SiteTitle & SiteSubtitle: Заголовок и подзаголовок сайта (после сохранения вы увидите их в заголовке окна)\n* MainMenu: Меню (оно обычно слева)\n* DefaultTiddlers: Список записей, которые будут открыты при запуске wiki.\nИмя, которым будут подписаны ваши записи, можете ввести тут: <<option txtUserName>>",
SideBarOptions: "<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY г.'>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel 'установки »' 'Различные опции TidlyWiki'>>",
OptionsPanel: "Эти установки сохраняются в \;Вашем браузере\n\nВаше имя для подписывания заметок. Лучше, если вы напишете его WotTak\n\n<<option txtUserName>>\n<<option chkSaveBackups>> Сохранять резервные копии\n<<option chkAutoSave>> Автосохранение\n<<option chkRegExpSearch>> Поиск с \;регулярными выражениями\n<<option chkCaseSensitiveSearch>> Поиск чувствителен к \;регистру?\n<<option chkAnimate>> Анимация\n\n----\n[[Дополнительно|AdvancedOptions]]\n[[Плагины|PluginManager]]\n[[Импорт записей|ImportTiddlers]]",
AdvancedOptions: "<<option chkGenerateAnRssFeed>> Публиковать RSS\n<<option chkOpenInNewWindow>> Ссылки в новом окне\n<<option chkSaveEmptyTemplate>> Сохранять пустой шаблон\n<<option chkToggleLinks>> Щелчок по ссылке на открытую заметку закрывает ее\n^^(с Ctrl или другой функциональной клавишей не \;будет срабатывать)^^\n<<option chkHttpReadOnly>> Не показывать инструменты редактирования через HTTP\n<<option chkForceMinorUpdate>> Не менять дату заметки при редактировании\n^^(для изменеия - жмите Shift при сохранеии, либо сохраняйте, нажимая Ctrl-Shift-Enter^^\n<<option chkConfirmDelete>> Подтверждать удаление\nМаксимум строк в \;поле редактирования: <<option txtMaxEditRows>>\nСохранять бэкапы в \;папке: <<option txtBackupFolder>>\n<<option chkInsertTabs>> При нажатии Tab вводить знак табуляции, а \;не \;переходить к \;следующему элементу формы",
SideBarTabs: "<<tabs txtMainTab История История TabTimeline Все 'Все заметки' TabAll Метки 'Все метки' TabTags Ещё... 'Остальные списки' TabMore>>",
TabTimeline: "<<timeline>>",
TabAll: "<<list all>>",
TabTags: "<<allTags>>",
TabMore: "<<tabs txtMoreTab Нужные 'Ненаписанные заметки' TabMoreMissing Забытые 'Забытые заметки' TabMoreOrphans Системные 'Системные записи' TabMoreShadowed>>",
TabMoreMissing: "<<list missing>>",
TabMoreOrphans: "<<list orphans>>",
TabMoreShadowed: "<<list shadowed>>",
PluginManager: "<<plugins>>",
ImportTiddlers: "<<importTiddlers>>"});
//}}}
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY г.'>><<saveChanges>><<tiddler TspotSidebar>><<slider chkSliderOptionsPanel OptionsPanel 'установки »' 'Различные опции TidlyWiki'>>
<<miniBrowser noplayer http://www.simpletext.ws/documents/#new>>
моя маленькая записная книжка <<unsavedChanges command>>
Распределённая платформа для построения кластерных супер компьютеров. Поставляется в виде небольшого образа выполняющего абсолютно все необходимые роли в организации кластера.
[[StyleSheetSyntaxHighlighter]]
/***
StyleSheet for ~SyntaxHighlighter
***/
/*{{{*/
.dp-highlighter
{
font-family: "Consolas", "Courier New", Courier, mono, serif;
font-size: 12px;
background-color: #E7E5DC;
width: 99%;
overflow: auto;
margin: 18px 0 18px 0 !important;
padding-top: 1px; /* adds a little border on top when controls are hidden */
}
/* clear styles */
.dp-highlighter ol,
.dp-highlighter ol li,
.dp-highlighter ol li span
{
margin: 0;
padding: 0;
border: none;
}
.dp-highlighter a,
.dp-highlighter a:hover
{
background: none;
border: none;
padding: 0;
margin: 0;
}
.dp-highlighter .bar
{
padding-left: 45px;
}
.dp-highlighter.collapsed .bar,
.dp-highlighter.nogutter .bar
{
padding-left: 0px;
}
.dp-highlighter ol
{
list-style: decimal; /* for ie */
background-color: #fff;
margin: 0px 0px 1px 45px !important; /* 1px bottom margin seems to fix occasional Firefox scrolling */
padding: 0px;
color: #5C5C5C;
}
.dp-highlighter.nogutter ol,
.dp-highlighter.nogutter ol li
{
list-style: none !important;
margin-left: 0px !important;
}
.dp-highlighter ol li,
.dp-highlighter .columns div
{
list-style: decimal-leading-zero; /* better look for others, override cascade from OL */
list-style-position: outside !important;
border-left: 3px solid #6CE26C;
background-color: #F8F8F8;
color: #5C5C5C;
padding: 0 3px 0 10px !important;
margin: 0 !important;
line-height: 14px;
}
.dp-highlighter.nogutter ol li,
.dp-highlighter.nogutter .columns div
{
border: 0;
}
.dp-highlighter .columns
{
background-color: #F8F8F8;
color: gray;
overflow: hidden;
width: 100%;
}
.dp-highlighter .columns div
{
padding-bottom: 5px;
}
.dp-highlighter ol li.alt
{
background-color: #FFF;
color: inherit;
}
.dp-highlighter ol li span
{
color: black;
background-color: inherit;
}
/* Adjust some properties when collapsed */
.dp-highlighter.collapsed ol
{
margin: 0px;
}
.dp-highlighter.collapsed ol li
{
display: none;
}
/* Additional modifications when in print-view */
.dp-highlighter.printing
{
border: none;
}
.dp-highlighter.printing .tools
{
display: none !important;
}
.dp-highlighter.printing li
{
display: list-item !important;
}
/* Styles for the tools */
.dp-highlighter .tools
{
padding: 3px 8px 3px 10px;
font: 9px Verdana, Geneva, Arial, Helvetica, sans-serif;
color: silver;
background-color: #f8f8f8;
padding-bottom: 10px;
border-left: 3px solid #6CE26C;
}
.dp-highlighter.nogutter .tools
{
border-left: 0;
}
.dp-highlighter.collapsed .tools
{
border-bottom: 0;
}
.dp-highlighter .tools a
{
font-size: 9px;
color: #a0a0a0;
background-color: inherit;
text-decoration: none;
margin-right: 10px;
}
.dp-highlighter .tools a:hover
{
color: red;
background-color: inherit;
text-decoration: underline;
}
/* About dialog styles */
.dp-about { background-color: #fff; color: #333; margin: 0px; padding: 0px; }
.dp-about table { width: 100%; height: 100%; font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important; }
.dp-about td { padding: 10px; vertical-align: top; }
.dp-about .copy { border-bottom: 1px solid #ACA899; height: 95%; }
.dp-about .title { color: red; background-color: inherit; font-weight: bold; }
.dp-about .para { margin: 0 0 4px 0; }
.dp-about .footer { background-color: #ECEADB; color: #333; border-top: 1px solid #fff; text-align: right; }
.dp-about .close { font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important; background-color: #ECEADB; color: #333; width: 60px; height: 22px; }
/* Language specific styles */
.dp-highlighter .comment, .dp-highlighter .comments { color: #008200; background-color: inherit; }
.dp-highlighter .string { color: blue; background-color: inherit; }
.dp-highlighter .keyword { color: #069; font-weight: bold; background-color: inherit; }
.dp-highlighter .preprocessor { color: gray; background-color: inherit; }
/*}}}*/
<<miniBrowser noplayer http://sync.in/YxZSOZOtkA>>
/***
!Metadata:
|''Name:''|SyntaxHighlighterPlugin|
|''Description:''|Code Syntax Highlighter Plugin for TiddlyWiki.|
|''Version:''|1.1.3|
|''Date:''|Oct 24, 2008|
|''Source:''|http://www.coolcode.cn/show-310-1.html|
|''Author:''|Ma Bingyao (andot (at) ujn (dot) edu (dot) cn)|
|''License:''|[[GNU Lesser General Public License|http://www.gnu.org/licenses/lgpl.txt]]|
|''~CoreVersion:''|2.4.1|
|''Browser:''|Firefox 1.5+; InternetExplorer 6.0; Safari; Opera; Chrome; etc.|
!Syntax:
{{{
<code options>
codes
</code>
}}}
!Examples:
{{{
<code java>
public class HelloWorld {
public static void main(String args[]) {
System.out.println("HelloWorld!");
}
}
</code>
}}}
!Revision History:
|''Version''|''Date''|''Note''|
|1.1.2|Oct 15, 2008|Optimize Highlight|
|1.0.0|Oct 13, 2008|Initial release|
!Code section:
***/
//{{{
var dp={sh:{Toolbar:{},Utils:{},RegexLib:{},Brushes:{},Strings:{AboutDialog:"<html><head><title>About...</title></head><body class=\"dp-about\"><table cellspacing=\"0\"><tr><td class=\"copy\"><p class=\"title\">dp.SyntaxHighlighter</div><div class=\"para\">Version: {V}</p><p><a href=\"http://www.dreamprojections.com/syntaxhighlighter/?ref=about\" target=\"_blank\">http://www.dreamprojections.com/syntaxhighlighter</a></p>©2004-2007 Alex Gorbatchev.</td></tr><tr><td class=\"footer\"><input type=\"button\" class=\"close\" value=\"OK\" onClick=\"window.close()\"/></td></tr></table></body></html>"},ClipboardSwf:null,Version:"1.5.1"}};dp.SyntaxHighlighter=dp.sh;dp.sh.Toolbar.Commands={ExpandSource:{label:"+ expand source",check:function($){return $.collapse},func:function($,_){$.parentNode.removeChild($);_.div.className=_.div.className.replace("collapsed","")}},ViewSource:{label:"view plain",func:function($,_){var A=dp.sh.Utils.FixForBlogger(_.originalCode).replace(/</g,"<"),B=window.open("","_blank","width=750, height=400, location=0, resizable=1, menubar=0, scrollbars=0");B.document.write("<textarea style=\"width:99%;height:99%\">"+A+"</textarea>");B.document.close()}},CopyToClipboard:{label:"copy to clipboard",check:function(){return window.clipboardData!=null||dp.sh.ClipboardSwf!=null},func:function($,A){var B=dp.sh.Utils.FixForBlogger(A.originalCode).replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&");if(window.clipboardData)window.clipboardData.setData("text",B);else if(dp.sh.ClipboardSwf!=null){var _=A.flashCopier;if(_==null){_=document.createElement("div");A.flashCopier=_;A.div.appendChild(_)}_.innerHTML="<embed src=\""+dp.sh.ClipboardSwf+"\" FlashVars=\"clipboard="+encodeURIComponent(B)+"\" width=\"0\" height=\"0\" type=\"application/x-shockwave-flash\"></embed>"}alert("The code is in your clipboard now")}},PrintSource:{label:"print",func:function($,B){var _=document.createElement("IFRAME"),A=null;_.style.cssText="position:absolute;width:0px;height:0px;left:-500px;top:-500px;";document.body.appendChild(_);A=_.contentWindow.document;dp.sh.Utils.CopyStyles(A,window.document);A.write("<div class=\""+B.div.className.replace("collapsed","")+" printing\">"+B.div.innerHTML+"</div>");A.close();_.contentWindow.focus();_.contentWindow.print();alert("Printing...");document.body.removeChild(_)}},About:{label:"?",func:function(_){var A=window.open("","_blank","dialog,width=300,height=150,scrollbars=0"),$=A.document;dp.sh.Utils.CopyStyles($,window.document);$.write(dp.sh.Strings.AboutDialog.replace("{V}",dp.sh.Version));$.close();A.focus()}}};dp.sh.Toolbar.Create=function(B){var A=document.createElement("DIV");A.className="tools";for(var _ in dp.sh.Toolbar.Commands){var $=dp.sh.Toolbar.Commands[_];if($.check!=null&&!$.check(B))continue;A.innerHTML+="<a href=\"#\" onclick=\"dp.sh.Toolbar.Command('"+_+"',this);return false;\">"+$.label+"</a>"}return A};dp.sh.Toolbar.Command=function(_,$){var A=$;while(A!=null&&A.className.indexOf("dp-highlighter")==-1)A=A.parentNode;if(A!=null)dp.sh.Toolbar.Commands[_].func($,A.highlighter)};dp.sh.Utils.CopyStyles=function(A,_){var $=_.getElementsByTagName("link");for(var B=0;B<$.length;B++)if($[B].rel.toLowerCase()=="stylesheet")A.write("<link type=\"text/css\" rel=\"stylesheet\" href=\""+$[B].href+"\"></link>")};dp.sh.Utils.FixForBlogger=function($){return(dp.sh.isBloggerMode==true)?$.replace(/<br\s*\/?>|<br\s*\/?>/gi,"\n"):$};dp.sh.RegexLib={MultiLineCComments:new RegExp("/\\*[\\s\\S]*?\\*/","gm"),SingleLineCComments:new RegExp("//.*$","gm"),SingleLinePerlComments:new RegExp("#.*$","gm"),DoubleQuotedString:new RegExp("\"(?:\\.|(\\\\\\\")|[^\\\"\"\\n])*\"","g"),SingleQuotedString:new RegExp("'(?:\\.|(\\\\\\')|[^\\''\\n])*'","g")};dp.sh.Match=function(_,$,A){this.value=_;this.index=$;this.length=_.length;this.css=A};dp.sh.Highlighter=function(){this.noGutter=false;this.addControls=true;this.collapse=false;this.tabsToSpaces=true;this.wrapColumn=80;this.showColumns=true};dp.sh.Highlighter.SortCallback=function($,_){if($.index<_.index)return-1;else if($.index>_.index)return 1;else if($.length<_.length)return-1;else if($.length>_.length)return 1;return 0};dp.sh.Highlighter.prototype.CreateElement=function(_){var $=document.createElement(_);$.highlighter=this;return $};dp.sh.Highlighter.prototype.GetMatches=function(_,B){var $=0,A=null;while((A=_.exec(this.code))!=null)this.matches[this.matches.length]=new dp.sh.Match(A[0],A.index,B)};dp.sh.Highlighter.prototype.AddBit=function($,A){if($==null||$.length==0)return;var C=this.CreateElement("SPAN");$=$.replace(/ /g," ");$=$.replace(/</g,"<");$=$.replace(/\n/gm," <br>");if(A!=null){if((/br/gi).test($)){var _=$.split(" <br>");for(var B=0;B<_.length;B++){C=this.CreateElement("SPAN");C.className=A;C.innerHTML=_[B];this.div.appendChild(C);if(B+1<_.length)this.div.appendChild(this.CreateElement("BR"))}}else{C.className=A;C.innerHTML=$;this.div.appendChild(C)}}else{C.innerHTML=$;this.div.appendChild(C)}};dp.sh.Highlighter.prototype.IsInside=function(_){if(_==null||_.length==0)return false;for(var A=0;A<this.matches.length;A++){var $=this.matches[A];if($==null)continue;if((_.index>$.index)&&(_.index<$.index+$.length))return true}return false};dp.sh.Highlighter.prototype.ProcessRegexList=function(){for(var $=0;$<this.regexList.length;$++)this.GetMatches(this.regexList[$].regex,this.regexList[$].css)};dp.sh.Highlighter.prototype.ProcessSmartTabs=function(E){var B=E.split("\n"),$="",D=4,A="\t";function _(A,E,_){var B=A.substr(0,E),C=A.substr(E+1,A.length),$="";for(var D=0;D<_;D++)$+=" ";return B+$+C}function C(B,C){if(B.indexOf(A)==-1)return B;var D=0;while((D=B.indexOf(A))!=-1){var $=C-D%C;B=_(B,D,$)}return B}for(var F=0;F<B.length;F++)$+=C(B[F],D)+"\n";return $};dp.sh.Highlighter.prototype.SwitchToList=function(){var C=this.div.innerHTML.replace(/<(br)\/?>/gi,"\n"),B=C.split("\n");if(this.addControls==true)this.bar.appendChild(dp.sh.Toolbar.Create(this));if(this.showColumns){var A=this.CreateElement("div"),_=this.CreateElement("div"),E=10,G=1;while(G<=150)if(G%E==0){A.innerHTML+=G;G+=(G+"").length}else{A.innerHTML+="·";G++}_.className="columns";_.appendChild(A);this.bar.appendChild(_)}for(var G=0,D=this.firstLine;G<B.length-1;G++,D++){var $=this.CreateElement("LI"),F=this.CreateElement("SPAN");$.className=(G%2==0)?"alt":"";F.innerHTML=B[G]+" ";$.appendChild(F);this.ol.appendChild($)}this.div.innerHTML=""};dp.sh.Highlighter.prototype.Highlight=function(C){function A($){return $.replace(/^\s*(.*?)[\s\n]*$/g,"$1")}function $($){return $.replace(/\n*$/,"").replace(/^\n*/,"")}function _(B){var E=dp.sh.Utils.FixForBlogger(B).split("\n"),C=new Array(),D=new RegExp("^\\s*","g"),$=1000;for(var F=0;F<E.length&&$>0;F++){if(A(E[F]).length==0)continue;var _=D.exec(E[F]);if(_!=null&&_.length>0)$=Math.min(_[0].length,$)}if($>0)for(F=0;F<E.length;F++)E[F]=E[F].substr($);return E.join("\n")}function D(A,$,_){return A.substr($,_-$)}var F=0;if(C==null)C="";this.originalCode=C;this.code=$(_(C));this.div=this.CreateElement("DIV");this.bar=this.CreateElement("DIV");this.ol=this.CreateElement("OL");this.matches=new Array();this.div.className="dp-highlighter";this.div.highlighter=this;this.bar.className="bar";this.ol.start=this.firstLine;if(this.CssClass!=null)this.ol.className=this.CssClass;if(this.collapse)this.div.className+=" collapsed";if(this.noGutter)this.div.className+=" nogutter";if(this.tabsToSpaces==true)this.code=this.ProcessSmartTabs(this.code);this.ProcessRegexList();if(this.matches.length==0){this.AddBit(this.code,null);this.SwitchToList();this.div.appendChild(this.bar);this.div.appendChild(this.ol);return}this.matches=this.matches.sort(dp.sh.Highlighter.SortCallback);for(var E=0;E<this.matches.length;E++)if(this.IsInside(this.matches[E]))this.matches[E]=null;for(E=0;E<this.matches.length;E++){var B=this.matches[E];if(B==null||B.length==0)continue;this.AddBit(D(this.code,F,B.index),null);this.AddBit(B.value,B.css);F=B.index+B.length}this.AddBit(this.code.substr(F),null);this.SwitchToList();this.div.appendChild(this.bar);this.div.appendChild(this.ol)};dp.sh.Highlighter.prototype.GetKeywords=function($){return"\\b"+$.replace(/ /g,"\\b|\\b")+"\\b"};dp.sh.BloggerMode=function(){dp.sh.isBloggerMode=true};dp.sh.HighlightAll=function(N,B,K,I,O,E){function A(){var $=arguments;for(var _=0;_<$.length;_++){if($[_]==null)continue;if(typeof($[_])=="string"&&$[_]!="")return $[_]+"";if(typeof($[_])=="object"&&$[_].value!="")return $[_].value+""}return null}function J($,_){for(var A=0;A<_.length;A++)if(_[A]==$)return true;return false}function L(A,B,C){var _=new RegExp("^"+A+"\\[(\\w+)\\]$","gi"),$=null;for(var D=0;D<B.length;D++)if(($=_.exec(B[D]))!=null)return $[1];return C}function C(B,A,_){var $=document.getElementsByTagName(_);for(var C=0;C<$.length;C++)if($[C].getAttribute("name")==A)B.push($[C])}var T=[],P=null,M={},$="innerHTML";C(T,N,"pre");C(T,N,"textarea");if(T.length==0)return;for(var R in dp.sh.Brushes){var F=dp.sh.Brushes[R].Aliases;if(F==null)continue;for(var G=0;G<F.length;G++)M[F[G]]=R}for(G=0;G<T.length;G++){var _=T[G],U=A(_.attributes["class"],_.className,_.attributes["language"],_.language),Q="";if(U==null)continue;U=U.split(":");Q=U[0].toLowerCase();if(M[Q]==null)continue;P=new dp.sh.Brushes[M[Q]]();_.style.display="none";P.noGutter=(B==null)?J("nogutter",U):!B;P.addControls=(K==null)?!J("nocontrols",U):K;P.collapse=(I==null)?J("collapse",U):I;P.showColumns=(E==null)?J("showcolumns",U):E;var D=document.getElementsByTagName("head")[0];if(P.Style&&D){var S=document.createElement("style");S.setAttribute("type","text/css");if(S.styleSheet)S.styleSheet.cssText=P.Style;else{var H=document.createTextNode(P.Style);S.appendChild(H)}D.appendChild(S)}P.firstLine=(O==null)?parseInt(L("firstline",U,1)):O;P.Highlight(_[$]);P.source=_;_.parentNode.insertBefore(P.div,_)}};version.extensions.SyntaxHighLighterPlugin={major:1,minor:1,revision:3,date:new Date(2008,10,24)};dp.sh.ClipboardSwf="clipboard.swf";dp.sh.Highlight=function(_,Q,B,J,H,M,D){function A(){var $=arguments;for(var _=0;_<$.length;_++){if($[_]==null)continue;if(typeof($[_])=="string"&&$[_]!="")return $[_]+"";if(typeof($[_])=="object"&&$[_].value!="")return $[_].value+""}return null}function I($,_){for(var A=0;A<_.length;A++)if(_[A]==$)return true;return false}function K(A,B,C){var _=new RegExp("^"+A+"\\[(\\w+)\\]$","gi"),$=null;for(var D=0;D<B.length;D++)if(($=_.exec(B[D]))!=null)return $[1];return C}var N=null,$="innerHTML";if(this.registered==undefined){var L={};for(var O in dp.sh.Brushes){var E=dp.sh.Brushes[O].Aliases;if(E==null)continue;for(var F=0;F<E.length;F++)L[E[F]]=O}this.registered=L}Q=Q.split(":");language=Q[0].toLowerCase();if(this.registered[language]==null)return;N=new dp.sh.Brushes[this.registered[language]]();_.style.display="none";N.noGutter=(B==null)?I("nogutter",Q):!B;N.addControls=(J==null)?!I("nocontrols",Q):J;N.collapse=(H==null)?I("collapse",Q):H;N.showColumns=(D==null)?I("showcolumns",Q):D;var C=document.getElementsByTagName("head")[0],P=document.getElementById(N.CssClass);if(N.Style&&C&&!P){P=document.createElement("style");P.setAttribute("id",N.CssClass);P.setAttribute("type","text/css");if(P.styleSheet)P.styleSheet.cssText=N.Style;else{var G=document.createTextNode(N.Style);P.appendChild(G)}C.appendChild(P)}N.firstLine=(M==null)?parseInt(K("firstline",Q,1)):M;N.Highlight(_[$]);N.source=_;_.parentNode.insertBefore(N.div,_)};config.formatters.push({name:"SyntaxHighlighter",match:"^<code[\\s]+[^>]+>\\n",element:"pre",handler:function(_){this.lookaheadRegExp=/<code[\s]+([^>]+)>\n((?:^[^\n]*\n)+?)(^<\/code>$\n?)/mg;this.lookaheadRegExp.lastIndex=_.matchStart;var $=this.lookaheadRegExp.exec(_.source);if($&&$.index==_.matchStart){var C=$[1],B=$[2];if(config.browser.isIE)B=B.replace(/\n/g,"\r");var A=createTiddlyElement(_.output,this.element,null,null,B);dp.sh.Highlight(A,C);_.nextMatch=$.index+$[0].length}}});config.formatterHelpers.enclosedTextHelper=function(_){this.lookaheadRegExp.lastIndex=_.matchStart;var $=this.lookaheadRegExp.exec(_.source);if($&&$.index==_.matchStart){var B=$[1];if(config.browser.isIE)B=B.replace(/\n/g,"\r");var A=createTiddlyElement(_.output,this.element,null,null,B);switch(_.matchText){case"/*{{{*/\n":dp.sh.Highlight(A,"css");break;case"//{{{\n":dp.sh.Highlight(A,"js");break;case"<!--{{{-->\n":dp.sh.Highlight(A,"xml");break}_.nextMatch=$.index+$[0].length}};dp.sh.Brushes.AS3=function(){var _="class interface package",$="Array Boolean Date decodeURI decodeURIComponent encodeURI encodeURIComponent escape "+"int isFinite isNaN isXMLName Number Object parseFloat parseInt "+"String trace uint unescape XML XMLList "+"Infinity -Infinity NaN undefined "+"as delete instanceof is new typeof "+"break case catch continue default do each else finally for if in "+"label return super switch throw try while with "+"dynamic final internal native override private protected public static "+"...rest const extends function get implements namespace set "+"import include use "+"AS3 flash_proxy object_proxy "+"false null this true "+"void Null";this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:"comment"},{regex:dp.sh.RegexLib.MultiLineCComments,css:"blockcomment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("^\\s*#.*","gm"),css:"preprocessor"},{regex:new RegExp(this.GetKeywords(_),"gm"),css:"definition"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"},{regex:new RegExp("var","gm"),css:"variable"}];this.CssClass="dp-as";this.Style=".dp-as .comment { color: #009900; font-style: italic; }"+".dp-as .blockcomment { color: #3f5fbf; }"+".dp-as .string { color: #990000; }"+".dp-as .preprocessor { color: #0033ff; }"+".dp-as .definition { color: #9900cc; font-weight: bold; }"+".dp-as .keyword { color: #0033ff; }"+".dp-as .variable { color: #6699cc; font-weight: bold; }"};dp.sh.Brushes.AS3.prototype=new dp.sh.Highlighter();dp.sh.Brushes.AS3.Aliases=["as","actionscript","ActionScript","as3","AS3"];dp.sh.Brushes.Bash=function(){var _="alias bg bind break builtin cd command compgen complete continue "+"declare dirs disown echo enable eval exec exit export fc fg "+"getopts hash help history jobs kill let local logout popd printf "+"pushd pwd read readonly return set shift shopt source "+"suspend test times trap type typeset ulimit umask unalias unset wait",$="case do done elif else esac fi for function if in select then "+"time until while";this.regexList=[{regex:dp.sh.RegexLib.SingleLinePerlComments,css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("[()[\\]{}]","g"),css:"delim"},{regex:new RegExp("\\$\\w+","g"),css:"vars"},{regex:new RegExp("\\w+=","g"),css:"vars"},{regex:new RegExp("\\s-\\w+","g"),css:"flag"},{regex:new RegExp(this.GetKeywords(_),"gm"),css:"builtin"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"}];this.CssClass="dp-bash";this.Style=".dp-bash .builtin {color: maroon; font-weight: bold;}"+".dp-bash .comment {color: gray;}"+".dp-bash .delim {font-weight: bold;}"+".dp-bash .flag {color: green;}"+".dp-bash .string {color: red;}"+".dp-bash .vars {color: blue;}"};dp.sh.Brushes.Bash.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Bash.Aliases=["bash","sh"];dp.sh.Brushes.Batch=function(){var _="APPEND ATTRIB CD CHDIR CHKDSK CHOICE CLS COPY DEL ERASE DELTREE "+"DIR EXIT FC COMP FDISK FIND FORMAT FSUTIL HELP JOIN "+"LABEL LOADFIX MK MKDIR MEM MEMMAKER MORE MOVE MSD PCPARK "+"PRINT RD RMDIR REN SCANDISK SHARE SORT SUBST SYS "+"TIME DATE TREE TRUENAME TYPE UNDELETE VER XCOPY",$="DO ELSE FOR IN CALL CHOICE GOTO SHIFT PAUSE ERRORLEVEL "+"IF NOT EXIST LFNFOR START SETLOCAL ENDLOCAL ECHO SET";this.regexList=[{regex:new RegExp("REM.*$","gm"),css:"comment"},{regex:new RegExp("::.*$","gm"),css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("[()[\\]{}]","g"),css:"delim"},{regex:new RegExp("%\\w+%","g"),css:"vars"},{regex:new RegExp("%%\\w+","g"),css:"vars"},{regex:new RegExp("\\w+=","g"),css:"vars"},{regex:new RegExp("@\\w+","g"),css:"keyword"},{regex:new RegExp(":\\w+","g"),css:"keyword"},{regex:new RegExp("\\s/\\w+","g"),css:"flag"},{regex:new RegExp(this.GetKeywords(_),"gm"),css:"builtin"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"}];this.CssClass="dp-batch";this.Style=".dp-batch .builtin {color: maroon; font-weight: bold;}"+".dp-batch .comment {color: gray;}"+".dp-batch .delim {font-weight: bold;}"+".dp-batch .flag {color: green;}"+".dp-batch .string {color: red;}"+".dp-batch .vars {color: blue;font-weight: bold;}"};dp.sh.Brushes.Batch.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Batch.Aliases=["batch","dos"];dp.sh.Brushes.ColdFusion=function(){this.CssClass="dp-coldfusion";this.Style=".dp-coldfusion { font: 13px \"Courier New\", Courier, monospace; }"+".dp-coldfusion .tag, .dp-coldfusion .tag-name { color: #990033; }"+".dp-coldfusion .attribute { color: #990033; }"+".dp-coldfusion .attribute-value { color: #0000FF; }"+".dp-coldfusion .cfcomments { background-color: #FFFF99; color: #000000; }"+".dp-coldfusion .cfscriptcomments { color: #999999; }"+".dp-coldfusion .keywords { color: #0000FF; }"+".dp-coldfusion .mgkeywords { color: #CC9900; }"+".dp-coldfusion .numbers { color: #ff0000; }"+".dp-coldfusion .strings { color: green; }";this.mgKeywords="setvalue getvalue addresult viewcollection viewstate";this.keywords="var eq neq gt gte lt lte not and or true false "+"abs acos addsoaprequestheader addsoapresponseheader "+"arrayappend arrayavg arrayclear arraydeleteat arrayinsertat "+"arrayisempty arraylen arraymax arraymin arraynew "+"arrayprepend arrayresize arrayset arraysort arraysum "+"arrayswap arraytolist asc asin atn binarydecode binaryencode "+"bitand bitmaskclear bitmaskread bitmaskset bitnot bitor bitshln "+"bitshrn bitxor ceiling charsetdecode charsetencode chr cjustify "+"compare comparenocase cos createdate createdatetime createobject "+"createobject createobject createobject createobject createodbcdate "+"createodbcdatetime createodbctime createtime createtimespan "+"createuuid dateadd datecompare dateconvert datediff dateformat "+"datepart day dayofweek dayofweekasstring dayofyear daysinmonth "+"daysinyear de decimalformat decrementvalue decrypt decryptbinary "+"deleteclientvariable directoryexists dollarformat duplicate encrypt "+"encryptbinary evaluate exp expandpath fileexists find findnocase "+"findoneof firstdayofmonth fix formatbasen generatesecretkey "+"getauthuser getbasetagdata getbasetaglist getbasetemplatepath "+"getclientvariableslist getcontextroot getcurrenttemplatepath "+"getdirectoryfrompath getencoding getexception getfilefrompath "+"getfunctionlist getgatewayhelper gethttprequestdata gethttptimestring "+"getk2serverdoccount getk2serverdoccountlimit getlocale "+"getlocaledisplayname getlocalhostip getmetadata getmetricdata "+"getpagecontext getprofilesections getprofilestring getsoaprequest "+"getsoaprequestheader getsoapresponse getsoapresponseheader "+"gettempdirectory gettempfile gettemplatepath gettickcount "+"gettimezoneinfo gettoken hash hour htmlcodeformat htmleditformat "+"iif incrementvalue inputbasen insert int isarray isbinary isboolean "+"iscustomfunction isdate isdebugmode isdefined isk2serverabroker "+"isk2serverdoccountexceeded isk2serveronline isleapyear islocalhost "+"isnumeric isnumericdate isobject isquery issimplevalue issoaprequest "+"isstruct isuserinrole isvalid isvalid isvalid iswddx isxml "+"isxmlattribute isxmldoc isxmlelem isxmlnode isxmlroot javacast "+"jsstringformat lcase left len listappend listchangedelims listcontains "+"listcontainsnocase listdeleteat listfind listfindnocase listfirst "+"listgetat listinsertat listlast listlen listprepend listqualify "+"listrest listsetat listsort listtoarray listvaluecount "+"listvaluecountnocase ljustify log log10 lscurrencyformat lsdateformat "+"lseurocurrencyformat lsiscurrency lsisdate lsisnumeric lsnumberformat "+"lsparsecurrency lsparsedatetime lsparseeurocurrency lsparsenumber "+"lstimeformat ltrim max mid min minute month monthasstring now "+"numberformat paragraphformat parameterexists parsedatetime pi "+"preservesinglequotes quarter queryaddcolumn queryaddrow querynew "+"querysetcell quotedvaluelist rand randomize randrange refind "+"refindnocase releasecomobject removechars repeatstring replace "+"replacelist replacenocase rereplace rereplacenocase reverse right "+"rjustify round rtrim second sendgatewaymessage setencoding "+"setlocale setprofilestring setvariable sgn sin spanexcluding "+"spanincluding sqr stripcr structappend structclear structcopy "+"structcount structdelete structfind structfindkey structfindvalue "+"structget structinsert structisempty structkeyarray structkeyexists "+"structkeylist structnew structsort structupdate tan timeformat "+"tobase64 tobinary toscript tostring trim ucase urldecode urlencodedformat "+"urlsessionformat val valuelist week wrap writeoutput xmlchildpos "+"xmlelemnew xmlformat xmlgetnodetype xmlnew xmlparse xmlsearch xmltransform "+"xmlvalidate year yesnoformat";this.stringMatches=new Array();this.attributeMatches=new Array()};dp.sh.Brushes.ColdFusion.prototype=new dp.sh.Highlighter();dp.sh.Brushes.ColdFusion.Aliases=["coldfusion","cf"];dp.sh.Brushes.ColdFusion.prototype.ProcessRegexList=function(){function B(_,$){_[_.length]=$}function A(A,$){for(var _=0;_<A.length;_++)if(A[_]==$)return _;return-1}var _=null,$=null;this.GetMatches(new RegExp("\\b(\\d+)","gm"),"numbers");this.GetMatches(new RegExp(this.GetKeywords(this.mgKeywords),"igm"),"mgkeywords");this.GetMatches(dp.sh.RegexLib.SingleLineCComments,"cfscriptcomments");this.GetMatches(dp.sh.RegexLib.MultiLineCComments,"cfscriptcomments");this.GetMatches(new RegExp("(<|<)!---[\\s\\S]*?---(>|>)","gm"),"cfcomments");$=new RegExp("(cfset\\s*)?([:\\w-.]+)\\s*=\\s*(\".*?\"|'.*?')*","gm");while((_=$.exec(this.code))!=null){if(_[1]!=undefined&&_[1]!="")continue;if(_[3]!=undefined&&_[3]!=""&&_[3]!="\"\""&&_[3]!="''"){B(this.matches,new dp.sh.Match(_[2],_.index,"attribute"));B(this.matches,new dp.sh.Match(_[3],_.index+_[0].indexOf(_[3]),"attribute-value"));B(this.stringMatches,_[3]);B(this.attributeMatches,_[2])}}this.GetMatches(new RegExp("(<|<)/*\\?*(?!\\!)|/*\\?*(>|>)","gm"),"tag");$=new RegExp("(?:<|<)/*\\?*\\s*([:\\w-.]+)","gm");while((_=$.exec(this.code))!=null)B(this.matches,new dp.sh.Match(_[1],_.index+_[0].indexOf(_[1]),"tag-name"));$=new RegExp(this.GetKeywords(this.keywords),"igm");while((_=$.exec(this.code))!=null)if(A(this.attributeMatches,_[0])==-1)B(this.matches,new dp.sh.Match(_[0],_.index,"keywords"));$=new RegExp("cfset\\s*.*(\".*?\"|'.*?')","gm");while((_=$.exec(this.code))!=null)if(_[1]!=undefined&&_[1]!=""){B(this.matches,new dp.sh.Match(_[1],_.index+_[0].indexOf(_[1]),"strings"));B(this.stringMatches,_[1])}while((_=dp.sh.RegexLib.DoubleQuotedString.exec(this.code))!=null)if(A(this.stringMatches,_[0])==-1)B(this.matches,new dp.sh.Match(_[0],_.index,"strings"));while((_=dp.sh.RegexLib.SingleQuotedString.exec(this.code))!=null)if(A(this.stringMatches,_[0])==-1)B(this.matches,new dp.sh.Match(_[0],_.index,"strings"))};dp.sh.Brushes.Cpp=function(){var _="ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR "+"DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH "+"HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP "+"HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY "+"HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT "+"HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE "+"LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF "+"LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR "+"LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR "+"PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT "+"PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 "+"POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR "+"PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 "+"PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT "+"SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG "+"ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM "+"char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t "+"clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS "+"FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t "+"__wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t "+"jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler "+"sig_atomic_t size_t _stat __stat64 _stati64 terminate_function "+"time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf "+"va_list wchar_t wctrans_t wctype_t wint_t signed",$="break case catch class const __finally __exception __try "+"const_cast continue private public protected __declspec "+"default delete deprecated dllexport dllimport do dynamic_cast "+"else enum explicit extern if for friend goto inline "+"mutable naked namespace new noinline noreturn nothrow "+"register reinterpret_cast return selectany "+"sizeof static static_cast struct switch template this "+"thread throw true false try typedef typeid typename union "+"using uuid virtual void volatile whcar_t while";this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:"comment"},{regex:dp.sh.RegexLib.MultiLineCComments,css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("^ *#.*","gm"),css:"preprocessor"},{regex:new RegExp(this.GetKeywords(_),"gm"),css:"datatypes"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"}];this.CssClass="dp-cpp";this.Style=".dp-cpp .datatypes { color: #2E8B57; font-weight: bold; }"};dp.sh.Brushes.Cpp.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Cpp.Aliases=["cpp","c","c++"];dp.sh.Brushes.CSharp=function(){var $="abstract as base bool break byte case catch char checked class const "+"continue decimal default delegate do double else enum event explicit "+"extern false finally fixed float for foreach get goto if implicit in int "+"interface internal is lock long namespace new null object operator out "+"override params private protected public readonly ref return sbyte sealed set "+"short sizeof stackalloc static string struct switch this throw true try "+"typeof uint ulong unchecked unsafe ushort using virtual void while";this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:"comment"},{regex:dp.sh.RegexLib.MultiLineCComments,css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("^\\s*#.*","gm"),css:"preprocessor"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"}];this.CssClass="dp-c";this.Style=".dp-c .vars { color: #d00; }"};dp.sh.Brushes.CSharp.prototype=new dp.sh.Highlighter();dp.sh.Brushes.CSharp.Aliases=["c#","c-sharp","csharp"];dp.sh.Brushes.CSS=function(){var _="ascent azimuth background-attachment background-color background-image background-position "+"background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top "+"border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color "+"border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width "+"border-bottom-width border-left-width border-width border cap-height caption-side centerline clear clip color "+"content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display "+"elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font "+"height letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top "+"margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans "+"outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page "+"page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position "+"quotes richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress "+"table-layout text-align text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em "+"vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index",$="above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder "+"both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed "+"continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double "+"embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia "+"gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic "+"justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha "+"lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower "+"navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset "+"outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side "+"rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow "+"small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize "+"table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal "+"text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin "+"upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow",A="[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif";this.regexList=[{regex:dp.sh.RegexLib.MultiLineCComments,css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("\\#[a-zA-Z0-9]{3,6}","g"),css:"value"},{regex:new RegExp("(-?\\d+)(.\\d+)?(px|em|pt|:|%|)","g"),css:"value"},{regex:new RegExp("!important","g"),css:"important"},{regex:new RegExp(this.GetKeywordsCSS(_),"gm"),css:"keyword"},{regex:new RegExp(this.GetValuesCSS($),"g"),css:"value"},{regex:new RegExp(this.GetValuesCSS(A),"g"),css:"value"}];this.CssClass="dp-css";this.Style=".dp-css .value { color: black; }"+".dp-css .important { color: red; }"};dp.sh.Highlighter.prototype.GetKeywordsCSS=function($){return"\\b([a-z_]|)"+$.replace(/ /g,"(?=:)\\b|\\b([a-z_\\*]|\\*|)")+"(?=:)\\b"};dp.sh.Highlighter.prototype.GetValuesCSS=function($){return"\\b"+$.replace(/ /g,"(?!-)(?!:)\\b|\\b()")+":\\b"};dp.sh.Brushes.CSS.prototype=new dp.sh.Highlighter();dp.sh.Brushes.CSS.Aliases=["css"];dp.sh.Brushes.Delphi=function(){var $="abs addr and ansichar ansistring array as asm begin boolean byte cardinal "+"case char class comp const constructor currency destructor div do double "+"downto else end except exports extended false file finalization finally "+"for function goto if implementation in inherited int64 initialization "+"integer interface is label library longint longword mod nil not object "+"of on or packed pansichar pansistring pchar pcurrency pdatetime pextended "+"pint64 pointer private procedure program property pshortstring pstring "+"pvariant pwidechar pwidestring protected public published raise real real48 "+"record repeat set shl shortint shortstring shr single smallint string then "+"threadvar to true try type unit until uses val var varirnt while widechar "+"widestring with word write writeln xor";this.regexList=[{regex:new RegExp("\\(\\*[\\s\\S]*?\\*\\)","gm"),css:"comment"},{regex:new RegExp("{(?!\\$)[\\s\\S]*?}","gm"),css:"comment"},{regex:dp.sh.RegexLib.SingleLineCComments,css:"comment"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("\\{\\$[a-zA-Z]+ .+\\}","g"),css:"directive"},{regex:new RegExp("\\b[\\d\\.]+\\b","g"),css:"number"},{regex:new RegExp("\\$[a-zA-Z0-9]+\\b","g"),css:"number"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"}];this.CssClass="dp-delphi";this.Style=".dp-delphi .number { color: blue; }"+".dp-delphi .directive { color: #008284; }"+".dp-delphi .vars { color: #000; }"};dp.sh.Brushes.Delphi.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Delphi.Aliases=["delphi","pascal"];dp.sh.Brushes.Java=function(){var $="abstract assert boolean break byte case catch char class const "+"continue default do double else enum extends "+"false final finally float for goto if implements import "+"instanceof int interface long native new null "+"package private protected public return "+"short static strictfp super switch synchronized this throw throws true "+"transient try void volatile while";this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:"comment"},{regex:dp.sh.RegexLib.MultiLineCComments,css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b","gi"),css:"number"},{regex:new RegExp("(?!\\@interface\\b)\\@[\\$\\w]+\\b","g"),css:"annotation"},{regex:new RegExp("\\@interface\\b","g"),css:"keyword"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"}];this.CssClass="dp-j";this.Style=".dp-j .annotation { color: #646464; }"+".dp-j .number { color: #C00000; }"};dp.sh.Brushes.Java.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Java.Aliases=["java"];dp.sh.Brushes.JScript=function(){var $="abstract boolean break byte case catch char class const continue debugger "+"default delete do double else enum export extends false final finally float "+"for function goto if implements import in instanceof int interface long native "+"new null package private protected public return short static super switch "+"synchronized this throw throws transient true try typeof var void volatile while with";this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:"comment"},{regex:dp.sh.RegexLib.MultiLineCComments,css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("^\\s*#.*","gm"),css:"preprocessor"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"}];this.CssClass="dp-c"};dp.sh.Brushes.JScript.prototype=new dp.sh.Highlighter();dp.sh.Brushes.JScript.Aliases=["js","jscript","javascript"];dp.sh.Brushes.Lua=function(){var $="break do end else elseif function if local nil not or repeat return and then until while this",_="math\\.\\w+ string\\.\\w+ os\\.\\w+ debug\\.\\w+ io\\.\\w+ error fopen dofile coroutine\\.\\w+ arg getmetatable ipairs loadfile loadlib loadstring longjmp print rawget rawset seek setmetatable assert tonumber tostring";this.regexList=[{regex:new RegExp("--\\[\\[[\\s\\S]*\\]\\]--","gm"),css:"comment"},{regex:new RegExp("--[^\\[]{2}.*$","gm"),css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"},{regex:new RegExp(this.GetKeywords(_),"gm"),css:"func"},];this.CssClass="dp-lua"};dp.sh.Brushes.Lua.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Lua.Aliases=["lua"];dp.sh.Brushes.Mxml=function(){this.CssClass="dp-mxml";this.Style=".dp-mxml .cdata { color: #000000; }"+".dp-mxml .tag { color : #0000ff; }"+".dp-mxml .tag-name { color: #0000ff; }"+".dp-mxml .script { color: green; }"+".dp-mxml .metadata { color: green; }"+".dp-mxml .attribute { color: #000000; }"+".dp-mxml .attribute-value { color: #990000; }"+".dp-mxml .trace { color: #cc6666; }"+".dp-mxml .var { color: #6699cc; }"+".dp-mxml .comment { color: #009900; }"+".dp-mxml .string { color: #990000; }"+".dp-mxml .keyword { color: blue; }"};dp.sh.Brushes.Mxml.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Mxml.Aliases=["mxml"];dp.sh.Brushes.Mxml.prototype.ProcessRegexList=function(){function H(_,$){_[_.length]=$}function B(B,_){var A=0,$=false;for(A=0;A<B.length;A++)if(_.index>B[A].firstIndex&&_.index<B[A].lastIndex)$=true;return $}var $=0,F=null,D=null,A=null,C="",E=new Array(),_="abstract boolean break byte case catch char class const continue debugger "+"default delete do double else enum export extends false final finally float "+"for function goto if implements import in instanceof int interface long native "+"new null package private protected public return short static super switch "+"synchronized this throw throws transient true try typeof var void volatile while with",G=[{regex:dp.sh.RegexLib.SingleLineCComments,css:"comment"},{regex:dp.sh.RegexLib.MultiLineCComments,css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("^\\s*#.*","gm"),css:"preprocessor"},{regex:new RegExp(this.GetKeywords("trace"),"gm"),css:"trace"},{regex:new RegExp(this.GetKeywords(_),"gm"),css:"keyword"}];A=new RegExp("<\\!\\[CDATA\\[(.|\\s)*?\\]\\]>","gm");while((F=A.exec(this.code))!=null){C=F[0].substr(0,12);H(this.matches,new dp.sh.Match(C,F.index,"cdata"));C=F[0].substr(12,F[0].length-12-6);for(var I=0;I<G.length;I++)while((D=G[I].regex.exec(C))!=null)H(this.matches,new dp.sh.Match(D[0],F.index+12+D.index,G[I].css));C=F[0].substr(F[0].length-6,6);H(this.matches,new dp.sh.Match(C,F.index+F[0].length-6,"cdata"));E.push({firstIndex:F.index,lastIndex:F.index+F[0].length-1})}this.GetMatches(new RegExp("(<|<)!--\\s*.*?\\s*--(>|>)","gm"),"comments");A=new RegExp("([:\\w-.]+)\\s*=\\s*(\".*?\"|'.*?'|\\w+)*|(\\w+)","gm");while((F=A.exec(this.code))!=null){if(F[1]==null)continue;if(B(E,F))continue;H(this.matches,new dp.sh.Match(F[1],F.index,"attribute"));if(F[2]!=undefined)H(this.matches,new dp.sh.Match(F[2],F.index+F[0].indexOf(F[2]),"attribute-value"))}A=new RegExp("(?:<|<)/*\\?*\\s*([:\\w-.]+)","gm");while((F=A.exec(this.code))!=null){if(B(E,F))continue;C=F[0].substr(4,F[0].length-4);switch(C){case"mx:Script":case"/mx:Script":H(this.matches,new dp.sh.Match(F[0]+">",F.index,"script"));break;case"mx:Metadata":case"/mx:Metadata":H(this.matches,new dp.sh.Match(F[0]+">",F.index,"metadata"));break;default:H(this.matches,new dp.sh.Match(F[0],F.index,"tag-name"));break}}A=new RegExp("\\?>|>|/>","gm");while((F=A.exec(this.code))!=null){if(B(E,F))continue;H(this.matches,new dp.sh.Match(F[0],F.index,"tag"))}};dp.sh.Brushes.Perl=function(){var _="abs accept alarm atan2 bind binmode bless caller chdir chmod chomp chop chown chr chroot close closedir connect cos crypt dbmclose dbmopen defined delete dump each endgrent endhostent endnetent endprotoent endpwent endservent eof exec exists exp fcntl fileno flock fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getppid getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt glob gmtime grep hex import index int ioctl join keys kill lc lcfirst length link listen localtime lock log lstat m map mkdir msgctl msgget msgrcv msgsnd no oct open opendir ord pack pipe pop pos print printf prototype push q qq quotemeta qw qx rand read readdir readline readlink readpipe recv ref rename reset reverse rewinddir rindex rmdir scalar seek seekdir semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unlink unpack unshift untie utime values vec waitpid wantarray warn write qr",$="s select goto die do package redo require return continue for foreach last next wait while use if else elsif eval exit unless switch case",A="my our local";this.regexList=[{regex:dp.sh.RegexLib.SingleLinePerlComments,css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("(\\$|@|%)\\w+","g"),css:"vars"},{regex:new RegExp(this.GetKeywords(_),"gmi"),css:"func"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"},{regex:new RegExp(this.GetKeywords(A),"gm"),css:"declarations"}];this.CssClass="dp-perl"};dp.sh.Brushes.Perl.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Perl.Aliases=["perl"];dp.sh.Brushes.Php=function(){var _="abs acos acosh addcslashes addslashes "+"array_change_key_case array_chunk array_combine array_count_values array_diff "+"array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill "+"array_filter array_flip array_intersect array_intersect_assoc array_intersect_key "+"array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map "+"array_merge array_merge_recursive array_multisort array_pad array_pop array_product "+"array_push array_rand array_reduce array_reverse array_search array_shift "+"array_slice array_splice array_sum array_udiff array_udiff_assoc "+"array_udiff_uassoc array_uintersect array_uintersect_assoc "+"array_uintersect_uassoc array_unique array_unshift array_values array_walk "+"array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert "+"basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress "+"bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir "+"checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists "+"closedir closelog copy cos cosh count count_chars date decbin dechex decoct "+"deg2rad delete ebcdic2ascii echo empty end ereg ereg_replace eregi eregi_replace error_log "+"error_reporting escapeshellarg escapeshellcmd eval exec exit exp explode extension_loaded "+"feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents "+"fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype "+"floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf "+"fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname "+"gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt "+"getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext "+"gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set "+"interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double "+"is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long "+"is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault "+"is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br "+"parse_ini_file parse_str parse_url passthru pathinfo readlink realpath rewind rewinddir rmdir "+"round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split "+"str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes "+"stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk "+"strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime "+"strtoupper strtr strval substr substr_compare",$="and or xor __FILE__ __LINE__ array as break case "+"cfunction class const continue declare default die do else "+"elseif empty enddeclare endfor endforeach endif endswitch endwhile "+"extends for foreach function include include_once global if "+"new old_function return static switch use require require_once "+"var while __FUNCTION__ __CLASS__ "+"__METHOD__ abstract interface public implements extends private protected throw";this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:"comment"},{regex:dp.sh.RegexLib.MultiLineCComments,css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp("\\$\\w+","g"),css:"vars"},{regex:new RegExp(this.GetKeywords(_),"gmi"),css:"func"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"}];this.CssClass="dp-c"};dp.sh.Brushes.Php.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Php.Aliases=["php"];dp.sh.Brushes.Python=function(){var $="and assert break class continue def del elif else "+"except exec finally for from global if import in is "+"lambda not or pass print raise return try yield while",_="None True False self cls class_";this.regexList=[{regex:dp.sh.RegexLib.SingleLinePerlComments,css:"comment"},{regex:new RegExp("^\\s*@\\w+","gm"),css:"decorator"},{regex:new RegExp("(['\"]{3})([^\\1])*?\\1","gm"),css:"comment"},{regex:new RegExp("\"(?!\")(?:\\.|\\\\\\\"|[^\\\"\"\\n\\r])*\"","gm"),css:"string"},{regex:new RegExp("'(?!')*(?:\\.|(\\\\\\')|[^\\''\\n\\r])*'","gm"),css:"string"},{regex:new RegExp("\\b\\d+\\.?\\w*","g"),css:"number"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"},{regex:new RegExp(this.GetKeywords(_),"gm"),css:"special"}];this.CssClass="dp-py";this.Style=".dp-py .builtins { color: #ff1493; }"+".dp-py .magicmethods { color: #808080; }"+".dp-py .exceptions { color: brown; }"+".dp-py .types { color: brown; font-style: italic; }"+".dp-py .commonlibs { color: #8A2BE2; font-style: italic; }"};dp.sh.Brushes.Python.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Python.Aliases=["py","python"];dp.sh.Brushes.Ruby=function(){var $="alias and BEGIN begin break case class def define_method defined do each else elsif "+"END end ensure false for if in module new next nil not or raise redo rescue retry return "+"self super then throw true undef unless until when while yield",_="Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload "+"Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol "+"ThreadGroup Thread Time TrueClass";this.regexList=[{regex:dp.sh.RegexLib.SingleLinePerlComments,css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp(":[a-z][A-Za-z0-9_]*","g"),css:"symbol"},{regex:new RegExp("(\\$|@@|@)\\w+","g"),css:"variable"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"},{regex:new RegExp(this.GetKeywords(_),"gm"),css:"builtin"}];this.CssClass="dp-rb";this.Style=".dp-rb .symbol { color: #a70; }"+".dp-rb .variable { color: #a70; font-weight: bold; }"};dp.sh.Brushes.Ruby.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Ruby.Aliases=["ruby","rails","ror"];dp.sh.Brushes.Sql=function(){var _="abs avg case cast coalesce convert count current_timestamp "+"current_user day isnull left lower month nullif replace right "+"session_user space substring sum system_user upper user year",$="absolute action add after alter as asc at authorization begin bigint "+"binary bit by cascade char character check checkpoint close collate "+"column commit committed connect connection constraint contains continue "+"create cube current current_date current_time cursor database date "+"deallocate dec decimal declare default delete desc distinct double drop "+"dynamic else end end-exec escape except exec execute false fetch first "+"float for force foreign forward free from full function global goto grant "+"group grouping having hour ignore index inner insensitive insert instead "+"int integer intersect into is isolation key last level load local max min "+"minute modify move name national nchar next no numeric of off on only "+"open option order out output partial password precision prepare primary "+"prior privileges procedure public read real references relative repeatable "+"restrict return returns revoke rollback rollup rows rule schema scroll "+"second section select sequence serializable set size smallint static "+"statistics table temp temporary then time timestamp to top transaction "+"translation trigger true truncate uncommitted union unique update values "+"varchar varying view when where with work",A="all and any between cross in join like not null or outer some";this.regexList=[{regex:new RegExp("--(.*)$","gm"),css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:dp.sh.RegexLib.SingleQuotedString,css:"string"},{regex:new RegExp(this.GetKeywords(_),"gmi"),css:"func"},{regex:new RegExp(this.GetKeywords(A),"gmi"),css:"op"},{regex:new RegExp(this.GetKeywords($),"gmi"),css:"keyword"}];this.CssClass="dp-sql";this.Style=".dp-sql .func { color: #ff1493; }"+".dp-sql .op { color: #808080; }"};dp.sh.Brushes.Sql.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Sql.Aliases=["sql"];dp.sh.Brushes.Vb=function(){var $="AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto "+"Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate "+"CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType "+"Date Decimal Declare Default Delegate Dim DirectCast Do Double Each "+"Else ElseIf End Enum Erase Error Event Exit False Finally For Friend "+"Function Get GetType GoSub GoTo Handles If Implements Imports In "+"Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module "+"MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing "+"NotInheritable NotOverridable Object On Option Optional Or OrElse "+"Overloads Overridable Overrides ParamArray Preserve Private Property "+"Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume "+"Return Select Set Shadows Shared Short Single Static Step Stop String "+"Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until "+"Variant When While With WithEvents WriteOnly Xor";this.regexList=[{regex:new RegExp("'.*$","gm"),css:"comment"},{regex:dp.sh.RegexLib.DoubleQuotedString,css:"string"},{regex:new RegExp("^\\s*#.*","gm"),css:"preprocessor"},{regex:new RegExp(this.GetKeywords($),"gm"),css:"keyword"}];this.CssClass="dp-vb"};dp.sh.Brushes.Vb.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Vb.Aliases=["vb","vb.net"];dp.sh.Brushes.Xml=function(){this.CssClass="dp-xml";this.Style=".dp-xml .cdata { color: #ff1493; }"+".dp-xml .tag, .dp-xml .tag-name { color: #069; font-weight: bold; }"+".dp-xml .attribute { color: red; }"+".dp-xml .attribute-value { color: blue; }"};dp.sh.Brushes.Xml.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Xml.Aliases=["xml","xhtml","xslt","html","xhtml"];dp.sh.Brushes.Xml.prototype.ProcessRegexList=function(){function B(_,$){_[_.length]=$}var $=0,A=null,_=null;this.GetMatches(new RegExp("(<|<)\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\](>|>)","gm"),"cdata");this.GetMatches(new RegExp("(<|<)!--\\s*.*?\\s*--(>|>)","gm"),"comments");_=new RegExp("([:\\w-.]+)\\s*=\\s*(\".*?\"|'.*?'|\\w+)*|(\\w+)","gm");while((A=_.exec(this.code))!=null){if(A[1]==null)continue;B(this.matches,new dp.sh.Match(A[1],A.index,"attribute"));if(A[2]!=undefined)B(this.matches,new dp.sh.Match(A[2],A.index+A[0].indexOf(A[2]),"attribute-value"))}this.GetMatches(new RegExp("(<|<)/*\\?*(?!\\!)|/*\\?*(>|>)","gm"),"tag");_=new RegExp("(?:<|<)/*\\?*\\s*([:\\w-.]+)","gm");while((A=_.exec(this.code))!=null)B(this.matches,new dp.sh.Match(A[1],A.index+A[0].indexOf(A[1]),"tag-name"))}
//}}}
{{{
#!/bin/bash
#settings:
netspeed=true
ram=true
ramused=true
cpu=true
swap=true
#-------------------------------------------------------
#----------- up/down speed -----------------------------
if [ $netspeed = true ]; then
upspeed1=$(cat /proc/net/dev | grep eth | tr -s ' ' | cut -d\ -f3)
downspeed1=$(cat /proc/net/dev | grep eth | tr -s ' ' | cut -d\ -f11)
sleep 0.9
upspeed2=$(cat /proc/net/dev | grep eth | tr -s ' ' | cut -d\ -f3)
downspeed2=$(cat /proc/net/dev | grep eth | tr -s ' ' | cut -d\ -f11)
upspeed=$(echo \($upspeed2 - $upspeed1\)/1024 | bc)
upkbmb=$(if [ $upspeed -gt 1024 ]; then
up1=$(echo \($upspeed2 - $upspeed1\)/1024/1024 | bc -l)
echo $up1 | head -c 4
else
echo $upspeed | head -c 3
fi)
downspeed=$(echo \($downspeed2 - $downspeed1\)/1024 | bc)
downkbmb=$(if [ $downspeed -gt 1024 ]; then
down1=$(echo \($downspeed2 - $downspeed1\)/1024/1024 | bc -l)
echo $down1 | head -c 4
else
echo $downspeed | head -c 3
fi)
#---------------- up/down speed unit --------------------
upunit=$(if [ $upspeed -gt 1024 ]; then echo "mb/s"; else echo "kb/s"; fi)
downunit=$(if [ $downspeed -gt 1024 ]; then echo "mb/s"; else echo "kb/s"; fi)
fi
#------------------- CPU % used -------------------------
if [ $cpu = true ]; then
cpufree=$(vmstat 1 2 | tail -1 | tr -s ' ' | cut -d ' ' -f16)
cpuused=$(echo 100-$cpufree | bc | sed -e 's/\..*//')
fi
#------------------- SWAP used -------------------------
if [ $swap = true ]; then
swapfree=$(free -k | grep Swap | tr -s ' ' | cut -d\ -f3)
swapkbmb=$(if [ $swapfree -gt 1024 ]; then
sw1=$(free -m | grep Swap | tr -s ' ' | cut -d\ -f3)
echo $sw1 | head -c 5
else
echo $swapfree | head -c 3
fi)
swapunit=$(if [ $swapfree -gt 1024 ]; then echo "mb"; else echo "kb"; fi)
fi
#------------------- RAM used --------------------------
if [ $ramused = true ]; then
memfree=$(free -k | grep Mem | tr -s ' ' | cut -d\ -f3)
memkbmb=$(if [ $memfree -gt 1024 ]; then
mw1=$(free -m | grep Mem | tr -s ' ' | cut -d\ -f3)
echo $mw1 | head -c 5
else
echo $memfree | head -c 3
fi)
memunit=$(if [ $memfree -gt 1024 ]; then echo "mb"; else echo "kb"; fi)
fi
#------------------- RAM % used --------------------------
if [ $ram = true ]; then
memused=$(free -m | grep buffers/cache | tr -s ' ' | cut -d' ' -f 3)
memfree=$(free -m | grep buffers/cache | tr -s ' ' | cut -d' ' -f 4)
memtotal=$(echo $memused+$memfree | bc -l)
memusedpercent=$(echo 100-100*$memfree/$memtotal | bc)
fi
#------------------ The Indicator Sysmonitor actual output -
echo $(if [ $cpu = true ]; then echo cpu: $cpuused%; fi) $(if [ $ram = true ]; then echo mem: $memusedpercent%; fi) $(if [ $ramused = true ]; then echo mem: $memkbmb $memunit; fi) $(if [ $swap = true ]; then echo swap: $swapkbmb $swapunit; fi) $(if [ $netspeed = true ]; then echo net u: $upkbmb $upunit d: $downkbmb $downunit; fi)
}}}
/***
|''Name:''|TWMacro|
|''Version:''||
|''Source:''|[[AiddlyWiki|http://aiddlywiki.sourceforge.net]]|
|''Author:''|[[Arphen Lin|mailto:arphenlin@gmail.com]]|
|''Type:''|WikiBar addon|
|''Required:''|WikiBar 2.0.0+|
!Description
support TiddlyWiki macro syntaxes
!Installation
#install WikiBar at first
#create your addon as a tiddler with tag 'wikibarAddons'
!Code
***/
//{{{
//----------------------------------------------------------------------------
// addon install function: this is a must
//----------------------------------------------------------------------------
function wikibar_addonInstall(unused){
// register tools
wikibarStore.macro = {
TYPE: 'MENU',
TOOLTIP: 'system macros',
systemInfo:{
TYPE: 'MENU',
CAPTION:'system information',
allTags:{
TOOLTIP:'display all TiddlyWiki tags',
syntax: '<<allTags>>',
HANDLER: wikibar_editFormatByWord
},
tag:{
TOOLTIP:'display specified tag',
syntax: '<<tag %1>>',
HANDLER: wikibar_getMacroParam,
doMore: wikibar_editFormatByWord,
param: 'tagName(ex: systemConfig)'
},
message:{
TOOLTIP:'get system message',
syntax:'<<message %1>>',
HANDLER: wikibar_getMacroParam,
doMore: wikibar_editFormatByWord,
param: 'customConfigError'
},
option:{
TOOLTIP:'display specified option',
syntax: '<<option %1>>[%2]\n',
HANDLER: wikibar_getMacroParam,
doMore: wikibar_editFormatByWord,
param: 'chkOpenInNewWindow \"Open link in new window\"'
},
saveChanges:{
TOOLTIP:'save changes',
syntax: '<<saveChanges>>',
HANDLER: wikibar_editFormatByWord
},
search:{
TOOLTIP:'display search button and input box',
syntax: '<<search>>',
HANDLER: wikibar_editFormatByWord
},
timeline:{
TYPE:'MENU',
TOOLTIP:'list tiddlers in date order',
modified:{
TOOLTIP:'list tiddlers in modified date order',
syntax: '<<timeline>>',
HANDLER: wikibar_editFormatByWord
},
created:{
TOOLTIP:'list tiddlers in created date order',
syntax: '<<timeline created>>',
HANDLER: wikibar_editFormatByWord
}
},
version:{
TOOLTIP:'display TiddlyWiki version',
syntax: '<<version>>',
HANDLER: wikibar_editFormatByWord
},
list:{
TYPE: 'MENU',
list:{
TOOLTIP:'list all tiddlers in alphabetical order',
syntax: '<<list>>',
HANDLER: wikibar_editFormatByWord
},
listMissing:{
CAPTION:'list missing',
TOOLTIP:'list all undefined tiddlers',
syntax: '<<list missing>>',
HANDLER: wikibar_editFormatByWord
},
listOrphans:{
CAPTION:'list orphans',
TOOLTIP:'tiddlers that are not linked to from any other tiddlers',
syntax: '<<list orphans>>',
HANDLER: wikibar_editFormatByWord
}
}
}, // systemInfo
tiddlerOperate:{
TYPE: 'MENU',
CAPTION:'tiddler operation',
newJournal:{
TOOLTIP:'create a new tiddler from current date and time',
syntax: '<<newJournal %1>>',
HANDLER: wikibar_getMacroParam,
doMore: wikibar_editFormatByWord,
param: '\"journal title\"'
},
newTiddler:{
TOOLTIP:'create new tiddler',
syntax: '<<newTiddler>>',
HANDLER: wikibar_editFormatByWord
},
closeAll:{
TOOLTIP:'close all tiddlers',
syntax: '<<closeAll>>',
HANDLER: wikibar_editFormatByWord
}
}, // tiddlerOperate
tiddlerInfo:{
TYPE: 'MENU',
CAPTION:'tiddler information',
tiddler:{
TOOLTIP:'display specified tiddler text',
syntax: '<<tiddler %1>>',
HANDLER: wikibar_getMacroParam,
doMore: wikibar_editFormatByWord,
param: 'tiddlerTitle'
}
}, // tiddlerInfo
template:{
TYPE:'MENU',
CAPTION:'template only',
toolbar:{
TYPE:'MENU',
TOOLTIP:'toolbar macro command',
closeTiddler:{
TOOLTIP: 'close current tiddler',
syntax: 'closeTiddler',
HANDLER: wikibar_editFormatByWord
},
closeOthers:{
TOOLTIP: 'close other opened tiddlers',
syntax: 'closeOthers',
HANDLER: wikibar_editFormatByWord
},
editTiddler:{
TOOLTIP: 'edit current tiddler',
syntax: 'editTiddler',
HANDLER: wikibar_editFormatByWord
},
saveTiddler:{
TOOLTIP: 'save current tiddler',
syntax: 'saveTiddler',
HANDLER: wikibar_editFormatByWord
},
cancelTiddler:{
TOOLTIP: 'cancel current tiddler',
syntax: 'cancelTiddler',
HANDLER: wikibar_editFormatByWord
},
deleteTiddler:{
TOOLTIP: 'delete current tiddler',
syntax: 'deleteTiddler',
HANDLER: wikibar_editFormatByWord
},
permalink:{
TOOLTIP:'display current tiddler link',
syntax: 'permalink',
HANDLER: wikibar_editFormatByWord
},
references:{
TOOLTIP:'current tiddler references',
syntax: 'references',
HANDLER: wikibar_editFormatByWord
},
jump:{
TOOLTIP:'jump to other opened tiddler',
syntax: 'jump',
HANDLER: wikibar_editFormatByWord
},
tagChooser:{
TOOLTIP:'add tag(s) to current tiddler',
syntax: 'tagChooser',
HANDLER: wikibar_editFormatByWord
}
},
edit:{
TYPE:'MENU',
editTitle:{
CAPTION:'edit title',
TOOLTIP:'display title input box',
syntax: "macro='edit title'",
HANDLER: wikibar_editFormatByWord
},
editTags:{
CAPTION:'edit tags',
TOOLTIP:'display tags input box',
syntax: "macro='edit tags'",
HANDLER: wikibar_editFormatByWord
},
editText:{
CAPTION:'edit text',
TOOLTIP:'display tiddler text edit box',
syntax: "macro='edit text'",
HANDLER: wikibar_editFormatByWord
}
},
view:{
TYPE:'MENU',
viewTitle:{
CAPTION:'view title',
TOOLTIP:'display title',
syntax: "macro='view title'",
HANDLER: wikibar_editFormatByWord
},
viewTags:{
CAPTION:'view tags',
TOOLTIP:'display tags',
syntax: "macro='view tags'",
HANDLER: wikibar_editFormatByWord
},
viewText:{
CAPTION:'view text',
TOOLTIP:'display tiddler text',
syntax: "macro='view text'",
HANDLER: wikibar_editFormatByWord
}
}
},
misc:{
TYPE: 'MENU',
gradient:{
TOOLTIP: 'gradient',
syntax: '<<gradient vert %1 #ffffff %1>>user_text\n>>',
HANDLER: wikibar_getColorCode,
doMore: wikibar_editFormatByWord
},
slider:{
TOOLTIP: 'slider',
syntax: '<<slider %1 %2 %3>>',
HANDLER: wikibar_getMacroParam,
doMore: wikibar_editFormatByWord,
param: 'sliderID sliderTiddler sliderLabel'
},
sparkline:{
TOOLTIP: 'sparkline',
syntax: '<<sparkline %N>>',
HANDLER: wikibar_getMacroParam,
doMore: wikibar_editFormatByWord,
param: 'number_list(ex: 100 123 ...)'
},
tabs:{
TOOLTIP: 'tabs',
syntax: '<<tabs [%N]>>',
HANDLER: wikibar_getMacroParam,
doMore: wikibar_editFormatByWord,
param: 'indentifier tabLabel tabName Tiddler'
},
today:{
TOOLTIP: 'today',
syntax: '<<today [%1]>>',
HANDLER: wikibar_getMacroParam,
doMore: wikibar_editFormatByWord,
param: '"YYYY/MM/DD hh:mm:ss"'
}
} // misc
}; // macro
}
//}}}
//{{{
// for debugging: you can turn it off in final release ----------------------
wikibar_addonInstall();
//}}}
<<tabs txtMoreTab "Tags" "All Tags" TabAllTags "Miss" "Missing tiddlers" TabMoreMissing "Orph" "Orphaned tiddlers" TabMoreOrphans "Shad" "Shadowed tiddlers" TabMoreShadowed>>
<<allTags excludeLists [a-z]>>
/***
|Name:|TagglyTaggingPlugin|
|Description:|tagglyTagging macro is a replacement for the builtin tagging macro in your ViewTemplate|
|Version:|3.3.1 ($Rev: 9828 $)|
|Date:|$Date: 2009-06-03 21:38:41 +1000 (Wed, 03 Jun 2009) $|
|Source:|http://mptw.tiddlyspot.com/#TagglyTaggingPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!Notes
See http://mptw.tiddlyspot.com/#TagglyTagging
***/
//{{{
merge(String.prototype,{
parseTagExpr: function(debug) {
if (this.trim() == "")
return "(true)";
var anyLogicOp = /(!|&&|\|\||\(|\))/g;
var singleLogicOp = /^(!|&&|\|\||\(|\))$/;
var spaced = this.
// because square brackets in templates are no good
// this means you can use [(With Spaces)] instead of [[With Spaces]]
replace(/\[\(/g," [[").
replace(/\)\]/g,"]] ").
// space things out so we can use readBracketedList. tricky eh?
replace(anyLogicOp," $1 ");
var expr = "";
var tokens = spaced.readBracketedList(false); // false means don't uniq the list. nice one JR!
for (var i=0;i<tokens.length;i++)
if (tokens[i].match(singleLogicOp))
expr += tokens[i];
else
expr += "tiddler.tags.contains('%0')".format([tokens[i].replace(/'/,"\\'")]); // fix single quote bug. still have round bracket bug i think
if (debug)
alert(expr);
return '('+expr+')';
}
});
merge(TiddlyWiki.prototype,{
getTiddlersByTagExpr: function(tagExpr,sortField) {
var result = [];
var expr = tagExpr.parseTagExpr();
store.forEachTiddler(function(title,tiddler) {
if (eval(expr))
result.push(tiddler);
});
if(!sortField)
sortField = "title";
result.sort(function(a,b) {return a[sortField] < b[sortField] ? -1 : (a[sortField] == b[sortField] ? 0 : +1);});
return result;
}
});
config.taggly = {
// for translations
lingo: {
labels: {
asc: "\u2191", // down arrow
desc: "\u2193", // up arrow
title: "title",
modified: "modified",
created: "created",
show: "+",
hide: "-",
normal: "normal",
group: "group",
commas: "commas",
sitemap: "sitemap",
numCols: "cols\u00b1", // plus minus sign
label: "Tagged as '%0':",
exprLabel: "Matching tag expression '%0':",
excerpts: "excerpts",
descr: "descr",
slices: "slices",
contents: "contents",
sliders: "sliders",
noexcerpts: "title only",
noneFound: "(none)"
},
tooltips: {
title: "Click to sort by title",
modified: "Click to sort by modified date",
created: "Click to sort by created date",
show: "Click to show tagging list",
hide: "Click to hide tagging list",
normal: "Click to show a normal ungrouped list",
group: "Click to show list grouped by tag",
sitemap: "Click to show a sitemap style list",
commas: "Click to show a comma separated list",
numCols: "Click to change number of columns",
excerpts: "Click to show excerpts",
descr: "Click to show the description slice",
slices: "Click to show all slices",
contents: "Click to show entire tiddler contents",
sliders: "Click to show tiddler contents in sliders",
noexcerpts: "Click to show entire title only"
},
tooDeepMessage: "* //sitemap too deep...//"
},
config: {
showTaggingCounts: true,
listOpts: {
// the first one will be the default
sortBy: ["title","modified","created"],
sortOrder: ["asc","desc"],
hideState: ["show","hide"],
listMode: ["normal","group","sitemap","commas"],
numCols: ["1","2","3","4","5","6"],
excerpts: ["noexcerpts","excerpts","descr","slices","contents","sliders"]
},
valuePrefix: "taggly.",
excludeTags: ["excludeLists","excludeTagging"],
excerptSize: 50,
excerptMarker: "/%"+"%/",
siteMapDepthLimit: 25
},
getTagglyOpt: function(title,opt) {
var val = store.getValue(title,this.config.valuePrefix+opt);
return val ? val : this.config.listOpts[opt][0];
},
setTagglyOpt: function(title,opt,value) {
// create it silently if it doesn't exist
if (!store.tiddlerExists(title)) {
store.saveTiddler(title,title,config.views.editor.defaultText.format([title]),config.options.txtUserName,new Date(),"");
// <<tagglyTagging expr:"...">> creates a tiddler to store its display settings
// Make those tiddlers less noticeable by tagging as excludeSearch and excludeLists
// Because we don't want to hide real tags, check that they aren't actually tags before doing so
// Also tag them as tagglyExpression for manageability
// (contributed by RA)
if (!store.getTaggedTiddlers(title).length) {
store.setTiddlerTag(title,true,"excludeSearch");
store.setTiddlerTag(title,true,"excludeLists");
store.setTiddlerTag(title,true,"tagglyExpression");
}
}
// if value is default then remove it to save space
return store.setValue(title, this.config.valuePrefix+opt, value == this.config.listOpts[opt][0] ? null : value);
},
getNextValue: function(title,opt) {
var current = this.getTagglyOpt(title,opt);
var pos = this.config.listOpts[opt].indexOf(current);
// supposed to automagically don't let cols cycle up past the number of items
// currently broken in some situations, eg when using an expression
// lets fix it later when we rewrite for jquery
// the columns thing should be jquery table manipulation probably
var limit = (opt == "numCols" ? store.getTaggedTiddlers(title).length : this.config.listOpts[opt].length);
var newPos = (pos + 1) % limit;
return this.config.listOpts[opt][newPos];
},
toggleTagglyOpt: function(title,opt) {
var newVal = this.getNextValue(title,opt);
this.setTagglyOpt(title,opt,newVal);
},
createListControl: function(place,title,type) {
var lingo = config.taggly.lingo;
var label;
var tooltip;
var onclick;
if ((type == "title" || type == "modified" || type == "created")) {
// "special" controls. a little tricky. derived from sortOrder and sortBy
label = lingo.labels[type];
tooltip = lingo.tooltips[type];
if (this.getTagglyOpt(title,"sortBy") == type) {
label += lingo.labels[this.getTagglyOpt(title,"sortOrder")];
onclick = function() {
config.taggly.toggleTagglyOpt(title,"sortOrder");
return false;
}
}
else {
onclick = function() {
config.taggly.setTagglyOpt(title,"sortBy",type);
config.taggly.setTagglyOpt(title,"sortOrder",config.taggly.config.listOpts.sortOrder[0]);
return false;
}
}
}
else {
// "regular" controls, nice and simple
label = lingo.labels[type == "numCols" ? type : this.getNextValue(title,type)];
tooltip = lingo.tooltips[type == "numCols" ? type : this.getNextValue(title,type)];
onclick = function() {
config.taggly.toggleTagglyOpt(title,type);
return false;
}
}
// hide button because commas don't have columns
if (!(this.getTagglyOpt(title,"listMode") == "commas" && type == "numCols"))
createTiddlyButton(place,label,tooltip,onclick,type == "hideState" ? "hidebutton" : "button");
},
makeColumns: function(orig,numCols) {
var listSize = orig.length;
var colSize = listSize/numCols;
var remainder = listSize % numCols;
var upperColsize = colSize;
var lowerColsize = colSize;
if (colSize != Math.floor(colSize)) {
// it's not an exact fit so..
upperColsize = Math.floor(colSize) + 1;
lowerColsize = Math.floor(colSize);
}
var output = [];
var c = 0;
for (var j=0;j<numCols;j++) {
var singleCol = [];
var thisSize = j < remainder ? upperColsize : lowerColsize;
for (var i=0;i<thisSize;i++)
singleCol.push(orig[c++]);
output.push(singleCol);
}
return output;
},
drawTable: function(place,columns,theClass) {
var newTable = createTiddlyElement(place,"table",null,theClass);
var newTbody = createTiddlyElement(newTable,"tbody");
var newTr = createTiddlyElement(newTbody,"tr");
for (var j=0;j<columns.length;j++) {
var colOutput = "";
for (var i=0;i<columns[j].length;i++)
colOutput += columns[j][i];
var newTd = createTiddlyElement(newTr,"td",null,"tagglyTagging"); // todo should not need this class
wikify(colOutput,newTd);
}
return newTable;
},
createTagglyList: function(place,title,isTagExpr) {
switch(this.getTagglyOpt(title,"listMode")) {
case "group": return this.createTagglyListGrouped(place,title,isTagExpr); break;
case "normal": return this.createTagglyListNormal(place,title,false,isTagExpr); break;
case "commas": return this.createTagglyListNormal(place,title,true,isTagExpr); break;
case "sitemap":return this.createTagglyListSiteMap(place,title,isTagExpr); break;
}
},
getTaggingCount: function(title,isTagExpr) {
// thanks to Doug Edmunds
if (this.config.showTaggingCounts) {
var tagCount = config.taggly.getTiddlers(title,'title',isTagExpr).length;
if (tagCount > 0)
return " ("+tagCount+")";
}
return "";
},
getTiddlers: function(titleOrExpr,sortBy,isTagExpr) {
return isTagExpr ? store.getTiddlersByTagExpr(titleOrExpr,sortBy) : store.getTaggedTiddlers(titleOrExpr,sortBy);
},
getExcerpt: function(inTiddlerTitle,title,indent) {
if (!indent)
indent = 1;
var displayMode = this.getTagglyOpt(inTiddlerTitle,"excerpts");
var t = store.getTiddler(title);
if (t && displayMode == "excerpts") {
var text = t.text.replace(/\n/," ");
var marker = text.indexOf(this.config.excerptMarker);
if (marker != -1) {
return " {{excerpt{<nowiki>" + text.substr(0,marker) + "</nowiki>}}}";
}
else if (text.length < this.config.excerptSize) {
return " {{excerpt{<nowiki>" + t.text + "</nowiki>}}}";
}
else {
return " {{excerpt{<nowiki>" + t.text.substr(0,this.config.excerptSize) + "..." + "</nowiki>}}}";
}
}
else if (t && displayMode == "contents") {
return "\n{{contents indent"+indent+"{\n" + t.text + "\n}}}";
}
else if (t && displayMode == "sliders") {
return "<slider slide>\n{{contents{\n" + t.text + "\n}}}\n</slider>";
}
else if (t && displayMode == "descr") {
var descr = store.getTiddlerSlice(title,'Description');
return descr ? " {{excerpt{" + descr + "}}}" : "";
}
else if (t && displayMode == "slices") {
var result = "";
var slices = store.calcAllSlices(title);
for (var s in slices)
result += "|%0|<nowiki>%1</nowiki>|\n".format([s,slices[s]]);
return result ? "\n{{excerpt excerptIndent{\n" + result + "}}}" : "";
}
return "";
},
notHidden: function(t,inTiddler) {
if (typeof t == "string")
t = store.getTiddler(t);
return (!t || !t.tags.containsAny(this.config.excludeTags) ||
(inTiddler && this.config.excludeTags.contains(inTiddler)));
},
// this is for normal and commas mode
createTagglyListNormal: function(place,title,useCommas,isTagExpr) {
var list = config.taggly.getTiddlers(title,this.getTagglyOpt(title,"sortBy"),isTagExpr);
if (this.getTagglyOpt(title,"sortOrder") == "desc")
list = list.reverse();
var output = [];
var first = true;
for (var i=0;i<list.length;i++) {
if (this.notHidden(list[i],title)) {
var countString = this.getTaggingCount(list[i].title);
var excerpt = this.getExcerpt(title,list[i].title);
if (useCommas)
output.push((first ? "" : ", ") + "[[" + list[i].title + "]]" + countString + excerpt);
else
output.push("*[[" + list[i].title + "]]" + countString + excerpt + "\n");
first = false;
}
}
return this.drawTable(place,
this.makeColumns(output,useCommas ? 1 : parseInt(this.getTagglyOpt(title,"numCols"))),
useCommas ? "commas" : "normal");
},
// this is for the "grouped" mode
createTagglyListGrouped: function(place,title,isTagExpr) {
var sortBy = this.getTagglyOpt(title,"sortBy");
var sortOrder = this.getTagglyOpt(title,"sortOrder");
var list = config.taggly.getTiddlers(title,sortBy,isTagExpr);
if (sortOrder == "desc")
list = list.reverse();
var leftOvers = []
for (var i=0;i<list.length;i++)
leftOvers.push(list[i].title);
var allTagsHolder = {};
for (var i=0;i<list.length;i++) {
for (var j=0;j<list[i].tags.length;j++) {
if (list[i].tags[j] != title) { // not this tiddler
if (this.notHidden(list[i].tags[j],title)) {
if (!allTagsHolder[list[i].tags[j]])
allTagsHolder[list[i].tags[j]] = "";
if (this.notHidden(list[i],title)) {
allTagsHolder[list[i].tags[j]] += "**[["+list[i].title+"]]"
+ this.getTaggingCount(list[i].title) + this.getExcerpt(title,list[i].title) + "\n";
leftOvers.setItem(list[i].title,-1); // remove from leftovers. at the end it will contain the leftovers
}
}
}
}
}
var allTags = [];
for (var t in allTagsHolder)
allTags.push(t);
var sortHelper = function(a,b) {
if (a == b) return 0;
if (a < b) return -1;
return 1;
};
allTags.sort(function(a,b) {
var tidA = store.getTiddler(a);
var tidB = store.getTiddler(b);
if (sortBy == "title") return sortHelper(a,b);
else if (!tidA && !tidB) return 0;
else if (!tidA) return -1;
else if (!tidB) return +1;
else return sortHelper(tidA[sortBy],tidB[sortBy]);
});
var leftOverOutput = "";
for (var i=0;i<leftOvers.length;i++)
if (this.notHidden(leftOvers[i],title))
leftOverOutput += "*[["+leftOvers[i]+"]]" + this.getTaggingCount(leftOvers[i]) + this.getExcerpt(title,leftOvers[i]) + "\n";
var output = [];
if (sortOrder == "desc")
allTags.reverse();
else if (leftOverOutput != "")
// leftovers first...
output.push(leftOverOutput);
for (var i=0;i<allTags.length;i++)
if (allTagsHolder[allTags[i]] != "")
output.push("*[["+allTags[i]+"]]" + this.getTaggingCount(allTags[i]) + this.getExcerpt(title,allTags[i]) + "\n" + allTagsHolder[allTags[i]]);
if (sortOrder == "desc" && leftOverOutput != "")
// leftovers last...
output.push(leftOverOutput);
return this.drawTable(place,
this.makeColumns(output,parseInt(this.getTagglyOpt(title,"numCols"))),
"grouped");
},
// used to build site map
treeTraverse: function(title,depth,sortBy,sortOrder,isTagExpr) {
var list = config.taggly.getTiddlers(title,sortBy,isTagExpr);
if (sortOrder == "desc")
list.reverse();
var indent = "";
for (var j=0;j<depth;j++)
indent += "*"
var childOutput = "";
if (depth > this.config.siteMapDepthLimit)
childOutput += indent + this.lingo.tooDeepMessage;
else
for (var i=0;i<list.length;i++)
if (list[i].title != title)
if (this.notHidden(list[i].title,this.config.inTiddler))
childOutput += this.treeTraverse(list[i].title,depth+1,sortBy,sortOrder,false);
if (depth == 0)
return childOutput;
else
return indent + "[["+title+"]]" + this.getTaggingCount(title) + this.getExcerpt(this.config.inTiddler,title,depth) + "\n" + childOutput;
},
// this if for the site map mode
createTagglyListSiteMap: function(place,title,isTagExpr) {
this.config.inTiddler = title; // nasty. should pass it in to traverse probably
var output = this.treeTraverse(title,0,this.getTagglyOpt(title,"sortBy"),this.getTagglyOpt(title,"sortOrder"),isTagExpr);
return this.drawTable(place,
this.makeColumns(output.split(/(?=^\*\[)/m),parseInt(this.getTagglyOpt(title,"numCols"))), // regexp magic
"sitemap"
);
},
macros: {
tagglyTagging: {
handler: function (place,macroName,params,wikifier,paramString,tiddler) {
var parsedParams = paramString.parseParams("tag",null,true);
var refreshContainer = createTiddlyElement(place,"div");
// do some refresh magic to make it keep the list fresh - thanks Saq
refreshContainer.setAttribute("refresh","macro");
refreshContainer.setAttribute("macroName",macroName);
var tag = getParam(parsedParams,"tag");
var expr = getParam(parsedParams,"expr");
if (expr) {
refreshContainer.setAttribute("isTagExpr","true");
refreshContainer.setAttribute("title",expr);
refreshContainer.setAttribute("showEmpty","true");
}
else {
refreshContainer.setAttribute("isTagExpr","false");
if (tag) {
refreshContainer.setAttribute("title",tag);
refreshContainer.setAttribute("showEmpty","true");
}
else {
refreshContainer.setAttribute("title",tiddler.title);
refreshContainer.setAttribute("showEmpty","false");
}
}
this.refresh(refreshContainer);
},
refresh: function(place) {
var title = place.getAttribute("title");
var isTagExpr = place.getAttribute("isTagExpr") == "true";
var showEmpty = place.getAttribute("showEmpty") == "true";
removeChildren(place);
addClass(place,"tagglyTagging");
var countFound = config.taggly.getTiddlers(title,'title',isTagExpr).length
if (countFound > 0 || showEmpty) {
var lingo = config.taggly.lingo;
config.taggly.createListControl(place,title,"hideState");
if (config.taggly.getTagglyOpt(title,"hideState") == "show") {
createTiddlyElement(place,"span",null,"tagglyLabel",
isTagExpr ? lingo.labels.exprLabel.format([title]) : lingo.labels.label.format([title]));
config.taggly.createListControl(place,title,"title");
config.taggly.createListControl(place,title,"modified");
config.taggly.createListControl(place,title,"created");
config.taggly.createListControl(place,title,"listMode");
config.taggly.createListControl(place,title,"excerpts");
config.taggly.createListControl(place,title,"numCols");
config.taggly.createTagglyList(place,title,isTagExpr);
if (countFound == 0 && showEmpty)
createTiddlyElement(place,"div",null,"tagglyNoneFound",lingo.labels.noneFound);
}
}
}
}
},
// todo fix these up a bit
styles: [
"/*{{{*/",
"/* created by TagglyTaggingPlugin */",
".tagglyTagging { padding-top:0.5em; }",
".tagglyTagging li.listTitle { display:none; }",
".tagglyTagging ul {",
" margin-top:0px; padding-top:0.5em; padding-left:2em;",
" margin-bottom:0px; padding-bottom:0px;",
"}",
".tagglyTagging { vertical-align: top; margin:0px; padding:0px; }",
".tagglyTagging table { margin:0px; padding:0px; }",
".tagglyTagging .button { visibility:hidden; margin-left:3px; margin-right:3px; }",
".tagglyTagging .button, .tagglyTagging .hidebutton {",
" color:[[ColorPalette::TertiaryLight]]; font-size:90%;",
" border:0px; padding-left:0.3em;padding-right:0.3em;",
"}",
".tagglyTagging .button:hover, .hidebutton:hover, ",
".tagglyTagging .button:active, .hidebutton:active {",
" border:0px; background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]];",
"}",
".selected .tagglyTagging .button { visibility:visible; }",
".tagglyTagging .hidebutton { color:[[ColorPalette::Background]]; }",
".selected .tagglyTagging .hidebutton { color:[[ColorPalette::TertiaryLight]] }",
".tagglyLabel { color:[[ColorPalette::TertiaryMid]]; font-size:90%; }",
".tagglyTagging ul {padding-top:0px; padding-bottom:0.5em; margin-left:1em; }",
".tagglyTagging ul ul {list-style-type:disc; margin-left:-1em;}",
".tagglyTagging ul ul li {margin-left:0.5em; }",
".editLabel { font-size:90%; padding-top:0.5em; }",
".tagglyTagging .commas { padding-left:1.8em; }",
"/* not technically tagglytagging but will put them here anyway */",
".tagglyTagged li.listTitle { display:none; }",
".tagglyTagged li { display: inline; font-size:90%; }",
".tagglyTagged ul { margin:0px; padding:0px; }",
".excerpt { color:[[ColorPalette::TertiaryDark]]; }",
".excerptIndent { margin-left:4em; }",
"div.tagglyTagging table,",
"div.tagglyTagging table tr,",
"td.tagglyTagging",
" {border-style:none!important; }",
".tagglyTagging .contents { border-bottom:2px solid [[ColorPalette::TertiaryPale]]; padding:0 1em 1em 0.5em;",
" margin-bottom:0.5em; }",
".tagglyTagging .indent1 { margin-left:3em; }",
".tagglyTagging .indent2 { margin-left:4em; }",
".tagglyTagging .indent3 { margin-left:5em; }",
".tagglyTagging .indent4 { margin-left:6em; }",
".tagglyTagging .indent5 { margin-left:7em; }",
".tagglyTagging .indent6 { margin-left:8em; }",
".tagglyTagging .indent7 { margin-left:9em; }",
".tagglyTagging .indent8 { margin-left:10em; }",
".tagglyTagging .indent9 { margin-left:11em; }",
".tagglyTagging .indent10 { margin-left:12em; }",
".tagglyNoneFound { margin-left:2em; color:[[ColorPalette::TertiaryMid]]; font-size:90%; font-style:italic; }",
"/*}}}*/",
""].join("\n"),
init: function() {
merge(config.macros,this.macros);
config.shadowTiddlers["TagglyTaggingStyles"] = this.styles;
store.addNotification("TagglyTaggingStyles",refreshStyles);
}
};
config.taggly.init();
//}}}
/***
InlineSlidersPlugin
By Saq Imtiaz
http://tw.lewcid.org/sandbox/#InlineSlidersPlugin
// syntax adjusted to not clash with NestedSlidersPlugin
// added + syntax to start open instead of closed
***/
//{{{
config.formatters.unshift( {
name: "inlinesliders",
// match: "\\+\\+\\+\\+|\\<slider",
match: "\\<slider",
// lookaheadRegExp: /(?:\+\+\+\+|<slider) (.*?)(?:>?)\n((?:.|\n)*?)\n(?:====|<\/slider>)/mg,
lookaheadRegExp: /(?:<slider)(\+?) (.*?)(?:>)\n((?:.|\n)*?)\n(?:<\/slider>)/mg,
handler: function(w) {
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart ) {
var btn = createTiddlyButton(w.output,lookaheadMatch[2] + " "+"\u00BB",lookaheadMatch[2],this.onClickSlider,"button sliderButton");
var panel = createTiddlyElement(w.output,"div",null,"sliderPanel");
panel.style.display = (lookaheadMatch[1] == '+' ? "block" : "none");
wikify(lookaheadMatch[3],panel);
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
}
},
onClickSlider : function(e) {
if(!e) var e = window.event;
var n = this.nextSibling;
n.style.display = (n.style.display=="none") ? "block" : "none";
return false;
}
});
//}}}
/***
|Name|TiddlerEncryptionPlugin|
|Author|Lyall Pearce|
|Source|http://www.Remotely-Helpful.com/TiddlyWiki/TiddlerEncryptionPlugin.html|
|License|[[Creative Commons Attribution-Share Alike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|Version|3.2.1|
|~CoreVersion|2.4.0|
|Requires|None|
|Overrides|store.getSaver().externalizeTiddler(), store.getTiddler() and store.getTiddlerText()|
|Description|Encrypt/Decrypt Tiddlers with a Password key|
!!!!!Usage
<<<
* Tag a tiddler with Encrypt(prompt)
** Consider the 'prompt' something to help you remember the password with. If multiple tiddlers can be encrypted with the same 'prompt' and you will only be asked for the password once.
* Upon save, the Tiddler will be encrypted and the tag replaced with Decrypt(prompt).
** Failure to encrypt (by not entering a password) will leave the tiddler unencrypted and will leave the Encrypt(prompt) tag in place. This means that the next time you save, you will be asked for the password again.
** To have multiple tiddlers use the same password - simply use the same 'prompt'.
** Tiddlers that are encrypted may be automatically tagged 'excludeSearch' as there is no point in searching encrypted data - this is configurable by an option - you still may want to search the titles of encrypted tiddlers
** Tiddlers that are encrypted may be automatically tagged 'excludeLists', if you have them encrypted, you may also want to keep them 'hidden' - this is configurable by an option.
** Automatic removal of excludeLists and excludeSearch tags is performed, if the above two options are set, only if these two tags are the last 2 tags for a tiddler, if they are positioned somewhere else in the tags list, they will be left in place, meaning that the decrypted tiddler will not be searchable and/or will not appear in lists.
** Encrypted tiddlers are stored as displayable hex, to keep things visibly tidy, should you display an encrypted tiddler. There is nothing worse than seeing a pile of gobbledy gook on your screen. Additionally, the encrypted data is easily cut/paste/emailed if displayed in hex form.
* Tiddlers are decrypted only if you click the decrypt button or the decryptAll button, not when you load the TiddlyWiki
** If you don't display a tiddler, you won't have the option to decrypt it (unless you use the {{{<<EncryptionDecryptAll>>}}} macro)
** Tiddlers will re-encrypt automatically on save.
** Decryption of Tiddlers does not make your TiddlyWiki 'dirty' - you will not be asked to save if you leave the page.
* Errors are reported via diagnostic messages.
** Empty passwords, on save, will result in the tiddler being saved unencrypted - this should only occur with new tiddlers, decrypted tiddlers or with tiddlers who have had their 'prompt' tag changed.
** Encrypted tiddlers know if they are decrypted successfully - failure to decrypt a tiddler will ''not'' lose your data.
** Editing of an encrypted (that has not been unencrypted) tiddler will result in loss of that tiddler as the SHA1 checksums will no longer match, upon decryption. To this end, it is best that you do not check the option. You can, however edit an encrypted tiddler tag list - just do ''not'' change the tiddler contents.
** To change the password on a Tiddler, change the Encrypt('prompt') tag to a new prompt value, after decrypting the tiddler.
** You can edit the tags of an encrypted tiddler, so long as you do not edit the text.
** To change the password for all tiddlers of a particular prompt, use the {{{<<EncryptionChangePassword ["button text" ["tooltip text" ["prompt string" ["accessKey"]]]]>>}}} macro.
** To decrypt all tiddlers of a particular "prompt string", use the {{{<<EncryptionDecryptAll ["button text" ["tooltip text" ["prompt string" ["accessKey"]]]]>>}}} macro - this will make tiddlers encrypted with "prompt string" searchable - or prompt for all 'prompt strings', if none is supplied.
<<<
!!!!!Configuration
<<<
Useful Buttons:
<<EncryptionChangePassword>> - Change passwords of encrypted tiddlers.
<<EncryptionDecryptAll>> - Decrypt ALL tiddlers - enables searching contents of encrypted tiddlers.
<<option chkExcludeEncryptedFromSearch>> - If set, Encrypted Tiddlers are excluded from searching by tagging with excludeSearch. If Clear, excludeSearch is not added and it is also removed from existing Encrypted Tiddlers only if it is the last Tag. Searching of Encrypted Tiddlers is only meaningful for the Title and Tags.
<<option chkExcludeEncryptedFromLists>> - If set, Encrypted Tiddlers are excluded from lists by tagging with excludeLists. If Clear, excludeLists is not added and it is also removed from existing Encrypted Tiddlers only if it is the last Tag. Preventing encrypted tiddlers from appearing in lists effectively hides them.
<<option chkShowDecryptButtonInContent>> - If set, Encrypted Tiddlers content is replaced by <<EncryptionDecryptThis>> button. This has consequences, in the current version as, if you edit the tiddler without decrypting it, you lose the contents.
<<<
!!!!!Revision History
<<<
* 3.2.1 - Returned the <<EncryptionDecryptThis>> button as an option.
* 3.2.0 - Ditched the 'Decrypt' button showing up in the tiddler contents if the tiddler is encrypted. It caused too much pain if you edit the tiddler without decrypting it - you lost your data as it was replaced by a Decrypt Macro call! Additionally, a 'decrypt' button will now appear in the toolbar, just before the edit button, if the tiddler is encrypted. This button only appears if using core TiddlyWiki version 2.4 or above.
* 3.1.1 - Obscure bug whereby if an encrypted tiddler was a certain length, it would refuse to decrypt.
* 3.1.0 - When creating a new Encrypt(prompt) tiddler and you have not previously decrypted a tiddler with the same prompt, on save, you will be prompted for the password to encrypt the tiddler. Prior to encrypting, an attempt to decrypt all other tiddlers with the same prompt, is performed. If any tiddler fails to decrypt, the save is aborted - this is so you don't accidentally have 2 (or more!) passwords for the same prompt. Either you enter the correct password, change the prompt string and try re-saving or you cancel (and the tiddler is saved unencrypted).
* 3.0.1 - Allow Enter to be used for password entry, rather than having to press the OK button.
* 3.0.0 - Major revamp internally to support entry of passwords using forms such that passwords are no longer visible on entry. Completely backward compatible with old encrypted tiddlers. No more using the javascript prompt() function.
<<<
!!!!!Additional work
***/
//{{{
version.extensions.TiddlerEncryptionPlugin = {major: 3, minor: 2, revision: 1, date: new Date(2008,10,26)};
// where I cache the passwords - for want of a better place.
config.encryptionPasswords = new Array();
config.encryptionReEnterPasswords = false;
if(config.options.chkExcludeEncryptedFromSearch == undefined) config.options.chkExcludeEncryptedFromSearch = false;
if(config.options.chkExcludeEncryptedFromLists == undefined) config.options.chkExcludeEncryptedFromLists = false;
if(config.options.chkShowDecryptButtonInContent == undefined) config.options.chkShowDecryptButtonInContent = false;
config.macros.EncryptionChangePassword = {};
config.macros.EncryptionChangePassword.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
var theButton = createTiddlyButton(place,
(params[0] && params[0].length > 0) ? params[0] : "Change Passwords",
(params[1] && params[1].length > 0) ? params[1] : "Change Passwords" + (params[2] ? " for prompt "+params[2] : ""),
onClickEncryptionChangePassword,
null,
null,
params[3]);
if(params[2] && params[2].length > 0) {
theButton.setAttribute("promptString", params[2]);
}
};
config.macros.EncryptionDecryptAll = {};
config.macros.EncryptionDecryptAll.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
var theButton = createTiddlyButton(place,
(params[0] && params[0].length > 0) ? params[0] : "Decrypt All",
(params[1] && params[1].length > 0) ? params[1] : "Decrypt All Tiddlers" + ((params[2] && params[2].length > 0) ? " for prompt "+params[2] : " for a given 'prompt string'"),
onClickEncryptionDecryptAll,
null,
null,
params[3]);
if(params[2] && params[2].length > 0) {
theButton.setAttribute("promptString", params[2]);
}
};
config.macros.EncryptionDecryptThis = {};
config.macros.EncryptionDecryptThis.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
var theButton = createTiddlyButton(place,
(params[0] && params[0].length > 0) ? params[0] : "Decrypt",
(params[1] && params[1].length > 0) ? params[1] : "Decrypt this Tiddler",
onClickEncryptionDecryptThis,
null,
null,
params[3]);
if(params[2] && params[2].length > 0) {
theButton.setAttribute("theTiddler", params[2]);
}
};
// toolbar button to decrypt tiddlers.
config.commands.decryptThis = {
text: "decrypt",
tooltip: "Decrypt this tiddler",
isEnabled : function(tiddler) {
// Only show decrypt button if tiddler is tagged as Decrypt(
if(tiddler.tags.join().indexOf('Decrypt(') == -1) {
return false;
} else {
return true;
}
},
handler: function(event, src, title) {
encryptionGetAndDecryptTiddler(title);
return false;
}
};
// core version 2.4 or above get a 'decrypt' button in the toolbar.
if(config.shadowTiddlers && config.shadowTiddlers.ToolbarCommands && config.shadowTiddlers.ToolbarCommands.indexOf('decryptThis') == -1) {
// put our toolbar button in before the edit button.
// won't work if editTiddler is not the default item (prefixed with plus)
config.shadowTiddlers.ToolbarCommands.replace(/\+editTiddler/,'decryptThis +editTiddler');
}
// Called by the EncryptionChangePassword macro/button
// Also invoked by the callback for password entry
function onClickEncryptionChangePassword(eventObject) {
var promptString;
if(!promptString && this.getAttribute) {
promptString = this.getAttribute("promptString");
}
// I do call this function directly
if(!promptString && typeof(eventObject) == "string") {
promptString = eventObject;
}
if(!promptString) {
promptString = prompt("Enter 'prompt string' to change password for:","");
}
if(!promptString) {
return;
}
if(! config.encryptionPasswords[promptString]) {
var changePasswordContext = {changePasswordPromptString: promptString,
callbackFunction: MyChangePasswordPromptCallback_TiddlerEncryptionPlugin};
MyPrompt_TiddlerEncryptionPlugin(promptString,"",changePasswordContext);
return;
// Callback function will re-invoke this function
}
// Decrypt ALL tiddlers for that prompt
onClickEncryptionDecryptAll(promptString);
// Now ditch the cached password, this will force the re-request for the new password, on save.
displayMessage("Save TiddlyWiki to set new password for '"+promptString+"'");
config.encryptionPasswords[promptString] = null;
// mark store as dirty so a save will be requrested.
store.setDirty(true);
autoSaveChanges();
return;
};
// Called by the password entry form when the user clicks 'OK' button.
function MyChangePasswordPromptCallback_TiddlerEncryptionPlugin(context) {
config.encryptionPasswords[context.passwordPrompt] = context.password;
onClickEncryptionChangePassword(context.changePasswordPromptString);
return;
}
// Called by the EncryptionDecryptThis macro/button
function onClickEncryptionDecryptThis() {
var theTiddler = this.getAttribute("theTiddler");
if(!theTiddler) {
return;
}
encryptionGetAndDecryptTiddler(theTiddler);
return;
};
function encryptionGetAndDecryptTiddler(title) {
config.encryptionReEnterPasswords = true;
try {
theTiddler = store.getTiddler(title);
config.encryptionReEnterPasswords = false;
story.refreshAllTiddlers();
} catch (e) {
if(e == "DecryptionFailed") {
displayMessage("Decryption failed");
return;
}
} // catch
return;
};
// called by the EncryptionDecryptAlll macro/button
// Also called by the callback after the user clicks 'OK' button on the password entry form
function onClickEncryptionDecryptAll(eventObject) {
var promptString;
if(!promptString && this.getAttribute) {
promptString = this.getAttribute("promptString");
}
// I do call this function directly
if(!promptString && typeof(eventObject) == "string") {
promptString = eventObject;
}
if(!promptString) {
promptString = "";
}
// Loop through all tiddlers, looking to see if there are any Decrypt(promptString) tagged tiddlers
// If there are, check to see if their password has been cached.
// If not, ask for the first one that is missing, that we find
// the call back function will store that password then invoke this function again,
// which will repeat the whole process. If we find all passwords have been cached
// then we will finally do the decryptAll functionality, which will then
// be able to decrypt all the required tiddlers, without prompting.
// We have to do this whole rigmarole because we are using a 'form' to enter the password
// rather than the 'prompt()' function - which shows the value of the password.
var tagToSearchFor="Decrypt("+promptString;
config.encryptionReEnterPasswords = true;
var promptGenerated = false;
store.forEachTiddler(function(store,tiddler) {
// Note, there is no way to stop the forEachTiddler iterations
if(!promptGenerated && tiddler && tiddler.tags) {
for(var ix=0; ix<tiddler.tags.length && !promptGenerated; ix++) {
if(tiddler.tags[ix].indexOf(tagToSearchFor) == 0) {
var tag = tiddler.tags[ix];
var lastBracket=tag.lastIndexOf(")");
if(lastBracket >= 0) {
// Ok, tagged with Encrypt(passwordPrompt)
// extract the passwordPrompt name
var passwordPromptString=tag.substring(8,lastBracket);
if(!config.encryptionPasswords[passwordPromptString]) {
// no password cached, prompt and cache it, rather than decryptAll
// callback from prompting form will resume decryptAll attempt.
var decryptAllContext = {decryptAllPromptString: promptString,
callbackFunction: MyDecryptAllPromptCallback_TiddlerEncryptionPlugin};
MyPrompt_TiddlerEncryptionPlugin(passwordPromptString,"",decryptAllContext);
promptGenerated = true;
} // if(!config.encryptionPasswords
} // if(lastBracket
} // if(tiddler.tags[ix]..
} // for
} // if
}); // store.forEachTiddler
// If we get here, all passwords have been cached.
if(!promptGenerated) {
config.encryptionReEnterPasswords = false;
// Now do the decrypt all functionality
try {
store.forEachTiddler(function(store,tiddler) {
// Note, there is no way to stop the forEachTiddler iterations
if(tiddler && tiddler.tags) {
for(var ix=0; ix<tiddler.tags.length; ix++) {
if(tiddler.tags[ix].indexOf(tagToSearchFor) == 0) {
try {
CheckTiddlerForDecryption_TiddlerEncryptionPlugin(tiddler);
} catch (e) {
displayMessage("Decryption of '"+tiddler.title+"' failed.");
// throw e;
}
} // if(tiddler.tags
} // for
} // if
}); // store.forEachTiddler
displayMessage("All tiddlers" + (promptString != "" ? " for '"+promptString+"'" : "") + " have been decrypted");
} catch (e) {
if(e == "DecryptionFailed") {
return;
}
} // catch
}
return;
};
function MyDecryptAllPromptCallback_TiddlerEncryptionPlugin(context) {
config.encryptionPasswords[context.passwordPrompt] = context.password;
// restart the decryptAll process again after the user has entered a password.
onClickEncryptionDecryptAll(context.decryptAllPromptString);
return;
}
saveChanges_TiddlerEncryptionPlugin = saveChanges;
saveChanges = function(onlyIfDirty,tiddlers) {
// Loop through all tiddlers, looking to see if there are any Encrypt(string) tagged tiddlers
// If there are, check to see if their password has been cached.
// If not, ask for the first one that is missing, that we find
// the call back function will store that password then invoke this function again,
// which will repeat the whole process. If we find all passwords have been cached
// then we will finally call the original saveChanges() function, which will then
// be able to save the tiddlers.
// We have to do this whole rigmarole because we are using a 'form' to enter the password
// rather than the 'prompt()' function - which shows the value of the password.
config.encryptionReEnterPasswords = true;
var promptGenerated = false;
store.forEachTiddler(function(store,tiddler) {
if(!promptGenerated && tiddler && tiddler.tags) {
for(var ix=0; ix<tiddler.tags.length && !promptGenerated; ix++) {
if(tiddler.tags[ix].indexOf("Encrypt(") == 0) {
var tag = tiddler.tags[ix];
var lastBracket=tag.lastIndexOf(")");
if(lastBracket >= 0) {
// Ok, tagged with Encrypt(passwordPrompt)
// extract the passwordPrompt name
var passwordPrompt=tag.substring(8,lastBracket);
if(!config.encryptionPasswords[passwordPrompt]) {
// no password cached, prompt and cache it, rather than save
var saveContext = {onlyIfDirty: onlyIfDirty,
tiddlers: tiddlers,
callbackFunction: MySavePromptCallback_TiddlerEncryptionPlugin};
MyPrompt_TiddlerEncryptionPlugin(passwordPrompt,"",saveContext);
promptGenerated = true;
} // if(!config.encryptionPasswords
} // if(lastBracket
} // if(tiddler.tags[ix]..
} // for
} // if
}); // store.forEachTiddler
// If we get here, all passwords have been cached.
if(!promptGenerated) {
config.encryptionReEnterPasswords = false;
saveChanges_TiddlerEncryptionPlugin(onlyIfDirty,tiddlers);
}
return;
}
function MySavePromptCallback_TiddlerEncryptionPlugin(context) {
config.encryptionPasswords[context.passwordPrompt] = context.password;
// validate the password entered by attempting to decrypt all tiddlers
// with the same encryption prompt string.
onClickEncryptionDecryptAll(context.passwordPrompt);
// restart the save process again
saveChanges(context.onlyIfDirty, context.tiddlers);
return;
}
store.getSaver().externalizeTiddler_TiddlerEncryptionPlugin = store.getSaver().externalizeTiddler;
store.getSaver().externalizeTiddler = function(store, tiddler) {
// Ok, got the tiddler, track down the passwordPrompt in the tags.
// track down the Encrypt(passwordPrompt) tag
if(tiddler && tiddler.tags) {
for(var g=0; g<tiddler.tags.length; g++) {
var tag = tiddler.tags[g];
if(tag.indexOf("Encrypt(") == 0) {
var lastBracket=tag.lastIndexOf(")");
if(lastBracket >= 0) {
// Ok, tagged with Encrypt(passwordPrompt)
// extract the passwordPrompt name
var passwordPrompt=tag.substring(8,lastBracket);
// Ok, Encrypt this tiddler!
var decryptedSHA1 = Crypto.hexSha1Str(tiddler.text);
var password = GetAndSetPasswordForPrompt_TiddlerEncryptionPlugin(passwordPrompt);
if(password) {
var encryptedText = TEAencrypt(tiddler.text, password);
encryptedText = StringToHext_TiddlerEncryptionPlugin(encryptedText);
tiddler.text = "Encrypted("+decryptedSHA1+")\n"+encryptedText;
// Replace the Tag with the Decrypt() tag
tiddler.tags[g]="Decrypt("+passwordPrompt+")";
// let the store know it's dirty
store.setDirty(tiddler.title, true);
// prevent searches on encrypted tiddlers, still nice to search on title though.
if(config.options.chkExcludeEncryptedFromSearch == true) {
tiddler.tags.push("excludeSearch");
}
// prevent lists of encrypted tiddlers
if(config.options.chkExcludeEncryptedFromLists == true) {
tiddler.tags.push("excludeLists");
}
} else {
// do not encrypt - no password entered
}
break;
} // if (lastBracket...
} // if(tag.indexOf(...
} // for(var g=0;...
} // if(tiddler.tags...
// Then, finally, do the save by calling the function we override.
return store.getSaver().externalizeTiddler_TiddlerEncryptionPlugin(store, tiddler);
};
function CheckTiddlerForDecryption_TiddlerEncryptionPlugin(tiddler) {
if(tiddler && tiddler.tags) {
for(var g=0; g<tiddler.tags.length; g++) {
var tag = tiddler.tags[g];
if(tag.indexOf("Decrypt(") == 0) {
var lastBracket=tag.lastIndexOf(")");
if(lastBracket >= 0) {
if(tiddler.text.substr(0,10) == "Encrypted(") {
var closingSHA1Bracket = tiddler.text.indexOf(")");
var decryptedSHA1 = tiddler.text.substring(10, closingSHA1Bracket);
// Ok, tagged with Decrypt(passwordPrompt)
// extract the passwordPrompt name
var passwordPrompt=tag.substring(8,lastBracket);
// Ok, Decrypt this tiddler!
var decryptedText = tiddler.text.substr(closingSHA1Bracket+2);
decryptedText = HexToString_TiddlerEncryptionPlugin(decryptedText);
// prompt("Decryption request for Tiddler '"+tiddler.title+"'");
var password = GetAndSetPasswordForPromptToDecrypt_TiddlerEncryptionPlugin(passwordPrompt);
if(password) {
decryptedText = TEAdecrypt(decryptedText, password );
var thisDecryptedSHA1 = Crypto.hexSha1Str(decryptedText);
if(decryptedSHA1 == thisDecryptedSHA1) {
tiddler.text = decryptedText;
// Replace the Tag with the Encrypt() tag
tiddler.tags[g]="Encrypt("+passwordPrompt+")";
if(tiddler.tags[tiddler.tags.length-1] == 'excludeLists') {
// Remove exclude lists only if it's the last entry
// as it's automatically put there by encryption
tiddler.tags.length--;
}
if(tiddler.tags[tiddler.tags.length-1] == 'excludeSearch') {
// Remove exclude search only if it's the last entry
// as it's automatically put there by encryption
tiddler.tags.length--;
}
} else {
// Did not decrypt, discard the password from the cache
config.encryptionPasswords[passwordPrompt] = null;
config.encryptionReEnterPasswords = false;
throw "DecryptionFailed";
}
} else {
// no password supplied, dont bother trying to decrypt
config.encryptionReEnterPasswords = false;
throw "DecryptionFailed";
}
} else {
// Tagged as encrypted but not expected format, just leave it unchanged
}
break; // out of for loop
} // if (lastBracket...
} // if(tag.indexOf(...
} // for(var g=0;...
} // if (tiddler && tags)
return tiddler;
};
store.getTiddler_TiddlerEncryptionPlugin = store.getTiddler;
store.getTiddler = function(title) {
var tiddler = store.getTiddler_TiddlerEncryptionPlugin(title);
if(tiddler) { // shadow tiddlers are not expected to be encrypted.
try {
return CheckTiddlerForDecryption_TiddlerEncryptionPlugin(tiddler);
} catch (e) {
if (config.options.chkShowDecryptButtonInContent == true) {
if(e == "DecryptionFailed") {
var tiddler = store.getTiddler("DecryptionFailed");
if(!tiddler) {
tiddler = new Tiddler();
tiddler.set(title,
"<<EncryptionDecryptThis \"Decrypt\" \"Decrypt this tiddler\" \""+title+"\">>",
config.views.wikified.shadowModifier,
version.date,[],version.date);
}
return tiddler;
} // if(e)
}
return(tiddler);
} // catch
} // if(tiddler) {
return null;
};
store.getTiddlerText_TiddlerEncryptionPlugin = store.getTiddlerText;
store.getTiddlerText = function(title,defaultText) {
// Simply retrieve the tiddler, normally, if it requires decryption, it will be decrypted
var decryptedTiddler = store.getTiddler(title);
if(decryptedTiddler) {
return decryptedTiddler.text;
}
//Ok, rather than duplicate all the core code, the above code should fail if we reach here
// let the core code take over.
return store.getTiddlerText_TiddlerEncryptionPlugin(title,defaultText);
};
// Given a prompt, search our cache to see if we have already entered the password.
// Can return null if the user enters nothing.
function MyPrompt_TiddlerEncryptionPlugin(promptString,defaultValue,context) {
if(!context) {
context = {};
}
context.passwordPrompt = promptString;
PasswordPrompt.prompt(MyPromptCallback_TiddlerEncryptionPlugin, context);
return;
}
function MyPromptCallback_TiddlerEncryptionPlugin(context) {
if(context.callbackFunction) {
context.callbackFunction(context);
} else {
config.encryptionPasswords[context.passwordPrompt] = context.password;
story.refreshAllTiddlers(true);
}
return;
}
function GetAndSetPasswordForPrompt_TiddlerEncryptionPlugin(promptString) {
if(!config.encryptionPasswords[promptString]) {
config.encryptionPasswords[promptString] = MyPrompt_TiddlerEncryptionPlugin(promptString, "");
}
return config.encryptionPasswords[promptString]; // may be null, prompt can be cancelled.
}
function GetAndSetPasswordForPromptToDecrypt_TiddlerEncryptionPlugin(promptString) {
if(config.encryptionReEnterPasswords) {
return GetAndSetPasswordForPrompt_TiddlerEncryptionPlugin(promptString);
} else {
return config.encryptionPasswords[promptString];
}
}
// Make the encrypted tiddlies look a little more presentable.
function StringToHext_TiddlerEncryptionPlugin(theString) {
var theResult = "";
for(var i=0; i<theString.length; i++) {
var theHex = theString.charCodeAt(i).toString(16);
if(theHex.length<2) {
theResult += "0"+theHex;
} else {
theResult += theHex;
}
if(i && i % 32 == 0)
theResult += "\n";
}
return theResult;
}
function HexToString_TiddlerEncryptionPlugin(theString) {
var theResult = "";
for(var i=0; i<theString.length; i+=2) {
if(theString.charAt(i) == "\n") {
i--; // cause us to skip over the newline and resume
continue;
}
theResult += String.fromCharCode(parseInt(theString.substr(i, 2),16));
}
return theResult;
}
//
// Heavily leveraged from http://trac.tiddlywiki.org/browser/Trunk/contributors/SaqImtiaz/verticals/Hesperian/PasswordPromptPlugin.js Revision 5635
//
PasswordPrompt ={
prompt : function(callback,context){
if (!context) {
context = {};
}
var box = createTiddlyElement(document.getElementById("contentWrapper"),'div','passwordPromptBox');
box.innerHTML = store.getTiddlerText('PasswordPromptTemplate');
box.style.position = 'absolute';
this.center(box);
document.getElementById('promptDisplayField').value = context.passwordPrompt;
var passwordInputField = document.getElementById('passwordInputField');
passwordInputField.onkeyup = function(ev) {
var e = ev || window.event;
if(e.keyCode == 10 || e.keyCode == 13) { // Enter
PasswordPrompt.submit(callback, context);
}
};
passwordInputField.focus();
document.getElementById('passwordPromptSubmitBtn').onclick = function(){PasswordPrompt.submit(callback,context);};
document.getElementById('passwordPromptCancelBtn').onclick = function(){PasswordPrompt.cancel(callback,context);};
},
center : function(el){
var size = this.getsize(el);
el.style.left = (Math.round(findWindowWidth()/2) - (size.width /2) + findScrollX())+'px';
el.style.top = (Math.round(findWindowHeight()/2) - (size.height /2) + findScrollY())+'px';
},
getsize : function (el){
var x = {};
x.width = el.offsetWidth || el.style.pixelWidth;
x.height = el.offsetHeight || el.style.pixelHeight;
return x;
},
submit : function(cb,context){
context.passwordPrompt = document.getElementById('promptDisplayField').value;
context.password = document.getElementById('passwordInputField').value;
var box = document.getElementById('passwordPromptBox');
box.parentNode.removeChild(box);
cb(context);
return false;
},
cancel : function(cb,context){
var box = document.getElementById('passwordPromptBox');
box.parentNode.removeChild(box);
return false;
},
setStyles : function(){
setStylesheet(
"#passwordPromptBox dd.submit {margin-left:0; font-weight: bold; margin-top:1em;}\n"+
"#passwordPromptBox dd.submit .button {padding:0.5em 1em; border:1px solid #ccc;}\n"+
"#passwordPromptBox dt.heading {margin-bottom:0.5em; font-size:1.2em;}\n"+
"#passwordPromptBox {border:1px solid #ccc;background-color: #eee;padding:1em 2em;}",'passwordPromptStyles');
},
template : '<form action="" onsubmit="return false;" id="passwordPromptForm">\n'+
' <dl>\n'+
' <dt class="heading">Please enter the password:</dt>\n'+
' <dt>Prompt:</dt>\n'+
' <dd><input type="text" readonly id="promptDisplayField" class="display"/></dd>\n'+
' <dt>Password:</dt>\n'+
' <dd><input type="password" tabindex="1" class="input" id="passwordInputField"/></dd>\n'+
' <dd class="submit">\n'+
' <a tabindex="2" href="javascript:;" class="button" id="passwordPromptSubmitBtn">OK</a>\n'+
' <a tabindex="3" href="javascript:;" class="button" id="passwordPromptCancelBtn">Cancel</a>\n'+
' </dd>\n'+
' </dl>\n'+
'</form>',
init : function(){
config.shadowTiddlers.PasswordPromptTemplate = this.template;
this.setStyles();
}
};
PasswordPrompt.init();
// http://www.movable-type.co.uk/scripts/tea-block.html
//
// TEAencrypt: Use Corrected Block TEA to encrypt plaintext using password
// (note plaintext & password must be strings not string objects)
//
// Return encrypted text as string
//
function TEAencrypt(plaintext, password)
{
if (plaintext.length == 0) return(''); // nothing to encrypt
// 'escape' plaintext so chars outside ISO-8859-1 work in single-byte packing, but keep
// spaces as spaces (not '%20') so encrypted text doesn't grow too long (quick & dirty)
var asciitext = escape(plaintext).replace(/%20/g,' ');
var v = strToLongs(asciitext); // convert string to array of longs
if (v.length <= 1) v[1] = 0; // algorithm doesn't work for n<2 so fudge by adding a null
var k = strToLongs(password.slice(0,16)); // simply convert first 16 chars of password as key
var n = v.length;
var z = v[n-1], y = v[0], delta = 0x9E3779B9;
var mx, e, q = Math.floor(6 + 52/n), sum = 0;
while (q-- > 0) { // 6 + 52/n operations gives between 6 & 32 mixes on each word
sum += delta;
e = sum>>>2 & 3;
for (var p = 0; p < n; p++) {
y = v[(p+1)%n];
mx = (z>>>5 ^ y<<2) + (y>>>3 ^ z<<4) ^ (sum^y) + (k[p&3 ^ e] ^ z);
z = v[p] += mx;
}
}
var ciphertext = longsToStr(v);
return escCtrlCh(ciphertext);
}
//
// TEAdecrypt: Use Corrected Block TEA to decrypt ciphertext using password
//
function TEAdecrypt(ciphertext, password)
{
if (ciphertext.length == 0) return('');
var v = strToLongs(unescCtrlCh(ciphertext));
var k = strToLongs(password.slice(0,16));
var n = v.length;
var z = v[n-1], y = v[0], delta = 0x9E3779B9;
var mx, e, q = Math.floor(6 + 52/n), sum = q*delta;
while (sum != 0) {
e = sum>>>2 & 3;
for (var p = n-1; p >= 0; p--) {
z = v[p>0 ? p-1 : n-1];
mx = (z>>>5 ^ y<<2) + (y>>>3 ^ z<<4) ^ (sum^y) + (k[p&3 ^ e] ^ z);
y = v[p] -= mx;
}
sum -= delta;
}
var plaintext = longsToStr(v);
// strip trailing null chars resulting from filling 4-char blocks:
plaintext = plaintext.replace(/\0+$/,'');
return unescape(plaintext);
}
// supporting functions
function strToLongs(s) { // convert string to array of longs, each containing 4 chars
// note chars must be within ISO-8859-1 (with Unicode code-point < 256) to fit 4/long
var l = new Array(Math.ceil(s.length/4));
for (var i=0; i<l.length; i++) {
// note little-endian encoding - endianness is irrelevant as long as
// it is the same in longsToStr()
l[i] = s.charCodeAt(i*4) + (s.charCodeAt(i*4+1)<<8) +
(s.charCodeAt(i*4+2)<<16) + (s.charCodeAt(i*4+3)<<24);
}
return l; // note running off the end of the string generates nulls since
} // bitwise operators treat NaN as 0
function longsToStr(l) { // convert array of longs back to string
var a = new Array(l.length);
for (var i=0; i<l.length; i++) {
a[i] = String.fromCharCode(l[i] & 0xFF, l[i]>>>8 & 0xFF,
l[i]>>>16 & 0xFF, l[i]>>>24 & 0xFF);
}
return a.join(''); // use Array.join() rather than repeated string appends for efficiency
}
function escCtrlCh(str) { // escape control chars etc which might cause problems with encrypted texts
return str.replace(/[\0\t\n\v\f\r\xa0'"!]/g, function(c) { return '!' + c.charCodeAt(0) + '!'; });
}
function unescCtrlCh(str) { // unescape potentially problematic nulls and control characters
return str.replace(/!\d\d?\d?!/g, function(c) { return String.fromCharCode(c.slice(1,-1)); });
}
//}}}
/***
|Name|TiddlyLifePlugin|
|Source|http://www.TiddlyTools.com/#TiddlyLifePlugin|
|Documentation|http://www.TiddlyTools.com/#TiddlyLifePlugin|
|Version|1.6.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Cellular Automata: Conway's "Game of Life"|
!!!!!Documentation
<<<
[[TiddlyLife]] is a TiddlyWiki-enabled javascript version of Conway's "Game of Life" cellular automata simulator. It provides a "life matrix" on which to place cells, run the simulation, and observe the results. The speed of the simulation is related to the total size of the matrix (i.e., rows X cols): the larger the matrix, the longer it takes to compute each 'generation' of cells.
You can set the number of rows and columns in the matrix, as well as the size of each cell and the color of the cells, grid, and background. You can use the mouse to click/drag over the grid to add/delete cells (hold shift to add "walls"). The current life matrix can be saved as text in a tiddler and then reloaded later from a popup list of tiddlers tagged with<<tag tiddlyLife>>
Please see Wikipedia for an overview of [[Conway's "Game of Life"|http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life]].
<<<
!!!!!Syntax
<<<
{{{
<<life cellcolor:... gridcolor:... bgcolor:... wallcolor:...
cellsize:... gridwidth:... delay:... limit:... stability:...
autostart nomenu nostats noedit width:... height:... tid:...>>
}}}
where all parameters are optional (default values are shown in parentheses):
*''cellcolor:'' (//green//), ''gridcolor:'' (//#111//), ''bgcolor:'' (//black//) and ''wallcolor:'' (//gray//)<br>are CSS color names or RGB values (e.g.: "black", "blue", "#fff", "#9af", etc.)
*''cellsize:'' (//1em//), and ''gridwidth:'' (//1px//)<br>are CSS dimensions, including units (e.g., px,em,cm,in)
*''delay:'' (//0//)<br>delay time (in msec) between simulation ticks (a larger number results in a slower simulation, but also leaves more CPU cycles available for other processes)
*''limit:'' (//10000//)<br>automatically stop stimulation after the indicated number of generations (use 0 for no limit)
*''stability:'' (//500//)<br>automatically stop simulation if population count remains stable for the indicated number of generations (use 0 for no limit)
*''autostart'' (//keyword//)<br>when present, causes the simulation to begin running as soon as the macro is rendered
*''nomenu'' (//keyword//)<br>when present, suppresses display of command menu (use with ''autostart'')
*''nostats'' (//keyword//)<br>when present, suppresses display of the current matrix statistics (generation #, population count/min/avg/max, birthrate/deathrate, average age)
*''noedit'' (//keyword//)<br>when present, prevent hand editing of cells in the matrix. Instead, clicking on the matrix starts/stops the simulation (useful with ''nomenu'' and ''autostart'')
*''width:'' (//30//) and ''height:'' (//30//)<br>are dimensions for an empty life matrix
*''tid:'' (//no default//)<br>specifies a tiddler containing a saved life matrix definition. note: when using a saved matrix, the width/height are determined by the stored definition and any width/height macro parameters that are present will be ignored.
<<<
!!!!!Examples
<<<
"Multi-cellular organisms" can be constructed by arranging blocks in specific patterns that exhibit emergent behaviors such as movement, symmetry, oscillation and generative abilities. Two well-known organisms that are [[discussed in the Wikipedia article|http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life]] are ''//gliders//'' and ''//Gosper's glider gun//'':
[[GliderDance]]: many small moving organisms just missing each other!
{{{<<life cellsize:.8em tid:GliderDance>>}}}
<<life cellsize:.8em tid:GliderDance>>
[[GliderGun]]: generates a stream of gliders that hits a wall
{{{<<life cellsize:.6em tid:GliderGun>>}}}
<<life cellsize:.6em tid:GliderGun>>
... and here's an ''empty life matrix'' for you to play with:
{{{<<life>>}}}
<<life>>
<<<
!!!!!Revisions
<<<
2008.10.11 [1.6.5] added 'step' command. Also, for performance, removed birth/death stats and don't display average age (but //do// calculate it)
2008.10.10 [1.6.0] added birthrate, deathrate, and average age to statistics
2008.10.09 [1.5.0] use //named// params. changed matrix values: 0==empty, >0==alive, <0==wall, where value=generation # in which cell was created
2008.10.08 [1.4.0] added 'stability' and 'limit' options (replaces 'autostop' checkbox)
2008.10.08 [1.3.0] added optional 'autostart', 'nomenu' and 'nostats' macro params
2008.10.07 [1.2.1] fixed update handling so multiple timers will no longer be created
2008.10.06 [1.2.0] added support for walls (unchanging dead cells) using dead="-", alive="O", wall="#"
2008.10.06 [1.1.1] redraw optimization: 300% speed improvement by setting CSS only when cell state *changes*
2008.10.05 [1.1.0] drag to draw (set/clear) multiple cells, new option controls (rows,cols,cellsize,delay,autostop), popup list for opening saved matrix
2008.10.04 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.TiddlyLifePlugin= {major: 1, minor: 6, revision: 5, date: new Date(2008,10,11)};
config.shadowTiddlers.TiddlyLife="<<life>>";
config.macros.life={
//}}}
// // DEFAULTS
//{{{
cellcolor: "green",
cellsize: "1em",
gridcolor: "#111",
gridwidth: "1px",
bgcolor: "black",
wallcolor: "gray",
width: 30,
height: 30,
stability: 300,
limit: 5000,
delay: 0,
//}}}
// // TRANSLATE
//{{{
lifeTag: "tiddlyLife",
titlePrompt: "Enter a new tiddler title",
openErr: "Could not open '%0'",
limitMsg: "stopped: completed %0 generations",
stableMsg: "stopped: no growth for %0 generations",
cellEditTip: "CLICK=set/clear, SHIFT-CLICK=set wall",
noEditTip: "CLICK=start/stop simulation",
startLabel: "start",
stopLabel: "<b>STOP</b>",
stats: "gen: <b>%0</b> pop: <b>%1</b> min: <b>%2</b> avg: <b>%3</b> max: <b>%4</b> %5",
cmds: "<a href='#' title='start/stop simulation'\
onclick='return config.macros.life.toggle(\"%0\")'>%1</a> \
| <a href='#' title='advance simulation by one generation'\
onclick='return config.macros.life.step(\"%0\")'>step</a> \
| <a href='#' title='reload the starting life matrix'\
onclick='return config.macros.life.reset(\"%0\")'>reset</a> \
| <a href='#' title='clear the life matrix'\
onclick='return config.macros.life.clear(\"%0\")'>clear</a> \
| <a href='#' title='load a life matrix from a tiddler'\
onclick='return config.macros.life.open(this,event,\"%0\")'>open</a> \
| <a href='#' title='save the current life matrix to a tiddler'\
onclick='return config.macros.life.save(\"%0\")'>save</a> \
| <a href='#' title='change simulation option settings'\
onclick='var s=this.nextSibling.style; var show=s.display==\"none\"; \
s.display=show?\"block\":\"none\"; \
return false;'>options</a><span style='display:none'>%2</span>",
opts: "delay:<input type='text' title='delay between generations (msec)' \
value='%1' style='width:4em;font-size:90%;text-align:center;'>\
limit:<input type='text' title='automatically stop after N generations (0=no limit)' \
value='%2' style='width:4em;font-size:90%;text-align:center;'>\
stability:<input type='text' title='stop if population count is stable for N generations (0=no limit)'\
value='%3' style='width:4em;font-size:90%;text-align:center;'><br>\
rows:<input type='text' title='matrix height' \
value='%4' style='width:3em;font-size:90%;text-align:center;'>\
cols:<input type='text' title='matrix width' \
value='%5' style='width:3em;font-size:90%;text-align:center;'>\
cells:<input type='text' title='cellsize' \
value='%6' style='width:3em;font-size:90%;text-align:center;'>\
<input type='button' value='OK' style='font-size:90%;' \
title='change the life matrix dimensions' \
onclick='var ins=this.parentNode.getElementsByTagName(\"input\"); \
var t=ins[0].value; var l=ins[1].value; var a=ins[2].value; \
var h=ins[3].value; var w=ins[4].value; var s=ins[5].value; \
return config.macros.life.setoptions(\"%0\",w,h,s,t,a,l)'>",
msgfmt: "<br><span title='use \"options\" command to change autostop settings' \
onclick='this.style.display=\"none\"' \
style='display:block;position:absolute;padding:0 .5em;cursor:pointer; \
margin:.5em;color:%1;background-color:%2;border:1px solid %1'>%3</span>",
//}}}
// // GENERAL UTILITIES
//{{{
empty: function(w,h) { // generate an empty matrix
var m=[]; for (var r=0; r<h; r++) { m[r]=[]; for (var c=0; c<w; c++) m[r][c]=0; } return m;
},
paste: function(row,col,m1,m2) { // copy one matrix into another
for (var r=row; r<m1.length && r<m2.length; r++)
for (var c=col; c<m1[r].length && c<m2[r].length; c++)
m2[r][c]=m1[r][c];
},
zeroPad: function(v,m) { // formatting for population stats
var t=("0000"+v.toString());
return t.substr(t.length-Math.max(m.toString().length,v.toString().length));
},
getValue: function(s) { // cell value from stored matrix symbol
return s=='O'?1:s=='#'?-1:0;
},
getSymbol: function(v) { // stored matrix symbol from cell value
return v>0?'O':v<0?'#':'-';
},
getColor: function(v,d) { // color from cell value
return v>0?d.cellcolor:v<0?d.wallcolor:'';
},
getAge: function(v,d) { // age of a cell or wall
return v?(d.gen||1)-Math.abs(v):0;
},
isAlive: function(v) { // 0 if dead, 1 if alive
return v>0;
},
isWall: function(v) { // 1 if cell is a wall
return v<0;
},
isAncient: function(v,d) { // true if cell age is more than ten times the average age
return d.avgage>0 && this.getAge(v,d)>10*d.avgage;
},
//}}}
// // MACRO HANDLER
//{{{
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var autostart =params.contains("autostart");
var nomenu =params.contains("nomenu");
var nostats =params.contains("nostats");
var noedit =params.contains("noedit");
params = paramString.parseParams("anon",null,true,false,false);
var cellcolor =getParam(params,"cellcolor",this.cellcolor);
var wallcolor =getParam(params,"wallcolor",this.wallcolor);
var cellsize =getParam(params,"cellsize",this.cellsize);
var gridcolor =getParam(params,"gridcolor",this.gridcolor);
var gridwidth =getParam(params,"gridwidth",this.gridwidth);
var bgcolor =getParam(params,"bgcolor",this.bgcolor);
var tid =getParam(params,"tid",this.tid);
var w =getParam(params,"rows",this.width);
var h =getParam(params,"cols",this.height);
var delay =getParam(params,"delay",this.delay);
var stability =getParam(params,"stability",this.stability);
var limit =getParam(params,"limit",this.limit);
var m=this.load(tid); if (!m) var m=this.empty(w,h);
var id="tiddlyLife_"+new Date().getTime()+Math.random();
var e=createTiddlyElement(place,"span",id,"tiddlyLife");
e.data={w:w, h:h, tid:tid, matrix:m, gen:0, stopped:!autostart,
gencount:0, stable:0, total:0, birthrate:0, deathrate:0, age:0,
cellcolor:cellcolor, wallcolor:wallcolor, gridcolor:gridcolor, bgcolor:bgcolor,
cellsize:cellsize, gridwidth:gridwidth, delay:delay, stability:stability, limit:limit,
nostats:nostats, nomenu:nomenu, noedit:noedit };
this.draw(id); if (autostart) this.go(id);
},
//}}}
// // COMMAND HANDLERS
//{{{
toggle: function(id) { // toggle simulation
var e=document.getElementById(id); if (!e) return; var d=e.data; var m=d.matrix;
if (d.stopped) this.go(id); else this.stop(id);
return false;
},
go: function(id) { // start simulation and set command text
var e=document.getElementById(id); if (!e) return; var d=e.data; var m=d.matrix;
var b=e.getElementsByTagName("a")[0]; if (b) b.innerHTML=this.stopLabel;
d.stopped=false; d.stable=0; d.gencount=0; clearTimeout(d.timer); this.refresh(id);
return false;
},
stop: function(id) { // stop simulation and set command text
var e=document.getElementById(id); if (!e) return; var d=e.data; var m=d.matrix;
var b=e.getElementsByTagName("a")[0]; if (b) b.innerHTML=this.startLabel;
d.stopped=true; clearTimeout(d.timer);
return false;
},
reset: function(id) { // reload initial matrix
var e=document.getElementById(id); if (!e) return; var d=e.data;
var m=this.load(d.tid); if (!m) var m=this.empty(d.w,d.h);
this.stop(id); d.matrix=m; d.gen=0; this.draw(id);
return false;
},
clear: function(id) { // load empty matrix
var e=document.getElementById(id); if (!e) return; var d=e.data;
var tid=d.tid; d.tid=""; this.reset(id); d.tid=tid;
return false;
},
setoptions: function(id,w,h,s,t,a,l) { // options: width,height,cellsize,delaytime,autostop,limit
var e=document.getElementById(id); if (!e) return; var d=e.data; var m=d.matrix;
clearTimeout(d.timer); // stop simulation while changing matrix content
d.w=w; d.h=h; d.stability=a; d.limit=l; d.cellsize=s; d.delay=t;
var m2=this.empty(w,h); this.paste(0,0,m,m2); d.matrix=m2; this.draw(id);
d.min=Math.min(d.min,d.count); d.max=Math.max(d.max,d.count);
if (!d.stopped) d.timer=setTimeout('config.macros.life.refresh("'+id+'")',d.delay);
return false;
},
//}}}
// // I/O HANDLERS
//{{{
load: function(tid) { // read tiddler into matrix
var t=store.getTiddlerText(tid); if (!t) return;
var lines=t.split("\n"); var m=[];
if (lines[0]=="{{{") lines.shift();
if (lines[lines.length-1]=="}}}") lines.pop();
for (var r=0; r<lines.length; r++) { m[r]=[];
for (var c=0; c<lines[r].length; c++) m[r].push(this.getValue(lines[r].substr(c,1)));
}
return m;
},
save: function(id) { // write matrix to tiddler
var e=document.getElementById(id); if (!e) return; var d=e.data; var m=d.matrix;
var tid=d.tid; var msg=config.messages.overwriteWarning.format([tid]);
while (!tid||!tid.length ||(store.tiddlerExists(tid)&&!confirm(msg)))
{ tid=prompt(this.titlePrompt,tid); if (!tid||!tid.length) return false; }
d.tid=tid;
var out=[];
out.push('{{{');
for (var r=0; r<m.length; r++) { var row='';
for (var c=0; c<m[r].length; c++) row+=this.getSymbol(m[r][c]);
out.push(row);
}
out.push('}}}');
var t=store.getTiddler(tid);
var txt=out.join('\n');
var who=t&&config.options.chkForceMinorUpdate?t.modifier:config.options.txtUserName;
var when=t&&config.options.chkForceMinorUpdate?t.modified:new Date();
var tags=t?t.tags:[]; tags.pushUnique(this.lifeTag);
var fields=t?t.fields:{};
store.saveTiddler(tid,tid,txt,who,when,tags,fields);
story.displayTiddler(null,tid); story.refreshTiddler(tid,null,true);
return false;
},
open: function(here,event,id) { // select from a list of saved matrix tiddlers
var p=Popup.create(here); if (!p) return false;
p.style.padding="2px .5em";
var tids=store.getTaggedTiddlers(this.lifeTag);
for (var t=0; t<tids.length; t++) {
var b=createTiddlyButton(createTiddlyElement(p,"li"),tids[t].title,tids[t].title,
function() {
var cml=config.macros.life;
var id=this.getAttribute("id");
var e=document.getElementById(id); if (!e) return false; var d=e.data;
var tid=this.getAttribute("tid");
var m=cml.load(tid);
if (!m) { displayMessage(this.openErr.format([tid])); return false; }
cml.stop(id); d.tid=tid; d.matrix=m; d.gen=0; cml.draw(id);
return false;
});
b.setAttribute("id",id);
b.setAttribute("tid",tids[t].title);
}
Popup.show();
event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();
return false;
},
//}}}
// // EDIT HANDLERS
//{{{
mousedown: function(here,ev,id,r,c) { // start manual edit
var e=document.getElementById(id); if (!e) return; var d=e.data; var m=d.matrix;
d.savedstop=d.stopped; this.stop(id); d.draw=!this.isAlive(m[r][c])?(d.gen||1):0;
return this.setcell(here,id,r,c,ev&&ev.shiftKey?-(d.gen||1):d.draw);
},
mouseover: function(here,ev,id,r,c) { // drag edit
var e=document.getElementById(id); if (!e) return; var d=e.data; var m=d.matrix;
if (d.draw!==undefined) this.setcell(here,id,r,c,ev&&ev.shiftKey?-(d.gen||1):d.draw);
return false;
},
mouseup: function(here,ev,id,r,c) { // end manual edit
var e=document.getElementById(id); if (!e) return; var d=e.data; var m=d.matrix;
if (d.savedstop!==undefined) d.stopped=d.savedstop; if (!d.stopped) this.go(id);
d.draw=undefined; d.savedstop=undefined;
return false;
},
setcell: function(here,id,r,c,v) { // set cell content and revise stats display
var e=document.getElementById(id); if (!e) return; var d=e.data; var m=d.matrix;
if (m[r][c]==v) return;
if (this.isAlive(m[r][c]) && !this.isAlive(v)) { d.count--; d.min=Math.min(d.min,d.count); }
if (!this.isAlive(m[r][c]) && this.isAlive(v)) { d.count++; d.max=Math.max(d.max,d.count); }
m[r][c]=v; here.style.background=this.getColor(v,d);
this.showstats(id,'');
return false;
},
//}}}
// // RENDER
//{{{
draw: function(id) { // render entire tiddlyLife container (menu, stats, and table)
var e=document.getElementById(id); if (!e) return; var d=e.data; var m=d.matrix;
var out=[]; var count=0; var maxwidth=0;
var style="border:%0 solid %1;background:%2;height:%3 !important;width:%3; !important";
var onmousedown=d.noedit?"":"return config.macros.life.mousedown(this,event,'%4',%5,%6);";
var onmouseover=d.noedit?"":"return config.macros.life.mouseover(this,event,'%4',%5,%6);";
var onmouseup =d.noedit?"":"return config.macros.life.mouseup(this,event,'%4',%5,%6);";
var onclick =d.noedit?"return config.macros.life.toggle('%4');":"";
var tip="[%7,%8] "+(d.noedit?this.noEditTip:this.cellEditTip);
var cell='<td style="margin:0;padding:0;'+style +'" title="'+tip+'" onclick="'+onclick
+'" onmousedown="'+onmousedown+'" onmouseover="'+onmouseover+'" onmouseup="'+onmouseup+'"></td>';
out.push('<table style="table-layout:fixed;border-collapse:collapse;'
+'margin:0;padding:0;border:0;background-color:'+d.bgcolor+'">');
for (var r=0; r<m.length; r++) {
if (m[r].length>maxwidth) maxwidth=m[r].length;
out.push('<tr style="margin:0;padding:0;border:0;">');
for (var c=0; c<m[r].length; c++) {
out.push(cell.format([d.gridwidth,d.gridcolor,this.getColor(m[r][c],d),
d.cellsize,id,r,c,r+1,c+1]));
count+=this.isAlive(m[r][c]);
}
out.push('</tr>');
}
out.push('</table>');
d.count=count;
if (!d.gen) { d.gencount=d.stable=d.total=d.oldest=d.maxage=d.avgage=0; d.min=d.max=d.avg=count; }
var hdr=[];
if (!d.nomenu) hdr.push(this.cmds.format([id,d.stopped?this.startLabel:this.stopLabel,
this.opts.format([id,d.delay,d.limit,d.stability,m.length,maxwidth,d.cellsize])]));
if (!d.nostats) hdr.push('<div style="font-size:90%">'
+this.stats.format([d.gen,d.count,d.min,d.avg,d.max])+'</div>');
e.innerHTML=hdr.join('')+out.join('');
return false;
},
//}}}
// // RUN SIMULATION
//{{{
refresh: function(id) { // timer-based refresh cycle
var e=document.getElementById(id); if (!e) return; var d=e.data; var m=d.matrix;
this.step(id); if (!d.stopped) d.timer=setTimeout('config.macros.life.refresh("'+id+'")',d.delay);
return false;
},
step: function(id) { // calc new matrix, gather stats and display changes
var e=document.getElementById(id); if (!e) return; var d=e.data; var m=d.matrix;
// calculate next generation
var m2=[]; var count=agecount=agetotal=oldest=0; d.gen++; d.gencount++;
var table=e.getElementsByTagName("table")[0]; if (!table) return;
var rows=table.getElementsByTagName("tr");
for (var r=0; r<m.length; r++) {
m2[r]=[];
var cells=rows[r].getElementsByTagName("td");
for (var c=0; c<m[r].length; c++) {
var v=this.tick(d.gen,m,r,c); // apply Conway's 23/3 rule
m2[r].push(v);
var color=this.getColor(v,d);
if (cells[c].style.backgroundColor!=color)
cells[c].style.backgroundColor=color;
if (this.isAlive(v)) {
var a=this.getAge(v,d);
if (!this.isAncient(v,d)) { agecount++; agetotal+=a; }
oldest=Math.max(oldest,a);
count++;
}
}
}
d.matrix=m2; // update matrix
this.calcstats(id,count,agecount,agetotal,oldest); // calculate statistics
var msg=this.autostop(id); // autostop if conditions apply
this.showstats(id,msg); // show statistics and message (if any)
return false;
},
tick: function(gen,m,r,c) { // apply Conway's 23/3 rule
if (this.isWall(m[r][c])) return m[r][c]; // walls don't change
var prevrow=r>0?r-1:(m.length-1);
var nextrow=r<m.length-1?r+1:0;
var prevcol=c>0?c-1:(m[r].length-1);
var nextcol=c<m[r].length-1?c+1:0;
var near=this.isAlive(m[prevrow][prevcol]) + this.isAlive(m[prevrow][c]) + this.isAlive(m[prevrow][nextcol])
+this.isAlive(m[r][prevcol]) + this.isAlive(m[r][nextcol])
+this.isAlive(m[nextrow][prevcol]) + this.isAlive(m[nextrow][c]) + this.isAlive(m[nextrow][nextcol]);
if (!this.isAlive(m[r][c])&&near==3) return gen; // birth
if (this.isAlive(m[r][c])&&near==2||near==3) return m[r][c]; // stay alive
return 0; // death
},
autostop: function(id) { // autostop if run limit reached or no changes for N generations
var e=document.getElementById(id); if (!e) return; var d=e.data; var m=d.matrix;
var msg='';
var limited=d.limit>0 && d.gencount>=d.limit;
var stabilized=d.stability>0 && d.stable>=d.stability;
if (limited || stabilized) {
this.stop(id);
msg=stabilized?this.stableMsg.format([d.stability]):this.limitMsg.format([d.limit]);
msg=this.msgfmt.format([id,d.cellcolor,d.bgcolor,msg]);
}
return msg;
},
calcstats: function(id,count,agecount,agetotal,oldest) {
var e=document.getElementById(id); if (!e) return; var d=e.data; var m=d.matrix;
d.stable+=(count==d.count)?1:-d.stable; // add one or reset to zero
d.count=count; d.total+=count;
d.min=Math.min(d.min,count); d.max=Math.max(d.max,count); d.avg=Math.floor(d.total/d.gen);
d.avgage=agecount?agetotal/agecount:0; d.oldest=oldest; d.maxage=Math.max(d.maxage,oldest);
return false;
},
showstats: function(id,msg) {
var e=document.getElementById(id); if (!e) return; var d=e.data; var m=d.matrix;
var stats=e.getElementsByTagName("div")[0];
if (stats) stats.innerHTML=this.stats.format([d.gen,this.zeroPad(d.count,d.max),d.min,d.avg,d.max,msg]);
return false;
}
}
//}}}
TiddlyWiki — вики-движок и вики-концепция, заключающаяся в том, что весь вики-сайт представляет собой одну HTML-страницу, интерактивность которой обеспечивается скриптами. Каждая отдельная логическая вики-страница называется «тидлер» («рыбка», англ. tiddler) и по виду напоминает пост в блоге.
#[[http://www.tiddlywiki.com/|http://www.tiddlywiki.com/]]
#[[TiddlyWiki на GitHub|http://github.com/TiddlyWiki/tiddlywiki]]
#[[TiddlyWiki на Wiki|http://ru.wikipedia.org/wiki/TiddlyWiki]]
#[[Серверная часть TiddlyWiki на PHP|http://tiddlywiki.bidix.info/]]
#[[Серверная часть TiddlyWiki на GAPS|http://code.google.com/p/giewiki/]]
#[[TiddlyWiki по русски|http://www.tiddlywiki.ru/_index/]]
#[[TiddlyWiki на Python|http://tiddlyspace.com/]]
#[[TiddlyWiki на Python|http://tiddlyweb.peermore.com/wiki/]]
#[[WoaS - Wiki on a Stick|http://stickwiki.sourceforge.net/]]
#[[Плагин русификатор|http://glebsite.net/tw/]]
#[[Сборник плагинов|http://www.tiddlytools.com/]]
<<miniBrowser noplayer http://tinymce.moxiecode.com/tryit/full.php>>
/***
|Name:|ToggleTagPlugin|
|Description:|Makes a checkbox which toggles a tag in a tiddler|
|Version:|3.1.0 ($Rev: 4907 $)|
|Date:|$Date: 2008-05-13 03:15:46 +1000 (Tue, 13 May 2008) $|
|Source:|http://mptw.tiddlyspot.com/#ToggleTagPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Usage
{{{<<toggleTag }}}//{{{TagName TiddlerName LabelText}}}//{{{>>}}}
* TagName - the tag to be toggled, default value "checked"
* TiddlerName - the tiddler to toggle the tag in, default value the current tiddler
* LabelText - the text (gets wikified) to put next to the check box, default value is '{{{[[TagName]]}}}' or '{{{[[TagName]] [[TiddlerName]]}}}'
(If a parameter is '.' then the default will be used)
* TouchMod flag - if non empty then touch the tiddlers mod date. Note, can set config.toggleTagAlwaysTouchModDate to always touch mod date
!!Examples
|Code|Description|Example|h
|{{{<<toggleTag>>}}}|Toggles the default tag (checked) in this tiddler|<<toggleTag>>|
|{{{<<toggleTag TagName>>}}}|Toggles the TagName tag in this tiddler|<<toggleTag TagName>>|
|{{{<<toggleTag TagName TiddlerName>>}}}|Toggles the TagName tag in the TiddlerName tiddler|<<toggleTag TagName TiddlerName>>|
|{{{<<toggleTag TagName TiddlerName 'click me'>>}}}|Same but with custom label|<<toggleTag TagName TiddlerName 'click me'>>|
|{{{<<toggleTag . . 'click me'>>}}}|dot means use default value|<<toggleTag . . 'click me'>>|
!!Notes
* If TiddlerName doesn't exist it will be silently created
* Set label to '-' to specify no label
* See also http://mgtd-alpha.tiddlyspot.com/#ToggleTag2
!!Known issues
* Doesn't smoothly handle the case where you toggle a tag in a tiddler that is current open for editing
* Should convert to use named params
***/
//{{{
if (config.toggleTagAlwaysTouchModDate == undefined) config.toggleTagAlwaysTouchModDate = false;
merge(config.macros,{
toggleTag: {
createIfRequired: true,
shortLabel: "[[%0]]",
longLabel: "[[%0]] [[%1]]",
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var tiddlerTitle = tiddler ? tiddler.title : '';
var tag = (params[0] && params[0] != '.') ? params[0] : "checked";
var title = (params[1] && params[1] != '.') ? params[1] : tiddlerTitle;
var defaultLabel = (title == tiddlerTitle ? this.shortLabel : this.longLabel);
var label = (params[2] && params[2] != '.') ? params[2] : defaultLabel;
var touchMod = (params[3] && params[3] != '.') ? params[3] : "";
label = (label == '-' ? '' : label); // dash means no label
var theTiddler = (title == tiddlerTitle ? tiddler : store.getTiddler(title));
var cb = createTiddlyCheckbox(place, label.format([tag,title]), theTiddler && theTiddler.isTagged(tag), function(e) {
if (!store.tiddlerExists(title)) {
if (config.macros.toggleTag.createIfRequired) {
var content = store.getTiddlerText(title); // just in case it's a shadow
store.saveTiddler(title,title,content?content:"",config.options.txtUserName,new Date(),null);
}
else
return false;
}
if ((touchMod != "" || config.toggleTagAlwaysTouchModDate) && theTiddler)
theTiddler.modified = new Date();
store.setTiddlerTag(title,this.checked,tag);
return true;
});
}
}
});
//}}}
|~ViewToolbar|closeTiddler closeOthers +editTiddler > fields syncing permalink references jump|
|~EditToolbar|+saveTiddler -cancelTiddler deleteTiddler|
#[[BTDigg|http://btdigg.org/]]
#[[TPB|http://thepiratebay.se/torrent/8156416]]
#[[BitSnoop|http://bitsnoop.com/]]
#[[isohunt|https://isohunt.com/]]
#[[Trackers|http://bitsnoop.com/trackers/]]
/***
Description: Contains the stuff you need to use Tiddlyspot
Note, you also need UploadPlugin, PasswordOptionPlugin and LoadRemoteFileThroughProxy
from http://tiddlywiki.bidix.info for a complete working Tiddlyspot site.
***/
//{{{
// edit this if you are migrating sites or retrofitting an existing TW
config.tiddlyspotSiteId = 'mm3';
// make it so you can by default see edit controls via http
config.options.chkHttpReadOnly = false;
window.readOnly = false; // make sure of it (for tw 2.2)
window.showBackstage = true; // show backstage too
// disable autosave in d3
if (window.location.protocol != "file:")
config.options.chkGTDLazyAutoSave = false;
// tweak shadow tiddlers to add upload button, password entry box etc
with (config.shadowTiddlers) {
SiteUrl = 'http://'+config.tiddlyspotSiteId+'.tiddlyspot.com';
SideBarOptions = SideBarOptions.replace(/(<<saveChanges>>)/,"$1<<tiddler TspotSidebar>>");
OptionsPanel = OptionsPanel.replace(/^/,"<<tiddler TspotOptions>>");
DefaultTiddlers = DefaultTiddlers.replace(/^/,"[[WelcomeToTiddlyspot]] ");
MainMenu = MainMenu.replace(/^/,"[[WelcomeToTiddlyspot]] ");
}
// create some shadow tiddler content
merge(config.shadowTiddlers,{
'WelcomeToTiddlyspot':[
"This document is a ~TiddlyWiki from tiddlyspot.com. A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.",
"",
"@@font-weight:bold;font-size:1.3em;color:#444; //What now?// @@ Before you can save any changes, you need to enter your password in the form below. Then configure privacy and other site settings at your [[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]] (your control panel username is //" + config.tiddlyspotSiteId + "//).",
"<<tiddler TspotControls>>",
"See also GettingStarted.",
"",
"@@font-weight:bold;font-size:1.3em;color:#444; //Working online// @@ You can edit this ~TiddlyWiki right now, and save your changes using the \"save to web\" button in the column on the right.",
"",
"@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// @@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick. You can make changes and save them locally without being connected to the Internet. When you're ready to sync up again, just click \"upload\" and your ~TiddlyWiki will be saved back to tiddlyspot.com.",
"",
"@@font-weight:bold;font-size:1.3em;color:#444; //Help!// @@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]]. Also visit [[TiddlyWiki.org|http://tiddlywiki.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help. If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].",
"",
"@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// @@ We hope you like using your tiddlyspot.com site. Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions."
].join("\n"),
'TspotControls':[
"| tiddlyspot password:|<<option pasUploadPassword>>|",
"| site management:|<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . . " + config.tiddlyspotSiteId + ">>//(requires tiddlyspot password)//<br>[[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]], [[download (go offline)|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download]]|",
"| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[blog|http://tiddlyspot.blogspot.com/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|"
].join("\n"),
'TspotSidebar':[
"<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . . " + config.tiddlyspotSiteId + ">><html><a href='http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download' class='button'>download</a></html>"
].join("\n"),
'TspotOptions':[
"tiddlyspot password:",
"<<option pasUploadPassword>>",
""
].join("\n")
});
//}}}
/***
|Name|UnsavedChangesPlugin|
|Source|http://www.TiddlyTools.com/#UnsavedChangesPlugin|
|Version|3.3.4|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|show droplist of tiddlers that have changed since the last time the document was saved|
Display a list of tiddlers that have been changed since the last time the document was saved. The list includes all new/modified tiddlers as well as those changed with "minor edits" enabled and any tiddlers that you import during the session, regardless of their modification date.
!!!!!Usage
<<<
{{{
<<unsavedChanges panel>> or <<unsavedChanges>>
}}}
{{indent{
the ''panel'' keyword displays a 'control panel' interface containing a droplist of unsaved tiddlers and a 'goto' button, along with a command link to 'save changes'. Depending upon what other plugins are installed, several additional elements will also be displayed: When [[NestedSlidersPlugin]] is installed, the entire control panel is contained within a ''SLIDER''. When [[LoadTiddlersPlugin]] is installed, a ''REVERT'' button is added. When [[SaveAsPlugin]] is installed, a ''SAVE AS'' link is added. When [[UploadPlugin]] is installed, an ''UPLOAD'' (or ''save to web'') link is added. When [[TrashPlugin]] is installed and there are tiddlers tagged with<<tag Trash>>, an ''EMPTY TRASH'' link is added.
}}}
{{{
<<unsavedChanges list separator>>
}}}
{{indent{
the ''list'' keyword displays a simple space-separated list of unsaved tiddlers without any other command links. You can specify an optional ''separator'' value that can be used in place of the default space character. For example, you can specify {{{"<br>"}}} as the separator in order to display each link, one per line.
}}}
{{{
<<unsavedChanges command label tip>>
}}}
{{indent{
the ''command'' keyword displays a single 'command link' that, when clicked, displays a ~TiddlyWiki popup containing the list of unsaved tiddlers, the 'save changes' command and, depending upon what other plugins are installed, additional commands for 'save as', 'upload', and 'empty trash' (similar to the panel display described above).
You can specify optional ''label'' and ''tip'' parameters in the macro to customize the command link text and tooltip. The default label for the command link is: "There %1 %0 unsaved tiddler%2...", where:
* %0 is automatically replaced with the number of unsaved changes
* %1 is either "is" (if changes=1) or "are" (if changes>1)
* %2 is either blank (if changes=1) or "s" (if changes>1)
resulting in the text: //"There is 1 unsaved tiddler...", "There are 2 unsaved tiddlers...", etc.//
}}}
<<<
!!!!!Examples
<<<
^^//note: the following examples will not display any output unless you have already created/modified tiddlers in the current document.//^^
{{{<<unsavedChanges>>}}}
<<unsavedChanges>>
----
{{{<<unsavedChanges command>>}}}
<<unsavedChanges command>>
----
{{{<<unsavedChanges list>>}}}
<<unsavedChanges list>>
----
{{{<<unsavedChanges list "<br>">>}}}
<<unsavedChanges list "<br>">>
<<<
!!!!!Revisions
<<<
2010.12.05 3.3.4 display 'save as...' command even if readOnly
2009.03.02 3.3.3 fix handling for titles that contain HTML special chars (lt,gt,quot,amp)
2008.09.02 3.3.2 cleanup popup list output generation and added timestamps/sizes to popup display
2008.08.23 3.3.1 added optional custom 'label' and 'tip' params to 'command' mode and defined default values for mode, label, tip, and separator as object properties for I18N/L10N-readiness.
2008.08.21 3.3.0 complete re-write of rendering and refresh processing to support multiple instances and automatic self-refresh (no longer depends upon core refresh notifications)
2008.08.21 3.2.0 added 'command' option for link+popup as alternative to 'control panel' interface
2008.04.22 3.1.2 use SaveAsPlugin instead of obsolete NewDocumentPlugin to add "save as" link
2007.12.22 3.1.1 hijack removeTiddler() instead of low-level deleteTiddler() to correct tracking and refresh handling issues. in saveTiddler(), check for 'tiddler rename' (title!=newtitle) and adjust list accordingly.
2007.12.21 3.1.0 added support for {{{<<unsavedChanges list separator>>}}} usage to unsaved tiddlers as a simple list of links, embedded in tiddler content (e.g., [[MainMenu]])
2007.12.20 3.0.0 rewrite to track ALL changed tiddlers, including imports and minor edits, regardless of saved modification dates. Also, rewrote display logic to directly refresh macro output instead of triggering a page refresh. The entire process is MUCH more efficient now.
2007.08.02 2.0.0 converted from inline script
2007.01.01 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.UnsavedChangesPlugin= {major: 3, minor: 3, revision: 4, date: new Date(2010,12,5)};
config.macros.unsavedChanges = {
changed: [], // list of currently unsaved tiddler titles
defMode: "panel",
defSep: " ",
defLabel: "There %1 %0 unsaved tiddler%2",
defTip: "view a list of unsaved tiddler changes",
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var wrapper=createTiddlyElement(place,"span",null,"unsavedChanges");
wrapper.setAttribute("mode",params[0]||this.defMode);
wrapper.setAttribute("sep",params[1]||this.defSep); // for 'list' mode
wrapper.setAttribute("label",params[1]||this.defLabel); // for 'command' mode
wrapper.setAttribute("tip",params[2]||this.defTip); // for 'command' mode
this.render(wrapper);
},
render: function(wrapper) {
removeChildren(wrapper); // make sure its empty
if (!this.changed.length) return; // no changes = no output
switch (wrapper.getAttribute("mode")) {
case "command": this.command(wrapper); break;
case "list": this.list(wrapper); break;
case "panel": default: this.panel(wrapper); break;
}
},
refresh: function() {
var wrappers=document.getElementsByTagName("span");
for (var w=0; w<wrappers.length; w++)
if (hasClass(wrappers[w],"unsavedChanges"))
this.render(wrappers[w]);
},
list: function(place) { // show simple list of unsaved tiddlers
wikify("[["+this.changed.join("]]"+place.getAttribute("sep")+"[[")+"]]",place);
},
command: function(place) { // show command link with popup list
var c=this.changed.length;
var txt=place.getAttribute("label").format([c,c==1?'is':'are',c==1?'':'s']);
var tip=place.getAttribute("tip");
var action=function(ev) { if (!ev) var ev=window.event;
var p=Popup.create(this); if (!p) return false;
var d=createTiddlyElement(p,"div");
d.style.whiteSpace="normal"; d.style.width="auto"; d.style.padding="2px";
// gather pretty links for changed tiddlers
var list=[]; var item=" [[%1 - %0 (%2 bytes)|%0]] ";
for (var i=config.macros.unsavedChanges.changed.length-1; i>=0; i--) {
var tid=store.getTiddler(config.macros.unsavedChanges.changed[i]);
if (!tid) continue;
var when=tid.modified.formatString('YYYY.0MM.0DD 0hh:0mm:0ss');
list.push(item.format([tid.title,when,tid.text.length]));
}
wikify("@@white-space:nowrap;"+list.join("<br>")+"@@",d);
var t="\n----\n";
t+="@@white-space:nowrap;display:block;text-align:center; ";
if (!readOnly) {
t+="<<saveChanges>>";
t+=config.macros.saveAs?" | <<saveAs>>":"";
t+=config.macros.upload?" | <<upload>>":"";
t+=(config.macros.emptyTrash&&store.getTaggedTiddlers("Trash").length)?" | <<emptyTrash>>":"";
} else {
t+=config.macros.saveAs?"<<saveAs>>":"";
}
t+=" @@";
wikify(t,d);
Popup.show();
ev.cancelBubble=true; if(ev.stopPropagation)ev.stopPropagation();
return(false);
}
createTiddlyButton(place,txt,tip,action,"button");
},
panel: function(place) { // show composite droplist+buttons+commands
// gather changed tiddlers (in reverse order by date - most recent first)
var tids=[]; for (var i=this.changed.length-1; i>=0; i--)
{ var t=store.getTiddler(this.changed[i]); if (t) tids.push(t); }
tids.sort(function(a,b){return a.modified<b.modified?-1:(a.modified==b.modified?0:1);});
// generate droplist items
var list=[]; var item='<option value="%0">%1 - %0 (%2 bytes)</option>';
for (var i=tids.length-1; i>=0; i--) {
var when=tids[i].modified.formatString('YYYY.0MM.0DD 0hh:0mm:0ss');
list.push(item.format([tids[i].title.htmlEncode(),when,tids[i].text.length]));
}
// display droplist, buttons, and command links
var out=''; var c=this.changed.length;
var NSP=config.formatters.findByField("name","nestedSliders");
var summary=this.defLabel.format([c,c==1?'is':'are',c==1?'':'s'])
out+=NSP?'+++(unsaved)['+summary+'|'+this.defTip+']...':(summary+"\n");
out+='<html><form style="display:inline"><!--\
--><select size="1" name="list" \
title="select a tiddler to view" \
onchange="var v=this.value; if (v.length) story.displayTiddler(null,v);"><!--\
-->'+list.join('')+'<!--\
--></select><!--\
--><input type="button" value="goto" onclick="this.form.list.onchange();">';
if (config.macros.loadTiddlers) {
out+='<input type="button" value="revert" \
title="import the last saved version of this tiddler" \
onclick="var v=this.form.list.value; if (!v.length) return; \
var t=\'<\'+\'<loadTiddlers [[tiddler:\'+v+\']] \'; \
t+=document.location.href; \
t+=\' confirm force noreport>\'+\'>\'; \
var e=document.getElementById(\'executeRevert\'); \
if (e) e.parentNode.removeChild(e); \
e=document.createElement(\'span\'); \
e.id=\'executeRevert\'; \
wikify(t,e);">';
}
out+='</form></html>';
out+='\n{{small nowrap{';
if (!readOnly) {
out+="<<saveChanges>>";
out+=config.macros.saveAs?" | <<saveAs>>":"";
out+=config.macros.upload?" | <<upload>>":"";
out+=(config.macros.emptyTrash&&store.getTaggedTiddlers("Trash").length)?" | <<emptyTrash>>":"";
} else {
out+=config.macros.saveAs?"<<saveAs>>":"";
}
out+='}}}';
out+=NSP?'===':'';
wikify(out,place);
}
};
// hijack store.saveTiddler() to track changes to tiddlers
if (store.showUnsaved_saveTiddler==undefined) {
store.showUnsaved_saveTiddler=store.saveTiddler;
store.saveTiddler=function(title,newtitle) {
if (title!=newtitle) {
var i=config.macros.unsavedChanges.changed.indexOf(title);
if (i!=-1) config.macros.unsavedChanges.changed.splice(i,1); // remove old from list
}
var i=config.macros.unsavedChanges.changed.indexOf(newtitle);
if (i!=-1) config.macros.unsavedChanges.changed.splice(i,1); // remove new title from list
config.macros.unsavedChanges.changed.push(newtitle); // add new title to END of list
var t=this.showUnsaved_saveTiddler.apply(this,arguments);
if (!this.notificationLevel) config.macros.unsavedChanges.refresh();
return t;
}
}
// hijack store.removeTiddler() to track changes to tiddlers
if (store.showUnsaved_removeTiddler==undefined) {
store.showUnsaved_removeTiddler=store.removeTiddler;
store.removeTiddler=function(title) {
var i=config.macros.unsavedChanges.changed.indexOf(title);
if (i!=-1) config.macros.unsavedChanges.changed.splice(i,1); // remove from list
this.showUnsaved_removeTiddler.apply(this,arguments);
if (!this.notificationLevel) config.macros.unsavedChanges.refresh();
}
}
// hijack store.setDirty() function to reset change list after file save
// note: do NOT hijack the prototype function. This hijack should only be applied to
// the main 'store' instance only (i.e., don't refresh when loading temporary store
// as part of ImportTiddlers processing)
if (store.showUnsaved_setDirty==undefined) {
store.showUnsaved_setDirty=store.setDirty;
store.setDirty = function(flag) {
var refresh=this.isDirty() && !flag; // 'dirty' to 'clean', force a refresh...
this.showUnsaved_setDirty.apply(this,arguments); // but change the flag first.
if (refresh) {
config.macros.unsavedChanges.changed=[]; // clear changed list
config.macros.unsavedChanges.refresh();
}
}
}
//}}}
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 31/10/2015 01:26:02 | mm3 | [[/|http://mm3.tiddlyspot.com/]] | [[store.cgi|http://mm3.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mm3.tiddlyspot.com/index.html]] | . |
| 22/11/2015 15:57:03 | mm3 | [[/|http://mm3.tiddlyspot.com/]] | [[store.cgi|http://mm3.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mm3.tiddlyspot.com/index.html]] | . |
| 25/12/2015 10:00:07 | mm3 | [[/|http://mm3.tiddlyspot.com/]] | [[store.cgi|http://mm3.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mm3.tiddlyspot.com/index.html]] | . |
| 20/02/2016 18:36:33 | mm3 | [[/|http://mm3.tiddlyspot.com/]] | [[store.cgi|http://mm3.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mm3.tiddlyspot.com/index.html]] | . |
| 14/05/2016 12:56:05 | mm3 | [[/|http://mm3.tiddlyspot.com/]] | [[store.cgi|http://mm3.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mm3.tiddlyspot.com/index.html]] | . |
| 14/05/2016 13:03:10 | mm3 | [[/|http://mm3.tiddlyspot.com/]] | [[store.cgi|http://mm3.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mm3.tiddlyspot.com/index.html]] | . |
| 04/08/2016 22:09:14 | mm3 | [[/|http://mm3.tiddlyspot.com/]] | [[store.cgi|http://mm3.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mm3.tiddlyspot.com/index.html]] | . |
| 17/08/2016 08:37:51 | mm3 | [[/|http://mm3.tiddlyspot.com/]] | [[store.cgi|http://mm3.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mm3.tiddlyspot.com/index.html]] | . | ok |
| 17/08/2016 08:38:44 | mm3 | [[/|http://mm3.tiddlyspot.com/]] | [[store.cgi|http://mm3.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mm3.tiddlyspot.com/index.html]] | . |
| 17/02/2020 11:20:14 | mm3 | [[/|http://mm3.tiddlyspot.com/]] | [[store.cgi|http://mm3.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mm3.tiddlyspot.com/index.html]] | . |
/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.3|
|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|
|''Requires:''|PasswordOptionPlugin|
***/
//{{{
version.extensions.UploadPlugin = {
major: 4, minor: 1, revision: 3,
date: new Date("Feb 24, 2008"),
source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
author: 'BidiX (BidiX (at) bidix (dot) info',
coreVersion: '2.2.0'
};
if (!window.bidix) window.bidix = {}; // bidix namespace
bidix.debugMode = false; // true to activate both in Plugin and UploadService
config.macros.upload = {
// default values
defaultBackupDir: '', //no backup
defaultStoreScript: "store.php",
defaultToFilename: "index.html",
defaultUploadDir: ".",
authenticateUser: true // UploadService Authenticate User
};
config.macros.upload.label = {
promptOption: "Save and Upload this TiddlyWiki with UploadOptions",
promptParamMacro: "Save and Upload this TiddlyWiki in %0",
saveLabel: "save to web",
saveToDisk: "save to disk",
uploadLabel: "upload"
};
config.macros.upload.messages = {
noStoreUrl: "No store URL in parmeters or options",
usernameOrPasswordMissing: "Username or password missing"
};
config.macros.upload.handler = function(place,macroName,params) {
if (readOnly)
return;
var label;
if (document.location.toString().substr(0,4) == "http")
label = this.label.saveLabel;
else
label = this.label.uploadLabel;
var prompt;
if (params[0]) {
prompt = this.label.promptParamMacro.toString().format([this.destFile(params[0],
(params[1] ? params[1]:bidix.basename(window.location.toString())), params[3])]);
} else {
prompt = this.label.promptOption;
}
createTiddlyButton(place, label, prompt, function() {config.macros.upload.action(params);}, null, null, this.accessKey);
};
config.macros.upload.action = function(params)
{
// for missing macro parameter set value from options
if (!params) params = {};
var storeUrl = params[0] ? params[0] : config.options.txtUploadStoreUrl;
var toFilename = params[1] ? params[1] : config.options.txtUploadFilename;
var backupDir = params[2] ? params[2] : config.options.txtUploadBackupDir;
var uploadDir = params[3] ? params[3] : config.options.txtUploadDir;
var username = params[4] ? params[4] : config.options.txtUploadUserName;
var password = config.options.pasUploadPassword; // for security reason no password as macro parameter
// for still missing parameter set default value
if ((!storeUrl) && (document.location.toString().substr(0,4) == "http"))
storeUrl = bidix.dirname(document.location.toString())+'/'+config.macros.upload.defaultStoreScript;
if (storeUrl.substr(0,4) != "http")
storeUrl = bidix.dirname(document.location.toString()) +'/'+ storeUrl;
if (!toFilename)
toFilename = bidix.basename(window.location.toString());
if (!toFilename)
toFilename = config.macros.upload.defaultToFilename;
if (!uploadDir)
uploadDir = config.macros.upload.defaultUploadDir;
if (!backupDir)
backupDir = config.macros.upload.defaultBackupDir;
// report error if still missing
if (!storeUrl) {
alert(config.macros.upload.messages.noStoreUrl);
clearMessage();
return false;
}
if (config.macros.upload.authenticateUser && (!username || !password)) {
alert(config.macros.upload.messages.usernameOrPasswordMissing);
clearMessage();
return false;
}
bidix.upload.uploadChanges(false,null,storeUrl, toFilename, uploadDir, backupDir, username, password);
return false;
};
config.macros.upload.destFile = function(storeUrl, toFilename, uploadDir)
{
if (!storeUrl)
return null;
var dest = bidix.dirname(storeUrl);
if (uploadDir && uploadDir != '.')
dest = dest + '/' + uploadDir;
dest = dest + '/' + toFilename;
return dest;
};
config.macros.uploadOptions = {
handler: function(place,macroName,params) {
var wizard = new Wizard();
wizard.createWizard(place,this.wizardTitle);
wizard.addStep(this.step1Title,this.step1Html);
var markList = wizard.getElement("markList");
var listWrapper = document.createElement("div");
markList.parentNode.insertBefore(listWrapper,markList);
wizard.setValue("listWrapper",listWrapper);
this.refreshOptions(listWrapper,false);
var uploadCaption;
if (document.location.toString().substr(0,4) == "http")
uploadCaption = config.macros.upload.label.saveLabel;
else
uploadCaption = config.macros.upload.label.uploadLabel;
wizard.setButtons([
{caption: uploadCaption, tooltip: config.macros.upload.label.promptOption,
onClick: config.macros.upload.action},
{caption: this.cancelButton, tooltip: this.cancelButtonPrompt, onClick: this.onCancel}
]);
},
options: [
"txtUploadUserName",
"pasUploadPassword",
"txtUploadStoreUrl",
"txtUploadDir",
"txtUploadFilename",
"txtUploadBackupDir",
"chkUploadLog",
"txtUploadLogMaxLine"
],
refreshOptions: function(listWrapper) {
var opts = [];
for(i=0; i<this.options.length; i++) {
var opt = {};
opts.push();
opt.option = "";
n = this.options[i];
opt.name = n;
opt.lowlight = !config.optionsDesc[n];
opt.description = opt.lowlight ? this.unknownDescription : config.optionsDesc[n];
opts.push(opt);
}
var listview = ListView.create(listWrapper,opts,this.listViewTemplate);
for(n=0; n<opts.length; n++) {
var type = opts[n].name.substr(0,3);
var h = config.macros.option.types[type];
if (h && h.create) {
h.create(opts[n].colElements['option'],type,opts[n].name,opts[n].name,"no");
}
}
},
onCancel: function(e)
{
backstage.switchTab(null);
return false;
},
wizardTitle: "Upload with options",
step1Title: "These options are saved in cookies in your browser",
step1Html: "<input type='hidden' name='markList'></input><br>",
cancelButton: "Cancel",
cancelButtonPrompt: "Cancel prompt",
listViewTemplate: {
columns: [
{name: 'Description', field: 'description', title: "Description", type: 'WikiText'},
{name: 'Option', field: 'option', title: "Option", type: 'String'},
{name: 'Name', field: 'name', title: "Name", type: 'String'}
],
rowClasses: [
{className: 'lowlight', field: 'lowlight'}
]}
};
if (!bidix.upload) bidix.upload = {};
if (!bidix.upload.messages) bidix.upload.messages = {
//from saving
invalidFileError: "The original file '%0' does not appear to be a valid TiddlyWiki",
backupSaved: "Backup saved",
backupFailed: "Failed to upload backup file",
rssSaved: "RSS feed uploaded",
rssFailed: "Failed to upload RSS feed file",
emptySaved: "Empty template uploaded",
emptyFailed: "Failed to upload empty template file",
mainSaved: "Main TiddlyWiki file uploaded",
mainFailed: "Failed to upload main TiddlyWiki file. Your changes have not been saved",
//specific upload
loadOriginalHttpPostError: "Can't get original file",
aboutToSaveOnHttpPost: 'About to upload on %0 ...',
storePhpNotFound: "The store script '%0' was not found."
};
bidix.upload.uploadChanges = function(onlyIfDirty,tiddlers,storeUrl,toFilename,uploadDir,backupDir,username,password)
{
var callback = function(status,uploadParams,original,url,xhr) {
if (!status) {
displayMessage(bidix.upload.messages.loadOriginalHttpPostError);
return;
}
if (bidix.debugMode)
alert(original.substr(0,500)+"\n...");
// Locate the storeArea div's
var posDiv = locateStoreArea(original);
if((posDiv[0] == -1) || (posDiv[1] == -1)) {
alert(config.messages.invalidFileError.format([localPath]));
return;
}
bidix.upload.uploadRss(uploadParams,original,posDiv);
};
if(onlyIfDirty && !store.isDirty())
return;
clearMessage();
// save on localdisk ?
if (document.location.toString().substr(0,4) == "file") {
var path = document.location.toString();
var localPath = getLocalPath(path);
saveChanges();
}
// get original
var uploadParams = new Array(storeUrl,toFilename,uploadDir,backupDir,username,password);
var originalPath = document.location.toString();
// If url is a directory : add index.html
if (originalPath.charAt(originalPath.length-1) == "/")
originalPath = originalPath + "index.html";
var dest = config.macros.upload.destFile(storeUrl,toFilename,uploadDir);
var log = new bidix.UploadLog();
log.startUpload(storeUrl, dest, uploadDir, backupDir);
displayMessage(bidix.upload.messages.aboutToSaveOnHttpPost.format([dest]));
if (bidix.debugMode)
alert("about to execute Http - GET on "+originalPath);
var r = doHttp("GET",originalPath,null,null,username,password,callback,uploadParams,null);
if (typeof r == "string")
displayMessage(r);
return r;
};
bidix.upload.uploadRss = function(uploadParams,original,posDiv)
{
var callback = function(status,params,responseText,url,xhr) {
if(status) {
var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
displayMessage(bidix.upload.messages.rssSaved,bidix.dirname(url)+'/'+destfile);
bidix.upload.uploadMain(params[0],params[1],params[2]);
} else {
displayMessage(bidix.upload.messages.rssFailed);
}
};
// do uploadRss
if(config.options.chkGenerateAnRssFeed) {
var rssPath = uploadParams[1].substr(0,uploadParams[1].lastIndexOf(".")) + ".xml";
var rssUploadParams = new Array(uploadParams[0],rssPath,uploadParams[2],'',uploadParams[4],uploadParams[5]);
var rssString = generateRss();
// no UnicodeToUTF8 conversion needed when location is "file" !!!
if (document.location.toString().substr(0,4) != "file")
rssString = convertUnicodeToUTF8(rssString);
bidix.upload.httpUpload(rssUploadParams,rssString,callback,Array(uploadParams,original,posDiv));
} else {
bidix.upload.uploadMain(uploadParams,original,posDiv);
}
};
bidix.upload.uploadMain = function(uploadParams,original,posDiv)
{
var callback = function(status,params,responseText,url,xhr) {
var log = new bidix.UploadLog();
if(status) {
// if backupDir specified
if ((params[3]) && (responseText.indexOf("backupfile:") > -1)) {
var backupfile = responseText.substring(responseText.indexOf("backupfile:")+11,responseText.indexOf("\n", responseText.indexOf("backupfile:")));
displayMessage(bidix.upload.messages.backupSaved,bidix.dirname(url)+'/'+backupfile);
}
var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
displayMessage(bidix.upload.messages.mainSaved,bidix.dirname(url)+'/'+destfile);
store.setDirty(false);
log.endUpload("ok");
} else {
alert(bidix.upload.messages.mainFailed);
displayMessage(bidix.upload.messages.mainFailed);
log.endUpload("failed");
}
};
// do uploadMain
var revised = bidix.upload.updateOriginal(original,posDiv);
bidix.upload.httpUpload(uploadParams,revised,callback,uploadParams);
};
bidix.upload.httpUpload = function(uploadParams,data,callback,params)
{
var localCallback = function(status,params,responseText,url,xhr) {
url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
if (xhr.status == 404)
alert(bidix.upload.messages.storePhpNotFound.format([url]));
if ((bidix.debugMode) || (responseText.indexOf("Debug mode") >= 0 )) {
alert(responseText);
if (responseText.indexOf("Debug mode") >= 0 )
responseText = responseText.substring(responseText.indexOf("\n\n")+2);
} else if (responseText.charAt(0) != '0')
alert(responseText);
if (responseText.charAt(0) != '0')
status = null;
callback(status,params,responseText,url,xhr);
};
// do httpUpload
var boundary = "---------------------------"+"AaB03x";
var uploadFormName = "UploadPlugin";
// compose headers data
var sheader = "";
sheader += "--" + boundary + "\r\nContent-disposition: form-data; name=\"";
sheader += uploadFormName +"\"\r\n\r\n";
sheader += "backupDir="+uploadParams[3] +
";user=" + uploadParams[4] +
";password=" + uploadParams[5] +
";uploaddir=" + uploadParams[2];
if (bidix.debugMode)
sheader += ";debug=1";
sheader += ";;\r\n";
sheader += "\r\n" + "--" + boundary + "\r\n";
sheader += "Content-disposition: form-data; name=\"userfile\"; filename=\""+uploadParams[1]+"\"\r\n";
sheader += "Content-Type: text/html;charset=UTF-8" + "\r\n";
sheader += "Content-Length: " + data.length + "\r\n\r\n";
// compose trailer data
var strailer = new String();
strailer = "\r\n--" + boundary + "--\r\n";
data = sheader + data + strailer;
if (bidix.debugMode) alert("about to execute Http - POST on "+uploadParams[0]+"\n with \n"+data.substr(0,500)+ " ... ");
var r = doHttp("POST",uploadParams[0],data,"multipart/form-data; ;charset=UTF-8; boundary="+boundary,uploadParams[4],uploadParams[5],localCallback,params,null);
if (typeof r == "string")
displayMessage(r);
return r;
};
// same as Saving's updateOriginal but without convertUnicodeToUTF8 calls
bidix.upload.updateOriginal = function(original, posDiv)
{
if (!posDiv)
posDiv = locateStoreArea(original);
if((posDiv[0] == -1) || (posDiv[1] == -1)) {
alert(config.messages.invalidFileError.format([localPath]));
return;
}
var revised = original.substr(0,posDiv[0] + startSaveArea.length) + "\n" +
store.allTiddlersAsHtml() + "\n" +
original.substr(posDiv[1]);
var newSiteTitle = getPageTitle().htmlEncode();
revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");
revised = updateMarkupBlock(revised,"PRE-HEAD","MarkupPreHead");
revised = updateMarkupBlock(revised,"POST-HEAD","MarkupPostHead");
revised = updateMarkupBlock(revised,"PRE-BODY","MarkupPreBody");
revised = updateMarkupBlock(revised,"POST-SCRIPT","MarkupPostBody");
return revised;
};
//
// UploadLog
//
// config.options.chkUploadLog :
// false : no logging
// true : logging
// config.options.txtUploadLogMaxLine :
// -1 : no limit
// 0 : no Log lines but UploadLog is still in place
// n : the last n lines are only kept
// NaN : no limit (-1)
bidix.UploadLog = function() {
if (!config.options.chkUploadLog)
return; // this.tiddler = null
this.tiddler = store.getTiddler("UploadLog");
if (!this.tiddler) {
this.tiddler = new Tiddler();
this.tiddler.title = "UploadLog";
this.tiddler.text = "| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |";
this.tiddler.created = new Date();
this.tiddler.modifier = config.options.txtUserName;
this.tiddler.modified = new Date();
store.addTiddler(this.tiddler);
}
return this;
};
bidix.UploadLog.prototype.addText = function(text) {
if (!this.tiddler)
return;
// retrieve maxLine when we need it
var maxLine = parseInt(config.options.txtUploadLogMaxLine,10);
if (isNaN(maxLine))
maxLine = -1;
// add text
if (maxLine != 0)
this.tiddler.text = this.tiddler.text + text;
// Trunck to maxLine
if (maxLine >= 0) {
var textArray = this.tiddler.text.split('\n');
if (textArray.length > maxLine + 1)
textArray.splice(1,textArray.length-1-maxLine);
this.tiddler.text = textArray.join('\n');
}
// update tiddler fields
this.tiddler.modifier = config.options.txtUserName;
this.tiddler.modified = new Date();
store.addTiddler(this.tiddler);
// refresh and notifiy for immediate update
story.refreshTiddler(this.tiddler.title);
store.notify(this.tiddler.title, true);
};
bidix.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir, backupDir) {
if (!this.tiddler)
return;
var now = new Date();
var text = "\n| ";
var filename = bidix.basename(document.location.toString());
if (!filename) filename = '/';
text += now.formatString("0DD/0MM/YYYY 0hh:0mm:0ss") +" | ";
text += config.options.txtUserName + " | ";
text += "[["+filename+"|"+location + "]] |";
text += " [[" + bidix.basename(storeUrl) + "|" + storeUrl + "]] | ";
text += uploadDir + " | ";
text += "[[" + bidix.basename(toFilename) + " | " +toFilename + "]] | ";
text += backupDir + " |";
this.addText(text);
};
bidix.UploadLog.prototype.endUpload = function(status) {
if (!this.tiddler)
return;
this.addText(" "+status+" |");
};
//
// Utilities
//
bidix.checkPlugin = function(plugin, major, minor, revision) {
var ext = version.extensions[plugin];
if (!
(ext &&
((ext.major > major) ||
((ext.major == major) && (ext.minor > minor)) ||
((ext.major == major) && (ext.minor == minor) && (ext.revision >= revision))))) {
// write error in PluginManager
if (pluginInfo)
pluginInfo.log.push("Requires " + plugin + " " + major + "." + minor + "." + revision);
eval(plugin); // generate an error : "Error: ReferenceError: xxxx is not defined"
}
};
bidix.dirname = function(filePath) {
if (!filePath)
return;
var lastpos;
if ((lastpos = filePath.lastIndexOf("/")) != -1) {
return filePath.substring(0, lastpos);
} else {
return filePath.substring(0, filePath.lastIndexOf("\\"));
}
};
bidix.basename = function(filePath) {
if (!filePath)
return;
var lastpos;
if ((lastpos = filePath.lastIndexOf("#")) != -1)
filePath = filePath.substring(0, lastpos);
if ((lastpos = filePath.lastIndexOf("/")) != -1) {
return filePath.substring(lastpos + 1);
} else
return filePath.substring(filePath.lastIndexOf("\\")+1);
};
bidix.initOption = function(name,value) {
if (!config.options[name])
config.options[name] = value;
};
//
// Initializations
//
// require PasswordOptionPlugin 1.0.1 or better
bidix.checkPlugin("PasswordOptionPlugin", 1, 0, 1);
// styleSheet
setStylesheet('.txtUploadStoreUrl, .txtUploadBackupDir, .txtUploadDir {width: 22em;}',"uploadPluginStyles");
//optionsDesc
merge(config.optionsDesc,{
txtUploadStoreUrl: "Url of the UploadService script (default: store.php)",
txtUploadFilename: "Filename of the uploaded file (default: in index.html)",
txtUploadDir: "Relative Directory where to store the file (default: . (downloadService directory))",
txtUploadBackupDir: "Relative Directory where to backup the file. If empty no backup. (default: ''(empty))",
txtUploadUserName: "Upload Username",
pasUploadPassword: "Upload Password",
chkUploadLog: "do Logging in UploadLog (default: true)",
txtUploadLogMaxLine: "Maximum of lines in UploadLog (default: 10)"
});
// Options Initializations
bidix.initOption('txtUploadStoreUrl','');
bidix.initOption('txtUploadFilename','');
bidix.initOption('txtUploadDir','');
bidix.initOption('txtUploadBackupDir','');
bidix.initOption('txtUploadUserName','');
bidix.initOption('pasUploadPassword','');
bidix.initOption('chkUploadLog',true);
bidix.initOption('txtUploadLogMaxLine','10');
// Backstage
merge(config.tasks,{
uploadOptions: {text: "upload", tooltip: "Change UploadOptions and Upload", content: '<<uploadOptions>>'}
});
config.backstageTasks.push("uploadOptions");
//}}}
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
#[[1|http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj720571%28v=vs.105%29.aspx]]
#[[2|http://www.windowsphone.com/ru-RU/business/phone-management]]
#[[3|http://windows.microsoft.com/en-us/windows/buy]]
#[[4|http://msdn.microsoft.com/ru-ru/library/windows/apps/jj863494.aspx]]
#[[5|http://msdn.microsoft.com/ru-ru/library/windows/apps/hh694064]]
#[[6|http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj206943%28v=vs.105%29.aspx]]
#[[7|http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj720571%28v=vs.105%29.aspx]]
#[[8|http://msdn.microsoft.com/en-us/library/windowsphone/help/jj206719%28v=vs.105%29.aspx]]
#[[9|http://msdn.microsoft.com/ru-ru/ff380145]]
#[[10 !!!|http://www.developer.nokia.com/Community/Wiki/Windows_Phone_8_SDK_on_a_Virtual_Machine_with_Working_Emulator]]
#[[Знакомство с WebGL|http://habrahabr.ru/post/112430/]]
#[[Wiki WebGL|http://ru.wikipedia.org/wiki/WebGL]]
#[[Wiki Web3D|http://en.wikipedia.org/wiki/Web3D]]
#[[Wiki X3D|http://ru.wikipedia.org/wiki/X3D]]
#[[Wiki VML|http://en.wikipedia.org/wiki/Vector_Markup_Language]]
#[[Wiki U3D|http://ru.wikipedia.org/wiki/Universal_3D]]
#[[Wiki 3DXML|http://en.wikipedia.org/wiki/3DXML]]
#[[Wiki MusicXML|http://en.wikipedia.org/wiki/MusicXML]]
#[[WebGL по русски|http://russian-webgl.blogspot.ru/2010/07/0_03.html]]
#[[Каталог из тысяч 3D моделей в браузере с помощью WebGL|http://habrahabr.ru/post/145101/]]
#[[GrabCAD|http://grabcad.com/]]
#[[STL for 3D|http://grabcad.com/library/software/stl-for-3d-print]]
#[[Museum 3D STL|http://www.thingiverse.com/ArtInstituteChicago/collections/museum-love-in-3d/page:1]]
#[[STL files|http://www.thingiverse.com/]]
#[[O3D|http://code.google.com/p/o3d/wiki/Samples]]
#[[Blender Android|http://wiki.blender.org/index.php/Doc:2.6/Manual/Introduction/Installing_Blender/Android]]
#[[STLDroid|https://github.com/justjoheinz/STLDroid/tree/master/STLDroid]]
[[Wiki WebRTC|http://ru.wikipedia.org/wiki/WebRTC]]
[[WebRTC — Знакомимся|http://habrahabr.ru/post/163527/]]
/***
|''Name:''|WikiBar|
|''Version:''|2.0.0 beta3|
|''Source:''|[[AiddlyWiki|http://aiddlywiki.sourceforge.net]]|
|''Type:''|toolbar macro command extension|
!Description
WikiBar is a toolbar that gives access to most of TiddlyWiki's formatting features with a few clicks. It's a handy tool for people who are not familiar with TiddlyWiki syntax.
Besides, with WikiBar-addons, users can extend the power of WikiBar.
!Code
***/
//{{{
config.macros.wikibar = {major: 2, minor: 0, revision: 0, beta: 3, date: new Date(2005,12,30)};
config.macros.wikibar.handler = function(place,macroName,params,wikifier,paramString,tiddler){
if(!(tiddler instanceof Tiddler)) {return;}
story.setDirty(tiddler.title,true);
place.id = 'wikibar'+tiddler.title;
place.className = 'toolbar wikibar';
};
function wikibar_install(){
config.commands.wikibar = {
text: 'wikibar',
tooltip: 'wikibar on/off',
handler: function(e,src,title) {
if(!e){ e = window.event; }
var theButton = resolveTarget(e);
theButton.id = 'wikibarButton'+title;
wikibarPopup.remove();
wikibar_installAddons(theButton, title);
wikibar_createWikibar(title);
return(false);
}
};
config.shadowTiddlers['EditTemplate'] = wikibar_addWikibarCommand(config.shadowTiddlers['EditTemplate']);
var tiddler = store.getTiddler('EditTemplate');
if(tiddler){
tiddler.text = wikibar_addWikibarCommand(tiddler.text);
}
}
function wikibar_installAddons(theButton, title){
var tiddlers = store.getTaggedTiddlers('wikibarAddons');
if(!tiddlers) { return; }
theButton.addons=[];
for(var i=0; i<tiddlers.length; i++){
try{
eval(tiddlers[i].text);
try{
wikibar_addonInstall(title);
wikibar_addonInstall = null;
theButton.addons.push({ok:true, name:tiddlers[i].title});
}catch(ex){
theButton.addons.push({ok:false, name:tiddlers[i].title, error:ex});
}
}catch(ex){
theButton.addons.push({ok:false, name:tiddlers[i].title, error:ex});
}
}
}
function wikibar_addWikibarCommand(tiddlerText){
var div = document.createElement('div');
div.style.display = 'none';
div.innerHTML = tiddlerText;
for(var i=0; i<div.childNodes.length; i++){
var o=div.childNodes[i];
if(o.tagName==='DIV'){
if(o.className=='toolbar'){
var macroText = o.getAttribute('macro').trim();
if(macroText.search('wikibar')<=0){
macroText += ' wikibar';
o.setAttribute('macro', macroText);
}
break;
}
}
}
return div.innerHTML.replace(/\"/g, "\'");
}
function wikibar_processSyntaxParams(theSyntax, params){
try{
var pcr = 'AplWikibarPcr';
var rx=null;
var allParams=null;
if(params){
if(typeof(params)=='object'){
for(var i=0; i<params.length; i++){
if(params[i]){
params[i] = params[i].replace(new RegExp('%','g'), pcr).trim();
rx = '(\\[%'+(i+1)+'\\])' + '|' + '(%'+(i+1)+')';
theSyntax = theSyntax.replace(new RegExp(rx,'g'), params[i] );
}
}
allParams = params.join(' ').trim();
}else{
allParams = params.replace(new RegExp('%','g'), pcr).trim();
rx = /(\[%1{1}\])|(%1{1})/g;
theSyntax = theSyntax.replace(rx, allParams);
}
}
if(allParams){
theSyntax = theSyntax.replace(new RegExp('%N{1}','g'), allParams);
}
rx=/\[%(([1-9]{1,}[0-9]{0,})|(N{1}))\]/g;
theSyntax = theSyntax.replace(rx, '');
rx=/%(([1-9]{1,}[0-9]{0,})|(N{1}))/g;
if( theSyntax.match(rx) ){
throw 'Not enough parameters! ' + theSyntax;
}
theSyntax=theSyntax.replace(new RegExp(pcr,'g'), '%');
return theSyntax;
} catch(ex){
return null;
}
}
function wikibar_resolveEditItem(tiddlerWrapper, itemName){
if(tiddlerWrapper.hasChildNodes()){
var c=tiddlerWrapper.childNodes;
for(var i=0; i<c.length; i++){
var txt=wikibar_resolveEditItem(c[i], itemName);
if(!txt){
continue;
}else{
return txt;
}
}
}
return ((tiddlerWrapper.getAttribute && tiddlerWrapper.getAttribute('edit')==itemName)? tiddlerWrapper : null);
}
function wikibar_resolveEditItemValue(tiddlerWrapper, itemName){
var o = wikibar_resolveEditItem(tiddlerWrapper, itemName);
return (o? o.value.replace(/\r/mg,'') : null);
}
function wikibar_resolveTiddlerEditorWrapper(obj){
if(obj.id=='tiddlerDisplay'){return null;}
if((obj.getAttribute && obj.getAttribute('macro')=='edit text')){return obj;}
return wikibar_resolveTiddlerEditorWrapper(obj.parentNode);
}
function wikibar_resolveTiddlerEditor(obj){
if(obj.hasChildNodes()){
var c = obj.childNodes;
for(var i=0; i<c.length; i++){
var o=wikibar_resolveTiddlerEditor(c[i]);
if(o){ return o;}
}
}
return ((obj.getAttribute && obj.getAttribute('edit')=='text')? obj : null);
}
function wikibar_resolveTargetButton(obj){
if(obj.id && obj.id.substring(0,7)=='wikibar'){ return null; }
if(obj.tiddlerTitle){
return obj;
}else{
return wikibar_resolveTargetButton(obj.parentNode);
}
}
function wikibar_isValidMenuItem(tool){
if(!tool){ return false; }
if(tool.TYPE=='MENU' || tool.TYPE=='MAIN_MENU'){
for(var key in tool){
if(key.substring(0,8)=='DYNAITEM'){ return true; }
if(wikibar_isValidMenuItem(tool[key])){ return true; }
}
return false;
}else{
return (tool.HANDLER? true : false);
}
}
function wikibar_editFormat(param){
var editor = param.button.editor;
var params = param.params;
clearMessage();
if(!editor){ return; }
var repText = wikibar_processSyntaxParams(this.syntax, params);
if(repText===null){ return; }
var st = editor.scrollTop;
var ss = editor.selectionStart;
var se = editor.selectionEnd;
var frontText= '';
var endText = '';
var fullText = editor.value;
if(se>ss && ss>=0){
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
}
else if(ss===0 && (se===0 || se == fullText.length) ){
endText = fullText;
}
else if(se==ss && ss>0){
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
}
if(repText.indexOf('user_text')>=0 && this.hint){
repText = repText.replace('user_text', this.hint);
}
editor.value = frontText + repText + endText;
editor.selectionStart = ss;
editor.selectionEnd = ss + repText.length;
editor.scrollTop = st;
editor.focus();
}
function wikibar_editFormatByWord(param){
var editor = param.button.editor;
var params = param.params;
clearMessage();
if(!editor){return;}
var repText = wikibar_processSyntaxParams(this.syntax, params);
if(repText===null){ return; }
var st = editor.scrollTop;
var ss = editor.selectionStart;
var se = editor.selectionEnd;
var frontText= '';
var selText = '';
var endText = '';
var fullText = editor.value;
if(se>ss && ss>=0){
frontText = fullText.substring(0, ss);
selText = fullText.substring(ss,se);
endText = fullText.substring(se, fullText.length);
}
else if(ss===0 && (se===0 || se == fullText.length) ){
endText = fullText;
}
else if(se==ss && ss>0){
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
if(!( fullText.charAt(ss-1).match(/\W/gi) || fullText.charAt(ss).match(/\W/gi) )){
var m = frontText.match(/\W/gi);
if(m){
ss = frontText.lastIndexOf(m[m.length-1])+1;
}
else{
ss = 0;
}
m = endText.match(/\W/gi);
if(m){
se += endText.indexOf(m[0]);
}
else{
se = fullText.length;
}
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
selText = fullText.substring(ss,se);
}
}
if(selText.length>0){
repText = repText.replace('user_text', selText);
}
if(repText.indexOf('user_text')>=0 && this.hint){
repText = repText.replace('user_text', this.hint);
}
editor.value = frontText + repText + endText;
editor.selectionStart = ss;
editor.selectionEnd = ss + repText.length;
editor.scrollTop = st;
editor.focus();
}
function wikibar_editFormatByCursor(param){
var editor = param.button.editor;
var params = param.params;
clearMessage();
if(!editor){ return; }
var repText = wikibar_processSyntaxParams(this.syntax, params);
if(repText===null){ return; }
var st = editor.scrollTop;
var ss = editor.selectionStart;
var se = editor.selectionEnd;
var frontText= '';
var endText = '';
var fullText = editor.value;
if(se>ss && ss>=0){
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
}
else if(ss===0 && (se===0 || se == fullText.length) ){
endText = fullText;
}
else if(se==ss && ss>0){
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
}
if(repText.indexOf('user_text')>=0 && this.hint){
repText = repText.replace('user_text', this.hint);
}
editor.value = frontText + repText + endText;
editor.selectionStart = ss;
editor.selectionEnd = ss + repText.length;
editor.scrollTop = st;
editor.focus();
}
function wikibar_editFormatByLine(param){
var editor = param.button.editor;
var params = param.params;
clearMessage();
if(!editor){ return; }
var repText = wikibar_processSyntaxParams(this.syntax, params);
if(repText===null){ return; }
var st = editor.scrollTop;
var ss = editor.selectionStart;
var se = editor.selectionEnd;
var frontText= '';
var selText = '';
var endText = '';
var fullText = editor.value;
if(se>ss && ss>=0){
if(this.byBlock){
frontText = fullText.substring(0, ss);
selText = fullText.substring(ss,se);
endText = fullText.substring(se, fullText.length);
}
else{
se = ss;
}
}
if(ss===0 && (se===0 || se == fullText.length) ){
var m=fullText.match(/(\n|\r)/g);
if(m){
se = fullText.indexOf(m[0]);
}else{
se = fullText.length;
}
selText = fullText.substring(0, se);
endText = fullText.substring(se, fullText.length);
}
else if(se==ss && ss>0){
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
m = frontText.match(/(\n|\r)/g);
if(m){
ss = frontText.lastIndexOf(m[m.length-1])+1;
}
else{
ss = 0;
}
m = endText.match(/(\n|\r)/g);
if(m){
se += endText.indexOf(m[0]);
}
else{
se = fullText.length;
}
frontText = fullText.substring(0, ss);
selText = fullText.substring(ss,se);
endText = fullText.substring(se, fullText.length);
}
if(selText.length>0){
repText = repText.replace('user_text', selText);
}
if(repText.indexOf('user_text')>=0 && this.hint){
repText = repText.replace('user_text', this.hint);
}
if(this.byBlock){
if( (frontText.charAt(frontText.length-1)!='\n') && ss>0 ){
repText = '\n' + repText;
}
if( (endText.charAt(0)!='\n') || se==fullText.length){
repText += '\n';
}
}
editor.value = frontText + repText + endText;
editor.selectionStart = ss;
editor.selectionEnd = ss + repText.length;
editor.scrollTop = st;
editor.focus();
}
function wikibar_editFormatByTableCell(param){
var editor = param.button.editor;
var params = param.params;
clearMessage();
if(!editor){ return; }
var repText = wikibar_processSyntaxParams(this.syntax, params);
if(repText===null){ return; }
var st = editor.scrollTop;
var ss = editor.selectionStart;
var se = editor.selectionEnd;
var frontText= '';
var selText = '';
var endText = '';
var fullText = editor.value;
if(ss===0 || ss==fullText.length){
throw 'not valid cell!';
}
se=ss;
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
i=frontText.lastIndexOf('\n');
j=frontText.lastIndexOf('|');
if(i>j || j<0){
throw 'not valid cell!';
}
ss = j+1;
i=endText.indexOf('\n');
j=endText.indexOf('|');
if(i<j || j<0){
throw 'not valid cell!';
}
se += j;
frontText = fullText.substring(0, ss-1);
selText = fullText.substring(ss,se);
endText = fullText.substring(se+1, fullText.length);
if(this.key.substring(0,5)=='align'){
selText = selText.trim();
if( selText=='>' || selText=='~' || selText.substring(0,8)=='bgcolor(') {return; }
}
if(selText.length>0){
repText = repText.replace('user_text', selText);
}
if(repText.indexOf('user_text')>=0 && this.hint){
repText = repText.replace('user_text', this.hint);
}
editor.value = frontText + repText + endText;
editor.selectionStart = ss;
editor.selectionEnd = ss + repText.length - 2;
editor.scrollTop = st;
editor.focus();
}
function wikibar_editSelectAll(param){
var editor = param.button.editor;
editor.selectionStart = 0;
editor.selectionEnd = editor.value.length;
editor.scrollTop = 0;
editor.focus();
}
function wikibar_doPreview(param){
var theButton = param.button;
var editor = param.button.editor;
var wikibar = theButton.parentNode;
if(!wikibar) { return; }
title = theButton.tiddlerTitle;
var editorWrapper = wikibar_resolveTiddlerEditorWrapper(editor);
var tiddlerWrapper = editorWrapper.parentNode;
var previewer = document.getElementById('previewer'+title);
if(previewer){
previewer.parentNode.removeChild(previewer);
editorWrapper.style.display = 'block';
visible=true;
}else{
previewer = document.createElement('div');
previewer.id = 'previewer'+title;
previewer.className = 'viewer previewer';
previewer.style.height = (editor.offsetHeight) + 'px';
wikify(editor.value, previewer);
tiddlerWrapper.insertBefore(previewer, editorWrapper);
editorWrapper.style.display = 'none';
visible=false;
}
var pv=null;
for(var i=0; i<wikibar.childNodes.length; i++){
try{
var btn = wikibar.childNodes[i];
if(btn.toolItem.key == 'preview'){ pv=btn; }
if(btn.toolItem.key != 'preview'){
btn.style.display = visible ? '': 'none';
}
}catch(ex){}
}
if(!pv) { return; }
if(visible){
pv.innerHTML = '<font face=\"verdana\">∞</font>';
pv.title = 'preview current tiddler';
}
else{
pv.innerHTML = '<font face=\"verdana\">←</font>';
pv.title = 'back to editor';
}
}
function wikibar_doListAddons(param){
clearMessage();
var title = param.button.tiddlerTitle;
var wikibarButton = document.getElementById('wikibarButton'+title);
var ok=0, fail=0;
for(var i=0; i<wikibarButton.addons.length; i++){
var addon=wikibarButton.addons[i];
if(addon.ok){
displayMessage('[ o ] '+addon.name);
ok++;
}
else{
displayMessage('[ x ] '+addon.name + ': ' + addon.error);
fail++;
}
}
displayMessage('---------------------------------');
displayMessage(ok + ' ok ; ' + fail + ' failed');
}
function wikibar_getColorCode(param){
var cbOnPickColor = function(colorCode, param){
param.params = colorCode;
param.button.toolItem.doMore(param);
};
wikibarColorTool.openColorPicker(param.button, cbOnPickColor, param);
}
function wikibar_getLinkUrl(param){
var url= prompt('Please enter the link target', (this.param? this.param : ''));
if (url && url.trim().length>0){
param.params = url;
this.doMore(param);
}
}
function wikibar_getTableRowCol(param){
var rc= prompt('Please enter (rows x cols) of the table', '2 x 3');
if (!rc || (rc.trim()).length<=0){ return; }
var arr = rc.toUpperCase().split('X');
if(arr.length != 2) { return; }
for(var i=0; i<arr.length; i++){
if(isNaN(arr[i].trim())) { return; }
}
var rows = parseInt(arr[0].trim(), 10);
var cols = parseInt(arr[1].trim(), 10);
var txtTable='';
for(var r=0; r<rows; r++){
for(var c=0; c<=cols; c++){
if(c===0){
txtTable += '|';
}else{
txtTable += ' |';
}
}
txtTable += '\n';
}
if(txtTable.trim().length>0){
param.params = txtTable.trim();
this.doMore(param);
}
}
function wikibar_getMacroParam(param){
var p = prompt('Please enter the parameters of macro \"' + this.key + '\":' +
'\nSyntax: ' + this.syntax +
'\n\nNote: '+
'\n%1,%2,... - parameter needed'+
'\n[%1] - optional parameter'+
'\n%N - more than one parameter(1~n)'+
'\n[%N] - any number of parameters(0~n)'+
'\n\nPS:'+
'\n1. Parameters should be seperated with space character'+
'\n2. Use \" to wrap the parameter that includes space character, ex: \"hello world\"'+
'\n3. Input the word(null) for the optional parameter ignored',
(this.param? this.param : '') );
if(!p) { return; }
p=p.readMacroParams();
for(var i=0; i<p.length; i++){
var s=p[i].trim();
if(s.indexOf(' ')>0){ p[i]="'"+s+"'"; }
if(s.toLowerCase()=='null'){ p[i]=null; }
}
param.params = p;
this.doMore(param);
}
function wikibar_getMorePalette(unused){
clearMessage();
displayMessage('Get more color palettes(*.gpl) from ColorZilla Palettes site', 'http:\/\/www.iosart.com/firefox/colorzilla/palettes.html');
displayMessage('Save it as a new tiddler with \"ColorPalettes\" tag');
}
function wikibar_createWikibar(title){
var theWikibar = document.getElementById('wikibar' + title);
if(theWikibar){
if(theWikibar.hasChildNodes()){
theWikibar.style.display = (theWikibar.style.display=='block'? 'none':'block');
return;
}
}
var tiddlerWrapper = document.getElementById('tiddler'+title);
var theTextarea = wikibar_resolveTiddlerEditor(tiddlerWrapper);
if(!theTextarea){
clearMessage();
displayMessage('WikiBar only works in tiddler edit mode now');
return;
}else{
if(!theTextarea.id){ theTextarea.id = 'editor'+title; }
if(!theTextarea.parentNode.id){ theTextarea.parentNode.id='editorWrapper'+title; }
}
if(theWikibar){
theWikibar = document.getElementById('wikibar'+title);
}else{
var editorWrapper = wikibar_resolveTiddlerEditorWrapper(theTextarea);
theWikibar = createTiddlyElement(tiddlerWrapper, 'div', 'wikibar'+title, 'toolbar');
addClass(theWikibar, 'wikibar');
var previewer = document.getElementById('previewer'+title);
if(previewer){
tiddlerWrapper.insertBefore(theWikibar, previewer);
}else{
tiddlerWrapper.insertBefore(theWikibar, editorWrapper);
}
}
wikibar_createMenu(theWikibar,wikibarStore,title,theTextarea);
if(config.options['chkWikibarSetEditorHeight'] && config.options['txtWikibarEditorRows']){
theTextarea.rows = config.options['txtWikibarEditorRows'];
}
setStylesheet(
'.wikibar{text-align:left;visibility:visible;margin:2px;padding:1px;}.previewer{overflow:auto;display:block;border:1px solid;}#colorPicker{position:absolute;display:none;z-index:10;margin:0px;padding:0px;}#colorPicker table{margin:0px;padding:0px;border:2px solid #000;border-spacing:0px;border-collapse:collapse;}#colorPicker td{margin:0px;padding:0px;border:1px solid;font-size:11px;text-align:center;cursor:auto;}#colorPicker .header{background-color:#fff;}#colorPicker .button{background-color:#fff;cursor:pointer;cursor:hand;}#colorPicker .button:hover{padding-top:3px;padding-bottom:3px;color:#fff;background-color:#136;}#colorPicker .cell{padding:4px;font-size:7px;cursor:crosshair;}#colorPicker .cell:hover{padding:10px;}.wikibarPopup{position:absolute;z-index:10;border:1px solid #014;color:#014;background-color:#cef;}.wikibarPopup table{margin:0;padding:0;border:0;border-spacing:0;border-collapse:collapse;}.wikibarPopup .button:hover{color:#eee;background-color:#014;}.wikibarPopup .disabled{color:#888;}.wikibarPopup .disabled:hover{color:#888;background-color:#cef;}.wikibarPopup tr .seperator hr{margin:0;padding:0;background-color:#cef;width:100%;border:0;border-top:1px dashed #014;}.wikibarPopup tr .icon{font-family:verdana;font-weight:bolder;}.wikibarPopup tr .marker{font-family:verdana;font-weight:bolder;}.wikibarPopup td{font-size:0.9em;padding:2px;}.wikibarPopup input{border:0;border-bottom:1px solid #014;margin:0;padding:0;font-family:arial;font-size:100%;background-color:#fff;}',
'WikiBarStyleSheet');
}
function wikibar_createMenu(place,toolset,title,editor){
if(!wikibar_isValidMenuItem(toolset)){return;}
if(!(toolset.TYPE=='MAIN_MENU' || toolset.TYPE=='MENU')){ return; }
for(var key in toolset){
if(key.substring(0,9)=='SEPERATOR'){
wikibar_createMenuSeperator(place);
continue;
}
if(key.substring(0,8)=='DYNAITEM'){
var dynaTools = toolset[key](title,editor);
if(dynaTools.TYPE && dynaTools.TYPE=='MENU'){
wikibar_createMenuItem(place,dynaTools,null,editor,title);
}else{
dynaTools.TYPE = 'MENU';
wikibar_createMenu(place, dynaTools, title, editor);
}
continue;
}
if((toolset[key].TYPE!='MENU' && toolset[key].TYPE!='MAIN_MENU') && !toolset[key].HANDLER){continue;}
wikibar_createMenuItem(place,toolset,key,editor,title);
}
}
function wikibar_createMenuItem(place,toolset,key,editor,title){
if(!key){
var tool = toolset;
}else{
tool = toolset[key];
tool.key = key;
}
if(!wikibar_isValidMenuItem(tool)){return;}
var toolIsOnMainMenu = (toolset.TYPE=='MAIN_MENU');
var toolIsMenu = (tool.TYPE=='MENU');
var theButton;
if(toolIsOnMainMenu){
theButton = createTiddlyButton(
place,
'',
(tool.TOOLTIP? tool.TOOLTIP : ''),
(toolIsMenu? wikibar_onClickMenuItem : wikibar_onClickItem),
'button');
theButton.innerHTML = (tool.CAPTION? tool.CAPTION : key);
theButton.isOnMainMenu = true;
addClass(theButton, (toolIsMenu? 'menu' : 'item'));
place.appendChild( document.createTextNode('\n') );
if(!toolIsMenu){
if(config.options['chkWikibarPopmenuOnMouseOver']){
theButton.onmouseover = function(e){ wikibarPopup.remove(); };
}
}
}else{
theButton=createTiddlyElement(place, 'tr',key,'button');
theButton.title = (tool.TOOLTIP? tool.TOOLTIP : '');
theButton.onclick = (toolIsMenu? wikibar_onClickMenuItem : wikibar_onClickItem);
var tdL = createTiddlyElement(theButton, 'td','','marker');
var td = createTiddlyElement(theButton, 'td');
var tdR = createTiddlyElement(theButton, 'td','','marker');
td.innerHTML = (tool.CAPTION? tool.CAPTION : key);
if(toolIsMenu){
tdR.innerHTML=' ›';
}
if(tool.SELECTED){
tdL.innerHTML = '√ ';
addClass(theButton, 'selected');
}
if(tool.DISABLED){
addClass(theButton, 'disabled');
}
}
theButton.tiddlerTitle = title;
theButton.toolItem = tool;
theButton.editor = editor;
theButton.tabIndex = 999;
if(toolIsMenu){
if(config.options['chkWikibarPopmenuOnMouseOver']){
theButton.onmouseover = wikibar_onClickMenuItem;
}
}
}
function wikibar_createMenuSeperator(place){
if(place.id.substring(0,7)=='wikibar') { return; }
var onclickSeperator=function(e){
if(!e){ e = window.event; }
e.cancelBubble = true;
if (e.stopPropagation){ e.stopPropagation(); }
return(false);
};
var theButton=createTiddlyElement(place,'tr','','seperator');
var td = createTiddlyElement(theButton, 'td','','seperator');
td.colSpan=3;
theButton.onclick=onclickSeperator;
td.innerHTML = '<hr>';
}
function wikibar_genWikibarAbout(){
var toolset={};
toolset.version = {
CAPTION: '<center>WikiBar ' +
config.macros.wikibar.major + '.' +
config.macros.wikibar.minor + '.' +
config.macros.wikibar.revision +
(config.macros.wikibar.beta? ' beta '+config.macros.wikibar.beta : '') +
'</center>',
HANDLER: function(){}
};
toolset.SEPERATOR = {};
toolset.author = {
CAPTION: '<center>Arphen Lin<br>arphenlin@gmail.com</center>',
TOOLTIP: 'send mail to the author',
HANDLER: function(){ window.open('mailto:arphenlin@gmail.com'); }
};
toolset.website = {
CAPTION: '<center>aiddlywiki.sourceforge.net</center>',
TOOLTIP: 'go to the web site of WikiBar',
HANDLER: function(){ window.open('http:\/\/aiddlywiki.sourceforge.net/'); }
};
return toolset;
}
function wikibar_genWikibarOptions(title, editor){
var toolset={};
toolset.popOnMouseOver = {
CAPTION:'popup menu on mouse over',
SELECTED: config.options['chkWikibarPopmenuOnMouseOver'],
HANDLER: function(param){
config.options['chkWikibarPopmenuOnMouseOver'] = !config.options['chkWikibarPopmenuOnMouseOver'];
saveOptionCookie('chkWikibarPopmenuOnMouseOver');
var title = param.button.tiddlerTitle;
var wikibar = document.getElementById('wikibar'+title);
if(wikibar){ wikibar.parentNode.removeChild(wikibar); }
wikibar_createWikibar(title);
}
};
toolset.setEditorSize = {
CAPTION:'set editor height: <input id=\"txtWikibarEditorRows\" type=text size=1 MAXLENGTH=3 value=\"' +
(config.options['txtWikibarEditorRows']? config.options['txtWikibarEditorRows']:editor.rows) + '\"> ok',
HANDLER: function(param){
var input = document.getElementById('txtWikibarEditorRows');
if(input){
var rows = parseInt(input.value, 10);
if(!isNaN(rows)){
var editor = param.button.editor;
editor.rows = rows;
}else{
rows=config.maxEditRows;
}
config.options['txtWikibarEditorRows'] = rows;
saveOptionCookie('txtWikibarEditorRows');
config.maxEditRows = rows;
}
}
};
toolset.setEditorSizeOnLoadingWikibar = {
CAPTION:'set editor height on loading wikibar',
SELECTED: config.options['chkWikibarSetEditorHeight'],
HANDLER: function(param){
config.options['chkWikibarSetEditorHeight'] = !config.options['chkWikibarSetEditorHeight'];
saveOptionCookie('chkWikibarSetEditorHeight');
if(config.options['chkWikibarSetEditorHeight']){
var rows = config.options['txtWikibarEditorRows'];
if(!isNaN(rows)){ rows = 15; }
var editor = param.button.editor;
editor.rows = rows;
config.options['txtWikibarEditorRows'] = rows;
saveOptionCookie('txtWikibarEditorRows');
}
}
};
toolset.SEPERATOR = {};
toolset.update = {
CAPTION: 'check for updates',
DISABLED: true,
HANDLER: function(){}
};
return toolset;
}
function wikibar_genPaletteSelector(){
try{
var cpTiddlers = store.getTaggedTiddlers('ColorPalettes');
if(!cpTiddlers) { return; }
var palettes=[];
palettes.push(wikibarColorTool.defaultPaletteName);
for(var i=0; i<cpTiddlers.length; i++){
palettes.push(cpTiddlers[i].title.trim());
}
var toolset={};
for(i=0; i<palettes.length; i++){
toolset[palettes[i]] = {
TOOLTIP: palettes[i],
SELECTED: (palettes[i]==wikibarColorTool.paletteName),
HANDLER: wikibar_doSelectPalette
};
}
return toolset;
}catch(ex){ return null; }
}
function wikibar_onClickItem(e){
if(!e){ e = window.event; }
var theTarget = resolveTarget(e);
if(theTarget.tagName=='INPUT'){
e.cancelBubble = true;
if (e.stopPropagation){ e.stopPropagation(); }
return;
}
var theButton = wikibar_resolveTargetButton(theTarget);
if(!theButton){ return(false); }
var o = theButton.toolItem;
if(!o) { return; }
var param = {
event: e,
button: theButton
};
if(o.HANDLER){ o.HANDLER(param); }
if(o.DISABLED){
e.cancelBubble = true;
if (e.stopPropagation){ e.stopPropagation(); }
}
return(false);
}
function wikibar_onClickMenuItem(e){
if(!e){ e = window.event; }
var theButton = wikibar_resolveTargetButton(resolveTarget(e));
if(!theButton){ return(false); }
e.cancelBubble = true;
if (e.stopPropagation){ e.stopPropagation(); }
var title = theButton.tiddlerTitle;
var editor = theButton.editor;
var tool = theButton.toolItem;
if(!tool) { return; }
var popup = wikibarPopup.create(this);
if(popup){
wikibar_createMenu(popup,tool,title,editor);
if(!popup.hasChildNodes()){
wikibarPopup.remove();
}else{
wikibarPopup.show(popup, false);
}
}
return(false);
}
var wikibarColorTool = {
defaultPaletteName : 'default',
defaultColumns : 16,
defaultPalette : [
'#FFF','#DDD','#CCC','#BBB','#AAA','#999','#666','#333','#111','#000','#FC0','#F90','#F60','#F30','#C30','#C03',
'#9C0','#9D0','#9E0','#E90','#D90','#C90','#FC3','#FC6','#F96','#F63','#600','#900','#C00','#F00','#F36','#F03',
'#CF0','#CF3','#330','#660','#990','#CC0','#FF0','#C93','#C63','#300','#933','#C33','#F33','#C36','#F69','#F06',
'#9F0','#CF6','#9C3','#663','#993','#CC3','#FF3','#960','#930','#633','#C66','#F66','#903','#C39','#F6C','#F09',
'#6F0','#9F6','#6C3','#690','#996','#CC6','#FF6','#963','#630','#966','#F99','#F39','#C06','#906','#F3C','#F0C',
'#3F0','#6F3','#390','#6C0','#9F3','#CC9','#FF9','#C96','#C60','#C99','#F9C','#C69','#936','#603','#C09','#303',
'#0C0','#3C0','#360','#693','#9C6','#CF9','#FFC','#FC9','#F93','#FCC','#C9C','#969','#939','#909','#636','#606',
'#060','#3C3','#6C6','#0F0','#3F3','#6F6','#9F9','#CFC','#9CF','#FCF','#F9F','#F6F','#F3F','#F0F','#C6C','#C3C',
'#030','#363','#090','#393','#696','#9C9','#CFF','#39F','#69C','#CCF','#C9F','#96C','#639','#306','#90C','#C0C',
'#0F3','#0C3','#063','#396','#6C9','#9FC','#9CC','#06C','#369','#99F','#99C','#93F','#60C','#609','#C3F','#C0F',
'#0F6','#3F6','#093','#0C6','#3F9','#9FF','#699','#036','#039','#66F','#66C','#669','#309','#93C','#C6F','#90F',
'#0F9','#6F9','#3C6','#096','#6FF','#6CC','#366','#069','#36C','#33F','#33C','#339','#336','#63C','#96F','#60F',
'#0FC','#6FC','#3C9','#3FF','#3CC','#399','#033','#39C','#69F','#00F','#00C','#009','#006','#003','#63F','#30F',
'#0C9','#3FC','#0FF','#0CC','#099','#066','#3CF','#6CF','#09C','#36F','#0CF','#09F','#06F','#03F','#03C','#30C'
],
colorPicker : null,
pickColorHandler: null,
userData: null
};
wikibarColorTool.paletteName = wikibarColorTool.defaultPaletteName;
wikibarColorTool.columns = wikibarColorTool.defaultColumns;
wikibarColorTool.palette = wikibarColorTool.defaultPalette;
wikibarColorTool.onPickColor = function(e){
if (!e){ e = window.event; }
var theCell = resolveTarget(e);
if(!theCell){ return(false); }
color = theCell.bgColor.toLowerCase();
if(!color) { return; }
wikibarColorTool.displayColorPicker(false);
if(wikibarColorTool.pickColorHandler){
wikibarColorTool.pickColorHandler(color, wikibarColorTool.userData);
}
return(false);
};
wikibarColorTool.onMouseOver = function(e){
if (!e){ e = window.event; }
var theButton = resolveTarget(e);
if(!theButton){ return(false); }
if(!wikibarColorTool) { return; }
color = theButton.bgColor.toUpperCase();
if(!color) { return; }
td=document.getElementById('colorPickerInfo');
if(!td) { return; }
td.bgColor = color;
td.innerHTML = '<span style=\"color:#000;\">'+color+'</span> ' +
'<span style=\"color:#fff;\">'+color+'</span>';
e.cancelBubble = true;
if (e.stopPropagation){ e.stopPropagation(); }
return(false);
};
wikibarColorTool.openColorPicker = function(theTarget, pickColorHandler, userData){
wikibarColorTool.skipClickDocumentEvent = true;
wikibarColorTool.pickColorHandler = pickColorHandler;
wikibarColorTool.userData = userData;
wikibarColorTool.moveColorPicker(theTarget);
};
wikibarColorTool.convert3to6HexColor = function(c){
c=c.trim();
var rx=/^\#(\d|[a-f])(\d|[a-f])(\d|[a-f])$/gi;
return (rx.test(c)? c.replace(rx, '#$1$1$2$2$3$3') : c);
};
wikibarColorTool.numToHexColor = function (n){
if(typeof(n)=='number' && (n>=0 && n<=255)) {
s = n.toString(16).toLowerCase();
return ((s.length==1)? '0'+s : s);
}else{
return null;
}
};
wikibarColorTool.renderColorPalette = function(){
if(wikibarColorTool.paletteName==wikibarColorTool.defaultPaletteName){
wikibarColorTool.palette=wikibarColorTool.defaultPalette;
wikibarColorTool.columns=wikibarColorTool.defaultColumns;
return;
}
tiddlerText = (store.getTiddlerText(wikibarColorTool.paletteName, '')).trim();
if(tiddlerText.length<=0) { return; }
var cpContents = tiddlerText.split('\n');
var colors=[];
columns = wikibarColorTool.defaultColumns;
var tmpArray=null;
errCount=0;
for(var i=0; i<cpContents.length; i++){
cpLine=cpContents[i].trim();
if( (!cpLine) || (cpLine.length<=0) || (cpLine.charAt(0) == '#') ){ continue; }
if(cpLine.substring(0,8).toLowerCase()=='columns:'){
tmpArray = cpLine.split(':');
try{
columns = parseInt(tmpArray[1],10);
}catch(ex){
columns = wikibarColorTool.defaultColumns;
}
}else{
tmpArray = cpLine.replace('\t', ' ').split(/[ ]{1,}/);
try{
color='';
for(var j=0; j<3; j++){
c=parseInt(tmpArray[j].trim(), 10);
if(isNaN(c)){
break;
}else{
c=wikibarColorTool.numToHexColor(c);
if(!c) {break;}
color+=c;
}
}
if(color.length==6){
colors.push('#'+color);
} else {
throw 'error';
}
}catch(ex){
}
}
}
if(colors.length>0){
wikibarColorTool.palette = colors;
wikibarColorTool.columns = columns;
}else{
throw 'renderColorPalette(): No color defined in the palette.';
}
};
wikibarColorTool.displayColorPicker = function(visible){
if(wikibarColorTool.colorPicker){
wikibarColorTool.colorPicker.style.display = (visible? 'block' : 'none');
}
};
wikibarColorTool.moveColorPicker = function(theTarget){
if(!wikibarColorTool.colorPicker){
wikibarColorTool.createColorPicker();
}
var cp = wikibarColorTool.colorPicker;
var rootLeft = findPosX(theTarget);
var rootTop = findPosY(theTarget);
var popupLeft = rootLeft;
var popupTop = rootTop;
var popupWidth = cp.offsetWidth;
var winWidth = findWindowWidth();
if(popupLeft + popupWidth > winWidth){
popupLeft = winWidth - popupWidth;
}
cp.style.left = popupLeft + 'px';
cp.style.top = popupTop + 'px';
wikibarColorTool.displayColorPicker(true);
};
wikibarColorTool.createColorPicker = function(unused, palette){
if(palette){ wikibarColorTool.paletteName=palette; }
wikibarColorTool.renderColorPalette();
wikibarColorTool.colorPicker = document.createElement('div');
wikibarColorTool.colorPicker.id = 'colorPicker';
document.body.appendChild(wikibarColorTool.colorPicker);
var theTable = document.createElement('table');
wikibarColorTool.colorPicker.appendChild(theTable);
var theTR = document.createElement('tr');
theTable.appendChild(theTR);
var theTD = document.createElement('td');
theTD.className = 'header';
theTD.colSpan = wikibarColorTool.columns;
theTD.innerHTML = wikibarColorTool.paletteName;
theTR.appendChild(theTD);
for(var i=0; i<wikibarColorTool.palette.length; i++){
if((i%wikibarColorTool.columns)===0){
theTR = document.createElement('tr');
theTable.appendChild(theTR);
}
theTD = document.createElement('td');
theTD.className = 'cell';
theTD.bgColor = wikibarColorTool.convert3to6HexColor(wikibarColorTool.palette[i]);
theTD.onclick = wikibarColorTool.onPickColor;
theTD.onmouseover = wikibarColorTool.onMouseOver;
theTR.appendChild(theTD);
}
rest = wikibarColorTool.palette.length % wikibarColorTool.columns;
if(rest>0){
theTD = document.createElement('td');
theTD.colSpan = wikibarColorTool.columns-rest;
theTD.bgColor = '#000000';
theTR.appendChild(theTD);
}
theTR = document.createElement('tr');
theTable.appendChild(theTR);
theTD = document.createElement('td');
theTD.colSpan = wikibarColorTool.columns;
theTD.id = 'colorPickerInfo';
theTR.appendChild(theTD);
};
wikibarColorTool.onDocumentClick = function(e){
if (!e){ e = window.event; }
if(wikibarColorTool.skipClickDocumentEvent) {
wikibarColorTool.skipClickDocumentEvent = false;
return true;
}
if((!e.eventPhase) || e.eventPhase == Event.BUBBLING_PHASE || e.eventPhase == Event.AT_TARGET){
wikibarColorTool.displayColorPicker(false);
}
return true;
};
function wikibar_doSelectPalette(param){
clearMessage();
var theButton = param.button;
if(!theButton.toolItem.key) { return; }
var palette = theButton.toolItem.key;
var oldPaletteName = wikibarColorTool.paletteName;
if(oldPaletteName != palette){
try{
wikibarColorTool.createColorPicker(theButton, palette);
displayMessage('Palette \"'+palette+'\" ('+ wikibarColorTool.palette.length +' colors) is selected');
}catch(ex){
errMsg = ex;
if(errMsg.substring(0,18)=='renderColorPalette'){
displayMessage('Invalid palette \"' + palette + '\", please check it out!');
wikibarColorTool.createColorPicker(theButton, oldPaletteName);
}
}
}
}
var wikibarPopup = {
skipClickDocumentEvent: false,
stack: []
};
wikibarPopup.resolveRootPopup = function(o){
if(o.isOnMainMenu){ return null; }
if(o.className.substring(0,12)=='wikibarPopup'){ return o;}
return wikibarPopup.resolveRootPopup(o.parentNode);
};
wikibarPopup.create = function(root){
for(var i=0; i<wikibarPopup.stack.length; i++){
var p=wikibarPopup.stack[i];
if(p.root==root){
wikibarPopup.removeFrom(i+1);
return null;
}
}
var rootPopup = wikibarPopup.resolveRootPopup(root);
if(!rootPopup){
wikibarPopup.remove();
}else{
wikibarPopup.removeFromRootPopup(rootPopup);
}
var popup = createTiddlyElement(document.body,'div','wikibarPopup'+root.toolItem.key,'wikibarPopup');
var pop = createTiddlyElement(popup,'table','','');
wikibarPopup.stack.push({rootPopup: rootPopup, root: root, popup: popup});
return pop;
};
wikibarPopup.show = function(unused,slowly){
var curr = wikibarPopup.stack[wikibarPopup.stack.length-1];
var overlayWidth = 1;
var rootLeft, rootTop, rootWidth, rootHeight, popupLeft, popupTop, popupWidth;
if(curr.rootPopup){
rootLeft = findPosX(curr.rootPopup);
rootTop = findPosY(curr.root);
rootWidth = curr.rootPopup.offsetWidth;
popupLeft = rootLeft + rootWidth - overlayWidth;
popupTop = rootTop;
}else{
rootLeft = findPosX(curr.root);
rootTop = findPosY(curr.root);
rootHeight = curr.root.offsetHeight;
popupLeft = rootLeft;
popupTop = rootTop + rootHeight;
}
var winWidth = findWindowWidth();
popupWidth = curr.popup.offsetWidth;
if(popupLeft + popupWidth > winWidth){
popupLeft = rootLeft - popupWidth + overlayWidth;
}
curr.popup.style.left = popupLeft + 'px';
curr.popup.style.top = popupTop + 'px';
curr.popup.style.display = 'block';
addClass(curr.root, 'highlight');
if(config.options.chkAnimate){
anim.startAnimating(new Scroller(curr.popup,slowly));
}else{
window.scrollTo(0,ensureVisible(curr.popup));
}
};
wikibarPopup.remove = function(){
if(wikibarPopup.stack.length > 0){
wikibarPopup.removeFrom(0);
}
};
wikibarPopup.removeFrom = function(from){
for(var t=wikibarPopup.stack.length-1; t>=from; t--){
var p = wikibarPopup.stack[t];
removeClass(p.root,'highlight');
p.popup.parentNode.removeChild(p.popup);
}
wikibarPopup.stack = wikibarPopup.stack.slice(0,from);
};
wikibarPopup.removeFromRootPopup = function(from){
for(var t=0; t<wikibarPopup.stack.length; t++){
var p = wikibarPopup.stack[t];
if(p.rootPopup==from){
wikibarPopup.removeFrom(t);
break;
}
}
};
wikibarPopup.onDocumentClick = function(e){
if (!e){ e = window.event; }
if(wikibarPopup.skipClickDocumentEvent){
wikibarPopup.skipClickDocumentEvent=false;
return true;
}
if((!e.eventPhase) || e.eventPhase == Event.BUBBLING_PHASE || e.eventPhase == Event.AT_TARGET){
wikibarPopup.remove();
}
return true;
};
var wikibarStore = {
TYPE: 'MAIN_MENU',
help:{
TYPE:'MENU',
CAPTION: '<font face=\"verdana\">?</font>',
TOOLTIP: 'about WikiBar',
options:{
TYPE:'MENU',
DYNAITEM: wikibar_genWikibarOptions
},
about:{
TYPE:'MENU',
DYNAITEM: wikibar_genWikibarAbout
}
},
preview:{
TOOLTIP: 'preview this tiddler',
CAPTION: '<font face=\"verdana\">∞</font>',
HANDLER: wikibar_doPreview
},
line:{
TOOLTIP: 'horizontal line',
CAPTION: '<font face=\"verdana\">—</font>',
syntax: '\n----\n',
HANDLER: wikibar_editFormatByCursor
},
crlf:{
TOOLTIP: 'new line',
CAPTION: '<font face=\"verdana\">¶</font>',
syntax: '\n',
HANDLER: wikibar_editFormatByCursor
},
selectAll:{
TOOLTIP: 'select all',
CAPTION: '<font face=\"verdana\">§</font>',
HANDLER: wikibar_editSelectAll
},
deleteSelected:{
TOOLTIP: 'delete selected',
CAPTION: '<font face=\"verdana\">×</font>',
syntax: '',
HANDLER: wikibar_editFormat
},
textFormat:{
TYPE: 'MENU',
CAPTION: 'text',
TOOLTIP: 'text formatters',
ignore:{
TOOLTIP: 'ignore wiki word',
CAPTION: 'ignore wikiWord',
syntax: '~user_text',
hint: 'wiki_word',
HANDLER: wikibar_editFormatByWord
},
bolder:{
TOOLTIP: 'bolder text',
CAPTION: '<strong>bolder</strong>',
syntax: "''user_text''",
hint: 'bold_text',
HANDLER: wikibar_editFormatByWord
},
italic:{
TOOLTIP: 'italic text',
CAPTION: '<em>italic</em>',
syntax: '\/\/user_text\/\/',
hint: 'italic_text',
HANDLER: wikibar_editFormatByWord
},
underline:{
TOOLTIP: 'underline text',
CAPTION: '<u>underline</u>',
syntax: '__user_text__',
hint: 'underline_text',
HANDLER: wikibar_editFormatByWord
},
strikethrough:{
TOOLTIP: 'strikethrough text',
CAPTION: '<strike>strikethrough</strike>',
syntax: '==user_text==',
hint: 'strikethrough_text',
HANDLER: wikibar_editFormatByWord
},
superscript:{
TOOLTIP: 'superscript text',
CAPTION: 'X<sup>superscript</sup>',
syntax: '^^user_text^^',
hint: 'superscript_text',
HANDLER: wikibar_editFormatByWord
},
subscript:{
TOOLTIP: 'subscript text',
CAPTION: 'X<sub>subscript</sub>',
syntax: '~~user_text~~',
hint: 'subscript_text',
HANDLER: wikibar_editFormatByWord
},
comment:{
TOOLTIP: 'comment text',
CAPTION: 'comment text',
syntax: '/%user_text%/',
hint: 'comment_text',
HANDLER: wikibar_editFormatByWord
},
monospaced:{
TOOLTIP: 'monospaced text',
CAPTION: '<code>monospaced</code>',
syntax: '{{{user_text}}}',
hint: 'monospaced_text',
HANDLER: wikibar_editFormatByWord
}
},
paragraph:{
TYPE: 'MENU',
TOOLTIP: 'paragarph formatters',
list:{
TYPE: 'MENU',
TOOLTIP: 'list tools',
bullet:{
TOOLTIP: 'bullet point',
syntax: '*user_text',
hint: 'bullet_text',
HANDLER: wikibar_editFormatByLine
},
numbered:{
TOOLTIP: 'numbered list',
syntax: '#user_text',
hint: 'numbered_text',
HANDLER: wikibar_editFormatByLine
}
},
heading:{
TYPE: 'MENU',
heading1:{
CAPTION:'<h1>Heading 1</h1>',
TOOLTIP: 'Heading 1',
syntax: '!user_text',
hint: 'heading_1',
HANDLER: wikibar_editFormatByLine
},
heading2:{
CAPTION:'<h2>Heading 2<h2>',
TOOLTIP: 'Heading 2',
syntax: '!!user_text',
hint: 'heading_2',
HANDLER: wikibar_editFormatByLine
},
heading3:{
CAPTION:'<h3>Heading 3</h3>',
TOOLTIP: 'Heading 3',
syntax: '!!!user_text',
hint: 'heading_3',
HANDLER: wikibar_editFormatByLine
},
heading4:{
CAPTION:'<h4>Heading 4</h4>',
TOOLTIP: 'Heading 4',
syntax: '!!!!user_text',
hint: 'heading_4',
HANDLER: wikibar_editFormatByLine
},
heading5:{
CAPTION:'<h5>Heading 5</h5>',
TOOLTIP: 'Heading 5',
syntax: '!!!!!user_text',
hint: 'heading_5',
HANDLER: wikibar_editFormatByLine
}
},
comment:{
TYPE: 'MENU',
commentByLine:{
CAPTION:'comment by line',
TOOLTIP: 'line comment',
syntax: '/%user_text%/',
hint: 'comment_text',
HANDLER: wikibar_editFormatByLine
},
commentByBlock:{
CAPTION:'comment by block',
TOOLTIP: 'block comment',
syntax: '/%\nuser_text\n%/',
hint: 'comment_text',
byBlock: true,
HANDLER: wikibar_editFormatByLine
}
},
monospaced:{
TYPE: 'MENU',
monosByLine:{
CAPTION: 'monospaced by line',
TOOLTIP: 'line monospaced',
syntax: '{{{\nuser_text\n}}}',
hint: 'monospaced_text',
HANDLER: wikibar_editFormatByLine
},
monosByBlock:{
CAPTION: 'monospaced by block',
TOOLTIP: 'block monospaced',
syntax: '{{{\nuser_text\n}}}',
hint: 'monospaced_text',
byBlock: true,
HANDLER: wikibar_editFormatByLine
}
},
quote:{
TYPE: 'MENU',
quoteByLine:{
CAPTION: 'quote by line',
TOOLTIP: 'line quote',
syntax: '>user_text',
hint: 'quote_text',
HANDLER: wikibar_editFormatByLine
},
quoteByBlcok:{
CAPTION: 'quote by block',
TOOLTIP: 'block quote',
syntax: '<<<\nuser_text\n<<<',
hint: 'quote_text',
byBlock: true,
HANDLER: wikibar_editFormatByLine
}
},
plugin:{
TYPE: 'MENU',
code:{
CAPTION: 'code area',
TOOLTIP: 'block monospaced for plugin',
syntax: '\n\/\/{{{\nuser_text\n\/\/}}}\n',
hint: 'monospaced_plugin_code',
byBlock: true,
HANDLER: wikibar_editFormatByLine
},
commentByLine:{
CAPTION: 'comment by line',
TOOLTIP: 'line comment',
syntax: '\/\/user_text',
hint: 'plugin_comment',
HANDLER: wikibar_editFormatByLine
},
commentByBlock:{
CAPTION: 'comment by block',
TOOLTIP: 'block comment',
syntax: '\/\***\nuser_text\n***\/',
hint: 'plugin_comment',
byBlock: true,
HANDLER: wikibar_editFormatByLine
}
},
css:{
TYPE: 'MENU',
code:{
CAPTION: 'code area',
TOOLTIP: 'block monospaced for css',
syntax: '\n\nuser_text\n\n',
hint: 'monospaced_css_code',
byBlock: true,
HANDLER: wikibar_editFormatByLine
},
commentByLine:{
CAPTION: 'comment by line',
TOOLTIP: 'line comment',
syntax: '',
hint: 'css_comment',
HANDLER: wikibar_editFormatByLine
},
commentByBlock:{
CAPTION: 'comment by block',
TOOLTIP: 'block comment',
syntax: '',
hint: 'css_comment',
byBlock: true,
HANDLER: wikibar_editFormatByLine
}
}
},
color:{
TYPE: 'MENU',
TOOLTIP: 'color tools',
highlight:{
CAPTION:'highlight text',
TOOLTIP: 'highlight text',
syntax: '@@user_text@@',
hint: 'highlight_text',
HANDLER: wikibar_editFormatByWord
},
color:{
CAPTION:'text color',
TOOLTIP: 'text color',
hint: 'your_text',
syntax: '@@color(%1):user_text@@',
HANDLER: wikibar_getColorCode,
doMore: wikibar_editFormatByWord
},
bgcolor:{
CAPTION:'background color',
TOOLTIP: 'background color',
hint: 'your_text',
syntax: '@@bgcolor(%1):user_text@@',
HANDLER: wikibar_getColorCode,
doMore: wikibar_editFormatByWord
},
colorcode:{
CAPTION:'color code',
TOOLTIP: 'insert color code',
syntax: '%1',
HANDLER: wikibar_getColorCode,
doMore: wikibar_editFormatByCursor
},
'color palette':{
TYPE:'MENU',
DYNAITEM: wikibar_genPaletteSelector,
SEPERATOR:{},
morePalette:{
CAPTION:'more palettes',
TOOLTIP:'get more palettes',
HANDLER: wikibar_getMorePalette
}
}
},
link:{
TYPE: 'MENU',
TOOLTIP: 'insert link',
wiki:{
CAPTION:'wiki link',
TOOLTIP: 'wiki link',
syntax: '[[user_text]]',
hint: 'wiki_word',
HANDLER: wikibar_editFormatByWord
},
pretty:{
CAPTION: 'pretty link',
TOOLTIP: 'pretty link',
syntax: '[[user_text|%1]]',
hint: 'pretty_word',
param: 'PrettyLink Target',
HANDLER: wikibar_getLinkUrl,
doMore: wikibar_editFormatByWord
},
url:{
TOOLTIP: 'url link',
syntax: '[[user_text|%1]]',
hint: 'your_text',
param: 'http:\/\/...',
HANDLER: wikibar_getLinkUrl,
doMore: wikibar_editFormatByWord
},
image:{
TOOLTIP: 'image link',
syntax: '[img[user_text|%1]]',
hint: 'alt_text',
param: 'image/icon.jpg',
HANDLER: wikibar_getLinkUrl,
doMore: wikibar_editFormatByWord
}
},
macro:{},
more:{
TYPE: 'MENU',
TOOLTIP: 'more tools',
table:{
TYPE: 'MENU',
TOOLTIP: 'table',
table:{
CAPTION:'create table',
TOOLTIP: 'create a new table',
syntax: '\n%1\n',
HANDLER: wikibar_getTableRowCol,
doMore: wikibar_editFormatByWord
},
header:{
TOOLTIP: 'table header text',
syntax: '|user_text|c',
hint: 'table_header',
HANDLER: wikibar_editFormatByWord
},
cell:{
TOOLTIP: 'create a tabel cell',
syntax: '|user_text|',
hint: 'your_text',
HANDLER: wikibar_editFormatByWord
},
columnHeader:{
CAPTION:'column header',
TOOLTIP: 'create a column header cell',
syntax: '|!user_text|',
hint: 'column_header',
HANDLER: wikibar_editFormatByWord
},
cell:{
TYPE: 'MENU',
CAPTION: 'cell options',
bgcolor:{
CAPTION: 'background color',
TOOLTIP: 'cell bgcolor',
syntax: '|bgcolor(%1):user_text|',
hint: 'your_text',
HANDLER: wikibar_getColorCode,
doMore: wikibar_editFormatByTableCell
},
alignLeft:{
CAPTION: 'align left',
TOOLTIP: 'left align cell text',
syntax: '|user_text|',
hint: 'your_text',
HANDLER: wikibar_editFormatByTableCell
},
alignCenter:{
CAPTION: 'align center',
TOOLTIP: 'center align cell text',
syntax: '| user_text |',
hint: 'your_text',
HANDLER: wikibar_editFormatByTableCell
},
alignRight:{
CAPTION: 'align right',
TOOLTIP: 'right align cell text',
syntax: '| user_text|',
hint: 'your_text',
HANDLER: wikibar_editFormatByTableCell
}
}
},
html:{
TYPE: 'MENU',
html:{
CAPTION: '<html>',
TOOLTIP: 'html tag',
syntax: '<html>\nuser_text\n</html>',
hint: 'html_content',
byBlock: true,
HANDLER: wikibar_editFormatByLine
}
}
},
addon:{
TYPE: 'MENU',
TOOLTIP:'3rd party tools',
'about addons':{
TOOLTIP: 'list loaded addons',
HANDLER: wikibar_doListAddons
},
SEPERATOR:{}
}
};
addEvent(document, 'click', wikibarColorTool.onDocumentClick);
addEvent(document, 'click', wikibarPopup.onDocumentClick);
wikibar_install();
//}}}
/***
!WikiBar CSS 說明
*井號開頭表示 id, ex: #colorPicker
*點號開頭表示 class, ex: .wikibar
!WikiBar Colors Used
*@@bgcolor(#014):color(#fff): #014 - 選單邊框@@
*@@bgcolor(#014):color(#fff): #014 - 選單字體色@@
*@@bgcolor(#cef): #cef - 選單底色@@
*@@bgcolor(#eee): #eee - 選單字體色:游標滑過時@@
*@@bgcolor(#014):color(#fff): #014 - 選單底色:游標滑過時@@
*@@bgcolor(#888): #888 - 無效選單字體色@@
*@@bgcolor(#cef): #cef - 無效選單底色:游標滑過時@@
*@@bgcolor(#014):color(#fff): #014 - 分隔線顏色@@
!wikibar: 工具列, 繼承 .toolbar /%==============================================%/
***/
/*{{{*/
.wikibar {
text-align: left;
visibility: visible;
margin:2px; padding:1px;
}
/*}}}*/
/***
!previewer: 預覽區, 繼承 .viewer /%==============================================%/
***/
/*{{{*/
.previewer {overflow:auto; display:block; border:1px solid;}
/*}}}*/
/***
!colorPicker 調色盤 /%==============================================%/
***/
/*{{{*/
#colorPicker {position:absolute; display:none; z-index:10; margin:0px; padding:0px; }
#colorPicker table {
margin:0px; padding:0px;
border:2px solid #000;
border-spacing: 0px;
border-collapse: collapse;
}
#colorPicker td {margin:0px; padding:0px; border:1px solid; font-size:11px; text-align:center; cursor:auto;}
#colorPicker .header {background-color: #fff;}
#colorPicker .button {background-color: #fff; cursor:pointer; cursor:hand;}
#colorPicker .button:hover {padding-top:3px; padding-bottom:3px; color:#fff; background-color:#136;}
#colorPicker .cell {padding:4px; font-size:7px; cursor:crosshair;}
#colorPicker .cell:hover {padding:10px;}
/*}}}*/
/***
!wikibarPopup 功能表選單 /%==============================================%/
***/
/*{{{*/
.wikibarPopup{
position:absolute; z-index:10;
border: 1px solid #014;
color: #014; background-color: #cef;
/*
max-height:150px;
overflow-x:hidden; overflow-y:auto;
*/
}
/* 彈出選單 */
.wikibarPopup table{
margin:0; padding:0;
border:0;
border-spacing:0;
border-collapse:collapse;
}
/* 選單上之按鈕 */
.wikibarPopup .button:hover{color:#eee; background-color: #014;}
/*
.wikibarPopup .selected {background-color: #cf6;}
*/
/* 停用選項 */
.wikibarPopup .disabled {color: #888;}
.wikibarPopup .disabled:hover {color: #888; background-color: #cef;}
/* 分隔線 */
.wikibarPopup tr .seperator hr{
margin:0; padding:0; background-color: #cef; width: 100%;
border: 0;
border-top: 1px dashed #014;
}
/* 選項左右兩邊符號區 */
.wikibarPopup tr .icon {font-family:verdana; font-weight:bolder;}
.wikibarPopup tr .marker {font-family:verdana; font-weight:bolder;}
/* 選項 */
.wikibarPopup td {font-size:0.9em; padding:2px;}
.wikibarPopup input{
border:0;
border-bottom: 1px solid #014;
margin:0; padding:0;
font-family: arial;
font-size:100%;
background-color: #fff;
}
/*}}}*/
Вот перечень наиболее популярных инструкции wiki-разметки:
# Заголовки !, !!, !!!, !!!, !!!!, !!!!
# Обычные списки - *, **, **
# Нумерованные списки #, ##, ##
# Жирный - две одинарных кавычки в начале и в конце.
# Наклонный - два слэша в начале и в конце
Xvfb (X virtual framebuffer) — виртуальный X-сервер, который для вывода использует не видеокарту, а оперативную память.
[[Linux: запуск графических приложений в фоне|http://habrahabr.ru/post/113928/]]
[[wiki|http://en.wikipedia.org/wiki/Xvfb]]
ZPG - Zero Player Game - вид компьютерных игр, в которых вмешательство человека в игровой процесс минимально или отсутствует вовсе.
# [[Годвилль|http://godville.net]]
# [[Сказка|http://the-tale.org]]
Аддоны:
# [[UnMHT|https://addons.mozilla.org/ru/firefox/addon/unmht/]]
# [[Super Start|https://addons.mozilla.org/ru/firefox/addon/super-start/]]
# [[Secure Login|https://addons.mozilla.org/ru/firefox/addon/secure-login/]]
# [[Scriptish|https://addons.mozilla.org/ru/firefox/addon/scriptish/]]
# [[Scriptify|https://addons.mozilla.org/ru/firefox/addon/scriptify/]]
# [[Save File to|https://addons.mozilla.org/ru/firefox/addon/save-file-to/]]
# [[RESTClient|https://addons.mozilla.org/ru/firefox/addon/restclient/]]
# [[REST Easy|https://addons.mozilla.org/ru/firefox/addon/rest-easy/]]
# [[RequestPolicy|https://addons.mozilla.org/ru/firefox/addon/requestpolicy/]]
# [[RefControl|https://addons.mozilla.org/ru/firefox/addon/refcontrol/]]
# [[Proxy Selector|https://addons.mozilla.org/ru/firefox/addon/proxy-selector/]]
# [[Offline QR generator|https://addons.mozilla.org/ru/firefox/addon/offlineqr/]]
# [[NoScript|https://addons.mozilla.org/ru/firefox/addon/noscript/]]
# [[Google search link fix|https://addons.mozilla.org/ru/firefox/addon/google-search-link-fix/]]
# [[Ghostery|https://addons.mozilla.org/ru/firefox/addon/ghostery/]]
# [[Firebug|https://addons.mozilla.org/ru/firefox/addon/firebug/]]
# [[FB2 Reader|https://addons.mozilla.org/ru/firefox/addon/fb2-reader/]]
# [[friGate|https://addons.mozilla.org/ru/firefox/addon/frigate/]]
# [[English-Russian dictionary|https://addons.mozilla.org/en-US/firefox/addon/english-russian-dict/]]
# [[Russian/English spell dictionary 1.0.0.1|http://ftp.mozilla-russia.org/dictionaries/ru-en_spell_dictionary.xpi]]
# [[S3.Google Переводчик|https://addons.mozilla.org/ru/firefox/addon/s3google-translator/]]
ссылки:
# http://www.citilink.ru/
# http://pickpoint.ru/partners/
# https://boards.4chan.org/gif/
# http://www.dressterra.ru/mens-rompers/?page=1
# http://futujama.ru/collection/dlya-nego
# http://www.kombinezon4u.ru/
# http://www.yoox.com/ru/54117735he/item?dept=women&tp=78825&utm_source=direct_ru&utm_medium=affiliazione&utm_campaign=feed_shmoter_ru#cod10=54117735HE&sizeId=
# http://www.luisaviaroma.com/index.aspx#ItemSrv.ashx|SeasonId=60I&CollectionId=3JD&ItemId=2&SeasonMemoCode=sale&GenderMemoCode=men&CategoryId=&SubLineId=clothing&PID=5806503&AID=11104552&utm_source=CommissionJunction&utm_medium=affiliation
# http://www.lamoda.ru/p/pu053emdtl71/clothes-puma-kombinezon/?utm_campaign=partner_110&utm_medium=ap&utm_source=lap&utm_content=3316977
# http://www.shmoter.ru/muzhskie-kombinezony
# http://www.asos.com/ru/Men/Onesies/Cat/pgecategory.aspx?cid=16714
# http://3dpmake.com/t/opensource
# http://www.hongkiat.com/blog/download-free-stl-3d-models/
# http://prn3d.ru/stati/pechat-na-3d-printere/abs-otlipaet.html
# http://prn3d.ru/stati/pechat-na-3d-printere/uskoreine-progreva.html
# http://ardunn.ru/goods/3D-принтер-Ppusa-I3-Acryll
# http://все-роботы.рф/index.php/www-shop/komplektuyushchie-dlya-3d-printera-buy
# http://avatech3d.ru/contacts
# http://home3dprint.ru/
# http://ro-bo.ru/katalog/hi-tech-gadzhety/neyrointerfeysyi/
# http://roboino.ru/collection/3d?page=2
# http://printers3d.ru/index.php?com=autoshop&elemId=119
# http://www.foroffice.ru/products/3d-plotter_allpages.html
# http://habrahabr.ru/company/masterkit/blog/253240/
# http://amperka.ru/
# http://gazontech.ru/catalog/274/7622/
# http://www.splav350.ru/ru/zhuk.html
# http://www.diving-nn.ru/new_treval
# http://club.navionic.ru/
# http://extremenn.ru/
# http://www.mirpr.ru/articles/
# http://aeroclubnn.ru/
# http://www.vertoletnn.ru/index.php?option=com_content&view=article&id=277&Itemid=337
# http://www.samaragid.ru/amusement/answers/gde-nauchitsya-letat-na-vertolete-v-nizhnem-novgorode.html
# http://maps.aopa.ru/#lon/43.662952/lat/56.163145/z/10/bl/gm/mode/r/ll/a/p/133
# http://upgrade-garage.ru/shop.php?cat=5#2
# http://navoroty.com/contacts
# http://www.niva4x4shop.com/index.php?route=product/product&product_id=162
# http://www.autoprospect.ru/vaz/21213-niva/21-3-snyatie-bloka-rele.html
# http://bery24.ru/
# http://www.avtozapchasty.ru/shop/i.php?id=8725674
# http://www.niva-club.net/
# http://www.niva4x4.ru/
# http://4x4nn.ru/
# http://niva-remont.com/zamena-generatora-svoimi-rukami/
# http://www.niva-lada4x4.ru/shop/product_info.php?cPath=37&products_id=1654
# http://niva-lada4x4.ru/shop/product_info.php?products_id=2670
# http://the-tale.org/game/
# https://appdb.winehq.org/objectManager.php?sClass=version&iId=25522
# https://www.ingress.com/intel?ll=56.272192,43.993957&z=15
# https://www.lektorium.tv/course/22896?id=22896
# http://www.intuit.ru/catalog/se/intel/
# http://universarium.org/#/
# http://lingualeo.com/ru/dashboard
# http://192.168.11.121
# http://192.168.11.10:9081/transmission/web/#upload
# http://mm3.github.io/4096/
# https://code.google.com/p/mm3/
# https://github.com/mm3
# http://mm3.tiddlyspot.com/
# https://www.inoreader.com/all_articles
# http://mm-3.livejournal.com/friends
# https://mail.google.com/mail/u/0/?tab=wm#inbox
# https://www.linux.org.ru/tracker/
# http://regex.info/exif.cgi?url
# http://solargear.ru/goods_charge_controller_guardian_12.htm
новый набор ссылок
# http://www.log4j.ru/articles/StandardAppenders.html
# http://habrahabr.ru/post/172075/
# https://github.com/rinconjc/app-introspector
# https://github.com/bbytes/log-see
# http://www.liquibase.org/documentation/command_line.html
# http://habrahabr.ru/post/266781/
# http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/testing.html#spring-mvc-test-framework
# http://stackoverflow.com/questions/20957477/testing-http-request-response-in-android/22334918#22334918
# http://stackoverflow.com/questions/4643105/how-to-unittest-a-class-using-resttemplate-offline
# http://habrahabr.ru/post/265061/
# http://skyruk.livejournal.com/244920.html
# http://habrahabr.ru/post/266969/
# http://slobodin.livejournal.com/155034.html
# http://geektimes.ru/company/robohunter/blog/262386/
# http://geektimes.ru/post/262454/
# http://www.emercoin.com/
# https://www.duolingo.com/
# http://lib.ru/LINUXGUIDE/bazar.txt
# http://rkka21.ru/docs/turing-award/ed1972r.pdf
скрипт для Scriptify для ЛОР-а:
{{{
// ==UserScript==
// @id www.linux.org.ru-2ch-style@scriptish
// @name LOR 2ch-style
// @version 0.1
// @author
// @description enter something useful
// @match http://www.linux.org.ru/*
// @match https://www.linux.org.ru/*
// @namespace http://www.linux.org.ru/*
// @namespace https://www.linux.org.ru/*
// @include http://www.linux.org.ru/*
// @include https://www.linux.org.ru/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.js
// @run-at document-end
// ==/UserScript==
(function () {
//
// Settings
//
var timeoutOnShow = 50;
var timeoutOnHide = 300;
//
var locationurl = $(location).attr("href").replace(/#.*$/, "");
var locatTimer = null;
var response = null;
var cleanTimer = function (){
if (locatTimer){
clearTimeout(locatTimer);
locatTimer = null;
}
};
var processMouseOut = function (msg){
cleanTimer();
locatTimer = setTimeout(function(){
locatTimer = null;
$('.2ch_popup').remove();
}, timeoutOnHide);
};
var processTimerOnShow = function (msg){
cleanTimer();
locatTimer = setTimeout(function(){
locatTimer = null;
msg();
}, timeoutOnShow);
};
var getMsgById = function (msgId){
return $("#comment-" + msgId);
};
var getMsgIdByLink = function(element) {
var msgId = null;
var href = $(element).prop("href");
var t = href.match(/comment-(\d+)/);
if(t != null)
{
var msgId = t[1];
if(msgId != null && msgId.length > 0)
{
return msgId;
}
}
t = href.match(/.*[\?\&]?cid=(\d+).*/);
if(t != null)
{
msgId = t[1];
}
return msgId;
};
var processLink = function (lnk, elem){
msg = lnk.parents('article');
showPopup(msg, elem);
};
var showPopup = function (msg, elem) {
var msg_title = msg.find('.title');
var msg_body = msg.find('.msg_body.message-w-userpic');
var popup = null;
if(msg_title.length > 0 && msg_body.length > 0)
{
popup = $('<div class="2ch_popup">' + '<div class="msg_title">' + msg_title.html() + '</div>' + '<div class="msg_body">' + msg_body.html() + '</div>' + '</div>');
}
else
{
popup = $('<div class="2ch_popup">' + msg.html() + '</div>');
}
popup.find('.hideon-phone').parent().remove();
popup.find('div.msg_title > a').each(function (idx,elem){$(elem).mouseover(function(){processTimerOnShow(function(){processMouseOver(elem);});});})
.mouseout(function(){cleanTimer();}).click(function(){cleanTimer();});
popup.find('div.answers > a').each(function (idx,elem){$(elem).mouseover(function(){processTimerOnShow(function(){showPopup(getMsgById(getMsgIdByLink(elem)), elem);});});})
.mouseout(function(){cleanTimer();}).click(function(){cleanTimer();});
popup.mouseenter(function(){cleanTimer();}).mouseleave(function(){processMouseOut();});
cleanTimer();
$('body').remove('.2ch_popup');
$(popup).css('z-index', '9999')
.css('position', 'absolute')
.css('top', ($(elem).offset().top+$(elem).height()+5)+'px')
.css('left', ($(elem).offset().left+20)+'px')
.css('background-color','#101010')
.css('width', '600px')
.css('border-radius', '5px')
.css('border-width', '1px')
.css('border-style', 'solid')
.css('border-color','#face8d')
.css('padding', '5px')
.attr('rel', $(elem).attr('href'));
$('body').append(popup);
};
var findLinks = function (msg, elem){
return $(msg).find('a').filter(function(){return ($(this).text() === "Ссылка" && $(this).attr('href') == $(elem).attr('href')); });
};
var processMouseOver = function (elem){
var links = findLinks($('#comments'), elem);
if(links.length > 0)
{
processLink(links, elem);
return false;
}
console.log('not found');
if($('.2ch_popup').length > 0 && $('.2ch_popup').attr('rel') == $(elem).attr('href'))
return false;
if(response != null)
{
links = findLinks(response,elem);
if(links.length > 0)
{
processLink(links, elem);
return false;
}
}
showPopup($('<div>loading</div>'), elem);
$.ajax({type: "GET", url: $(elem).attr('href')}).done(function(msg){response = $(msg);processLink(findLinks(msg,elem), elem);})
};
var processLinkComments = function (elem, msgId){
$(elem).mouseover(function(){processTimerOnShow(function(){showPopup(getMsgById(msgId), elem);});})
.mouseout(function(){processMouseOut();});
};
var processTitle = function (element) {
$(element).mouseover(function(){processTimerOnShow(function(){processMouseOver(element);});})
.mouseout(function(){processMouseOut();}).click(function(){cleanTimer();});
var msg = element.parents('article');
var msgId = msg.prop("id").match(/comment-(\d+)/)[1];
var nick = $("a[itemprop='creator']", msg).text();
if (nick == null || nick == "")
nick = "anonymous";
$("#comment-" + getMsgIdByLink(element)).each(function() {
var href = locationurl + "#comment-" + msgId;
var link = $("<a href='" + href + "'>" + nick + "</a>");
processLinkComments(link, msgId);
var container = $(".msg_body", $(this));
var answersClass = "answers";
var answers = $("." + answersClass, container);
if (!answers.length) {
answers = $("<div class='" + answersClass + "'>Ответы: </div>");
answers.css("font-size", "smaller");
container.append(answers);
}
if (answers.children().length) {
answers.append(", ");
}
answers.append(link);
});
};
$('div.title > a').each(function (idx,elem){processTitle($(elem));});
}());
}}}
[[Как отображать скорость отдачи и загрузки на панели Unity|http://myubuntu.ru/rukovodstvo/kak-otobrazhat-skorost-otdachi-i-zagruzki-na-paneli-unity]]
# Качаем [[deb-пакет indicator-sysmonitor|https://launchpad.net/indicator-sysmonitor]]
# Ставим Dstat: ''sudo apt-get install dstat''
# Качаем [[SysMon|https://webupd8.googlecode.com/files/sysmon_0.2.tar.gz]]
# Правим [[SysMon]] по своему усмотрению и кидаем например в $HOME/bin/
# Добавляем $HOME/bin/sysmon в indicator-sysmonitor и перезапускаем
Моя версия [[SysMon]] не требует установки dstat или ifstat
В последних девелверских сборках изменился набор параметров которые можно отслеживать, по этому я предлагаю обновлённую инструкцию:
# Качаем и ставим [[deb-пакет indicator-sysmonitor|https://launchpad.net/indicator-sysmonitor]]
# Качаем исходники indicator-sysmonitor: ''bzr branch lp:indicator-sysmonitor''
# Фиксим ошибку в проврке доступности заряда батареи
# Подменяем установленный indicator-sysmonitor обновлённым и исправленным: ''sudo cp indicator-sysmonitor /usr/bin/indicator-sysmonitor''
# Создаём директорию ~/.config/autostart/ для возможности задания автостарта indicator-sysmonitor
# Ставим lm-sensors: ''sudo apt-get install lm-sensors''
# Запускаем indicator-sysmonitor
# Добавляем сенсор температуры: Name: ''temp'' Command: ''sensors -A | grep -i temp1 | cut -f 2 -d ':' | awk '{print $1}' | head -n 1''
# Формируем строку интересующих сенсоров: ''net:{net} cpu:{cpu} mem:{mem} swap:{swap} cput:{temp} bat:{bat1} fs:{fs///}''
что же такое [[Node.js|node.js]]:
Это инструмент командной строки. Вы скачиваете архив, компилируете и устанавливаете его.
Это позволит вам выполнять программы на JavaScript, набрав 'node my_app.js' в терминале.
JavaScript выполняется движком V8 (тем самым, благодаря которому так быстро работает Google Chrome).
Node.js предоставляет API для доступа к сети и файловой системе из JavaScript.
[[server.js]] - код [[сервера|Mini Browser]]
[[proxy.js]] - прокся на [[Node.js|node.js]]
ссылки:
# [[Установка node.js|http://habrahabr.ru/blogs/webdev/95960/]]
# [[Модули для nodejs|https://github.com/joyent/node/wiki/modules]]
# [[node.js версии v0.2.5 и v0.3.1|http://habrahabr.ru/blogs/nodejs/108346/]]
# [[node.js использование process.nextTick()|http://habrahabr.ru/blogs/nodejs/112742/]]
# [[Understanding node.js|http://habrahabr.ru/blogs/nodejs/104171/]]
# [[Node.JS — Основы асинхронного программирования|http://habrahabr.ru/blogs/javascript/102717/]]
# [[Удалённая отладка|http://habrahabr.ru/blogs/javascript/114825/#habracut]]
# [[Студенческий сайт 2.0|http://habrahabr.ru/blogs/startup/110082/]]
# [[Вы наверное шутите, мистер Дал, или почему Node.js — это венец эволюции веб-серверов|http://habrahabr.ru/blogs/webdev/108241/]]
# [[node.js сокращатель ссылок|http://habrahabr.ru/blogs/nodejs/105691/]]
# [[WYSIWYG HTML редактор в браузере. Часть 3|http://habrahabr.ru/blogs/webdev/107907/]]
# [[Еще раз об архитектуре сетевых демонов|http://habrahabr.ru/blogs/hi/108294/]]
# [[Геттеры и сеттеры в Javascript|http://habrahabr.ru/blogs/javascript/108295/]]
# [[CouchApp: JavaScript приложения в CouchDB|http://habrahabr.ru/blogs/nosql/110675/]]
# [[Асинхронная синхронность. JSDeferred|http://habrahabr.ru/blogs/javascript/108575/]]
# [[Кодирование видео в реальном времени во время загрузки|http://habrahabr.ru/blogs/video/110421/]]
# [[Сервер разработки на основе Gitosis|http://kuroikaze85.wordpress.com/2010/12/28/gitosis-deploy-server/]]
# [[Синхронизация асинхронных вызовов. WaitSync|http://habrahabr.ru/blogs/javascript/108542/]]
# [[Написание документации|http://habrahabr.ru/blogs/javascript/111861/]]
# [[Асинхронное программирование на JavaScript — Остаться в живых|http://habrahabr.ru/blogs/javascript/111634/]]
#[[Node.JS — формируем результирующий документ, используя другие HTTP-источники|http://habrahabr.ru/blogs/javascript/102722/]]
#[[Асинхронный web-mining c помощью node.js|http://habrahabr.ru/blogs/personal/102840/]]
#[[Server-side JS (v8+Node)|http://habrahabr.ru/blogs/javascript/71858/]]
#[[Храните ваши клятвы; Отношения с Node|http://habrahabr.ru/blogs/javascript/98671/]]
#[[Node.JS: Пример HTTP-сервера в режиме prefork с использованием Web Workers|http://habrahabr.ru/blogs/webdev/95972/]]
#[[Bespin переходит на node.js|http://habrahabr.ru/blogs/webdev/94416/]]
#[[Используем Coffeescript на Windows|http://habrahabr.ru/blogs/javascript/106811/]]
#[[2000 часов в одиночестве, или как был сделан RSS reader / Я робокоп|http://habrahabr.ru/blogs/webdev/95526/]]
#[[Асинхронность: почему это никак не сделают правильно?|http://habrahabr.ru/blogs/development/99792/]]
#[[Введение в Nitrode — выделенный HTTP-сервер|http://habrahabr.ru/blogs/webdev/102258/]]
#[[Выполнение SQL-подобных запросов над данными — как в браузере, так и на сервере|http://habrahabr.ru/blogs/javascript/92867/]]
#[[Колибри: Обзор вашего интернет-трафика в реальном времени|http://habrahabr.ru/blogs/webdev/93514/]]
#[[nodeJS и nonblocking I/O|http://habrahabr.ru/blogs/javascript/83865/]]
#[[Как устроен AES|http://habrahabr.ru/blogs/algorithm/112733/]]
#[[Самораспаковывающийся HTML|http://habrahabr.ru/blogs/algorithm/112757/]]
#[[Наш опыт участия в 10K Apart или как ужать 40 Кбайт кода в 10|http://habrahabr.ru/blogs/webdev/102153/]]
#[[Наш опыт участия в 10К Apart, часть вторая: жмем дальше|http://habrahabr.ru/blogs/crazydev/102534/]]
#[[Подсветка синтаксиса несколькими строками javascript|http://habrahabr.ru/blogs/javascript/43030/]]
#[[Наглядно о потоке выполнения в Node.js|http://habrahabr.ru/blogs/nodejs/112977/]]
прочие ссылки (closed):
http://habrahabr.ru/blogs/nodejs/104761/
http://habrahabr.ru/blogs/javascript/99816/
http://habrahabr.ru/blogs/social_networks/113130/
со ссылками потом разберусь
//{{{
http.createServer(function(request, response) {
sys.puts('received '+request.method+' '+request.url + "\n"+JSON.stringify(request.headers));
if(/^\/node/.test(request.url)) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end("Hi, it's node =)\n");
}
else if(/^\/exit/.test(request.url)) {
sys.puts('closing..\n');
MainServer.close();
throw new Error('forced');
}
else {
var apache = http.createClient(80, 'localhost');
var clientrequest = apache.request(request.method, request.url, request.headers);
request.addListener('end', function() {
clientrequest.end();
});
request.addListener('data', function(chunk) {
clientrequest.write(chunk);
sys.puts('writting chunk\n');
});
clientrequest.addListener('response', function(clientresponse) {
response.writeHead(clientresponse.statusCode, clientresponse.headers);
clientresponse.addListener('data', function(chunk) {
sys.puts('writting data..\n');
response.write(chunk);
});
clientresponse.addListener('end', function() {
sys.puts('end of request');
response.end();
});
});
}
}).listen(8033, 'mike.name');
//}}}
//{{{
Reiser4 filesystem
==================
Reiser4 is a file system based on dancing tree algorithms, and is
described at http://www.namesys.com
References
==========
web page http://namesys.com/v4/v4.html
source code ftp://ftp.namesys.com/pub/reiser4-for-2.6/
userland tools ftp://ftp.namesys.com/pub/reiser4progs/
install page http://www.namesys.com/install_v4.html
Compile options
===============
Enable reiser4 debug mode
This checks everything imaginable while reiser4
runs
Mount options
=============
tmgr.atom_max_size=N
Atoms containing more than N blocks will be forced to commit.
N is decimal.
Default is nr_free_pagecache_pages() / 2 at mount time.
tmgr.atom_max_age=N
Atoms older than N seconds will be forced to commit. N is decimal.
Default is 600.
tmgr.atom_max_flushers=N
Limit of concurrent flushers for one atom. 0 means no limit.
Default is 0.
tree.cbk_cache.nr_slots=N
Number of slots in the cbk cache.
flush.relocate_threshold=N
If flush finds more than N adjacent dirty leaf-level blocks it
will force them to be relocated.
Default is 64.
flush.relocate_distance=N
If flush finds can find a block allocation closer than at most
N from the preceder it will relocate to that position.
Default is 64.
flush.scan_maxnodes=N
The maximum number of nodes to scan left on a level during
flush.
Default is 10000.
optimal_io_size=N
Preferred IO size. This value is used to set st_blksize of
struct stat.
Default is 65536.
bsdgroups
Turn on BSD-style gid assignment.
32bittimes
By default file in reiser4 have 64 bit timestamps. Files
created when filesystem is mounted with 32bittimes mount
option will get 32 bit timestamps.
mtflush
Turn off concurrent flushing.
nopseudo
Disable pseudo files support. See
http://namesys.com/v4/pseudo.html for more about pseudo files.
dont_load_bitmap
Don't load all bitmap blocks at mount time, it is useful for
machines with tiny RAM and large disks.
//}}}
Код [[сервера|Mini Browser]]
//{{{
var sys = require('sys'),
http = require('http');
var fs = require('fs');
var i=0;
http.createServer(function (req, res) {
i = i+1;
var filename = req.url.replace(/\?.*/, '').replace(/(\.\.|\/)/, '');
if(filename == 'robots.txt')
{
res.writeHead(200, {'content-Type': 'text/plain'});
res.write('User-Agent: * \nDisallow: ');
res.end();
}
else if(filename == 'favicon.ico')
{
res.writeHead(404, {'Content-Type': 'text/plain'});
res.end('File ' + filename + ' doesn\'t exist');
}
else
{
res.writeHead(200, {'content-Type': 'text/html', 'Set-Cookie': 'mm3=hello'});
res.write('<!DOCTYPE html>' +
'<html>' +
'<head>' +
'<title>Start page</title>' +
'</head>' +
'<body>' +
'Hello my dear '+i+' friend! <br><br><br>\n'+
'My Links: <br> \n' +
'<a href="http://mm-3.blogspot.com/">mm-3.blogspot.com</a> <br>\n'+
'<a href="http://mm-3.livejournal.com/">mm-3.livejournal.com</a> <br>\n'+
'<a href="http://mm3.tiddlyspot.com/">mm3.tiddlyspot.com</a> <br>\n'+
'<a href="http://mm3.name/">mm3.name</a> <br>\n'+
'<a href="http://twitter.com/mm0">twitter.com</a> <br>\n'+
'<a href="http://mm3.tumblr.com">mm3.tumblr.com</a> <br>\n'+
'\n\n\n\n\n' +
'<!-- simple comment -->' +
'</body>' +
'</html>' + '\n\n\n'
);
res.end();
};
sys.log( '\n Reqest #' + i + '\n' +
'metod: ' + req.method + '\n' +
'url: ' + req.url + '\n' +
'accept: ' + req.headers['accept'] + '\n' +
'accept-charset: ' + req.headers['accept-charset'] + '\n' +
'accept-encoding: ' + req.headers['accept-encoding'] + '\n' +
'accept-language: ' + req.headers['accept-language'] + '\n' +
'user-agent: ' + req.headers['user-agent'] + '\n' +
'via: ' + req.headers['via'] + '\n' +
'trailer: ' + req.headers['trailer'] + '\n' +
'connection: ' + req.headers['connection'] + '\n' +
'date: ' + req.headers['date'] + '\n' +
'expect: ' + req.headers['expect'] + '\n' +
'from: ' + req.headers['from'] + '\n' +
'host: ' + req.headers['host'] + '\n' +
'referer: ' + req.headers['referer'] + '\n' +
'range: ' + req.headers['range'] + '\n' +
'cookie:' + req.headers['cookie'] + '\n' +
'content-length: ' + req.headers['content-leangth'] + '\n' +
'content-type: ' + req.headers['content-type'] + '\n' +
'stream: ' + req.headers['stream'] + '\n' +
'transfer-encoding: ' + req.headers['transfer-encoding'] + '\n' +
'upgrade: ' + req.headers['upgrade'] + '\n' +
'ip: ' + req.connection.remoteAddress + '\n' +
'\n'
);
}).listen(80);
sys.puts('Server running at mm3.name:80');
//}}}
[[http://swimcenter.ru/pools/nnovgorod|http://swimcenter.ru/pools/nnovgorod]]
Для мозга, который не имеет центральной иерархии знаний, где каждый кирпичик плотно пригнан, поскольку следует из предыдущего и подтверждается последующим, для такого мозга любая информация воспринимается отдельно подвешенной в пространстве. Таблица умножения, экстрасенс, блокбастер, википедия, совет сотрудницы, реклама в глянце, школьный учебник, проповедь центра Махариши, статья в блоге, диктовка Матери Марии из Центрального Солнца, телепередача, молекулярная физика, энергия атома, обнаженная женщина, киллер с лопатой — любая информация имеет равные права, и критерием является вера. Если я верю - значит годится. А не верю - отметается. Какой анализ, у меня интуиция. Я сам себе диагноз рак поставил и вчера зеленым чаем вылечил.
[[Стандартные_потоки_ввода/вывода|http://xgu.ru/wiki/Стандартные_потоки_ввода/вывода]]
Используем wget чтобы скачать страницу
{{{
wget -q -O - http://google.com
}}}
или тоже через tr
{{{
tr -d "\n\r\f"
}}}
удаляем из входного потока переводы строки
{{{
sed ':a; /$/N; s/\n//; ta'
}}}
вставляем перевод строки после символа '>'
{{{
sed 's/>/>\n/g'
}}}
удаляем пустые строки
{{{
sed '/^\s*$/d'
}}}
удаляем блоки в строке начинающиеся '<' и заканчивающиеся '>' более правильное удаление тегов
{{{
sed 's/<[^>]*>//g'
}}}
удаляем коментарии (всё что между "< ! - - " и " - - >")
{{{
sed 's/<!--[^-][^>]*-->//g'
}}}
удаляем тег "<script bla/>"
{{{
sed 's/<script[^\/][^>]*\/>//g'
}}}
удаляем тег вида "< script blabla > bla bla < / script >"
{{{
sed 's/<\/script>/<\/script>\n/g' | sed 's/<script.*<\/script>//g'
}}}
удаляем тег "style"
{{{
sed 's/<style[^\/][^>]*\/>//g'
}}}
удаляем тег вида "<style blabla > bla bla </style>"
{{{
sed 's/<\/style>/<\/style>\n/g' | sed 's/<style.*<\/style>//g'
}}}
удаление экранированных символов вида
{{{
sed 's/\&[^\;]*\;/ /g'
}}}
Замена множества пробелов одним
{{{
sed 's/\ \{1,\}/ /g'
}}}
работа с ссылками, выделение href=""
{{{
sed 's/<a\(.*\)href=\"\([^\"]*\)\"\([^>]*\)>\(.*\)<\/a>/\4 \( \2 \)/g'
}}}
Объединяем в одну строчку
{{{
wget -q -O - http://linux.org.ru | sed ':a; /$/N; s/\n//; ta' | sed 's/<!--[^-][^>]*-->//g;s/\&[^\;]*\;/ /g;s/<script[^\/][^>]*\/>//g;s/<style[^\/][^>]*\/>//g' | sed 's/<\/script>/<\/script>\n/g;s/<\/style>/<\/style>\n/g;s/<br/\n<br/g;s/<\/div>/<\/div>\n/g;s/<a /\n<a /g;s/<\/a>/<\/a>\n/g' | sed 's/<script.*<\/script>//g;s/<style.*<\/style>//g;s/<a\(.*\)href=\"\([^\"]*\)\"\([^>]*\)>\(.*\)<\/a>/\4 \( \2 \)/g' | sed 's/<[^>]*>/ /g' | sed '/^\s*$/d;s/\ \{1,\}/ /g'
}}}
[[Понятная справка по SED|http://forum.puppyrus.org/index.php?topic=1863.0]]
[[http://zoshyt.blogspot.com/2009/04/sed.html|http://zoshyt.blogspot.com/2009/04/sed.html]]
[[http://www.welinux.ru/post/4986/|http://www.welinux.ru/post/4986/]]
[[http://www.f-notes.info/linux:sed|http://www.f-notes.info/linux:sed]]
[[http://www.regatta.cs.msu.su/doc/usr/share/man/info/ru_RU/a_doc_lib/aixprggd/genprogc/manip_strings_sed.htm|http://www.regatta.cs.msu.su/doc/usr/share/man/info/ru_RU/a_doc_lib/aixprggd/genprogc/manip_strings_sed.htm]]
[[http://jerr.at.ua/publ/linux/linux_command/odno_strochnye_skripty_sed/2-1-0-14|http://jerr.at.ua/publ/linux/linux_command/odno_strochnye_skripty_sed/2-1-0-14]]
[[http://rus-linux.net/lib.php?name=MyLDP/consol/cli-magic.html|http://rus-linux.net/lib.php?name=MyLDP/consol/cli-magic.html]]
[[http://www.linux.org.ru/forum/general/6062582|http://www.linux.org.ru/forum/general/6062582]]
[[http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454|http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454]]
[[http://www.opennet.ru/man.shtml?topic=sed&category=1&russian=0|http://www.opennet.ru/man.shtml?topic=sed&category=1&russian=0]]
http://www.lissyara.su/doc/programming/awk/
[[http://lib.ru/MAN/DEMOS210/awk.txt|http://lib.ru/MAN/DEMOS210/awk.txt]]
http://ru.wikipedia.org/wiki/AWK
[[Мега-игра|http://candies.aniwey.net/]]
[[Candies|http://candies.aniwey.net/index.php?pass=k246n]]
[[CookieClicker|http://orteil.dashnet.org/cookieclicker]]
[[adarkroom|http://adarkroom.doublespeakgames.com/]]
[[Симулятор Жида|http://jew.pizd.ec/]]
[[Игра. Распутываем нитки|http://nemez-06.livejournal.com/213448.html]]
[[lky|http://game.lky.ph/]]
[[godville|http://godville.net/superhero]] mm33
[[A Dark Room|http://adarkroom.doublespeakgames.com/]]
копай, молись, лечись
бей, молись, лечись
[[JavaScript RPG game|http://lifehacker.ru/2014/03/19/ne-lezet-v-golovu-programmirovanie-poprobujte-v-nego-igrat/]]
[[Java game|http://javarush.ru/landing05.html?reference=9d03f3fe-6099-4660-a10c-0eb20a4e55b9]]
# Человек свободен, пока он верит в свою свободу
# "совершенство в миниатюре, незаслуженно лишается внимания, в следствии неверного стереотипологического представления о лимитах выражения рабочего кода, призванного вызывать поток энергии "гы" )"
# Ленинград хорошо формулирует принципы даосизма - все по хуям, и все до пизды!
# ну я купил, пришел дамой зуб балит, думаю на ватку ультракаин и на зуб, нахрен пол ебала онемело, щас сижу и думаю как пожрать чтоб язык не откусить :(((
# x:- дай hex значение телесного цвета. y:- #FACE8D x:- издеваешься? y:- попробуй x:- шойтан 8D
# (echo "это типа тело письма - за ним будет аттач";uuencode file file) | mail -s "это типа subj" mail@me.ru
# Зачастую, юношеский максимализм, умирая в человеке, когда тот взрослеет, забирает вместе с собой все силы и устремления, заменяя внутренний мир навязанными ложными ценностями, так появляются новые солдаты в рядах офисного планктона...
# Я ничего не имею против Бога, мне просто не нравится его фан-клуб.
# Девушки, если вы хотите, чтобы вас любили, зачем вы одеваетесь так, чтобы вас хотели?
# Совсем не просто быть обидчивым, ведь приходится в каждом добром слове издевательскую подоплеку искать.
# Сердиться на людей означает считать их поступки чем-то важным.
# Нет ничего приятнее победы и ничего полезнее поражения.
# Плохо о нас говорят те, кто хуже нас. Тем, кто лучше нас, не до нас.
# Не обязательно быть говном, даже если ты в жопе.
# Выяснять отношения надо только с теми, с кем эти отношения имеешь. Остальных — на берег безмолвия, собирать ракушки.
# То что ты получаешь достигая цели, не так важно, как то, кем ты становишься, достигнув их.
# Я слышал столько клеветы в Ваш адрес, что у меня нет сомнений: Вы — прекрасный человек! (О. Уайльд)
# Я с вами не ругаюсь и не спорю. Я просто подробно рассказываю, почему я прав.
# Все люди приносят счастье. Одни своим присутствием, другие своим отсутствием.
# «Да пошла ты нахуй» — подумал я, и отправил смайлик.
# И что бы с Вами не случилось — ничего не принимайте близко к сердцу. Немногое на свете долго бывает важным. ©Конфуций
# Молчи, пока ты не в состоянии сказать нечто такое, что полезнее твоего молчания. (Архимед)
# В постели можно делать всё, что доставляет удовольствие обоим. Даже читать.
# Нельзя так категорично делить людей на плохих и хороших, добрых и злых, умных и глупых. Будем объективны: люди, в общем-то, все «так себе».
# Я пессимист-наркоман и считаю, что стакан наполовину мангуст.
# Это ведь просто! Сделай так, чтобы человеку было с тобой хорошо, и он сам к тебе придет. А если не пришел, то это не он дурак, и не ты дурак, а просто твое хорошо ему не подходит.
# Из всех глупостей мира стоит делать только те, которые ведут к деньгам и оргазмам.
# Встретил чёрную кошку в пути - три раза плюнь и один раз пни!
# Лучшая форма физического труда — ворочать миллионами.
# Не нужно гоняться за счастьем, нужно лечь на его пути.
# Было время, когда удивляло хамство, теперь удивляет вежливость…
# Либо ты продаешь душу дьяволу, либо она в конечном итоге достается ему бесплатно.
# Перед тем, как уходя громко хлопнуть дверью, не забудьте убрать хвост.
# Лучше надеяться на лучшее и пережить разочарование, чем надеяться на худшее и оказаться правым.
# «В человеческом теле шесть литров крови — достаточно, чтобы выкрасить большую квартиру» — эта мысль не дает мне покоя.
# За лишние деньги обычно покупают лишние вещи.
# Мне всегда немного грустно, когда красноречиво, изящно и тонко оскорбляешь человека, а он слишком глуп, чтобы это понять.
# Не обижайтесь на слова, когда не видите глаз.
# Не всем известный факт, но на момент написания «Анны Карениной» паровоз был чудом передовых технологий. И прыжок Анны под паровоз был не обыденной смертью под трамваем, а особо технологичным, изощрённым самоубийством. Что вызывало у читателя закономерную оторопь. Если проводить параллели с сегодняшним днём, Анна Каренина прыгнула в дюзы стартующей ракеты «Энергия». Это так, для справки.
# Неудачная метафора подобна котёнку с дверцей.
# Свобода нужна сумасшедшим. Равенство нужно лентяям. Братство нужно слабым. Умным нужен покой. Мудрым не нужно ничего, потому что они владеют всем.
# Не надо тратить драгоценное время на битву с дураками. В нужное время они вымрут сами. А вот вам будет жаль потерянного времени.
# Вы не полностью одеты, если на вас нет улыбки.
# Всё, что происходит в мире, – это обмен. Даже если тебе кажется, что ты получил что-то просто так, рано или поздно ты за это заплатишь.
# О том, как ты несчастен подумаешь в могиле. А сейчас — живи.
# Удачу можно сравнить с женщиной. Перестаньте бегать за ней — обидится и придёт сама.
# Призыв «Всегда оставайся самим собой!» особенно бесполезен, если ты идиот.
# - Сэр, мы окружены! - Отлично! Теперь мы можем атаковать в любом направлении!
# Время не лечит, время просто проходит мимо.
# Вежливость стала такой редкостью, что некоторые девушки принимают её за флирт.
# Не надо бояться неудач. Абсолютное большинство планов провалилось потому, что их никто не пытался воплотить в жизнь.
# Первая цель — осуществление того, к чему вы стремились. Вторая цель — умение радоваться достигнутому. Только самые мудрые представители человечества способны к достижению второй цели.
# Путь к сердцу человека лежит через разорванную грудную клетку, все остальные утверждения — ванильная ересь.
# Возьми от жизни всё. Но на всякий случай запомни, где брал.
# Рискуйте. Если вы победите — будете счастливы, а если проиграете — опытны.
# Хотите вдохновения и мотивации? Обзаведитесь настоящими врагами. Это стимулирует двигаться со скоростью поезда и быть как никогда креативным.
# Переубедить вас мне не удастся, поэтому сразу перейду к оскорблениям.
# Если вы не умеете снимать стресс, не надевайте его.
# Какими бы разными не были люди, котлеты из них выходят одинаковые.
# Поставить Убунту может даже цыплёнок, если на клавишу Enter приклеить несколько зёрнышек.
# Если вы измеряете свой успех мерой чужих похвал и порицаний, ваша тревога будет бесконечной.
# Осторожно, во дворе злая собака! Прививки не делали, ест что попало. Давно мечтает реализовать себя в сексе.
# Ничто так не мешает видеть, как точка зрения.
# Иногда, некоторым личностям, корону на голове хочется поправить лопатой!!!
# Никогда не мстите подлым людям. Просто станьте счастливыми. Они этого не переживут.
# Профессорша мединститута на лекции: — У мужчины нет признаков лишения девственности, кроме его наглой, довольной рожи.
# Не хочешь идти ко дну — не храни камни за пазухой.
# ВСЁ — это когда под портретом вторая дата появилась.
# Нет смысла нанимать толковых людей, а затем указывать, что им делать. Мы нанимаем людей, чтобы они говорили, что делать нам. Стив Джобс
# У нас на работе ругательство новое: ѢѢ - Double ять.
# Бриллиант упавший в грязь, всё равно остаётся бриллиантом, а пыль поднявшаяся до небес, так и остаётся пылью. (китайская народная мудрость)
# Мы живем в славное время, когда отключения электричества влечет за собой потерю смысла жизни.
# Когда ничего не остается делать, многие так и поступают.
# О человеке многое можно сказать по тому, как он паркует свою яхту.
# Никогда! Слышите, никогда не держите попугая в одной комнате с маленьким ребенком! Ребенок вырастет и перестанет плакать. Но эта падла…
# У каждого человека есть руки, ноги, голова и 168 часов в неделю, чтобы сделать все то, чего он по-настоящему желает.
# Если упорство побеждает лень, то полезность этого события зависит от того, дурак ты или умный.
# Многие, не достигнув желаемого, делают вид, что желали достигнутого.
# Вторую неделю мучаюсь вопросом, какой вариант правильный: Две белки вылезли из своих: 1) Дупл 2) Дуплов 3) Дуплищ 4) Дуплей 5) Дупел
# Чтобы выделяться из серой массы, не обязательно красить волосы в красный цвет и носить кольцо в носу. Достаточно просто не быть говном.
# Жизнь скучна и однообразна. Но всё меняется, когда приходят ОНИ…деньги на карточку!
# Мое сердце занято – оно гоняет кровь по организму.
# 5 из 7 россиян страдают от гиперслуховой эстетоафазии. Это серьёзная социопсихологическая болезнь, заключающаяся в хуёвом музыкальном вкусе.
# Открыв окно в будущее, необходимо закрыть дверь в прошлое, чтобы сквозняком не выдуло настоящее.
# Если человек замерзает, можно дать ему дрова и спички, и ему будет тепло один час, а можно облить его бензином и поджечь — и ему будет тепло до конца жизни.
# Ужасная несправедливость: нервные клетки не восстанавливаются, а жировые — не погибают!
# Разговаривать с незнакомым человеком интереснее. Знакомые уже знают, что ты идиот.
# С женщиной нужно быть жестким и строгим: причинять радость, наносить добро, подвергать ласке.
# Этапы в жизни российского бизнесмена: собственный автомобиль, собственный самолет, собственная яхта, собственное мнение.
# Когда речь идёт о тринадцатой зарплате, все моментально забывают о суевериях.
# Образование — это то, что делает из неграмотных людей некомпетентных.
# Не то, чтобы не рад Вас видеть, просто не успеваю соскучиться.
# Проблема в том, что наука сделала нас богами раньше, чем мы научились быть людьми.
# Секрет успеха в том, чтобы дружить с теми, кто лучше, тренироваться с тем, кто сильнее, любить того, кого нельзя, и не сдаваться там, где сдаются другие.
# Не комментируйте и некомментируемы будете.
# Деньги можно кидать на ветер, пока ветер дует в твою сторону.
# Поговаривают, что есть жизнь за пределами браузера.
# В истинности поговорки «если человек чего-то сильно хочет, то это обязательно сбывается» я убедился вчера, так и не успев добежать до туалета.
# Наша страна похожа на постапокалиптический мир. У всех планшеты, гарнитуры и прочие гаджеты, а вокруг лежит говно и плохие дороги.
# Цветочный мед, с физиологической точки зрения, — это рвотные массы насекомых из полупереваренных выделений половых органов растений.
# Джеки Чана можно победить только в чистом поле, где нет предметов. Но не дай бог ему под руку попадется хотя бы ёжик…
# Детство - это когда спать обязанность, а не мечта.
# А в Чернобыле сейчас разгар весны! Травка синеет, птички гавкают.
# Если тебя кто-то напрягает - расслабься и забей. Ногами. До смерти.
# Проблема дискуссий заключается в том, что в результате возникает иллюзия, будто нужная мысль донесена адресату.
# Если Вы хотите вырастить хороших детей, тратьте на них в два раза меньше денег и в два раза больше времени.
# Хорошо там, где нас нет. Если не верите, можем прийти.
# Уборка, уборка – перейди на Егорку, стирка – на Ирку, а готовка – на Вовку!
# Цензура - вонь комплекса неполноценности.
# Самая большая награда за труд - это не то, что человек за него получает, а то, кем он становится в процессе.
# Самое тяжёлое в нашей жизни — это синий кит. Всё остальное фигня.
# У меня в голове порядок. Слева – тараканы, справа – мания величия.
# Если рядом с вами происходит извержение вулкана и вам уже поздно убегать, застыньте в непонятной позе — сломайте мозг археологам.
# Лучший способ предсказать своё будущее – стать его создателем.
# Когда кидают палку собаке — собака смотрит на палку. Когда кидают палку льву — он смотрит на бросающего.
# Весна в этом году будет очень жаркая. Главное, не пропустить этот день.
# Вкладывайте деньги в землю. Этого товара производят всё меньше и меньше.
# Все в жизни нужно зарабатывать трудом, талантом и способностями. Даже везение.
# Я старый пират и не знаю слов лицензионного соглашения…
# Тупиковых ситуаций не бывает — бывает тупиковое мышление.
# Никогда не рассказывай женщине о своих прошлых похождениях, иначе она расскажет тебе о своих, и тогда ты рискуешь заработать комплекс неполноценности
# Дети! Подпускать маму к компу — это к беде.
# Тройка самых популярных животных нашей страны — жаба, песец и белочка.
# — Пациент, вы страдаете извращениями? — Что вы, доктор! Я ими наслаждаюсь!
# Духовенство было бы весьма недовольно, если бы его духовный труд оплачивался духовно.
# Если вам будут гoворить про меня гадости — верьте каждому слову.
# Самый большой банкрот в этом мире — человек, утративший свой жизненный энтузиазм.
# Не обязательно знать дорогу, достаточно уметь ее находить.
# Общаясь с Мишей, надо осторожно выбирать слова. Он в WoW довел до распада гильдию «Братья стали» одним лишь невинным вопросом «Кем?».
# Хипстерам: пытаясь выделиться из толпы, ты попадаешь в толпу, которая пытается выделиться из толпы.
# Чтоб быть счастливым — надо просто правильно хотеть.
# Шикарная женщина — это не соотношение веса, роста и внешности. Это пропорции интеллекта и чувства юмора, умноженные на чувство собственного до# стоинства.
# Сделай первый шаг и ты поймешь, что не все так страшно. Сенека
# Этот неловкий момент, когда сарказм оказался настолько тонок, что тебя приняли за идиота.
# Если в глазах собеседника застыл интерес, значит, он перестал вас понимать.
# Как я выгляжу утром: (~_~) (-_-) (°_-) ( -_°) (>_<) (o_O) (o_o)
# Никогда не сожалейте. Если это было хорошо, то это замечательно. А если это было плохо, то это опыт. А опыт очень ценен.
# Чем отличается верующий человек от фанатика? Верующий готов умереть за веру, а фанатик убить.
# Чему бы грабли не учили, а сердце верит в чудеса…
# Не родился ещё тот враг, которому я отдал бы свой ужин.
# Иногда чувствую себя сусликом во время Куликовской битвы — чувствую, что что-то происходит, а что — понять не могу.
# Психотип — это форма правления тараканов в голове.
# Ваше мнение, безусловно, очень важно, поэтому спрячьте его в надёжном и безопасном месте — например, в своей заднице.
# Сделал добро — отойди на безопасное расстояние.
# Ты заставляешь мой мозг биться чаще.
# Эндорфины — это всё, что нужно человеку для счастья.
# Как просто было раньше создать религию: показал пару фокусов, рассказал о своем общении с богом, а сейчас приходится писать операционную систему.
# Becти домaшнee хозяйcтво лeгко: что упaло - пoдними, что нe упaло - cмaхни пыль, что движeтcя - нaкорми.
# Как вы умудряетесь общаться с людьми без раздражения? Ну я просто представляю себе, что у них вместо головы мухомор, а в руках балалайка.
# Любимая фраза начальства: «НЕЗАМЕНИМЫХ ЛЮДЕЙ НЕТ!» Но как только подходит твоя очередь идти в отпуск, всё пипец – ты единственный!
# Совет девушкам. Парни не понимают намёков. Если вам кто-то нравится, подойдите и скажите: «Привет,ты мне нравишься,давай дружить и трахаться».
# Если человек замерзает, можно дать ему дрова и спички, и ему будет тепло один час, а можно облить его бензином и поджечь — и ему будет тепло до конца ж# изни.
# Ужасная несправедливость: нервные клетки не восстанавливаются, а жировые — не погибают!
# Оптимист – это человек, который находясь по уши в дерьме не падает духом, а весело и задорно булькает.
# А лет через 50 куча молодых людей будет с умным видом рассуждать, что Путин был великим правителем, и зря его тогда расстреляли.
# Однажды при установке игры я полностью прочитал лицензионное соглашение и в конце там было написано «ТЕБЕ ВСЁ РАВНО НИКТО НЕ ПОВЕРИТ».
# Однажды ученик спросил у Мастера: — Долго ли ждать перемен к лучшему? — Если ждать, то долго! — ответил Мастер
# Не люблю, когда свои вкусы превращают в философию, полную презрения к тем, кто их не разделяет. (Франсуаза Саган)
# Вот так узнаешь какой нить мелкий факт из мировой истории, и на свою собственную историю начинаешь смотреть иначе «14 июля 1789 года восемьсот парижан и двое РУССКИХ захватили Бастилию».
# Никогда не смеши человека, который жуёт печеньку. Подожди, пока он начнёт запивать её чаем.
# — Господи, а правда, что секс без любви — это грех? — Да что вы на этом сексе зациклились, всё, что без любви, — грех!
# Вот спишь ты в своей кровати, храпишь, слюнявишь подушку, пердишь. А ведь кто-то мнит тебя своей мечтой.
# Если человек говорит всем, что ему похуй, это значит, что он хочет, чтобы все думали, что ему похуй, хотя на самом деле это не так. Ибо человеку, которому действительно похуй, даже не придет в голову сказать об этом. Ему просто похуй.
# Водитель трамвая уснул за рулем и нормально выспался, знаете ли.
# Будьте интеллигентнее — говорите не «тупая пизда», а «наивное отверстие».
# Ходил на фотоохоту — завалил семь горизонтов.
# Редкая птица долетит до середины турбины.
# Я зарегистрировался посмотреть, не зарегистрировалась ли она, чтоб посмотреть, не зарегистрировался ли я.
# Возьмите семью, подмешайте в нее веру в Бога, приправьте ароматом чувства Родины, добавьте десятичасовой рабочий день и получите то, что нужно, — ячейку общества. Чарльз Буковски
# Когда человек с деньгами встречает человека с опытом, человек с опытом уходит с деньгами, а человек у которого были деньги уходит с опытом.
# Безопасного секса не бывает по определению. Даже резиновая женщина может лопнуть в самый неподходящий момент и оставить тебя заикой на всю жизнь.
# Забавно: в стране, где еще вчера рисовали карикатуры на попов и Бога, судят неких девушек за слова, которые некое лицо посчитало богохульством.
# Старые мосты могут еще пригодиться. Лучше сжечь старые грабли.
# Если не знаешь, чего хочешь, умрешь в куче того, чего не хотел.
# Каменный век закончился не потому, что закончились камни, и нефтяной век закончится не потому, что закончится нефть.
# Чтобы спокойно заснуть, нужно принять расслабляющую ванну, выпить зелёного чая и кинуть гранату в орущих придурков под окном.
# О мертвых либо ничего, либо хорошо. Например: «Он умер, и это хорошо».
# Арабские женщины выглядят сильно замотанными.
# Дорога на Красную Планету ($2,5 млрд. и 567 млн. км.) стоит в ТРИ раза дешевле олимпийской дороги на Красную Поляну (227 млрд. руб. и 48 км.)
# Ничто так не сигнализирует о проблемах в обществе, как митинги в поддержку правительства.
# Для сохранения хороших отношений с мужем, женщине следует пореже открывать рот на кухне и почаще — в спальне.
# Правительство заявило, что оснований для повышения цен нет, поэтому цены будут повышать без основания.
# «Если вы будете интересоваться другими людьми, то за два месяца приобретёте больше друзей, чем за два года попыток заинтересовать других людей собой». Дейл Карнеги
# Что бы ты ни придумал, всегда найдется тот, кто уже делал это до тебя. Так что главное — сделать это лучше.
# Чем дольше я живу, тем яснее понимаю, что главное в жизни – это твердо знать, чего ты хочешь, и не позволять сбить себя с толку тем, кто думает, что знает лучше.
# Если бы человека можно было скрестить с кошкой, это улучшило бы человека, но испортило бы кошку.
# Не тревожься о том, что дети тебя никогда не слушают; тревожься о том, что они всегда за тобой наблюдают.
# Мальчик Дима перебегал дорогу в настолько неположенном месте, что его сбило ПВО.
# Лучше стыдно, чем никогда.
# Рождение — это единственный светлый момент в жизни, когда тебе помогают выбраться оттуда, куда потом будут только посылать.
# Никогда не спорьте с дураком — люди могут не заметить между вами разницы.
# Всё-таки красиво на польском языке звучит фраза «Мохнатый шмель» — «Волоснявый жужик»!
# Оказавшись в центре внимания, вы рискуете стать крайним.
# Быстро, но внятно прочитайте вслух ЖПЧШЦ, и ведь зачешется. Парадокс.
# Память компьютера лучше нашей, потому что из неё всё можно стереть.
# «Я всегда мечтала найти мужчину, с которым могла бы чувствовать себя маленькой девочкой. Пока не поняла, что все мужчины сами, как маленькие девочки». Мила Йовович.
# - Как вам удается защититься от пагубного влияния социума? - Солнцезащитные очки, вакуумные наушники и пафосный ебальник.
# Легкая придурковатость делает человека практически неуязвимым.
# Этот неловкий момент, когда ты начинаешь считать педофилов более адекватными, чем борцов с педофилами.
# Человек, у которого нет аккаунта в социальных сетях, вызывает сначала удивление, потом жалость и, в конце концов, зависть.
# Очереди в поликлинике отсеивают тех, кто может и сам дома полечиться.
# Не люблю ночные клубы: свет мелькает, музыка гремит, книжку читать совершенно невозможно.
# Болезнь — это попытка организма хоть как-то адаптироваться под те условия, в которые человек себя загнал.
# В случае революции выдернуть шнур и выдавить из себя раба.
# Я веду интеллектуальные споры, выстраиваю логические цепочки, аргументирую, и всё лишь потому, что не могу сразу въебать с ноги в челюсть.
# Люди говорят, что ты изменился, когда ты просто перестал вести себя так, как им хочется.
# Проблема в том, что среднестатистический человек гораздо умнее, чем ему надо для счастья.
# Сделал добро — отойди на безопасное расстояние, чтобы ударной волной благодарности не зацепило.
# Возможности очень часто приходят к нам в рабочем комбинезоне и мы не замечаем их, потому что они подозрительно похожи на работу.
# Надпись «Осторожно, злая собака!» — фигня по сравнению с человеческими черепами на частоколе.
# Если человека раздражают мелочи, значит его что-то не устраивает по-крупному.
# Независимая женщина — это женщина, которая пока не нашла того, от кого бы ей хотелось зависеть.
# Если женщина умная, то бить ее уже поздно.
# Может характер у меня от того и тяжелый, что золотой?
# Жить надо так, чтобы на социальные сети не хватало времени.
# Велика Россия, а нужду справляют в подъезде.
# Больше всего природу загрязняют люди, на которых она отдохнула.
# Русский язык преподают в школе в течение всех 10 лет обучения. Если человек за 10 лет так и не смог научиться писать преимущественно без ошибок, то это по крайней мере подозрительно. Я бы не стал трахать такого человека без презерватива.
# Самое бескровное оружие — водородная бомба: в радиусе 20 километров никакой крови, только радиоактивный пепел.
# Не теряйте лучшие моменты в вашей жизни только потому, что вы не уверены. Николас Кейдж
# Если завернуть мыло в полотенце и избить им кого-то, то на теле жертвы не останется никаких следов, которые могла бы зафиксировать судмедэкспертиза. Эта информация не даёт мне покоя.
# Даже если ты ангел, всегда найдется тот, кому не нравится шелест твоих крыльев. Так что поменьше оглядывайся на чужое мнение.
# Если вы опоздали на работу – значит, она у вас есть.
# Нервный не тот, кто стучит пальцами по столу, а тот, кого это раздражает.
# Любовь — это когда бабочки в животе воюют с тараканами в голове.
# К большому сожалению правительства, реформу ЖКХ тормозит простое соображение: нельзя делать стоимость коммунальных услуг выше стоимости автомата Калашникова.
# Бояться нужно не смерти, а пустой жизни.
# Приходишь домой, варишь кофе, садишься в кресло и вокруг тишина … И каждый из нас сам выбирает, что это: Одиночество или Свобода.
# Если слова не клеятся, их связывают матом.
# Всем моим ошибкам есть оправдание: я живу в первый раз.
# Полемика вокруг дуумвирата напоминает старинную поговорку: Против начальства ссать можно, главное ширинку не расстегивать.
# Недавно пересел из Мерса на КАМАЗ и не жалею…. никого не жалею.
# Если тебя посещают мысли о смерти — это ещё полбеды. Беда — это когда смерть посещают мысли о тебе…
# Высшее наслаждение состоит в том, чтобы быть довольным самим собою.
# Разговаривал с другом на ноутбуке по скайпу. В это время звонит второй друг на мобильник, включаю громкую связь, и общаемся уже втроём. Потом вышел на лоджию покурить. Возвращаюсь, картина маслом: ноутбук с телефоном что-то активно обсуждают. Ну, скажите, это ли не дурдом?
# Интернет не относится к «средствам массовой информации». Интернет — это средство коммуникации. Любое ограничение «средств коммуникации» — это нарушение прав граждан.
# Для некрофила любовь до гроба — не более, чем лёгкий флирт…
# Если смешать ЛСД с анальгином — головная боль уедет на драконе.
# «Иногда страпон — это всего лишь страпон» (Зигмунд Фрейд)
# Демократия — это гарантия того, что нами руководят не лучше, чем мы того заслуживаем.
# Ли Куан Ю в ответ на вопрос «Как Вы победили коррупцию?», отвечал: «Я посадил двух друзей, остальные сами всё поняли».
# Скромность красит человека. В серый цвет.
# Религия существует с тех пор, как первый лицемер повстречал первого дурака. (Вольтер)
# Без труда не вытащишь кишечник из врага!
# Митинг — это конституционное право, являющееся административным нарушением и карающееся, как уголовное преступление.
# Мир принадлежит оптимистам. Пессимисты – всего лишь зрители.
# Если ваш принтер мнет бумагу, поставьте его в туалет.
# Котов обвиняют в эгоизме и самолюбии. А как бы вы себя вели, если бы были самыми совершенными существами во вселенной?
# Если ты будешь колоть дрова сам, то согреешься ими дважды.
# Под самым красивым хвостом павлина скрывается самая обычная куриная жопа.
# Скромность — это то, что заставляет уважать других, внимательно к ним прислушиваться и не перебивать, когда тебя хвалят.
# Если спящему кошатнику ночью положить на грудь кирпич, то он всю ночь будет заботиться о нем, укрывать и бояться перевернуться.
# Котенку оторвали лапку, котенок кровью истекал, но о котенке кто-то думал, он и икал и умирал.
# Мы против оголтелого национализма! Все мы: русские, беларусы, украинцы, — все мечтаем жить вместе, в одной большой, богатой, дружной стране. В Канаде, например.
# Скупой платит дважды. Тупой платит трижды. Участники МММ всегда всем платят.
# Склоненная голова не всегда принадлежит рабу. Возможно человек ищет для ответа булыжник.
# Семиклассницу разорвало стрингами прямо на уроке!
# Зачем ещё придумывать какие-то слова? Вот взять, например новомодное слово «хипстер». Есть прекрасное старое слово — долбоёб. Ну вот чем оно кого-то не устраивает?
# Люди никогда не взрослеют. Они просто учатся вести себя на людях.
# (голосом Дроздова): — Почуяв опасность, банка пива шипит на человека.
# Самое важное — не то большое, до чего додумались другие, а то маленькое, к чему пришел ты сам.
# Госдума в очередной раз ужесточила конституционные свободы граждан.
# Бескорыстие и искренность вызывают симпатию, уважение и подозрение.
# Идти по трупам неудобно, но мягко.
# Долг, постоянно висящий над современным рабом, хорошо стимулирует его к работе даже за мизерную плату.
# Пить водку, пиво, коньяк, кофе и курить в один день это нормально. А вот воду в чайник нужно обязательно фильтровать, а то для здоровья плохо!
# «Я всегда выберу ленивого человека делать трудную работу, потому что он найдет легкий путь ее выполнения». (с) Билл Гейтс
# Особенно резко точку зрения меняет удар в глаз.
# Медицина — вторая по точности наука после религии.
# В старинную венгерскую деревушку Máglya стоит заглянуть, чтобы насладится удивительной традицией местных жителей сжигать всех приезжих.
# Ненавижу людей, из-за которых мне приходится иметь политические убеждения.
# Ты такая смешная, когда у тебя кончается кислород.
# Зеркала и совокупления отвратительны, ибо умножают количество людей.
# Вся история женской моды — это история борьбы климата, морали и гигиены с желанием женщины ходить голой.
# Заходит как–то давление в один бар в один бар…
# «Иди туда, где был ты до рожденья.»
# Мало кто знает, что Пауло Коэльо пишет свои книги, используя статусы пятнадцатилетних разочарованных школьниц.
# Жестокость — это черта характера добрых людей, она возникает когда об твою доброту начинают вытирать ноги.
# Лучший способ добиться успеха — следовать советам, которые мы даем другим.
# Один московский фидошник pассказывал шикаpную истоpию о некой девушке по пpозвищу «Летучая мышь». Девушка завела себе молодого человека, и только после свадьбы тот узнал, что за глаза большинство знакомых невесты зовёт его вуглускpом.
# Канал «Дискавери» (США): «Чернобыль — это страшное и опасное место. Ведь отсюда всего шестьдесят миль до границы с Россией».
# Ик — это заблудившийся и очищенный пук.
# Духовенство было бы весьма недовольно, если бы его духовный труд оплачивался духовно.
# По информации Департамента природопользования мэрии Москвы, на Чистых прудах выращивали марихуану. Другая трава не может стоить 20 млн. руб.
# Самый большой банкрот в этом мире — человек, утративший свой жизненный энтузиазм.
# Народу не следует ожидать, что полицейские не будут нарушать закон. Врачи же имеют право заболеть.
# Не обязательно знать дорогу, достаточно уметь ее находить.
# Шикарная женщина — это не соотношение веса, роста и внешности. Это пропорции интеллекта и чувства юмора, умноженные на чувство собственного достоинства.
# Сущность научной работы — в борьбе с нежеланием работать. [© И. П. Павлов]
# Совет дня: воспринимайте критику окружающих с высоко поднятым средним пальцем.
# Религия — это уздечка, за которую лошадку ведут в рай, попутно цепляя к ней то телегу, то плуг, то сани.
# Это бомж Василий, он не ходит ни на работу, ни на учёбу, потому что он может себе это позволить.
# Наркоман может бесконечно смотреть на три вещи: как горит вода, как течёт огонь и как улитка в костюме сталевара бреется ластиком.
# Все «правила хорошего кода» написаны кровью, вытекшей из глаз программистов, читавших чужой код.
# Психиатр на приеме задает пациенту вопрос: - Какое сегодня число? - 23 октября по григорианскому календарю, 10 октября по юлианскому, 18 листопада по древнеславянскому, 2 брюмера по республиканскому, 7 Зуль-Хиджжа по исламскому, 2 абана по персидскому, 7 хешвана по еврейскому, 5 архасамна по Вавилонскому, 18 марерри по древнеармянскому и 4 сака по календарю Майя. - Понятно. Какой сегодня год вы наверно тоже не знаете.
# Как выясняется, мое решение вылизать баночку из-под йогурта, работая единственным мужчиной в коллективе, преимущественно состоящим из незамужних девушек, было хорошей идеей...
# Особенности применения метода кнута и пряника в нашем офисе состоят в том, что здесь пряником тоже бьют.
# Голая правда была признана порнографией и преследовалась по закону.
# Вот ещё! Буду я всякую блядь оскорблять!
# Зачем ждать от жизни чуда — чудите сами!
# Есть только два дня в году, когда вы не можете ничего сделать. Один из них называется вчера, а другой называется завтра.
# Мальчик воспитанный интернетом, был повергнут в шок... увидев на улице одетых женщин!
# Бойтесь ангелов — они добры, согласятся быть и дьяволами.
# У того, кто делает — получается редко. У того, кто не делает — не получается никогда.
# Начните искать в жизни хорошее, и она будет предлагать вам его всё больше и больше.
# О проблемах: 1. Проблемы будут. 2. Проблемы – это сработавшие риски. 3. Если мы не решаем проблему – мы часть проблемы. 4. Если мы скрываем проблему – мы проблема.
# Однажды какая-то самая тупая, бестолковая обезьяна так и не сумела научиться лазить по деревьям. Так началась история человечества.
# Я умственно усталый.
# Человек может все. Только ему обычно мешают лень, страх и низкая самооценка.
# Господь сделал меня атеистом. Кто ты такой, чтобы оспаривать Его мудрость?!
# Растения в естественном отборе накапливали соки, вызывающие жжение во рту, слёзы из глаз, резкие запахи, всё, лишь бы животные уяснили, что их есть нельзя, боком выйдет, а тут появился человек, назвал это приправами и специями и активно жрёт вопреки тысячелетиям трудов природы.
# Разгул законности и правопорядка.
# Нужно поступать с людьми так, как они хотят поступить с вами, но прежде чем они успеют это сделать.
# По идее, отчасти, возможно, вероятно, но не факт.
# Чтобы никогда не проигрывать, нужно понимать простую истину: не бывает ошибок, есть только обратная связь.
# Извечная солидарность: взрослые не матерятся при детях, дети не матерятся при взрослых.
# Безграмотными в 21 веке будут не те, кто не умеет читать и писать, а те, кто не умеет учиться, разучиваться и переучиваться. Элвин Тофлер
# Если каждый сможет помочь себе, помощь другим перестанет быть нужной. Но каждый знает, как помочь другим, и никто — как помочь себе.
# Правительство давно усвоило, что легче всего взять деньги у бедных. Конечно, денег у них немного — но зато бедных дохуя.
# Чувство юмора способно заменить любую религию.
# Цель хорошего гуманитарного образования состоит в том, чтобы научить тебя философски относиться к нехватке денег.
# Краткость не в малом количестве слов — краткость в малом количестве лишних слов.
# Алкоголь — это радость, взятая в кредит у завтрашнего дня.
# Жизнь — не зебра из чёрных и белых полос, а шахматная доска. Здесь всё зависит от вашего хода.
# Есть книги, которые делают нас умнее, если их не читать.
# Кто сказал, что государство не заботится об инвалидах? Для умственно отсталых, например, всё выпускается: и фильмы, и музыка, и книги.
# Чтение является самым приятным способом игнорирования жизни.
# Если девушка говорит тебе, что она сделала себе интимный пирсинг, единственный правильный ответ – «Врешь!».
# Сваливаю отдыхать за границу сознания.
# Даже если ты читаешь этот текст, это не значит, что ты не в коме.
# Конюху, убирающему навоз, кажется, что нет ничего страшнее, чем мир без лошади. Любая попытка объяснить ему, как безобразно существование человека, всю жизнь сгребающего горячее дерьмо, — идиотизм.
# Нельзя дважды войти в одну и ту же реку, а вот вляпаться в одно и то же дерьмо — сколько угодно.
# Если яйцо разбивается силой извне, жизнь прекращается. Если яйцо разбивается силой изнутри, жизнь начинается. Все великое всегда начинается изнутри.
# У человека две жизни, и вторая начинается тогда, когда он понимает, что жизнь всего одна.
# Самое трудное в успехе то, что ты должен продолжать быть успешным. © Ирвинг Берлин
# Каждый мужчина в итоге выбирает ту женщину, которая верит в него больше, чем он сам.
# Да что это за век?! Людей сжигать нельзя, рабов держать — тоже, даже пытать никого нельзя. Я родился не в то время!
# Нельзя возвращаться к предателям. Локти кусайте, землю жуйте, но не возвращайтесь туда, где вас предали. Жан Рено.
# Хуже уже некуда, но я стараюсь.
# Большое преимущество получает тот, кто достаточно рано совершил ошибки, на которых можно учиться. Уинстон Черчилль
# В глубинке России интернет настолько суровый, что легче найти бабу, чем качать порнуху.
# Меня никогда не оскорбляли сатанисты, за то что я не уважаю их Дьявола. Это делали только христиане, за то что я не уважаю их Бога.
# Активная жизненная позиция — это когда ты хотя бы понимаешь, за что тебя трахают.
# С женским телом всегда легче договориться, чем с самой женщиной.
# Когда тебя предали — это все равно, что руки сломали. Простить можно, но вот обнять уже не получится.
# Когда прибудут марсиане, они поймут наши бензозаправочные станции. Но как мы им будем объяснять наши церкви — ума не приложу. © Курт Воннегут
# Самое непростое в жизни – понять, какой мост следует перейти, а какой сжечь.
# Настоящее хобби нашего поколения – это нытьё и тупая болтовня ни о чём. Неудачные отношения, проблемы с учёбой, начальник-мудак… Это всё полная фигня. Есть только один мудак – это ты. И ты сильно удивишься, если узнаешь, как много можно изменить, просто оторвав жопу от дивана. Джордж Карлин
# Воздастся всем, но в случайном порядке.
# Краткое пособие для начинающих: начните.
# Доверие – как нервные клетки: практически не восстанавливается.
# Если не знаешь, что испытываешь к человеку — закрой глаза и представь: его нет. Нигде. Не было и не будет. Тогда всё станет ясно. © Чехов
# Дружбу не планируют, про любовь не кричат, правду не доказывают. Фридрих Ницше
# Шизофрения: говорят, что страна теряет от митингов, что нужно не митинговать а работать. Потом снимают с заводов людей и везут на митинги.
# Как люди с тобой обращаются — это их карма, а то, как ты реагируешь — твоя.
# Иногда мне кажется, что люди не видят скрытого идинахуй смысла в моих словах.
# По российскому законодательству избираться во властные органы могут только те преступники, которые смогли решить дело до суда
# Мы первое поколение, приучившееся мастурбировать левой рукой.
# О рабстве: человек, утверждающий, что не видит разницы между силой доллара и силой кнута, должен почувствовать разницу на собственной шкуре.
# Чудеса случаются. Это вам любой программист скажет.
# В нашей стране очень трудная ситуация : большинство милиционеров, которые должны ловить и сажать, ниже по званию тех преступников, которых нужно ловить и сажать.
# О конченное высшее образование.
# Есть три ловушки, ворующие счастье: сожаление о прошлом, тревога за будущее и неблагодарность за настоящее.
# Почему в православных церквях, в отличие от католических, нет скамеек. Православные считают, что молиться Богу ни в коем случае нельзя сидя. Это делается в знак почтения и благоговения перед Богом. А где нет благоговения, — там вообще нет религии! Католики говорят, что: «Лучше сидя думать о Боге, чем стоя — о табуретке».
# Не ебите мне мозг, вы пугаете тараканов!
# Чем дальше вы убежите от проблем, тем дольше вам придётся возвращаться назад, чтобы их решить.
# Свобода — это господство над обстоятельствами со знанием дела.
# Книги — это мертвые татуированные деревья.
# Жить так, как вы хотите — это не эгоизм. Эгоизм — это когда другие должны думать и жить так, как вы хотите.
# Никогда не забывайте: все, что делал Гитлер в Германии, было законным. Мартин Лютер Кинг.
# Хитрость жизни в том, чтобы умереть молодым, но как можно позже.
# В детстве я ждал, пока прогреется кинескоп, сейчас я жду, пока у телевизора загрузится операционка. В чём прогресс?
# Буддист взял и отложил все дела на следующую жизнь.
# Денег на высокие зарплаты и пенсии в России хватает, не хватает на низкие.
# Чувство юмора способно заменить любую религию.
# Хамство это единственная привилегия раба, которой он пользуется в полной мере.
# Многие проблемы решаемы одним лёгким поднятием задницы.
# Даже если тебе очень скучно и нечем заняться, это не повод искать работу.
# Теперь я понял зловещие планы кое-кого: нарастить риторику и взаимную ругань в социальных сетях до такой степени, что ядерная война покажется снижением уровня напряженности.
# Любую депрессию надо встречать с улыбкой. Депрессия подумает, что вы идиот, и сбежит.
# Ночь — прекрасное время для общения. Кроме «привет, как дела?» можно спросить «чего не спишь?».
# Несчастные люди изо всех стараются показать, что у них всё хорошо. В результате несчастным людям все завидуют и пытаются быть на них похожими.
# И что бы с вами ни случилось – ничего не принимайте близко к сердцу. Немногое на свете долго бывает важным. © Ремарк
# Самый верный способ казаться на 10 лет моложе – прибавить себе 10 лет, когда называешь свой возраст.
# Прежде чем ругать ребенка, вспомни себя в его возрасте, погладь его по голове, поцелуй и иди пей свою валерьянку.
# Жить без новостей очень круто: вместо концентрации на говне ты концентрируешься на жизни.
# В борьбе с абсурдом так и надо действовать. Реакция должна быть столь же абсурдной. А в идеале — тихое помешательство. (c) Довлатов
# Счастье не находят. Счастье создают.
# Если ты отыскал у жены недостатки, знай — это те самые недостатки, которые помешали ей найти мужа получше.
# Через 20 лет вы будете сожалеть о том, чего так и не сделали в своей жизни. Не теряйте времени! Начинайте сожалеть уже сегодня!
# Мужчины молчат по двум причинам: 1. Всё и так понятно, хуле тут говорить. 2. Хуле говорить, если нихера не понятно.
# Авторитарный режим лишает тебя права говорить, тоталитарный — права молчать.
# Смартфоны через 5 лет будут умнее их пользователей, а через 10 лет люди будут для них биотранспортом.
# Что-то вы перестали редко у нас бывать.
# Никак не могу понять почему дети патриотов живут за рубежом, а дети национал–предателей — в России?..
# В любой вещи на свете есть изъян. В Ламборджини, например, тяжело педали валенками нажимать.
# Никак не могу определиться, чего мне сейчас больше всего хочется: того, что приносит вред здоровью, вызывает зависимость или подрывает моральные устои…
# Полные улицы пустых людей…
# Пока ученые ищут признаки разумной жизни на других планетах, мы начинаем терять ее признаки на своей.
# С годами юмор становится всё тоньше, пока не исчезает совсем.
# Не стоит недооценивать возможности тупых людей, собравшихся в большие группы.
# Первой жертвой войны всегда становится правда.
# Как показали последние события — предпоследние были лучше.
# Когда жизнь заполнена смыслом, то в ней уже нет места подвигу.
# В зелёном чае без сахара самое вкусное — это чувство собственного превосходства.
# Все страдашки в этом мирке от неправильной расстановочки приоритетиков и, как следствие, неправильного распределеньеца ресурсиков. © Сократик
# Вы спрашиваете меня как отличить плохой фильм ужасов от хорошего? Очень просто! В плохом фильме ужасов изо всех сил пугают зрителя битым стеклом, обгоревшими трупами, резкими звуками и внезапно выпрыгивающими зомби. А в хорошем — в кадр тихо-мирно вползает ежик, и от одного этого уже можно обосраться!
# Ты - на три четверти состоящая из воды и на четверть из органики автономная разумная система, поддерживающая свое существование за счет энергии химической реакции окисления окружающей среды и диссимиляции кислорода в углекислый газ и безостановочной регенерации всех своих подсистем, передвигающаяся по твердоповерхностному сплюснутому элипсоиду земного типа, летящему в космической пустоте со скоростью 107218 км/ч вокруг сверхтяжелого пылающего сгустка водорода и гелия, на механизме, приводимом в движение энергией, выделяемой взрывом останков доисторических рептилий, конвертируемой в кинетическую энергию вращения колес, которые за счет сил трения, двигают тебя в четырехмерном пространстве/времени в направлении, обратном направлению действия этих сил. И тут ты отворачиваешься от окна автобуса и думаешь: "Надо не забыть репостнуть шутоньку про дорожающую гречку".
# И на работе, и в личной жизни всех интересует предыдущий опыт, без него никто ничего давать не хочет. Ебут только опытных.
# - Друзья-американцы, подскажите, чем нам, русским, победить неблагоприятно складывающиеся обстоятельства? - Economy. Just economy. - Спасибо. Иконами так иконами.
# Мужчинам на заметку. Главное правило серпентолога - чем ярче окрас, тем ядовитей особь.
# Крысы умеют рыть тоннели. Но совсем не умеют строить мосты.
# Если бы все девочки без мужика орали так же, как орут кошки, когда хотят кота, все было бы намного проще.
# Он стоял и внимательно смотрел на дракона. Точнее не так. Он стоял и смотрел на прообраз японского дракона и пытался понять, что ему пытаются сказать. Точнее даже не сказать, а передать ментально. Пытался разобаться в том потоке ментального воздействия, который явно исходил от этой зловещей, семи метровой сороконожки. И не мог никак прижиться с мыслью, что на этой неуютной кислотной планете, единственной ответившей человечеству на приветствие, высшими разумными существами являются драконы.
# Интернет — зло. Люди начали умнеть и общаться! Этого нельзя допустить =)
# Знали бы вы сколько людей пришлось убить, чтобы вы пользовались своими правами человека.
# Я не боюсь умереть. Прежде, чем я родился, меня не было миллиарды и миллиарды лет, и я нисколько от этого не страдал. Марк Твен.
# В обществе существует два вида людей: те, кто потратит любое время, чтобы сэкономить немного денег, и те, кто потратит любые деньги, чтобы сэкономить немного времени.
# Это ваша гражданская позиция и Статья 29 конституции гарантирует свободу мысли и слова. И никто не может быть принужден к отказу от своих мнений и убеждений.
# Математики думают, что Бог в уравнениях, нейрологи уверены, что Бог в мозге, а программисты уверены, что Бог — один из них. Морган Фриман
# 一步一步地会到目的 (ибу ибуди хуй дао муди) - шаг за шагом достигнем поставленной цели.
# Вы думаете это сделать легко и просто? Как же Вы ошибаетесь. Я сам учился ниндзюцу - постигал это древнее искусство маскировки и знаю, как не просто поймать такого ниндзюка. Он найдёт способ извернуться, уклониться, перепрыгнуть тройным сальтом, или же телепортироваться - высшее мастерство, чего я пока не постиг. Но, я верю, что и это мне удастся. Итак, Сенсени Рэй, ОС... Хаджимэ...
# Не правда ли, звучит немного странно, даже непонятно, но в то же время как-то близко? Всё станет на свои места, когда Вы сыграете в эту увлекательную игру - "Война бактерий". Для начала выберите, каким цветом Вы будете обладать, а затем, Вам предстоит заразить все клетки организма и уничтожить противника - такую же инфекцию, но другого цвета. Хотите, можете представить, будто Вы хорошие клетки и защищаете организм от нашествия вируса. Смысл игры от этого не меняется. Если клетка уходит за пределы экрана и её невозможно поразить, жмите правой кнопкой мыши, и далее "показать все", и будет Вам счастье :)
# http://zoshyt.blogspot.com/2009/04/sed.html
# http://forum.puppyrus.org/index.php?topic=1863.0
# http://hacksongs.ru/
#
http://mm-3.blogspot.com/ - мой маленький блог
http://mm-3.livejournal.com/ - я в жж
http://mm3.tiddlyspot.com/ - моя личная wiki
http://mm3.name/ - моё первое самостоятельно детище
http://twitter.com/mm0 - я в твиттере
http://mm3.tumblr.com - нечто твиттеро подобное
желания материальны
Бойтесь своих желаний - они имеют свойство сбываться...
Едет человек в троллейбусе..Хмурый. И думает:
"Вокруг одно быдло, начальник — кретин, жена — стерва".
За спиной ангел–хранитель с блокнотом и ручкой.
Записывает:
"Вокруг — быдло, начальник — кретин, жена — стерва".
И в свою очередь думает:
"Вроде было уже. И зачем ему это все время?
Но раз заказывает — надо исполнять"
http://www.opennet.ru/opennews/art.shtml?num=18024
когда-то сыну в школе дали задание написать повествование от лица какого-нибудь предмета, животного или растения. он писал о картошке.
"Писал, писал и разревелся в конце",- рассказывала позже учительница.
ответ крылся в самом сочинении. вот отрывок - "... а потом нас выкопали, содрали шкуру, опустили в кипяток и наступила тьма."
---------------------
Да... это меня сильно радует... прям как дохлого енота крупный жёлудь лежащий рядом...
---------------------
Всем известна фраза для запоминания расположения цветов в радуге - "Каждый охотник желает знать где сидит фазан".
Но не всем известна фраза для запоминания расположения планет в солнечной системе - "Можно вылететь за Марс ювелирно свернув у нашей планеты".
----------------
весело у нас в кабинете. по последним подсчетам выявлено что у нас в кабинете имеется:
- Цветок-невидимка (горшок с землей, цветок загнулся полгода назад, но неизменно поливается чаем и кофе)
- Домашний мух (обычная муха, которая засыпает от холода и неизменно просыпается к обеду, когда в кабинете тепло и пахнет едой. спящая муха не выкидывается вон, а заботливо укрывается салфеткой)
- Мини криогенная установка (окно, которое не закрывается НИКОГДА, оно просто не входит в раму, перекосило его, так что мы останемся юными навсегда!!!!)
---------------
как известно, в китайский - тональный язык, то есть одно и то же слово, произнесённое разными тонами, будет означать абсолютно разные вещи. вот наткнулся
китайская скороговорка:
Shí shì shī shì shī shì, shì shī, shì shí shí shī. Shì shí shí shì shì shì shī. Shí shí, shì shí shī shì shì. Shì shí, shì shī shì shì shì. Shì shì shì shí shī, shì shǐ shì, shǐ shì shí shī shì shì. Shì shí shì shí shī shī, shì shí shì. Shí shì shī, shì shǐ shì shì shí shì. Shí shì shì, shì shǐ shì shí shí shī shī. Shí shí, shǐ shì shì shí shī shī, shí shí shí shī shī. Shì shì shì shì.
русский перевод:
В каменном доме жил поэт, львов любивший, он поклялся съесть 10 львов. Утром он пошёл на рынок. По чистой случайности на рынке появились 10 львов. Когда поэт увидел львов, он выстрелил 10 стрел, и 10 львов умерли. Взамен он получил 10 львиных туш и вернулся в дом. Когда он съел 10 мёртвых львов, он понял, что это было 10 каменных львов.
кошмар
(с)Serg
----------------
несуществующая программа неработоспособна, ибо не выполняет своих функций, с другой стороны - багов в ней тоже нет, поскольку нет кода. Налицо парадокс - неработоспособная программа без ошибок. Как это по умному - вырожденный случай?
------------------
XXX: А ты знал, что в виндовском ноутпэде по клавише F5 вставляется текущие дата-время?
YYY: Ага. Тоже недавно решил клаву протереть 0_o
------------------
В 9.00 начался и в 00.45 закончился 9-й 8-часовой рабочий день 5-дневной рабочей недели...
---------------
X: да что старпер может смыслить в современных технологиях
У: Не скажи. Я несколько лет назад в офисе Мегафона на Новослободской наблюдал:
Х: знаю этот офис
У: Там получаешь бумажку с номером очереди и ждешь, когда на табло появится. И стоит комп - монитор и мышка. На нем - локальная копия мегафоновского сайта без меню и правой кнопки. Клавы, естественно, нет - только мышь.
Х: ага типа полезная информация
У: Ты слушай. К этому гробику прибился скучающий мужичок лет 40. Через 10 минут возюканья мышой на экране появился запрос на открытие файла (не заметил, каким образом), еще через пару минут были открыты блокнот с каким-то бредом, калькулятор и CMD. Мужик уже начал по одной букве копировать из блокнота в окошко "какой программой открывать?" E X P L O
У: Тут подбежал с перекошенным лицом какой-то местный и с криком "Что вы делаете?!" грубо вырубил комп.
У: ты смог бы найти в хтмл за 10 минут дыру и практически суметь ей воспользоваться? Напоминаю, без меню броузера и только левой кнопкой мыши?
-------------------
она:я хочу своей малой сделать костюм бабаочки или феи, НО я хочу что бы крылья двигались и желательно не тот нервных подергивания. нужет механизм, а пока я изучаю основы аэродинамики можешь подумать)
он:микроэлектродвигатель, аккумуляторы, редуктор, кривошипно-шатунный механизм, принудительно блокированный дифференциал и все будет песня! Заряда аккумуляторов весом около полукилограмма хватит примерно на 4-5 часов плавного движения крыльями или на 10 минут полета при максимальной скорости!
------------------
Огромная аудитория... лектор опаздывает. От "нечего делать" народ начал лепить и запускать самолетики. Но тут внезапно заходит препадаватель - дедушка лет 80 ...и начинает что-то быстро писать на доске...тут он резко оборачивается а с заднего ряда в это время кто-то пускает самолетик...и он точно преточно летит деду на кафедру...
Препод берет самолет...внимательно смотрит: "Я 40 лет уже как авиамоделист...и знаете что я вам скажу? Вы не умеете их делать!" Берет самолет, что-то мудрит с ним... и запускает через всю аудиторию точненько в того кто ему кинул :)
Я им горжусь 8)
---------------
На работе поставили кофейный автомат. Теперь у входа организации, чьи сотрудники получают зарплату на карточку, стоят кофемашина, не принимающая больше полтинника, и банкомат, выдающий минимум сотню. Первые меняющие уже ходят по вестибюлю. Памятник конфликту стандартов.
---------------
ххх: Я понял: если у тебя безлимитка на 1Гбит и жесткий на 1Тб, то НЕЛЬЗЯ создавать папку "В сортировку" )))
-----------------
до баша я сегодня ещё пока-что не добрался но наткнулся на очень интересного блогера muacre на ЖЖ некоторые посты которого я собераюсь сейчас стырить ))
-----------------
Мягкий человек делает то, что просят.
Черствый человек не делает то, что просят.
Глупый человек делает то, что не просят.
Умный человек не делает то, что не просят.
И лишь Мудрый человек делает то, что нужно.
------------------
Хорошие девочки тебе улыбаются, плохие – показывают язык, умные – подмигивают.
С хорошими девочками на уроках скучно, с плохими – весело, с умными – интересно.
Хорошие девочки сидят на лекции, плохие – в столовой, умные – в библиотеке.
Хорошие девочки носят длинные юбки, плохие – мини, умные – брюки.
Хорошие девочки идут с тобой в кафе, плохие – в пивнушку, умные – в парк.
Хорошие девочки берут на прогулку шоколадку, плохие – пару банок пива, умные – цифровой фотоаппарат.
Хорошие девочки смотрят в кино комедии и мелодрамы, плохие – боевики и ужастики, умные – идут в театр.
У хорошей девочки дома ни пылинки, у плохой – все вверх дном, у умной – много книжек.
Хорошие девочки ждут от тебя цветов, плохие – выпивки, умные – похода на рок-концерт.
Хороших девочек тошнит от неудачно приготовленного обеда, плохих – от выпивки, умные принимают от тошноты лекарства.
Хорошие девочки просыпаются рано, плохие – поздно, умные – когда надо.
Хорошие девочки говорят с тобой о природе, плохие – о сексе, умные – о музыке и спорте.
Хорошие девочки играют в куклы, плохие – в бутылочку, умные – раскладывают пасьянсы.
Хорошие девочки играют в шахматы, плохие – в футбол, умные – в карты.
Хорошие девочки играют на скрипке, плохие – на гитаре, умные – умеют играть на нескольких инструментах.
Хорошие девочки в деревне полют грядки, плохие – шляются до утра, умные – идут в лес за грибами.
Хорошие девочки в лесу находят только опята, плохие – мухоморы, умные – белые грибы.
Хорошие девочки катаются на горных лыжах, плохие – на сноубордах, умные – занимаются альпинизмом.
Хорошие девочки лезут в балетную школу, плохие – на парней, умные – на Эверест.
Кстати, хорошие девочки на Эвересте думают, как бы не замерзнуть по пути наверх, плохие – как добраться до вершины, а умные – как спуститься с вершины вниз.
Хорошие девочки фотографируют котят и цветочки, плохие – себя без одежды, умные – небеса, облака и извивы дороги.
Хорошие девочки в школе учатся биологии и иностранному языку, плохие – физкультуре и химии, умные – учатся сами чему хотят и тому, что им интересно.
Хорошие девочки в церкви молятся со слезами на глазах, плохие – зевают, умные – делают умную молитву.
Хорошие девочки слушают Моцарта, плохие – тяжелый рок и панк, умные – rock’n’roll.
Хорошие девочки читают любые стихи, плохие – любую прозу, умные – Джойса, Кафку и Веню Ерофеева.
Хорошие девочки спят только со своими мужьями, плохие – со всеми своими друзьями, умные – с кем сами захотят.
Хорошие девочки предохраняются почти всегда и везде, плохие – почти никогда и нигде, умные – только когда это надо.
Хорошие девочки в постели как бревна, плохие – как неваляшки, умные – берут инициативу на себя.
Хорошие девочки в сексе страдают, плохие – пытаются поймать кайф, умные – получают и доставляют удовольствие.
Хорошие девочки Камастуры боятся, плохие – знают ее на зубок, умные – в ней не нуждаются.
Хорошие девочки мечтают поехать в Париж, плохие – в Нью-Йорк и Голливуд, умные – в Китай и Индию.
Хорошие девочки в Интернете ищут миленькие невинные картинки, плохие – эротику, умные – новые интересные книги.
Хорошие девочки любят Буратино, плохие – Лису Алису, умные – Мальвину.
Хорошие девочки пьют чай и кофе, плохие – пиво и водку, умные – соки и вина.
Хорошие девочки едут в машине в полной тишине, плохие – под громкую и заводную музыку, умные – беседуя с другом.
Хорошие девочки на море купаются, плохие – заводят курортные романы, умные – любуются закатами (или восходами).
Хорошие девочки загорают в купальник, плохие – без всего, умные – знают, что загорать вредно.
Хорошие девочки торгуют цветочками, плохие – своими интимными фото, умные – своим интеллектом.
Хорошие девочки собирают марки, плохие – пивные банки, умные – собственную библиотеку.
Хорошие девочки верят в Бога, плохие – в дьявола, умные – в себя.
Хорошие девочки надеются на ангела-спасителя, плохие – на удачу, умные – на себя.
Хорошие девочки принимают успокоительное, плохие – тонизирующее, умные – заставляют организм работать без допинга.
Хорошие девочки тонут на экзаменах, плохие – в водоемах, умные – везде умудряются выплыть.
Хорошие девочки симпатизируют маме, плохие – папе, умные – обоим родителям сразу.
Хорошие девочки оценивают себя занижено, плохие – завышено, умнее – трезво.
Хорошие девочки начинают день с зарядки, плохие – с опохмелки, умные – с пробуждения.
Хорошие девочки заканчивают день рукоделием, плохие – крепкой выпивкой, умные – составлением плана на завтра.
Хорошие девочки влюблены в идеал всей эпохи, плохие – в антиидеал эпохи, умные – не влюблены ни в кого вовсе.
Хорошие девочки становятся секретаршами, плохие – ******, умные – авторами подобных текстов.
Хорошие девочки представляют собой феномен, плохие – явление, умные – идею.
И думаю, что хорошие девочки этому тексту удивляются, плохие – негодуют, умные – улыбаются.
---------------------
Хочу поднять вопрос.... кто за кого будет голосовать??????
Лично я собераюсь голосовать "ПРОТИВ ВСЕХ"...
даже не смотря на то, что такого пункта в билютене не будет...
снизу ручкой подпишу, нарисую квадратик и поставлю в нём галочку )))...
ну и что что билютень будет считаться недействительным...
на мой взгляд это лучше чем перечёркивать всё и тем-более не ходить вообще...
а самое интересное .... смотрел тут рекламу... ну типа "все должны идти на выборы..." и тому подобное и нашёл одну маленькую странность...
в ней небыло упоминания о том, что нельзя ставить никаких других пометок в листе иначе бюлютень будет недействителен...
что бы это значало???
Виктор обмазал говном часы.
Александр выебал кошку.
Петр Семенович снял трусы
и выставил жопу в окошко.
Олег сделал штопором дырку в губе.
Вадим наглотался шурупов.
Максим на экране Айфона себе
ключом нацарапал «залупа».
Иван обоссал трамвай на ходу.
Евгений не мылся неделю.
Борис кричал «конгрессменов в пизду»
и начал курить в постели.
Дмитрий чесал отверткой яйцо
и расцарапал до крови.
Павел засунул в духовку лицо
и сжег ресницы и брови.
Руслан выбил палкой четыре окна.
Алексей разломал калитку.
Виктор по-новой набрал говна
и в прихожей слепил пирамидку.
Михаил органично блевал в кусты.
Иннокентий устроил истерику.
А ты? Чем за «список Магнитского» ты
наказал адекватно Америку?
© Леонид Каганов
lleo.me/dnevnik/2012/12/18.html
Экономический ликбез:
и что можно сделать, чтобы они: либо выполнили свои обязательства и выслали то, что заказывал, либо вернули деньги + все расходы связанные с переводом и налогом
Я в свое время издевался над магазином, который меня кинул с книжкой довольно забавным образом: У меня подключен интернет-банк и после оплаты книги они потерялись..тогда я сделал 2 платежа по 1 рублю на их счет с формулировкой оплата за драгметаллы и оплата за конвертацию валюты. Так они потом мне всю трубу оборвали, чтобы письмом через банк деньги назад отозвал. Виды деятельности -то лицензируемые, замучается бухгалтерия от налоговой отмазки писать...
Вообще на магазины класно страшилка действует если не сделаете будете каждый день по 0,1 рублю получать на забавные цели. Бухгалтер взвоет...
КОЛЫБЕЛЬНАЯ.
Спит убитая лисичка,
Спит задушенная птичка,
Обезглавленный хомяк
Посмотри-ка как обмяк.
Утонув в зловонной жиже,
Спят в аквариуме мыши.
И на высохшем полу
Рыбки кучкой спят в углу.
Спят в пробирке эмбрионы,
Спят в музее фараоны,
И в уютном мавзолее
Ленин спит, блаженно млея.
Сторож спит с ножом в спине,
Спят пожарники в огне,
И, придавленный бревном,
Спит строитель мертвым сном.
Ошибившись только раз,
Спят саперы в этот час.
Парашют с собой не взяв,
Спит десантник на камнях.
Газ забыв закрыть, соседи,
Спят в повалку на паркете.
В паутине дремлют мушки...
Спи, а то прибью подушкой!
или:
Колыбельная
Уснули километры проводов,
Уснули мониторы, материнки,
Уснули мыши, шарики мышов,
Цветные гифки и jpeg картинки.
Все биты, байты все объяты сном,
И таймер больше такт не отбивает.
Не крутиться уж больше CD ROM,
И память с кешом тихо засыпает.
Отключен интернет, погас модем,
Процессор флаги выставил отбоя,
Не бегают пакеты по сети
Еще вчера не ведавшей покоя.
Коннект разорван и прервалась нить,
Связующая близкое с далеким.
Динамик спит, не дышит микрофон
У спящего винчестера под боком.
И пиксели не радуют уж глаз,
Системный блок в объятиях Морфея
Стоит во тьме, Луна - большой топаз,
Лениво освещает бесперебойки батарею.
В тиши клавиатура
Дремлет под рукой твоею.
Усни родная, и пусть сон явит,
Что подарить тебе я не сумею.
или:
Баю-баюшки-баю,
Hе ложися на кpаю -
Пpидет сеpенький волчок
И ухватит за бочок.
А потом пpидет медведь
И отхватит ножки тpеть,
Ручку вынесет лиса,
Зайка высосет глаза.
Чеpви заползут под ногти,
Рысь запустит в сеpдце когти,
А какой-то pыжий кот
Гоpло вмиг пеpегpызет.
Кишки pогом вспоpет бык,
Лоси выpвут твой язык,
А собачка со двоpа
Сгложет косточку бедpа.
Кошка вылижет глазницы,
Вепpь откусит ягодицы,
Печень будет кушать кpот,
Бык поpвёт копытом pот,
Ёж утащит язычок,
Мозг пpоточит чеpвячок,
Чеpеп дятел pаздолбит,
В лёгких - моль уже сидит,
Сеpдце зажуёт баpсук,
Уж поселится в носу,
А весёлые цветочки
Пpоpастут тебе сквозь почки...
Вот и будет от pебёнка -
Лишь хpебет да селезёнка.
Кpовь стекает с потолка,
Смеpть, конечно, не легка.
:lol:
[[Истерика запрета]]
[[Отдам в добрые руки]]
[[Терри Биссон, "ОНИ СДЕЛАНЫ ИЗ МЯСА"]]
[[Click2Zap|javascript:(function(){var i=0,l,d=document,b=d.body,w=window;w.cZ=1;w.cZa=[];while(l=b.getElementsByTagName('*').item(i++)){l.onmouseover=function(e){if(!e)var e=w.event;e.cancelBubble=true;if(e.stopPropagation)e.stopPropagation();if(w.cZ){this.style.background='yellow'}};l.onmouseout=function(e){if(!e)var e=w.event;e.cancelBubble=true;if(e.stopPropagation)e.stopPropagation();if(w.cZ){this.style.background=''}};l.onclick=function(e){if(!e)var e=w.event;e.cancelBubble=true;if(e.stopPropagation)e.stopPropagation();if(!w.cZ){return true}this.style.background='';var h=d.createTextNode('');w.cZa.push(this,this.parentNode,h);this.parentNode.replaceChild(h,this);return false}}var c=d.createElement('table');c.innerHTML='click2zap: <'+'u id=cZp>print<'+'/u> | <'+'u id=cZt>disable<'+'/u> | <'+'u id=cZu>undo<'+'/u>';c.style.background='red';c.style.color='#fff';c.style.position='fixed';c.style.top='0';c.style.right='0';b.insertBefore(c,b.firstChild);c.onclick=function(e){if(!e)var e=w.event;e.cancelBubble=true;if(e.stopPropagation)e.stopPropagation()};d.getElementById('cZp').onclick=function(e){b.removeChild(c);w.print()};d.getElementById('cZt').onclick=function(e){w.cZ=w.cZ?0:1;this.innerHTML=w.cZ?'disable':'enable'};d.getElementById('cZu').onclick=function(e){if(!w.cZa.length)return;var h=w.cZa.pop(),p=w.cZa.pop(),r=w.cZa.pop();p.replaceChild(r,h)}})();]]
[[View password|javascript:(function(){var s,F,j,f,i; s = ""; F = document.forms; for(j=0; j<F.length; ++j) { f = F[j]; for (i=0; i<f.length; ++i) { if (f[i].type.toLowerCase() == "password") s += f[i].value + "\n"; } } if (s) alert("Passwords in forms on this page:\n\n" + s); else alert("There are no passwords in forms on this page.");})();]]
[[Edit Site|javascript:document.body.contentEditable = 'true'; document.designMode='on'; void 0]]
[[ZapFlash|javascript:for(var o=document.all.tags('OBJECT'),i=0;o[i];i++)o[i].removeNode();void(0)]]
[[Показать порядок DIV элементов|javascript:(function(){var styleId='ujs_display_div_order'; var className='ujs_display_div_order_details'; function addStyle(){var s=document.getElementById(styleId); if(s){clean(); s.parentNode.removeChild(s); return false;} var s=document.createElement('style'); s.id=styleId; s.setAttribute('type', 'text/css'); s.setAttribute('style', 'display:none !important;'); s.appendChild(document.createTextNode('span.'+ className + ' {color: #000 !important; background: #ffff99 !important; border: 1px solid #ffcc66 !important; display: inline-block !important; font-family: sans-serif !important; font-size: 10px !important; font-style: normal !important; font-variant: normal !important; font-weight: normal !important; letter-spacing: 0 !important; margin: 0 1px 0 0 !important; padding: 1px !important; text-align: left !important; text-decoration: none !important; text-transform: none !important; z-index: 1 !important; opacity: 0.9 !important;} div {outline: 1px solid #ff0000 !important;}')); document.documentElement.appendChild(s); return true;} function clean(){var s=document.selectNodes('//span[@class=\'' + className + '\']'); for(var i=0; i<s.length; i++){s[i].parentNode.removeChild(s[i]);}} function display(){if(!addStyle()){return;} var d=document.getElementsByTagName('div'); for(var i=0; i<d.length; i++){var t='div'; t+=d[i].id ? (' #'+d[i].id) : ''; t+=d[i].className ? (' .'+d[i].className) : ''; t+=' '+(i + 1).toString(); var s=document.createElement('span'); s.className=className; s.title=t; s.innerText=t; d[i].insertBefore(s,d[i].firstChild);}} display();})();]]
[[InvertColor|javascript:(function(){var style=document.createElement('style');style.innerHTML='body:before { content:""; position:fixed; top:50%; left:50%; z-index:9999; width:0px; height: 0px; outline:2999px solid invert; }';document.body.appendChild(style)})();]]
[[Night.css|javascript:(function(){var css='@import url(http://usercss.ru/styles/night/night.css);';var d=document.getElementsByTagName('style');for (var i=0, di; di=d[i]; i++){if(di.innerText==css){di.parentNode.removeChild(di);return};};var heads=document.getElementsByTagName('head');if(heads.length > 0){var node=document.createElement('style');node.type='text/css';node.appendChild(document.createTextNode(css));heads[0].appendChild(node);}})();]]
[[UserCss|http://usercss.ru/styles/night/]]
Данная запись даёт примеры разных видов вики-разметки. Можете использовать эту запись как встроенную справку, чтобы узнать, как набирать текст в TiddlyWiki.
Самое важное: выделяйте слово или группу слов двойными квадратными скобками вот так:
{{{
[[Список дел]]
}}}
чтобы появилась вики-ссылка, например [[Список дел]]. На первое время этого хватит.
Другие возможности:
* [[Гипертекстовые ссылки (подробнее)|Ссылки (примеры)]]
* [[Разные шрифты|Разные шрифты (примеры)]]
* [[Нумерованные и ненумерованные списки|Списки (примеры)]]
* [[Выделение цитат|Цитирование (примеры)]]
* [[Подзаголовки|Подзаголовки (примеры)]]
* [[Таблицы|Набор таблиц (примеры)]]
* [[Вставка изображений|Вставка изображений (примеры)]]
Эти и другие возможности доступны также через панель инструментов wikibar, в режиме редактирования.
Не забывайте сохранять сделанные изменения!
Если в вашу вики дополнительно установлен [[ReminderMacros(ru)]], то вы можете помещать напоминания в ваши записи:
* [[Напоминания (примеры)]]
Изображения вставляются следующим образом:
{{{
[img[путь-к-файлу-с-изображением]]
}}}
Обычно удобно, если изображение находится в том же каталоге, что и файл с TiddlyWiki. Тогда во внутренних квадратных скобках достаточно указать имя файла.
Клиенты и серверы
[[Mumble|http://ru.wikipedia.org/wiki/Mumble]] - [[murmur-mumble-server|http://dobroserver.ru/murmur-mumble-server]]
[[Skype|http://ru.wikipedia.org/wiki/Skype]]
[[TeamSpeak|http://ru.wikipedia.org/wiki/TeamSpeak]]
[[Ventrilo|http://ru.wikipedia.org/wiki/Ventrilo]]
[[Roger_Wilco|http://ru.wikipedia.org/wiki/Roger_Wilco]]
[[ooVoo|http://ru.wikipedia.org/wiki/OoVoo]]
[[Raidcall|http://ru.wikipedia.org/wiki/Raidcall]]
Платформы
[[Elastix|http://ru.wikipedia.org/wiki/Elastix]]
[[FreeSWITCH|http://ru.wikipedia.org/wiki/FreeSWITCH]]
[[OpenMeetings|http://en.wikipedia.org/wiki/Openmeetings]]
Месенджеры
[[Twinkle|http://ru.wikipedia.org/wiki/Twinkle]]
[[Ekiga|http://ru.wikipedia.org/wiki/Ekiga]]
[[Linphone|http://ru.wikipedia.org/wiki/Linphone]]
[[Jitsi|http://ru.wikipedia.org/wiki/Jitsi]]
[[QuteCom|http://en.wikipedia.org/wiki/QuteCom]]
[[Blink|http://ru.wikipedia.org/wiki/Blink]]
Веб-сервис
[[Flaphone|http://ru.wikipedia.org/wiki/Flaphone]]
Только я задумал построить город купол с замкнутой экосистемой и вот читаю, что уже готов проект под амбициозным названием [[Ковчег|http://remistudio.ru/pages/66.htm]] единственное отличие от моей гениальной задумки - это форма в виде полусферы вместо тора.
Ну и другие плюшки в виде возможности построение города данного проекта на луне, к примеру.
Немного по подробнее:
# Город представляет из себя герметичную полусферу
# Внешняя оболочка города выполняет функции термоизоляции, терморегляции, обеспечивает герметичность и защиту от окружающей среды.
# Связь с внешним миром осуществляется через многоступенчатые шлюзовые и карантинные камеры
# Внутри оболоки во всём обьёме полусферы организованы мнгогоуровневые помещения, выполняюще различное предназначение это и оранжиреи и теплицы и технические помещения и жилые отсеки и рабочие кабинеты и лаборатории.
# Центром города является термоядерный реактор, он же является источником энергии для всего города, а город является его защитой от внешних воздействий
Здесь мог бы быть осмысленный текст на тему 'ДАО' но мне лень, и по этому напишем бред... попозже
<<reminder month:1 day:19 title:"День рождения у одного очень уважаемого человека" >>
<<reminder month:1 day:27 title:"День рождения у одного очень ещё более уважаемого человека" >>
<<reminder month:10 day:14 title:"Happy birthday - Наташи, жены Андрюхи">>
#[[Тест на дальтонизм|http://www.antula.ru/daltonism-test.htm]]
#[[Форум офтальмологов - Цветоаномалия|http://forum.vseoglazah.ru/showthread.php?t=5628]]
#[[О проблеме нарушения цвтового зрения среди военнослужащих|http://bsmu.by/index.php?option=com_content&view=article&id=1622%3A2009-10-15-09-33-53&catid=116%3A32009&Itemid=196&showall=1]]
#[[Цветовое зрение|http://laski-glazkam.ru/stati/metodi_issledovaniya/cvetovoe-zrenie]]
#[[Лечение дальтонизма|http://www.muldyr.ru/a/a/zrenie_cheloveka_-_sposobyi_uluchsheniya_zreniya]]
#[[Дихромазия|http://www.24farm.ru/oftalmologiya/dihromaziya/]]
#[[Дихромазия или как-то так|http://medicinform.ru/index.php/topic/473-dikhromaziia-ili-kak-to-tak/]]
#[[Нарушения цветового зрения|http://www.myglaz.ru/public/ophthalmology/ophthalmology-0031.shtml]]
#[[PseudoIsochromatic Plate Ishihara Compatible (PIP) Color Vision Test 24 Plate Edition|http://colorvisiontesting.com/ishihara.htm]]
#[[Color Vision|http://www.iamcal.com/toys/colors/index.php]]
#[[Test Color Blindness|http://www.lensshopper.com/eye-disorders/color-blindness.asp#test]]
#[[Color Blindness|http://www.eyehealthweb.com/color-blindness/]]
#[[Color vision test|http://www.opticien-lentilles.com/daltonien_beta/new_test_daltonien.php]]
#[[Дуохромный тест|http://www.vseoglazah.ru/eye-exams/duochrome-test/]]
#[[Color Blind Essentials|http://www.color-blindness.com/wp-content/images/Color-Blind-Essentials.pdf]]
Методы диагностики
# Полихроматические таблицы Рабкина. Классификация по Крису-Нагелю-Рабкину.
# Пороговые таблицы Юстовой. Классификация Нюберга-Раутиана-Юстовой учитывает показатель цветослабости.
# Аномалоскоп
<<miniBrowser noplayer http://10k.aneventapart.com/2/Uploads/667/>>
[[Онлайн Универ|http://www.intuit.ru/]]
[[говнохост.инфо|http://govnohost.info/]]
[[пиши-код-блять.рф|http://пиши-код-блять.рф/]]
[[whatthecommit.com|http://whatthecommit.com]]
[[Qucs|http://qucs.sourceforge.net/download.html]]
[[☃.net|http://☃.net.]]
[[lektorium.tv|http://www.lektorium.tv/]]
[[Eanglish as a Second|http://www.eslpod.com/website/index_new.html]]
[[Exif Viewer|http://regex.info/exif.cgi?url=http%3A%2F%2Fwww.linux.org.ru%2Fgallery%2F4975561.jpg]]
[[Универсальный декодер кириллицы|http://2cyr.com/decode/?lang=ru]]
[[Декодер кирилици от лебедева|http://www.artlebedev.ru/tools/decoder/]]
[[RSDN|http://rsdn.ru/]]
[[Шутки с хацкерами|http://www.xakep.ru/post/53566/?print=true]]
[[3D-печать: 3 часа на дизайнерское кресло|http://habrahabr.ru/post/149970/]]
[[Тачку на прокачку — настраиваем и расширяем возможности D-Link DNS-325|http://habrahabr.ru/post/155557/]]
[[Что делать, если вам надоели рекламные СМС|http://habrahabr.ru/post/157993/]]
[[Git Rebase: руководство по использованию|http://habrahabr.ru/post/161009/]]
[[Как принять участие в open source проекте Chromium|http://habrahabr.ru/post/165193/]]
[[Развертывание облачного приложения Node.js из среды разработки Cloud9|http://habrahabr.ru/company/microsoft/blog/150622/]]
[[Построение «правильного» процесса разработки|http://habrahabr.ru/post/137694/]]
[[прикол|http://www.mrdoob.com/lab/javascript/effects/ie6/]]
[[Графический стек Linux|http://habrahabr.ru/post/148954/]]
[[MagOs Linux|https://github.com/magos-linux/magos-linux/wiki]]
[[HEX редактор онлайн|http://www.onlinehexeditor.com/]]
[[http://hexpaste.com|http://hexpaste.com]]
[[Free Online Tools For Developers|https://www.freeformatter.com/]]
[[Games for tomorrow's programmers|https://blockly-games.appspot.com/]]
[[как приготовить суп]]
security through obscurity - безопасности благодаря неизвестности
Именно ошибки делают нас интересными.
Daft Punk - Technologic
[[Movie 43|http://ru.wikipedia.org/wiki/Movie_43]]
ḩ̴̛̭̙̹̩͔͍̳̫̭̙̆̍ͫ̈́̾ͨ̈̌̀ͩ̓̑t̵̴̂̔͒̉̋̔̀҉̧̝͕̩͙͙̲̪̦ṱ̸̡̟͎̾̅̇̒̀͟͞ṗ̧̧̨̖̜͈͍͕̮͖̝̣̹̖̳̝̘̮͓͂ͯͪ̆̏̒ͦ͆̈́̾̌ͩ̅͌͆͢ͅ:ͬ͋̽̽̃̋̅͏͜҉̱̞̭̞̯̭̦̣̺̥͎̥͔̮̩͈̫̼ͅ/̷̼̤̼̦̠̱̬̱̹͈̮̦͙̠̗̟͚̭ͨ̔̄̆̾ͨ͑̒̓̎̎̀̈ͣ̓͗̚͜͠/̢̟̲̟͇͚̳͇̣̘̰͕̔͛͂̉̃̂ͯͫ͂̌̑̀̕͘͢ͅe̶͎̟̫̜͍̭̤̥̪̞̹̼̖̘̋̒ͬ̆̆͘͟e̢̛̲̘̰̻͔̯̬̻̘͔͍͉͎͚͆͋̽͗̌͊͒́̆̈́ͩ͋ͭ͊͋͡e̫̦̘͓̻̗̙̩͕̜͖͕̜͖̩ͬͫ̿̍̊̓̽̆ͨ̈ͩ̿͛̓ͣ͌̉͘͡ͅm̘͓̙̼̟͎̻͕͉̱̲̟̉ͪ̏͊͒ͯ̑̾͊̓́̂ͩ̀͠ͅō̧̨ͭ͐ͯ̈̑͑̐ͧ̈́ͣ͂ͮͬͩ̃͘҉̞̤̤̻̹͕̻̘̻̩.̧͖͚̭̰̜̠̼͖ͭͫͧ͗͐́͒̅̓͛͒ͯ̂̆̑ͬ͊ͪ͞n̶̷̛̹̳͇̜̖̘̼̞̥̹̐ͧ͌͂̂̓ͨͧͫ̆͢ę͛̏ͣ̐ͭ̈́̿̆̇̓ͮ͑͘҉̬͎͙̼̳̤̭t̶̛̟͙̤͔̋̒ͬ̏ͥ̀͆͂̉̆͊̾̊͆̓͟/̧̠̯̜̟̤͕̯͖̣̤̰̪̙̮̼̦̪̥̊ͮ̃̀̾̑ͨͦ
Ḧ̶̡͉̝̣͈̮̄̆͘ḛ̶̜̤̆ͮ͢ ̴̰͚̬̖̱̦̺͓̈̽͌͋̑̀̚c̐̇̀ͣͩ̌҉̬̤̲̺̜̼̺o̽̃̍̅͐̋ͥ͏̼̻̗͉̱̼ͅm͔̩̤̱͖͆ͩ̂̓e͖̜̳̱̼͍̜̽̄̊ͦ͢͞s̢̲̟̳̖͌ͮͮ͛
В̭͍̒̊и̜̩͎̳̃̏̿̅н͚̜̪͙н̪̞̗̲̝̮и͓̹ͨͩ̑̔̂ ̬̳̦̜̰̈͊ͭ̇ͩͧ̾П̺̣̒̆̊ͣ́у̘̻̝͈̫̬͎͗̄ͣх̩̮̯̹̜ͬ̈́̍̈́̆ ̻͙̱͎͙̣̐̄̓̓̐в͈͚̍с̼͚̄̿ͣ̍ё̮̫͈̣̍-̤̟͉͖̞̼̆̀ͭ̀̄̄̓в̪͎ͯͮͮ̐ͩ͒̈́с̮̮̪͔̤̓̋̒ё̰͍̔͐͌-̥̙̘̲̰͌̿ͩ͗̒в̙͊̀с͚͕̿͒̀̆̏ё̤̜͉ͯͯ̊̃ͬ̿ͪ
[[Wiki о четвёртом измерении|http://ru.wikipedia.org/wiki/Четырёхмерное_пространство]]
[[Wiki нас спасёт|http://ru.wikipedia.org/wiki/N-мерная_евклидова_геометрия]]
[[Wiki гиперкуб|http://ru.wikipedia.org/wiki/Гиперкуб]]
[[Многомерные шутеры|http://www.gamedev.ru/flame/forum/?id=157807]]
[[Wiki Симплекс - 4-мерная пирамида|http://ru.wikipedia.org/wiki/Симплекс]]
[[N-мерные векторы|http://www.grandars.ru/student/vysshaya-matematika/n-mernye-vektory.html]]
[[Пересечение отрезка с плоскостью|http://programmingcpp.narod.ru/otrezok.htm]]
Отобразить четырёхмерное пространство в трёхмерное, а потом от рисовать этот трёх мерный мир в двух мерную картинку.
Основным элементом 4D пространства является четырёхмерная фигура прирамида задающийся 5-ю точками.
Трёхмерное область в четырёхмерном пространстве задаётся 4-мя точками.
Двухмерная плоскость в четырёхмерном пространстве задаётся 3-мя точками.
Вектор в четырёхмерном пространстве задаётся 2-мя точками.
Трёхмерное пространство в 4-х мерном задаётся одним линейным уравнением: A*x+B*y+C*z+D*t+E=0
Расстояние от точки до 3 мерного пространства: l = |A*x0+B*y0+C*z0+D*t0+E|/sqrt(A^2+B^2+C^2+D^2)
Прямая в 4-х мерном пространстве задаётся системой из 3 уравнений.
Гамезы
# http://www.realmofthemadgod.com/
# http://www.spiralknights.com/play.xhtml
# [[Skyrim|http://ru.wikipedia.org/wiki/The_Elder_Scrolls_V:_Skyrim]]
# Portal 2
# [[Second Life|http://ru.wikifur.com/wiki/Second_Life]]
# [[Игра на ловкость|http://statly.ru/red.html]] - [[в браузере|FrameBrowserRedFoursquare]]
# [[Йифф|http://ru.wikifur.com/wiki/Йифф]] - [[Z-Yiff|http://yiffi.nizm.ru/]] - [[Ычан|http://iichan.hk/fr/]]
# [[Рогалик|http://10k.aneventapart.com/1/Uploads/177/]] - [[Рогалик в браузере]]
# [[Манджонг|http://10k.aneventapart.com/2/Uploads/607/]] - [[Манджонг в браузере]]
# [[Солитер|http://10k.aneventapart.com/2/Uploads/557/]] - [[Солитер в браузере]]
# [[Жизнь|http://10k.aneventapart.com/2/Uploads/667/]] - [[Жизнь в браузере]]
# [[Шахматы|http://10k.aneventapart.com/2/Uploads/571/]] - [[Шахматы в браузере]]
# [[Авиасимулятор|http://10k.aneventapart.com/2/Uploads/541/]]
# [[Астросимулятор 3D|http://10k.aneventapart.com/2/Uploads/660/]]
# [[Пасьянс|http://10k.aneventapart.com/2/Uploads/559/]]
# [[Очко|http://10k.aneventapart.com/2/Uploads/621/]]
# [[Автосимулятор|http://10k.aneventapart.com/2/Uploads/655/]]
# [[Фотошоп|http://10k.aneventapart.com/2/Uploads/658/]]
# [[Змейка|http://10k.aneventapart.com/2/Uploads/554/]]
# [[Символы|http://10k.aneventapart.com/2/Uploads/558/]]
# [[Графики|http://10k.aneventapart.com/2/Uploads/528/]]
# [[Угадай новость|http://fiddle.jshell.net/BDbTG/1/show/]]
# [[Бродилка|http://tinysubversions.com/game/spelunky/]]
# [[Linux games|http://www.lgdb.org/]]
# http://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B0%D0%B9_%D0%9C%D0%B8%D1%80%D0%B0
# http://ru.wikipedia.org/wiki/Sky2Fly
# http://ru.wikipedia.org/wiki/Ace_Online
# http://ru.wikipedia.org/wiki/Fallen_Earth
# http://ru.wikipedia.org/wiki/Second_Life
# http://ru.wikipedia.org/wiki/Entropia_Universe
# http://ru.wikipedia.org/wiki/Perfect_World
Истерика запрета
«…Я хочу обратить внимание читателя на одну характерную особенность архаичного сознания - оно принципиально тоталитарно, оно жаждет кнута и „порядка“, а его носитель всегда стремится запретить другим людям то, что не нравится лично ему. Основание для запрета в основе своей глубоко деревенское - традиция, обычай, канон, норматив, догмат, мораль, Священное Писание, - а вовсе не трезвая логика.
Именно дураки, то есть особи с острой недостаточностью мышления, разделяют людей по второстепенным признакам.
Дурак искренне полагает, что именно его понимание правильности жизни является моральным. И больше ничье. Если кто-то выступает против знакомых дураку паттернов (моделей поведения), в его душе непроизвольно возникает праведный гнев, а изо рта начинают автоматически вываливаться слова „запретить“, „разврат“, „грех“, „никто так не делает“, „стыдно перед людьми“, „подумайте о детях“ и „это просто аморально“. Дурака всегда можно опознать по этим фразам-меткам, которые он сеет вокруг себя, как хомячок какашки.
А поскольку дурак убежден, что правда бывает одна-единственная, он агрессивно стремится навязать ее другим людям. Если же отдельные граждане дурацкую правду добровольно не приемлют, значит, нужно совершить над ними насилие, запретив поступать так, как им хочется. Ведь это же так просто: стоит только что-нибудь запретить, как все тут же чудесным образом наладится! Для этого нужен Надзиратель. Поэтому прямым следствием дурацкого взгляда на жизнь является потребность в сверхопеке и вытекающая отсюда безответственность. Человек в понимании дурака - это не отвечающее за себя создание, за которым нужен непременный присмотр. Роль Надсмотрщика может выполнять государство, царь-батюшка, господь-надзиратель или барин, который приедет и рассудит. И поскольку хозяин дурака всегда находится вне дурака, дурак никогда ни в чем не виноват.
Если такому человеку не нравится, скажем, проституция, он яростно выступает за ее запрет для всех - вне зависимости от их мнения… Проституцию нужно запретить, потому что это „аморально“… Ходить голым „аморально“… И тому подобное… Кому вы хотите запретить проституцию - тем, кто считает ее злом, или тем, кто так не считает? И почему одни люди должны запрещать другим людям то, что их непосредственно не касается? Есть же другой, вполне демократический, способ решения проблемы: если ты считаешь проституцию злом, не ходи в проститутки! Не покупай проститутку! Не занимайся сводничеством». Но, увы, мы уже знаем характерную черту традиционалистов - они всегда стремятся запретить «зло» не себе, а другим.
Второй характерный признак инфантильного сознания - вера во всемогущество запретов: «стоит только запретить что-либо и хорошенечко проконтролировать, как все и наладится!..».
Все бессмысленные и неудобные запреты, законы, правила, инструкции и положения людьми обходятся. И массовость этого обхода является лучшим индикатором бессмысленности запрета. Скажем, если процент нарушителей закона или неких правил составляет 95 %, значит КПД закона не превышает 5 % - закон работает против людей.
Запретите аборты - их будут делать подпольно. И государство вместо того, чтобы зарабатывать на этом (через налоги), будет расходовать бюджет на борьбу с этим явлением.
Запретите дышать - люди обзовут процесс дыхания «гипервентиляцией легких по медицинским показаниям», все обзаведутся справками от врача и будут не «дышать», а «гипервентилировать». И вы откроете грандиозный теневой рынок взяток.
Запретите людям пить водку, введите сухой закон - и, кроме подпольных ресторанов, вы взрастите спрута мафии. И снова государство вместо того, чтобы пополнять бюджет на алкогольном рынке (через акцизы и налоги), будет расходовать деньги на борьбу с бутлегерской мафией.
Умный человек понимает, что правд столько, сколько мнений. Поэтому, если ему лично не нравится, скажем, коррида, он просто не покупает на нее билет. А не бегает, как дурак, по улицам с плакатами против корриды.
Есть три демагогических способа попытаться запретить всем то, что не нравится некоторой части.
1) Объективизация запрета с помощью объявления запрещаемого явления аморальным либо наносящим вред детям.
На этот крючок еще Пушкина пытались поймать. Его перманентно корили за срамные матерные стихи: мол, а вы сами, Александр Сергеевич, хотели бы, чтобы эти произведения прочла ваша 15-летняя племянница?.. На это умный Пушкин отвечал примерно следующее:
— Существование на свете 15-летних племянниц никак не может послужить основанием для запрета срамных стихов. Потому что эти стихи предназначены не для 15-летних племянниц. А для взрослых людей.
2) Фантазирование. Приведение в качестве аргумента на ходу придуманных ситуаций, при которых явление могло бы нанести кому-то хоть какой-то вред.
3) Уговаривание. То есть попытка убедить оппонента, что никакая свобода ему на самом деле не нужна, он может без нее обойтись, потерпеть «ради всеобщего блага». «Возможно, вы лично и доросли до такой свободы, но народ еще не дорос. Вы же знаете наших людей…»
Давайте представим себе, что вы чего-то остро не любите и потому хотите это запретить не только себе, но и прочим людям, которые с вами не согласны. Как навязать им свою волю? Например, вы не любите бананы или, скажем, аморальность… Впрочем, почему «или»? Никаких «или»! То, что вы не любите, как раз и должно быть объявлено аморальным!.. Это один из приемов, он называется «объективизация запрета».
В самом деле, вкусовая позиция весьма уязвима - если вы не любите бананы, на одном только этом основании сложно добиться повсеместного запрета бананов. Потому что любой и каждый скажет вам: ну и не люби, я-то здесь при чем? Значит, вкусовую позицию нужно заменить объективной, то есть общей и для вас, и для вашего оппонента. Если вам это удастся, вы втащите оппонента на свое поле и одновременно уведете разговор в сторону.
Допустим, вам нужно запретить людям бегать по улицам. Первое, что напрашивается, так это сказать:
— Да вы что, наших людей не знаете? Им только дай, все будут носиться. Старушек начнут сбивать. Старушки же не могут бегать, как молодые. И реакция у них уже не та.
Действительно, не та…
— А повышенная скорость передвижения неминуемо увеличит вероятность столкновений пешеходов. Ну, представьте себе, идет бабушка из магазина. Вы же знаете, какие у пенсионеров пенсии?
Действительно, знаем…
— И вот она несет купленные яйца, например, или молоко в бидоне. А такой вот бегун ее сбивает. Ей даже новые яйца будет не на что купить! И это в лучшем случае, потому что в худшем она может получить перелом шейки бедра, а в таком возрасте — это смерть. Пожалейте людей! Неужели наши старики не заслужили…
Действительно, наши старики заслужили…
…Наконец, четвертый способ «аргументации» - разговор из серии «а почему бы вам не потерпеть?» Это самый слабый из способов, но тем не менее успешно работает. Его секрет в том, что он заставляет оправдываться не того, кто настаивает на ущемлении гражданских свобод, а того, кто протестует против запрета.
Очень просто. Например, вам нужно оправдать запрет на появление в публичных местах в одежде красного цвета, потому что вы ненавидите красный цвет и хотите встречать его как можно реже. Вам резонно возражают: то, во что одеваетесь не вы - не вашего ума дело. Вы уже использовали иные способы объективизации, например, аргумент о здоровье нации (у некоторых людей может быть идиосинкразия на этот цвет) и о социальном благополучии (красный цвет - это, как известно, цвет агрессии, а зачем провоцировать в обществе агрессию). Теперь вам нужно добить противника. Это как раз и можно сделать третьим способом - уговариванием.
— А вам так уж обязательно носить красное? Вы не можете поступиться своей прихотью ради здоровья людей, ради спокойствия на улицах? Что, разве нельзя выразить себя иначе? Неужели вы помрете, если не наденете красное? Вам обязательно дразнить общество? Бросать ему вызов?
И ведь действительно не помрете… Вас душат, но вам нечего сказать, чтобы не прослыть жутким эгоистом.
…Тот же аргумент в развернутом виде применительно к запрету взрослым людям бегать по улицам:
— Даже если в результате разрешения этого баловства погибнет хоть одна старая женщина из миллионов в течение ста лет, бег на улицах нужно запретить законодательно! Потому что чем измерить слезы родственников этой женщины? А если бы это была ваша мать?.. Да и зачем вам бегать по улицам, в самом деле? Мало ли, что вы этого хотите! Прихоть — не оправдание! Вам прихоть, а ей — смерть! Вы что, не можете просто пройтись по улице?.. Ах, вам может понадобиться пробежаться к отходящему автобусу! А зачем? Подождите следующий, автобус не последний. Куда спешить-то? Опаздываете? Ну так выходите из дому чуть раньше! Почему из-за вашей недисциплинированности и желания поспать подольше должны страдать люди? Если станете дисциплинированнее, вам же самому лучше будет!..
Вас имеют по полной, а вам вроде и ответить нечего. Кроме разве того, что эти подонки своей демагогией ущемляют вашу свободу.
Вы имеете право дышать, жить, зарабатывать, бегать по улицам, носить красное, белое и обтягивающее. Просто по праву рождения. Потому, что ваш интерес — ничуть не хуже интереса другого человека. И наплевать вам на чью-то аллергию к свободе!.."
Александр Никонов «Свобода от равенства и братства»,
[[Как восстановить grub UEFI в linux|http://noisee.ru/how2-reinstall-grub-uefi-in-linux/]]
{{{
// sda5 - корень моей файловой системы
sudo mount /dev/sda5 /mnt
// sda1 - раздел с efi
sudo mount /dev/sda1 /mnt/boot/efi
// примонтируем необходимые папки
for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt$i; done
// makes the network available after chrooting
sudo cp /etc/resolv.conf /mnt/etc/
// убедитесь, что модуль ядра загружен
modprobe efivars
// перейдём в среду
sudo chroot /mnt
// переустановим grub
apt-get install --reinstall grub-efi-amd64
// для 32х битных систем
apt-get install --reinstall grub-efi
//или так
grub-install
// обновим grub
update-grub
// отмонтируем все необходимые виртуальные устройства и папки
for i in /sys /proc /dev/pts /dev; do sudo umount /mnt$i; done
// обязательно отмонтируем раздел с EFI
sudo umount /mnt/boot/efi
// отмонтируем корень файловой системы
sudo umount /mnt
// перезагрузим систему
sudo reboot
}}}
«С понедельника начну новую жизнь, буду ходить в зал, заниматься будо, делать самомассаж, качать пресс…» — каждый из нас периодически ставит себе какие-то цели и не достигает их, переносит на следующий месяц, на несколько месяцев, на год. Не потому ли это происходит, что мы сразу хотим многого и планы наваливаются на нас тяжелым грузом, не давая в итоге сделать даже самую малость. Иногда мы рано начинаем выполнять задуманное, но прозанимавшись, к примеру, 3 раза в неделю в додзе по несколько часов, бросаем занятия на долгое время. Почему так происходит? Потому что нагрузка большая, потому что надоедает, а привычка еще не выработана.
!!!!! Методика Кайдзэн или принцип одной минуты
Существует японская методика «кайдзэн», в которую заложен принцип «одной минуты». Принцип этой методики состоит в том, что человек занимается определенным делом ровно одну минуту, но изо дня в день и в одно и то же время. Одна минута времени — это совсем мало, а значит легко выполнимо для любого человека. Лень не встанет на вашем пути. Те же самые действия, которые вы не хотели выполнять в течение получаса, придумывая отговорки или оправдания, вы с легкостью выполните за минуту.
Попрыгать на скакалке, покачать пресс, сделать гимнастику для глаз, выполнить камаэ, почитать книжку на иностранном языке — когда время ограничено одной минутой, занятия не кажутся вам трудно выполнимыми, а наоборот, приносят радость и удовлетворение. А делая маленькие шаги, вы совершенствуетесь и достигаете больших результатов.
Немаловажно то, что вы побеждаете неуверенность в своих силах, освобождаетесь от чувства вины и беспомощности, ощущаете успех и победу. Вдохновляясь чувством успеха, вы постепенно увеличиваете минутные занятия на пятиминутные и так далее. Потом незаметно подойдете и к получасовым занятиям. Прогресс налицо!
Кайдзен зародился в Японии. Само слово является составным, и включает в себя два других – «кай» (перемена) и «дзен» (мудрость). Считается, что кайдзен – это настоящая философия, которая может быть одинаково успешно применима и в бизнесе, и в личной жизни.
Людям западной культуры японская методика может показаться не эффективной, так как на Западе устоялось мнение, что без больших усилий хороших результатов не добиться. Но масштабные программы, отнимающие много сил, могут сломить человека и остаться безрезультатными. А принцип «кайдзэн» подойдет всем и может быть применим для многих сфер жизни. Японцы, например, используют стратегию постепенного и постоянного улучшения в сфере бизнеса.
Осталось только определиться с вашими потребностями и начать применение методики «кайдзэн» на практике.
!Точите ножи своим любимым
Как правильно и быстро наточить нож, чтобы тот был острым? Освещая тему заточки ножа на страницах оружейно-охотничьих изданий, одни авторы напустили так много туману, что превратили это занятие чуть ли не в священнодействие.
!!Острота лезвия
Если следовать их советам, то чего там только не требуется! Набор точильных брусков, набор оселков, специальные масла, доводочные пасты и так далее. А вдобавок ко всему нас стращают тем, что придется для достижения победы угробить на это ЧАСЫ (!) личного времени. Конечно, если у человека есть масса свободного времени, а он озаботил себя проблемой: на что бы его потратить, то лучшего времяпрепровождения и придумать трудно. Опять же какая-никакая, а тренировка для бицепсов.
Другие авторы не поскупились на советы, следовать которым, безусловно, не стоит ввиду их (не побоюсь этого слова) анекдотичности. Опять же редко кто упускает возможность повесить моток-другой лапши на наши многострадальные уши, когда речь заходит об остроте лезвия. Тут вам и катана, воткнутая в ручей, натыкаясь на которую, листья плывут дальше по течению, разрезанные пополам. А другая катана (в фильме "Телохранитель") разрезает якобы не виртуальный платок из тончайшей ткани, брошенный на нее бестрепетной рукой Кевина Костнера.
Тема заточки оказалась столь актуальной, что даже была отражена в устном народном творчестве. Помните старый добрый анекдот: "Приходит однажды добрый молодец чуть раньше положенного времени к своей подруге, у которой муж уехал в командировку. Стол накрыт, но еще не полностью. Туг подруга ему и говорит, мол, пока я стол накрываю, нечего без дела сидеть. Иди-ка ты, мил друг, на кухню да поточи мне ножи. Никаких проблем! Тот снимает пиджак, закатывает рукава у рубашки, идет на кухню. Быстро точит один нож, второй, третий... Внезапно движения бруска делаются все более медленными, а затем и вовсе останавливаются, поскольку в полове у гостя крутится-вертится интересная МЫСЛЬ: А КТО ЖЕ У МЕНЯ ЛОМА НОЖИ ТОЧИТ?"
А что прикажете делать охотнику в лесу, рыбаку на рыбалке или туристу в походе, у которых нет под рукой домашней заточной мини-мастерской? Ответственно заявляю: если точильный брусок не забыт, то это минутное дело. Надо только соблюдать три правила инженера Посудина. Статья на эту тему была написана мною пять лет тому назад, но, будучи опубликованной лишь в каталоге выставки "Клинок-2001", она осталась практически неизвестной широкому кругу пользователей холодного оружия и так называемых режущих предметов хозяйственно-бытового назначения. Предлагаю ее вашему вниманию.
!!Технология "вострения"
В технологии заточки ножа достаточно много приемов, нюансов и тонкостей. Начну с направления движения по плоскости заточки того инструмента, которым производится заточка (точильного бруска, оселка, алмазного напильника). Это просто поразительно, но мои многолетние наблюдения показывают, что самым распространенным приемом заточки является тот, при котором точило перемещается по плоскости заточки ВДОЛЬ лезвия. Это совершенно неправильно!
Возможно, этот способ и хорош, но пользоваться им для получения действительно острого лезвия можно только в 2-х случаях:
Когда лезвие не точится, а лишь "направляется" (доводится) с помощью специальных брусков, арканзаса или индия. Суть этой правки (доводки) - снятие боковых заусенцев. Эти точила обладают настолько микроскопическим размером зерна, что направление их движения практически не имеет значения.
2. Когда точатся кухонные ножи с помощью круглого специального напильника с продольными режущими кромками. Суть згой "заточки" - срезание упомянутым напильником тонких ленточек металла с обеих плоскостей заточки.
Кстати, аналогичный процесс происходит при работе со специальным кухонным точилом. При этом срезание ленточек металла происходит одновременно с двух плоскостей заточки острыми краями двух твердосплавных эксцентрично расположенных дисков.
А вот с обычными точилами мелкой, средней и уж тем более крупной зернистости такой номер не пройдет! Напомню о конечной цели заточки - получении действительно ОСТРОГО лезвия. Чтобы проще было понять, почему дело обстоит именно так, а не иначе, предложу вашему вниманию простенькую схему точения ножа, рассмотрев один из участков соприкосновения лезвия и точила под увеличением.
Как вы видите, рабочая поверхность точила состоит из большого количества выступов и впадин, образованных зернами абразива. И при движении точила ВДОЛЬ лезвия большая часть выступов пойдет по плоскости заточки. Но при этом какая-то (пусть незначительная) их часть, увы, пойдет по острию (!!!) со всеми вытекающими из этого нехорошими последствиями.
Вообще, строго говоря, существует и достаточно широко применяется еще один способ "вострения", при котором точило движется вдоль лезвия клинка, а именно: когда роль точила выполняет другой нож. Этим приемом умело пользуются мясники-профессионалы и обвальщики туш, у которых, как известно, каждая секунда на счету. Но опять же, строго говоря, в этом случае ни о какой заточке речи не идет. Движениями "лезвие по лезвию" добиваются лишь выправления режущей кромки и ее переориентации в плоскость симметрии клинка, поскольку съема металла здесь не происходит из-за равной твердости клинков.
!!"Три правила инженера Посудина"
Что же касается заточки лезвия ножа, действительно гарантирующей его высокие режущие свойства, то прежде, чем перейти к описанию ее практических приемов, сделаю небольшое отступление в область теории. Согласитесь, голословные заявления и уверения мало чего стоят, и только лишь безупречно аргументированные, а посему доказательные советы и пожелания могут "браться на вооружение" и успешно применяться. Так вот, ту методику заточки, которую я практикую уже много-много лет, мои друзья-охотники шутливо именуют "тремя правилами инженера Посудина". В чем они заключаются?
ПРАВИЛО ПЕРВОЕ. Рабочая поверхность точильного бруска ВСЕГДА должна располагаться по отношению к боковой поверхности грани клинка под углом 10-15 градусов.
ПРАВИЛО ВТОРОЕ: Возвратно-поступательные движения точильного бруска ВСЕГДА должны быть ориентированы ПЕРПЕНДИКУЛЯРНО режущей кромке ножа.
ПРАВИЛО ТРЕТЬЕ: ОДНОВРЕМЕННО с правильным наклоном (правило №1) и правильно ориентированными возвратно-поступательными движениями (правило №2) точильный брусок должен совершать медленное поступательное движение в направлении от крестовины ножа к его острию и обратно. Затем тот же самый проход от крестовины до острия и обратно повторяется на грани с другой стороны клинка.
Этот цикл повторяется вплоть до окончания заточки лезвия. Вот и все!
Острота лезвия периодически проверяется в процессе заточки. Если режущая кромка начинает цеплять кожу на подушечках пальцев, значит, желаемый результат достигнут. Даже можете попробовать им что-нибудь побрить. Не верите? Проверьте!
В заключение приведу несколько примечаний, поясняющих, КАК и ПОЧЕМУ вы достигаете столь впечатляющего результата, неукоснительно следуя трем вышеупомянутым правилам.
1. Выдерживая заданный угол (10-15 градусов) наклона точильного бруска по отношению к граням клинка, вы в итоге получаете общий угол заточки где-то в пределах 35-45 градусов, то есть как раз то, что требуется для охотничьих, рыболовных и туристических ножей.
2. Затачивая лезвие поперечными по отношению к нему движениями, вы в итоге получаете на нем как бы микропилу, "шаг зубьев" которой будет соразмерен габаритам зерен абразива, примененного при изготовлении вашего точильного бруска. Прибегая к модной и популярной ныне терминологии, вы получаете на лезвии своего рода микросерейторную заточку, которую невозможно увидеть невооруженным глазом.
3. Проходя по лезвию дважды и поочередно с каждой стороны, вы практически ликвидируете заусенец, дробя его на мельчайшие элементы и одновременно ориентируя эти элементы в направлении плоскости симметрии клинка.
4. Если лезвие сильно запущено или вами приобретен новый дурно заточенный ножик, то в начале процесса заточки усилие прижатия точильного бруска к клинку должно быть достаточно сильным. И лишь потом, по мере того, как требуемый угол заточки будет "вытанцовываться", это усилие следует уменьшать. К моменту завершения заточки оно должно быть минимальным. Это следует делать еще и потому, что чем слабее вы будете прижимать точильный брусок к клинку, тем на меньшую глубину будут врезаться в металл зерна абразива. Следовательно, есть все шансы получить на лезвии более мелкозубую "пилу". Такое лезвие будет, безусловно, более острым, нежели крупнозубое.
5. Еще раз подчеркну такой ВАЖНЫЙ МОМЕНТ, заключающийся в том, что выдерживание нужного угла наклона точила и оба его движения должны выполняться ОДНОВРЕМЕННО! Только в этом случае ваш успех гарантирован!
!!Доводка лезвия
Доводка лезвия позволяет сделать уже остро наточенный нож еще более острым. Операция эта выполняется с помощью ремня (кожаного, плетеного из х/б нити), на рабочую поверхность которого нанесена доводочная или полировальная паста. Замечу, что особо выдающихся результатов позволяет добиться алмазная паста. При доводке лезвия ножа тоже существуют "три правила инженера Посудина", которых следует придерживаться.
ПРАВИЛО ПЕРВОЕ: боковая наклонная плоскость клинка (грань) должна накладываться на доводочный ремень равномерно ВСЕЙ плоскостью, то есть БЕЗ НАКЛОНА, а ремень следует натягивать как можно сильнее.
ПРАВИЛО ВТОРОЕ: клинок по отношению к ремню должен располагаться таким образом, чтобы контактирующая с рабочей поверхностью ремня часть режущей кромки была ПЕРПЕНДИКУЛЯРНА направлению движений клинка (от себя и к себе) по ремню.
ПРАВИЛО ТРЕТЬЕ: при поочередных движениях клинка по доводочному ремню (от себя и к себе) режущая кромка лезвия всегда должна смотреть в сторону. ПРОТИВОПОЛОЖНУЮ направлению движения клинка.
Несколько примечаний, поясняющих то, чего вы добиваетесь, руководствуясь упомянутыми тремя правилами доводки.
С силой натягивая доводочный ремень и прижимая к нему всю плоскость боковой грани, вы АВТОМАТИЧЕСКИ добиваетесь того, что рабочая поверхность ремня с равномерным усилием прилегания будет перемещаться по плоскости заточки (а теперь по плоскости доводки) лезвия. При этом так же АВТОМАТИЧЕСКИ будет выдерживаться ТОТ ЖЕ САМЫЙ УГОЛ (10-15 градусов) плоскости доводки по отношению к боковой грани клинка. А произойдет это потому, что именно почти на такой угол все равно прогнется ремень, сколь бы сильно вы его не натягивали. Пожалуй, в этом и заключается самая главная тонкость при доводке!
А теперь представим, что вы накладываете клинок на ремень не плоскостью грани, а плоскостью доводки и, вдобавок, натягиваете ремень с незначительным усилием, из-за чего он сильно прогнется. Ежу понятно, что при этом будет иметь место уже не доводка, а УМЫШЛЕННОЕ ПРИТУПЛЕНИЕ лезвия.
2. Второе и третье правила доводки, я думаю, в комментариях не нуждаются, так как аналогия со всем тем, что происходит при заточке, полная. А вот поскольку габариты зерен абразивной пасты, нанесенной на ремень, гораздо меньше габаритов зерен абразива точильного бруска, то в конечном итоге каждый "зуб" на режущей кромке после доводки приобретет уже следующий вид.
Господа любознательные! Вам этот рисунок ничего не напоминает? Конечно, ответите вы. Именно такую форму имеют ЗУБЫ БЕЛОЙ АКУЛЫ (КАРХОРОДОНА) - самого страшного и кровожадного из морских созданий! А уж каковы в работе эти зубки, я думаю, можно не описывать. Все смотрели "Челюсти".
Ослаблять натяжение ремня и располагать режущую кромку клинка под углом к направлению его движения, отличном от 90 градусов, не следует еще и потому, что, стоит вам лишь на мгновенье пренебречь этим правилом (да еще, не дай бог, при гибком клинке), как вы мгновенно перережете доводочный ремень. И это в лучшем случае. А в худшем нож полоснет по руке, натягивающей ремень. Так что не рискуйте.
3. Усилие прижатия клинка к ремню должно в процессе доводки уменьшаться и постепенно "сходить на нет" к ее концу.
Вот и все! Пожалуйте бриться! Доведенное таким образом лезвие ножа способно без всяких усилий снимать двухмиллиметровую "соломку" с обычного листа писчей бумаги, удерживаемого на весу. Не верите? Проверьте!
Друзья мои охотники, рыбаки, туристы и просто любители холодного оружия! Всем вам хорошо известно, что в любом деле есть такой важнейший момент, который именуется правила техники безопасности. Должен вам сказать, что они существуют не только для владельца, но и для ножа.
!!Правила техники безопасности (для владельца)
Эти правила во все времена писались, пишутся и будут писаться КРОВЬЮ тех, кто ими пренебрегал! А уж в нашем случае тем более. И если пренебречь несколькими простыми, но очень важными правилами, СТРАШНАЯ РЕЗАНАЯ РАНА НА РУКЕ ВАМ ГАРАНТИРОВАНА! Поэтому...
1. При заточке и доводке ножа будьте предельно внимательны и сосредоточены.
2. Исключите полностью из своих движений элементы нерасчетливости, торопливости и нетерпения.
3. Не берите в руки нож и брусок, будучи в нетрезвом виде.
4. Не пользуйтесь старыми, сильно сработавшимися в средней части точильными брусками или брусками, прочность которых вызывает у вас сомнение.
5. Не отвлекайтесь: не отводите своего внимательного взгляда от зоны соприкосновения точила и клинка.
6. Не беритесь за заточку озябшими или замерзшими руками. В этих случаях подвижность суставов пальцев, увы, ограничена и сами пальцы, увы, уже не такие гибкие. Это резко повышает вероятность возможного пореза руки.
7. Не держите затачиваемый нож на весу! Такие "фокусы" (да и то с опаской) могут себе позволить только настоящие профи. "Чайникам" следует класть нож на какую-нибудь плоскость (например, на угол стола) или упирать во что-то острием (например, в ствол дерева) и придерживать левой рукой, обеспечивая тем самым его надежную фиксацию. А уж "лихая хватка" ножа и точильного бруска при первых робких опытах по заточке вам совершенно противопоказана. Под "лихой хваткой" подразумевается та, при которой нож удерживается за рукоятку левой рукой в вертикальном положении острием вверх, а точильный брусок зажимается за торны подушечками большого и среднего пальцев правой руки.
8. Не применяйте при заточке ножа суперусилий, поскольку от этого даже новый брусок может сломаться.
9. Ограничивайте амплитуду движений точильного бруска таким образом, чтобы он не мог "соскочить" с плоскости заточки клинка, и рука, удерживающая брусок. НЕ КОСНУЛАСЬ лезвия.
ПРИМЕЧАНИЕ: Когда деду моему, Матвею Егоровичу Королеву, исполнилось шестьдесят лет, то у новоиспеченного пенсионера в буйной шевелюре не было НИ ОДНОГО СЕДОГО ВОЛОСА, хотя в жизни ему довелось пережить всякого. Из девяти детей один умер в детстве, двоих забрала война. Остальных он вырастил и "поставил на ноги". Так вот, седины не было, а сердечко после шестидесяти на счетчике, увы, стало пошаливать. Дед к врачам практически почти не ходил, а тут ему пришлось изменить своему правилу. Врач в сельской больнице осмотрел его и вынес деду следующий приговор: - Матвей Егорович! Вам уже седьмой десяток пошел. Все у вас нормально. Вот только выпивать вам надо ПОМЕНЬШЕ (врач выдержал паузу). НО ПОЧАЩЕ!" Деда такие слова привели в совершенный восторг, и далее в течение почти четверти века всякий раз, когда в его руке оказывалась стопка (по поводу и без повода), он непременно произносил вслух совет того врача.
Так вот дедов принцип "поменьше, но почаще" относительно правил 8 и 9, более чем уместен.
И, наконец, самое главное общее правило: ОСТРЫЙ НОЖ - ШТУКА ОЧЕНЬ ОПАСНАЯ! Доказательством этого может служить такой исторический факт, что классическая складная бритва так и называется: ОПАСНАЯ БРИТВА!
!!Правила техники безопасности (для ножа)
Эксплуатируя свой любимый ножик, следует заботиться не только о своих пальцах, но и о нем, любимом, тоже. К вещам, которые вам служат верой и правдой долгие годы, привыкаешь. Именно поэтому всякого рода досадные оказии, случающиеся иногда с любимыми вещами, служат поводом для расстройства. Чтобы такого не случалось с вашим ножом, запомните несколько правил:
1. Не следует мешать ножом чай (кофе) в стакане или чашке. Вид напитка, его температура и вид сосуда никакого значения не имеют. Важно лишь то, что стекло и эмаль, покрывающая посуду, имеют твердость, превосходящую твердость клинка вашего любимца. Поэтому от ударов по внутренним частям стенок режущая кромка тупится просто великолепно.
2. Не следует резать ножом закуску непосредственно на тарелке. Почему? Смотри п.1. Для этого есть специальная деревянная доска. Если вдруг приспичило заняться этим где-то в угодьях, то закусь можно (и нужно) резать на весу.
3. Не используйте свой нож в качестве средства для открывания консервных банок. Чтобы успешно избегать этого соблазна, следует приобрести многофункциональный инструмент-раскладушку. Этот инструмент служит десятилетиями и в сложных ситуациях всегда играет роль палочки-выручалочки. Поэтому, прежде чем делать шаг из дома, надо всегда повесить чехол с раскладушкой на пояс.
4. Не участвуйте в соревнованиях на самый твердый нож. Что греха таить, в состоянии легкого подпития (да и тяжелого тоже) такие споры-соревнования на охоте возникают достаточно часто. Самые тупорылые (я хотел сказать, необразованные) спорщики ударяют ножи друг об друга РЕЖУЩИМИ КРОМКАМИ. Бедняги не знают, что в зоне контакта при этом возникают усилия сжатия, достигающие ДЕСЯТКОВ ТЫСЯЧ (это не оговорка) ТОНН!!! А потом тупо и уныло смотрят на дело своих рук и мозгов. Но, если уж совершенно невтерпеж и устоять перед соблазном показа превосходства своего ножа невозможно, то поступите следующим образом. Возьмите свой нож за лезвие (как карандаш) острием вниз и попробуйте нацарапать на боковой поверхности лезвия уложенного на стол ножа-соперника либо имя его владельца, либо другое короткое слово из трех букв, не более. Если вам это удастся, значит, ваш клинок крепче. Если же острие вашего ножа будет скользить по лезвию другого, не оставляя на нем никаких следов, значит, вы проиграли. Обычно для чистоты эксперимента ножи меняют местами, но, как вы понимаете, на результат поединка эта рокировка никак не влияет.
5. Не используйте свой нож в качестве оружия для метания. У всех ножей с всадным череном есть одно слабое место (под передней частью крестовины). Именно там широкая часть пяты клинка переходит в узкий хвостовик. Согласно законам сопромата там ВСЕГДА имеет место быть концентрация напряжений. При статических нагрузках это совершенно не страшно. А вот при кратковременных динамических воздействиях - другое дело. И вероятность того, что после вашего броска ножом в дерево вы найдете под ним ДВЕ ПОЛОВИНКИ того, что секундой раньше представляло единое целое, чрезвычайно высока! Поэтому берегите свой нож, и он долгие годы будет служить вам верой и правдой!
!!Советы старого точильщика
Чем точить ножи? Специально для небольшой категории неуверенных в себе или просто ленивых владельцев ножей придуманы и продаются всевозможные приспособления и оснастка для заточки ножей. Вот наиболее типичные и распространенные из них:
1. "Точилки" со смещенными твердосплавными дисками, уже упоминавшиеся мною.
2. Приспособления, в которых клинок ножа фиксируется специальной струбциной, а точильный камень зажимается в специальную оправку. Он движется строго под определенным углом по отношению к грани клинка с помощью длинной направляющей, проходящей через определенное отверстие в вертикальной стойке. Такие приспособления обычно комплектуются набором точильных камней разной зернистости.
3. Еще один вид приспособлений для заточки (это последний писк) представляет собой массивное основание, в которое вставлены два равнонаклоненных круглых в сечении керамических бруска, образующих в итоге что-то вроде буквы "V". Точение производится движениями (с потягом) сверху вниз поочередно по каждой из внутренних частей точильных брусков, вставленных в основание.
Вне всяких сомнений, эти приспособления имеют свои преимущества. Но все они обладают одним общим существенным недостатком: ни в лес, ни на озеро, ни в саванну эти приспособления НЕ БЕРУТСЯ. А точильный брусок - запросто! Он просто обязан получить "постоянную прописку" в определенном кармане вашего любимого рюкзака или ваших любимых штанов (особенно подходит для этого узкий длинный карман на правом бедре).
!!Несколько слов о точильных брусках
На первое место, безусловно, следует поставить алмазные бруски. Такое точило представляет собой плоский узкий параллелепипед из алюминиевого сплава, на две противоположные стороны которого нанесен слой, содержащий зерна искусственного алмаза. На одной стороне зерна крупные, на другой - мелкие. В работе такой брусок просто бесподобен, да и стоит он не очень дорого. Таким точилом можно быстро наточить клинок ЛЮБОЙ твердости, поскольку твердость алмаза по шкале Мооса составляет 10 единиц! Это, как известно, самый твердый материал на Земле.
На второе место с полным на это правом претендуют точильные керамические искусственные бруски, производимые знаменитой фирмой "Спайдер ко". Они так же хороши, как и производимые этой фирмой складные ножи. Главным достоинством точил "Спайдер ко" является их легкость, тонкость прочность и отличные рабочие качества. Недостаток только один - цена. Чуть не забыл упомянуть еще одно достоинство этих точил: великолепную износостойкость.
Третье место следует отдать точилам, изготовленным из корунда. Если где-нибудь на периферии вдруг возникнут проблемы с покупкой алмазных или заграничных керамических точил, то не надо отчаиваться! Корунд, как и алмаз, очень твердый материал с твердостью по шкале уже упоминавшегося выше Мооса, составляющей 9 единиц. Его ювелирные разновидности (рубин, сапфир) давно и успешно применяются в производстве украшений. Что же касается точил из корунда, то их рабочие качества выше всяческих похвал при совершенно незначительной цене. Точат они не хуже алмазных. От других брусков корундовые отличаются характерным оранжево-кирпичным цветом.
Все другие точила не могут сравниться с упомянутыми выше, но также могут использоваться для заточки. Только вот потеть придется гораздо дольше.
На чем доводить ножи? В магазинах можно купить специальное приспособление, предназначенное для доводки опасных бритв, представляющее собой раму, на которую натянуто кожаное полотно. На кожу наносится слой доводочной пасты и вперед! Правда, в угодья это приспособление с собой тоже не возьмешь. Каков же выход? Охотники, гораздые на выдумки, придумали следующие приспособления. В качестве доводочной поверхности они предлагают использовать следующие предметы охотничьей экипировки:
1. Ремень-погон для оружия (особенно хорошо подходит для этого дела брезентовый ремень).
2. Брючный ремень.
3. Брезентовую полосу, нашиваемую на левую штанину в районе передней части бедра. Замечу, что это довольно опасная штука и этим "играются" лишь истинные профессионалы. То есть эта придумка не рекомендуется для широкого использования.
Слой доводочной пасты (например, пасты ГОИ) наносится на поверхность этих предметов. У погона для этого используется наружная поверхность. Пасту наносят не сплошь, а пятнами, отчего ремень приобретает камуфляжный вид. У брючного ремня рабочей является поверхность, прилегающая к брюкам. Как работают с этой "оснасткой". Все очень просто. Первые два ремня следует перекинуть через прочный горизонтальный сук и натягивать, удерживая левой рукой концы ремня. Когда же для доводки любимого ножа приспособлены не менее любимые штаны, то для принятия правильной боевой позы следует сесть на пень, выдвинуть левое колено вперед, а пятку левой ноги максимально придвинуть к пню. Левой рукой следует ухватить штанину в районе верхней части бедра и натянуть ее. В этом случае полоса брезента будет плотно прилегать к бедру и доводка станет относительно безопасной.
!!Заточка эксклюзивных клинков
Предположим, что клинок вашего ножа имеет эксклюзивное исполнение (сделан из мозаичного Дамаска, имеет тонкую гравировку или, наконец, просто замечательно отполирован). Предположим, также, что вы пока еще, увы, совершенный "чайник" в вопросах заточки, а потому не в состоянии четко и безошибочно контролировать абсолютно все свои движения. Тогда вам есть прямой смысл подстраховаться. Оклейте лезвие ножа полосками поливинилхлоридной изоляционной ленты (в два слоя), оставив открытой лишь полоску вдоль режущей кромки шириной 5 мм. Таким образом, вы предохраните своего красавчика от нечаянного повреждения точилом. Впоследствии, когда вы овладеете навыками заточки, эта операция станет ненужной.
!!С чего начать?
Решив овладеть наукой (ремеслом, мастерством) заточки не проводите первые опыты и эксперименты со своим любимым ножом. Дело в том, что на кухне, где хозяйничает ваша жена (подруга), всегда имеется достаточное количество ножей, которые ждут не дождутся, чтобы их кто-нибудь поточил. С кухонных ножей и начните. Экспериментируйте и оттачивайте свое мастерство. Кстати, материал лезвий кухонных ножей не столь твердый, как материал ножей охотничьих. Поэтому точить их, ОДНОВРЕМЕННО выполняя три правила, одно сплошное удовольствие. И вскоре, уверяю вас, станете мастером. Удачи вам!
P.S. Друзья мои охотники, рыболовы, туристы и просто любители поточить ножи (на чужой кухне)! Вам когда-нибудь доводилось наблюдать за работой профессионального точильщика? Сейчас такое зрелище, безусловно, большая редкость. Обычно это был мужичок в брезентовом фартуке, стоящий за элементарным и примитивным станком, наждачный круг на котором приводился в движение с помощью мускульной силы его ноги. В старые добрые времена такие умельцы ходили по тогда еще оживленным деревням или стояли у входов на большие городские рынки и оглашали окрестности зычными криками: "НОЖИ, НОЖНИЦЫ, ТОПОРЫ ТОЧИМ!".
Глядя на манеру работы такого мастера, всегда можно было увидеть, что при заточке ножа или топора он постоянно придерживается трех правил, а именно:
1. Грань клинка в его руках всегда наклонена на 10-15 градусов по отношению к линии, являющейся касательной к вращающейся (рабочей) цилиндрической поверхности наждака.
2. Линия режущей кромки в зоне заточки всегда перпендикулярна направлению перемещения зерен абразива наждака.
3. Клинок медленно перемещается по наждаку от начала режущей кромки лезвия до ее конца и обратно. Затем все повторяется с другой стороны лезвия. Вам это ничего не напоминает?
А. Посудин
"Российская Охотничья газета № 39,40,41 - 2005 г."
Прежде, чем приступить к разъяснениям, касающимся непосредственно заточки ножей, необходимо знать следующее:
! Какие ножи нельзя точить
Например, в ножах TwinStar Plus фирмы Zwilling J.A. Henckels используется покрытие MagnaDur ®, которое в 1000 раз повышает износостойкость режущей кромки. Естественно, после заточки никакого твердого слоя не остается.
! Керамические лезвия
никогда не тупятся, поэтому никогда не точатся. Единствнным недостатком керамического лезвия является его повышенная хрупкость, хотя некоторые вещества (например, оксид циркония) имеют некоторую гибкость. По твердости керамические лезвия уступают только корунду и алмазу.
! Зубчатая режущая кромка
приобрела популярность по двум причинам: внедрение твердых износостойких сталей (типа 440C) и появление автоматов для сложной заточки с лазерным контролем. Однако именно это затрудняет переточку ножа в домашних условиях. Хороший ‘серрейтор’ сделан из твердой стали, которую трудно точить, а переточка с двух сторон уничтожает зубчатую кромку.
! И еще нужно знать следующее:
#Не существует «вечных самозатачивающихся» ножей. Это просто рекламная фишка. Если нож постоянно использовать, то он рано или поздно он затупится, и надо будет его наточить, чтобы и далее работать им удобно и безопасно.
#Нет никакой лазерной заточки. Ножи точатся на фрезерном станке, и лазер там используется лишь для контроля угла заточки.
#Секрет «дамасской» стали давно утерян. Современные методики изготовления могут сделать нож очень прочным и твёрдым, но есть производители, которые наносят специфический рисунок «под дамасск» на дешёвые лезвия.
#При заточке нож должен быть чистым и сухим.
А теперь — наблюдение из жизни: подавляющее большинство пользователей свои ножи точить не умеют и чужие — тоже, и поэтому все довольствуются в лучшем случае полуострыми, кое-как заточенными ножами. Давайте убедимся вместе! Попробуйте разрезать лист обычной писчей бумаги любым ножом, держа его другой рукой за один угол. Не вышло? Все ясно, значит этот нож просто не очень острый, мягко говоря.
Так почему нож тупится при резке? В этом принимают участие два параллельных процесса. Первый — это отрывание микроскопических частичек стали от лезвия под действием силы трения. Проще говоря, лезвие стирается.
Сталь клинка, конечно, намного тверже, чем большинство разрезаемых ножом материалов, поэтому она стирается намного медленней, в конце концов ведь дерево режут сталью, а не сталь деревом. Но все-таки понемногу стирается и сталь. Особенно там, где на нее приходится наибольшая удельная нагрузка — на самом краю лезвия, на его передней, режущей, кромке. Подчеркиваю, этот процесс происходит на микроуровне, поэтому и результаты его — микроскопические.
Невооруженным глазом их не видно, и о затуплении ножа можно только догадываться по плавно возрастающему усилию, необходимому для резки. Но если бы только так наш нож тупился — очень редко нам пришлось бы его точить. Беда в том, что при резке практически невозможно удерживать лезвие все время так, чтобы оно «атаковало» разрезаемый материал строго в направлении своей плоскости симметрии.
Первое, с чем надо примириться, это расход нескольких десятков долларов на порядочные инструменты для заточки. Особенно если вы имеете несколько ножей или, тем более, целую их коллекцию. Истратить сотни долларов на сами ножи и пожалеть десятки на хороший инструмент для заточки — это уж очень напоминает народную мудрость о пресловутом «экономном», который, как известно, дважды платит…
Второе — примириться с тем, что никто не наточит нож так, как сделает это сам его хозяин при соответствующем уровне подготовки, и пользуясь соответствующими инструментами, конечно. А вот то, что не надо точить нож на высокооборотном шлифовальном кругу — это уже не дело вкуса! Каждая сталь закаляется в определенных температурных условиях. Неконтролируемый нагрев во время заточки на шлифовальном круге, скорее всего, испортит клинок необратимо.
Мочить нож во время заточки — ничего не меняет, тоненькая ленточка стали на самом-самом острие перегревается моментально! Да, производители точат ножи механически, на шлифовальных ремнях. Но, во-первых, они делают это с умом, на заточке сидят обычно самые квалифицированные рабочие. Во-вторых, подают эти ремни с малой скоростью. А главное, стоит обратить внимание, как недолго держится фабричная заточка, хотя в самом начале нож действительно режет как бритва.
! «Правка» ножа
Если недавно купленный или недавно заточенный нож потерял былую остроту, то режущую кромку можно подправить с помощью мусата или на тонком точильном камне. Это можно сделать несколько раз, затем всё равно придётся его капитально точить.
Мусат — это стержень, сделанный из очень твердой стали, или из обычной стали но с напылением алмазного покрытия или вообще из керамики. Стальной мусат напоминает круглый напильник с бороздками осевого направления. Во время правки надо вести по мусату режущей кромкой ножа от себя, плавно сдвигая нож от рукоятки к острию.
Заточка ножа Не рекомендуется пользоваться специальными точилками, поскольку их угол заточки может не совпадать с изначальным углом клинка, а движение происходит вдоль лезвия, создавая продольные бороздки.
Также нельзя точить нож на высокооборотном шлифовальном кругу.
И, наконец, на наждачной бумаге стоит точить только в крайнем случае.
Заточить нож лучше всего на точильном камне (бруске).
Точильные камни и бруски имеют разную степень зернистости:
грубые используются для восстановления правильного угла заточки и формы режущей кромки; средние используются для заточки как таковой; тонкие используются для чистовой правки ножа. Чем больше размер бруска, тем легче поддерживать правильный угол заточки. Наиболее удобно, когда длина бруска составляет полторы-две длины клинка. Ширина бруска играет второстепенную роль. На широком бруске удобней работать и меньше вероятность «упустить» клинок за пределы бруска, что может повредить его боковую поверхность или лезвие. Двухдюймовой (5 см) ширины брусок был бы в самый раз. Алмазный может быть немножко короче, потому что шлифует быстрей и эффективней, но чтобы освоить правильно основное движение, лучше всего учиться да длинном бруске. Сам брусок лучше положить на специальную подкладку, чтобы он не скользил и не царапал стол.
Во время заточки нож ведут по бруску так, чтобы лезвие всегда двигалось по бруску в направлении перпендикулярном режущей кромке в месте соприкосновения (ни в коем случае не вдоль) режущей кромкой вперед, одновременно сдвигая кромку от рукоятки к острию.
Очень важно поддерживать постоянный угол заточки (оптимально — по 20 градусов в каждую сторону от оси клинка). Контроль постоянного угла можно производить с помощью фломастера: закрасьте им режущую кромку и после нескольких циклов точки оцените состояние краски — если она снимается не равномерно, то это приведет к «заваливанию» режущей кромки. Если заточка ножа идет равномерно, необходимо продолжать, но при этом не забывать точить попеременно обе стороны.
Итак, устанавливаем лезвие под углом 20 градусов к поверхности бруска и ведем по нему лезвием вперед, постепенно перемещая точку соприкосновения в направлении острия. Так, чтобы когда дойдем до конца бруска, как раз одновременно дойти до острия.
В конце прохода острие должно остаться на рабочей поверхности бруска, ни в коем случае нельзя допустить, чтобы клинок с него сорвался. Срыв поцарапает боковую поверхность клинка.
Чтобы удержать постоянный угол заточки, придется немного приподнимать рукоять над столом, и даже в месте, где лезвие имеет дугообразную форму, его «брюшка». Иначе на «брюшке» угол заточки окажется более острый.
При достижении острия, клинок надо вернуть на исходную позицию и повторять это основное движение много-много раз, сохраняя угол заточки постоянным. Важно всегда вести клинок по бруску лезвием вперед.
Не надо стараться ускорить работу, сильнее нажимая на брусок. При нажатии сильнее теряется точность, с которой надо удерживать угол заточки и это, скорее всего, сведет все усилия на нет.
Шлифуем до тех пор, пока на его обратной стороне не появится явно чувствующийся заусенец по всей длине лезвия.
Не надо пробовать ускорить работу, шлифуя только те участки, где заусенец еще не появился. Таким образом выпрофилированная режущая кромка не будет совпадать с плоскостью симметрии клинка, будет хуже резать, а затупится быстрее.
Равномерно, плавными движениями шлифовать лезвие, пока на всей его длине не появится непрерывный заусенец.
После заточки на среднем камне режущую кромку хорошо бы поправить на тонком камне — это делает лезвие более ровным и заточку более долговечной.
Вот в принципе и всё. И напоследок — важный совет:
Никогда нельзя проверять качество заточки руками. Даже при неглубоком порезе микроскопические металлические опилки, попавшие в порез, не дадут ране быстро зажить. Лучше взять лист бумаги вертикально одной рукой и попробовать его разрезать на весу. Остро заточенный нож легко справится с этой задачей, какого бы размера он ни был.
[[Как точить ножи|http://manual.ru/articles/Как_точить_ножи]]
[[Видео|http://www.youtube.com/watch?v=J0K7B2_Bmnw]]
[[Три правила инженера Посудина|http://www.kaliningrad-fishing.ru/rog/pr-05-1/rpres-0237.html]]
[[Правельное видео|http://www.youtube.com/watch?v=AUD_i8JBH9I]]
[[ Точилка для ножей даром или Лански - в Бобруйск!|http://forum.guns.ru/forum/97/211055.html]]
[[Самодельный sharpmaker за пол-часа|http://forum.zadi.ru/viewtopic.php?f=46&t=169]]
"Хуй" - карточная игра.
Возможно где-то она известна под другим названием. Играют в "Хуя" колодой состоящий из 24 карт ( от 9ки до туза ) В игре может принимать участие то количество игроков, на которое можно разделить 24, чтобы карт у всех было поровну ( но если не подерётесь это правило можно упустить ) Все карты раздаются на руки игрокам. Первой скидывается 9ка бубен, соответственно ходит тот у кого она оказалась. Следующий ( сидящий, стоящий или лежащий за ним по часовой стрелке ) должен скинуть либо такую же по значению карту т.е 9ку либо выше 10;В;Д;К;Т, ( масти карт при этом не учитываются ), за ним следующий и т.д. Пока у игрока, чья очередь ходить, не окажется нужной по значению карты или по каким либо причинам он не захочет её скидывать - в этом случае он должен сверху колоды ( образовавшейся из скинутых карт ) взять три карты и пропустить ход, при этом 9ка бубен всегда остаётся на столе ( или на чём там вы собираетесь играть ), и если сверху неё лежат одна или две карты - игрок берёт только их. Если у игрока на руках имеется четыре одинаковые карты, например четыре вольта, он может скидывать их за один ход, также на 9 бубен можно кидать три оставшееся 9ки. Цель игры - первее других избавиться от карт, у кого они остаются тому пишется буква из названия игры. Кто соберет все три буквы тот проиграл.
КНИГИ
#«Маленький принц» Антуана де Сент-Экзюпери
#«Айвенго» Вальтера Скотта
#«Фауст» Гете
#«Божественная комедия» Данте Алигьери
#«Старик с крыльями» Габриэля Гарсиа Маркеса,
#«Чужая боль» Сергея Лукьяненко
#«Алхимик» Пауло Коэльо
#[[Книги Харуки Мураками|Харуки Мураками]]
#[[Руководство полного идиота по программированию (на языке Си)|http://lib.ru/CTOTOR/starterkit.txt]]
Да зачем вообще нужна база на луне?
Только лишь за тем что на ней можно разместить основной главный и единственный межпланетный космопорт земли, там можно строить межпланетные и межзвёздные корабли, и собственно с луны и запускать все экспедиции, потому что для запуска экспедиций с луны нужно потратить на несколько порядков меньше топлива чем на запуск с поверхности земли.
Энергию, материалы, воздух, воду, продовольствие, топливо, всё это можно добывать на самой луне или кометах, которые можно отлавливать, пригонять на орбиту луны и разделывать там.
Конечно же на этапе строительства базы на луну придётся доставлять очень много материалов, технологии, оборудования, продовольствия, воды, воздуха и людей, но этот этап очень быстро пройдёт как только база выйдет на самообеспечение, продовольствием, воздухом и главное оборудованием, перерабатывая минералы найденые на поверхности или под поверхностью луны.
Единственное условие развития такого сценария это регулярные рейсы земля-луна, скажем раз в месяц, для перевозки людей и товаров как на луну так и на землю.
И в качестве варианта организации дешёвых рейсов можно использовать [[Космический фонтан|http://habrahabr.ru/post/235605/]]
<<miniBrowser noplayer http://10k.aneventapart.com/2/Uploads/607/>>
Мантра от лени:
ОМ ХРИМ ШРИМ КРИМ ПАРАМЕШВАРИ КАЛИКЕ КРИМ ШРИМ КРИМ СВАХА
ОМ ХРИМ ШРИМ КРИМ ПАРАМЕШВАРИ КАЛИКЕ КРИМ ШРИМ ХРИМ СВАХА
ОМ АХ ХУМ СО ХА
Это мощная мантра, очищающая моментально, и вы можете визуализировать, как все предметы в вашей комнате очищаются, когда вы окуриваете их благовонием. Просто повторяйте мантру 108 раз в такт дыхания, делая резкий выдох на последнем слоге ХА. Эту мантру распевают все буддисты, когда совершают подношения Будде на домашнем алтаре или в святилище, а также перед приемом пищи.
• Сарасвати- покровительница знания.
OМ АЙМ САРАСВАТЬЕ НАМАХ - АУМ
• Мантра для усвоения знаний
ОМ ШРИ САРАСВАТЬЯ НАМАХ
• Кали- устраняющая неведение,которое заставляет нас испытывать страх перед смертью. (Для вхождения в некрослой)
OМ КРИМ КАЛИКАЙЕ НАМАХ - АУМ
• Энерго мантра: Дурга I- Единая Божественная энергия, разрушитель зла.
АУМ АЙМ ХРИМ КЛИМ ЧАМУНДАЙЕ ВИЧЧЕЙ НАМАХ - АУМ
• Дурга II- Единая Божественная энергия, разрушитель зла.
АУМ ДУМ ДУРГАЙЕ НАМАХ- АУМ
• Маха Майя- приносящая энергию.
АУМ ХРИМ НАМАХ -АУМ
• Маха Лакшми- приносящая энергию, процветание и гармонию.
АУМ ШРИМ ХРИМ КЛИМ МАХА ЛАКШМАЙЕ НАМАХ - АУМ
• Мантра Гайатри- мантра для всех целей.(также про неё много чего написано ТУТ)
ОМ БХУР-БХУВАХ СВАХ ТАТ-САВИТУР-ВАРЕНЬЯМ БХАРГО ДЭВАСЬЯ ДХИМАХИ ДХИЙО ЙО НАХ ПРАЧОДАЙАТ
• Вишну Гайатри- для семейного благополучия:
АУМ НАРАЙЯНАЙЯ ВИДМАХЕ,
ВАСУДЕВАЙЯ ДХИМАХИ ТАННО ВИШНУХ ПРАЧОДАЙЯТ
• Шива Гайатри- для снятия проблем, для покоя и преуспевания.
АУМ ПАНЬЧВАКТРАЙЯ ВИДМАХЕ, МАХАДЕВАЙЯ ДХИМАХИ ТАННО РУДРАХ ПРАЧОДАЙЯТ
• Брахма Гайатри - для увеличения продуктивности действий.
АУМ ПАРМЕШВАРАЙЯ ВИДМАХЕ, ПАРАТАТТВАЙЯ ДХИМАХИ ТАННО БРАХМА ПРАЧОДАЙЯТ
• Рама Гайатри- для безопасности , доброго имени и положения.
АУМ ДАШАРАТХАЙЯ ВИДМАХЕ, СИТА-ВАЛЛАБХАЙЯ ДХИМАХИ ТАННО РАМАХ ПРАЧОДАЙЯТ
• Кришна Гайатри - для успеха в работе, повышения активности.
АУМ ДЕВАКИНАНДАНАЙЯ ВИДМАХЕ, ВАСУДЕВАЙЯ ДХИМАХИ ТАННО КРИШНАХ ПРАЧОДАЙЯТ
• Индра Гайатри- для безопасности в конфликтах.
АУМ САХАСРА -НЕТРАЙЯ ВИДМАХЕ,
ВАДЖРАСТРАЙЯ ДХИМАХИ ТАННО ИНДРАХ ПРАЧОДАЙЯТ
• Хануман Гайатри- для бескорыстного служения.
АУМ АНДЖАНЕЙЯЙЯ ВИДМАХЕ,
МАХАБАЛАЙЯ ДХИМАХИ ТАННО ХАНУМАН ПРАЧОДАЙЯТ
• Сурья Гайатри- для лечения заболеваний, освобождения от недугов.
АУМ БХАСКАРАЙЯ ВИДМАХЕ, ДИВАКАРАЙЯ ДХИМАХИ ТАННО СУРЬЯХ ПРАЧОДАЙЯТ
• Чантра Гайатри- для подавления страхов, беспокойств, пессимизма,психозов и неврозов.
АУМ КРИШНА -ПУТРАЙЯ ВИДМАХЕ, АМРИТАТАТВАЙЯ ДХИМАХИ ТАННО ЧАНДРАХ ПРАЧОДАЙЯТ
• Яма Гайатри- для освобождения от страха смерти.
АУМ СУРЬЯ -ПУТРАЙЯ ВИДМАХЕ,
МАХАКАЛАЙЯ ДХИМАХИ ТАННО ЯМАХ ПРАЧОДАЙЯТ
• Варуна Гайатри- для увеличения любви между мужчиной и женщиной.
АУМ ДЖАЛАВИМВАЙЯ ВИДМАХЕ, НИЛА-ПУРУШАЙЯ ДХИМАХИ ТАННО ВАРУНАХ ПРАЧОДАЙЯТ
• Нараяна Гайатри - для увеличения силы организаторских способностей.
АУМ НАРАЙЯНАЙЯ ВИДМАХЕ, ВАСУДЕВАЙЯ ДХИМАХИ ТАННО НАРАЙЯНА ПРАЧОДАЙЯТ
• Нарасимха Гайатри - для увеличения способности помочь другим.
ВАДЖРАНАКХАЙЯ ДХИМАХИ ТАННО НАРАСИНХАХ ПРАЧОДАЙЯТ
• Дурга Гайатри - для победы над обстоятельствами, врагами, болью и страданиями.
АУМ ГИРИДЖАЯЙ ВИДМАХЕ, ШИВАПРИЯЯЙ ДХИМАХИ ТАННО ДУРГА ПРАЧОДАЙЯТ
• Лакшми Гайатри - для достижения богатства, роскоши, положения, продвижения по службе.
АУМ МАХАЛАКШМЬЯЙ ВИДМАХЕ, ВИШНУПРИЯЯЙ ДХИМАХИ ТАННО ЛАКШМИ ПРАЧОДАЙЯТ
• Радха Гайатри - для увеличения религиозной преданности, божественной любви.
АУМ ВРИШАБХАНУДЖАЯЙ ВИДМАХЕ, КРИШНАПРИЯЯЙ ДХИМАХИ ТАННО РАДХАПРАЧОДАЙЯТ
• Сита Гайатри - для обретения способности работать над собой, искупления и терпимости
АУМ ДЖАНАКАНАНДИНЬЯЙ ВИДМАХЕ, БХУМИДЖАЯЙ ДХИМАХИ ТАННО СИТА ПРАЧОДАЙЯТ
• Сарасвати Гайатри - для укрепления памяти, мудрости, знаний, творческих способностей.
АУМ САРАСВАТЬЯЙ ВИДМАХЕ, БРАХМАПУТРЬЯЙ ДХИМАХИ ТАННО САРАСВАТИ ПРАЧОДАЙЯТ
• Агни Гайатри - для обеспечения тела, ума, всех органов чувств жизненными силами и оджасом.
АУМ МАХАДЖВАЛАЙЯ ВИДМАХЕ, АГНИДЕВАЙЯ ДХИМАХИ ТАННО АГНИХ ПРАЧОДАЙЯТ
• Притхи Гайатри - для стабильности, настойчивости и сотрудничества.
АУМ ПРИТХВИДЕВЬЕ ВИДМАХЕ, САХАСРАМУРТЬЕ ДХИМАХИ ТАННО ПРИТХВИ ПРАЧОДАЙЯТ
• Кама Гайатри - для увеличения чувственности, сексуального удовлетворения и половой силы, жизненных сил, бодрости, стойкости и выносливости.
АУМ КАМАДЕВАЙЯ ВИДМАХЕ, ПУШПАВАНАЙЯ ДХИМАХИ ТАННО КАМАХ ПРАЧОДАЙЯТ
• Хамса Гайатри - для увеличения силы проницательности (способности различения).
АУМ ПАРАМАХАМСАЙЯ ВИДМАХЕ, МАХАХАМСАЙЯ ДХИМАХИ ТАННО ХАМСАХ ПРАЧОДАЙЯТ
• Хайягрива Гайатри - для увеличения мужества и избавления от страхов.
АУМ ВАНИШВАРАЙЯ ВИДМАХЕ, ХАЙЯГРИВАЙЯ ДХИМАХИ ТАННО ХАЙЯГРИВАХ ПРАЧОДАЙЯТ
• Мантра Махамритьюнджайя - для устранения физических, ментальных и астральных недугов.
АУМ ТРИЙЯМБАКАМ ЯДЖАМАХЕ СУГАНДХИМ ПУШТИВАРДХАНАМ УРВАРУКАМИВА БАНДХАНАН МРИТЙОРМУКШИЙЯ МАМРИТАТ
• Магическая мантра для защиты мага от сущностей:
Иат-Ха-Аху-Ваирио
Мантра для набора энергии и силы. (читать ее от 9 до 36 раз):
СИХ ТАМТ ТХУ
Еще одна мантра для набора энергии
КАСТОНАЙ ЛАПИО АСТЕРИУМ МАНТО
И еще одна сильная мантра для набора энергии:
наберите полную грудь воздуха и постарайтесь на выдохе проговорить (или пропеть) эти звуки. звуки плавно перетекают один в другой
ЫЭАОУМУОАЭЫМ
Мантра подчинения чел-ка:
ДХУМ ДХУМ ДХУМАВАТИ ТХАХ ТХАХ
Мантра, усиливающая силу разрушительного воздействия. Произносить при ударе:
ТОФАТ ХУМ ПХАТ
Мантра, которая убивает злых существ:
ОМ ХРИ
ИАТ ХА АХ ХУ ВО- формула разящего света
Формула для изгнания проявлений зла( сущностей ):
"FUNDAMENTA EJUS IN MONTIBUS SANCTIS" читать в голос 3 раза.
Формула изгнания нечести:
"APAGE AME SATANAS" читать 3 раза
Формула алхимиков для очищения. "Уроборос":
"IGNE NATURA RENOVATUR INTEGRA" 3 РАЗА
для восстановления зрения можно помедитировать на свечу и читать мантру (3 недели по 108 раз)
ОМ ШАМ ГЕФТАХ ОУМ
Мантра, которая усиливает силу перед соперником:
ЧАНДРАМ-БРАМБАЧАНДРА
Тибетская мантра для похудения. Можно читать по 9-12 раз на воду и пить. Через неделю будет эффект-не поверите! Помогло многим,кому я ее давал. И кстати, при ее использовании курс луны можно не учитывать.
Мантра:
"САН СИА ЧИИ НАХ ПАЙ ТУН ДОУ"
мантра для победы над гневом и ненавистью:
ОМ АКШОБИЯ ХУМ
Мантра, которая успокаивает ум:
ТАКЕ ДЖУГА ПАДА КАМАЛА МНАВАУН ДЖАСУ КРИПА НАРАМАЛА МАТИ ПАВАУН
мантра для удачи во всех начинаниях:
ОМ НАМО ДХАНАДАЙЕ СВАХА
Мантра для развития прорицательского дара:
ГЕ КА ОМ
мантра для очищения от негатива
ОМ ШРИ КАЛИ НАМАХ ФОРАМ
Мантра для привлечения внимания противоположного пола и усиления привлекательности:
ОМ КУРКУЛЛЕ ХУМ ХРИХ СВАХА
МАНТРА НА ПРИЗЫВ ЭНЕРГИЙ НА ПОМОЩЬ В ДЕЛАХ И ИСЦЕЛЕНИИ:
АКСАНФОРИЯ -РАМИНХА-МИНЭЛЬЕ-ОЕ-ФОРАМ
Мантра-защита от темных сил:
Ята Ахуна Варья
Мантра-просьба к богам, о даровании способностей:
ДХЙО ЙО НАХ ПРАЧОДАЯТ
мантра для привлечения денег
КВОЧ КОХИН ТО
мантра для развития ясновидения
ОМ ШРИ ДЕЛЛА ОМ"
Мантра Огня
АУМ ШРИ АГНИ СУРЬЯ ДЖАЙЯ РАМ
Защитная мантра
Аум-мистериом-Раом
Мантра "Зуб Дракона", наделяет силой, и укрепляет дух:
аум мани падме хум
Мантра для прохода между мирами:
Лаум-АС-Танаан-Инигму-Сферати-Инвинум-И-И-А-А-Ла-А-А-А-А-Тум!
Мантра-вызов астрального двойника опр. чел-ка:
Ус-Монакос-Пес-Акос-(имя)-Ас-Менторос-Монакос
Мантра мгновенного увеличания запаса сил (не самих сил, а личного запаса. После неё следует тутже запонить появившийся резерв энергией):
Тау-О-Ма-Сатиби-Ат-Та-Па-Тьюлум (Тиулум)-Мэнсал!
Мантра для насылания сна:
Мэрсон-Берессо-Эст-Катор-Алэм-Эст-Барум-Хатум
Мантра духовной звезды сознания, с повторением ее одиннадцать раз открывает резервы организма к восприятию любого знания.
Каааф ха йа аййййн саааад
Повторяя 14 раз, помогает при выпечке целительного хлеба, хлебопродуктов. Можно пирожок так спечь.
Та Сиииин Миииим Ра Саааад
Гимн является защитой от инфекционных болезней; повторять 8, 18, 28 раз каждые 2 часа во время лечения, а так же временами для профилактики (работает как "щит" из рекламы какого-то там молочного продукта - типа щит от бактерий и инфекции).
АлифЛаааам Мии-иим Алиф Лаааам Ра Йа-сиииин Кааааф ха йа аййййн саааад Ха Миииим Та ха Ха Миииим. Аййййн Сиииин Кааааф
Постоянное повторение этой мантры обеспечит безопасность.
Тоха, Йа-Сии-ииин
Мантра, которая помогает при отравлении.
Йа-Сиииин и Ха Миииим Аййййн Сиииин Кааф
Мантра, которая избавит Вас колдовства, сглаза и порчи.
Аль-Мумину-Аллаху
Мантры для изменения собственных вибраций:
Ау-Вэ-Таании-Лау-Мэ-Раорэ-Ра. (Работает на увеличение частоты)
Цако-Гумо-Коллодон-Тигун-Донун-Эраконтум. (Понижение частоты)
При необходимости создаёт активную защиту. Успокаивает при эмоциональном возбуждении.
Аум нама Нараяна
Погружает в транс с выходом в астрал
Алэм сенемасанд джанэм арманусат тал шиб сарут элиджасаб нимонисан кобшали вусат аршилибусат.
Мантра для развития астрального зрения
АУМ КАССИЯН ХАРА ШАНАТАР
Мантра против заикания( болезнь такая)
ДААЗА - МААТОМ
Мантра успокоения ума, даруит интуицию:
ха-ро-ха-ра
Для получения знания (Сарасвати)
АУМ АЙМ САРАСВАТЬЕ НАМАХ - АУМ
Мантра для всех целей.
АУМ БХУР-БХУВАХ СВАХ
ТАТ-САВИТУР-ВАРЕНЬЯМ
БХАРГО ДЭВАСЬЯ ДХИМАХИ
ДХИЙО ЙО НАХ ПРАЧОДАЙАТ
Мантра для устранения врагов
АУМ ЭКАДАНТАЙЯ ВИДМАХЕ,
ВАКРАТУНДАЙЯ ДХИМАХИ
ТАННО БУДДХИХ ПРАЧОДАЙЯТ
Мантра для снятия проблем, для покоя и преуспевания.
АУМ ПАНЬЧВАКТРАЙЯ ВИДМАХЕ,
МАХАДЕВАЙЯ ДХИМАХИ
ТАННО РУДРАХ ПРАЧОДАЙЯТ
Мантра для увеличения продуктивности действий. (Брахма)
АУМ ПАРМЕШВАРАЙЯ ВИДМАХЕ,
ПАРАТАТТВАЙЯ ДХИМАХИ
ТАННО БРАХМА ПРАЧОДАЙЯТ
Мантра для безопасности , доброго имени и положения. (Рама)
АУМ ДАШАРАТХАЙЯ ВИДМАХЕ,
СИТА-ВАЛЛАБХАЙЯ ДХИМАХИ
ТАННО РАМАХ ПРАЧОДАЙЯТ
Мантра для успеха в работе, повышения активности. (Кришна)
АУМ ДЕВАКИНАНДАНАЙЯ ВИДМАХЕ,
ВАСУДЕВАЙЯ ДХИМАХИ
ТАННО КРИШНАХ ПРАЧОДАЙЯТ
Мантра для безопасности в конфликтах. (Индра)
АУМ САХАСРА -НЕТРАЙЯ ВИДМАХЕ,
ВАДЖРАСТРАЙЯ ДХИМАХИ
ТАННО ИНДРАХ ПРАЧОДАЙЯТ
Мантра для лечения заболеваний, освобождения от недугов. (Сурья)
АУМ БХАСКАРАЙЯ ВИДМАХЕ,
ДИВАКАРАЙЯ ДХИМАХИ
ТАННО СУРЬЯХ ПРАЧОДАЙЯТ
Мантра для подавления страхов, беспокойств, пессимизма,психозов и неврозов. (Чантра)
АУМ КРИШНА -ПУТРАЙЯ ВИДМАХЕ,
АМРИТАТАТВАЙЯ ДХИМАХИ
ТАННО ЧАНДРАХ ПРАЧОДАЙЯТ
Мантра для освобождения от страха смерти. (Яма)
АУМ СУРЬЯ -ПУТРАЙЯ ВИДМАХЕ,
МАХАКАЛАЙЯ ДХИМАХИ
ТАННО ЯМАХ ПРАЧОДАЙЯТ
Мантра для увеличения любви между мужчиной и женщиной. (Варуна)
АУМ ДЖАЛАВИМВАЙЯ ВИДМАХЕ,
НИЛА-ПУРУШАЙЯ ДХИМАХИ
ТАННО ВАРУНАХ ПРАЧОДАЙЯТ
Мантра для увеличения силы организаторских способностей.
АУМ НАРАЙЯНАЙЯ ВИДМАХЕ,
ВАСУДЕВАЙЯ ДХИМАХИ
ТАННО НАРАЙЯНА ПРАЧОДАЙЯТ
Мантра для увеличения способности помочь другим.
АУМ УГРАНАРАСИМХАЙЯ ВИДМАХЕ,
ВАДЖРАНАКХАЙЯ ДХИМАХИ
ТАННО НАРАСИНХАХ ПРАЧОДАЙЯТ
Мантра для победы над обстоятельствами, врагами, болью и страданиями.
АУМ ГИРИДЖАЯЙ ВИДМАХЕ,
ШИВАПРИЯЯЙ ДХИМАХИ
ТАННО ДУРГА ПРАЧОДАЙЯТ
Мантра для достижения богатства, роскоши, положения, продвижения по службе.
АУМ МАХАЛАКШМЬЯЙ ВИДМАХЕ,
ВИШНУПРИЯЯЙ ДХИМАХИ
ТАННО ЛАКШМИ ПРАЧОДАЙЯТ
Мантра для укрепления памяти, мудрости, знаний, творческих способностей.
АУМ САРАСВАТЬЯЙ ВИДМАХЕ,
БРАХМАПУТРЬЯЙ ДХИМАХИ
ТАННО САРАСВАТИ ПРАЧОДАЙЯТ
Мантра для стабильности, настойчивости и сотрудничества.
АУМ ПРИТХВИДЕВЬЕ ВИДМАХЕ,
САХАСРАМУРТЬЕ ДХИМАХИ
ТАННО ПРИТХВИ ПРАЧОДАЙЯТ
Мантра для увеличения чувственности, сексуального удовлетворения и половой силы, жизненных сил, бодрости, стойкости и выносливости.
АУМ КАМАДЕВАЙЯ ВИДМАХЕ,
ПУШПАВАНАЙЯ ДХИМАХИ
ТАННО КАМАХ ПРАЧОДАЙЯТ
• Мантра для увеличения мужества и избавления от страхов.
АУМ ВАНИШВАРАЙЯ ВИДМАХЕ,
ХАЙЯГРИВАЙЯ ДХИМАХИ
ТАННО ХАЙЯГРИВАХ ПРАЧОДАЙЯТ
• Мантра для устранения физических, ментальных и астральных недугов.
АУМ ТРИЙЯМБАКАМ ЯДЖАМАХЕ
СУГАНДХИМ ПУШТИВАРДХАНАМ
УРВАРУКАМИВА БАНДХАНАН
МРИТЙОРМУКШИЙЯ МАМРИТАТ
Мантры к Богам
• Кали- богиня трансформации
КРИМ КРИМ КРИМ
ХИМ ХРИМ ДАКШИНЕ КАЛИКЕ
КРИМ КРИМ КРИМ ХРИМ ХРИМ
ХУМ ХУМ СВАХА
• Тара- богиня выразительности
АЙМ АУМ ХРИМ
КРИМ ХУМ ПХАТ
• Шодаши- юная и прекрасная
ХРИМ КА Э И ЛА ХРИМ
ХА СА КА ХА ЛА ХРИМ
СА КА ЛА ХРИМ
• Бхуванешвари- царица феноменального мира
ХРИМ
• Чиннамаста - богиня желания и проницательности
ШРИМ ХРИМ КЛИМ АЙМ
ВАДЖРАВАЙРОЧАНИЙЕ
ХУМ ХУМ ПХАТ СВАХА
• Трипура Бхайрави - разрушитель девяти заблуждений ума
ХАСАЙН ХАСКАРИМ ХАСАЙН
• Дхумавати - Подчинение
ДХУМ ДХУМ
ДХУМАВАТИ ТХАХ ТХАХ
• Багала Мукхи - энергия
АУМ ХРИМ БАГАЛАМУКХИ САРВА
ДУШТАНАМ ВАВАЧАМУКХАМ
ИСТАМБХАЙ ДЖИВХАМКИЛАЙ БУДДХИНАШАЙ
ХРИМ АУМ СВАХА
• Матанги - богиня красноречия
АУМ ХРИМ КЛИМ ХУМ
МАТАНГАЙЕ ПХАТ СВАХА
• Камала - богиня покоя и процветания
АУМ АЙМ ХИМ
ШРИМ КЛИМ ХАССАУ
ДЖАГАТПРАСУТАЙЕЙ НАМАХ
• Мантра Дурги - несокрушимая
АУМ ХРИМ ДУМ ДУРГАЙЕ НАМАХ
• Мантра для богатства и процветания, ежедневно, до получения результата 108 раз
ОМ - ХРИМ - ШРИМ - ЛАКШМИ - БЙО - НАМАХА
• Мантры посвященные Ганеши
o Махамантра Ганеши (главная мантра)./Ганеша- устраняющий препятствия/
Дарует чистоту намерений, удачу в бизнесе и всяческое процветание.
ОМ - ГАМ - ГАНАПАТАЙЕ - НАМАХА
o Ганеша Гайатри- для устранения препятствий.
АУМ ЭКАДАНТАЙЯ ВИДМАХЕ, ВАКРАТУНДАЙЯ ДХИМАХИ ТАННО БУДДХИХ ПРАЧОДАЙЯТ
o В результате повторений достигается успех в любых коммерческих делах, стремление к совершенству, глубинное знание мира, расцвет талантов.
ОМ - ШРИ - ГАНЕШАЙЯ - НАМАХ
• Мантра для обретения благословения небес во всех начинаниях, счастья, любви и процветания.
МАНГАЛАМ - ДИШТУ - МЕ - МАХЕШВАРИ
• Медицинская мантра
Мобилизует защитные силы организма, повышает иммунитет и способствует быстрому выздоровлению.
ОМ - БХАЙКАНДЗЕ - БХАЙКАНДЗЕ - МАХА - БХАЙКАНДЗЕ - РАТНА - САМУ - ГАТЭ - СВАХА
• Мантра для успеха и благополучия
ОМ - ХРИМ - КШИМ - ШРИМ - ШРИ - ЛАКШМИ - НРИСИНХАЙЕ - НАМАХ
ОМ МАЙЯ МА КИТЕ РАКУ АНА ПИЯ НАМО
БОЖЕСТВЕННАЯ ЗАЩИТА !
ЭНЕРГЕТИЧЕСКИХ ТЕЛ ЧЕЛОВЕКА !
поётся на низкой частоте в медленном ритме
появится привкус во рту металла (справились)
она платиновая внутри, бело-золотая сверху.
Мантра для блага других
ОМ МАНИ ПЕМЕ ХУНГ
Мантра, которую произносят для блага других существ, где шесть слогов превращают шесть мешающих чувств в мудрость (привязанность и жадность имеют здесь одну и ту же природу). Ом - преобразует гордыню и самомнение; Ма - ревность и зависть; Ни - привязанность и эгоистические желания; Пе - неведение и запутанность; Ме - жадность и алчность; Хунг - ненависть и злость.
Универсальная мантра
ОМ
ОМ - изначальный звук. Символ творения, универсальный символ созидания и разрушения. Это божественная и универсальная вибрация, не имеющая ни начала ни конца, она успокаивает сознание и дарит чувство мира и гармонии. Одной этой мантры достаточно для познания и понимания природы реальности и самого Бога.
Мантра для привлечения денег
КУНГ-РО-НО АМА НИ-ЛО-ТА-ВОНГ
Нужно день поститься, думая о добрых делах, которые следует совершить, имея деньги. В полнолуние произнести три раза подняв руки над головой данную мантру. Повторять эти мантры раз в неделю в течение 3-х месяцев.
Защищающая от нападения мантра
ИАТ-ХУ-АХУ-ВОО (петушиный крик)
ИАТ-ХУ-АХУ-ВАИРИО (львиный рев)
ДО-КУЛАК-МАНТУГО-ЯРАХАТ-ЭТЭР (при последнем слове ударить воздух правой рукой ладонью вниз)
Мантра гасящая драку
АЛАУМ-РАУМ-ОМ
Мантра на счастье
ЛО-АН-АН-ТА, ФА-РИ
Накануне следует поститься и медитировать. В течение недели каждый день после пробуждения следует повторять вслух данную мантру.
Мантра на любовь
ГО-ДО-СИ, РО АН-ВАТ, МОНО-РАН
Перед этим провести медитацию и однодневный пост. В полутемной комнате сказать шепотом 4 раза данную мантру. Затем делать это подряд в течение трех вечеров, имея внутреннюю готовность встретить любовь. Мгновенно это не действует. Нужно повторять процедуру в течение месяца. А начать это следует при плной луне.
Мантра на здоровье
ЧУНГ-ДО-АМА, РУНГ-НИНГ
День нужно поститься, медитируя о здоровье. Утром следующего дня до восхода солнца следует медленно произнести мантру. Повторять это по утрам в течение 10 дней. Самочувствие будет улучшаться изо дня в день.
Гармоничное развитие
ГОУР РА АНГ ГА, ХА-РИБОЛ НИТАЙ-ГОУР НИТАЙ-ГОУР ХАРИБОЛ, ГОПАЛА ГОВИНДА РАМА МАДАНА-МОХАНА
Универсальные для обеспечения наиболее гармоничного и естественного развития вашей личности в направлении духовного просветления. Их нужно произносить естественным голосом после остановки внутреннего диалога в течение 10-15 минут. Если хотите можно придумать мелодию и напевать
Мантра для наслаждения любовью, нежных и доверительных отношений
ОМ ШРИ КРИШНАЙЯ ГОВИНДАЙЯ ГОПИДЖАНА ВА ЛАБХАЙЯ НАМАХ
Мантра для укрепления уверенности в себе и очарования
ОМ НАМО БХАГАВАТЭ РУКМИНИ ВАЛАБХАЙЯ СВАХА
Мантра укрепляющая сердце, а также универсальная защитная мантра
ГАТЭ ГАТЭ ПОРО ГАТЭ ПОРО СОМ ГАТЭ БОДХИ СВАХА
Мантра для обретения благословения небес во всех начинаниях, счастья, любви и процветания
МАНГАЛАМ ДИШТУ МЕ, МАХЕШВАРИ
Дай счастья мне Махешвара
Мантра для богатства, умиротворения и исполнения желаний
ОМ ЛАКШМИ ВИГАН ШРИ КАМАЛА ДХАРИГАН СВАХА
Эту мантру для лучших результатов следует повторять с 13 апреля до 14 мая.
Мантра для изобилия, радости души и успеха во всем
ОМ ШРИМ ХРИМ ШРИМ КАМАЛЕ КАМАЛАЛАЙЕ ПРАСИД ПРАСИД ШРИМ ХРИМ ОМ МАХАЛАКШМИМЙЕ НАМАХ
Эту мантру лучше повторять с 16 октября по 15 ноября каждый день.
Мантра для удачи в бизнесе и процветания
ОМ ГАМ ГАНАПАТАЙЕ НАМАХА
Успех в любых коммерческих делах, глубинное знание, расцвет талантов
ОМ ШРИ ГАНЕШАЙЯ НАМАХ
Мантра для успеха и благополучия
ОМ ХРИМ КШИМ ШРИМ ШРИ ЛАКШМИ НРИСИНХАЙЕ НАМАХ
Мантра для исцеления (мантра для сердечной чакры)
СА
Начните с того, что разведите руки, чтобы позволить энергии свободно течь между чакрой сердца и ладонями. Повторяя мантру, представляйте энергию, наполняющую область чакры сердца. Произнося слова, попробуйте визуально представить чакру в виде сферы зеленоватого цвета размером с теннисный мячик, светящуюся в сердце по мере вибрации мантры.
Мантра для мира во всем мире
НАМ МИОХО РЕНГЕЙ КИО
Произносится мантра громко и быстро, производя вибрации мира на всей планете. Можно также произносить эту мантру для хорошего здоровья и материального благополучия.
Мантра для пробуждения глубокого сострадания ко всему живому
ОМ МАНИ ПАДМЕ ХУМ
Популярная восточная мантра и применяется для благоговения и пробуждения глубокого чувства сострадания ко всему живому. Эта мантра сострадательному Будде. Это очень мощная мантра: говорят, что любой пропевший эту мантру миллион раз (на что может уйти целый год) получит в дар ясновидение. Многие распевают эту мантру для вызова благословения сострадательного Будды. Также мантра хорошо очищает. Пропойте ее 108 раз для очищения дома.
Мантра для избавления от зависимости
АУМ ШРИ ГАЙЯ АДИ ШИВА ГАЙЯ АДИ КАЛИ ГАЙЯ АДИ КАЛА БХАЙРАВА НАМАХ ФОРАМ
Мантра для уничтожения плохого в себе
КОРФТ ОУМ
Мантра для уничтожения плохого в себе
РЕМ РАО АУМ
Мантра для закрепления результата после любых изменений
КАТЕ КАТЕ ПОРО КАТЕ ПОРО СОМ КАТЕ БОДЕ СОХА
Читается до или после любых действий, направленных на улучшение Фэн-шуй
Мантра для закрепления результата после любых изменений
ОМ БХАЙКАНДЗЕ БХАЙКАНДЗЕ МАХА БХАЙКАНДЗЕ РАМА САМУ ГАТЕ СОХА
Читается до или после любых действий, направленных на улучшение Фэн-шуй
Мантра для закрепления результата после любых изменений
ОМ МА НЕ ПАД МЕ ХУМ Мантра
Читается до или после любых действий, направленных на улучшение Фэн-шуй
Мантра Богине Луны
АУМ ШРИ ГАЙЯ АДИ ЧАНДРА АЙЯ НАМАХ
Надо выбрать время полнолуния и выйти на улицу. Ноги должны опираться на землю, руки вытянуты ладонями к луне. Произносим мантру 12 минут. К концу 12 минуты тело будет жужжать как рой пчел. Так повторить 12 полнолуний. На тринадцатое на вас обрушится поток денег и во всех делах пойдет удача, тело оздоровится. Но 12 полнолуний выдержать сложно, будут и кошмарные сновидения и необычные феномены и нежелание проводить ритуал. Это неблагоприятные силы не хотят изгоняться. Но если дойти до конца - все получается. В принципе, устойчивый рост достатка начинается уже после третьего полнолуния. После 12 полнолуний продолжаем делать каждое полнолуние. Если одно пропустить, то нужно начинать все с начала.
Мантра Юпитеру
ДЗАЯН ДЗАЯЧИ КОЧ КОХЕН ТО
Эта мантра отвечает за рост достатка и дружбу с сильными мира сего. Для привлечения этих энергий Юпитера выбирают четверг, время восхода солнца. Медитируя на глубокий синий цвет читают мантру. Так каждую неделю в четверг на протяжении четырех месяцев. Потом раз в месяц, пока не будет достигнут желаемый уровень.
Мантра для материального блага
ГАЙЯ АДИ ЧАНДРЕ
Читается в дни и ночи Луны (день Луны понедельник, ночь Луны с четверга на пятницу)
Мантра для процветания и благополучия
ОМ ХРИМ КЛИМ ШРИМ НАМАХ
Мантра для обретения удачи во всех начинаниях
ОМ НАМО ДХАНАДАЙЕ СВАХА
Мантра для достижения социального успеха и процветания бизнеса
ОМ ХРИМ ШРИМ ШРИМ ШРИМ ШРИМ ШРИМ ШРИМ ШРИМ ЛАКШМИ МАМ ГРАХЕ ПУРАЙЕ ПУРАЙЕ ЧИНТА ДУРАЙЕ ДУРАЙЕ СВАХА
Эта мантра работает великолепно, но ее нужно читать ровно 108 раз. Ее достаточно повторять 2 дня. Для достижения успеха в бизнес-проектах можно работать с ней 2 раза в месяц.
Мантра для избавления от страха
ДЖАЙЯ ДЖАЙЯ ШРИ НРИСИМХА
Читайте эту мантру утром и вы обретете душевный покой и благоприятный настрой.
Наполнение энергией
РА
Для этого понадобится камень гранат. Чтобы извлечь из камня пользу вы должны применить гранат к чакре Муладхара (в районе комчика у основания позвоночного столба). Прижмите гранат к нижней части спины на уровне этой чакры. Произносите мантру в течение нескольких минут, что поможет активизировать энергию в этой чакре. Почувствуйте энергию звука, проходящую вниз по руке, сосредотачивающуюся в гранате. Эта энергия стимулирующая чакру, помогает активизировать любые поврежденные энергетические точки.
Очистительная мантра
ОМ АХ ХУМ СО ХА
Это мощная мантра, очищающая моментально, и вы можете визуализировать, как все предметы в вашей комнате очищаются, когда вы окуриваете их благовонием. Протсто повторяйте мантру 108 раз в такт дыхания. Эту мантру распевают все буддисты, когда совершают подношения Будде на домашнем алтаре или в святилище, а также перед приемом пищи.
Мантра Будды Медицины
ОМ БХАЙКАНДЗЕ, БХАЙКАНДЗЕ МАХА БХАЙКАНДЗЕ РАТНА САМУ ГАТЕ СВАХА
Мысленно представьте у себя над головой Будду Медицины. Этот Будду имеет темно-голубое тело, и Он прекрасен. Распевайте мантру семь раз каждое утро и семь раз каждый вечер. Распевайте с визуализацией. Вы обязательно почувствуете улучшение здоровья. Также эту мантру можно петь для другого человека, когда ему нездоровится.
Мантра для снятия зубной боли
АУМ ШРИ МАХАЗУРДИВИЙЯ НАМАХ
Мантра для радости, наслаждения жизнью и любовью
ОМ ШРИ КРИШНАЙЯ ГОВИНДАЙЯ ГОПИДЖАНА ВАЛАБХАЙЯ НАМАХ
Мантра для привлечения света
ОМ ШАНТИ ШАНТИ ШАНТИ
Мантра для успокоения сердца и защиты от всякого зла
ГАТЭ ГАТЭ ПОРО ГАТЭ ПОРО СОМ ГАТЭ БОДХИ СВАХА
Мантра Великого знания. Самая известная универсальная защитная мантра. Ее повторение делает человека неуязвимым для любых негативных действий. В любой сложной ситуации можно повторять эту мантру и представить, что тебя окутывает облако золотистого цвета. Это облако Божественной любви. Оно защищает человека от неприятностей.
Мантра для обращения к Абсолюту
ОМ МАХАДЕВАЙЯ НАМАХ
Мантра жизнедающая, исцеляющая, наполняющая силой и радостью
ОМ ТРИЙЯМБАКАМ ЙАДЖАМАХЕ СУГАНДХИМ ПУШТИ ВАРДХАНАМ УРВАРУКАМИВА БАНДХАНАН МРИТИЙОР МУКШИЙЯ МАМРИТАТ
Лучше всего читать эту мантру когда перед выходом из дома приводите себя порялок. Это настроит сердце на гармонию, а душу наполнит радостью и уверенностью. Одна из основных мантр Высшего счастья. Наделяет здоровьем, защищает от болезней, несчастных случаев. Приносит радостное настроение, счастье, любовь, улучшает взаимоотношения. Помогает найти спутника жизни. Также полезно повторять ее для исцеления в день рождения.
Мантра, устраняющая препятствия и дающая радость жизни и духовное озарение
ОМ ШРИ РАМА ДЖАЙЯ РАМА ДЖАЙЯ ДЖАЙЯ РАМА
Мантра для легких
У
Этот звук оказывается вибрирует на частоте легких. Поэтому если долго тянуть: у-у-у, происходит их вентиляция и в них проникает Космическая энергия.
Мантра для женщин
АУМ ПАРАМАТМАЙЯ БРАХМА АУМ ТАТ САТ, СОХАМ, ВИДЖАМ
Мантра для нормализации менструального цикла и женской сексуальности.
Мантра для женщин
АДИШАКТИ
Мантра, связанная с женскими божествами.
Мантра для богатства
ОМ ХРЙМ КЛИМ ШРЙМ НАМАХ
Ежедневное повторение этих мантр помогает быстро обрести богатство праведным путем
Мантра для богатства
ОМ ХРЙМ КШЙМ ШРИМ ШРИ ЛАКШМИ НРИСИНХАЙЕ НАМАХ
Ежедневное повторение этих мантр помогает быстро обрести богатство праведным путем
Мантра, чтобы найти клад
ОМ ХАНСЕ ХАНСЕДЖАНЕ ХРЙМ КЛИМ СВАХА
Повторение этой мантры в уединенном месте поможет найти клад.
Мантра для богатства
ОМ ЛАКШМИ ВИГАН ШРЙ КАМАЛАДХАРИГАН СВАХА
Эту мантру, чтобы ощутить всю полноту ее воздействия, следует повторить 20 тысяч раз в течение периода с 13 апреля до 14 мая. После прочтения вы обретете богатство, ваши желания, связанные с улучшением материального положения, осуществятся.
Мантры для умиротворения планет
Мантра для умиротворения Солнца ОМ ХРАМ ХРИМ ХРУМ САХ СУРЙАЙЕ НАМАХ (7000 раз, воскресенье)
Для умиротворения Луны ОМ ШРАМ ШРИМ ШРУМ СА ЧАНДРА МАСЕ НАМАХ (11000 раз, вторник)
Для умиротворения Меркурия ОМ БРАМ БРИМ БРУМ СА БУД ХАЙЕ НАМАХ (9000 раз, среда)
Для умиротворения Марса ОМ КРАМ КРИМ КРУМ СА БХАУ МАЙЕ НАМАХ (10000 раз, четверг)
Для умиротворения Юпитера ОМ ГРАМ ГРИМ ГРУМ СА ГУРАВЕ НАМАХ (19000 раз, четверг)
Для умиротворения Венеры ОМ ДРАМ ДРИМ ДРУМ СА ШУЕ РАЙЕ НАМАХ (16000 раз, пятница)
Для умиротворения Сатурна ОМ ПРАМ ПРИМ ПРУМ СА ШАНАЙЕ НАМАХ или ОМ КХАМ КХИМ КХУМ СА ШАНАЙЕ НАМАХ (24000 раз, суббота)
Планеты способны оказывать не только благоприятное, но и пагубное воздействие на финансовый модус человека. Для нейтрализации этого негативного влияния следует читать специально разработанные тантрические мантры для каждой планеты.
Мантра для обретения великого богатства
ОМ ГАМ ГАНАПАТАЙЕ САРВА ВИГХНА РАЙА САРВАЙА САРВА ГУРАВЕ ЛАМБО ДАРАЙА ХРИМ ГАМ НАМАХ
Мантра для процветания
ВАКРА ТУНЛАЙА ХУМ И ОМ ХРИМ ШРИМ ХРИМ
Мантра для изобилия и благополучия
ОМ ШРИМ ХРИМ КЛИМ ГЛАУМ ИМ НАМО БХАГАВАТИ ГАНЕШАН КАНИ ВАСИНИ МАХА ЛАКШМИ ВАРА ВАРАДЕ ШРИМ ВИБХУ ТАЙЕ СВАХА
Обеспечивает надежную охрану богатства
РАЙА СПОШАСЙА ДАДИТА НИД ХИДО РАТНА ДХАТУМАН РАКШО ХАНО ВАЛАГА ХАНО ВАКРА ТУНДАЙА ХУМ
Мантра для оберегания имущества от всевозможных неприятностей, а также существенно увеличить его
ОМ НАМО БХАГАВАТЕ ГЛАУМ МАХА ГАНАПАТАЙЕ СИНДУ РАРАН ДЖИТАЙА ОМ ШРИМ ХРИМ КЛИМ САРВА ДЖАНА САМРА КШАКАЙА САРВА ЛАКШМИ ПРАДАЙА САРВА ЛОКА ВАШИКА РАНАЙА КРОМ КРОМ КРОМ АМ АМ АМ КЛИМ КЛИМ КЛИМ САКА ЛАРА ДЖАМАН ДАЛАМ МАМА ВАША МАНАЙА ВАША МАНАЙА САКА ЛАВИ ШАДИ НИВАРАНАМ ККУРУ КУРУ РАМ РАМ ЗРАМ ХРИМ ХРУМ КШАМ САКАЛА БХУТА ПРЕТА ПИШАЧА БРАХМА РАКШАСА ЙАКШИНИ МОХИНИ ШУЛИНИ ЧАТУХ ШАШТИ ЙОГИ НЙАДИ САКА ЛАВЕ ТАЛА ГРАХА ШАКИНИ ДАКИНИ ВИ ДХВАМ САНАМ КУРУ КУРУ ПХРОМ ПХРОМ ПХРОМ САКА ЛАЧ ЧОРА БХАЙАМ НИВА РАЙА ТХАМ ТХАМ ТХАМ ШАТ РУМАН ДАЛАМ ДХВАМ САЙА ДХВАМ САЙА ГЛАУМ ГЛАУМ ГЛАУМ САКА ЛАВИ ГХНА НИДХВАМ САЙА НИДХВАМ САЙА САУМ ШРИМ МАМА МАНО РАДХАМ САДХА ЙАСАД ХАЙА ОМ ШРИМ ХРИМ КЛИМ ЩРИ МАХА ГАНАПАТАЙЕ ХУМ ПХАТ СВАХА
Мантра для оберегания имущества от всевозможных неприятностей, а также существенно увеличить его
ОМ АМ ХРИМ КРОМ ХРИМ ХРАХ САКА ЛАКАР ЙАКАРИ КУЛА ВРИДДХИ КАРИ ПАРА МА ДЖНАНА КАРИ МАХА БХАЙА ВИНА ШИНИ МАНО ВАНЧХИТА ДАЙИНИ ДУШТА ГРАХА НИВА РИНИ ВИДРА ВИНИ УНМА ДИНИ ДЖВАЛИНИ БХАН ДЖАНИ МОХИНИ ТРИДЖА ГАДВЙА ПИНИ БХУТА КРИТАМ КАРМА КРИТАМ ПИША ЧАКРИ ТАМ НАШАЙА НАШАЙА РАКША РАКША МАМ АЧА ЛАМ КУРУ КУРУ ХРИМ ХУМ ХУМ ХУМ ТХАМ ТХАМ ПХАТ СВАХА
Мантра для оберегания имущества от всевозможных неприятностей, а также существенно увеличить его
АХО ВИГНЕ ШВАРА МАХА ГАНЕША СПХО ТАНАЙА САРВА ВИГХНАН НАШХАЙА НАШАЙА АКАЛА МРИТЙУ ДЖА ГХАНА ДЖА ГХАНА ВАДЖРА ХАСТИН ЧХИНДИ ЧХИНДИ ПАРА ШУХА СТЕНА БХИНДИ БХИНДИ АХО ГАНА ДХИ ПАТЕ АГАЧ ЧХА ГАЧ ЧХА АВАТАР АВАТАРА ШРИ РУДРА МА ДЖНА ПАЙА СВАХА
Мантра для усиления настроя на высшие духовные планы
И
Долгое и протяжное пение звука "И" стимулирует головной мозг, гипофиз, щитовидную железу и все элементы черепа. Когда человек достаточно долго поет этот звук, он начинает ощущать радостное возбуждение. Это хорошее средство не только против плохого настроения, но и против бытового сглаза. Распевание звука "И" усиливает настрой человека на высшие духовные планы, способствует самосовершенствованию, открывает и усиливает его творческие возможности.
Мантра для очищения
А
Звук "А" - звук, дающий и отдающий энергию. Произносить его нужно так, как будто укачиваете ребенка. Долгое "А" чистит человека, снимает напряжение и дает почти такой же результат, как и покаяние, снимая с вас накопленную негативную энергию.
Мантра для повышения защиты
СИ
Когда человек напуган чем-то, звук "СИ" снимает напряжение, которое колеблет тонкие верхние оболочки нашего энергетического поля. Распевание этого звука повышает защиту от сил черной магии и негативных обстоятельств.
Мантра для наполнения мудростью
У
Звук "У" наполняет человека мудростью. Распевание звука "У" дает человеку прилив сил и энергии для активной деятельности, усиливает динамику его жизни.
Мантра для общительности
Э
Распевание этого звука делает человека коммуникабельным, усиливает сообразительность и предпреимчивость.
Мантра для благополучия
Ю
Звук "Ю" открывает новые горизонты в жизни, способствует благополучию.
Мантра для благополучия и достатка
МН
Этот звук приносит в жизнь благополучие и достаток. Его произнесение упрощает жизнь, в затруднительных ситуациях мы часто лечимся этим звуком. Вибрация этого звука хороша для программирования своей судьбы с помощью мантр и аффирмаций.
Мантра для гармонизирующего воздействия
Е
При пении звука "Е" возникает ощущение зеленого цвета. Распевание этого звука настраивает человека на чувство любви к миру и к людям, оно дает ощущение стабильности, покоя и удовлетворения, что часто используется в практиках белой магии.
Мантра для целительства и очищения
ОЕ
Это очень целебный и очищающий звук. Распевание этого звука улучшает партнерские отношения, дает выход из внутреннего тупика.
Мантра для гармонизации
О
Это главный гармонизирующий звук, который управляет временем. Слова, которые несут вибрацию звука "О" позволяют подключиться к универсальной гармонизирующей вибрации. Это один из ведущих и связующих элементов в магии и составлении заговоров.
Мантра для достижения цели
ИЯ
Этот звук благотворно действует на энергетическом плане на чакру Анахата, а на физическом плане на сердце, что позволяет использовать его в заговорах на сохранение семьи и гармонию отношений. Распевание этого звука усиливает связь с Ангелом-Хранителем, способствует более гармоничному восприятию себя в мире.
Мантра для понятия внутреннего состояния
ОЙ
Этот звук, как вой, его можно подвывать. Он структурирует внутреннюю энергетику и помогает понять внутреннее состояние в кокретный момент времени.
Мантра для защиты
МПОМ
Это энергетическая замкнутая цепочка вибраций. Распевание этого звука создает временную защиту от воздествия черной магии, помогает настоять на своем и использовать возможности настоящего момента.
Мантра для возвращения сил
ЭУОАИЫАОМ
Очень важная энергетическая цепочка, используемая в белой магии для возвращения сил и самостоятельности человеку после тяжелой порчи. Сначала надо научиться произносить эти звуки отдельно, правильно и чисто без напряжения, а затем перейти к их слитному напеванию.
Мантра для улучшения семейных отношений
НГОНГ
Распевание этого звука помогает улучшить семейные отношения и получить большую свободу в достижении цели.
Мантра для открытия астрального зрения
АУМ КАССИЯНА ХАРА ШАНАТАР
Читать 50 дней по 777 раз в сутки
Мантра для исполнения желания
ХАРЕ КРИШНА, ХАРЕ КРИШНА, КРИШНА КРИШНА, ХАРЕ ХАРЕ; ХАРЕ РАМА, ХАРЕ РАМА, РАМА РАМА, ХАРЕ ХАРЕ
Если ее петь и мечтать о каком-либо желании - оно сбудется.
Универсальная мантра для привлечения денег
АУМ НАМО ДХАНАДАЙЕ СВАХА
Эту мантру надо читать 5 раз в день. Вы будете благословлены счастьем и богатством.
Мантра для получения и сохранения богатства
АУМ ХРИМ А-СИ-А-У-САА ХРИМ НАМАХ
Эту мантру желательно произносить утром до 8 часов, количество повторений кратно 3.
Мантра для благополучия и процветания
АУМ ХРИМ ХРИМ ШРИМ КЛИМ БЛУМ КАЛИКУНДА ДАНДА СВАМИНА СИДДХИМ ДЖАГАДВАСАМ ААНАЙЯ ААНАЙЯ СВАХА
Мантра повторяется 108 раз в утренние часы до 8 часов утра. Лучший день для повторения - четверг.
Мантра для усвоения знаний
ОМ ШРИ САРАСВАТЬЯ НАМАХ
Она помогает легко усваивать знания, помогает созидать. Бодрит, омолаживает, активизирует "спящие" клетки головного мозга. Мантра оказывает целебное действие, человек меньше устает, а значит - достигает большего.
Мантра Ганеши
ОМ ШРИ МАХА ГАНАПАТАЙЕ НАМАХ
Для достижения успеха в своих начинаниях читайте эту мантру, и она дарует вам свободу в достижении цели, умиротворение, успех в делах.
Мантра для лечения заикания
ДААЗАМААТОМ
Мантры для здоровья
Очень сильная мантра для улучшения здоровьяСимвол здоровья
ОМ ТРЙЯМБАКАМ ЙАДЖАМАХЕ СУГАНДХИМ ПУШТИ ВАРДХАНАМ УРВАРУКАМИВА БАНДХАНАН МРИТИЙОР МУКШИЯ МАМРИТАТ
Одна из основных мантр Высшего счастья. Она наделяет здоровьем, защищает от болезней и несчастных случаев. Приносит радостное настроение, счастье, любовь, улучшает взаимоотношения. Помогает найти спутника жизни. Также полезно повторять ее для исцеления и в день рождения. Если вам нужно избавиться от болезни, то начинать мантру лучше на убывающей луне. А если просто улучшить состояние здоровья, то на возрастающей.
Мантра для здоровья
ОМ БХАЙКАНАДЗЕ БХАЙКАНАДЗЕ МАХА БХАЙКАНАДЗЕ РАТНА САМУ ГАТЭ СВАХА.
Когда принимаете лекарства, она помогает оживить лекарства и усилить их действие. Очень полезно представлять, как рассасывается болезнь, когда поете эту мантру.
Тибетская мантра для здоровья
ЧУНЕ-ДО АЛМА РУНГ-НИНТ
Мантры помогающие избавиться от страха, приобрести силы для борьбы со страхом
ДЖАЙЯ ДЖАЙЯ ШРИ НРИСИМХА
НИРБХАО НИРВЭР АКОЛ МОРТ
Начинать работать с мантрами лучше на убывающей луне. Читать мантры по 108 раз. Можно начать сразу обе - одну утром, другую вечером, а можно сначала первую, через месяц другую. Как лучше для вас, кроме вас никто не скажет.
Мантра очищения кармы, удачи и защиты от всех видов напастей
ОМ БХУР БХУВАХ СВАХА ТАТ СВИТУР ВАРЕНЬЯМ БХАРГО ДЭВАСЬЯ ДХИМАХИ ДХИЙО ЙО НАХ ПРАЧОДАЙЯТ
Мантра активизации мыслительных процессов
ОМ АРА ВАЗА НАГИ
Мантра защиты
ГАТЭ ГАТЭ ПОРО ГАТЭ ПОРО СОМ ГАТЭ БОДХИ СВАХА
Мантра, исцеляющая болезни
ОМ БХАЙКАНДЗЕ БХАЙКАНДЗЕ МАХА БХАЙКАНДЗЕ РАТНА САМУ ГАТЭ СОХА
Визуализируйте, что лазурно-голубой исцеляющий свет направляется на вас с небес во время пения этой мантры. Повторяйте ее радостно, с удовольствием, по 108 раз, утром и вечером.
Мантры богатства
1) ОМ ХРИМ КЛИМ ШРИМ НАМАХ
Это мантра для ежедневного пения. Практикующий обретает богатство.
2) КЛИМ ХРИШИКЕШАЙА НАМАХ
Мантра материального богатства
3) ОМ ДРАМ ДРИМ ДРАУМ САХ ШУКРАЙЕ НАМАХ
Увеличение материального и духовного богатства.
Мантра любви и очищения
4) ОМ HАMO НАРАЙАНАЙА
Дарует радость и любовь. Мантра оживляет воду, усиливает очищающие свойства воды. Гармонизирует тело человека.
Мантра здоровья
5) ОМ БРАМ БРИМ БРАУМ САХ БУДХАЙЕ НАМАХ
Обретение удачи
6) ОМ САЧЧИДЭКАМ БРАХМА
Постижение наук, развитие интеллекта и обретение удачи.
Защита
7) ОМ ШРИ ДУРГАЙАЙ НАМАХ ОМ ДУРГАМ ДЕВИМ САРАНАМАХАМ ПРАПАДЙЕ
Эта мантра рассеивает дурные влияния, защищает от темных сил, устраняет препятствия. Она разрушает апатию, эгоизм, дарует силу, величие и влиятельность.
Преуспевание
8) ОМ ШРИ МАХАЛАКШМИЯЙ НАМАХ
Эта мантра дарует все виды преуспевания: духовного и материального. Она приносит гармонизацию в семье. Дарует богатство, здоровье, удачу, мудрость, человечность, сострадание, смирение, добродетель, самопознание.
Особо популярные мантры
9) ОМ ШРИ МАХА ГАНАПАТАЙЕ НАМАХ
10) ОМ ШРИ ГАНЕШАЯ НАМАХ
Эти две мантры разрушают все препятствия, которые могут возникнуть на жизненном пути. Они даруют совершенство в интеллектуальной деятельности и правильное восприятие и различение людей, концепций, реального и нереального; дают познание элементов, из которых состоит мир; а также приносят успех в литературной деятельности, искусстве и коммерции.
Признаюсь, я лично читал эти мантры по 108 раз ежедневно. Они одни из самых моих любимых. Чтобы не запутаться в количестве произнесенных мантр, можно пользоваться четками. Нить моих четок насчитывает 108 бусин; 108 - священное число. 1 - символизирует Высшую энергию, Божество; 0 - совершенство Божественного творения, а 8 - вечность. Четки помогают лучше сосредоточиться на мантре и ее сути.
Мантры и молитвы всегда лучше произносить на том языке, на котором они были созданы. Даже если Вы не понимаете ее значение. Просто вдумайтесь о том, что сохраняется связь между словами, ритмом, значением слов, музыкой. А перевод нарушает эту связь.
Повторять мантру нужно на выдохе. Обращайте внимание на артикуляцию и правильное произношение.
Слог ОМ является источником всех мантр. ОМ - самая главная из мантр. Через эту мантру происходит осознание Бога и соединение с Божественным потоком.
!!!! Литания против страха
{{{
I must not fear.
Fear is the mind-killer.
Fear is the little-death that brings total obliteration.
I will face my fear.
I will permit it to pass over me and through me.
And when it has gone past I will turn the inner eye to see its path.
Where the fear has gone there will be nothing.
Only I will remain.
}}}
перевод:
{{{
Я не должен бояться.
Страх — убийца разума.
Страх — это маленькая смерть, влекущая за собой полное уничтожение.
Я встречусь лицом к лицу со своим страхом.
Я позволю ему пройти через меня и сквозь меня.
И, когда он уйдет, я обращу свой внутренний взор на его путь.
Там, где был страх, не будет ничего.
Останусь лишь я
}}}
сокращённо:
{{{
Я не буду бояться.
Страх — убийца разума.
Я встречусь лицом к лицу со своим страхом.
Я позволю ему пройти сквозь меня
}}}
[[Литания против страха|http://ru.wikipedia.org/wiki/%CB%E8%F2%E0%ED%E8%FF_%EF%F0%EE%F2%E8%E2_%F1%F2%F0%E0%F5%E0]]
# [[Медитация улучшает память и повышает продуктивность|http://lifehacker.ru/2012/07/13/meditaciya/]] - или [[локально|Медитация введение]]
# [[Как приучить себя медитировать каждый день: практика двухминутной медитации|http://lifehacker.ru/2012/04/14/kak-priuchit-sebya-meditirovat-kazhdyjj-den-praktika-dvukhminutnojj-meditacii/]] - или [[локально|Медитация за две минуты]]
# [[Укрепляем сердце и снимаем стресс с помощью медитации|http://lifehacker.ru/2012/04/04/ukreplyaem-serdce-i-snimaem-stress-s-pomoshhyu-meditacii/]] - или [[локально|Медитация о пользе]]
# [[Техника глубокой медитации|http://lifehacker.ru/2012/07/19/deep-meditation/]] - или [[локально|Медитация глубокая]]
# [[28 способов отдохнуть за 5 минут|http://lifehacker.ru/2012/06/25/28-sposobov-otdokhnut-za-5-minut/]] - или [[локально|отдохнуть за 5 минут]]
# [[Как начать медитировать. Медитации для начинающих.|http://luking.ru/kak-nachat-meditirovat/]]
# [[Медитации для успокоения и концентрации|http://ktoperviy.ru/ezoterika/meditacii-dlya-uspokoeniya-i-koncentracii.html]]
[[Кайдзен|Кайдзен - японская методика против лени]]
[[Мантры]]
! Медитация улучшает память и повышает продуктивность
Мы много рассказывали [[о пользе медитации|Медитация о пользе]] (она помогает снять хронические боли и стресс, «перезагрузиться», улучшить работу мозга), а в этом посте приведём ещё один аргумент в её пользу: медитация помогает работать продуктивнее.
Недавнее исследование, проведённое в Университете Вашингтона, показало, что медитация учит работников лучше концентрироваться, помогает удерживать в голове больше рабочих деталей, оставаться энергичными и меньше подвергаться воздействию негативных эмоций.
В исследовании приняли участие 3 группы по 12-15 участников. Первая группа в течение 8-ми недель практиковала медитацию, вторая — расслабление тела, третья группа была контрольной, они вели привычный образ жизни.
По прошествии 8 недель у участников проверили скорость и точность их работы, а также способность к многозадачной работе. Также проверили память и уровень стресса у участников.
Превзошла всех первая группа. Память у них улучшилась, они были более внимательны и менее подвержены стрессу. Третья группа начала практиковать медитацию через 8 недель после первой группы. После начала регулярных медитаций у них также стало отмечаться снижение уровня стресса. Группа, которая практиковала расслабление, как ни странно, не стала более расслабленной на работе.
Практике медитации рекомендуется посвящать несколько часов в неделю, но даже 2 минуты в день помогут вам достичь результатов. Подробнее о том, как начать медитировать в нашей статье: [[«Как приучить себя медитировать каждый день: практика двухминутной медитации»|Медитация за две минуты]] .
[[Медитация улучшает память и повышает продуктивность|http://lifehacker.ru/2012/07/13/meditaciya/]]
! Техника глубокой медитации
Сергей Булаев, продюсер Lifehacker.ru, решил поделиться своим опытом медитации после того, как побывал на ретрите в Таиланде. Поверьте, это действительно очень интересно!
Думаю, что о медитации слышали все и при этом каждый, скорее всего, разное. Медитировать можно всего несколько минут в день, а можно уходить в специально отведенные для этого места и просветляться в течении нескольких недель. И последний вариант особо интересен, так как это можно сравнить чуть ли не с перерождением.
!! Нет ничего сложного и волшебного
Как показывает мой опыт, медитация считается чем-то волшебным, мистическим. Чем-то недоступным каждому. Чем-то, чем люди занимаются в индийских ашрамах или в залах для йоги. Это совсем не так. Медитация больше похожа на умственную зарядку, а вернее даже разрядку. Что-то вроде чистки зубов.
Медитация всего лишь тренирует способность вырываться из непрерывного потока мыслей, в который обычно погружены люди. Учит останавливать внутренний диалог. Останавливать то, что люди называют «накручиванием себя».
Огромное число техник медитации не добавляет ясности. Действительно, есть сотни способов достичь «безмыслия», от очень простых до очень сложных, и далеко не всегда люди натыкаются на простые методы. В результате у них ничего не получается, и вера в то, что это может хоть как-то работать, пропадает.
!! Моя техника
Хочу поделиться действительно простой техникой, которую я нашёл в книге, рекомендованной моим другом «Глубокая медитация», написанной неким Yogani. К сожалению, книга на английском и большинство моих друзей не могут её прочитать. Поэтому я и хочу рассказать об этой технике здесь на русском языке.
Итак, ''техника глубокой медитации''.
Скорее всего вы уже встречали слово «мантра». Оно означает слово, набор слов, или просто звуков, которые человек непрерывно повторяет. Это позволяет вытеснить из сознания другие мысли, тем самым подавив внутренний диалог. Именно с использованием мантры мы и будем медитировать.
Yogani предлагает использовать словосочетания «I AM» (айем, переводится как «я есть»). Причём предлагает работать именно с этим сочетанием, независимо от вашего родного языка, так как важен не смысл, а просто звуки. На самом деле вообще ничего не важно и вы вполне можете использовать любую другую мантру, будь то «я есть», «Родина» или «Господи помилуй».
Вам понадобится 20 минут, во время которых никто не будет вас отвлекать. Сядьте в удобное место в удобной позе. На кресло или на диван. Совсем не обязательно садиться на коврик для йоги в подмасане. Более того, я рекомендую вам этого не делать даже если вы умеете. Вам просто нужно будет расслабиться. Однако не стоит пытаться медитировать лёжа. Очень часто это приводит к погружению в сон.
Поставьте таймер или будильник на срабатывание через 20 минут. Выберите наиболее мягкий, спокойный сигнал. А можете и не ставить вовсе. Просто убедитесь, что с места, в котором вы сидите, хорошо и без лишних движений видны часы.
Закройте глаза, расслабьтесь. Вглядитесь в темноту и цветные пятна, которые будут мелькать на закрытых веках. Не волнуйтесь, вам не надо ничего там разглядеть, это просто хаотичные пятна. Сделайте пару спокойных вдохов-выдохов. Произнесите про себя вашу мантру. Прислушайтесь к внутреннему молчанию, которое наступит после этого.
Ваш мозг немедленно вернётся к размышлениям, которые пойдут своим чередом. Это нормально. Это обычное дело. Как только вы поймёте, что в вашей голове есть мысли — опять произнесите мантру. Спокойно, не торопясь. Послушайте тишину. Мозг опять вернётся к размышлениям.
Не стремитесь полностью очистить голову от мыслей. Вряд ли это у вас получится. И самое главное, не расстраивайтесь и не осуждайте себя, если вам будет казаться, что вы слишком долго не замечали, что отвлеклись от мантры. Слишком поздно не бывает. Важно заметить и произнести её, не важно когда.
У вас обязательно будут мысли «мне надоело тут сидеть», «может на сегодня хватит?». Это нормально, просто произнесите мантру про себя очередной раз.
Не надо связывать произнесение мантры с вдохами или выдохами. Не обращайте на дыхание внимание. А если обратили, просто произнесите мантру.
Возможно кто зайдёт в комнату, позвонит по телефону и вы будете вынуждены общаться. Ничего страшного, просто добавьте потраченное на это время к времени медитации.
Не нужно надеяться на какие-то результаты, просветление, понимание. Просто заниматься медитацией иногда, а лучше регулярно. Потихоньку начнут происходить изменения. Главное не ждите их :)
[[Техника глубокой медитации|http://lifehacker.ru/2012/07/19/deep-meditation/]]
! Как приучить себя медитировать каждый день: практика двухминутной медитации
В последнее время тема медитации стала попадаться мне на глаза все чаще и чаще. Я не суеверная, но это определенно знак — пора наконец-то остановиться и оглядеться не только вокруг, но и заглянуть внутрь.
Многие думают, что научиться медитации очень сложно. В чем-то они правы и проблемы действительно есть. Так как, например, мне, как холерику, крайне сложно просидеть на одном месте длительное время, полностью вытеснив из головы мысли о насущном.
Лео Бабаута в одном из своих постов на Zenhabits советует начинать с двух минут. И это действительно работает.
Мы уже не один раз писали о тех преимуществах, которые дает медитация. Она учит фокусироваться, снимает стресс, помогает избавиться от вредных привычек, улучшает память и тренирует внимательность, улучшает самоконтроль, снижает давление, нормализирует обмен веществ, снижает частоту пульса и многое другое.
Думаю, даже этого списка вполне достаточно для того, чтобы хотя бы попробовать. Я уже не говорю о том, что, возможно, это будет чуть ли не ваша единственная возможность побыть наедине с самим собой при соблюдении обычного бешеного ритма жизни.
!! Выделите для себя хотя бы 2 минуты в день
Этого будет вполне достаточно. Глупо было бы утверждать, что у вас нет времени на медитацию. Две минуты — это очень-очень мало! Так что никаких отмазок.
!! Создайте ритуал
Привяжите медитацию ко времени суток или к какому-нибудь действию. Например, рано утром, когда все еще спят, или во время первой чашки кофе, или во время обеда — выберите самое удобное для себя.
!! Найдите тихое место
Это может быть ваша квартира ранним утром или поздним вечером, когда вы можете быть точно уверены, что вас никто не побеспокоит. Или это может быть парк с лавочкой в каком-нибудь укромном уголке. Или любое другое тайное место, где не так людно и вы можете спокойно посидеть хотя бы несколько минут. Медитация на берегу моря или возле любого другого водоема оставляет самые приятные впечатления.
!! Сядьте поудобнее
Вы не должны сосредотачиваться на своей позе и постоянно думать о том, как же вам, все-таки, удобнее. Сядьте так, как вам удобно. Конечно, желательно при этом держать спину прямо, так что если совсем сложно, можно облокотиться на стену или сесть на стул с удобной спинкой.
!! Начинайте с малого
Начните хотя бы с двух минут. Когда почувствуете, что можете делать это дольше, постепенно увеличивайте время. Через неделю перейти к 5 минутам, через две — к 10, а через 21 день — к 15 или 20 минутам.
!! Сфокусируйтесь на дыхании
Вдох-выдох, медленно, сфокусировано. Вы должны полностью сосредоточиться на дыхании и провожать каждый вдох и выдох, чувствуя, как воздух входит в вас, наполняя легкие, и как медленно выходит. Считайте. На раз — вдох, на два — выдох. На три — вдох, на четыре — выдох. И так до десяти. Затем начните сначала.
Глаза открыты, смотрите вниз, фокус рассеян. Если с открытыми глазами вы чувствуете дискомфорт, можете закрыть их.
Не переживайте, если вы отвлеклись от дыхания на свои мысли — в первые дни это случается очень часто. Если мысль в голове все-таки появилась, обратите на нее внимание, а потом снова вернитесь к дыханию.
Со временем вы научитесь не отвлекаться на более продолжительное время.
!! Расширение границ вашей практики
Медитировать можно не только сидя сосредоточившись на дыхании. Вы можете тренировать свое сознания во время повседневной жизни. Например, во время поедания обеда, прогулки по парку или даже мытья посуды.
Не просто проглатывайте свой обед, а смакуйте его небольшими кусочками, медленно пережевывая и полностью ощущая его вкус, раскладывая на ингредиенты.
Не просто гуляйте по парку, а созерцайте происходящее. Обратите внимание на яркие краски, на звуки и запахи. Сосредоточьтесь на своих ощущениях.
Попробуйте поэкспериментировать с чайным ритуалом, придавая значение каждому движению.
И даже во время мытья посуды вы можете не просто мыть ее, а сосредоточиться на каждом движении. Как вы это делаете, как появляется пена, как вода стекает по тарелке. Получается что-то вроде осознанной (вдумчивой) медитации.
Основная моя ошибка была в том, что я пыталась начинать сразу с 30 минут. Это было сложно и у меня либо не получалось отключить свой внутренний голос, либо я просто засыпала, что тоже не очень-то и правильно. Достигнуть правильного состояния действительно очень сложно. Но если начинать с маленьких шагов, у вас просто обязано все получиться.
[[Как приучить себя медитировать каждый день: практика двухминутной медитации|http://lifehacker.ru/2012/04/14/kak-priuchit-sebya-meditirovat-kazhdyjj-den-praktika-dvukhminutnojj-meditacii/]]
! Укрепляем сердце и снимаем стресс с помощью медитации
Заботясь о красоте своего тела, мы должны не забывать и о нашем главном моторе — о сердце. Правильное питание, кардио-тренировки и спокойствие, только спокойствие — залог здорового сердца. И если первые два пункта мы в состоянии контролировать на 99,9%, то со стрессом дело обстоит немного иначе. Мы можем тысячу раз повторять про себя, что мы не будем переживать из-за проблем на работе. Но в горячий период готовы взорваться просто от того, что кто-то случайно наступил нам на ногу в общественном транспорте.
И больше всего от подобного поведения страдает наше сердце. Встаньте утром на 10 минут раньше и проделайте описанное ниже упражнение. Оно снимает напряжение, укрепляет сердце и помогает сохранять спокойствие на протяжении всего дня.
Если совсем припекло, эту медитацию можно провести на работе в особо острые моменты, чтобы успокоиться и не сорваться на коллег или клиентов. Главное найти укромное и спокойное место на 5-10 минут.
Это упражнение разработала Сусанна Бэр, одна из основателей Института прикладной медитации в Тусоне, штат Аризона. По её словам она работала с людьми, которые с помощью этого упражнения понижали свое давление.
!! Упражнение
Сядьте прямо, спина ровно, грудь вперед, плечи опущены и отведены назад, голова прямо.
''Сосредоточьтесь.'' Закройте глаза и прочувствуйте своё дыхание. Вдох-выдох. Почувствуйте поток входящего и исходящего воздуха. Ладони можно положить на грудь в районе сердца или просто оставить их опущенными по бокам.
''Прислушайтесь к своему сердцебиению.'' Медленно вдохните, задержите на секунду дыхание и медленно выдыхайте. Если не получается услышать свое сердце, почувствуйте его пульсацию, положив ладони на грудь в районе сердца или прощупав пульс на запястье.
''Синхронизируйте дыхание.'' Позвольте вашему дыханию войти в один ритм с сердцем. Это не означает, что вы должны вдыхать и выдыхать на каждый удар. Попробуйте вдыхать в течении 8 ударов, а затем на столько же ударов продлить выдох. Продолжайте дышать в этом ритме от 5 до 10 минут.
Попробуйте проделать это упражнение утром, для того чтобы подготовиться к рабочему дню и зарядиться энергией. И вечером, чтоб очистить голову и тело от беспокойных мыслей и подготовиться ко сну. Ведь спокойный и здоровый сон также является залогом не только нашего здоровья, но и повышает нашу продуктивность.
Если вы все ещё думаете, что медитация — это занятие, более подходящее дамам, у вас есть шанс попробовать что-то новое и изменить свое мнение. Подумайте, это ведь всего 10 минут в день, а результатом могут быть дополнительные 10 лет здоровой и полноценной жизни.
[[Укрепляем сердце и снимаем стресс с помощью медитации|http://lifehacker.ru/2012/04/04/ukreplyaem-serdce-i-snimaem-stress-s-pomoshhyu-meditacii/]]
#[[Метрики кода|http://dimakudr.blogspot.ru/2010/05/blog-post_27.html]]
#[[Программный код и его метрики|http://habrahabr.ru/company/intel/blog/106082/]]
#[[Метрики Кода И Их Практическая Реализация В Subversion И Clearcase. Часть 1 - Метрики|http://cmcons.com/articles/CC_CQ/dev_metrics/mertics_part_1/]]
#[[C and C++ Code Counter|http://sourceforge.net/projects/cccc/]]
#[[Code Analyzer|http://sourceforge.net/projects/codeanalyze-gpl/]]
#[[GMetrics|http://gmetrics.sourceforge.net/gmetrics-CyclomaticComplexityMetric.html]]
#[[Cyclomatic Complexity Viewer|http://www.codeproject.com/Articles/10705/Cyclomatic-Complexity-Viewer]]
В будущем буду описывать тут свои мечты в особенности если они вдруг начнут сбываться.
# [[Город-купол]]
# [[Самодвижущаяся дорога]]
# [[Плоский водозащищённый телефон]]
# [[Транспорт будущего]]
# [[BXT]]
# [[Small Hamster]]
# [[Лунная база]]
#[[mm-3.blogspot.com|http://mm-3.blogspot.com/]] - мой маленький блог [[в браузере|FrameBrowserBS]]
#[[mm-3.livejournal.com|http://mm-3.livejournal.com/]] - я в жж [[в браузере|FrameBrowserLJ]]
#[[mm3.tiddlyspot.com|http://mm3.tiddlyspot.com/]] - моя личная wiki [[в браузере|FrameBrowserTS]]
#[[mm3.name|http://mm3.name/]] - моё первое самостоятельно детище так же можно посмотреть в [[браузере|Mini Browser]]
#[[mm0.twitter.com|http://twitter.com/mm0]] - я в твиттере
#[[mm0.ya.ru|http://mm0.ya.ru/]] - я на яндексе
#[[mm3.tumblr.com|http://mm3.tumblr.com]] - нечто твитероподобное [[в браузере|FrameBrowserTB]]
#[[Просто ЛОР|http://www.linux.org.ru/]] - я тут обитаю [[в браузере|FrameBrowserLOR]]
#[[LinkedIn|http://www.linkedin.com]]
#[[4PDA|http://4pda.ru/forum/index.php?autocom=favtopics]] - тут тоже появляюсь [[в браузере|FrameBrowser4PDA]]
#[[Я на гуглокоде|http://code.google.com/p/mm3/]]
#[[Я на GitHub|https://github.com/mm3]]
#[[Я на Launchpad|https://launchpad.net/~mm3-b]]
#[[Я на Sourceforge|https://sourceforge.net/users/mouse166]]
#[[Я на OpenShift|http://nodetest-mm3.rhcloud.com/]]
#[[Я на Could9 IDE|https://c9.io/mm3]]
#[[Fossil репозиторий проектов|https://chiselapp.com/user/mm3/repository/mm3]]
#[[Veracity репозиторий|https://mm3.onveracity.com]]
#[[Халява TFS от мелкомягких|https://mm3.visualstudio.com/]]
#[[Домашняя страничка|http://mm3-home.no-ip.org]]
[[jsfiddle.net|http://jsfiddle.net/]]
[[RSS Reader]]
[[Самое интересное]]
[[Занимательные ссылки]]
|!заголовок левой колонки|!заголовок правой колонки|
|>| объединение ячеек по горизонтали |
| объединение ячеек по вертикали |левое выравнивание|
|~| правое выравнивание|
|bgcolor(#a0ffa0):цветовыделение| центрирование |
|Таблица|c
Эта таблица набрана так:
{{{
|!заголовок левой колонки|!заголовок правой колонки|
|>| объединение ячеек по горизонтали |
| объединение ячеек по вертикали |левое выравнивание|
|~| правое выравнивание|
|bgcolor(#a0ffa0):цветовыделение| центрирование |
|Таблица|c
}}}
Прошу не обвинять в поклонении перед Западом, я просто оставил прилагавшийся к плагину файл, это все же просто демо. Ну, перевел кое-что.
!!!!Обычные напоминания, день месяца каждый год.
*<<reminder month:1 day:1 title:"Новый Год, один из моих любимых дней" >>
*<<reminder month:2 day:2 title:"День Сурка ;)" >>
!!!!Напоминания со смещением (...день недели месяца)
*Третий понедельник февраля
**<<reminder month:2 day:15 offsetdayofweek:1 title:"Американский День Президента">>
*Второе воскресенье мая
**<<reminder month:5 day:8 offsetdayofweek:0 title:"Американский День Матери">>
*Последний понедельник мая (обратите внимание -- offsetdayofweek отрицательное число, что означает обратный отсчет)
**<<reminder month:5 day:31 offsetdayofweek:-1 title:"Memorial Day">>
!!!И просто так
*<<reminder month:4 day:1 title:"День Юмора" >>
*<<reminder month:10 day:31 title:"Хэллоуин" >>
*<<reminder month:12 day:25 title:"Католическое рождество" >>
Начало всему всегда должно быть...
#[[Hello people]] - приветствие
#[[Android]] - мои заметки по андроиду
#[[Ссылко-концентратор]] - всякие ссылки
#[[Big XML Table]] -мой маленький проект
#[[Linux]] - заметки по линуксу
#[[ДАО]] - запись на случай просветления
#[[Бред]] - просто бред
#[[Ракета]] - как построить маленькую ракету на дому
#[[фильмы]] - что хочется скачать
#[[музыка]] - разные названия разных групп и альбомов
#[[День варенья]] - дни рождений моих близких друзей
#[[Мечты]] - всякие разные несбыточные мечты
#[[Справка|Вики-разметка (примеры)]] - справка
#[[Mini Browser]] - проверка браузера
#[[node.js]] - node.js
#[[Шифраторы]] - проверка различных шифрующих плагинов
#[[Календарь]] - маленький календарик
#[[прочее]] - не помню
#[[Игры]] - несколько игр в которые я возможно поиграю
#[[3D-принтер]] - и всё что с ним связано
#[[конец]]
конец всему всегда будет...
Настройка карбюратора, диагностика (ВАЗ, Нива, по другим маркам не знаю): Борисычев Андрей dyukach.www.nn.ru/
Территориально на Ванеева 155, по предварительной записи, телефон 89056664816
По карбюратору, зажиганию езжу только туда
Также могу порекомендовать сервис ВиРо, находятся на Бринского в гаражах, на повороте с Бринского на Хохлова поехать прямо вниз, далее второй поворот направо. Телефон 91079З9675 Виктор. Почти три года по своей Ниве делаю там слесарные работы (подвеска, ходовая, трансмиссия), косяков не замечено, а перебрал за это время я её почти всю. Пример: на покатушках в выходные порвал передний редуктор, в понедельник в 9 утра загнал машину в бокс, в 14 уехал на готовой машине, в это время также вошел трансфер на переборку редуктора
Также могу порекомендовать -Shadow- mazurik.www.nn.ru/ по сварочным работам
[[Как получить американский диплом бакалавра бесплатно и не выходя из дома|http://lifehacker.ru/2014/04/20/kak-poluchit-amerikanskij-diplom-bakalavra-besplatno-i-ne-vyxodya-iz-doma/]]
[[Pennsylvania State University—World Campus Online Scholarships|http://student.worldcampus.psu.edu/paying-for-your-education/scholarships-available-for-penn-state-world-campus-students?status=undergraduate]]
Один из самых лучших ВУЗов мира, Пенсильванский университет предлагает множество стипендий для обучения онлайн, включая Jane Ireland Student Fund Scholarship, Alpha Sigma Lambda, Trustee Scholarship Program, Fischer Family Scholarship for Continuing and Distance Education, Penn State Outreach Advisory Board Scholarship in the World Campus и Alexander P. Fletcher Navy Student Award. Полный список можно посмотреть на официальном сайте ВУЗа.
[[Embry-Riddle Aeronautical University—Worldwide Online Scholarships|http://worldwide.erau.edu/finance/financial-aid/scholarships/index.html]]
Отличная онлайн-площадка для образования и больше 30 миллионов долларов ежегодно на стипендии. Наиболее известная стипендия – Worldwide Scholarship для студентов с высоким потенциалом и заслугами в учебе. Дополнительная информация по поводу стипендий здесь.
[[University of Wisconsin — Online Superior Scholarships|http://www.uwsuper.edu/dl/current/scholarships.cfm]]
Этот ВУЗ также популярен среди студентов онлайн-программ своими стипендиями. Самые знаменитые из них – Educational Leadership Department Scholarships, Dean of Students Scholarships, Communicating Arts Scholarships and Distance Learning Center/UW-Superior Foundation Scholarships. Больше информации – на официальном сайте.
[[University of Illinois — Chicago Online Scholarships|http://www.wiu.edu/student_services/scholarship/]]
Также есть несколько стипендий для студентов бакалавриата онлайн-программ. Самая популярная – BGS Alumni Scholarship, которую могут получить иностранные студенты. Для уточнения всех деталей можно связаться с университетом.
[[Indiana University-Purdue University — Fort Wayne Online Scholarships|http://www.ipfw.edu/financial/]]
В Индианском университете есть несколько онлайн-программ, самые популярные из которых Bachelor of General Studies, Registered Nurse (RN) to Bachelor of Science (B.S.) и Information Systems B.S. Degree. Некоторые из них предусматривают стипендии. Детали на сайте ВУЗа.
[[Arizona State University Online Scholarships|http://asuonline.asu.edu/what-it-costs/scholarship-opportunities]]
Предлагает онлайн-программы обучения как для местных, так и иностранных студентов. Самые популярные – Bachelor of Applied Science in Health Sciences, Internet and Web development and operation management. ВУЗ также предлагает программы бакалавриата в Art History, Business and Communication, Criminal Justice and Criminology, Electrical Engineering, English, History, Liberal Studies, Nursing, Philosophy. О стипендиях можно узнать здесь.
[[University of Alabama—Huntsville Online Scholarships|http://www.uah.edu/financial-aid/aid/scholarships/gen-info]]
Здесь можно получить диплом онлайн по нескольким программам, одна из популярных – Bachelor of Science in Nursing. Информация о стипендиях на сайте ВУЗа.
[[Daytona State College Scholarships|http://www.daytonastate.edu/online/]]
Также пользуется популярностью среди студентов онлайн-программ. Самые востребованные из них – Bachelor of Applied Science in Supervision and Management, Bachelor of Science in Engineering Technology и Bachelor of Science in Education. Стипендии здесь.
[[University of Florida Undergraduate Online Scholarships|http://www.admissions.ufl.edu/scholarships.html]]
В этом университете хорошие онлайн-программы, как бакалавриата, так и магистратуры. Некоторые из них – Bachelor of Science Interdisciplinary Studies in Environmental Management in Agriculture and Natural Resources, Bachelor of Science in Business Administration, Bachelor of Science in Health Education and Behavior, Bachelor of Science in Sport Management, Bachelor of Arts in Biology, Bachelor of Arts in Criminology & Law, Bachelor of Arts in Geology and Bachelor of Science in Psychology. Информация о стипендиях на сайте ВУЗа.
[[37 сайтов для обучения чему-то новому|http://lifehacker.ru/2015/07/23/37-sajtov-dlya-obucheniya/]]
Онлайн-курсы
edX — онлайн-курсы от лучших университетов мира.
Coursera — бесплатные курсы от преподавателей лучших вузов со всего мира.
Coursmos — подборки небольших курсов, которые не занимают много времени.
Highbrow — ежедневная подборка лучших курсов, которая отправляется вам на почту.
Skillshare — онлайн-курсы и проекты, которые расширяют кругозор.
Curious — видеоуроки для улучшения профессиональных навыков.
Lynda — курсы о технологиях, бизнесе и креативности.
CreativeLive — бесплатные креативные курсы от мировых экспертов.
Udemy — курсы по компьютерным специальностям.
Программирование
Codecademy — интерактивное обучение программированию.
Stuk.io — обучение программированию с нуля.
Udacity — курсы от Google, Facebook, mongoDB, AT&T и других крупных компаний.
Platzi — курсы по дизайну, маркетингу и программированию.
Learnable — курсы по веб-разработке.
Code School — практические задачи для обучения программированию.
Thinkful — обучение в виртуальных классах с ментором тет-а-тет.
Code.org — гайды по программированию для начинающих.
BaseRails — обучение Ruby on Rails и другим веб-технологиям.
Treehouse — разработка на HTML, CSS и приложений для iOS.
One Month — обучение основам создания веб-приложений за месяц.
Dash — создание веб-сайтов.
Работа с информацией
DataCamp — онлайн-туториалы и курсы по науке о данных.
DataQuest — интерактивное обучение науке о данных.
DataMonkey — улучшение аналитических навыков с помощью игры.
Языки
Duolingo — бесплатное обучение иностранным языкам.
Lingvist — программа обучения языку за 200 часов.
Busuu — сообщество пользователей, которые хотят выучить новый язык.
Memrise — карточки для расширения словарного запаса.
Кругозор
TEDed — категория образовательных видео с конференции TED.
Khan Academy — огромная библиотека интерактивного контента.
Guides.co — коллекция различных гайдов.
Learnist — текстовые и видеолекции от экспертов в разных областях.
Prismatic — изучение нового, основываясь на ваших предпочтениях.
Snapguide — тысячи гайдов о том, как сделать что-то своими руками.
Бонус
Chesscademy — обучение игре в шахматы.
Pianu — интерактивное обучение игре на фортепиано.
Yousician — персональный учитель по игре на гитаре.
отдам в добрые руки программиста, умный, общительный, любознательный, к системам контроля версий приучен, промышленного программирования не боится, основные навыки: поиск и устранение багов и добавление новых фичь на любом языке программирования и под любую платформу.
Памятка пользователям ssh
Серверное администрирование*, Системное администрирование*, Настройка Linux*
abstract: В статье описаны продвинутые функций OpenSSH, которые позволяют сильно упростить жизнь системным администраторам и программистам, которые не боятся шелла. В отличие от большинства руководств, которые кроме ключей и -L/D/R опций ничего не описывают, я попытался собрать все интересные фичи и удобства, которые с собой несёт ssh.
Предупреждение: пост очень объёмный, но для удобства использования я решил не резать его на части.
Оглавление:
управление ключами
копирование файлов через ssh
Проброс потоков ввода/вывода
Монтирование удалённой FS через ssh
Удалённое исполнение кода
Алиасы и опции для подключений в .ssh/config
Опции по-умолчанию
Проброс X-сервера
ssh в качестве socks-proxy
Проброс портов — прямой и обратный
Реверс-сокс-прокси
туннелирование L2/L3 трафика
Проброс агента авторизации
Туннелирование ssh через ssh сквозь недоверенный сервер (с большой вероятностью вы этого не знаете)
Управление ключами
Теория в нескольких словах: ssh может авторизоваться не по паролю, а по ключу. Ключ состоит из открытой и закрытой части. Открытая кладётся в домашний каталог пользователя, «которым» заходят на сервер, закрытая — в домашний каталог пользователя, который идёт на удалённый сервер. Половинки сравниваются (я утрирую) и если всё ок — пускают. Важно: авторизуется не только клиент на сервере, но и сервер по отношению к клиенту (то есть у сервера есть свой собственный ключ). Главной особенностью ключа по сравнению с паролем является то, что его нельзя «украсть», взломав сервер — ключ не передаётся с клиента на сервер, а во время авторизации клиент доказывает серверу, что владеет ключом (та самая криптографическая магия).
Генерация ключа
Свой ключ можно сгенерировать с помощью команды ssh-keygen. Если не задать параметры, то он сохранит всё так, как надо.
Ключ можно закрыть паролем. Этот пароль (в обычных графических интерфейсах) спрашивается один раз и сохраняется некоторое время. Если пароль указать пустым, он спрашиваться при использовании не будет. Восстановить забытый пароль невозможно.
Сменить пароль на ключ можно с помощью команды ssh-keygen -p.
Структура ключа
(если на вопрос про расположение ответили по-умолчанию).
~/.ssh/id_rsa.pub — открытый ключ. Его копируют на сервера, куда нужно получить доступ.
~/.ssh/id_rsa — закрытый ключ. Его нельзя никому показывать. Если вы в письмо/чат скопипастите его вместо pub, то нужно генерировать новый ключ. (Я не шучу, примерно 10% людей, которых просишь дать ssh-ключ постят id_rsa, причём из этих десяти процентов мужского пола 100%).
Копирование ключа на сервер
В каталоге пользователя, под которым вы хотите зайти, если создать файл ~/.ssh/authorized_keys и положить туда открытый ключ, то можно будет заходить без пароля. Обратите внимание, права на файл не должны давать возможность писать в этот файл посторонним пользователям, иначе ssh его не примет. В ключе последнее поле — user@machine. Оно не имеет никакого отношения к авторизации и служит только для удобства определения где чей ключ. Заметим, это поле может быть поменяно (или даже удалено) без нарушения структуры ключа.
Если вы знаете пароль пользователя, то процесс можно упростить. Команда ssh-copy-id user@server позволяет скопировать ключ не редактируя файлы вручную.
Замечание: Старые руководства по ssh упоминают про authorized_keys2. Причина: была первая версия ssh, потом стала вторая (текущая), для неё сделали свой набор конфигов, всех это очень утомило, и вторая версия уже давным давно переключилась на версии без всяких «2». То есть всегда authorized_keys и не думать о разных версиях.
Если у вас ssh на нестандартном порту, то ssh-copy-id требует особого ухищрения при работе: ssh-copy-id '-p 443 user@server' (внимание на кавычки).
Ключ сервера
Первый раз, когда вы заходите на сервер, ssh вас спрашивает, доверяете ли вы ключу. Если отвечаете нет, соединение закрывается. Если да — ключ сохраняется в файл ~/.ssh/known_hosts. Узнать, где какой ключ нельзя (ибо несекьюрно).
Если ключ сервера поменялся (например, сервер переустановили), ssh вопит от подделке ключа. Обратите внимание, если сервер не трогали, а ssh вопит, значит вы не на тот сервер ломитесь (например, в сети появился ещё один компьютер с тем же IP, особо этим страдают всякие локальные сети с 192.168.1.1, которых в мире несколько миллионов). Сценарий «злобной man in the middle атаки» маловероятен, чаще просто ошибка с IP, хотя если «всё хорошо», а ключ поменялся — это повод поднять уровень паранойи на пару уровней (а если у вас авторизация по ключу, а сервер вдруг запросил пароль — то паранойю можно включать на 100% и пароль не вводить).
Удалить известный ключ сервера можно командой ssh-keygen -R server. При этом нужно удалить ещё и ключ IP (они хранятся раздельно): ssh-keygen -R 127.0.0.1.
Ключ сервера хранится в /etc/ssh/ssh_host_rsa_key и /etc/ssh/ssh_host_rsa_key.pub. Их можно:
а) скопировать со старого сервера на новый.
б) сгенерировать с помощью ssh-keygen. Пароля при этом задавать не надо (т.е. пустой). Ключ с паролем ssh-сервер использовать не сможет.
Заметим, если вы сервера клонируете (например, в виртуалках), то ssh-ключи сервера нужно обязательно перегенерировать.
Старые ключи из know_hosts при этом лучше убрать, иначе ssh будет ругаться на duplicate key.
Копирование файлов
Передача файлов на сервер иногда может утомлять. Помимо возни с sftp и прочими странными вещами, ssh предоставляет нам команду scp, которая осуществляет копирование файла через ssh-сессию.
scp path/myfile user@8.8.8.8:/full/path/to/new/location/
Обратно тоже можно:
scp user@8.8.8.8:/full/path/to/file /path/to/put/here
Fish warning: Не смотря на то, что mc умеет делать соединение по ssh, копировать большие файлы будет очень мучительно, т.к. fish (модуль mc для работы с ssh как с виртуальной fs) работает очень медленно. 100-200кб — предел, дальше начинается испытание терпения. (Я вспомнил свою очень раннюю молодость, когда не зная про scp, я копировал ~5Гб через fish в mc, заняло это чуть больше 12 часов на FastEthernet).
Возможность копировать здорово. Но хочется так, чтобы «сохранить как» — и сразу на сервер. И чтобы в графическом режиме копировать не из специальной программы, а из любой, привычной.
Так тоже можно:
sshfs
Теория: модуль fuse позволяет «экспортировать» запросы к файловой системе из ядра обратно в userspace к соответствующей программе. Это позволяет легко реализовывать «псевдофайловые системы». Например, мы можем предоставить доступ к удалённой файловой системе через ssh так, что все локальные приложения (за малым исключением) не будут ничего подозревать.
Собственно, исключение: O_DIRECT не поддерживается, увы (это проблема не sshfs, это проблема fuse вообще).
Использование: установить пакет sshfs (сам притащит за собой fuse).
Собственно, пример моего скрипта, который монтирует desunote.ru (размещающийся у меня на домашнем комьютере — с него в этой статье показываются картинки) на мой ноут:
#!/bin/bash
sshfs desunote.ru:/var/www/desunote.ru/ /media/desunote.ru -o reconnect
Делаем файл +x, вызываем, идём в любое приложение, говорим сохранить и видим:
Параметры sshfs, которые могут оказаться важными: -o reconnect (говорит пытаться пересоединиться вместо ошибок).
Если вы много работаете с данными от рута, то можно (нужно) сделать idmap:
-o idmap=user. Работает она следующим образом: если мы коннектимся как пользователь pupkin@server, а локально работаем как пользователь vasiliy, то мы говорим «считать, что файлы pupkin, это файлы vasiliy». ну или «root», если мы коннектимся как root.
В моём случае idmap не нужен, так как имена пользователей (локальное и удалённое) совпадают.
Заметим, комфортно работать получается только если у нас есть ssh-ключик (см. начало статьи), если нет — авторизация по паролю выбешивает на 2-3 подключение.
Отключить обратно можно командой fusermount -u /path, однако, если соединение залипло (например, нет сети), то можно/нужно делать это из-под рута: sudo umount -f /path.
Удалённое исполнение кода
ssh может выполнить команду на удалённом сервере и тут же закрыть соединение. Простейший пример:
ssh user@server ls /etc/
Выведет нам содержимое /etc/ на server, при этом у нас будет локальная командная строка.
Некоторые приложения хотят иметь управляющий терминал. Их следует запускать с опцией -t:
ssh user@server -t remove_command
Кстати, мы можем сделать что-то такого вида:
ssh user@server cat /some/file|awk '{print $2}' |local_app
Это нас приводит следующей фиче:
Проброс stdin/out
Допустим, мы хотим сделать запрос к программе удалённо, а потом её вывод поместить в локальный файл
ssh user@8.8.8.8 command >my_file
Допустим, мы хотим локальный вывод положить удалённо
mycommand |scp — user@8.8.8.8:/path/remote_file
Усложним пример — мы можем прокидывать файлы с сервера на сервер: Делаем цепочку, чтобы положить stdin на 10.1.1.2, который нам не доступен снаружи:
mycommand | ssh user@8.8.8.8 «scp — user@10.1.1.2:/path/to/file»
Есть и вот такой головоломный приём использования pipe'а (любезно подсказали в комментариях в жж):
tar -c * | ssh user@server "cd && tar -x"
Tar запаковывает файлы по маске локально, пишет их в stdout, откуда их читает ssh, передаёт в stdin на удалённом сервере, где их cd игнорирует (не читает stdin), а tar — читает и распаковывает. Так сказать, scp для бедных.
Алиасы
Скажу честно, до последнего времени не знал и не использовал. Оказались очень удобными.
В более-менее крупной компании часто оказывается, что имена серверов выглядят так: spb-MX-i3.extrt.int.company.net. И пользователь там не равен локальному. То есть логиниться надо так: ssh ivanov_i@spb-MX-i3.extrt.int.company.net. Каждый раз печатать — туннельных синдромов не напасёшься. В малых компаниях проблема обратная — никто не думает о DNS, и обращение на сервер выглядит так: ssh root@192.168.1.4. Короче, но всё равно напрягает. Ещё большая драма, если у нас есть нестандартный порт, и, например, первая версия ssh (привет цискам). Тогда всё выглядит так: ssh -1 -p 334 vv_pupkin@spb-MX-i4.extrt.int.company.net. Удавиться. Про драму с scp даже рассказывать не хочется.
Можно прописать общесистемные alias'ы на IP (/etc/hosts), но это кривоватый выход (и пользователя и опции всё равно печатать). Есть путь короче.
Файл ~/.ssh/config позволяет задать параметры подключения, в том числе специальные для серверов, что самое важное, для каждого сервера своё. Вот пример конфига:
Host ric
Hostname ооо-рога-и-копыта.рф
User Администратор
ForwardX11 yes
Compression yes
Host home
Hostname myhome.dyndns.org
User vasya
PasswordAuthentication no
Все доступные для использования опции можно увидеть в man ssh_config (не путать с sshd_config).
Опции по умолчанию
По подсказке UUSER: вы можете указать настройки соединения по умолчанию с помощью конструкции Host *, т.е., например:
Host *
User root
Compression yes
То же самое можно сделать и в /etc/ssh/ssh_config (не путать с /etc/ssh/sshd_config), но это требует прав рута и распространяется на всех пользователей.
Проброс X-сервера
Собственно, немножко я проспойлерил эту часть в примере конфига выше. ForwardX11 — это как раз оно.
Теория: Графические приложения в юникс обычно используют X-сервер (wayland в пути, но всё ещё не готов). Это означает, что приложение запускается и подключается к X-серверу для рисования. Иными словами, если у вас есть голый сервер без гуя и есть локальный x-сервер (в котором вы работаете), то вы можете дать возможность приложениям с сервера рисовать у вас на рабочем столе. Обычно подключение к удалённом X-серверу — не самая безопасная и тривиальная вещь. SSH позволяет упростить этот процесс и сделать его совсем безопасным. А возможность жать трафик позволяет ещё и обойтись меньшим трафиком (т.е. уменьшить утилизацию канала, то есть уменьшить ping (точнее, latency), то есть уменьшить лаги).
Ключики: -X — проброс X-сервера. -Y проброс авторизации.
Достаточно просто запомнить комбинацию ssh -XYC user@SERVER.
В примере выше (названия компании вымышленные) я подключаюсь к серверу ооо-рога-и-копыта.рф не просто так, а с целью получить доступ к windows-серверу. Безопасность microsoft при работе в сети мы все хорошо знаем, так что выставлять наружу голый RDP неуютно. Вместо этого мы подключаемся к серверу по ssh, а дальше запускаем там команду rdesktop:
ssh ric rdesktop -k en-us 192.168.1.1 -g 1900x1200
и чудо, окошко логина в windows на нашем рабочем столе. Заметим, тщательно зашифрованное и неотличимое от обычного ssh-трафика.
Socks-proxy
Когда я оказываюсь в очередной гостинице (кафе, конференции), то местный wifi чаще всего оказывается ужасным — закрытые порты, неизвестно какой уровень безопасности. Да и доверия к чужим точкам доступа не особо много (это не паранойя, я вполне наблюдал как уводят пароли и куки с помощью банального ноутбука, раздающего 3G всем желающим с названием близлежащей кафешки (и пишущего интересное в процессе)).
Особые проблемы доставляют закрытые порты. То джаббер прикроют, то IMAP, то ещё что-нибудь.
Обычный VPN (pptp, l2tp, openvpn) в таких ситуациях не работает — его просто не пропускают. Экспериментально известно, что 443ий порт чаще всего оставляют, причём в режиме CONNECT, то есть пропускают «как есть» (обычный http могут ещё прозрачно на сквид завернуть).
Решением служит socks-proxy режим работы ssh. Его принцип: ssh-клиент подключается к серверу и слушает локально. Получив запрос, он отправляет его (через открытое соединение) на сервер, сервер устанавливает соединение согласно запросу и все данные передаёт обратно ssh-клиенту. А тот отвечает обратившемуся. Для работы нужно сказать приложениям «использовать socks-proxy». И указать IP-адрес прокси. В случае с ssh это чаще всего localhost (так вы не отдадите свой канал чужим людям).
Подключение в режиме sock-proxy выглядит так:
ssh -D 8080 user@server
В силу того, что чужие wifi чаще всего не только фиговые, но и лагливые, то бывает неплохо включить опцию -C (сжимать трафик). Получается почти что opera turbo (только картинки не жмёт). В реальном сёрфинге по http жмёт примерно в 2-3 раза (читай — если вам выпало несчастье в 64кбит, то вы будете мегабайтные страницы открывать не по две минуты, а секунд за 40. Фигово, но всё ж лучше). Но главное: никаких украденных кук и подслушанных сессий.
Я не зря сказал про закрытые порты. 22ой порт закрывают ровно так же, как «не нужный» порт джаббера. Решение — повесить сервер на 443-й порт. Снимать с 22 не стоит, иногда бывают системы с DPI (deep packet inspection), которые ваш «псевдо-ssl» не пустят.
Вот так выглядит мой конфиг:
/etc/ssh/sshd_config:
(фрагмент)
Port 22
Port 443
А вот кусок ~/.ssh/config с ноутбука, который описывает vpn
Host vpn
Hostname desunote.ru
User vasya
Compression yes
DynamicForward 127.1:8080
Port 443
(обратите внимание на «ленивую» форму записи localhost — 127.1, это вполне себе законный метод написать 127.0.0.1)
Проброс портов
Мы переходим к крайне сложной для понимания части функционала SSH, позволяющей осуществлять головоломные операции по туннелированию TCP «из сервера» и «на сервер».
Для понимания ситуации все примеры ниже будут ссылаться на вот эту схему:
Комментарии: Две серые сети. Первая сеть напоминает типичную офисную сеть (NAT), вторая — «гейтвей», то есть сервер с белым интерфейсом и серым, смотрящим в свою собственную приватную сеть. В дальнейших рассуждениях мы полагаем, что «наш» ноутбук — А, а «сервер» — Б.
Задача: у нас локально запущено приложение, нам нужно дать возможность другому пользователю (за пределами нашей сети) посмотреть на него.
Решение: проброс локального порта (127.0.0.1:80) на публично доступный адрес. Допустим, наш «публично доступный» Б занял 80ый порт чем-то полезным, так что пробрасывать мы будем на нестандартный порт (8080).
Итоговая конфигурация: запросы на 8.8.8.8:8080 будут попадать на localhost ноутбука А.
ssh -R 127.1:80:8.8.8.8:8080 user@8.8.8.8
Опция -R позволяет перенаправлять с удалённого (Remote) сервера порт на свой (локальный).
Важно: если мы хотим использовать адрес 8.8.8.8, то нам нужно разрешить GatewayPorts в настройках сервера Б.
Задача. На сервере «Б» слушает некий демон (допустим, sql-сервер). Наше приложение не совместимо с сервером (другая битность, ОС, злой админ, запрещающий и накладывающий лимиты и т.д.). Мы хотим локально получить доступ к удалённому localhost'у.
Итоговая конфигурация: запросы на localhost:3333 на 'A' должны обслуживаться демоном на localhost:3128 'Б'.
ssh -L 127.1:3333:127.1:3128 user@8.8.8.8
Опция -L позволяет локальные обращения (Local) направлять на удалённый сервер.
Задача: На сервере «Б» на сером интерфейсе слушает некий сервис и мы хотим дать возможность коллеге (192.168.0.3) посмотреть на это приложение.
Итоговая конфигурация: запросы на наш серый IP-адрес (192.168.0.2) попадают на серый интерфейс сервера Б.
ssh -L 192.168.0.2:8080:10.1.1.1:80 user@8.8.8.8
Вложенные туннели
Разумеется, туннели можно перенаправлять.
Усложним задачу: теперь нам хочется показать коллеге приложение, запущенное на localhost на сервере с адресом 10.1.1.2 (на 80ом порту).
Решение сложно:
ssh -L 192.168.0.2:8080:127.1:9999 user@8.8.8.8 ssh -L 127.1:9999:127.1:80 user2@10.1.1.2
Что происходит? Мы говорим ssh перенаправлять локальные запросы с нашего адреса на localhost сервера Б и сразу после подключения запустить ssh (то есть клиента ssh) на сервере Б с опцией слушать на localhost и передавать запросы на сервер 10.1.1.2 (куда клиент и должен подключиться). Порт 9999 выбран произвольно, главное, чтобы совпадал в первом вызове и во втором.
Реверс-сокс-прокси
Если предыдущий пример вам показался простым и очевидным, то попробуйте догадаться, что сделает этот пример:
ssh -D 8080 -R 127.1:8080:127.1:8080 user@8.8.8.8 ssh -R 127.1:8080:127.1:8080 user@10.1.1.2
Если вы офицер безопасности, задача которого запретить использование интернета на сервере 10.1.1.2, то можете начинать выдёргивать волосы на попе, ибо эта команда организует доступ в интернет для сервера 10.1.1.2 посредством сокс-прокси, запущенного на компьютере «А». Трафик полностью зашифрован и неотличим от любого другого трафика SSH. А исходящий трафик с компьютера с точки зрения сети «192.168.0/24» не отличим от обычного трафика компьютера А.
Туннелирование
Если к этому моменту попа отдела безопасности не сияет лысиной, а ssh всё ещё не внесён в список врагов безопасности номер один, вот вам окончательный убийца всего и вся: туннелирование IP или даже ethernet. В самых радикальных случаях это позволяет туннелировать dhcp, заниматься удалённым arp-спуфингом, делать wake up on lan и прочие безобразия второго уровня.
Подробнее описано тут: www.khanh.net/blog/archives/51-using-openSSH-as-a-layer-2-ethernet-bridge-VPN.html
(сам я увы, таким не пользовался).
Легко понять, что в таких условиях невозможно никаким DPI (deep packet inspection) отловить подобные туннели — либо ssh разрешён (читай — делай что хочешь), либо ssh запрещён (и можно смело из такой компании идиотов увольняться не ощущая ни малейшего сожаления).
Проброс авторизации
Если вы думаете, что на этом всё, то…… впрочем, в отличие от автора, у которого «снизу» ещё не написано, читатель заранее видит, что там снизу много букв и интриги не получается.
OpenSSH позволяет использовать сервера в качестве плацдарма для подключения к другим серверам, даже если эти сервера недоверенные и могут злоупотреблять чем хотят.
Для начала о простом пробросе авторизации.
Повторю картинку:
Допустим, мы хотим подключиться к серверу 10.1.1.2, который готов принять наш ключ. Но копировать его на 8.8.8.8 мы не хотим, ибо там проходной двор и половина людей имеет sudo и может шариться по чужим каталогам. Компромиссным вариантом было бы иметь «другой» ssh-ключ, который бы авторизовывал user@8.8.8.8 на 10.1.1.2, но если мы не хотим пускать кого попало с 8.8.8.8 на 10.1.1.2, то это не вариант (тем паче, что ключ могут не только поюзать, но и скопировать себе «на чёрный день»).
ssh предлагает возможность форварда ssh-агента (это такой сервис, который запрашивает пароль к ключу). Опция ssh -A пробрасывает авторизацию на удалённый сервер.
Вызов выглядит так:
ssh -A user@8.8.8.8 ssh user2@10.1.1.2
Удалённый ssh-клиент (на 8.8.8.8) может доказать 10.1.1.2, что мы это мы только если мы к этому серверу подключены и дали ssh-клиенту доступ к своему агенту авторизации (но не ключу!).
В большинстве случаев это прокатывает.
Однако, если сервер совсем дурной, то root сервера может использовать сокет для имперсонализации, когда мы подключены.
Есть ещё более могучий метод — он превращает ssh в простой pipe (в смысле, «трубу») через которую насквозь мы осуществляем работу с удалённым сервером.
Главным достоинством этого метода является полная независимость от доверенности промежуточного сервера. Он может использовать поддельный ssh-сервер, логгировать все байты и все действия, перехватывать любые данные и подделывать их как хочет — взаимодействие идёт между «итоговым» сервером и клиентом. Если данные оконечного сервера подделаны, то подпись не сойдётся. Если данные не подделаны, то сессия устанавливается в защищённом режиме, так что перехватывать нечего.
Эту клёвую настройку я не знал, и раскопал её redrampage.
Настройка завязана на две возможности ssh: опцию -W (превращающую ssh в «трубу») и опцию конфига ProxyCommand (опции командной строки, вроде бы нет), которая говорит «запустить программу и присосаться к её stdin/out». Опции эти появились недавно, так что пользователи centos в пролёте.
Выглядит это так (циферки для картинки выше):
.ssh/config:
Host raep
HostName 10.1.1.2
User user2
ProxyCommand ssh -W %h:%p user@8.8.8.8
Ну а подключение тривиально: ssh raep.
Повторю важную мысль: сервер 8.8.8.8 не может перехватить или подделать трафик, воспользоваться агентом авторизации пользователя или иным образом изменить трафик. Запретить — да, может. Но если разрешил — пропустит через себя без расшифровки или модификации. Для работы конфигурации нужно иметь свой открытый ключ в authorized_keys как для user@8.8.8.8, так и в user2@10.1.1.2
Разумеется, подключение можно оснащать всеми прочими фенечками — прокидыванием портов, копированием файлов, сокс-прокси, L2-туннелями, туннелированием X-сервера и т.д.
Размерами с обычную кредитную карточку (ну может в 2-3 раза толще) телефон не имеющий ни одной механической кнопки и ни одного разёма - всё надёжно заплавлено в пластик.
# Экран в виде гибкой электронной бумаги (для экономии электро энергии)
# Сверху татч-скрин (емкостной) для управления
# На обратной стороне гибкая солнечная батарея (для зарядки в солнечный день)
# И маленькая дырочка для шнурка (чтобы на шею повесить)
# Встроенные средства бесконтактной зарядки устройств
# Подключение к компьютеру только по беспроводным протоколам
# Встроенный программируемый RFD-контроллер
# NFC модуль для работы в качестве платёжного средства
# Возможность отображения идентификационных данных владельца - ФИО, фотография и другие данные при желании
# Плёночный гибкий аккумулятор
# Полная защита от воды (можно нырять на любую глубину)
# Может заменить собой электронный паспорт (если встроить датчик отпечатков)
Безотказный, лёгкий, незаметный и всегда под рукой...
В общем то что вообще нужно от телефона человеку.
Подзаголовки разных уровней набираются так:
{{{
! Заголовок верхнего уровня
!! Подзаголовок
!!! Подподзаголовок
!!!! Подзаголовок 4 уровня
!!!!! Подзаголовок 5 уровня
}}}
а выглядят так:
! Заголовок верхнего уровня
!! Подзаголовок
!!! Подподзаголовок
!!!! Подзаголовок 4 уровня
!!!!! Подзаголовок 5 уровня
# Из трёх букв состоит, на Х начинается, когда работает - стоит, когда кончает - кланяется. (Хор)
# Тихо сзади подошел,Дважды всунул и пошел.(Тапочки.)
# Чтобы спереди погладить, нужно сзади полизать. (Почтовая марка)
# Кругом волоса, посредине колбаса. (Кукуруза)
# У какого молодца утром капает с конца. (Кран, Чайник, Сосулька, Самовар)
# Сверху черно внутри красно, как засунешь так прекрасно. (Галоши)
# Волос на волос, тело на тело и начинается темное дело. (Веки)
# То холодный - то горячий, то висячий - то стоячий. (Душ)
# Туда - сюда - обратно, тебе и мне приятно. (Качели, Зубная щетка)
# Что ты смотришь на меня? Раздевайся я твоя! (Кровать)
# Между ног болтается на Х называется. (Хлястик, Хобот, Хвост)
# Волосатая головка за щеку заходит ловко. (Зубная щетка)
# Мы - ребята удалые лазим в щели половые! (Веник)
# Лежит на спине - никому не нужна. Прислони к стене - пригодится она. (Лестница)
# Маленький, беленький, с хвостиком, кровь пьет. Дерни за веревочку - райское наслаждение. (Тампакс)
# В темной комнате, на белой простыне 2 часа удовольствия (Кино)
# Ты помни его немножко, станет твердым как картошка. (Снежок)
# Возьму его в руки, Сожму его крепко - Он станет упругим И твёрдым как репка. (Снежок)
# Красная головка в дырку лезет ловко (Дятел)
# Маленькая, черная, сморщенная - есть у каждой женщины. (Изюминка)
# Если б не бабушкины лохматушки - мерзли бы дедушкини колотушки. (Варежки)
# Повыше коленца пониже пупенца - во что суют как зовут? (Карман)
# Выше колена, пониже пупка, дырка такая, что влезет рука. (Карман)
# Не хрен, не морковка - красная головка. (Пионер в пилотке)
# Без рук, без ног - на бабу скок (Коромысло)
# Длинный, красный, с виду - не опасный. Мужик захочет - вскочит, а баба подождет. (Трамвай)
# Что у Адама спереди, а у Евы сзади? (Буква "А")
# Зерно, прошедшее огонь, воду и медные трубы. (Самогон)
# Чем кончаются день и ночь? (Мягким знаком)
# Какое растение все знает? (Хрен)
# Беру двумя руками, сую между ногами... - (велосипед).
# Что нельзя сделать в космосе? (Повеситься)
# Что у женщины на теле, У еврея на уме, Применяется в хоккее, И на шахматной доске? (Комбинация)
# Висит - болтается, на три буквы называется. В середине "У". (Душ)
# То висячий, то стоячии, то холодный, то горячий все три буквы не скажу, но вторая буква "у". (душ)
●●●
A любит B, B любит C? Что делать A?
(Найти другую B)
●●●
Бежит ежик по лужайке - тащится, хохочет. Почему хохочет?
(Потому что травка писю щекочет)
●●●
Бежит ежик по лужайке - плачет. Почему плачет?
(Травку скосили)
●●●
Без окон, без дверей, а внутри сидит еврей? Что это?
(Сара беременна)
●●●
Без рук, без ног на бабу скок!
(Коромысло)
●●●
Белый, а не сахар. Холодный, а не лед.
(Труп)
●●●
В 12-этажном доме есть лифт. На первом этаже живет всего 2 человека, от этажа
к этажу количество жильцов увеличивается вдвое. Какая кнопка в лифте этого
дома нажимается чаще других?
(Независимо от распределения жильцов по этажам, кнопка "1")
●●●
В две руки беру, между ног сую, пять минут потею, а потом балдею.
(Велотренажер)
●●●
В зубах доска, в глазах тоска.
(Мужик провалился в деревенский толчок)
●●●
В небе одна, в земле нету, а у бабы их целых две.
(Буква Б)
●●●
В пустыне лежит мертвый мужчина. За плечами мешок, на поясе фляга с водой.
На многие километры вокруг нет ни единой живой души. От чего умер человек и
что в его мешке?
(Человек умер от удара об землю, а в мешке - парашют, который не раскрылся)
●●●
В темной комнате, на белой простыне - два часа удовольствия.
(Киносеанс)
●●●
Висит - болтается, на три буквы называется. В середине "У".
(Душ)
●●●
Висит груша - нельзя скушать.
(Чужая груша или Тетя Груня повесилась)
●●●
Висит на стене, зеленое и пищит.
(Селедка. Висит на стене потому, что я ее туда повесил, зеленая потому, что я ее
покрасил, а пищит, чтобы никто не догадался)
●●●
Возьму его в руки, сожму его крепко - он станет упругим и твёрдым как репка.
(Снежок)
●●●
Вокруг черное, посередине красное.
(Редиска в заднице у негра)
●●●
Вокруг черное, посередине белое.
(Редиска там же, только надкусанная)
●●●
Волос на волос, тело на тело - начинается темное дело.
(Глаз закрывается)
●●●
Волоса, волоса..., а посредине колбаса.
(Кукуруза)
Волосатая головка за щеку летает ловко.
(Зубная щетка)
●●●
Вонючий, красный, для девочек опасный.
(Мотоцикл "Ява")
●●●
Встанет, до небу достанет.
(Радуга)
●●●
Вылезает из воды, восемь сисек, три п...ды
(Восьмисисечный трип...дец)
●●●
Выше колена, пониже пупка, дырка такая, что влезет рука.
(Карман)
●●●
Гром гремит, кусты трясутся, что там делают?
(Медведь малину ест)
●●●
Два гвоздя упали в воду. Как фамилия грузина?
(Заржавели)
●●●
Два конца, два кольца, а по середине гвоздик.
(Жертва маньяка)
●●●
Две женщины у забора: одна приклеена, другая пришита... Что с ними нужно
сделать?
(Первую отодрать, вторую - отпороть)
●●●
Две спины, одна голова, шесть ног. Что это такое?
(Человек на стуле)
●●●
Если все женщины сядут на шпагат, что произойдет?
(Земля пиз...й накроется)
●●●
Зерно, прошедшее огонь, воду и медные трубы.
(Самогон)
●●●
Новое название любимого музыкального инструмента бывшего американского
президента.
(Cекcофон)
●●●
Почему женщины по утрам чешут глаза?
(Потому, что у них нет яиц)
●●●
Самое вредное насекомое, спинка черненькая, брюшко беленькое, лапки в
навозе.
(Дачник)
●●●
Чем отличается грудь женщины от игрушечной железной дороги?
(Ничем: обе созданы для детей, а играют с ними папы)
●●●
Что общего между "Формулой-1" и cекcом?
(Пит-стоп - смена резины)
●●●
Что приходит последним в голову жуку, влетающему в ветровое стекло
движущейся машины?
(Его жопа)
●●●
Вы сидите в самолете, впереди Вас лошадь, сзади автомобиль. Где Вы
находитесь?
(На карусели)
●●●
Кто такой: Из грядки торчат красные пятки?
(Краснопяточный грядкоторчатель)
●●●
Как засунуть жирафа в холодильник?
(Открыть холодильник, засунуть туда жирафа, закрыть холодильник)
●●●
Как засунуть в холодильник слона?
(Открыть холодильник, вынуть оттуда жирафа, засунуть туда слона, закрыть
холодильник)
●●●
Лев созвал всех зверей на собрание. Явились все, кроме одного. Что это за
зверь?
(Это слон. Он же в холодильнике, помните?)
●●●
Вам нужно пересечь широкую реку, которая кишит крокодилами. Как вы это
сделаете?
(Вплавь. Ведь крокодилы-то все на собрании у льва)
●●●
Что такое: маленькое, серого цвета и весит 3 килограмма?
(Мышь, у которой проблемы с весом)
●●●
Какое слово начинается с трех букв "Г" и заканчивается тремя буквами "Я"?
(Тригонометрия)
●●●
Один глаз, один рог, но не носорог?
(Корова из-за угла выглядывает)
●●●
Что имеет голову, но не имеет мозгов?
(Сыр, лук, чеснок)
●●●
Что такое: черное снаружи, желтое внутри?
(Цыпленок-ниндзя)
●●●
Что такое: с глазами - а не видит, с клювом - а не клюет, с крыльями - а не
летает?
(Дохлая ворона)
●●●
Что это такое: в белых кружевах, мычит и по земле ползает?
(Нажравшаяся невеста)
●●●
Что это такое: много голов, хвост длинный, глаза горят, яйца маленькие и
грязные?
(Очередь за яйцами по 90 копеек 80-х годов ХХ века)
●●●
Что такое один нуль?
(Лысый)
Что такое два нуля?
(Туалет)
Что такое три нуля?
(Лысый в туалете)
Что такое четыре нуля?
(Двое лысых в туалете)
Что такое пять нулей?
(Олимпиада)
Что такое шесть нулей?
(Лысый на олимпиаде)
Что такое семь нулей?
(Олимпийский туалет)
●●●
Всем пиз..а, а одному езда.
(Муж в командировке)
●●●
Всем пиз..а, никому езда.
(Троллейбус упал с моста)
●●●
Не лает, не кусается, а так же называется.
(@)
●●●
Около 40 млн. человек занимаются ЭТИМ по ночам. Что ЭТО такое?
(Internet)
●●●
С горки ползком, в горку бегом.
(Сопля)
●●●
Что такое: черное-белое, черное-белое, черное-белое?
(Монашка кубарем с горы скатывается)
●●●
Что такое: черным по белому написано?
(Унитаз, у которого постоял негр)
●●●
Зеленое, в пятнах, прыгает.
(Десантник)
●●●
Какая женщина сначала трется около тебя, а потом требует деньги?
(Кондуктор в трамвае)
●●●
Какое растение все знает?
(Хрен)
●●●
Что это такое: висит на стене и пахнет?
(Часы: в них кукушка сдохла)
●●●
Что это такое: власть лежит, а вода бежит?
(Депутату ставят клизму)
●●●
Что это такое: летит и блестит?
(Комар с золотым зубом)
●●●
Что это такое: по потолку бегает, лампы сосет?
(Потолковый лампосос)
●●●
Что это такое: синий, большой, с усами и полностью набит зайцами?
(Троллейбус)
●●●
Что это такое: на окне сидит, по-французски говорит?
(Француз)
●●●
Чтобы спереди погладить, нужно сзади полизать.
(Почтовая марка)
●●●
Шел охотник мимо башни с часами. Достал ружье и выстрелил. Куда он попал?
(В милицию)
●●●
Висит груша - нельзя скушать. Почему?
(Боксеры могут морду набить)
●●●
Всем езда, а одному пиз..а.
(Муж попал под троллейбус)
●●●
Что такое: ходит по стене и играет?
(Муха с плеером в ушах)
●●●
Что такое: черное - на одной ноге?
(Одноногий негр)
●●●
Что такое: черное - на двух ногах?
(Два одноногих негра)
●●●
Что такое: черное - на трех ногах?
(Рояль)
●●●
Что такое: черное - на четырех ногах?
(Одноногий негр за роялем)
●●●
Что такое: черное, квадратное, волосатое на тумбочке стоит?
(Телевизор
(п...дой накрылся))
●●●
Что ты смотришь на меня, раздевайся, я твоя.
(Кровать или вешалка)
●●●
Что у Адама спереди, а у Евы сзади?
(Буква "А")
●●●
Что у женщины на теле, у еврея на уме, применяется в хоккее и на шахматной
доске?
(Комбинация)
●●●
Что это такое - цвета сирени, назад видит так же, как и вперед, и прыгает выше
колокольни?
(Белая слепая лошадь, т.к. сирень бывает белая, а колокольня вообще не
прыгает)
●●●
Что такое: два конца, два кольца?
(Свадьба у геев)
●●●
Что такое: зеленое, лысое и скачет?
(Солдат на дискотеке)
●●●
Что такое: маленькая, зеленая, стоит на панели?
(Проститутка с другой планеты)
●●●
Что такое: маленькое лысенькое по лесу бежит?
(Ежик. Почему лысый? Из Чернобыля сбежал)
●●●
Что такое: маленькое, черненькое, в стекло бьется?
(Младенец в духовке)
●●●
Что такое: на потолке сидит, лампочку грызет?
(Потолковый лампогрыз)
●●●
Что такое: падают с ветки золотые монетки?
(Обычное явление в стране дураков)
●●●
Что такое: самое доброе в мире приведение с моторчиком?
(Запорожец)
●●●
Что такое: сначала белый, потом вж-ж-жик, и красный?
(Пуделек соседки в миксере)
●●●
Что такое: твердое в мягкое вставляется, и шарики рядом болтаются?
(Сеpьги)
●●●
Что такое - 100 х..ев и 100 веревок?
(Бурлаки на парашютах)
●●●
Что такое - зеленая, нажмешь кнопку - красная?
(Лягушка в миксере)
●●●
Что такое - маленькое, беленькое кровь сосет?
(Тампон)
●●●
Что такое - маленькое, беленькое, летает и жужжит? На букву Б.
(Муха. Почему на Б? Потому что блондинка)
●●●
Что такое - сидит на дереве, черное и каркает? На букву Ш.
(Ворона. Почему на Ш? Потому что шлангом прикинулась)
●●●
Что такое: 90/60/90?
(Скорость при гаишнике)
●●●
Что такое: висит на стене и плачет?
(Альпинист)
●●●
Что такое: глаза боятся - руки делают.
(Cекc по телефону)
●●●
Что такое: голова есть, головы нет, голова есть, головы нет?
(Хромой за забором)
●●●
Что такое: два брюшка, четыре ушка?
(Кошачья свадьба)
●●●
Черная собачка не лает, не кусает, а в дом не пускает.
(Дохлая черная собака, загородившая вход в дом)
●●●
Четыре братца под одной крышей стоят.
(Мафия)
●●●
Что за кузнецы в лесу куют?
(А х...й его знает!)
●●●
Что можно сбросить с обнаженной секретарши?
(Обнаженного начальника)
●●●
Что надо сделать, чтобы четыре парня остались в одном сапоге?
(Снять с каждого по сапогу)
●●●
Что нельзя съесть на завтрак?
(Обед и ужин)
●●●
Что общего между деньгами и гробом?
(И то и другое сначала заколачивают, а потом спускают)
●●●
Что общего между снегом и травой?
(По снегу и по траве танк на одной скорости прет)
●●●
Что такое - 100 веревок и один х...й?
(Парашютист)
●●●
Что такое - 100 х...ев и одна веревка?
(Бурлаки на Волге)
●●●
Ты помни его немножко, будет твердый, как картошка.
(Снежок)
●●●
У какого молодца утром капает с конца?
(Самовар или Водопроводный кран)
●●●
У какой социальной группы критические дни два раза в году?
(Студенты)
●●●
Чем их больше, тем вес меньше. Что это?
(Дырки)
●●●
Чем кончаются день и ночь?
(Мягким знаком)
●●●
Чем лошадь отличается от иголки?
(На иголку сначала сядешь, потом подпрыгнешь, а на лошадь сначала
подпрыгнешь, потом сядешь)
●●●
Чем отличается молодой холостяк от старого?
(Молодой холостяк прибирается в своем доме, чтобы пригласить женщину, а
старый приглашает в дом женщину, чтобы она прибралась)
●●●
Чем отличается педагог от педофила?
(Педофил по-настоящему любит детей)
●●●
Чем первый этаж отличается от девятого?
(С первого этажа упадешь: "Бух! - А-а!" А с девятого "А-а! - Бух!")
●●●
Чем человек отличается от паровоза?
(Паровоз сначала свистит, потом трогается, а человек сначала тронется, а потом
ходит и свистит)
●●●
Слово из трех букв, которого боится любой мужчина?
(Еще!)
●●●
Среднее арифметическое между велосипедом и мотоциклом?
(Мопед)
●●●
Сто одежек и все без застежек.
(Бомж)
●●●
Стоит баба на полу, приоткрыв свою дыру.
(Печка)
●●●
Стоит Ивашка на одной ножке.
(Инвалид)
●●●
Стоит корова - дыра готова, пришел бык в дыру - тык.
(Замок и ключ)
●●●
Стоп-бревно в случае экстренного торможения.
(Столб)
●●●
Тихо сзади подошел, Дважды всунул и пошел.
(Тапочки)
●●●
То висячий, то стоячий, то холодный, то горячий.
(Душ)
●●●
Туда-сюда - обратно: тебе и мне - приятно.
(Качели)
●●●
С когтями, а не птица, летит и матерится.
(Электромонтер)
●●●
С луком с яйцами, но не пирожок?
(Робин Гуд)
●●●
С чешуей - но не рыба, с п..дой - но не баба, с крыльями - но не птица.
(Чешуйчатый п...докрыл)
●●●
Сам алый сахарный, кафтан зеленый бархатный.
(Негатив на цветной фотопленке, запечатлевший "нового русского")
●●●
Сверху черно, внутри красно. Как засунешь - так прекрасно.
(Галоши)
●●●
Сережки для простаков.
(Лапша)
●●●
Сколько горошин может войти в один стакан?
(Нисколько, т.к. горошины не ходят)
●●●
Сколько младенцев поместится в двухместную детскую коляску?
(А это, смотря как нарубить...)
●●●
Сколько программистов нужно, чтобы закрутить лампочку?
(Ни одного. Это аппаратная проблема, программисты их не решают)
●●●
Сколько яиц может удержать женщина в одной руке?
(Оба)
●●●
Ползут три черепахи по плоскости. Одна говорит: впереди меня нет черепах, а
сзади ползут две. Другая говорит: впереди меня одна черепаха и сзади одна.
Оставшаяся говорит: впереди меня ползут две черепахи и сзади две. Вопрос: В
каком случае такое может быть?
(Ответ: в случае, если третья черепаха - пи...ит)
●●●
Похоронили проститутку, на надгробье написали: "Теперь они всегда будут
вместе". Кто они?
(Ноги)
●●●
Почему в Париже девки ходят рыжие?
(По земле)
●●●
Почему зимой женщинам в чулках тепло, а мужчинам в джинсах холодно?
(Потому что у мужиков обогреватель х...вый, а у баб п...датый)
●●●
Почему Ленин ходил в ботинках, а Сталин в сапогах?
(По земле)
●●●
Почему поп шляпу покупает?
(Потому что даром не дают)
●●●
Почему слоны не летают?
(По воздуху)
●●●
Почему шляпу носят?
(Потому что она сама не ходит)
●●●
Прыгает ловко и ест морковку?
(Бубка на диете)
●●●
Разноцветное коромысло над рекою повисло.
(Признак начинающегося сумасшествия)
●●●
Не лает, не кусает, а в дом не пускает.
(Жена не пускает пьяного мужа)
●●●
Не петух, а поет, не дед, а бабку имеет, кто это?
(Филипп Киркоров)
●●●
Не хрен, не морковка - красная головка.
(Пионер в пилотке)
●●●
Он от дедушки ушел, и от бабушки ушел...
(Cекc)
●●●
Осенью питает, зимой согревает, весной веселит, летом холодит.
(Водка)
●●●
Откуда родом снежная баба?
(Из ЗИМБАБве)
●●●
По чему, когда захочешь спать, идешь на кровать?
(По полу)
●●●
Повыше коленца пониже пупенца - во что суют как зовут?
(Карман)
●●●
Под каким деревом сидит заяц, когда идет дождь?
(Под мокрым)
●●●
Ползет, ползет - дерево съест. Снова ползет, ползет - дерево съест. Что это
такое?
(Камнеежка. Он и деревья ест)
●●●
Между ног болтается на "Х" называется.
(Хобот или хвостик)
●●●
Между ног болтается, воняет и орет?
(Мотоцикл)
●●●
Может ли мужчина женится на сестре своей вдовы?
(Нет)
●●●
Может ли страус назвать себя птицей?
(Нет, он не умеет разговаривать)
●●●
Морщинистый Тит всю деревню веселит.
(Нехватка молодежи на селе)
●●●
Мы ребята удалые, лезем в щели половые.
(Тараканы)
●●●
На букву "Х" называется, "П" увидит подымается.
(Хобот пищу берет)
●●●
На веревке болтается, на "З" называется.
(Зоя Космодемьянская)
●●●
На какой вопрос никто никогда не ответит "Да"?
(Спящий на вопрос: "Вы спите?")
●●●
Назовите слово, в котором 40 гласных.
(Сорока
(сорок "А"))
●●●
Лежит на спине - никому не нужна. Прислони к стене - пригодится она.
(Лестница)
●●●
Летел по небу бегемотик, а по земле за ним бежал охотник с ружьем. Охотник
выстрелил, и бегемотик упал на него. Кто жив остался?
(Слоник, потому что он вылетел позже)
●●●
Маленькая сморщенная, есть в каждой женщине.
(Изюминка)
●●●
Маленький, желтенький, в земле ковыряется.
(Вьетнамец мину ищет)
●●●
Маленький, желтенький в небе кувыркается.
(Нашёл!!!)
●●●
Маленький, желтенький, дверь собою открывает.
(Брюс Ли)
●●●
Маленький, серенький на слона похож.
(Слоненок)
●●●
Маленькое, желтенькое под кроватью лежит, на "З" начинается.
(Копейка. Почему на "З"? Закатилась)
●●●
Мальчик с девочкой в траве что-то делали на "Е".
(Ели землянику)
●●●
Мальчик упал с 4 ступенек и сломал ногу. Сколько ног сломает мальчик, если
упадет с 40 ступенек?
(Всего одну, т.к. вторая у него уже сломана)
●●●
Когда человек бывает в комнате без головы?
(Когда высовывает ее из окна на улицу)
●●●
Косоглазый, маленький, в белой шубке, в валенках?
(Чукотский Дед-Мороз)
●●●
Красная головка - работает ловко.
(Дятел)
●●●
Кругом вода, а посредине закон. Что это такое?
(Прокурор купается)
●●●
Кто быстрее доберется до холодильника - мышь или слон?
(Мышь. Она на велосипедике приедет)
●●●
Кто под проливным дождем не намочит волосы?
(Лысый)
●●●
Кто такой: сам не стреляет и другим не дает?
(Александр Матросов)
●●●
Кто такой: шесть крыльев, семь х..ев?
(Шестикрылый семих..й)
●●●
Кто это - маленький, в земле живет, на "Щ" начинается?
(Щервячок)
●●●
Куда идет цыпленок, переходя дорогу?
(На другую сторону дороги)
●●●
Из трех букв состоит, на "Х" начинается, когда работает стоит, когда кончает,
кланяется.
(Хор)
●●●
Как можно ходить сидя?
(В туалете - на унитазе)
●●●
Как узнать есть ли мышь в холодильнике, не открывая его?
(У холодильника должен стоять велосипедик)
●●●
Как хорошо тебе и мне, я под тобой, а ты на мне.
(Ежик яблоко несет)
●●●
Какая страна самая вооруженная?
(Израиль, там все с обрезами ходят)
●●●
Какое колесо не крутится при правом развороте?
(Запасное)
●●●
Какое слово всегда звучит неверно?
(Слово "неверно")
●●●
Какое слово из трех букв теперь чаще всего пишут на стенах туалетов в школах и
вузах?
(Сам ты х...й! Правильный ответ - www!)
●●●
Когда женщина ногу поднимает, что видишь? Пять букв, на "П" начинается, на "А"
кончается.
(Пятка)
●●●
Когда козе исполнится семь лет, что будет дальше?
(Пойдет восьмой)
●●●
Две черепахи
(самец и самка) прогуливаются влюбленно вдоль берега держа друг друга за
лапки. Через час обратно возвращается только самец. Где самка?
(Она осталась там - он забыл ее перевернуть)
●●●
Двое мужчин находятся на разных сторонах земли. Один переходит по канату
через обрыв, а другому делает минет 70-летняя женщина. У обоих мужиков одна и
та же мысль. Какая?
(Не смотреть вниз)
●●●
Домашнее животное, на "т" начинается.
(Таракан)
●●●
Домашнее животное, на "д" начинается.
(Два таракана)
●●●
Домашнее животное, на "ы" начинается.
(Ыщо один таракан)
●●●
Едут в купе Буратино, Мальвина, честный таможенник и мент поганый. Играют в
карты, в банке куча денег, поезд въезжает в тоннель. После выезда из тоннеля
деньги исчезли. Кто украл деньги?
(Мент поганый, т.к. первых троих в природе не существует)
●●●
Если б не бабушкины лохматушки - мерзли бы дедушкини колотушки.
(Варежки)
●●●
Зима, лес, все покрыто снегом. На большом обледеневшем пне лежит
раздавленный член. Что это?
(На конец наступила зима)
●●●
Идет ежик лысый - сколько ему лет?
(18 - его в армию забирают)
●●●
Из какой посуды нельзя ничего поесть?
(Из пустой)
●●●
Волосатая головка за щеку летает ловко.
(Зубная щетка)
●●●
Вонючий, красный, для девочек опасный.
(Мотоцикл "Ява")
●●●
Встанет, до небу достанет.
(Радуга)
●●●
Вылезает из воды, восемь сисек, три п...ды
(Восьмисисечный трип...дец)
●●●
Выше колена, пониже пупка, дырка такая, что влезет рука.
(Карман)
●●●
Гром гремит, кусты трясутся, что там делают?
(Медведь малину ест)
●●●
Два гвоздя упали в воду. Как фамилия грузина?
(Заржавели)
●●●
Два конца, два кольца, а по середине гвоздик.
(Жертва маньяка)
●●●
Две женщины у забора: одна приклеена, другая пришита... Что с ними нужно
сделать?
(Первую отодрать, вторую - отпороть)
●●●
Две спины, одна голова, шесть ног. Что это такое?
(Человек на стуле)
●●●
В пустыне лежит мертвый мужчина. За плечами мешок, на поясе фляга с водой.
На многие километры вокруг нет ни единой живой души. От чего умер человек и
что в его мешке?
(Человек умер от удара об землю, а в мешке - парашют, который не раскрылся)
●●●
В темной комнате, на белой простыне - два часа удовольствия.
(Киносеанс)
●●●
Висит - болтается, на три буквы называется. В середине "У".
(Душ)
исит груша - нельзя скушать.
(Чужая груша или Тетя Груня повесилась)
●●●
Висит на стене, зеленое и пищит.
(Селедка. Висит на стене потому, что я ее туда повесил, зеленая потому, что я ее
покрасил, а пищит, чтобы никто не догадался)
●●●
Возьму его в руки, сожму его крепко - он станет упругим и твёрдым как репка.
(Снежок)
●●●
Вокруг черное, посередине красное.
(Редиска в заднице у негра)
●●●
Вокруг черное, посередине белое.
(Редиска там же, только надкусанная)
●●●
Волос на волос, тело на тело - начинается темное дело.
(Глаз закрывается)
●●●
Волоса, волоса..., а посредине колбаса.
(Кукуруза)
●●●
Ус(с)атый, полосатый.
(Матрас)
●●●
Что такое: входит сухим, выходит влажным, дарит тепло и радость?
(Пакетик с чаем)
●●●
Что удлиняется, когда его берут в руки, пропускают между грудей и засовывают в
отверстие?
(Ремень безопасности)
●●●
Что нужно делать, когда видишь зеленого человечка?
(Переходить улицу)
●●●
Что такое - из трех букв, в одно ухо входит, а из другого выходит?
(Лом)
●●●
В зубах доска, в глазах тоска.
(Мужик провалился в деревенский толчок.)
●●●
Всем пиз@а, а одному езда.
(Муж в командировке.)
●●●
Всем езда, а одному пиз@а.
(Муж попал под троллейбус.)
●●●
Всем пиз@а, никому езда.
(Троллейбус упал с моста.)
●●●
Мальчик с девочкой в траве что-то делали на "Е".
(Ели землянику.)
●●●
Сколько требуется негров, чтобы похоронить человека?
(Пять. Четверо несут гроб, а пятый идет спереди с магнитофоном.)
●●●
Около 40 млн. человек занимаются ЭТИМ по ночам. Что ЭТО такое?
(Internet.)
●●●
С горки ползком, в горку бегом.
(Сопля.)
●●●
Стоит баба на полу, приоткрыв свою дыру.
(Печка.)
●●●
Встанет, до небу достанет.
(Радуга.)
●●●
Висит груша - нельзя скушать. Почему?
(Боксеры могут морду набить.)
●●●
Что нельзя съесть на завтрак?
(Обед и ужин.)
●●●
Без рук, без ног на бабу скок!
(Коромысло.)
●●●
Прыгает ловко и ест морковку?
(Бубка на диете.)
●●●
Кто под проливным дождем не намочит волосы?
(Лысый.)
●●●
Не петух, а поет, не дед, а бабку имеет, кто это?
(Филипп Киркоров.)
●●●
Одно колесо тысяча крыльев - что это?
(Тачка с навозом.)
●●●
Что такое: твердое в мягкое вставляется, и шарики рядом болтаются?
(Сеpьги.)
●●●
Две женщины у забора: одна приклеена, другая пришита... Что с ними нужно
сделать?
(Первую отодрать, вторую - отпороть.)
●●●
Красный, длинный, 21?
(Трамвай.)
●●●
Что такое синее золото?
(Любимая жена напилась.)
Что возбуждается палочкой Коха?
(1. туберкулез; 2. жена Коха.)
●●●
Что объединяет горелый хлеб, утопленника и беременную женщину?
(Не успели вытащить...)
Два кольца, два конца...
(Очень навороченный Новый Русский.)
В пустыне лежит мертвый мужчина. За плечами мешок, на поясе фляга с водой.
На многие километры вокруг нет ни единой живой души. От чего умер человек и
что в его мешке?
(Человек умер от удара об землю, а в мешке - парашют, который не раскрылся.)
●●●
Чем отличается педагог от педофила?
(Педофил по-настоящему любит детей.)
В 12-этажном доме есть лифт. На первом этаже живет всего 2 человека, от этажа
к этажу количество жильцов увеличивается вдвое. Какая кнопка в лифте этого
дома нажимается чаще других?
(Независимо от распределения жильцов по этажам, кнопка "1".)
●●●
С луком с яйцами, но не пирожок?
(Робин Гуд.)
●●●
Едут в купе Буратино, Мальвина, честный таможенник и мент поганый. Играют в
карты, в банке куча денег, поезд въезжает в тоннель. После выезда из тоннеля
деньги исчезли. Кто украл деньги?
(Мент поганый, т.к. первых троих в природе не существует...)
●●●
Откуда родом снежная баба?
(Из ЗИМБАБве.)
●●●
Какая страна самая вооруженная?
(Израиль,... там все с обрезами ходят.)
●●●
Что это такое - цвета сирени, назад видит так же, как и вперед, и прыгает выше
колокольни?
(Белая слепая лошадь, т.к. сирень бывает белая, а колокольня вообще не
прыгает.)
Что такое: глаза боятся - руки делают.
(Cекc по телефону.)
●●●
Маленькое, желтенькое под кроватью лежит, на "З" начинается.
(Копейка. Почему на "З"? Закатилась...)
●●●
Слово из трех букв, которого боится любой мужчина?
(Еще!)
●●●
Что такое: самое доброе в мире приведение с моторчиком?
(Запорожец.)
●●●
А любит Б, Б любит Ц?
Что делать А?
(Найти другую Б.)
●●●
Что такое: голова есть, головы нет, голова есть, головы нет?
(Хромой за забором.)
●●●
Похоронили проститутку, на надгробье написали: "Теперь они всегда будут
вместе". Кто они?
(Ноги.)
●●●
Как хорошо тебе и мне, я под тобой, а ты на мне.
(Ежик яблоко несет.)
●●●
Что это такое: летит и блестит?
(Комар с золотым зубом.)
●●●
Что такое: 90/60/90?
(Скорость при гаишнике.)
Стоп-бревно в случае экстренного торможения.
(Столб.)
●●●
Сережки для простаков.
(Лапша.)
●●●
Среднее арифметическое между велосипедом и мотоциклом?
(Мопед.)
●●●
Висит на стене, зеленое и пищит.
(Селедка. Висит на стене потому, что я ее туда повесил, зеленая потому, что я ее
покрасил, а пищит, чтобы никто не догадался.)
●●●
Вылезает из воды, восемь сисек, три п@iды
(Восьмисисечный трип@iдец.)
●●●
Между ног болтается, воняет и орет?
(Мотоцикл.)
●●●
Что у женщины на теле,
у еврея на уме,
применяется в хоккее
и на шахматной доске?
(Комбинация.)
●●●
На какой вопрос никто никогда не ответит "да"?
(Спящий на вопрос: "Вы спите?")
●●●
Как можно ходить сидя?
(В туалете - на унитазе.)
С чешуей - но не рыба, с пi$дой - но не баба, с крыльями - но не птица.
(Чешуйчатый пi$докрыл.)
●●●
Когда человек бывает в комнате без головы?
(Когда высовывает ее из окна на улицу.)
●●●
Какое слово из трех букв теперь чаще всего пишут на стенах туалетов в школах и
вузах?
(Сам ты Хi@! Правильный ответ - WWW!)
●●●
У какой социальной группы критические дни два раза в году?
(Студенты.)
●●●
Когда козе исполнится семь лет, что будет дальше?
(Пойдет восьмой.)
●●●
Кругом вода, а посредине закон. Что это такое?
(Прокурор купается.)
●●●
Может ли мужчина женится на сестре своей вдовы?
(Нет.)
●●●
Почему шляпу носят?
(Потому что она сама не ходит.)
●●●
Маленький, желтенький, в земле ковыряется.
(Вьетнамец мину ищет.)
●●●
Маленький, желтенький в небе кувыркается.
(Нашел!!!)
●●●
По чему, когда захочешь спать, идешь на кровать?
(По полу.)
●●●
Может ли страус назвать себя птицей?
(Нет, он не умеет разговаривать.)
●●●
Что надо сделать, чтобы четыре парня остались в одном сапоге?
(Снять с каждого по сапогу.)
●●●
Он от дедушки ушел, и от бабушки ушел...
(Cекc.)
●●●
Что это такое: власть лежит, а вода бежит?
(Депутату ставят клизму.)
●●●
Что такое - зеленая, нажмешь кнопку - красная?
(Лягушка в миксере.)
●●●
Косоглазый, маленький, в белой шубке, в валенках?
(Чукотский Дед-Мороз.)
●●●
Что такое: падают с ветки золотые монетки?
(Обычное явление в стране дураков.)
●●●
Что за кузнецы в лесу куют?
(А хiй его знает!)
●●●
Сухой-клин, мокрый-блин?
(Мокрый клин, блин!)
●●●
Гаркнул гусь на всю Русь.
(Лебедь.)
●●●
Что такое: два брюшка, четыре ушка?
(Кошачья свадьба.)
●●●
Морщинистый Тит всю деревню веселит.
(Нехватка молодежи на селе.)
●●●
Сколько яиц может удержать женщина в одной руке?
(Оба.)
●●●
Почему зимой женщинам в чулках тепло, а мужчинам в джинсах холодно?
(Потому что у мужиков обогреватель х@iвый, а у баб п$@датый.)
●●●
Что можно сбросить с обнаженной секретарши?
(Обнаженного начальника.)
●●●
Что такое: ходит по стене и играет?
(Муха с плеером в ушах.)
●●●
Когда женщина ногу поднимает, что видишь? Пять букв, на П начинается, на А
кончается.
(Пятка.)
●●●
С какой скоростью должна бежать собака, чтобы не слышать звона сковородки,
привязанной к ее хвосту?
(Собака должна стоять. Эта задача в компании сразу выявляет физика: физик
отвечает, что ей нужно бежать со сверхзвуковой скоростью.)
●●●
Идет ежик лысый - сколько ему лет?
(18 - его в армию забирают.)
●●●
В две руки беру,
между ног сую,
пять минут потею,
а потом балдею.
(Велотренажер.)
●●●
Что ты смотришь на меня, раздевайся, я твоя.
(Кровать.)
(Вариант: Вешалка.)
●●●
Волосатая головка за щеку летает ловко.
(Зубная щетка.)
●●●
Вокруг черное, посередине красное.
(Редиска в заднице у негра.)
●●●
Вокруг черное, посередине белое.
(Редиска там же, только надкусанная.)
●●●
На букву Х. называется, П. увидит подымается.
(Хобот пищу берет.)
●●●
С когтями, а не птица, летит и матерится.
(Электромонтер.)
●●●
То висячий то стоячий то холодный то горячий.
(Душ.)
●●●
Ты помни его немножко, будет твердый, как картошка.
(Снежок.)
●●●
Маленький, серенький на слона похож.
(Слоненок.)
●●●
Что такое: на потолке сидит, лампочку грызет?
(Потолковый лампогрыз.)
Кто такой: шесть крыльев, семь хiев?
(Шестикрылый семи...)
●●●
Сто одежек и все без застежек.
(Бомж.)
●●●
Шел охотник мимо башни с часами. Достал ружье и выстрелил. Куда он попал?
(В милицию.)
●●●
Осенью питает, зимой согревает, весной веселит, летом холодит.
(Водка.)
●●●
Куда идет цыпленок, переходя дорогу?
(На другую сторону дороги.)
●●●
Мальчик упал с 4 ступенек и сломал ногу. Сколько ног сломает мальчик, если
упадет с 40 ступенек?
(Всего одну, т.к. вторая у него уже сломана.)
●●●
Что такое: маленькое лысенькое по лесу бежит?
(Ежик. Почему лысый? Из Чернобыля сбежал.)
●●●
Не лает, не кусает, а в дом не пускает.
(Жена не пускает пьяного мужа.)
●●●
Из какой посуды нельзя ничего поесть?
(Из пустой.)
●●●
Четыре братца под одной крышей стоят.
(Мафия.)
●●●
Кто это - маленький, в земле живет, на "Щ" начинается?
(Щервячок.)
●●●
Белый, а не сахар. Холодный, а не лед.
(Труп.)
●●●
Какое слово всегда звучит неверно?
(Слово "неверно".)
●●●
Стоит Ивашка на одной ножке.
(Инвалид.)
●●●
Почему поп шляпу покупает?
(Потому что даром не дают.)
●●●
Под каким деревом сидит заяц, когда идет дождь?
(Под мокрым.)
●●●
Что общего между деньгами и гробом?
(И то и другое сначала заколачивают, а потом спускают.)
●●●
Два конца, два кольца, а по середине гвоздик.
(Жертва маньяка.)
●●●
Какое колесо не крутится при правом развороте?
(Запасное.)
●●●
Что такое: маленькое, черненькое, в стекло бьется?
(Младенец в духовке.)
●●●
Сколько младенцев поместится в двухместную детскую коляску?
(А это, смотря как нарубить...)
●●●
Что такое: висит на стене и плачет?
(Альпинист.)
●●●
Красная головка - работает ловко.
(Дятел.)
●●●
Что такое: сначала белый, потом вж-ж-жик , и красный?
(Пуделек соседки в миксере.)
●●●
Без окон, без дверей, а внутри сидит еврей? Что это?
(Сара беременна.)
●●●
Что такое: маленькая, зеленая, стоит на панели?
(Проститутка с другой планеты.)
●●●
На веревке болтается, на "З" называется.
(Зоя Космодемьянская.)
●●●
Кто быстрее доберется до холодильника - мышь или слон?
(Мышь. Она на велосипедике приедет.)
●●●
Как узнать есть ли мышь в холодильнике, не открывая его?
(У холодильника должен стоять велосипедик.)
●●●
Что такое: зеленое, лысое и скачет?
(Солдат на дискотеке.)
●●●
Что это такое: синий, большой, с усами и полностью набит зайцами?
(Троллейбус.)
●●●
Волоса, волоса..., а посредине колбаса.
(Кукуруза.)
●●●
Ползут три черепахи по плоскости.
Одна говорит: впереди меня нет черепах, а сзади ползут две.
Другая говорит: впереди меня одна черепаха и сзади одна.
Оставшаяся говорит: впереди меня ползут две черепахи и сзади две.
Вопрос: В каком случае такое может быть?
(Ответ: В случае, если третья черепаха - пи$iит.)
●●●
Маленький, желтенький, дверь собою открывает.
(Брюс Ли.)
●●●
Чем отличается молодой холостяк от старого?
(Молодой холостяк прибирается в своем доме, чтобы пригласить женщину, а
старый приглашает в дом женщину, чтобы она прибралась.)
●●●
Зима, лес, все покрыто снегом. На большом обледеневшем пне лежит
раздавленный член. Что это?
(На конец наступила зима.)
●●●
Маленькая сморщенная, есть в каждой женщине.
(Изюминка.)
●●●
Сколько горошин может войти в один стакан?
(Нисколько, т.к. горошины не ходят.)
●●●
Бежит ежик по лужайке - тащится, хохочет. Почему хохочет?
(Потому что травка писю щекочет.)
●●●
Бежит ежик по лужайке - плачет. Почему плачет?
(Травку скосили.)
●●●
Два гвоздя упали в воду. Как фамилия грузина?
(Заржавели.)
●●●
Летел по небу бегемотик, а по земле за ним бежал охотник с ружьем. Охотник
выстрелил, и бегемотик упал на него. Кто жив остался?
(Слоник, потому что он вылетел позже.)
●●●
Сколько программистов нужно, чтобы закрутить лампочку?
(Ни одного. Это аппаратная проблема, программисты их не решают.)
●●●
Назовите слово, в котором 40 гласных.
(Сорока (сорок "А").)
●●●
В небе одна,
В земле нету,
А у бабы их целых две.
(Буква Б.)
●●●
Чем кончаются день и ночь?
(Мягким знаком.)
●●●
Мы ребята удалые, лезем в щели половые.
(Тараканы.)
●●●
Что это такое: висит на стене и пахнет?
(Часы: в них кукушка сдохла.)
●●●
Что такое - маленькое, беленькое кровь сосет?
(Тампон.)
●●●
Что такое - сидит на дереве, черное и каркает? На букву Ш.
(Ворона. Почему на Ш? Потому что шлангом прикинулась.)
●●●
Что такое - маленькое, беленькое, летает и жужжит? На букву Б.
(Муха. Почему на Б? Потому что блондинка.)
●●●
Тихо сзади подошел,
Дважды всунул и пошел.
(Тапочки.)
●●●
Волос на волос, тело на тело - начинается темное дело.
(Глаз закрывается.)
●●●
Что такое - 100 хYев и одна веревка?
(Бурлаки на Волге.)
●●●
Что такое - 100 веревок и один хYй?
(Парашютист.)
●●●
Что такое - 100хYев и 100 веревок?
(Бурлаки на парашютах.)
●●●
Что это такое:
По потолку бегает, лампы сосет?
(Потолковый лампосос.)
●●●
Висит - болтается, на три буквы называется. В середине "У".
(Душ.)
●●●
Что такое:
Два конца, два кольца?
(Геевская свадьба.)
●●●
Почему Ленин ходил в ботинках, а Сталин в сапогах?
(По земле.)
●●●
Почему слоны не летают?
(По воздуху.)
●●●
Чем человек отличается от паровоза?
(Паровоз сначала свистит, потом трогается, а человек сначала тронется, а потом
ходит и свистит.)
●●●
Сверху черно, внутри красно.
Как засунешь - так прекрасно.
(Галоши.)
●●●
Из трех букв состоит,
На "Х" начинается,
Когда работает стоит,
Когда кончает, кланяется.
(Хор.)
●●●
У какого молодца
утром капает с конца?
(Самовар.)
(Вариант: Водопроводный кран.)
●●●
Кто такой:
Сам не стреляет и другим не дает?
(Александр Матросов.)
●●●
Висит груша - нельзя скушать.
(Чужая груша.)
(Вариант: Тетя Груня повесилась.)
●●●
Две черепахи (самец и самка) прогуливаются влюбленно вдоль берега держа друг
друга за лапки. Через час обратно возвращается только самец. Где самка?
(Она осталась там - он забыл ее перевернуть.)
●●●
Двое мужчин находятся на разных сторонах земли. Один переходит по канату
через обрыв, а другому делает минет 70-летняя женщина. У обоих мужиков одна и
та же мысль. Какая?
(Не смотреть вниз.)
●●●
Ползет, ползет - камень съест. Снова ползет, ползет - камень съест.
Что это такое?
(Камнеежка.)
●●●
Ползет, ползет - дерево съест. Снова ползет, ползет - дерево съест.
Что это такое?
(Камнеежка. Он и деревья ест.)
●●●
В темной комнате, на белой простыне - два часа удовольствия.
(Киносеанс.)
●●●
Что у Адама спереди, а у Евы сзади?
(Буква "А".)
●●●
Почему в Париже девки ходят рыжие?
(По земле.)
●●●
Две спины, одна голова, шесть ног. Что это такое?
(Человек на стуле.)
●●●
Чем первый этаж отличается от девятого?
(С первого этажа упадешь: "Бух! - А-а!" А с девятого "А-а! - Бух!")
●●●
Сам алый сахарный, кафтан зеленый бархатный.
(Негатив на цветной фотопленке, запечатлевший "нового русского".)
●●●
Туда-сюда-обратно:
Тебе и мне - приятно.
(Качели.)
●●●
Разноцветное коромысло над рекою повисло.
(Признак начинающегося сумасшествия.)
●●●
Чем отличается трактор от помидора?
(Помидор красный, а в тракторе дверь открывается наружу.)
●●●
Что это:
на окне сидит, по-французски говорит?
(Француз.)
●●●
Чем их больше, тем вес меньше. Что это?
(Дырки.)
●●●
Чем лошадь отличается от иголки?
(На иголку сначала сядешь, потом подпрыгнешь, а на лошадь сначала
подпрыгнешь, потом сядешь.)
●●●
Что такое:
Черное, квадратное, волосатое на тумбочке стоит?
(Телевизор [п$Yдой накрылся].)
●●●
Черная собачка не лает,
не кусает, а в дом не пускает.
(Дохлая черная собака, загородившая вход в дом.)
●●●
Домашнее животное, на "т" начинается.
(Таракан.)
●●●
Домашнее животное, на "д" начинается.
(Два таракана.)
●●●
Домашнее животное, на "ы" начинается.
(Ыщо один таракан.)
●●●
Что такое:
Черное - на одной ноге?
(Одноногий негр.)
●●●
Что такое:
Черное - на двух ногах?
(Два одноногих негра.)
●●●
Что такое:
Черное - на трех ногах?
(Рояль.)
●●●
Что такое:
Черное - на четырех ногах?
(Одноногий негр за роялем.)
●●●
Можно ли тещу убить ватой?
(Да, если в нее завернуть утюг.)
●●●
Что легче разгрузить - самосвал с кирпичами или с младенцами?
(С младенцами - так как их можно разгружать вилами...)
●●●
Маленькое, розовое, об стекло бьется...
(Младенец в духовке)
●●●
Что такое зеленое и летит?
(Это летящий зеленый помидор.)
●●●
А что такое черное и ползает по земле?
(Это тень от летящего зеленого помидора.)
●●●
Что такое счастливый конец?
(Член после cекcа.)
●●●
Что нельзя сделать в космосе?
(Повеситься!)
Что такое сто хуев-одна пизда?
(Это хуйня,а вот когда сто пизд и один хуй-это пиздец...
Прислал АДАМ )
●●●
Он от дедушки ушел, и от бабушки ушел.
(Cекc)
●●●
Зачем нужен оргазм?
(Чтобы не затрахаться досмерти. )
●●●
Зелёный, лысый и прыгает?
(Cолдат на дискотеке)
●●●
Что такое 90-60-90 ?
(Езда мимо гаишника. )
●●●
А что такое 60-90-60 ?
(Это беpеменная одиннадцатилетняя девочка.)
●●●
Зерно, прошедшее огонь, воду и медные трубы.
(Самогон)
●●●
Кляузник, сочинитель анонимок.
(Онанист)
●●●
Новое название любимого музыкального инструмента американского
президента.
(Cекcофон)
●●●
Что общего у водолаза и повара?
(И тому, и другому время от времени приходится опускать яйца в воду.)
●●●
Чем отличается грудь женщины от игрушечной железной дороги?
(Ничем: обе созданы для детей, а играют с ними папы.)
●●●
Чем кончаются день и ночь?
(Мягким знаком.)
●●●
Что такое: маленькая, зеленая, стоит на панели?
(Проститутка с ЛУНЫ)
●●●
Глаза боятся - руки делают?
(Cекc по телефону)
●●●
Если все женщины сядут на шпагат, что произойдет?
(Земля пиздой накроется!)
●●●
Мальчик упал с 4 ступенек и сломал ногу. Сколько ног сломает мальчик, если
упадет с 40 ступенек?
(Всего одну, т.к. вторая у него уже сломана.)
●●●
Что общего между деньгами и гробом?
(И то и другое сначала заколачивают, а потом спускают.)
●●●
Как засунуть жирафа в холодильник?
ОТВЕТ:Открыть холодильник, засунуть туда жирафа, закрыть холодильник. )
●●●
Как засунуть в холодильник слона?
ОТВЕТ:Открыть холодильник, вынуть оттуда жирафа, засунуть туда слона,
закрыть холодильник. )
●●●
Лев созвал всех зверей на собрание. Явились все, кроме одного. Что это за
зверь?
ОТВЕТ:Это слон. Он же в холодильнике, помните? )
●●●
Вам нужно пересечь широкую реку, которая кишит крокодилами. Как вы это
сделаете?
ОТВЕТ:Вплавь. Ведь крокодилы-то все на собрании у льва.)
●●●
Попробуйте посчитать. Заходите вы в трамвай, на конечной остановке, сидит 3
человека.
На первой остановке выходят 2 и заходит 4.
На следующей выходят 3 и заходит 8.
Еще на одной остановке выходит 3 и заходит 1.
Потом выходит 5 и заходит 7.Еще на одной остановке выходит 4 и заходит 2.
Потом выходит 3 и заходит 10.
Сколько остановок проехал трамвай (не глядя в текст)?
(6 )
●●●
Маленькая сморщенная, есть в каждой женщине?
(Изюминка)
●●●
Почему женщины по утрам чешут глаза?
(Потому, что у них нет яиц)
●●●
Растение,которое знает все?
(хрен)
●●●
Чем отличаются женские ноги от мужских?
(Между мужскими ногами яйца одни и теже, а между женскими все время
разные)
●●●
Что приходит последним в голову жуку, влетающему в ветровое стекло
движущейся машины?
(Его жопа)
●●●
Что это такое: власть лежит, а вода бежит?
(Депутату ставят клизму.)
●●●
Летел по небу бегемотик, а по земле за ним бежал охотник с ружьем. Охотник
выстрелил, и бегемотик упал на него. Кто жив остался?
(Слоник, потому что он вылетел позже.)
●●●
Что общего между Формулой-1 и cекcом?
(Пит-стоп - смена резины!
●●●
Какое растение все знает?
(Хрен.)
●●●
Что имеет голову, но не имеет мозгов?
(Сыр, лук, чеснок.)
●●●
Что такое один нуль?
(Лысый.)
●●●
Что такое два нуля?
(Туалет.)
●●●
Что такое три нуля?
(Лысый в туалете.)
●●●
Что такое четыре нуля?
(Двое лысых в туалете.)
●●●
Что такое пять нулей?
(Олимпиада.)
●●●
Что такое шесть нулей?
(Лысый на олимпиаде.)
●●●
Что такое семь нулей?
(Олимпийский туалет.)
●●●
Что такое восемь нулей?
(Лысый в олимпийском туалете.)
●●●
Один глаз, один рог, но не носорог?
(Корова из-за угла выглядывает.)
●●●
Какое слово начинается с трех букв "Г" и заканчивается тремя буквами "Я"?
("Тригонометрия".)
●●●
Что нельзя сделать в космосе?
(Повеситься.)
●●●
Что такое: 15 см в длину, 7 см в ширину и очень нравится женщинам?
(Банкнота в 100$.)
●●●
В каком случае шесть детей, две собаки, четверо взрослых, забравшись под один
зонтик, не намокнут?
(Если не будет дождя.)
●●●
Восемь ног, три головы и два крыла. Что это?
(Василий Иванович на коне везет себе курицу на обед.)
●●●
Эти три телезвезды хорошо известны каждому из нас. Блондина зовут Степан,
шатена зовут Филипп. А как зовут лысого?
(Хрюша.)
●●●
Не лает, не кусается, а так же называется.
(@)
●●●
Что такое: черное-белое, черное-белое, черное-белое?
(Монашка кубарем с горы скатывается.)
●●●
Что такое: черным по белому написано?
(Унитаз, у которого постоял негр...)
Ну и ещё:
Группа со значением "Привет":
Охаё годзаймас (Ohayou gozaimasu) - "Доброе утро". Вежливое приветствие . В молодежном общении может использоваться и вечером.
Охаё (Ohayou) - Неформальный вариант.
Осс (Ossu) - Очень неформальный мужской вариант.
Коннитива (Konnichiwa) - "Добрый день". Обычное приветствие .
Комбанва (Konbanwa) - "Добрый вечер". Обычное приветствие .
Хисасибури дэс (Hisashiburi desu) - "Давно не виделись". Стандартный вежливый вариант.
Хисасибури нэ? (Hisashiburi ne?) - Женский вариант.
Хисасибури да наа... (Hisashiburi da naa) - Мужской вариант.
Яххо! (Yahhoo) - "Привет". Неформальный вариант.
Оой! (Ooi) - "Привет". Весьма неформальный мужской вариант. Обычное приветствие при перекличке на большом расстоянии.
Ё! (Yo!) - "Привет". Исключительно неформальный мужской вариант.
Гокигэнъё (Gokigenyou) - "Здравствуйте". Редкое, очень вежливое женское приветствие .
Моси-моси (Moshi-moshi) - "Алло". Ответ по телефону.
+ Группа со значением "Пока":
Саёнара (Sayonara) - "Прощай". Обычный вариант. Говорится, если шансы скорой новой встречи невелики.
Сараба (Saraba) - "Пока". Неформальный вариант.
Мата асита (Mata ashita) - "До завтра". Обычный вариант.
Мата нэ (Mata ne) - Женский вариант.
Мата наа (Mata naa) - Мужской вариант.
Дзя, мата (Jaa, mata) - "Еще увидимся". Неформальный вариант.
Дзя (Jaa) - Совсем неформальный вариант.
Дэ ва (De wa) - Чуть более формальный вариант.
Оясуми насай (Oyasumi nasai) - "Спокойной ночи". Несколько формальный вариант.
Оясуми (Oyasumi) - Неформальный вариант.
вот, тут слово "СПАСИБО" по-японски:
御蔭で [おかげで] [окагэдэ] - спасибо вам
有難う [ありがとう] [аригато:] - (от 有難い) спасибо; どうも有難うございます、大きに有難う большое спасибо, очень благодарен
お疲れ様 [おつかれさま] [оцукарэсама] - благодарю вас за труд; спасибо за вашу работу
] 有り難う [ありがとう] [аригато:] - спасибо; благодарю
ご苦労さま [ごくろうさま] [гокуро:сама] - спасибо за труд
御馳走様 [ごちそうさま] [готисо:сама] - спасибо, всё было вкусно; спасибо за угощение
большое спасибо - домаригато, ударение на последнюю гласную
!Открытые
*Убраться в гараже
*Переставить Ubuntu
!Завершенные
*Нет
— доктор, сделайте мне кастрацию!
— вы уверены?
— да! быстрее!
— готово.
— ой, доктор, что вы сделали?!
— то, что вы просили, а вам не нравится? может вы имели в виду обрезание?
— хм... может быть, а в чем разница?
| !Как выглядит | !Как набирать |h
| ''полужирный'' | {{{''полужирный''}}} (два апострофа) |
| --перечёркнутый-- | {{{--перечёркнутый--}}} |
| __подчёркнутый__ | {{{__подчёркнутый__}}} (два подчёркивания) |
| //курсив// | {{{//курсив//}}} |
| верхний индекс: 2^^3^^=8 | {{{2^^3^^=8}}} |
| нижний индекс: a~~ij~~ | {{{a~~ij~~}}} |
| @@выделенный@@ | {{{@@выделенный@@}}} |
| {{{моноширинный}}} | тройные фигурные скобки |
Какую на нынешнем уровне технологий можно сделать наименьшую ракету для вывода на орбиту скажем 1 грамма ПН. То есть вроде ясно, что разработат носитель в несколько тонн - задача не трудная. НО какова возможная минимальная стартовая масса, при условии, что старт традиционный - с земли (пусть даже с экватора).
Можно ли вложиться в 100 кг?
!Ответ 1
Топливо - пентаборан-перекись для первой ступени и гидразин-пентаборан для второй. Криогенные топлива при таких массах не применимы из-за слишком большого отношения поверхности к объёму, поэтому надо выбирать топлива с максимальным достижимым УИ из некриогенных. Пара перекись-пентаборан даёт пустотный УИ 380 с, а пара гидразин-пентаборан - 406 с. Со второй парой проблема в большом количестве конденсированной фазы, а первая пара проверена экспериментально.
Баки из кевлара, двигатели - неохлаждаемые, из иридий-ниобиевого сплава. Сопловый насадок второй ступени - из УУКМ. Вторая ступень не имеет органов управления, вместо этого перед отделением от первой раскручивается вокруг продольной оси.
Теперь раскладка. Стартовая масса первой ступени получится в районе 75 кг, второй - 25 кг.
Весовая сводка первой ступени:
1.Двигатель - 2 кг
а) камера сгорания - 300 г
б) рама - 200 г
в) тна - 1 кг (на разложении перекиси)
г) агрегаты автоматики - 300 г
д) агрегаты обеспечения запуска - 200 г
2. Блок баков перекиси и пентаборана с совмещённым днищем - 4 кг
3. УВТ - 600 г
4. Межступенный переходник - 200 г
5. Баллон с гелием для наддува - 300 г
6. Система управления+система электропитания - 2 кг
7. Система разделения ступеней - 500 г
Итого сухая масса 1-й ступени - 9,6 кг. Невырабатываемые остатки +1,4 кг. ХС первой ступени при интегральном по траектории УИ 3100 м/с получается 3167 м/с.
Сводка второй ступени. Тут всё хуже, но не смертельно. Подача будет вытеснительная, среднетраекторный УИ 4000 м/с, ХС должна быть в районе 6300, значит, конечная масса обязана быть не более 5,1 кг. Но, поскольку у нас не будет ТНА, СУ и прочего, то в 5 кг уложиться можно. Нам всего-то нужно вместить 20 литров жидкостей.
Поскольку на второй ступени нет СУ и УВТ, то орбита - только эллиптическая, мы же не меряем скорость в точке бросания, а всего лишь выжигаем топливо до упора. Орбита будет вида 200 км Х 400 км.
Траектория будет зависеть от тяговооружённости первой ступени. Возможно, понадобится баллистическая пауза после окончания работы первой ступени. В любом случае, весь набор высоты/вертикальной скорости ложится на первую ступень. Так летали "Скауты", например, но, если мне не изменяет память, на второй ступени у них УВТ всё же есть, а раскрутка применялась только на третьей и четвёртой.
В принципе, такую лёгкую ракету можно пускать и с наклонной рампы, как "Лямбду-4", но в этом нет большой необходимости - у "Лямбды" весь разворот по тангажу происходил между третьей и четвёртой ступенями, хотя бы на одной ступени УВТ необходим, а потери ХС на управление будут меньше, если разворот по тангажу делать плавно.
То есть, в целом, траектория такой ракеты не будет отличаться от траектории, скажем, "Скаута" или индийской SLV.
! Ответ 2
Из любительски - реального - двухступенчатая ракета, первая ступень - ТТРД, управление аэродинамическое, вторая - гибридный ЖРД нейлон-ЖК, управление - УВТ + сопла по крену, подача вытеснительная. Минимальная масса - скажем, порядка 200 кг стартовой и 1 кг на орбите (плюс 5 кг второй ступени )
! Ответ 3
Перекись так перекись.
Гибридник с гидридом алюминия в парафине на вторую ступень.
Никаких металлов в двигателе, кевлар и углепластик.
Возможно - керамическая вставка в критику.
Подача - вытеснительная, возможно с разложением перекиси.
Первую - можно аналогичную, если деньги есть на гидрид.
! Ответ 4
ЗЫ. Кто нибудь слышал про топливо - LOX + LH2 + Be вроде должно быть крутым.
Кстати, как ведут себя при смешивании жидкий кислород и жидкий водород (можно ли их хранить смешанными?)
! Ответ 5
Если действительно хочется вывести 1 грамм ПН то может так попробовать:
Делаем такую дуру из нескольких (штуки 3-4-5) простых твердотопливных ступеней, напр. 20/100/500/2500 грамм с горячим разделением ступеней и стабилизацией вращением, т.е. иначе говоря одна сплошная пиротехника. Мю ПН будет не супер ну да и хрен с ним
Осталось только каким-то образом забросить эту дуру до границы атмосферы и как-то худо-бедно сориентировать.
<<miniBrowser noplayer http://10k.aneventapart.com/1/Uploads/177/>>
Само строящаяся, самодвижущаяся, само чистящаяся, само восстанавливающаяся дорога построенная из огромного количества миниатюрных роботов, выпущенных автономной фабрикой, добывающих необходимые компоненты для фабрики из окружающей среды, добывающих энергию для фабрики и работы самих себя из окружающей среды.
Роботы это небольшие кубики с солнечной батареей на одной грани и полукруглыми захватами с двумя степенями свободы на пяти оставшихся.
#[[Начало]]
#[[Книги]]
#[[Linux]] - заметки по линуксу
#[[Бред]] - просто бред
#[[Ссылко-концентратор]] - всякие ссылки
#[[фильмы]] - что хочется скачать
#[[музыка]] - разные названия разных групп и альбомов
#[[Игры]] - несколько игр в которые я возможно поиграю
#[[Android]] - мои заметки по андроиду
#[[Big XML Table]] -мой маленький проект
#[[Ракета]] - как построить маленькую ракету на дому
#[[День варенья]] - дни рождений моих близких друзей
#[[Мечты]] - всякие разные несбыточные мечты
#[[Справка|Вики-разметка (примеры)]] - справка
#[[Mini Browser]] - проверка браузера
#[[node.js]] - node.js
#[[Шифраторы]] - проверка различных шифрующих плагинов
#[[Календарь]] - маленький календарик
#[[прочее]] - не помню
#[[ДАО]] - запись на случай просветления
#[[Hello peoples]] - приветствие
#[[Пошлые загадки]]
#[[Медитация]]
#[[Привет по японски]]
#[[Как точить ножи]]
#[[Шагоходы]]
#[[Таблица символов]]
#[[Free icons]]
#[[Полезные Букмарклеты|Букмарклеты]]
#[[JavaScript Эксперименты|Эксперименты]]
#[[Браузер в одну строку]]
#[[ASCII-Art]]
#[[ASCII-Art-test]]
#[[Игра в 4 мерном пространстве]]
#[[DVCS-JS]]
#[[Mumble-JS]] - Голосовой чат в баузере
#[[Язык мечты]]
#[[Голосовые чаты]]
#[[Настройка Indicator-Sysmonitor|indicator-sysmonitor]]
#[[JSLinux]]
#[[BackupHistory]]
#[[AttachFile]]
#[[Base64Converter|http://webcodertools.com/imagetobase64converter]]
#[[hacksongs.ru|hacksongs.ru]]
#[[LifeJS]]
#[[WebGL]]
#[[WebRTC]]
#[[Nokia]]
#[[FFMpeg]]
#[[Чем ты помочь Open Source|http://habrahabr.ru/post/147220/]]
#[[Git]]
#[[Fossil]]
#[[Отладка Javascript|http://habrahabr.ru/post/76485/]]
#[[Paranoicus]]
#[[Chromium in Windows]]
#[[Meld]]
#[[IOS dev]]
#[[PhoneGap]]
#[[Mono]]
#[[конец]]
#[[ссылки]]
#[[Android]]
#[[Anonimazing]]
#[[NetCat]]
#[[Arduino]]
#[[Torrents]]
#[[3D принтер]]
#[[WP8]]
#[[Трудовой договор]]
#[[Email]]
#[[RSS Reader]]
#[[Xvfb]]
#[[PC emulator on Java]]
#[[Дихромазия]]
#[[Метрики кода]]
#[[Число Пи]]
#[[Mutual-authentication with web services]]
#[[истинно 3D-фильм]]
#[[CHAOS]]
#[[Бассейны]]
#[[Пюрлы]]
#[[I2P]]
#[[DN - децентрализованые сети]]
#[[Hosting]]
#[[Javascript Open Source]]
#[[Online GCC compiler|http://gcc.godbolt.org/]]
#[[скачать видео]]
#[[рецепты в микроволновке]]
#[[рецепты в хлебопечке]]
#[[рецепты]]
#[[Холотропное дыхание]]
#[[Public DNS]]
#[[Нива]]
[[Бред]]
[[Занимательные ссылки]]
[img[data:image/jpeg;base64,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]]
{{{
余裕 [よゆう] [ёю:] ==>
1) свобода распоряжения чем-л.; 余裕のない生活 жизнь с ограниченными возможностями;
2) духовная свобода, творческая свобода; спокойствие духа
自由 [zìyóu]
1) свобода; свободный
2) вольный, не стеснённый правилами (программой)
3) либеральный
[zìyou]
диал. незанятый, праздный
}}}
[img[data:image/gif;base64,R0lGODlhiAE6AuYAAP///x4eHiMjIw0NDRQUFBsbGw8PDxYWFicnJxMTExoaGgoKCggICCoqKjExMf39/QQEBBcXFy8vLzg4OD09PSsrK/v7+/j4+EJCQhEREd/f39nZ2VFRUfT09EdHRxAQEG1tbVdXV9TU1M/Pz6KiokxMTO/v766ursTExGFhYV1dXWdnZ7+/v319fTAwMOnp6Z2dnba2toiIiLi4uLCwsDMzM8bGxpiYmI6Ojubm5vHx8YKCgqioqEtLS3Nzc+Tk5JKSksnJyXd3d+zs7Ojo6KampiEhIZaWlu7u7kVFRfX19YSEhLy8vM7OzouLixgYGFtbW0FBQZubm3x8fPPz82JiYpOTk4GBgXR0dMLCwrKystLS0uDg4GNjY1JSUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAACIAToCAAf/gACCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AAwocSLBgOQsGE+J7YOGCwocQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdytTlg6ZFLSCESrWq1atYs2rdyrWr168KOxB5CpbmAyJOYpAtK3MLFA5H/zSwlWnBSQgPKWasnduSCRQVKULIeMHX5QUZIVaE4CDkR+GWL6aoUBGiRwgRj1maSIGhBAcKK7JkXhnkbokSPaCQ6DAa5QgOHjB4WIyBxN7WIV+koNADAwYKGDhwYKEEt8gHN1xMoMB8woQQJTzguG1842sKExw41346tgzH1Tkq8dGbggsKDhAon/CbggyH4TXeqIAae3vmFSbEXqEjfsYNHqznnHPtaRccBS30519FG4QAXHYOVICAANpNcJ4H0dW2IEVIpCBAdgiw10ADEmxXgQMecNBDCVUQsWFEFvAgQH4SNNCZAAKU2ACOITLngROsvajQBTg4N2MDCDA3ov8D6J2oHwbskSDkQzw44EJ62jGZ3YgSOEmBB9j1oMWUBnUAA5RYLueABGyOiAACErKHQQU+BEmmQEpMUcCJb564I44BBCBAAw6kVwF2CEh5p0AatIBdBQFMiCOSCBBaIwKF5oeBAykQtihAM3BwIgUTIhBopG9KsGahjzLpgBSf/vMACx74WeibOZJIKYXsgXklBSqMEGs/F5xAQX5IIinAhGy2+SaE6AkQKQ3D8vPCDtnFVmmpqTa7pgTMQWlqAA6gUK0+IqiwbAUSFoqkBN2SqB12Emxa6HnUnnuPCFEsi2Oa21Ja46Q1rJrdlxOYq289L6xAYYQVNCCoA/4KUED/AYAKSmKl7OonRHELz/PADhdHOIHFM0oAqLSCojopjh9SwIGwIcvzAAwVzIieBxNE6oDE0npraaUqN4AeBzTAV/M7GxyxrKmDTtBAAZHueMABy7I5AbsqR1qBC0b0gNnS74zggbRAB0AoAhhvG8DFVR97Io9WuhCFE1ORrQ4VS9SAgMq5/v3z30iemrWqPC7LpAsuTOGi3uoEkUIBDjiYQKQWtxxpAVcnQHXWFPOYn3kgNEEd5OJcwIMElJewggMHEBAoAQe0fHHtb/MIbmwRChDCDU48jro5D5AQAbkTBiot1cmzHACbpcL7vG+9ObBDBxecPvw3G/jgwoSeCyrA/wEYo3qqxiyrqd5vYCIARPbbl2O2ARGYenkBtGvO+dvKs11AkoWiGHOY44B8wUR7MyFBBTBWgMu9jXMJwFECEnC8i8HsaTzalhGMkCQp2Cl+4biBABwYO9xdLEQOwB/VPiepnP0LO+Z5ggucAD8QgmMDMmBdAA6AK/EFClMNIN/5tuVCaZ2IcUaIAg0+aMNuiMADBZiaEJuXMbgBigD/M1UPgIABXM0oClfQgAUQ2MRq4JACy5raxY4XqB0Fimq1K0AECCCznHEgBhcIggpSKAAMSKGGZcwGWTTggQG8cUcr/NzD2Na5AKgmB0iQAQ2UcIELmEALO1DBCTaQt0Bq4/8BKOBAoE72NFPRzoJrCgDtBCADFiitEEGgQRMU5EludAAHbbzVpP6UxhEKQDoxsMEiTDCEWnpjBCHgH6RSlSy1pUcAFKgCD6hgTF90EhUWKAIFZAexCeUMagVgk6CsQMZqhsMEMmDesnr2ph1NqAE7iIEMcMACJpqzHChI5tYKJSgcFOEGPZuRosAxhA0U856HeMAJKHaiZQYgBEgAAIAcEAWFgeOWUQgBCGAggleWE3IIuQAM4BShyqXgBiyQC0M0sIEfPOCj0xjCDEBwLCvZaAUwsGcglXCFJzhgBVPAQQyUAFNBvgAFOwgBpCjUACdFCAQyQEFRyWYFFwjBBgf/nWo1LqABJkjhClE4lvIwV6reIcADV2iCJy2wgQ2Y4wIbOEELdlOD7AxqRP/jkv621UcZ0NKGL/3GBXSgARaQwAcp6AEFajS4Nk2KaIUaWNssxrwW6BR1Y9TGBV4gAhZIoQqx2ScCjKCqAQmqUjiS3psE5xw3qk1lLphBGZlwBSCw4K/NsIAORDADHtxACD1AwBMCxa7mYWoCEniepDYGtEpx6VZtJJTEoOAircaqCT1YTgpgsIFX6uICHchBWzcgAhHYAAU2sEEMgDDXykjNaxSLgBEktKyLMU9SBVtS2toErzSqygE12JhAm2gCKHztUHhpAQ00oNUOGDSklhTv/whmQGEb0IAEWpgBC2wwghfogJgvGEIOWDoCFpyABDeQQQuEIAQfrEA4PBvgdnwDqQidqoXIZV7uIhCBjKnMuctjmWuh5to3YscIVfAuZqcAwAkkrwIYgAHIGkEEEmABCyCoQhWgoFhSMc7LHFSPCzzwlhX1gGcRg9nb5tg2U/G4zcs6rS75FygHlGACcDsVjwHlgAdejXwHiODyTqi8CU4QATXIzwSqcFm90eA8JmoXBaZw0Eaw1QlR+N5on/CE1TIObJo2AjTTIykvKg9mcCouqnE1NUGBKHcU42Fn1lQ4AcyRAMfDgINU0ILPTGAFMsDz1cx3u0h5Kz1RGFv8Hv8wAyc7AAPNKlGEbhAJC2hACilIAQi23QIZcMBCEjIPkzTlgQiJ+tNIRMDxMIWeXMMrryO8GIn4h8iLUaAEbEMAAYwAghBU4QpWmEEOlPAC7CHhBz+4QA4ocLv/VayUOZNQACag7PiN4GTHrQFjC9UDt0oisIQYwnlZEAMRjGAEItiABlZ+8vSiIAgtDQIJeFAEFgRBAy8YQRFOoAEg/OwADeAAYDiQhD0ml1AlSIIEjkACDvgAB0CYARIqyQgUKIvOgOLrD3GEAY8Pjyw/OJu0IMtuBIBAybSgAoltAB8l6OAI9Nz5CEwwYofA56VFhUGuBsYlU2XpTQGsQAyaiAT/DkhMduIr1L/0MoyEa4IsS8DroLI2Iv0k4Vb0FcAJrBsrCzgsyOTj09tCUGlvmEAFNcod5rIGIXYtLwIDXbYQti4xQdE3Ag6g2TdQcClSOzyD4ksj1WTbRCBgbEBXv+AJwnGCHN24fIFS1YTWnTMZXHN7NkBPdk72xgCwqwAhyAHnmWEBIehK+N0PAHrY1jIQNBp1Lfgv4ALQY+lWwKLcQEF6dGWqOLbMi9MXe02EA0zVTijjXA1AfN3QAldDNYESO/YlLSsjLRHAA+NXLSQQTmPHJnelKwq4DRowAQkgRImkQnQWTjtiBIPnSTGgZk/jgJO3fN3AAlKEeC0TaOTj/4DhJCk0cIHDwgKJhGpu9Dcq4HXa0HyGxkNXFzvd9yZqEwGw4kkb0DMwWCMkclcFgAXXVw0PkE75tj8/dGqwJjE7IBeepAEYkDGawzY4QgBRIDzYEAMqM4cBQEGK1H8EQCE1IAAlYIaeZAIlgDWUtXrjUgBGIBrZcAEpEEEOeCqc8zl/liPwggAyWEsg0GNyBIPi44QsEAo+OAoiADu5E28QlFc75HASYwAtUE03YF979oCnxTbU1goPsFltZV4zgAIjoAFDoFvvNwnGdzu1M0E5CIGPWHtvIwPVZAMVUEEEMC6ItywHEAK4FQpwpV4ncAMrAAIpUG6ZQlwY0AM+oP8CK4ADNMADTGACl0AEGDCCEahKOgiJUXRjK1hLIoBnErJCyzNWAoB/nGBtI0ADR9ACIUAxE8Q6niOBCWAA+EMABJAAuHYxRvAERjAFl6AFjARBPvRATkg+E4IxJ4B2NvQDFGAA9JeQlLU2CJAAs4gJFiBeKAADveYARvCQBjAAA4A/EdQ5BuA5E/SQA+A5BZABEfQmlLMCLVAEpbcIDCEIMvBGJvRAnPOM/IM16uYB1VhGFhACBuCQ9+Uz2SEBByAElmACNkACiKF4EdBAt/aQGcBAEZAADICTRJkAGTAAdzkA67Y/eOWQz5MCVpCViaCIXXk1E/Jnwjg+ExRFAsD/ABzwi1WhA1sAmaTgAxDZYyyTQW+SAA5QcYxQUCMgAyuAAW/DNot5igs5guPDYxUkRzy2Q2+WARmwlqbyORujNuzhAlcAHkwJAE2AAF0JQeRDWRakMrWDKW9yBJ9YFESwBSJpCk8BBGy0lhP0RjAoAMK0CBYwAkcAApvSjHEZl/Y1nBFwAHeZAbXDmhjzZhEwm+25lnLknq4YIh8ZKeYBBVKgjopQi06gg3F5SsX4N/RXNIJSBPf0ADQQaxczACYpRDAjAZ2ICEoQVyEgADhJjFejABoaOyM4QQZwkwZwAApwNR+gALPzAeW5kLNZjOX5ZslTKZmIKkyyArqXUEOA/wEGsCR1CJEOp0qbozZsYwDUhVAscJLleTs96YAJMAAq4F1UgAI4wAFsw6AFEJSXEzsOSTsEEKKxowBb+qEfsJNZ6pCB1qGIN577g1rFeF/PVgFQ4IeHwAIScDn1hYM4YkFw9DkTZAWCsJzD8gAbUAFCKSj4M5xjNwAhAB9UMAI4gAENlAAIcHlKmoMOCaI3OaZfipNVowA96ZWLGT7EqYmU5S+VUijL4QGWoVaHcAErcAA/E2c3VoeMKYH1FQAkgBB+OixIgAEDUDuH10C1IwC0MwAYwAIo0GuAUjs/UyiQOEJ5qEpbipM3iZPSKqKqJAAm6qUh+jYNqDk3BjUa8/9O/XVcwGFAhXACDfSj8qYyn6M8MIgxTIBQAOB5vRoo4ROUcIR4CHAAQflAk1eV9wOsHwqi0sqpA0AAXoqTY4ojCoCT70iopxV9pfInzdSuAjAFnlIIhZeT9hpozzhCG/lG7igAQSCvAHAC4cOvEDSo3LqkVtoygEI1yEUhVbqQDNqVXYmwW4qwI3qwXpqhGzqCmBN8ajYiybIqa7Jc3scDiDADFlM7gXY+j3g7K3MxnsMEuXouIjA+b3M5PylEO/RnBICv/uqjf0IBAdCrOWsAG8qp0SqttMOpWPOz9Ic7MYtFgFeID0MotrYnwOEBlVgIrTg+Vuovp6KlebhqBlD/AWOTtbFyASEgRxrDOZ1zAGtpbBLjsTskLT1Zpjv0k1l6KibKuQRQA2mYAJyqofkDKOvmPxHEfQLAAThwBDBAAkVwBEDQjSogAzwQAx1GHSxAmvVDucmDJI/okauVIwXwmCB3Ty0AhhL4QG9DsQ3Qob36kEvqqvyzRpl4plnUMzzUZ/u6AP1zPhM0ACUABHcBAxpAAxgAAjmQUJTECEvQqwkJb2rzJ/xzQaeyA457Ljtgh7HaRj9mMRMURJ6zkgtwaFczaPR3p1gkrPL1UDhwAyeAAt3ZRXVoubaWABOAA8LSlIIwdZbwACAwgqcklHAGN0a5RgHgA0tpTjdDQecj/4GCI3wp+zwnIztYBJHYy5Bts2cRsAJFgF64hQLRq5M9cAMiQJmSIALJFa1AfFosU5sN6TUCMKQmCwAzAI+GkzVo03+GBrPb24Bl6jnHE5cpEAOrgQgiQAEZkDvA0gKe8r+DcAJqo5hYQzUjcopvlDkzUodCYMfVsgEOMADC6o7isz8QFJR/RqejCEcmOXZVGgDmagjBa1+cWY+eeALJRYIBgJ4r+6i4030RgANbLAgWoAKG1Da2c8ZRqTxWyDLwQj4j8pAVIAQnEL9uXAIJsCP1UqOhoBvocTmHaZI7GpXEyWZqkcoAwAN4izjScgA9SYyGiyqXUilbJzUF0AM4YP8DCPQAT4Qx4EICGTsKOcAB/PuQH9s/g8iacxQA/iiv0BxFAyMtQnk1tBOs8lIwFCMBK5ACPgADSwACSwCniPACHPAEHwLQ5zwKG9COmDk+zDO10oK9YxoB4efMAACEPTkoLbsA6ImDHLACpEIBYWUELsABJKADHcAFHYA9iEAWT3FtOJIzFCDMj5BZkUACkWJs93yKcWS4DdhAHACHJisCFRC1pbmSJLikytkEUmADXeUEUkAEuNq8i6CIx/UhbUzIh/ACZ/MzI5I51hlHjGSdc9QDSC2vgcoy/xNdxsugHMDLhsDTjvACMlBS2EECdmcCYF0IMMCROFKmERjXI8T/kIESl08ggCarA1IqtahS1pZLcX2K1/NaVCNDm//TA0nTASbwnJtwARxQjMR4k/BJzR7rlo/IY2MS2LHyACuAp9BHnOQDoYOg1YywFkFQU9GLAUFgAk58CYb8y0GUpJyDngsJR+5IudUbAnKxhTKcAmtJ0ckyPqv0NkCACSOgAj0UyJ2J2aEAA/ZV3rEjQYamwuUzdvEKALD9KZ6Hp0D6kZZbpiDgg4AaXHIUkXIEAlNGCi0wgv3af10JNfxqSP4DyD7gce/9KSTDQIPCyCRIACog3Y2QBRRQ3V5TyTsgfqUgAhhg2LAal2ojnMqLNW+EAB/ozFPgQD4EaOfNORyg/5+SYAMTYAA2zE8RUAVM4FKlgAOeE5wFkK0jqqEMKjtGST7PqB6emcpSUJS2s6PViSMe8NCOEILkC8j8hABWENq67Qk54AFvuc9AGzvSSkKXW4c5cwMWjlBBgDabQzWdK4hGY4SO8AMhcLAVdLkSwgNY3RANfgJIAuNkWqkLsAARPELGnDwcEFEcPQgh2M7LA6pTYzQ6vQgvAAUQuXU/HQAq4OimAAS9ejseWqk+i5ixg1r4s0TD7UkXUAIG8DMi+5Ar5DMl25uCoANCQJt9K7lqkwUNTgg6ELn1amiqS808Cz53JSk+oAEi8N/OvMoD8CY5CEFYdGrtnQhr0QFCYP9BdIYpXt0BwT4IMzA1iylEH4qwcHsq2pHWKzADgPTouPQzWGRfD5mDb0NpjaABl+iuca1KGo3QpCAEQgmUnqOlCyCtN7kAcT1BFMIBTc7RO8CHPfO5n/uTgUIBTdDmAPADUYBFEQmzC7QDNG4KkNuIquTDgpLuCFuz1VkpJXADvPnogrAEE1d7B7uyDDkhXbefIsCVBiyBfOI7MUwKU7gjGhoART6VZRqsZZq4/4MFdv7oNvAm6MGtUwmqGHPpg6ADHgCqMNMkPSAD8K4KLCAtP/ulW2pop8SYpzLtS0ADbf3oIxBEFPI3mgzJB5DTiaADO3CtXvM2BOAALSDwp0D/AiK6s18KonkGN484Qg7QXZlN84NgA+ODNb7HoZ9DOSs+CBYwBTA7fbimAhF/CjaAAT2mrSOKsCqbHoQ9KGIpBEGQ7ZQvCBvAOve1r0KbkCHS+R0PAvSHnJDSQD4A7Y2wnGvxAEfQJkkftwpQpTxkX5pjMRGwAzdwyZRvAo5Kp48alPCpPDdwG+XHo2M3IwkAAoKJ6yUsCDlQAjkiADcZACy/pPSD79JrMQ5AAkgw7ucCCA8hAQUHAocFiQeLiQktAJCQFzICAZYTARgxTj4vkZ+goaKSDxYAFhYPnx0bSBcdF6imNoUHCgIKBAQKvIW1iQEIh8I1QKaqo8nKy8zN/87P0NHS09TV1tfYoIIHBRGWhYQDAwkFAhE+ppJAFQiWIDYzIgA/yNOlGjxWUjxYICAyQlaAaCFjyQoPDjiA2CGEBABVNwwkyMCLgAFdvLgdSEAAWAMBCD6q0HCqXraTKFOqXMmypctnMgaAC5DAgAFxNw0EOLDiQqQbwgRUgKHkmUlID16IiAFDYIkICtjdXEDggDheCQYsGHBRwYAJIyCtkEiuQAMEhRIkWFQTWDkEDhwUSCDkwtGXePPq3cu3LzQYCQghuqm1cNUGYXXMSIJgAgce1ZTkMLGDQoOJA3KJC4D1AIGtmRVcrKpL3NciMSYcaLARQRIKlRIdsnToI/+7AAIKrLDht7dvo7+DCwdFI1E5AVa1MuBq8wADGEhSNHCwJIiSu8ss4EuBgYIKARIzHJgqjkB5XgsYMLDIVRfhcQMCNAgg3sABYZbyf7vfYIKE2AUYAAR2wxVo4IEIrsTCTmUZsEB6DBigAGcbKZRbCD49Y8EGJ7SwQhIR3MRRARmARoB6DpYn4mfrWUSYewMs4tkBEQBDXwBVGTeXIXA54I0HFThiV4JEFmnkkcvkMIFaaonzIFW3VMIkAgjI4IwGMewQggOGLSLReww8qN6TMQ7QYphb2eTkALoQsghIEsy3Y1WHDFNJjyB5YI6VSPaZDTKl+CmoNBdwMN5aWZn/dhEubhaAQAg5LNPBDCRgEIF5DGRAYgIRjPOeOGiKKaZ6HxCmHleoorrWWwLE2Y4l3OBWiQTtUFlJJQFQMMOgvEoDKIG9BitJCJeVM55No+HITSES7BqKCSKccAQMO9BEQAScRlBjBhmY2eQ4cy0HGgTpQcAABKXalB6qF02l1pvy2YrbsjviRyVuARggAAXyCOtvMsD+K+wFIRgygQP52rTLLeOVkwAFG3yiwwgteDBBAWzWeKkBNXajbQQZMFATTpYoCuqYLZrGLnOKEpDfvb4UossBATgggXwSSFABIQjwK/DPnwQM9KAWhJBAbJdWVBUv3xTgAElKsFAZePFB/zWey21SmIAC45lmnkxeZfb1kw+y27V79t2Uqaz7tiOAWr8s0oAE5UjgQAUTUBCAD0IP7fffRz6QgsbXLqyLe7OZhQMQIWCcgDCNHJ5RRbxMmMvhVoVpZmkwplc2VeAd3iZ7b1E5QTuFfGSjIcN8VDMCA7SQDuC0135kBxx0pG2AOYEO0kfaWlVTMKrPlSwBh1i09OXufW2aVwtM2DVozQmwC0a35GJf07c6YH1NHOVGW5wBaDuABzP0bfv67Ov1AgUF0NYORoY0MLcDCGT1dvyEBOgp84aDkaLMpbDyeGYBhsARmxZmPV1YTycCmA/X2FYbB1jGM+ATjCVyhqP4Df+ofSAMoV80QAGX4atOs+HFbMbhJrVIZCM10QwEb9GAXFwtAeVawGhusrAo5aJytuDaD5GHAKYRz37CCMlOaFajCH4kJEpcCwFAMDsRWvGKKrEACDYWmMp5ZRcRBEkBTLgTj+RmLTw8BA2HyBkJ7QJZOYnSbDiDkRreynoRvAUhTviNRHEqVjlzohJHcwP1YfGQiFzGDtSCOtFdxBZUuhn4ZhS/RUTAMwrTxdboaBWFgQQ8o3FgnFDoMq9wZBecqcQPtzfG+M0lK2RZS6zWEkHIRUAAvEmkLnf5jB3c8mJQEaLyXBbGrPyxSTZxIVcuNw6MsAeM15tQnez3kTAeIgn/K6hhCczTgBLU0BAQ9IUwOpKocWSFGyz8zzg9ECleIugB8DSkO1WiiiNEAHKW0Mx5QlIDXGztLBvB17IIEBiqyYx+0lsVzc7yyfJxowQnCMIGHrABFmzgCDiwgQleEAMeiKAFtxDGhNpoEdBoxViGoFUlBhCCIczzpTAFAA3umRuolDRNYMRFLgRQA5rEiEEolY8xMYk9BXBkWR9hqFqS4AMV9KsZGsBACl2EqrKRjH+VwCQFSBLTruqSBUk0x+EIYxNcoVABxkNUYG42APHAzTyZRCVIEGC3/OEmBCcYggU88YwcJAFHyNOeVtbVHpoNz5JwcUJRvMrYKz7gBuUT/wpnmJYRQ6hwsgZQREe4EUW20IisCpNmSGw2ABWgIAdVhAYJwhYh5ZkpTC6yyStrOkYM8GCxjc1t+x7QArXgS5o11J4KH7ioOu1xIxgMjMzUZJ4ERMhRNGmAD9pZDSHgBK7a+1IuHpSBjkzTegVIAXV1S97a4cAI7Uha5dpjEZoRN0f4quS3HokL5HgmACUoAQ5AYAAJtIAF2diB5MBYOc7UMD3b0+AYW0AEeZb3wYLCAW60RSF12edyt4BrVbgRmzq90jTlEI0CVBCDC1zABByYAApO0oEUiKNUy4Qj1ghqTom8zWUAhrCO/QaE3eWGcgz8D8MUhh9XUok14MoXm/8U4IMiRAwAFwBBA3KcjR9QwDQ1Qd5nyMQVei0rNwUo5I7H7C9V0MAIfYxSvjgyofih5V0NPYQDilejxqzAByfoQCSUsIIn8MDBy9BAEpij4als5UEXKd1cxhiFIKSWzJD2kwgocKlF6JE99hkjN7ISoGC0Yzo1QAuVHAACGmhgSJGwQLWu0IFAZQMFDgilAku6pouQwxLsScAUYhHpXgtqAy6I3yFqUEM2KWyMa6HABBYwN7s1+2AVKAAHaPDoh8BAAFAwQbWrIYPueibDbEqOoniYCIKqpQdN8LW6kTSCoBBCzaWxT51RMAIQIGQC+K6AA0gQhBmcgK+RABQMKiD/ACe0OiU+CCYv4KjP92Q2P4mIwBOYAOh1W9wlqvhBFGKDI8uZRxeuFMAOTAAADRThCingwLQzRKAHzMABCegBV1GihIJ1/HI2EUYnCcO6aUagCk++uNCHA9YOV64q9rFIMCYQA9wCQAcb0EDfaICJADhhJUqCihvRplPASu9lCCDABDaw7aGbHS+qEEG0+7cLz9DvOA6IQcChwYIJHMIDP1jJBiRwKawZO5rB/SQU74WAdJ/98HxRRQd64LJu7LCs4iuHQ5CSimYEAQPlqABkVoICYOSxsLaokx5/F0kBcAAJFUe86qOhChNEgU21YA/NcDPGe2KAys4QAZAInoKy/1sjBxSgEddg6MLKJS8/tQmGDFK/+uY/4wIpuHVssqKfVlbiBtB4gQ8CUAF9Tz6LQNiUcxnwgfJ/YIG6qCZtIliAHoyA+c6P/yiQ4QQ3v0o2xqKwAByw+WZE2f4kAH/KYGULkAHYci7qMSaoogDE1jF3EgBGsGLyN4HX4Go30ET7Q1eskT/kcCsw8AwtcEtU4gMZshJAYBrlBwEquIKao0P+xC3YcjMgEHQUWIPSUHk8gDwRtH63QiOeFgEc4FLZQQKHsDMOgHsq4QOZYiYr2IQsmCpttSoB0H82WIVGoQojUAEfQStB4W65sS8VwE7MAFZHVgEn4HvXgANcETLn4v+ETygm5tIt6XF1VliHzaAKDzACCFMOOvIq5SNsNRMWyqABHBBWj/ASPGAAy8GEbqiCCVguCQgBW2WHlKgMyCACLnA0DaAjb5NZ6dURAYB9yaADKyCCDjAFLiWAyxADxvQB5dKICBgmy6EeEHB6qliJq/cDUuUq/xE/BGUWvlAJK7BtQ9ACw4AAKgBwLsGKaPRatOiGCZiAZuIANIiL1hgJuogIrQJmyDVb/0FFoqADLfAEd4MWYoYXvcUpNwUh0Aghp8IAFPACt3iNZ/cDHgA5LoMoOQE+s5ECJRgJOgAC+AMSDqACYTGPABN9i1Aah/aKK3hoszgAEIAA1UiPuPj/A5jAcQmELYYwRsRTAjoQCkdAPJVAASNgAQf3EjGhEezhJO54KudnJqCCAUJokdeIO8LWYchxS0sEFxNwiKl2BC5QJ/jhA46WFySgiQvHMi9pUtzSLbqGajaJixegAm6CH1JSDrTRHxTwgalWBIJRS7mxAjmAkPP3ACcQPxKkPGpCNirTVqDiAUgwldd4AduEG1i5E+LQga2CAB5AcqcgYYcQAUaIP+nDEqVgArDQATswDu0ARC5yfjGpMtFYAv9Il3Z4AR7QgTuxYRC3UP8xAZHSATKwRx4GAiRwBfJ4iw8AC0SgbQ9hAlxgAkQQffJhRMxjfpPZVt0yABEQAnqG/5mV2AEhQACQwz9NMxfysYkNQHYX6GndFwBC0ASXKQqAMgqocAEjMAJOQAJTgANLUQRMQAJAwAS9hXywshGmARqHVioKABdYUJ3CaYMPQAm2MhvJtRaW4DYnAAQHIxcCYHcqoAOvoCFIoQMaMAMGoQIqAAIU4AA1MGdxMQFA8AMWQJtOkEDHoQjl5JJwuH8ugAVoOJ/xRwJ1NmdpxSS4QQ43MwG3JBSbaAAYIA99k5hccAE/4ARYEAU3kwgxch//YT90EwAhUAIwwAQwkHB/iAiEUBNwRJnwaDHxaZYkCmlpuSzL0kITkQH2YT1bMSKE4AEogIfJ0AEowAQ3AAI9EP8FOwACT/AE14IvcVICHIABDVADdnci4uAAGNB95rahWeWk6sJlDEgBu1aldogCZxEyG+FKNLYVGbCDOSI+K6CMoKAEGxAEJ6ACaAZYFLYf9tMqJIYDFEAl7ZAonbIcBoAAHMNZiiAztnA1arOXUBAEiGqHQUArymlMn+JdOwES90ShcwkKFxAtOFCI5QY336AL2BIjgeEAE7ACJRAbVEJQC2Au0rYEJ2ADHCAOMlMIzXQ4qIKAC1ABPUBxt2qFJEQj+tkpoCITrPOrl1ICgggJG0ItIYAAEZAmmEEzjoIxikATCxUXJZAE3kN78lECIHADExUJGkACS0ABD1oTGyH/RG6nNgygACUgBVuQrlbYbjIxRshBGFuRG3HiPQdAAUDAVxYwAkewAi7AQyEyEeInhTUCAhwQDLLxKiGxiQKgsDsQA1QwiDmwASCwBEdgFeKqLhAwABl1ox5bhS/AJTq7I9jyLgdgM5awAiSxITfAAdbDNVljEafEGaWiXAEQJ6rTRDdTK+XAAiP6CT+QBUzgARKbFSDDhMD5AFIZtRNYlRwzN26GCNAlsUmwBDZQBC1QAjDHAImQIqLRHu3BC8YmfXYzGyaEH9OxA8FpFFuwBVpAAi3gHDhwA+rhAllApX67YzpQAuXTH2k7AdQkH2bRAkWwAj7FQsuSXdCzAFnG/zUSciie9qrquRbTZqG+YgEXoAE/MGkcQAUb4AENYAWVt7o22AEecE/UJAGyCxfVpCkRsBxHlWlsBmQ2YTnaYwnvAgySJDKoeQIz5yunUBISBWVD0ASda701SDB1xr0SazMHc6p7ySS+1T9BpD0mdDmewaQMEhgB4AJTwAN6hgooYWL6i4sg4DISgKf4ZjNxgQCeYU4EhUG5wZIAxDzGh5clLCUY0GBkesEw/AkWkAIVYDc2s8HUNB8LOVCvyiRw1BWdpEejt0QBMAA/WwV5V70xvMQzjAA1nDM2E1a/wD/+ikkqAxoV0RUZcQg3Q2MDAAJDQHJKvMQxLDgR0B9zVv9X/cOJDMwgXmMeOtReWHoAahttExACIZBLD0HGfPwAQvCs1YQcnGYcsrJHvpgVW7GU7eEW4zAdeiMAKHABOqC6fHyNNFAJH1zC16IjA9VCEmFA2TUzrSIXLmNb00bJlUyPGuCidZUWfGgcgQEzfjQOQoTCxwHCNJMCGlCvqdzLDzEDGIAv+rlHagGKn9QN37JkwjUbpmoIJXCYvhzNkJCUjlIWxKNg8VUIn7xMCLyNZ1EIOGCp0tzLG8AlmwgO3xwMYLbGyFbEEsI8rUIrDuABOJC/4xzNQJABcDNHiXAWBiwbAmDEMWRDuHELuzG095zQGuABo8ENNUKSS4RclpD/WdeCpbCCADSQ0BoNCWnJk91QDgyFKzgSGMgjSRqBHEmAAjEAmBt9zxYgAxOAAXYH0iGtjRtBAA6QBBIAQ8apArmUDsprYrzW0pU8BClwN7mhgUX2OCEAPzWDATqDABwgAxqwWB0gBSwQBDewAikABSqwAkFL1NaAyr4mAjJgGfvnz7ESu3Y3Vw4ABFowrAF3AxRQAqdzN3jtAXL3EPZM1qvr1732ADQAG2rrKgqGCEtQBPH7CRpAw933nx88ATywAWnKBHoGT2Lttw8gAiowZwFwMIaNFp/tAyQHT2MMZTCtbHgjsRNQAS5gQS4gsVOw2JntsRvgAzswrTmDb2dB/6EbUIKnHZgWhD+q7cTd1xgukNxVQNu1fatUYAJO0AM9UKoOEAVRQIWWKAPG7ZNxYje0UgHK1jNO8AMh2dx+qwNEoAFNcAUcQAJE0LfKAAODB95JINMewL34o28Y4AECwQKAbd7NZwE/IJ/JcAEt0H21kTMUkAIqwL3VlDf4NgE9cAL/DeBnx3wPgAPyAhcEGRccPNxwoWwe8GcWfs8PgAI7cxw57B8E2dr6ZkH4BgL2XOK9rHvKNgEuEKGGfRzsMJCNgW+2SuPRnIel6sSmOmpo0UqOMh8Byg5CUN5CTs6W4iggLGynw8+y0gB4czBOQOBRrr+CHW2u1IHuBojzEf/hsmt64jzOFU6PHQAC6izSmGsW08QfUOQAKSDXX87EPMAOToxCwkAO3dsqlnAW7OAdzL3n1ouWaC0MDMXhKZVUO1FX+9IDFano1msBLbCfScVQ/8E2Otsq04EAGIABQS4opdDmVqTqdjgEPSAfSG1cboM/W9izjcF9JskrrRm3OsbqdZiNcUFwRzbqoI5Eh3Aw+5LomB61LyBVwoBetUHsBnxGhqBvARCEYu3rlDgEUVA+pprUDBXu/UNBFbACer7Rpn3PuGMEgvxJ94NEdFU+Kjw3DRACqJftribNF3AFT8DFsOJhaWs/nufoE1ACISB1+M7rF8wCT/AjwXw0sZH/tfgze5/0syggBTZw2S2d7mxuA0YgG7oaL9GFOr9jCbBBAR6ABSag7ct+eDzwBI1wH4mAOjpRRiCNG7qKAEIgdSzf8kNnBf2+I+NeSa7kr/ESEnGCunvs85pNAjUDZsBQP3YCEoUeoHFSATLA0kwftWhJU6/CzNHuNiLtKALQA+e+9R7LAj0uFzyyf3fUQfIDDBwgAj2P9utm1PuHbyEiK//hDY0Q5yBBcAEwEnYftWpXAOywMyb0yriy5Em0nwgAAkRQ+B6L4veZIwGVk78zoTcTDJ/Ny5RPojkQAmzCfWlRULWAl0lEK9WE008V+vMJESOir7wzLzdhI1QeFASg/wJ5Bvu3ygONgH/GNMBZ+ulk7wFA8Pq+j5mT5ptvwSBqQmjLhAuLEAz97hB1j9kyvPxetcrvohYIjCzlgVMjnPfotvS+cZ2QsAHdGQTp/QKXWffc3xc5gAHkcDY5kRPjjxM3AQgZBw0UJB0PAImKi4yNjo+MiJEXL01FUEZGUSAlHCAnL5Cio6SlpqeoqaqrrK2ur7CxojEFAQURCQkEA7wDBrwGBAu+BAS/GQUTVhoWsqoPSDYnUisURhFGFAguDQEVDhQtRSRNks7n6Onq6+zt7qY2DQkDuQO7vAv5wwP7vRkDBRBgIPFOkQUqG1CQkLECw7UCT55EgCgAgQMEFv8bVHDhIEAVIs0KihxJsqTJk6U2OEgQ7ECwXjD5yfQ3IEAAAlfWPdCRQ0QMGEdaqGhwS8CtArsO3EwwsZbNBhgDCKhAoUoVKxvModzKtavXr44QvcBAL5euXr9+yVxgoC2vBAIiEJDi7MeGHCx2gAhBwYEAm1JtFRDw9yYDAzcJFFh8K0JFbxMuZnLBwQoSsJgza373QOvIB80uhMB3+B4/fTPbtl2QAEECChtMWcihgYqFC0EUnqBBAkffCQJyDUbQoJtUCQ0e/z1wwHEtBH8LsCQcAGPFJy5cUIAipcPm7+AzWxhv4sIqCxtYBNFwIeRIDTUgLGDAgO1pffZ5EVD/cICeUgckjEfFCy9owMIIG2xQxBItgJCCCn2VEIIKDjSgQAUCBFOdAoExV0t0gwnAnwLSKRWiAkaReIBi1NWCoUVGcNCDDESY4FkqN4an446jaCCDEByk0AIORAJxggZKuPcIejuUAMIOMtxwQgwxiCACCyiwEMOCMhwBw5dFnDADllmiYCYKVIZZBAxAAHFEmDeAQEB9+qg1TDG+qKbAnoj9hUAIIHAQGQYUCAAOBQEMwFwCBzCG4p4EBGDAnQoYwGGlBjB6AEsJBKAAS8b4ooAx+31qz6a6MFYURgj05cAUWZjH46y0pqOEDJFVUEGurXIAxQowzKCDKC/c4IED/xg44MAE2hFKwQS6VmDRrskFgBxUASWXHAIBJOfSP/QYg2KovuRpwIppEXAApARUVGIC+5TIHHOKzXPqup56qkAv6hbDpy9mZZCAU3wGs5+iyRWDaqabEqCLocruSkEUTABggo21npRjxu2I0AMFIBOarLIaRQYFCbI+ggIU0BqhrJ8XIRAtyBMkV5gtRjnVrXW2zJPPByLqq1ZLc9pXaqX2LAYXAgXMK8Fz8nRqU9NvUdfNvr+su59NnzZlVC5SCbCiVOO2m5gxjBrloU0VKTsBBi5IYUIHGHNMkgUb253OAzsY2teuE0AbeOBU+XBCyo0ogcIJQEyRAqJtYxTtBP/QVWeUTRIEMLBZi7JU1mGjWlrMLqrNx9boFYnI3wEITCCBu50uJkADmw5m06YHiCjuqHmOO+qogzXdaC32kLruqMZYKkCo7Vb7YQSOIdsXAhxkkbfeOmEv0gm6Qlv5EwJQ4IIE30zwrBAikPKACTbc0MIE4ANG2HJfN61qAA2vyFKfBbQlbjDIK0ZaVuQv3bUrd/iLlFp0kTtU1cIps0uMAGogtmBEsBgZQuD9VPMSg6HOQurKFnQKA73quGACHtAOFryjvRa6cBEjKNQ3KkKcAIyPVctKFgZgQATEiUIDQBDCgxDgsAIQJVIBcc2H/sKonjHQc26p1NEu5a/Rsav/Xrlg2DwYVSLpcDECghkMh4oDKUUtbwAKaACpBrYcpVhRNf3C4AQFYzmpqKpV3uMABzTwwj62UAMlkMpFUkcdXVnEBa1yQA9SIAQNXI8RF9ABCm7gAxUQKgUeMN9F8Ic/e9kiLb3YxwKQxyEA3sR//tpTvszCC+kwIGnMYZpSbMIt5vyiXaRMIwXV1SKpMQaEKErMnvZ0vBpU7oHMoaHfYoaAHvDRj9DkmA44MJiLdIOGAVGWBMDxthKArAU5YMUDCAQAKuRgAzNoCNPmUQEhCSQA9OFFPNkCQN6JbgGjy13QLlUABSxgRfMRGAKa8zTBGOooRwkM/gjzOs0pBVu1/2DKwBgGmHlJpy2+tMnA2EYYycHICCC4TDRHOqsOcEAx1aGABBCAnOosa5vPogAGOFACFVTMGRcwgQhOcAMebGA8ItAADyiQAQhA4AOJAsboBMi7e4huqRiU1AA+MA8T3e4W1QFO9IjSKeg0rVucXJSHXIUBdeJvMcPbohEd0DTC6PMWuhDkrhBAMSWR9K6b6YAKjuKAEiSLW1CrCHJgOtMb2LUdL7ABm4pQAnsNTU+SEqC6/Je7MVpoVLnoT/ECAEaZVYAAYKyOdHTWogxUJwVEksESaDCCHLwgpzCwBaq2yLriiA2JJgJtCS1HVy2wEK/A1YxJ5ZJNqAz0ctwyVP8DJGA+maaACChZAQReeZrp5uNRePJFfQBo22IwQAAeqEACMIAAA8iFAE/gbHUMQIHwFiAEHmgNt+RCgU6goAM/MEEzPIMCJpZrGAWQQA0yxxK00tAWdkxuFcpz2OA6GCUXKEFNOvRAwkBldm9LAgbMN4EVQPckS4AAWu5zOnXxgz70GYbBfrEACPiACBsYwQ9YQIMY8AAHN4BBC04QhBOIIAe5OacTAEUCGICABBrIyvWO0KjabUo/agPjpqDTgI74ySi7wsIFLvDIB3vZHRfYK4amJhWwFYYwb5Op+XbAhCGY5AEtmE9p3JIPpdopH/UJFT7nBANXdCAkXU6ECUL/oJThLcws3VLp7Pz0jblOJQU08OGXJ00SIWBEVbNzSaEbBRfmhpcCMqBBbEwygwZsVzWneaxaTvzKliiAgjEoCQ0apbbZzoM+tXhdEhEMHQdIiwJW2ALeGkzpYq+DB37JWXWIwzQ6fqgB0KIAalmgsSXU2S2pHkB9ToPifGiNAFRVALUX0RkcnYIKIYCLURxWFgIIzD9qJYzsIIYsm3YGb8bOdztgMJEI4EuX1+SoVDwbGQ+MuyQPEMJhmpOBXah4UiTuhaH6k6kB7IAKIkFEEJ5Ws0W1ZV3B8B8X1b2iiehKCChgggkAwGV9u1wdJwCtGBWmr27ZbAAOONauKoCB//S9WeEDgJ6/gRGMYdT5v2kEWwI8gPGRmCAFx6EdLhQWura0NYzz/vUOfjAeYr/866wIAgIcszzlqTGuINKj25A1gpNYYAUMSEAG5j46/6lYXcO0x/I47QNmjOQEiyHK7RLwOxGtK3e205y6pSUtAaSgGV4Hu+RRIQIKSMtSHJpd1hgl+Aox61kI6PObYWAvBghiT8TYhwcxxUm0CkHS67gA1J0SkBUN8y+qPGunNmUUMG54AjvA9+SH34oXeMAm+/lLA2qgSs7/ZXZV7osAgICSHJh67hEQncGAoW07GeB18xLCqAtCg44IZ3j6QpHqoqN4qTQqUsvigY0CTfz6M//i7aA9W6T2VEskpm4b3fB6JzEWA5ABEQAuw0RAxXA6/gNYAYABGoAE9PcKIjABm6Mo9hMY6ucpxjA84dIozjEBQWB/JKgKLaAooYMnvxAVhcY2HsABFfCAz1QSlSd3/nY2yANA5cIPBmA/CAAC61EQbwcQ/UMP+DNLBEQ2vBBaXjQVyDcBPleCUkgKMsAiwlQpAkA5vKQYK4IsuqIC40cSPNBvpkVEyqMvkZI8KlYihtJ3BTEC63YPsfN+9TQ6AmMW6hIY0DIFsDeFE/hyJCAV3aBPRoEAFOQS/BFXE5AEDiABFHADJ8EDxzARAsALiTEpmcI8xVALB7AsKPMOFuD/AxI1KWxheMejLgTUHw2UWQPTOk4gAuU2hZEgi4mAAhVQAH6xM2f2KLrDOiTjiEdwEjZwAPEkMP4zTMFgL8XTLtLhAySQG33oDBpggWJzGsSAJ+uiOpBSe7yQhD0wAvpFi7NIiz8QSBVCHDmzfoSBPEaUOQ6QBDgQeeuwAQLwSim2H+Jie+QyOtWRABNSBG3XDqHINv9QZw9XKmKDL5fDKUyUACnwA+LYCH/ocqIxABemNiciIunSacriACkQjewwjTZxgMNUKQk4Osu4e03jAQTRDheQBEhUkHcnKqqjH/xRFswhGBXwjRE5jrQoA0ZEe4vBNfyRD5GyIgKwUg7g/wMTGQtBYDOcdWGq9CjHQwxr0zRAEIXqcAFAQDtPhh8h1xb8QTrr8haaggACEwAeEIY92ZT6BgP0MByqQkp/oTDy5gAqAAIrVxIxZ4O1gCJXk3mJoXpXiQMj4JbwMFDSoVRQlUpWNC+pwjre4AFHII8liJjGhgJNMzDaMG+jUll5+FLbVAJaWRAPMIbaZoA3kUZjmUYIUClG90/6kwCGuW/rNDSiEkeXQkxyhCrF4QBCwHU96ZOyaHwR1IhP8XzJwR/W0ojE4Yg2YBIxgAsj+TAGlDtkRC76Qw83wJbnoANJEHcxIR8luVSUxSFe5H4q8GHDSW4RaQEhQACFoi/9ZP9hNUA2LDI7NXAsRWCZ6IACNuEANdBZUmQwaXQ1/OgSirIEbYeZkGABS7AfBZAnKph8xXGh+IMiFJRQnUgDwteeIAoDCsAt6hc0YbNoHxcpEoABAwGS6sACAZABFREB43IuyRNMfFIp6FIMXgADDgoJKOBP2raMSGMPJXotZKMROXMLJeBIIPqkAAAfp5NLmbd8Z4czVSYBKRBOJAGjBuiZ+OlBksUvkFIE6IAIDwAEL7E/KGmTniKWqpSHDnMW8fijUJpvYcYWBVOSUdcoVGaIGsYDJcECTAM9ASEil8Uft3RGq2YPFnlw57ABE/BKIOdB+oCjTmUPbYEL+LAANGD/p3eabzJgpPjIIcczlbljEcylAqE2qJpzgBmAIgZQl9mFJ6p3dypQBIjzABdABRpgJRugAUEAA2LCOEsABBsQBCNABKCBBDmwOClAoQ/nfaTCIaRCTz3YGAXQAm4WqiAKoLtzKmiUo8ERFROUq1w6EjHAKf9AeEaKLi9RH/KqbWwxSgIQAkMiBCqgAiFQArmoqplyOX/xJEsgBDtgZNxCRLqwaqCET5ACmo+JGH2RAC5Qmt4akTlQAx/YLruAjM/nOtWBHB5AAyXBA/4QAb6wD5PlfidmOir2AXRyGABDDzDRRIjRHFtkFtsHEA5DLuWSFuq3J7g3KvjZGuETAy56/7EkmKeWVQMWEjb4iHixVB07UBLrmpqbgmr6gY9uoRb4GHdw4W9NgQv+llm2gAtzJ3c1ITYCUwAABj10Bkq3p43ql0oKUEJ8CKpKW2w3MKuDMWAleU2LYkRJWWWiNxIowBKscVsCxAsFeiojAikeZCkVNRgXFhAjoikM00/MwSe3kymMAjCzND+yFUxctCk2wQGh8KSdEYtPygJIMR3aOCkTFBwA8ZvvWA5OdwL78q7muR+nyEu7STppYaBjtGj/NpVEc0u5dIQrQgxeFEJOoS45Ww8JcAN6u7fFtgGm9hZaYwAMsB/d0IHG1SoosA5KYAJKoAE2sAR5mQRqZI3+Y/8wx8OBwjtMxBtxmMebmId59yBAD/c7gsEpOptZISQY+tMoAcAaN7CX2jucOSAB3Qi5n5J8LThID3iY6GABNCAjIeACcTEMHyC0vJMnaJR8XCu8aFgq94BiFKofStULrcZiIZd8FYyzZsFAaJWTDtNkzDEAHjACh+Ctreu64jgEFsg5uxlMPZiFMWMoHuqg63sEN/ATO2CBKJspt1DBCeQ/xMCbKczChTGWMFFnDhdP2yYMsUkMy8shmmNHoJtZDbOZFmUTFbcD2ftyoLHHw9kBErZFRjqVaIN4O1MAONABv4UKP4ACQMABDrENEtADE8BZuQA97aKNp5o8lrIih4f/SkgpufSKD/qxxndXvI1qLqWSqtJRtsl4LozibxAUHAlQATOwt0UMoiBgFn8RyJq8mZzHNDxABBBZCg+gAULVJNARAdziDXGxPHLBFHLRVPOzjnBETP9Cv7+joEdXJ/nxWOYCmyXmxvKmUOsmlMIRyxNaAD5qy60LokswUINARMkzE6ZVO4URAk4wg4+gA+wLBDLFM68KHQMTOOhYDHKRDxZEulVkS8A7NMUgFRQUOqI0H/RqkN12jxB3jCU5lMqkFCzYHKNbSwOAABqstLfcnjBwAMhgFB+HiaFCNfoEDkfQAbCnAUWwAxzgF0Y0Ae3SKu3VAjcgAyXAcckxlJzq/wvVwTbpF0zAizRVNEY34QsfMNUfMF29YF3x9AHalmIJALPcB7xUp4FrI720lly5MAH6fLH3BqLTOWFyUVmn0sNT9jq00wIa0K3osSU7AL9Q0dcNUAJC4AE+IAIJkggvgAMcUBYfojn9cMm2QCoJfSl1qYClQoqsxgBWrdUpRh9UJWdWjdk2ikoanX4DM1qMwcz5NwAg0HLs7J/1xwJMYQsZIJa6mUDdslJ1DRojwDgrNTzUYSIFIAQPoB6zgQJFgAOEljNNlsP0kDV2nEqUW3bIRy5eXF1GNV3bttkpttXXfd0s/N1PDW79ElrI54SSkgQj+MBr3Z4bIAGvjAubfP9bCiAB6lIcyLEsHNACITBQ1YIMXmW5UkEBYeK+iMI0Q1k5lYM/afkuLKEUsxPWwEt0qtcWmN3dchZPW00f09XdRgUqu8DC9YRA1MtG1AEXMRgBDuCdag0aIDoWgoBVJ4mK9PA2yQYd2jYI2MJGtbPMzSY2F/EchNQq0MZ7MwrIjDJM4zsMurAv22aQmjoAHG7h3I3dFX7dDPABt1Td9VS3dHRg3tARBkB9D+ye7akDZAFBVLoLuWCIkbFciqdMI6Q2HUIYZcFb0GE+xOE6T2MvE/oBsx0uqDMpKbYaMUsaRofZ29bdvEDlGx7l9qhUd5fJisEYhFgRFaARTTDmFwv/AivtKehCQFo8Wo5YA36RO7qGiysFWE22tmHzIQm7TculDTX1JyWg0qD71UVnVPEEvq80H4LO6Lpe5SIG5fIa5boeurg5v5YilvNCa8WR1BVwOJp+p4jgA0F3gLakVFMDWDR0TI8xS3YkHJpjEcf13/NjHQVQAnfBJkFQBDNAAgggyto3KbouT9mNYinWYhyO6IuO78Ku6zSaskajZ8WjwIxBHYKhAhI47VCKCCTgb2mr7dqSe3tiuXGxM7hT2m7FNOQ+cIsRWh5QAgbgADtAAibQBEgQrFs2jQVoZymb1QpQ1fJ65TDr2Y6O3TgvH8auuNt2jagWcgrsJ0XdTj+Q/7Ss285tmQgiICnIUK3YGRhylByw3iIe/WxMUxg2012BcQM3kAJOgMgXwB4s1ww/QAH0cIDchu9T3R9GJWdUhWJRzg+aje/BzuHDgO9Ex0FDkyrLBhUYQAMVk8fDd9IRKQlEYPbIMExcozuhk3mzE+e4ozSlLVtNJIh+4RwRcAM9VB4AwOKJ0AxD4AEFOHd4pus/kwAVruExWx/7PqQZruE5b1T0oNWqt4MMCzBcdPFqCQMeyvBQGhIdkAI9TJdgrR+mdE0XhmCyzNEKjGCBMRGL9KmSYMSJkAMOMPo7aJTgSw+Iru+Ijtn8YOXzIR89r211390j7Fg+mxqia7ZGwf8BKsADgu/7Xzb9INDsaGgAH3D3+AQIBgYKAg0SDQiJAgQHBQeNCQYFCAEIAgWXBBEeIDMWDwChAKCiow8WIAwDGREGAwsLA7IMELUQtAy5tLe7trUMC7rCt74QAwoKA7mxsMGwsgYEBNAFlRKTHBul29zd3t/g4eLj5OXm5+jp6uvsoTARBREBAgqDr4Kv+QQKlQIHCA0uBRgYoICrAgUSCJAwAROIIxosWCgnQxYrA85e9YKw4IOuAb+CEfMFTFU+XSNvffAXSVrJYMDyCVqQoZqAAAYcLNHwgFS7n0CDCh1KtKhRURsaJIy2TwBGZLL0DbT0aCCmSwYTRLhpUwL/BSE50gExwCqCslzKSA44AEsVWma8cnHUKEyXSGMJAiQg4GoazGXNolaL8CjDDZ9HEytezLixY1EdMBhoFYvfNHxMCcwDqHTt1JsHBhRo4ECChAMCBIS4oO5EAosid8mNCVLuh9cMEnyIi/bD2boMfNe6rffDM4y4aA+I9jrBAb4IRjyeTr269euiHuxg8MjVAgINpO3bK22zpQAEUiNKHcCBA0MIJjTgYGPIuhgEMuifRXJYyAEeLYAbb7FE8spdEHxggEoJNOjXcrLAFIsggmSgCkIMhGACYth16OGHII4zQwHivZLeAAlYRiEylSBQVT8BVOAABRMgUIEAFEiB/0I7JDgSgVlp2QLTL2/BFJVssaDlCl12AbNkNBIyA8yE3qH1WgAs9BTillx22eEIAgwgDYUGqIIaMoJIcwAiCWCCSQUFpVYBAg6kMMERHKJzQgARsAJXSH8duJx3ECJpHG9I3jIohG0tMyWVhMJT0AI0jOLlpZhmWtQLDuSmJovR3BSAAo8QUE2DCxXiAJ83xbfCFjBIYQKPBQQTgSp3dWRghLQ9w19ctWSEHEpRMTpTPlGluWRNN1HgQxOaRivttOekooAlfB2ggDTsjYqMABOoANAhDA3kwAQV0GdCBxO1E0MCvaAUyzH1NMOMNFEtQMwrtQiKD5PKMHUPI/hOOP/oshkcYAAGP1Dr8MMQhzKiAgElwxQy/BCSmmo/CLHqjBMIgAAFGFDgARPt/oTfWcAyQ6G/9PKqi24CNjgvYDEdh9xyBDyzgCtAQ9inhQHsGPHRSHv5Agb7zEMwI2JSTEEDBVGggQkz2HnuuR5ggIEMswJlQgoJZLAKkzHxdeCEyIRGVzC63abbkXP5Om9gsAT7ctCT3RqADPYlLfjg2HXQA3qDjPqcLNMUkl4hI9hgwQtHJEHB5V5nI9QQFFi0H8vBRRgYmcjlzVFuCpilqDP6qtLXPdsqo8wCCkMINFm3poAE4bz37hgqAazVCD+uLP7BAS0KcMQGrCkRRAseeND/AwYg7B6UDQoY05FxdZ11rEY8s+5LBr4FUIIEZeatgBc1yBJ8NAE8p/aiQctSNgMp/JCn7/z33w4MokJPAxoSDxS1KREx4kEHWBOKDsyABRrYQA72l44NUCBB05DZMtIiKH9NQxUe4YWFILCEB4xAAgxwwA1kcIIcXNAAChuVPvg2KGTwZTAwoKD/dsjDcYyAaoUAjUJCU5XUFCAETbgAYnS4Dg0kgSPaWtJfYoKLuSDrWKmxkCogIAEfxOABG5ABDGjQrhyEKQABoZrC5kXDQTxHEhGgQBB6SMc6jqMDKlAIAiSAAOe0qRo2Gc0NUnaUB9jggsHKINpuZqR7QIhx/zdjAAZ2ZIEObIF5PtFAyNCkMbU9yXbzk0QMGGjHUppSFEtIACWQZ0SBVAMgAVDBCxRTyRRwhBixGFOgojGLZ/DlWPuAhgRAoAEAXIBd3dAABbaFGzb25UHJwlcE5njKapYSBqIJyDzUMy4KWC4AGChmIS0QBAQkhyNQ4hk0BgGlZ8Qul5oRwApOIM6eELIUTpxSvhZFqnzMS02TsIE1B0pHGziAEvNYCkIKcTnSkICURLmACWxQgtPxwmCDGtP8YhINBcACSiqIQdgAIBFwwCASGAnfvKCRrwUQYlQJgEIHCEpT/4mgRo9wj3OwUghKYIAJTGSHCW6AG+8ERiafGv8VlBjAFHz8bAFAIOkpxGGBI0BjTOmDJ8E0so/acWCmNQ0r717QuQyYzwM2Sc0ea+CACsggqOmwABKsMIFolORgrlBFep7DD7dxFBoJgIUEsgTXUGxAAMHZR15btw++1EsW28oWD8RK2cFdwAdemQAGGmKJAR5iRjTQAFiF0gENgKAAFZiAAxJANXg+SbHLgQpG7mZAZThABBANBwoU4CTZMVVtP+PoU3q2gAjMQKqVTS7EggCChhYkIe0hDQJkwAUiKEEoD0ABEIRAgXOVAAQk0AALKMDUJWE1Tduyx6JquwAEoOCe4DhBz/LF1yUdAyPpCd400oMBEVhKuQCWlgn/i+CAS/wDIQlFRApEUFhyXEAHJwiZjVawgyaQAgQ/O1A0BPZR1DzTFQ0awEB2MEty3IClrkhvJ+fLiG2RSgA14IA4A0zjTD2ACBtYlSMKAhCRBaS/QemJCITAgQlIoAcy+EHKXvDEKw4iNXyBBfHUBM02FcEcLfAZz3KBsQ4ytQEBEYAXZkCFGpsZUzogwXvQA92bSOCgKRjtTy5wg+6CFhRKBIASupCzg2lmW8HI6CJIBeIAZCABJyjHA1YAC43ONr3JispK0BiDM1vaSzZABAIQ7IiFAoQDRADKA36wgxLIgAQwgMHufpAFJeJgN6/1pJjqJqZBZ/AfqZEBg8dx/wEVVMYfvzxGBsfj0gB4RAFACNyll/2hEWyzESJbKCIaYLWfWCCME+gBtBqIAhHMFAYze2ZkY5dX231HAa8R8Wha0AIdjGMIPZCFttLLF5z8jBB8CSIBagCDsDD739jJAVqtUpCBCKA0pKHmOkwQhBXYCQritAALeMAaHTzRTC998ajUlFJBSQMT28QAD05wXXFwbhBqoldjBXETRlRjIPw4AsBnXh0ThOAqCGnTQExzcBasAxQwIBkUvlLMBxxTFEc4QNpQMw+Yt3h+yQDMAPYYsknC1xs53gekI7vhP2Ol06rEAc3H7pgH+GCbOX95jx0gUHWYkAMBoJEHSKCDF//wwN0AeEELbmVeeqC8WKFEz6NE7GMHVJocNjC4388riIxRAiGESUAISkz2yiemBajBis4/4wCFn8MCakYttVcwqw2gICIxSAIwnNMXQsBuv9skgJNWOprUrAoIDRsHEnrwZ0Y0gK8YK8SohGiQEFj++EdJZSIQAkjFU0A66ZiBALZiCWexgAYiMAELjoBYMam8HuNGQD1aTAjjuJMRqmUIAlowg9x6w4XHQA8aFzFvfoCmETtOwA6Qz/+hkKBFU0EJiYAIEwB95mABNFACMkInHDADTdACV3ABQyAEBXA2AaAKaAJDXbUIBANDG3MZaLRHYCYyDiBL43ACEUAINUD/DypiQ00hAHlhE4bXfzT4EyxANZSwEA6APG+2R4dnDjNQEAXmATPAPBowA6UVAreSACkQA0twgRBgXhczCMkgJg0AFRqTBDUyGnvEASBAed/wADHgLRXTezbkgo0wdQgAAldXg244Dpl2FXSCAQHAEBQgAQEAA+bwAiTQAxFQYAFQKQCwAUxABDPAARmgGQnAATAQBCeAAwJwCxnWVd8hAMEAHmiyD4ZQA5vmHhJAAzrgft1QTh0lQ5ZhQ/TwHAfQIEKwAjL3hrBoDiNAASA3Gu9xLnf4ieXwAitQYCwITkFgAjFwBCuwCDt2EyBQcjawAg0xIQQQWCiCFtKQDJHw/2LqUQMTsAT+NQ438Ix7AYO3IT9v9EtaUQIRVGaxmI7ioAPLGAGaMS6kUSPhRA464APpAWbaIjJAgAMtEAKnwXQL4QMlFwoPoEy4ARy5MAi/Jx7TuDFJsAQGGA5LMAsmcUXrJAho9IrquJHhgIBtJTJvViOJIARtuA2mlV4isy3zYGSOgACacVADsQJgCABBAINBsguxYQDoUSz3Ng8D0AINtgORZEDc81dkQQAkwJFK+Q0XQFdwAhATcIepcQMiQgF78S3h8WTMlxeHsGl/RAEkAFYxMAGisQq6sRHEABj2Igi30AUnUJKlkArB4RvC8xu4EhUZAAM2YD1L2ZejQP8DlpCDnqWFiVYKpEAKGyAESrFx3KIwpuIierEmLsKVhRADGmADG1ACDJB2B7AbJKEvRLI2bYFGKzAOykQkaGGX+hQLB+ADODBjfqmUYEQ2gnkI7Aeb3JCZq4AQ0ZCPofEzVKEQBodGBeAAPoeAFFATBKEXN9kvCQlJ9uJSA+ADJqAEQ0AENsACQaABIjAEF4AEJsADH4SQwlAsytAmDaACLeBzsbmRBQkEAlEIAXEEcGkDEmA/OBE16YUPBaGTLXAECBABNRACKmA0mWkM0HYJNIMWegUMjOlPKEIAEKAAXmFqIbCGJCAFNMACM6AFIGCevzE6tpNXqmA2jIgCP2D/AhcAl+1JdihwAhSwMYmwAhPkDTowA0nQIIdmEH8GeAbQHC3wAkIgACAQAzMQOCOAAbnxGpG3ih9Al6/xAcS1JG6zT74yANNXMw3SHK9waFtKKr6RSwpDIW2yHAhhVmD5AjrwCS3qhiNAAnCHQEdkH3myASEwEN0hIInDW5HGOIYQAB4wctowiBeUAGCJeYD1Gh3hSYTyd+bVUkHDHYG1DD/6o4QxCaFBHixiQ6t4aHoxCSCQRCXVpjU4BD6wKjKSGhRwXNwQBOQVTGqzOHa1QT+jNgygAhuAmaFwU8DwAV1AAl2QbrXqjBixYdCwcThBJh30JLPFRs/YCPMQCTD3/y2E1iD2tQAq0ATrwqKkSnMPAAT9cCMVQAIzeQH/By8f5B1QISZlYjs2lABJMAJF4F8mAAMNEDppcZcGY6w8A3UfSCHAJROEcg+9Ca0JNQnLGT/DZj/xhAVF161uOAOKICcjgBgbsAIWkgG9ySuQhBxLtRwMEABFgAJL4AM+kAS7kQsNMiVq2Re/yTM2RDv+wIEMaVTfUSXf8Skv11M3sTGpwals0QAy4AMnEAPeBrFvKAI0QgFFBgK5FwpF0ABR4RQZtjMUqTfnJCbTYAtMYguzNaIF82uyJR7zli2y1wzSsJaZsbNgxkcb81LPUQAWUgI/EGpIG4sdkAICkAIb0P8EeAcAHUACYeIgDsI4bDFFigI+TNIod0GpzJomwMWaG9d6Y3IgyGASOXtUTbWl3ygfYXaFUOIcDEABf3u3sNgCAbADPmEBIoCxWFqBePEgxPUoFUklGhFodsELdVM/9LMoletnxKUZPTOwwqJ1jPAICCEBNWBwVOMSx4M/72W66UgCICAFfEkESii3EAAeaCU65dZS/zRbmDETujsbemWzoLRGd7NSL+MMbmEvc6F1pKJ4PlYALgZjOMKJLTACG9Bg0ktzG8ADESEKJ2CJ+ZAANbACCPBk83C44ItRriNpsocSL8EogXaRTvVI7KosrUPBwIAXztF0otInBhQBFeD/A2+aBEJAA07QE1pQuv9LgyJAAqQgApCoL5TrUS4VZhmUwWsZbIDnEnLhvs7YUjzzL8T6S1WSHL1xFl6qoJOwAiAgBDKAAyfwAp+gAyOAW3mWZzHshjkwqDHQACniUf1KD3sRNZCLLxHSxil1O8GAbs3gKIFmGX4BXP8CDOKhLGgjG1S0pBBQABygAiPArV+sjqDwADjAW8VGuciDOKgxDdoSRf2KLyn1TijCk+67DBrlWD1TXsWiLMH2FynxCwJQAm1SAkswBIZ8yLG4ogBgAk+otTkrvxqTDBnmUpjMF+QhHhnDF7A1LBKiKJfhG5jBCG8cIfhAl49iOgZQAS4A/zZMwAKi6Mp9+QAzhQIlAMwEQ2gAyyLDRiXOwEsaRggpFhpYJSGOMhdVgl7IvK+5PCAHcgvpcQM5kAMDac1tagIjcAEa0AIwOH4/e3+konXxU9CzY1TJ0q74ZgA3AbMfxLhncTcfMT+2czAXLQ1e0AJFMAMoQEr+q881OBE2QD1WSQBGYIrDhzEZY0NUWKzBRhuQOw/1MLlaKyg401ttESxnocGycwwrEAMogAIzYAKfoCUi3a0TYQJQ8HE5Fz/aEk/0Rg/5QJcxM7saXKl7gbwHQBjMmQFTJDs/OkV24VsphgE4gAKUF9JJvZQ0YASAVCoIJjI5mAz8YBwH8oJQE/9l3mdAMIQQj4C8zCm6DGA2chEkEHAAvagCPEADLeAs1OsCRd3W+twTSBACIvNc27QQaVQD4ZEe+7UcAVADK5iu7crGqOI0ewEPjwcappIAinJwHuADMMACVDDAocAEu2MCuEnZrmwCcKdpaoVQhXAI6KYAK9jQ/DB886UvYrKKpgJyBaZzQYR28JACK6ACR8ACG5DP28DWvk2qoGABPDAnpEHXSrGK3lKNoAu6egEenMhL36EtqvR4xRmgEfAEFZDSFUBhOMADLMAu1RzeBL4NP+ABd9gANYCHV1EQ5owmWDoQ1binlqGn6IY8zFeHFNADWDBGKLABclbgIk5VMkD/Gm9GNdtECYD2OKONDB8QWVqXGjVAMRNQAhjAAQhQAq5ZBCOABOzSE+A94gWuARxgGsKdCKvCTGAmfgOQBF1gXwMwAfu7ARtwApi5ATOgASOAjkLe5T+HAlFg4nKCABggKqilViUAAyZQBPsoBCTgb14e50VhAU1QZHZGJ3QdJyK3A9ztz00gEbAs54JOFE2wA1CwAgpYAT0QAhiwA1P8Re52AT9AA4U86JZeFP6cAzZAA/asAU6wATowWjpABFN16aZ+FAykA1weCl586q7+6rAe67I+67Re67Z+67ie67q+67ze677+68Ae7MI+7MRe7MZ+7Mie7Mq+7Mze7M7+8+zQHu3SPu3UXu3Wfu3Ynu3avu3c3u3e/u3gHu7iPu7kXu7mfu7onu7qvu7s3u7u/u7wHu/yPu/0Xu/2fu/4nu/fre9tanT8/u8AH/ACP/AEX/AGf/AIn/AKv/AM3/AO//AQH/ESP/EUX/EWf/EYn/Eav/Ec3/Ee//EgH/IiP/IkX/Imf/Ion/Iqv/Is3/Iu//IwH/MyP/M0X/M2f/M4n/M6v/M83/M+//NAH/RCP/REX/RGf/RIn/RKv/RM3/RO//RQH/VSP/VUP3ankMhVn/Vav/Vc3/Ve//VgH/ZiP/ZkX/Zmf/Zon/Zqv/Zs3/ZuP/CBAAA7]]
[img[data:image/jpeg;base64,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]]
<<miniBrowser noplayer http://10k.aneventapart.com/2/Uploads/557/>>
Ненумерованный список набирается так:
{{{
* яблоки
* печенье
* молоко
}}}
а отображается так:
* яблоки
* печенье
* молоко
Нумерованный список набирается так:
{{{
# посадить дерево
# построить дом
# вырастить сына
}}}
а отображается так (номера подставляются автоматически):
# посадить дерево
# построить дом
# вырастить сына
Можете попробовать отредактировать эту запись, чтобы увидеть, как был набран вот этот многоуровневый список:
* Программы
** Свободные
*** GNU/Linux
*** Firefox
*** OpenOffice.org
*** GIMP
*** TiddlyWiki
** Несвободные
*** Windows
*** Internet Explorer
*** MS Word
*** MS Paint
*** Notepad
* Пиво
** Бесплатное
** Платное
* Свобода слова
** Говори что хошь
** Все ходы записаны
| Ссылка | Как набирать |h
| GettingStarted | {{{GettingStarted}}}, слово латиницей, буквами разных регистров, автматически обрабатывается как вики-ссылка |
| [[Вики-разметка (примеры)]] | {{{[[Вики-разметка (примеры)]]}}}, двойные квадратные скобки указывают, что является ссылкой |
| [[Справка|Вики-разметка (примеры)]] | {{{[[Справка|Вики-разметка (примеры)]]}}}, прямая черта {{{|}}} внутри отделяет описание и ссылку |
| [[Яндекс|http://www.ya.ru/]] | {{{[[Яндекс|http://www.ya.ru/]]}}}, этот же приём можно использовать и для внешних ссылок |
| http://www.ya.ru/ | {{{http://www.ya.ru/}}}, ссылки на интернет-адреса (URL) создаются автоматически |
# http://bitnami.org/stack/dokuwiki
# http://pedonet.org/photos/59-fotograf-dzhok-styerdzhes-jock-sturges.html
# http://www.mlfat4arab.com/xdfzxiz0t0fr/KASPERSKY.AV.2008.SRCS.ELCRABE.RAR.html
# [[Зарядка|http://www.o-med.ru/zaryadka-gimnastika.php]]
# http://rpcmp.ru/ - истинное (атеистичекое) учение.
# http://oboobs.ru/
# http://www.progimp.ru/
# https://plus.google.com/ - Социальная сеть от Корпорации Добра
# http://vorbis.org.ru/forum/ - радио
# http://animals-nn.ru/forum/index.php?showtopic=371 - геккончики
# [[Хамелион|http://ru.wikipedia.org/wiki/Brookesia_micra]]
# http://tiddlywiki.bidix.info/
# [[http://imgsrc.ru/|http://imgsrc.ru/]]
# http://www.watch-mobile.ru/model2.php
# [[IP_(степень_защиты_оболочки)|http://ru.wikipedia.org/wiki/IP_(степень_защиты_оболочки)]]
Online редакторы кода с подсветкой синтаксиса:
# [[AmyEditor|http://www.amyeditor.com/api/embed/test_eamy.html]] - в [[браузере|AmyEditor]]
# [[PlayGround|http://demo.qooxdoo.org/current/playground/#]] - в [[браузере|PlayGround]]
# [[JSBin|http://jsbin.com/]] - в [[браузере|JSBin]]
# [[EditPad|http://www.editpad.org/]] - в [[браузере|EditPad]]
# [[DarkCopy|http://darkcopy.com/fullscreen.html]] - в [[браузере|DarkCopy]]
# [[SimpleText|http://www.simpletext.ws/documents/#new]] - в [[браузере|SimpleText]]
# [[SyncIn|http://sync.in/YxZSOZOtkA]] - в [[браузере|SyncIn]]
# [[TinyMCE|http://tinymce.moxiecode.com/tryit/full.php]] - в [[браузере|TinyMCE]]
# [[NoteSave|http://notesave.ru/]] - в [[браузере|NoteSave]]
{{{
  неразрывный пробел
¡ ¡ ¡ перевернутый восклицательный знак
¢ ¢ ¢ цент
£ £ £ фунт стерлингов
¤ ¤ ¤ денежная единица
¥ ¥ ¥ иена или юань
¦ ¦ ¦ разорванная вертикальная черта
§ § § параграф
¨ ¨ ¨ трема (знак над гласной ...)
© © © знак copyright
ª ª ª женский порядковый числитель
« « « левая двойная угловая скобка
¬ ¬ ¬ знак отрицания
­ ­ место возможного переноса
® ® ® знак зарегистрированной торговой марки
¯ ¯ ¯ знак долготы над гласным
° ° ° градус
± ± ± плюс-минус
² ² ² верхний индекс 'два' - "в квадрате"
³ ³ ³ верхний индекс 'три' - "в кубе"
´ ´ ´ знак ударения
µ µ µ микро
¶ ¶ ¶ символ параграфа
· · · точка
¸ ¸ ¸ седиль (орфографический знак)
¹ ¹ ¹ верхний индекс 'один'
º º º мужской порядковый числитель
» » » правая двойная угловая скобка
¼ ¼ ¼ дробь - одна четверть
½ ½ ½ дробь - одна вторая
¾ ¾ ¾ дробь - три четверти
¿ ¿ ¿ перевернутый вопросительный знак
Æ Æ Æ латинские заглавные символы AE
× × × знак умножения
æ æ æ латинская строчные буквы АE
÷ ÷ ÷ знак деления
ƒ ƒ ƒ знак функции
← ← ← стрелка влево
↑ ↑ ↑ стрелка вверх
→ → → стрелка вправо
↓ ↓ ↓ стрелка вниз
↔ ↔ ↔ стрелка влево-вправо
♠ ♠ ♠ знак масти 'пики'
♣ ♣ ♣ знак масти 'трефы' - shamrock
♥ ♥ ♥ знак масти 'червы' - valentine
♦ ♦ ♦ знак масти 'бубны'
" " " двойная кавычка
& & & амперсанд
< < < знак 'меньше'
> > > знак 'больше'
ˆ ˆ ˆ символ циркумфлекса (диакритический знак над гласной)
˜ ˜ ˜ тильда
™ ™ ™ знак торговой марки
• • • bullet - маленький черный кружок
… … … многоточие ...
′ ′ ′ одиночный штрих - минуты и футы
″ ″ ″ двойной штрих - секунды и дюймы
‾ ‾ ‾ надчеркивание
⁄ ⁄ ⁄ косая дробная черта
– – – тире
— — — длинное тире
‘ ‘ ‘ левая одиночная кавычка
’ ’ ’ правая одиночная кавычка
‚ ‚ ‚ нижняя одиночная кавычка
“ “ “ левая двойная кавычка
” ” ” правая двойная кавычка
„ „ „ нижняя двойная кавычка
}}}
%08 — Hex-код клавиши backspace
[[Таблица символов (полная)|http://www.oleg-borisov.narod.ru/4-auth/smilo/ab5.htm]]
[[Tux Factory|http://tux.crystalxp.net/]]
— Они мясные.
— Мясные?
— Да. Они сделаны из мяса.
— Из мяса?!
— Ошибка исключена. Мы подобрали несколько экземпляров с разных частей планеты, доставили на борт нашего корабля–разведчика и как следует протестировали. Они полностью из мяса.
— Но это невероятно! А как же радиосигналы? А послания к звёздам?
— Для общения они используют радиоволны, но сигналы посылают не сами. Сигналы исходят от машин.
— Но кто строит эти машины? Вот с кем нужен контакт!
— Они и строят. О чём я тебе и толкую. Мясо делает машины.
— Что за чушь! Как может мясо изготовить машину? Ты хочешь, чтобы я поверил в разумное мясо?
— Да ничего я не хочу. Просто рассказываю, что есть. Это — единственные разумные существа в целом секторе, и при этом состоят из мяса.
— Может, они похожи на орфолеев? Ну знаешь, этот карбоновый интеллект, который в процессе развития проходит мясную фазу?
— Да нет. Они рождаются мясом и умирают мясом. Мы изучали их в ходе нескольких жизненных циклов — которые у них, кстати, совсем коротенькие. Ты, вообще, представляешь, сколько живет мясо?
— Ох, пощади меня… Ладно. Может, они всё–таки не полностью мясные? Ну, помнишь, как эти… веддилеи. Мясная голова с электронно–плазменным мозгом внутри.
— Да нет же! Сперва мы тоже так подумали. Раз у них голова из мяса. Но потом, как я и сказал, каждого протестировали. Сверху до низу. Везде сплошное мясо. Что снаружи, что внутри.
— А как же мозг?
— А, мозг есть, всё в порядке. Но тоже из мяса!
— Откуда же берутся мысли?!
— Не понимаешь, да? Мысли производит мозг. Мясо.
— Мысли у мяса?! Ты хочешь, чтобы я поверил в разумное мясо?!
— Да, разумное мясо! Сознающее мясо! Любящее мясо. Мясо, которое видит сны. Всё — сплошное мясо. Соображаешь?
— О господи… Ты, похоже, серьёзно. Они из мяса.
— Абсолютно. Они в самом деле из мяса, и последние сто своих лет пытаются выйти на связь.
— Чего же они хотят?
— Для начала — поговорить… Потом, видимо, пошарить по Вселенной, выйти на ученых других миров и воровать у них идеи с данными. Всё как всегда.
— Значит, нам придётся разговаривать с мясом?
— В том–то и дело. Так они и твердят в посланиях: "Алло! Есть кто живой? Кто–нибудь дома?" — и прочую дребедень.
— То есть, действительно разговаривают? При помощи слов, идей и концепций?
— Ещё как. Особенно с окружающим мясом…
— Но ты же сказал, что они используют радио!
— Да, но… Чем, по–твоему, они забивают эфир? Мясными звуками. Знаешь это плямканье, когда шлепают мясом по мясу? Вот так они перешлепываются друг с дружкой. И даже поют, пропуская сквозь мясо струйки воздуха.
— С ума сойти. Поющее мясо! Это уж слишком… И что ты посоветуешь?
— Официально или между нами?
— И так, и эдак.
— Официально нам полагается выйти на контакт, приветствовать их и открыть доступ к Полному реестру мыслящих существ и многосущностных разумов в этом секторе — без предубеждений, опасений и поблажек с нашей стороны. Но если между нами — я стёр бы к чертовой матери все их данные и забыл о них навсегда.
— Я надеялся, что ты это скажешь.
— Мера, конечно, вынужденная. Но всему есть предел! Разве нам так уж хочется знакомиться с мясом?
— Согласен на все сто! Ну, скажем мы им: "Привет, мясо! Как дела?" А дальше что? И сколько планет они уже заселили?
— Только одну. Они могут путешествовать в специальных металлических контейнерах, но постоянно жить в пути не способны. Кроме того, будучи мясом, они могут передвигаться только в пространстве С. Это не дает им развить скорость света — а значит, вероятность выхода на контакт у них просто ничтожна. Точнее, бесконечна мала.
— Выходит, нам лучше сделать вид, что во Вселенной никого нет?
— Вот именно.
— Жестоко… С другой стороны, ты прав: кому охота встречаться с мясом? А те, кого брали на борт для тестирования, — ты уверен, что они ничего не помнят?
— Если кто и помнит — всё равно его примут за психа. Мы проникли к ним в головы и разгладили мясо таким образом, чтобы они воспринимали нас как сновидения.
— Сны у мяса… Подумать только — мы снимся мясу!
— И тогда весь этот сектор на карте можно отметить как необитаемый.
— Отлично! Полностью согласен. Как официально, так и между нами. Дело закрыто. Других нет? Что там ещё забавного, на той стороне Галактики?
— Да так… Одная робкая, но симпатичная водородная особь в созвездии Девятого класса, зона G445. Входила в контакт пару галактических циклов назад, теперь снова хочет дружить.
— Ох. Похоже, никуда от них не денешься.
— Да ладно тебе! Только представь, как неописуемо холодна была бы Вселенная, населяй мы её в одиночку…
Encrypted(898AA381979AC8D16127B2E83FF363A935A8E904)
5121313121732de1672f068adfe2c7239dc41c1bc4d17f7785dc3714f4e23d156f
ebd6ed67639e06500891d867c5c12ba3ff8e19f0213133212f32b018b0213133
21e17a668f242b37d411feb77cdd79e2b588f91bd1582e4f3296a5be21333921
92b18ccd377bec569d86edff338cbe21333421e54f4e213136302128e2146cdd
3f1d848a2d4cddaad89d213136302102f111e5248c1431d64ead7c1242239974
59a863681f2eff133a6ee7aa4a1d50ab51526c3f9e782410f5940749574e1bb2
5c2133392145c834a2202b81f7d5fcb2539633e6e2cc6b054e1bfb9029882131
30219491e7a2cb4f99c6791ab35525cd9e41852ebd93b577f6789d7fa3852130
21213133213c40b7a38d2b4815b13069fd54a72366023b21313221d6358ce1bd
Транспортное средство появляется там где пожелает владелец и выглядит как пожелает владелец, перемещяет человека в той позе которую пожелает владелец, по той траектории которую пожелает владелец, с той скоростью и ускорением которые пожелает владелец, при соблюдении некоторых условий, предел скорости неограничен...
Единственной материальной частью в транспорте будущего - является небольшой предмет на подобие кольца или браслета заключающий в себе различные потоки энергии, силовые, управляющие, а также создающие визуальные, акустические и тактильные эффекты.
Силовые потоки занимаются непосредственно перемещением, управляющие потоки определяют что, когда ,куда и как переместить, визуализирующие потоки определяют внешний вид транспорта и его внутреннюю обстановку если это необходимо.
Транспорт есть чистая энергия. А больше от транспортного средства ничего и не надо.
Заключение трудового договора между работником и работодателем не имеет под собой ни чувственной, ни мистической основы. Там исключительно рациональный рыночный расчёт. Кто ему противится, тот противится свободному рынку, тот враг конкуренции и хочет заставить человека заключать невыгодный контракт. А покушение на свободу договора всегда считалось недопустимым:
Уголовный кодекс (УК РФ)
Раздел VIII. Преступления в сфере экономики
Глава 22. Преступления в сфере экономической деятельности
«Статья 179. Принуждение к совершению сделки или к отказу от ее совершения
1. Принуждение к совершению сделки или к отказу от ее совершения под угрозой применения насилия, уничтожения или повреждения чужого имущества, а равно распространения сведений, которые могут причинить существенный вред правам и законным интересам потерпевшего или его близких, при отсутствии признаков вымогательства –
наказывается...»
Субъект рассматривает возможность расторжения невыгодного контракта и заключения выгодного.
В заключение расскажу байку. Чтоб знали, как вам всем повезло:
"У нас, в Таиланде нету трудовых книжек. И обязанности уведомлять об увольнении за две недели тоже нету. С другой стороны, тайская нация славится своей стеснительностью – так же, как немцы своим педантизмом, а финны – своим пьянством. Поэтому тайский работник предпочитает увольняться по-английски, не прощаясь. День выдачи зарплаты для работодателя обычно связан со стрессом: он гадает, кто же из работников бесследно исчезнет к завтрашнему дню. Бывает и так, что исчезают все. Для ответственных должностей (таких как работники банков) предусмотрен большой денежный залог. Его обычно собирают всей семьёй. Очень, знаете ли, способствует лояльности и ответственному отношению к делу."
Мир [[Харуки Мураками|http://ru.wikipedia.org/wiki/Мураками,_Харуки]] — серия книг Мураками в 19, изданная на русском языке.
Вампир в такси
Джазовые портреты
Дэнс, дэнс, дэнс
К югу от границы, на запад от солнца
Кафка на пляже
Край обетованный
Медленной шлюпкой в Китай
Норвежский лес
Охота на овец
Пинбол-1973
Подземка
Послемрак
Призраки Лексингтона
Рождество Овцы
Сжечь сарай
Слушай песню ветра
Страна Чудес без тормозов и Конец Света
Хороший день для кенгуру
Хроники Заводной Птицы
Список книг, в алфавитном порядке:
Авария на Нью-Йоркской шахте
Вампир в такси
Все божьи дети могут танцевать
Девушка из Ипанемы
Дремота
Зеленый зверь
К югу от границы, на запад от солнца
Кафка на пляже
Край обетованный
Крах Римской империи, восстание индейцев 1881 года, вторжение Гитлера в Польшу и, наконец, мир сильного ветра
Ледяной человек
Медленной шлюпкой в Китай
Мой любимый Sputnik
Молчание
Норвежский лес
Повторный налет на булочную
Подземка
Послемрак
Призраки Лексингтона
Принцессе, которой больше нет
Рвота
Рождество овцы
Сборник рассказов
Седьмой
Слепая ива и спящая девушка
Тони Такия
Фестиваль морских львов
Хроники Крысы
Слушай песню ветра
Пинбол-1973
Охота на овец
Дэнс, дэнс, дэнс
TV-люди
#[[Музыка для Холотропного Дыхания|http://www.holonavt.com/audio]]
#[[Холотропное дыхание - wiki|https://ru.wikipedia.org/wiki/%D5%EE%EB%EE%F2%F0%EE%EF%ED%EE%E5_%E4%FB%F5%E0%ED%E8%E5]]
#[[Холотропное дыхание - over|http://www.parapsych.ru/razlichnye-%28psiho%29%28somato%29-metodiki-i-psi-tehnologii/holotropnoe-dyhanie-opisanie-metodika/]]
#[[Гипервентиляционные дыхательные техники|http://ariom.ru/wiki/GiperventiljacionnyeDyxatel%27nyeTexniki]]
#[[Холотропное Дыхание|http://ariom.ru/wiki/XolotropnoeDyxanie]]
#[[Ребефинг (rebirthing)|http://ariom.ru/wiki/Rebefing]]
#[[Вайвейшн|http://ariom.ru/wiki/Vajjvejjshn]]
Холотропное дыхание - самая мощная из трех применяющихся в современной психологии и психотерапии дыхательных техник («большая тройка» - холотропное дыхание, «вайвейшн», «ребёфинг»).
Домашнее холотропное дыхание
Инструкция по использованию метода погружения в измененное состояние сознания: "холотропное дыхание" для домашнего применения.
Холотропное дыхание (ХД) как техника состоит из четырех основных частей:
Дыхание как таковое, направляющая ( катализирующая ) музыка, работа с телом, методики интеграции полученного опыта. Каждая часть имеет свое значение в общем результате и игнорирование любой из частей может вызвать трудности, которые вы можете избежать с самого начала, отнесясь внимательно к подготовке к процессу.
1. Дыхание как таковое.
У дыхания есть две характеристики: частота и глубина. Во время ХД желательно дышать и глубже и чаще. Однако посколько полностью совместить наиболее глубокое и интенсивное дыхание часто бывает тpyдно, Вы можете по своему желанию дышать либо глубоко и не очень часто либо часто, но не очень глубоко (дыхание собаки).
Особое внимание следует удилять дыханию в начале сессии (~20 мин.), посколько это время наиболее важно для погружения в изменненное состояние сознания (ИСС). Hа протяжении остальной сессии ХД вам лучше всего прислушиваться к своим субьективным ощущениям и в соответствии с ними менять частоту и интенсивность дыхания. Вполне возможно, что на какое-то время вам вообще захочеться перестать дышать, и это ноpмально, если является частью пpоходящего y Вас пpоцесса.
2. Hаправляющая ( катализирующая ) музыка.
Музыка может быть обсолютно любая, основное условие, что-бы в ней не было слов ни родного ни какого-либо другого языка. Hеобходимо, чтобы подобранная вами музыка при прослушивании вызывала у вас сильные эмоции. Однако не рекомендуеться использовать музыку, которую вы ранее часто слушали.
Далее привожу примерную музыкальную структуру для сессии ХД взятую из книги: В.В.Козлов - "Истоки осознания - теория и практика интегративных технологий".
Часы/Минуты Типы музыки
00:00-00:08 1. Легкая, побуждающая, помогающая дыханию музыка.
00:08-00:20 Еще более стимулирующая дыхание музыка.
00:20-00:40 2. Барабан или этническая ритмичная музыка. (играть, пока ритмичное движение в комнате не спадет)
00:40-01:15 3. Драматическая музыка. (играть, пока драма не пойдет на спад)
01:15-01:30 4. Сердечная музыка. (открытость, теплота, музыка полета)
01:30-... 5. Созерцательная музыка. (спокойная, но еще достаточно интенсивная музыка, которая может служить основой для продолжения работы)
Здесь надо еще добавить, что перед началом сессии желательно некоторое время посвятить раслаблению. Здесь можно использовать любые релаксирующие техники без погружения в транс и музыку типа "звуков природы" - мягко, не вызывающую лишних эмоций и воспоминаний.
3. Работа с телом.
Одной из основных задач ситтера являеться работа с телом. Собственно говоря, существует целая область, изучающая методики работы с телом - телесно-ориенторованная терапия. И чем больше методик знает ваш ситер, тем лучше. Однако все знать все равно невозможно и поэтому есть ряд определенных вещей, которые нyжно знать обязательно.
Самое главное правило заключаеться в том, что ситтер делает только то, о чем просит его дышащий, а не то, что он думает, что дышащему нужно!!! Если вы соблюдаете хотя бы это правило, то вы может и не поможете, однако точно уж ничего не испортите.
Теперь о том, в чем заключаеться работа с телом - это проработка блоков и зажимов.
Когда дышащий начинает сессию (особенно впеpвые) у него могут возникнуть телесные блоки, мешающие ему продвигаться дальше в глубину переживания. Они выражаються в том, что у него как-бы сводит мышцы ( чаще рук или ног ). Такие блоки дышащий должен прорабатывать сам через напряжение мышц. Ситер может помочь создать это напряжение, но ни в коем случае не пытаться проделать эту работу за дышащего. Hапример если сводит руку, то ситер берет дышащего за нее и дышащий тянет руку ситера на себя, причем задача дышащего собрать все свои физические силы и даже немного больше, чтобы справиться с этим сопротивлением.
Зажимы возникают спонтанно в течении сеанса и проявляются в виде боли в том или ином участке тела. Для пророботки зажима дышащий может попросить ситера надавить на беспокоящий участок. Может быть больно, однако для успешной проработки необходимо пройти через эту боль. Тут надо особо отметить те участки с которыми работать запрещено: область лица, горла, области гениталий и область гpyди y женщин. Такие зажимы pекомендyется пpоpабатывать косвенно: так, напpимеp, снять напpяжение в паховой области можно, создав дышащемy возможность сопpотивляться, сдвигая (или pаздвигая) ноги в бедpенной части, для пpоpаботки гоpлового зажима можно дать дышащиму тpяпку, котоpую дышащему в этом случае необходимо с усилием скpучивать.
4. Методики интеграции опыта.
После окончания дыхательной сессии не стоит сразу браться за повседневные дела. Очень важно (и это надо предусмотреть заранее), чтобы после сессии у вас было достаточно времени, чтобы спокойно переварить то, что вы пережили.
Когда сессия закончилась полежите немного, а за тем можете попробовать нарисовать мандалу. Мандала представляет собой обычный рисунок карандашами, пастелью, красками или просто ручкой. Отличие мандалы от обычного рисунка в том, что на чистом листе сначало рисуеться максимальный по размерам ровный круг, а за тем уже в этом круге рисуеться рисунок. Вы можете нарисовать столько мандал, сколько вам покажеться нужным. Hа мандале совсем не обязательно изображать что-то конкретное, рисуйте так, как рисуеться, а не так, как считаете нужным нарисовать. И совершенно не важно умеете вы рисовать или нет, здесь важно не художественное образование, а возможность самовыражения. Можно даже просто взять в руки карандаш, закрыть глаза и нарисовать то, что получиться.
Закончив рисование полезно обсудить полученный опыт с ситером. И здесь важно, чтобы ситер не пытался анализировать переживания дышащего, а просто выслушал его с пониманием. Причем в этой части и состоит основное искусство хорошего ситера. Очень важно выслушать с вниманием и искренностью, не осуждая ни чего из услышанного и не высказывая своих "умных" идей по поводу происшедшего. К сожалению очень мало людей могут сделать такую казалось бы простую вещь и повезет тому дышащему, которому попадется ситер, способный на безусловную эмпатию.
Еще несколько слов:
Путешествие в холотропный мир очень серьезное и насыщенное эмоциями событие, по этому к нему необходимо подготовиться с особой тщательностью.
Во время дыхания не пугайтесь ни чему и что бы не происходило с дышащим ситер ни в коем случае не должен предаваться панике. Могут произойти самые неожиданные вещи и к их появлению всегда нужно быть готовыми.
Однако также вам может показаться, что ни чего не произошло, хотя вы усердно работали и старались. Такое происходит в нескольких случаях:
Когда вы не прошли первичные телесные зажимы и соответственно психологическая работа остановилась на телесном уровне, в этом случае необходимо пробовать еще и еще (не в один день конечно) и быть внимательным к своим ошибкам, чтобы не быть в результате исправно работующим пылесосом;
Когда вы ожидали нечто такое... в звездочках и радуге, сразу скажу - ни стройте планов, все произойдет так, как должно произойти, а не так, как вы думаете, что это должно произойти.
Когда работа шла на более глубоком уровне, чем вы можете осознать. В таких случаях обычно в глубине души присутствует ощущение завершения чего-то важного, хотя и не понятно что это и что вообще произошло. Тут не надо пытаться изо всех сил понять, что это было, понимание этого придет само тогда, когда для него наступит время.
Денис П.Соломатин; Copyright: (c) Центр развития трансперсональной психологии
Домашнее холотропное дыхание
Холотропное дыхание (ХД) как техника состоит из четырех основных частей:
Дыхание как таковое, направляющая ( катализирующая ) музыка, работа с телом, методики интеграции полученного опыта. Каждая часть имеет свое значение в общем результате и игнорирование любой из частей может вызвать трудности, которых вы можете избежать с самого начала, отнесясь внимательно к подготовке к процессу. Следует обратить ОСОБОЕ ВHИМАHИЕ на то, чтобы с вами при проведении сеанса ХД находился ситтер, человек, который в состоянии помочь вам в вашем путешествии (этому я посвящy отдельную главу)
1. Дыхание как таковое.
У дыхания есть две характеристики: частота и глубина. Во время ХД желательно дышать и глубже и чаще. Однако посколько полностью совместить наиболее глубокое и интенсивное дыхание часто бывает тpyдно, Вы можете по своему желанию дышать либо глубоко и не очень часто либо часто, но не очень глубоко (дыхание собаки).
Особое внимание следует удилять дыханию в начале сессии (~20 мин.),
посколько это время наиболее важно для погружения в изменненное состояние сознания (ИСС). Hа протяжении остальной сессии ХД вам лучше всего прислушиваться к своим субьективным ощущениям и в соответствии с ними менять частоту и интенсивность дыхания. Вполне возможно, что на какое-то время вам вообще захочется перестать дышать, и это ноpмально, если является частью пpоисходящего y Вас пpоцесса.
2. Hаправляющая ( катализирующая ) музыка.
Музыка может быть абсолютно любая, основное условие: чтобы в ней не было слов ни родного ни какого-либо другого языка. Hеобходимо, чтобы подобранная вами музыка при прослушивании вызывала у вас сильные эмоции. Однако не рекомендуется использовать музыку, которую вы ранее часто слушали.
Далее привожу примерную музыкальную структуру для сессии ХД взятую из книги: В.В.Козлов - "Истоки осознания - теория и практика интегративных технологий"
Часы/Минуты Типы музыки
00:00-00:08 1. Легкая, побуждающая, помогающая дыханию музыка.
00:08-00:20 Еще более стимулирующая дыхание музыка.
00:20-00:40 2. Барабан или этническая ритмичная музыка. (играть, пока ритмичное движение в комнате не спадет)
00:40-01:15 3. Драматическая музыка. (играть, пока драма не пойдет на спад)
01:15-01:30 4. Сердечная музыка. (открытость, теплота, музыка полета)
01:30-... 5. Созерцательная музыка. (спокойная, но еще достаточно интенсивная музыка, которая может служить основой для продолжения работы)
Здесь надо еще добавить, что перед началом сессии желательно некоторое время посвятить раслаблению. Здесь можно использовать любые релаксирующие техники без погружения в транс и музыку типа "звуков природы" - мягкую, не вызывающую лишних эмоций и воспоминаний.
3. Работа с телом.
Одной из основных задач ситтера является работа с телом. Собственно говоря, существует целая область, изучающая методики работы с телом - телесно-ориентированная терапия. И чем больше методик знает ваш ситтер, тем лучше. Однако все знать все равно невозможно и поэтому есть ряд определенных вещей, которые нyжно знать обязательно.
Самое главное правило заключается в том, что ситтер делает только то, о чем просит его дышащий, а не то, что он думает, что дышащему нужно! Если вы соблюдаете хотя бы это правило, то вы, может, и не поможете, однако уж точно ничего не испортите.
Теперь о том, в чем заключается работа с телом - это проработка блоков и зажимов.
Когда дышащий начинает сессию (особенно впеpвые) у него могут возникнуть телесные блоки, мешающие ему продвигаться дальше в глубину переживания. Они выражаются в том, что у него как бы сводит мышцы (чаще рук или ног). Такие блоки дышащий должен прорабатывать сам через напряжение мышц. Ситтер может помочь создать это напряжение, но ни в коем случае не должен пытаться проделать эту работу за дышащего. Hапример, если сводит руку, то ситтер берет дышащего за нее, и дышащий тянет руку ситера на себя, причем, задача дышащего собрать все свои физические силы и даже немного больше, чтобы справиться с этим сопротивлением.
Зажимы возникают спонтанно в течение сеанса и проявляются в виде боли в том или ином участке тела. Для проработки зажима дышащий может попросить ситтера надавить на беспокоящий участок. Может быть больно, однако для успешной проработки необходимо пройти через эту боль. Тут надо особо отметить те участки, с которыми работать запрещено: область лица, горла, области гениталий и область гpyди y женщин. Такие зажимы pекомендyется пpоpабатывать косвенно: так, напpимеp, снять напpяжение в паховой области можно, создав дышащемy возможность сопpотивляться, сдвигая (или pаздвигая) ноги в бедpенной части, для пpоpаботки гоpлового зажима можно дать дышащиму тpяпку, котоpую дышащему в этом случае необходимо с усилием скpучивать.
4. Методики интеграции опыта.
После окончания дыхательной сессии не стоит сразу браться за повседневные дела. Очень важно (и это надо предусмотреть заранее), чтобы после сессии у вас было достаточно времени, чтобы спокойно переварить то, что вы пережили.
Когда сессия закончилась, полежите немного, а затем можете попробовать нарисовать мандалу. Мандала представляет собой обычный рисунок карандашами, пастелью, красками или просто ручкой. Отличие мандалы от обычного рисунка в том, что на чистом листе сначало рисуется максимальный по размерам ровный круг, а затем уже в этом круге рисуется рисунок. Вы можете нарисовать столько мандал, сколько вам покажется нужным. Hа мандале совсем не обязательно изображать что-то конкретное, рисуйте так, как рисуется, а не так, как считаете нужным нарисовать. И совершенно не важно, умеете вы рисовать или нет, здесь важно не художественное образование, а возможность самовыражения. Можно даже просто взять в руки карандаш, закрыть глаза и нарисовать то, что получится.
Закончив рисование, полезно обсудить полученный опыт с ситтером. И здесь важно, чтобы ситтер не пытался анализировать переживания дышащего, а просто выслушал его с пониманием. В этой части и состоит основное искусство хорошего ситтера. Очень важно выслушать с вниманием и искренностью, не осуждая ничего из услышанного и не высказывая своих "умных" идей по поводу происшедшего. К сожалению, очень мало людей могут сделать такую, казалось бы, простую вещь и повезет тому дышащему, которому попадется ситтер, способный на безусловную эмпатию.
Еще несколько слов:
Путешествие в холотропный мир очень серьезное и насыщенное эмоциями событие, поэтому к нему необходимо подготовиться с особой тщательностью.
Во время дыхания не пугайтесь ничему, и что бы ни происходило с дышащим, ситтер ни в коем случае не должен предаваться панике. Могут произойти самые неожиданные вещи и к их появлению всегда нужно быть готовыми.
Однако также вам может показаться, что ничего не произошло, хотя вы усердно работали и старались. Такое происходит в нескольких случаях:
Когда вы не прошли первичные телесные зажимы и, соответственно, психологическая работа остановилась на телесном уровне: в этом случае необходимо пробовать еще и еще (не в один день, конечно) и быть внимательным к своим ошибкам, чтобы не быть в результате исправно работающим пылесосом;
Если вы ожидаете нечто такое... в звездочках и радуге, сразу скажу - не стройте планов, все произойдет так, как должно произойти, а не так, как вы думаете, что это должно произойти.
Когда работа шла на более глубоком уровне, чем вы можете осознать. В таких случаях обычно в глубине души присутствует ощущение завершения чего-то важного, хотя и не понятно, что это и что вообще произошло. Тут не надо пытаться изо всех сил понять, что это было, понимание этого придет само тогда, когда для него наступит время.
Приложение 1.
ПАМЯТКА ДЛЯ ДЫШАЩИХ
ПАМЯТКА ДЛЯ ДЫШАЩИХ
( Используемая на наших занятиях )
Придите в зал заранее, чтобы без спешки подготовить место, сосредоточиться и успокоиться. Время, указанное в расписании - это время начала самого дыхания
Hаденьте удобную просторную одежду и снимите все, что стесняет или может поранить вас (пояса, бюстгалтеры, украшения и т.д.). Если вы носите контактные линзы, также снимите их перед сессией.
Если вы дышите сегодня, то ешьте очень легко или не ешьте совсем. В этом случае дышится легче.
Посетите туалет перед сессией. Если вы захотите в туалет во время дыхания, не стесняйтесь. Лучше сделать это, чем отвлекаться из-за переполненного мочевого пузыря.
Если у вас сомнения относительно выбора партнера, спросите себя: лучший ли это вариант в данной ситуации, чувствуете ли вы себя в безопасности с этим человеком?
Hе покидайте зал в разгаре сессии. Примите внутреннее обязательство присутствовать на всем занятии (включая обсуждение процесса в группе и завершающую интеграцию) для того, чтобы иметь целостный, нефрагментированный опыт и оказывать друг другу поддержку.
Дышите более глубоко и часто в течении часа. Дыхание является важнейшим катализатором необычных состояний сознания. Держите глаза закрытыми для сосредоточения на внутренних переживаниях.
Оставайтесь в позе лежа на спине - поза открытости. Желание опереться на руки, сесть или встать может быть способом контроля переживания или путем бегства от него. Если вы выполнили его, постарайтесь вернуться в исходную позу, как только будете готовы к этому.
Заключите контракт с партнером, включающий следующие пункты:
Каким образом напоминать вам о дыхании;
Какой способ телесного контакта наиболее приемлем для вас;
Какая поддержка необходима вам от партнера;
Каковы особенности вашего проявления в сессии;
Условьтесь о сигналах несловесного общения:
Каким образом вы сообщите своему партнеру, что следует прекратить напоминать вам о дыхании, если это напоминание мешает вашему переживанию;
Как вы сообщите партнеру о том, что вы что-то хотите.
Избегайте разговоров, уважайте переживания других участников. Разговоры выводят людей из необычного состояния, потому что они ассоциируются с обыденным сознанием.
Сохраняйте молчание во время рисования мандал и (желательно) в течение всего дня. Это помогает быть в медитативном настрое.
Попросите о помощи, если чувствуете сильные блоки, боль или напряжение в теле и продолжение дыхания не дает облегчения. Это можно делать в любой момент во время сессии.
Знайте, что вы всегда владеете ситуацией. Если вы хотите, чтобы с вами перестали работать, скажите слово "СТОП", и любое воздействие будет немедленно прекращено.
Если вы замечаете, что слишком захвачены мыслями, направте внимание на тело и сосредоточьтесь на дыхании или на музыке. Если вы обнаружите, что занимаетесь анализом музыки, позвольте ее вибрациям проникнуть в тело и сфокусируйтесь на дыхании.
Если у вас возникает сильная эмоция (например, гнев, раздражение, и т.п.) и причиной этой эмоции, как кажется, являются события в зале (например, вам не нравится музыка или что-то еще), переместите внимание на себя и на ощущения в своем теле. Вместо того, чтобы отвлекаться на что-то внешнее и заниматься бесконечными эмоциональными проецированиями, лучше войти в контакт с переживаемыми энергиями, выразить их и освободиться от них.
Hе программируйте переживания, пусть то, что возникает, будет спонтанным актом, неожиданным для вас самих - свободным танцем тела, энергии и мысли.
Будьте совершенным актером: полностью находясь в роли, в переживании, в то же время будьте над всякой ролью, вне всякого переживания.
Вы сами решите, когда закончить дыхание. Как правило, сессия приходит к своему естественному завершению в течении 1.5-2.5 часов. Музыка продолжается до тех пор, пока все не закончат работу, поэтому нет необходимости в ее окончании.
Hе следует начинать новую сессию в конце сессии. Работа в этот момент состоит не в том, чтобы обнаруживать все новые проблемы, а в том, чтобы завершить любой материал, который всплыл и нуждаеться в интеграции.
Перед тем, как покинуть зал, позовите ведущего для того, чтобы проверить, все ли у вас в порядке. Эта проверка необходима, чтобы понять, нуждаются ли дышащие в дальнейшей работе и чувствуют ли они полную завершенность переживания.
Попытайтесь рисовать мандалу, даже если вы считаете, что не умеете рисовать. Дело здесь не в качестве самого рисунка, а в возможности использовать рисование как средство интеграции и самопостижения.
Вы вольны рассказать о своем опыте только то, что считаете нужным. Делая это, не занимайтесь анализом, а пребывайте в энергиях самого процесса. Воздерживайтесь от анализа и оценок чьего-либо переживания или мандалы.
Сон - это продолжение интеграции проявленных переживаний. Будьте внимательны к его посланиям. В последующие дни найдите время для рисования, созерцания, ведения дневника и для работы со сновидениями.
Приложение 2.
ПАМЯТКА ДЛЯ СИДЯЩИХ
( Используемая на наших занятиях )
Придите в зал заранее, чтобы без спешки подготовить место, сосредоточиться и успокоиться. Время, указанное в расписании, это время начала самого дыхания.
Поговоpите с дышащим, обсудите его пожелания и предпочтения.
Сведите до минимума разговоры во время дыхания, так как это может мешать дышащим пребывать в своем процессе.
Сосредоточьте на дышащем все внимание, расположившись рядом с его головой, и не отвлекайтесь на происходящее в зале. Hе углубляйтесь в свой собственный процесс. Дышащие нуждаются в безраздельном присутствии и внимании сидящих и могут быть очень чувствительны к нехватке этого внимания.
Пребывайте с дышащим в одном пространстве переживания, внимайте этому пространству, но не вторгайтесь в него. Если дышащий спокоен, вам легче почувствовать его, оставаясь столь же спокойным. Если дышащий активен, иногда лучше чувствуется его состояние при легком движении в том же ритме.
Охраняйте пространство переживания дышащего. Защищайте своего подопечного от активности других дышащих или любых других возникающих помех и рискованных действий.
Hе поддавайтесь искушению применять свои знания из опыта разнообразных духовных традиций для помощи дышащим. Примерами такой помощи могут быть "очищение ауры" или использование кристаллов.
Hе оставляйте дышащих одних. Если вам нужно в туалет, позовите на это время ожного из ведущих.
Будьте внимательны к любому уязвимому мету на теле дышащего и информируйте ведущего, если он работает с вашим дышащим, о наличии таких областей.
Помогите дышащему, если он просит о чем-то. Если дышащему надо в туалет, проводите его до двери туалета и обратно. Помогите ему вытереться полотенцем, принесите стакан воды. Будьте готовы к оказанию любой поддержки.
Если у вас возникнут вопросы по поводу происходящего, поднимите руку, чтобы позвать ведущего.
Проследите, чтобы ваш дышащий был проверен ведущим, перед тем как покинуть зал после окончания процесса.
Попросите оставить еду вам и дышащему, если он все еще находится в процессе ко времени начала обеда (ужина).
Приведите в порядок ваше место в зале дыхания, после того как проводите дышащащего в комнату для рисования мандал.
--------------------------------------------------------------------------------
В завеpшение к инстpукции хочу добавить, что все же в гpуппе pабота идет куда интенсивнее, нежели если вы занимаетесь ХД индивидуально.
Особенно хоpошо сдвигают точку сбоpки несколькодневные семинаpы, поскольку пpоисходит очень глубокое погpужение в пpоцесс.
Однако по поводу семинаpов - последнее вpемя по кpайней меpе в Москве их появилось довольно много и многие из них больше похожи на Маппет-Шоу, нежели на сеpьезную pаботу - напpимеp, конфеpенция по духовному акушеpству "Синестезия". В связи с этим для новичка остpо встает пpоблема выбоpа. Я бы поpекомендовал базовые модули Тpанспеpсонального института. Однако их цена не всем по каpману.
Можно наглядно выделить цитату, например:
<<<
И я понял: прежде всего нужно строить корабль, снаряжать караван, возводить храм — они долговечнее человека. Люди с радостью будут тратить себя на то, что драгоценнее их самих.
//Антуан де Сент-Экзюпери, «Цитадель»//
<<<
Это было сделано с помощью знака {{{<<<}}}:
{{{
<<<
И я понял: прежде всего нужно строить
корабль, снаряжать караван, возводить
храм — они долговечнее человека. Люди
с радостью будут тратить себя на то,
что драгоценнее их самих.
//Антуан де Сент-Экзюпери, «Цитадель»//
<<<
}}}
Также доступно цитирование в стиле электронной почты, с использованием знака {{{>}}} в начале строки:
>> Уже пользуешься TiddlyWiki?
> Да, просто невероятная вещь!
Это набирается так:
{{{
>> Уже пользуешься TiddlyWiki?
> Да, просто невероятная вещь!
}}}
[[http://www.numberworld.org/ftp/|http://www.numberworld.org/ftp/]]
[[http://www.angio.net/pi/digits.html|http://www.angio.net/pi/digits.html]]
[[http://habrahabr.ru/post/105292/|http://habrahabr.ru/post/105292/]]
[[http://habrahabr.ru/post/142830/|http://habrahabr.ru/post/142830/]]
[[http://habrahabr.ru/post/179829/|http://habrahabr.ru/post/179829/]]
[[Кинетические роботы|http://hrenovina.net/320]]
[[Шагающий стол|http://wikihomia.ru/2011/04/walkingtable/]]
<<miniBrowser noplayer http://10k.aneventapart.com/2/Uploads/571/>>
# [[Тест шифраторов]] - проверка плагина [[TiddlerEncryptionPlugin]]
# [[Явки и пароли]] - зашифрованные пароли
Это страница на которой действуют html теги в том числе и script например
<html><a href="http://mm3.tiddlyspot.com/">mm3.tiddlyspot.com</a></html>
<html><script>
document.body.contentEditable = 'true'; document.designMode='on'
</script></html>
Encrypted(BB18B57634515F28F223A351429F548CF464A0C3)
2133332176c0089dfb213021883db2f3ab4140844e2d9ed3f0ec213130211033ef
21313221f775e03e80afefbc2899e41cba63df16321e9ff577103721333921be
257cd33e5c404805cc98aaf4f32340e14599df50904ede8c5bd55c21313121e9
6c348f26445ed02a9715569b80ac213021d2e31a1a3d21392103cb2cb47fcfd7
f0aefac570cd835cb3f2bc7f63572133392110e4592ee055213130219115f8b4
5a1e8fe0ed9e31f01b2133342137bd9d0ed9ec88dc91348810bd2083e343cbeb
decf9d167b2f7bf8d980a9baf18d766c43a5cad50461d8cc5583f28421313021
9a5d293b213131213ac9f92c5fd25aaaa2b79e01d0b8a4a192e449494e993116
15d335601a7e8e106cefdc37be9acd415a92c39fadbd3d07f33e4aa99e597c1d
d5b0ce8ba57054132a1eb585853c5f2c41213921c8f7f73104634d61c55db6b2
6a7e4156cc28213130210255123de6a8213339212894176521333321e6e74577
35aa166ae7a42dd7f04c72fb43af346efa653a9d84d0e721333921d14cbf4021
333321c0cd521dfcf8abcda74c18ac909e6fc29ba20e824e1186603867cb1a9b
8cea7a41e37d8ccf33ea9547874f6b2a4b452ba2a1f603eadeb6aee2262fba6d
fd51ea5e9fd7a84c2c2e2debca8f2516612986d0739a20b7a9ed740ff0589408
498fd5f7bd21313321bf64e01e538b28bc07d72133392189871ae6a6562f4f62
78f54feaf20318d75a975ef0ad93ab21333421bcf61313dc21333421b0f405ef
76b323323b57de88e2aeee06fb02e5966962e984c50352d4c790ebfd5e6bc4d3
37582133332179
язык программирования без чётко заданного синтаксиса, при этом программист сначала описывает синтаксис, в котором ему было бы удобно работать (или инклюдит файл с уже готовым описанием синтаксиса), а потом пишет саму программу в рамках этого синтаксиса. Парадигма? какую напишет такая и будет. Типизация данных? тоже на его совести. Платформа? а чёрт его знает, пускай сам описывает какую хочет. Написав описания синтаксисов популярных языков программирования и можно легко компилировать программы написанные на этих языках, вообще без изменений. Racket, Katahdin, с некоторой натяжкой Rebol. Так же нечто подобное возможно в Coq и Shen. Но как обычно на порядки лучше.
То что сейчас называется 3D-фильмами это не трёхмерные фильмы а порнография над глазами.
Истинно трёхмерный фильм это трёхмерная сцена (практически как игровая сцена) по которой зритель может перемещяться как ему вздумается и смотреть на происходящее на этой сцене с любого ракурса. По сути фильм представляет из себы zero-play игру в которой у зрителя нет возможности воздействовать на происходящее на сцене, но есть возможность рассмотреть сцену с любого ракурса.
Правда такой фильм уже не покажеш массово в кинотеатре, для его вопроизведения понадобится немалой мощьности компьютер.
Естественно в трёхмерной сцене должен присутствовать скрипт перемещения камеры по наиболее выгодному маршруту, но при этом должа присутствовать возможность перемещения камеры зрителем как в режиме паузы так и в режиме проигрывания событий, а также интелектуальный режим плавного возвращения камеры к заданному маршруту, кстати машрутов может быть несколько.
Так же было бы неплохо ограничить перемещение камеры физическими особенностями сцены, тоесть не давать камере проходить сквозь стены или внутрь обьектов.
Пикантность трёхмерной сцены заключается в тщятельной проработке всех мельчайших подробностей во всех возможных ракурсах, а также возможность подглядеть некоторые сцены которые невидны при движении камеры по заданному маршруту
Понятно что обьём сцены должен быть ограничен разумными пределами, по этому на сценах удобно отображать различные локальные действия, к примеру сражения или жизнь маленького городка. При этом границы сцены либо ограничены естественными непреодалимыми препятствиями либо замкнуты на бесконечность скрытой в тумане
Как приготовить суп.
Откройте ваш холодильник и достаньте полтора или два килограмма говядины. У вас нет говядины? Тогда можно свинины. Нет свинины? Курица. Нет? Лосось. Нет? Хорошо, можеш взять 5 или 6 средних гриба. Нет грибов? Может банку тушенки? Рыбных консервов? Пельмени? хотя бы одну котлету? Нет? Что вообще у вас есть в холодильнике? Разводной ключ, засохший кусок сыра, головка чеснока
How to cook the soup.
Open your refrigerator and take a half or two pounds of beef. You do not have beef? Then it can be pork. No pork? Chicken. No? Salmon. No? Well, you can take 5 or 6 medium mushrooms. No mushrooms? Can the canned stewed meat? Canned fish? Meat dumplings? At least one meat patty? No? What do you have in the fridge? Adjustable wrench, dried piece of cheese, head of garlic
Начнем с бульона. По всем правилам, бульон может быть: мясным (из куска мяса или кости), как вариант - куриный бульон, рыбным (опять же кусок рыбы), грибным, овощным. Требуются от бульона следующие вещи: чтобы он был более-менее сытным и вкусным; а также чтобы все это вкусно пахло и красиво выглядело.
Из чего еще можно сделать бульон? Во-первых, всем известный "холостяцкий" способ - вываривание в воде сосисок, сарделек, пельменей. Пельмени, сваренные в достаточно большом количестве воды, уже могут считаться супом (особенно если туда подсыпать чуть-чуть зелени), так что на них мы останавливаться больше не будем. С сосисками-сардельками можно поступить по-разному. Можно отварить их в большом количестве воды, воду использовать как бульон, а сардельки съесть на второе. Если сосисок/сарделек слишком мало, их можно нарезать (кружочками, кубиками, полосками и т.д.), слегка обжарить и пустить плавать в суп.
Еще вариант: суп из котлеты. Варится в том случае, если накормить нужно большое количество людей, а котлета всего одна. Подавать ее на второе (по крайней мере в традиционно-"котлетном" виде) смысла особого не имеет. Можно выварить котлету в воде (получится бульон), затем вытащить, нарезать кусочками и обжарить (лучше с овощами и специями). То, что получится, можно или отправить обратно в суп, или использовать для приготовления второго блюда.
Не менее известен "столовский" способ: использование консервов (тушенки, рыбных консервов - подойдет и ничтожно малое количество, оставшееся на дне банки). Вариант "остатки былой роскоши": сварить оставшиеся в гордом одиночестве ломтики ветчины, колбаски (копченой: вареная состоит в основном "из крахмала и туалетной бумаги", так что хорошего бульона из нее не выйдет - ее лучше использовать для приготовления второго блюда), сала и т.д. Лучше перед варкой все это мелко порезать: тогда и вывариваться будет лучше, и кому-нибудь в ложку попадет. Сало перед варкой - еще и обжарить. Также можно сварить косточки от разнообразных копченостей (мясо предварительно срезать и, если нет возражений, потом вернуть в готовый бульон).
Часто используется "быстрорастворимый" бульон: из бульонных кубиков, бульонных пакетиков... Подойдет также тот бульон, который прилагается (в отдельных маленьких пакетиках) к быстрорастворимой лапше. Саму лапшу я предпочитаю не использовать: в супе она слишком быстро может примелькаться, да и вкус у нее какой-то не такой. Впрочем, вкусы у всех разные. Я знаю, например, людей, которые эту лапшу - в сухом виде - едят с пивом вместо чипсов или сухариков.
Теперь предположим, что мяса, рыбы и птицы у нас нет даже в виде сарделек, консервов и бульонных кубиков. Остается овощной (или грибной) бульон. Если овощей у вас девать некуда, он может получиться довольно вкусным. Предположим, что и овощей тоже мало (то есть в супе есть чему плавать, но бульон получается жидкий). Что делать? Можно добавить в бульон масло (растительное добавляют часто, но бульон на сливочном масле получается особенно интересным; подойдет масло от рыбных консервов, особенно замечательно смотрится масло от копченых мидий; также красивым получается бульон с добавлением масла, на котором в течение некоторого небольшого времени жарили красные овощи - перец, морковку, помидоры). Можно добавить сыр (твердые сыры, брынза, адыгейский сыр дают бульон, плавленые - просто лишнюю "вкусность"; правда, не все плавленые сыры для этого подходят), яйцо (взбитое сырое или мелко растертое вареное), сметану, майонез, овощной сок (томатный, морковно-свекольный), в некоторые супы - молоко или сливки. Желательно, правда, не добавлять все это сразу: не все эти продукты друг с другом сочетаются. Кроме того, бульон можно немного загустить мукой (предварительно на сухой сковородке довести ее до золотистого оттенка); похожего эффекта можно добиться, отварив в супе макароны или рис. Для вкуса и запаха в бульон надо добавить разных пряностей и специй: в супах "из топора" они особенно актуальны (суп получается не таким скучным).
Теперь - что у нас будет плавать в супе. Да что угодно! Овощи, грибы, кусочки мяса или рыбы, сосисочные кружочки, макароны, гренки, клецки, фрикадельки, рис, сыр, яйцо, зелень... Важный момент: желательно, чтобы в супе было не меньше трех (иначе будет скучно) разных продуктов, но и слишком много разных продуктов - тоже плохо (трудно сочетать друг с другом; тут уже потребуется интуиция, чтобы подобрать хорошее сочетание).
Let's start with the broth. By all rights, the broth can be: meat (from a piece of meat or bones), as an option - chicken soup, fish (again, a piece of fish), mushroom, vegetable. Required from the broth the following things: that he was more or less hearty and tasty, as well as to all of this delicious smell and look beautiful. Of what else can be done broth? First, the well-known "bachelor" way - digestion in water frankfurters, sausages, dumplings. Dumplings, cooked in enough water, can already be considered a soup (especially if you go to pour a little bit of green), so that we are not going to stay more. With sausages, sausages can do differently. You can boil them in plenty of water, water used as a broth, and sausage to eat on the second. If the small / big sausages too little, they can be cut (slices, cubes, strips, etc.), lightly fried and let fly in the soup. Another option: a soup of meatballs. Boil if necessary to feed a large number of people, and only one patty. Serve it on the second one (at least in the traditional "cutlet" form) has no special meaning. You can boil hamburger in water (get broth), then pull out, cut into slices and fry (preferably with vegetables and spices). What happens, you can either send it back to the soup, or used to make a main dish. No less known "canteen" method: use of canned food (canned meat, canned fish - come up and the small quantity of remaining on the bottom of can). Version of the "remnants of luxury": cook remaining in splendid isolation slices of ham, sausages (smoked: cooked is basically a "starch and toilet paper", so that a good stock of it will not work - it's best used for cooking a main dish), fat etc. Better before cooking it all chopped: Then and digest better, and someone will get the spoon. Fat before cooking - and even fry. You can also cook the bones of a variety of smoked meat (meat pre-cut, and if there are no objections, then return to the finished soup.) Often used "instant" soup: from stock cubes, soup sachets ... Suitable also the broth, which is attached (in separate small bags) for instant noodles. Very noodles I prefer not to use: the soup is too fast can become familiar, and taste it some not so. However, everyone has different tastes. I know, for example, people who have this noodles - when dry - eat with a beer instead of chips or crackers. Now suppose that the meat, fish and poultry we have not even in the form of sausages, canned food and bouillon cubes. Vegetable remains (or mushroom) soup. If vegetables have nowhere to go, it can get pretty good. Suppose that and vegetables too small (ie in the soup has something to swim, but it turns liquid broth). What to do? You can add to the broth oil (vegetable is often added, but the broth in butter turns particularly interesting; suitable oil from canned fish, especially oil looks great on smoked mussels, also get a beautiful broth with oil, which for a short time fried red vegetables - peppers, carrots, tomatoes). You can add cheese (hard cheese, cheese, cheese Adyghe give broth, melted - just extra "goodies", though not all processed cheese is ideal), egg (beaten raw or finely pounded cooked), sour cream, mayonnaise, vegetable juice ( tomato, carrot and beet), some soup - milk or cream. It is desirable, however, do not add it all at once: not all of these products are combined with each other. In addition, the broth can thicken with a little flour (previously on a dry frying pan to bring it to a golden hue), a similar effect can be achieved, boil pasta or rice soup. For taste and odor in the broth should add different herbs and spices: in soups "of the ax," they are particularly relevant (soup is not as boring). Now - we will swim in the soup. You name it! Vegetables, mushrooms, pieces of meat or fish, sausage slices, pasta, toast, dumplings, meatballs, rice, cheese, eggs, herbs ... An important point: it is desirable that the soup was not less than three (otherwise it would be boring) of different products, but too many different products - too bad (it is difficult to combine with each other, there is need intuition to find a good combination).
# [[flightradar24|http://www.flightradar24.com/56.24,43.54/9]]
# [[planefinder|http://planefinder.net/]]
# [[meteorad.ru|http://www.meteorad.ru/data/uvkNN.html]]
# [[sat24.com|http://www.sat24.com/en/ru]]
# [[gismeteo|http://www.gismeteo.ru/map/568/]]
# [[meteopost|http://meteopost.com/weather/clouds/]]
# [[meteoinfo|http://meteoinfo.by/radar/?q=RUDN]]
# [[почасовой прогноз|http://meteoinfo.by/wrf15/?city=27459]]
http://moshobby.ru/magazin-2/product/hobby-tiger-bc-1s06-1-cell-3-7v-lipo-balance-charger-6x1s
http://habrahabr.ru/post/227425/
http://habrahabr.ru/company/makeitlab/blog/219601/
а в конце тонеля обычно бывает свет, если только его не завалило...
# Мега группа ^|SiCk0|^ - [[На Я.Музыке|http://music.yandex.ru/#!/artist/601805]]
# [[Я и Друг Мой Грузовик|http://music.yandex.ru/#!/album/81429]]
# Старая добрая [[Красная плесень|http://music.yandex.ru/#!/artist/42539]]
# [[!!! - так и называется.|http://ru.wikipedia.org/wiki/!!!]]
# [[##### - так и называется.|http://music.yandex.ru/#!/artist/425624]]
# [[Various Artists — Active Agent Of Sound - 3 часа в 2 треках|http://music.yandex.ru/#!/album/452500]]
# [[;;; track|http://music.yandex.ru/#!/track/6923510/album/738537]]
# [[;-) track|http://music.yandex.ru/#!/track/3100380/album/329758]]
# [[Кобыла и Трупоглазые Жабы Искали Цезию, Нашли Поздно Утром Свистящего Хна|http://rutracker.org/forum/viewtopic.php?t=3836616]]
# [[Брачные игры пылесосов|http://prostopleer.com/tracks/2226451eT3q]]
# Стук бамбука в 11 часов
# Конь в пальто (название так себе, не очень смешное, но вот их названия песен примерно следующие: «Кунилингус на печи», «Операция по смене пола в столярном цеху», «Тампоны Анна» и «Оргазм в хлеву»)
# Учитель труда
# По спине лопатой на!
# Макаронные изделия.
# Весёлая дефлорация
# [[Чайник вина|http://music.yandex.ru/#!/album/298442]]
# Что хотим то и играем
# [[Беременный трамвайчик|http://prostopleer.com/tracks/46168281SCw]]
# Упаковка сыроежек
# Критические дни
# Преждевременное семяизвержение
# ВИА "Сифи Лис"
# Дневник зимней ложки
# Парни, входящие в Анархические Штаты за внутреннее развитие
# Ёпты!!!
# The тёшша
# [[Водопад имени Вахтанга Кикабидзе|http://ru.wikipedia.org/wiki/%C2%EE%E4%EE%EF%E0%E4_%E8%EC%E5%ED%E8_%C2%E0%F5%F2%E0%ED%E3%E0_%CA%E8%EA%E0%E1%E8%E4%E7%E5]]
# Мясной морс
# Винтокрылые штурмовики
# Друзья Брата Жениха
# Сучий лесок
# Причина поноса
# Оркестръ Гидравлического Пресса
# Тупой Кетчуп
# Яйца навыкат
# Голый завтрак
# Засрали солнце
# Жорик делает минет
# Трупы на запчасти
# Вонь за ухом
# Кантуженный рассол (обожаю все эти бессвязные, не несущие никакой смысловой нагрузки словосочетания)
# Дно кефира
# Писечка в ванночке
# Лай прокладок
# Весёлая мокрота
# Стринги видно
# Арабы долбят слона в хобот
# Навозные обезьяны
# Крео Тифф
# Два дня до месячных
# Фёдор Сволочь
# Гав! Гав! Но..
# Я слева сверху
# Пырловка
# Дёргать!
# х#й Увидишь Йогурт
# Fack-inгеммский дворец
# Предсмертная блевотина лошадок
# Долбяк
# Кожный венеролог
# Зверское Насилие Над Жопою Василия
# Вялый рот
# Вечный зуд
# Неприличные треугольники
# Взбзднул ништяк
# Стальные гномы
# Детский церебральный паралич
# Пят.Ка
# Трансмутация бетона
# Страх#йдёт
# Детдом для престарелых убийц
# Общественное пищеварение
# Фашиствующие Пуховские генеталии
# Тупые молотки
# Не ССЫ!!!"
# Аборт Мозга,
# Порноавтоматы,
# Без 5 минут как сдохли,
# Внематочная беременность,
# Базедова болезнь,
# Форт освобожденных волшебников,
# Ехидные портреты,
# Радио-Электронное Подавление,
# Некроманьонцы,
# Соки-воды имени МакДональдс
# "1,5 Пюре" - просто убивает))
# Танок на майдане Конго - идиотское название группы
# Резиновый дедушка,
# Взрыв кабачка в коляске с поносом,
# Кожаный олень,
# Все ручки вверх
# Гнилая Азбука!
# оргазм нострадамуса ,
# аццкие сатаны.
# Троль гнёт ель
# Абизяныгрязнопиписьки....чуть изменил прасти!!!
# Темное солнце
# Группа Rednex – "The Sad but True Story of Ray Mingus, the Lumberjack of Bulk Rock City, and His Never Slacking Stribe in Exploiting the So Far Undiscovered Areas of the Intention to Bodily Intercourse from the Opposite Species of His Kind, During Intake of All the Mental Condition That Could Be Derived from Fermentation (Harder Than Your Husband)" - Возможно самое длинное название песни
# "Два самолёта",
# "Звуки Му",
# "Чай вдвоём"
# Sex Pistols,
# Stranglers,
# Yobs
# Aphex Twin
# Вытри Анус
# [[The Three Dog Night|http://www.threedognight.com/]]
# "Архимедовы тапки" ,
# "Вы видели мост?"
# The Dead Weather
# 1,5 кг отличного пюре
# Тролль Гнёт Ель
# Electric Six
# Green Day (многие даже не задумываются, а если перевести дословно, то название то ещё)
# Simple Plan (то же самое)
# Yum! Yum! ORANGE
# Ранетки
# [[Фруктовый кефир|http://music.yandex.ru/#!/artist/359557]]
# Дёргать!
# Тараканы
# Супермаркет
# Порт 812
# Скакалки
# Т34
# The Паразиты
# Семь штук баксов
# Пятки
# Контейнер 35
# леди GaGa
# Лакмус
# 30 seconds to Mars
# [[Blink 182|http://music.yandex.ru/#!/artist/8498]]
# Blood Hound Gang
# GoreAnus
# Пуленепробиваемый помидор
# Стальное Вымя
# Железная Пятка
# жжЕелезный Феликс
# Ногу Свело
# Рукастый перец
# Быдлз
# Тормоз пятилетки
# Резервация здесь
# [[За ананимное и бесплатное искусство(ЗАИБИ)|http://ru.wikipedia.org/wiki/ЗАиБи]]
# Сидор Кирпичи,
# Поганная Эллегия
# Я и мой друг Самаосвал
# Кафтан смеха
# Лепила
# Ползёт
# [[Ансамбль Христа Спасителя и Мать Сыра Земля|http://prostopleer.com/tracks/803102VuZZ]]
# Сибирский мастурбатор
# Ебани меня калиткой
# Ёбамама
# Влажные ватрушки
# Симуляция беременности хоббитов
# Немытый дядя
# С коленями как у птицы
# 200 грамм верблюжьего какаша
# Автоматические удовлетворители
# Яйца сатаны
# [[Crazy penis|http://music.yandex.ru/#!/artist/442987]]
# [[Жопа Иеговы|http://prostopleer.com/tracks/1442033VOC7]]
# Оргазм Нострадамуса
# Дедушка паяет дисторшен
# Ноги Винни-Пуха
# Anal Nosorog
# жареные гвозди
# [[мясокомбинат имени путина №1|http://prostopleer.com/tracks/2418672JyDr]]
# Anal cunt
# СатанаКозёл
# Bloody Pie
# Заблеванный фужер с говном (СФСГ)
# автоматические удовлетворители
# БуБуБу (будешь бухать? буду!)
New age
# [[Боброежики|http://prostopleer.com/tracks/54046993pUy]]
# Дедушка Паяет Дисторшн
# БРИТЫЙ КАКТУС
# Смерть от чашки с чаем
# резиновый КРОЛЛИК
# Улиткообразная кошемятка
Авангард
# Ахиллесов Геморой
# [[ОБЛОМОК УНИТАЗА|http://prostopleer.com/tracks/5392843xBNK]]
# Ужасы Павлика
# Половые Органы
# Говорящая За*упа Иногда
# Сергей Эй
# ЧЁРНОЕ ОТРОДЬЕ ТРАВЫ
Андеграунд
# АвстралийскийУнитаз
# Перекрести Свой Юзерпик!
# БАСИСТ ПОД КЛЕЕМ
# Пыхающий полотеньчик
# Система Дима Шабаш
# Черные гон*оны
# Сломанный Енот
# Эррекция В Морге
# Я Е*у?
# Я ел суп и бегал по лесу
Металл
# Адский медведь
# А*альное волнение
# Выколотые Глазки
# Два мокрых
# КАЛЬNАЯ SЛЯКОТЬ
# Крошки Из Кармана Якубовича
# Мясокомбинат им. Путина №1
# Раздавленный Мозг
# Сонное Испражнение
Прогрессивный рок
# Бешенство Бегемотиков
# Веники и труппы
# Дрюсина Бабушка
# Догоним и Укусим
# Дыр Бул Щил
# Индикатор Рыбы
# Клаус Трофоб и Потусторонние Композиторы
# Куротруп
# Мангышлацкий Яйцептах
# МЕРТВЫЙ ТРАМВАЙ
# Месить детеныша
# Неспящий Пиздец
# НЕТ ПАПЫ БЕЗ РЕМНЯ
# Пень_Цветущий
# ПИВЗАПЛЫВ
# Подтяжки Сталина
# Проблемы Размножения Стеклопакетов
# пункелькоммандрнстнстнстнст(нст)
# Сибирский масту*батор
# Уроды на крыше
# Явная Хрень
# Яйценко
Рэп и хип-хоп
# Ёлкой по попе
# Мистер Сфинктер
# Пепендосов Алёша
# Синие_бобры
# Сукасдохни
# Теуникова Юлия и Волшебные Мужики
# трое в лодке не стесняясь собаки
# Трапеция дебила
# Чарли, очко и Широкие Штаны
Альтернатива
# АААА это же Zю!!!!!!!!!!!!
# Абонент Доступин
# [[Адаптация Пчёл|http://prostopleer.com/tracks/820662c1DM]]
# АНАЛЬНЫЙ ЗУД
# Атака Гризли
# Без Плавок
# Без Но'SKA
# БОЖЕ, КАК ГРУСТНА НАША РОССИЯ
# Букет Зябликов
# ВАСЯ-БАЗА
# Водители Киосков
# Вовин План & Е.б.ические Контрасты
# Водобачок
# ВОНЮЧИЕ ШАХМАТЫ
# Всмерная Власть Сумасшедших
# Время Срать
# Геморрой Крейз
# Гитлер среди Сталиных
# Грязный, потный, вонючий, губастый ниггер
# Говорящая Говядина
# Д.Н.О. (Да Название Отстойное)
# Дракула Дмитрий
# Ёжики смеются
# Заднепроходун
# Из кустов Валера валялся
# КАКА СЯРА
# Масштаб рожи
# Лысый Валенок
# Ненавижу хомяков
# Несвежие Космические Слесаря
# Ональный Зудъ
# Ошмётки Тани
# Панк Мой Дед!!!
# Полосатый Мух
# Поделись рассолом с Васей
# Потуги Жопочки (ПЖ)
# Похотливый Бабёр
# ПУСТЬ ПРИДУТ КЛОУНЫ
# Прохор и Пузо
# Розовые Плюшевые Пушистые Шовинисты
# Рваные Трусы
# Саша Заяц и Дорогой Друг
# Сексуальный Горшок
# Сквозняк и ползучие гады
# Сиреневые алкаши
# Сукорылые блядоносы
# ТЕНЬ ДОЛБО#БА
# Убитые Коровы
# ТУАЛЕТА НЕТ
# [[ЫШО? ЫШО!|http://prostopleer.com/tracks/9206142Xwj]]
# Тупой Барабан
# Чемодан Говна
# Шли бы Вы Все Нах
# Штопаней Гон#она ("ШГ")
# [[ЫТЫЖ МЫЖЕ|http://prostopleer.com/tracks/5010560OdlA]]
# [[Фабрика Переделок-пипод какая песня|http://prostopleer.com/tracks/309757GhBx]]
! 28 способов отдохнуть за 5 минут
Современная жизнь в большом городе имеет бешеный круговорот. Совещания, авралы, презентации, новые заказы, почта, твиттер, фейсбук — все надо успеть, нет времени, быстрее, быстрее, быстрее…
В результате, в конце дня вы валитесь без сил как выжатый лимон, проклиная свою несчастную жизнь. Между тем, уже давно доказано, что своевременный отдых совершенно не вредит, а даже наоборот — увеличивает нашу продуктивность. Для этого совсем не обязательно много времени или дорогое оборудование. Мы расскажем вам как расслабиться и отдохнуть буквально за 5 минут, где бы вы ни находились.
!! Питание
''Выпейте зеленый чай'': Травяной чай обладает отличным расслабляющим действием. Зеленый чай является источником L-теанина, который помогает избавиться от гнева. Вскипятите воду, заварите чай и сделайте успокаивающий глоток — это займет всего пару минут.
''Плитка шоколада'': Несколько кусочков черного шоколада поможет избежать стресс и повысит настроение. Темный шоколад регулирует уровни гормона стресса кортизола и стабилизирует обмен веществ, однако учтите, что злоупотреблять этим не желательно.
''Несколько ложек меда'': Этот продукт является не только природным увлажнителем кожи и антибиотиком, но и снижает возбуждение, то есть является отличным средством от тревоги и депрессии.
''Съешьте манго'': Возьмите тропический отпуск, не покидая своего рабочего места. Сочный, ароматный манго содержит вещество под названием линалоол, который помогает снизить уровень стресса. Не беспокойтесь о соке, текущем по рукам — это стоит того.
''Пожуйте жвачку'': Ментоловая, фруктовая или с любым вкусом, который вам нравится. Это на удивление простой и действенный способ победить стресс. Всего несколько минут жевания может уменьшить беспокойство и снизить уровень кортизола.
!! Внутренний мир
''Положите голову на подушку'': Есть дни, когда единственное, что нам действительно нужно — это хороший, долгий сон. К сожалению, если вы на работе, то это, как правило, невозможно. Но если у вас есть подушка, то вы уже на пути к релаксации. Попробуйте расслабиться следующим образом: положите голову на подушку на несколько минут и представьте, что она как губка высасывает все ваши заботы.
''Медитация'': Не нужно убегать в горы, всего несколько минут в спокойном тихом месте достаточно, чтобы пожинать плоды медитации. Есть разные техники медитации, чтобы почувствовать себя отдохнувшим и спокойным. Найдите удобное и тихое место, сконцентрируйтесь на своем дыхании и почувствуйте, что все тревоги начинают исчезать.
''Помним о дыхании'': Есть ли более простой способ расслабиться? Медленное, глубокое дыхание может помочь понизить артериальное давление и частоту сердечных сокращений. Для разнообразия, попробуйте дыхание пранаяма. Этот йогический метод включает в себя дыхание сначала через одну ноздрю, а затем другую, и применяется чтобы уменьшить беспокойство.
''Попробуйте прогрессивную релаксацию'': Напряжены? Используйте метод прогрессивной релаксации для того, чтобы научиться расслабляться в любых условиях. Этот метод состоит в поэтапном обучении выборочному напряжениию и расслаблению определенных видов мышц.
''Счет назад'': Да, этот метод известен всем и каждому, но он действительно работает. Попробуйте несколько раз посчитать в прямом и обратном направлении. Вашему мозгу будет не до волнений, если он занят цифрами.
''Закройте глаза'': Если вы можете закрыть глаза, то все в порядке. Просто отгородитесь от шума офиса или хаоса улицы за защитой плотно сомкнутых век. Это простой способ восстановить спокойствие и внимание.
!! Релаксация тела
''Сделайте себе массаж рук'': Разумеется, вы не сможете воспользоваться услугами профессионального массажиста на своем рабочем месте. Но сделать себе массаж рук вполне возможно. Особенно это будет полезно для людей, проводящих много времени перед клавиатурой. А если есть чуть больше пяти минут, то вполне можно сделать себе массаж шеи и даже спины.
''Попробуйте акупрессуру'': Акупрессура — это точечный массаж, обязанный своим рождением древней китайской медицине. Этот метод является менее болезненным и совершенно безопасным, при этом везде применимым и легко доступным для освоения любым человеком.
''Покатайтесь на теннисном мячике'': Скиньте обувь и покатайте ступней обычный теннисный мячик. Получится отличный импровизированный массаж ног. Особенно это приятно, если вам приходится носить обувь на высоком каблуке.
''Намочите холодной водой запястья'': Если вы чувствуете, что сейчас взорветесь, то пойдите в туалетную комнату и просто смочите себе холодной водой запястья и место за мочками ушей. Это поможет быстро успокоиться и снять напряжение.
!! Новая среда
''Побудьте один'': не каждый нуждается в лесной хижине, но пять минут одиночества поможет вам собраться с мыслями и очистить голову.
''Создайте себе зону Zen'': найдите или создайте себе специальное место для расслабления. Это место, где вас точно никто и ничто не побеспокоит. Возможно это будет удобное кресло в холле или уединенная скамейка во дворе — главное, чтобы оно ассоциировалось у вас с покоем и отдыхом.
''Посмотрите в окно'': Если вы постоянно смотрите в экран телевизора или монитор, то пятиминутное созерцание реальной жизни за окном может здорово очистить ваше сознание.
''Наведите порядок'': Окружающий вас ежедневный беспорядок может быть гораздо более сильной причиной для раздражения, чем вы думаете. Хаос на столе очень часто является отражением хаоса в вашей голове. Уберите все лишнее, наведите порядок в необходимом и вы увидите насколько благотворно это на вас подействует.
!! Упражнения
''Растяжка'': У вас при этом слове возникает образ спортивного зала и изящные гимнастки в шпагате? Это вовсе не обязательно — растянуться можно даже не вставая со своего рабочего места. Попробуйте хорошенько потянуться вверх и в стороны, различные вращения корпусом, наклоны или, например, этот комплекс.
''Йога'': Многие думают, что йога это очень сложно и не совсем подходит для шумного города. Однако это совсем не так. Йога представляет собой отличный способ взять под контроль не только свое тело, но и разум.
''Бег на месте'': Попробуйте бег на месте в течение нескольких минут, чтобы получить вброс эндорфинов в вашу кровь. Даже краткая физическая активность может помочь победить стресс и получить удовольствие.
!! Творчество
''Послушайте свою любимую песню'': Удивительно, какие превращения с нашим сознанием может вызывать музыка. Если вы расстроены или подавлены, если вам нужно собраться или расслабиться, то попробуйте послушать свою любимую песню и жизнь обернется совершенно другим боком.
''Танец'': Сложите вместе энергичные физические упражнения, мотивирующую веселую музыку и полет души. Такая гремучая смесь дает положительные результаты буквально за несколько минут.
''Ведите дневник'': Ведение дневника поможет вам не только легче пережить сложные моменты вашей жизни, но и вести более осмысленную жизнь. Излагайте события и эмоции на бумаге, будьте честны с собой и это поможет вам обрести спокойствие.
!! Запахи
''Попробуйте ароматерапию'': Это займет всего минуту, капните несколько капель лаванды, чайного дерева или другого эфирного масла на ладони и вдохните.Успокаивающие ароматы могут помочь оправиться от стресса и тревоги, стимулируя обонятельные рецепторы в носу, которые воздействуют на ту часть мозга, которая отвечает за эмоции.
''Понюхайте цитрусовые'': Апельсины и мандарины прочно ассоциируются с удовольствием и праздником. Запах цитрусовых может помочь нам расслабиться, повышая уровень связанного со стрессом гормона норадреналина.
''Понюхайте кофе'': Запах кофе бодрит и дарит хорошее настроение. Этот напиток имеет не только вкусный незабываемый аромат, но и много других полезных свойств.
[[28 способов отдохнуть за 5 минут|http://lifehacker.ru/2012/06/25/28-sposobov-otdokhnut-za-5-minut/]]
спрячем подальше пару ссылок
[[TiddlyWiki]]
[[WelcomeToTiddlyspot]]
[[GettingStarted]]
https://ru.wikibooks.org/wiki/Категория:Рецепты
крупы были промыты и засыпаны в одинаковом количестве в одинаковые стаканчики. Для чистоты эксперимента я залил их холодной водой, воду я просто подсалил.
Через 5 часов была готова Гречневая крупа!
Через 10 часов была готова Пшеничная крупа!
Через 15 часов была готова Кукурузная крупа!
Через 36 часов к употреблению был готов и Рис!
Дальше всё просто, если кроме крупы воды и соли ничего нет, можно употреблять прямо в таком виде, совсем скажу я вам не дурно получается, лучше чем чипсы из дерева или варёные черви если прижмёт. Но если у вас есть масло, то картина меняется кардинально!
Добавив масла душистого перца и немного подогрев на сковороде получается просто изумительное блюдо! На столько вкусное и питательное, что теперь каждый вечер перед сном я всё ещё засыпаю крупой стаканчик на утро!
Гречневая и пшеничные крупы приготавливаются на 100%. Гречка больше всего раздувается и радует горкой над кружкой к утру. Рис и кукуруза размягчаются на 90%, но с маслом получается очень вкусно! Если гречку или пшеничную крупу залить кипятком, то она будет готова уже через час!
Кроме всего прочего, при таком способе приготовления, остаются абсолютно все витамины и питательные вещества в крупах! И вкусно и полезно и калорийно! В походе можно просто растворять пол кубика Магги в кружке тёплой воды и засыпать туда крупу на ночь. Тоже очень вкусно, я уже попробовал!
Даже горох как оказалось, через сутки размегчается до состояния пригодного для употребления! В крайнем случае можно и в таком виде, но лучше подогретый с маслом! Сейчас жую - очень не дурно!
Я думаю сыроеды примерно так и питаются. А один мой знакомый готовил себе полезный обед на работу так - заливал с утра термос с крупой горячей водой. К обеду все было готово.
Одним из продуктов, которые описываются в данной статье, являются иглы Восточной Белой Сосны (сосны, растущие на просторах бывшего СССР ничем не хуже), которые очень богаты витамином C, необходимым для поддержания высокой жизнеспособности организма в дикой среде. Употребление сосновых игл или чайной настойки из игл является великолепным профилактическим и лечебным средством от цинги, которая может быть вызвана от нехватки витамина C в рационе питания.
Нарезал я картошечку толстыми колечками как положено, нарезал сальца, насадил всё это добро на зубочистки и просто вертикально поставил в тарелку. Естественно посолил - поперчил и главное посыпал приправой для мяса «с дымком»! А дальше кому как нравится, - можно в духовку можно в микроволновку можно в гриль!
!!!! Маффины шоколадные в микроволновке
Ингредиенты:
Из расчета на 2 порции.
# мука – 4 ст. ложки;
# сахар – 3 ст. ложки;
# какао – 2 ст. ложки;
# разрыхлитель – 0,5 ч. ложки;
# соль – щепотка;
# яйца – 1 шт.;
# молоко – 3 ст. ложки;
# рафинированное растительное масло – 1 ст. ложка;
# тертый шоколад – 2 ст. ложки.
Приготовление
Выбираем чашку, которую можно поставить в микроволновку, и прямо в ней замешиваем тесто. Все сухие составляющие всыпаем и хорошо вымешиваем. А жидкие ингредиенты соединяем в другой емкости, а потом добавляем их в чашку с сухими и сразу же вымешиваем. Долго месить тесто для маффинов нежелательно, иначе они получатся резиновыми. Отправляем чашку в микроволновку, выбираем максимальную мощность и время – 1 минута 30 секунд. По истечению этого времени маффин готов! Он отлично сочетается с молоком.
!!!! Рецепт черничных маффинов в микроволновке
Ингредиенты:
# мука – ¼ стакана;
# сахар – 1 ч. ложка;
# сливочное масло – ½ ст. ложки;
# корица – щепотка;
# молоко – 2 ст. ложки;
# разрыхлитель для теста – ¼ ч.ложки;
# черника – 2 ст. ложки.
Приготовление
В чашку высыпаем муку, сахар, корицу, разрыхлитель, хорошо перемешиваем, добавляем сливочное масло и растираем с ним сухую смесь. Потом добавляем молоко, размешиваем. Если смесь выходит слишком сухой, добавляем еще 1 столовую ложку молока. В самом конце добавляем чернику и очень аккуратно перемешиваем. При максимальной мощности выпе каем 90 секунд. Ну, вот и все, маффин с черникой в микроволновке готов.
!!!! Как испечь кекс в кружке в микроволновке?
1. Начнем с обычного кекса, для него нам потребуется кружка или стеклянная пиала, емкостью около 350-400 мл и следующие продукты.
Ингредиенты:
# мука – 4 ст. ложки;
# сахар – 4 ст. ложки (можно и меньше, если не хотите слишком сладкий кекс);
# какао – 2 ст. ложки;
# яйцо – 1 шт.;
# молоко – 3 ст. ложки;
# растительное масло – 3 ст. ложки;
# сода, гашённая уксусом или лимонной кислотой – 1/3 ч. ложки;
# сметана – 2 ст. ложки;
# шоколад, натертый на крупной терке – 3 ст. ложки;
# ванилин на кончике ножа.
Приготовление
Все продукты (кроме сметаны и шоколада) хорошенько перемешиваем, тесто будет не очень густым, поэтому его легко можно будет вылить в кружку. Ставим чашку с тестом в микроволновку 3,5 минуты на максимальную мощность. Готовый кекс достаем из кружки и даем чуть остыть. После смазываем сметаной и посыпаем тертым шоколадом.
2. Если дома вдруг не оказалось яиц, ничего страшного, без них кекс в микроволновке получится ничуть не хуже. Кстати, кекс можно делать, как в кружке, так и в специальных формочках, главное чтобы они подходили для использования в микроволновке.
Ингредиенты:
# простокваша (кефир или сметана) – 2 ст. ложки;
# мука – 1,5 ст. ложки;
# растительное масло – 1 ст. ложка;
# сахар – 2 ч. ложки;
# разрыхлитель – 1/2 ч. ложки;
# корица, ванилин.
Приготовление
Смешиваем масло, сахар, простоквашу, ванилин и корицу. В отдельной миске смешиваем муку с разрыхлителем и постепенно добавляем к остальным ингредиентам. Хорошо перемешиваем смесь после каждого добавления муки в смесь. Тесто должно быть по консистенции, как густая сметана. Выкладываем его в кружку или формочки и ставим в микроволновку на полную мощность, примерно на 1,5-2 минуты.
!!!! Кекс из нутеллы в микроволновке
Этот кекс не только вкусный, но и быстрый, ведь его приготовление в микроволновке занимает всего 3 минуты, и его также можно делать в кружке, игнорируя специальные формы.
Ингредиенты:
# мука – 4 ст. ложки;
# сахар – 1 ст. ложки;
# яйцо – 1 шт.;
# какао-порошок – 3 ст. ложки;
# нутелла – 3 ст. ложки;
# молоко – 3 ст. ложки;
# растительное масло – 3 ст. ложки.
Приготовление
Смешиваем все составляющие в большой кружке, взбиваем вилкой до однородности – обязательно следим, чтобы сахар полностью растворился. Ставим кружку в микроволновку на 1,5-3 минуты, точное время зависит от мощности печки. Готовый кекс остается только украсить растопленным шоколадом или шоколадной крошкой.
!!!! Рецепт творожного кекса в микроволновке
Этот кекс лучше выпекать в форме с пустой серединой, потому что тесто прогревается от краев к центру, и при выпеченных краях центр может остаться сырым.
Творожный кекс в микроволновке
Ингредиенты:
# творог – 250 грамм;
# манка – 250 грамм;
# сахар – 100 грамм;
# яйца – 2 шт.;
# мёд – 2 ст. ложки;
# сметана – 2 ст. ложки;
# сок лимона – 2 ст. ложки;
# сода 1/2 ч. ложки;
# кокосовая стружка – 1/2 стакана.
Приготовление
Все ингредиенты смешиваем, соду гасим лимонным соком, и выкладываем тесто в форму. Ставим кекс в микроволновку и держим при максимальной мощности 6 минут.
!!!! Рецепт бананового кекса в микроволновке
Этот кекс тоже требует приготовления в специальной форме.
Ингредиенты:
# бананы (очень спелые) – 3 шт.;
# яйца – 2 шт.;
# сахар – 1 стакан;
# мука – 1,5 стакана;
# молоко – 1/4 стакана;
# масло сливочное – 125 грамм;
# соль.
Приготовление
Бананы хорошо разминаем вилкой, добавляем взбитые яйца и сахар. Все хорошенько размешиваем в широкой миске. Растапливаем масло. Добавляем в смесь масло, молоко и муку, все еще раз хорошо вымешиваем. Выкладываем тесто в смазанную маслом форму. Ставим микроволновку на среднюю мощность и держим минут 15-17.
!!!! Как сварить макароны в микроволновке?
В глубокую стеклянную посудину наливаем воды по объему в 2 раза больше, чем занимают макароны. Ставим ее в печку и доводим до кипения. Затем солим, забрасываем макароны, вливаем ложку растительного масла, чтобы они не слиплись, и отправляем на 10 минут в микроволновку. После, как обычно, откидываем макарончики на дуршлаг и промываем холодной водой.
!!!! Что можно быстро приготовить в микроволновке?
Ни у кого не вызовет сомнений, что из всех блюд, которые можно приготовить в микроволновке, быстрее всего готовить различные полуфабрикаты. Из полуфабрикатов, это, конечно же, всеми любимые пельмени, котлеты и сосиски. Вот к сосискам и обратим свой взор. Нам понадобятся сосиски любимого производителя, кетчуп и приправа. Чистим сосиски от пленки, выкладываем на тарелку и посыпаем приправой или смазываем кетчупом, если любите поострее, не возбраняется сделать и то и другое. Каждую сосиску надрезаем вдоль и отправляем в микроволновку. Готовим на полной мощности 3-4 минуты. Вот и все, как говорится, кушать подано!
А что еще из быстрых блюд мы знаем? Сразу же на ум приходят бутерброды. Быстро и вкусно, а если их еще и горячими сделать, то вообще объедение. Но греть духовку из-за пары кусочков хлеба не хочется. А вот в микроволновке сделать два бутерброда, самое то. Берем колбасу, сыр и помидоры. Колбасу и помидоры режем кусочками, а сыр трем на терке (или режем тонкими ломтиками). На кусочек хлеба выкладываем колбасу и помидоры, а сверху посыпаем сыром. Кладем бутерброды на тарелку, а ее ставим в микроволновку. Готовим бутерброды 1-1,5 минуты при полной мощности.
Звучит странно, но в микроволновке, можно за короткий промежуток времени даже суп сварить, конечно, если вместо мяса взять колбасу. Режем в тарелку морковь и лук, добавляем 1 ст. ложку растительного масла и ставим на 3,5 минуты в печь, выставленную на полную мощность. Добавляем картошку и колбасу, нарезанную кубиками, перемешиваем и готовим при той же мощности 7 минут. Далее солим, добавляем специи, вермишель и кипяток. Отправляем в печь еще на 7 минут.
!!!! Пицца с сыром из слоеного теста
Как, вы никогда не пробовали приготовить пиццу из слоеного теста в микроволновке? Это же так просто, особенно если брать уже готовое слоеное тесто! Хотя его можно приготовить и дома. Сейчас мы рассмотрим, как приготовить слоеное тесто, и как из него сделать пиццу в микроволновке.
Ингредиенты для теста:
# мука – 1,5 стакана;
# вода – 0,5 стакана;
# маргарин сливочный – 100 г;
# сахар – 1 ч. ложка;
# соль – 0,5 ч. ложки.
Ингредиенты для начинки:
# томатный соус (кетчуп) – 3 ст. ложки;
# сыр – 200 г;
# перец черный, перец красный.
Приготовление
Рубим маргарин ножом, смешиваем руками с мукой в однородную крошку. В холодной воде разводим сахар и соль и добавляем к тесту. Вымешиваем все до гладкости и оставляем тесто на 2-6 часов в холодильнике. Потом тесто раскатываем тонким слоем, складываем 2 раза пополам. Повторяем эту процедуру 4-6 раз.
Полученное тесто разрезаем пополам, чтобы поместилось на форму. Выкладываем лист на блюдо и отправляем его в печь на 5-6 минут, при мощности 800 Вт.
Смешиваем кетчуп с перцем, чайной ложкой смазываем этой смесью готовый лист теста и посыпаем его сыром. При той же мощности отставляем пиццу в печке на 30-60 секунд для того, чтобы сыр расплавился.
Можно делать на слоеном тесте пиццу и с другими начинками. Только в этом случае необходимо будет на сырое тесто выложить всю начинку (кроме сыра) и запекать 8-10 минут на средней мощности. Потом посыпать пиццу тертым сыром и поставить на полную мощность на 3-4 минуты.
!!!! Пицца «Ассорти»
Кто-то любит пиццу с мясом, а кто-то без ума от грибов. Если возьметесь готовить эту пиццу в микроволновке, то рискуете угодить как мясоедам, так и любителям овощей.
Ингредиенты для теста:
# мука – 200 г;
# дрожжи – 75 г;
# молоко – 120 мл;
# вода – 120 мл;
# яйцо – 1 шт.;
# сахар – 60 г;
# растительное масло – 50 мл;
# соль.
Ингредиенты для начинки:
# колбаса – 300 г;
# грибы – 200 г;
# сыр – 150 г;
# томатный соус, майонез.
Приготовление
Разводим теплой водой тесто, насыпаем сахар и ставим в теплое место, минут на 5-10, чтобы дрожжи «распустились». А пока замешиваем остальные ингредиенты из «тестового» списка, после добавляем дрожжи и замешиваем тесто. Раскатываем тонкий корж. Смазываем его томатным соусом и майонезом. Сверху выкладываем нерезаную колбасу и соленые грибы, посыпаем тертым сыром. Выпекаем в микроволновке 4-6 минут при полной мощности.
!!!! Как приготовить гренки в микроволновке?
Рассмотрим приготовление сладких гренок к чаю. Для этого можно взять свежий хлеб, а можно и подсохший, вкус готового продукта при этом совершенно не пострадает.
Ингредиенты:
# белый хлеб или батон – 6 кусочков;
# сахар – 2 ст. ложки;
# молоко – 200 г;
# яйцо – 1 шт.
Приготовление
Молоко подогреваем до теплого состояния, вбиваем яйцо, добавляем сахар и размешиваем до полного растворения последнего. Обмакиваем кусочки батона в полученной смеси, при желании хлеб можно слегка посыпать сахаром. Укладываем все на тарелку и ставим в микроволновку на максимальную мощность. Через 5 минут у вас будут готовы аппетитные греночки.
!!!! Острые гренки с чесноком в микроволновке
Дети просто обожают покупные сухарики. Но, как известно, полезного в них очень мало. А ведь подобный продукт можно приготовить и дома, только пользы будет гораздо больше, да и получатся они вкуснее. Давайте посмотрим, как сделать острые гренки с чесноком и сыром в микроволновке. Приготовление займет минимум времени, и справится с ним любой школьник.
Ингредиенты:
# черствый хлеб для тостов – 6–8 ломтиков;
# чеснок – 2 зубчика;
# твердый сыр – 150 г;
# растительное масло – 50 г;
# вода – 1 ст. ложка;
# соль.
Приготовление
Режем хлеб небольшими кубиками. Сыр натираем на средней терке. В растительное масло добавляем выдавленный чеснок, солим.гренки с чесноком в микроволновке Кубики хлеба окунаем в смесь, обваливаем в сыре и ставим в микроволновку на несколько минут. Сначала хлеб нагреется, сыр расплавится, а потом начнет подсушиваться, поэтому важно не передержать. Такие гренки можно употреблять как самостоятельное блюдо, а можно дополнить ими супы и бульоны.
Таким образом, при приготовлении гренок вы можете экспериментировать со специями, добавлять ветчину и курицу, помидоры и зелень, а также различные соусы. При этом времени у вас будет затрачено минимум, а в результате получите вкусное угощение и просьбы приготовить еще.
!!!! Рецепт картофельных чипсов в микроволновке
Чипсы уже настолько вошли в нашу жизнь, что это лакомство даже в рекламе не нуждается. Все равно, проходя в магазине мимо стойки с чипсами, с трудом удерживаешься, чтобы не захватить пачку, а уж чего стоит детей от них оторвать! Так как же сделать домашние картофельные чипсы в микроволновке, чтобы порадовать себя и семью этими хрустяшками? В принципе ничего сложного, единственное неудобство приготовления чипсов это то что, в микроволновку должна попасть картошка, нарезанная очень тонкими ломтиками. Но эта проблема легко решается при помощи слайсера, специальной терки («мандолины») или обычной овощечистки. Еще нам понадобится картофель, соль и специи. Хотя и без соли и специй чипсы получаются очень вкусными.
Тщательно моем картофель. Чистим его, а если картошечка молодая, то можно этого и не делать. Нарезаем тонкими ломтиками картофель. Выкладываем картофельные кружочки в один слой на бумагу для выпечки, солим, посыпаем специями и отправляем в микроволновку. Время приготовления, скорее всего, придется подбирать индивидуально. Но при мощности 700 Вт, чипсы готовятся за 3-5 минут. Первое время лучше следить за чипсами, и как только их поверхность станет приобретать коричневый цвет, сразу же вынуть и переложить на бумажные полотенца. Если поторопиться, и вынуть картошку раньше, чипсы хрустеть не будут. Повторяем эту процедуру, пока не кончится нарезанный картофель.
!!!! Как приготовить в микроволновке рассыпчатый рис?
Что может быть вкуснее и красивее рассыпчатого риса, когда зернышко к зернышку? Вопрос риторический, а вот вопрос как приготовить такой рис в микроволновке ответа все-таки требует.
Для начала рис необходимо хорошенько промыть. Далее кладем его в специальную посуду для микроволновки, добавляем воды и соли. Закрываем крышкой и помещаем посудину в микроволновку. Готовим на полной мощности минут 17-18. За это время рис нужно успеть пару раз перемешать. После приготовления даем рису чуть-чуть, минут 5-10, отдохнуть под крышкой. После перемешиваем и наслаждаемся – рис промывать не нужно, он получился красивый, рассыпчатый и вкусный.
!!!! Как варить в микроволновке рис для суши?
Суши и роллы в последнее время стали невероятно популярным блюдом, и все больше людей отваживаются делать их дома. Главное требование к рису для суши – он должен слипаться, то есть рецепт для рассыпчатого риса нам однозначно не подходит. Поэтому чтобы суши были вкусными и держали форму, рис необходимо сварить правильно, как это сделать сейчас расскажем.
Промываем рис водой до тех пор, пока вода не станет прозрачной. Далее заливаем крупу холодной водой и оставляем минут на 30-45, за это время рис набухнет. Далее выкладываем рис в миску или кастрюлю для микроволновки, заливаем водой и отправляем в печь. Воды нужно брать в 1,5 раза больше чем риса. Готовиться 300 грамм риса минут 7 при полной мощности микроволновки. В процессе приготовления рис необходимо помешивать, через каждые 2-3 минуты. Готовый рис смешиваем с уксусом для суши, раскладываем на фольге и оставляем остывать.
!!!! Рецепт курицы с рисом в микроволновке
После того как технология варки риса в микроволновке освоена, можно приступить к приготовлению более сложных блюд, например, курицы с рисом, такого своеобразного варианта плова в микроволновке.
Перебираем и промываем стакан длинного риса. Кладем его в стеклянную двухлитровую кастрюлю и заливаем двумя стаканами воды. Ставим в микроволновку на среднюю мощность на 10 минут. В процессе приготовления нужно рис перемешать одни раз, через 5 минут после установки риса в печь.
Освобождаем от кожи два куриных окорочка, вырезаем все косточки и режем мясо на крупные куски. На растительном масле обжариваем (придется задействовать плиту) лук и две морковки, все крупно порезанное. Добавляем к овощам мясо и специи, обжариваем. Через 5-7 минут снимаем с огня и добавляем к рису. Все перемешиваем, досаливаем, если необходимо, кладем 2-3 зубчика чеснока и закрываем крышкой. Ставим кастрюлю в печку. Держим минут 15 при 80% мощности микроволновой печи. Пока плов готовится, не забываем периодически открывать печку и перемешивать рис. После печку выключаем, а рис оставляем «дойти» еще минут 10 под крышкой.
Как отварить рис в микроволновке
Если нет возможности обжарить мясо и овощи на сковородке, или хочется обойтись без жареной пищи, можно приготовить все в микроволновке. Сначала нужно отварить рис в микроволновке, как и в случае с обжариванием. Потом кладем подготовленное мясо в миску (стеклянную кастрюлю), поливаем маслом и накрываем крышкой. Ставим мясо в микроволновку. Держим его там 5 минут при полной мощности печи. Далее добавляем крупнонарезанные лук и морковь и 0,5 стакана воды. Ставим все в микроволновку и готовим при той же мощности 3 минуты. Далее смешиваем рис с мясом и овощами, добавляем специи, чесночок и ставим в печку на 15 минут. Микроволновку при этом выставляем на 50% мощности.
!!!! Плов из свинины в микроволновке
Ингредиенты:
# свинина – 0,6 кг;
# лук – 2 шт.;
# морковь (крупная) – 1 шт.;
# рис – 1,5 стакана;
# соль, перец, приправа для плова – по вкусу.
Приготовление
Подготавливаем продукты для приготовления плова в микроволновке: свинину моем, обсушиваем и нарезаем кусочками. Морковь трем на терке или нарезаем соломкой, тут уж как вам больше нравится. Лук нарезаем мелкими кубиками. Рис хорошо промываем под проточной водой не менее 2 минут. Мясо с луком обжариваем на растительном масле на сковороде. В принципе, это тоже можно сделать в микроволновке, но на сковороде выходит вкуснее. Затем, свинину вместе с зажаркой складываем в посуду, в которой мы будем готовить плов, солим, перчим по вкусу, добавляем специи для плова. Сверху выкладываем рис, а на него сырую морковь. Все это заливаем полутора стаканами кипятка и ставим в микроволновку на полную мощность минут на 20. Время может изменяться в зависимости от технических характеристик микроволновки. Но в любом случае через 20 минут достаем наш плов, перемешиваем и пробуем, если еще сыроват, то ставим еще минут на 5.
!!!! Рецепт плова с курицей в микроволновке
Плов можно готовить не только из свинины, из курицы тоже получается очень вкусно.
Ингредиенты:
# куриное филе – 700 г;
# рис – 250 г;
# куриный бульон – 300 г;
# сливочное масло – 60 г;
# соль, перец – по вкусу;
# чеснок – 4 зубчика.
Приготовление
Куриное филе промываем, обсушиваем салфеткой и нарезаем кубиками. Лук тоже нарезаем мелкими кубиками, а морковь трем на крупной терке. Разогреваем сливочное масло, в него выкладываем лук, рецепт плова в микроволновкенемного обжариваем и добавляем курицу, перемешиваем и еще немного обжариваем, соль и перец сыпем по вкусу. До готовности доводить не нужно. Складываем курицу с луком в емкость для микроволновки. Сверху кладем промытый рис, морковь и очищенные зубчики чеснока. Все это заливаем подсоленным куриным бульоном. Готовим в микроволновке около 30 минут. Затем достаем, чеснок убираем, а плов перемешиваем и пробуем на готовность. Если плов с курицей в микроволновке уже готов, подаем его к столу с салатом из свежих овощей.
В плов с курицей в микроволновке также можно добавить и грибы. Тогда их предварительно обжариваем с курицей и луком на сковороде. С грибами такой плов получится еще вкуснее.
!!!! Как приготовить гречку в микроволновке?
посуда для микроволновки должна быть в несколько раз больше по объему, чем количество насыпанной в нее сырой крупы;
отмеряйте сухую крупу и воду одной и той же чашкой в пропорции 1:2;
заливать гречку нужно кипяченой горячей водой;
солить гречку лучше готовой, или добавлять меньше соли, потому что ее очень легко пересолить;
доводить до кипения гречневую кашу можно на максимальной мощности вашей микроволновки;
сколько варить гречку в микроволновке после закипания подскажет опыт, обычно на мощности 600 Вт на это уходит 8 минут;
многие варят гречку на максимальной мощности в течение 7-8 минут;
некоторые варят гречку около получаса на режиме «Разморозка»;
если вы любите хорошо пропаренную гречку, то можно подержать ее после приготовления еще столько же, на мощности 200-300 Вт.
!!!! Гречка в микроволновке – рецепт
Ингредиенты:
# крупа гречневая – 1 ст.;
# вода – 2 ст.;
# масло сливочное – по вкусу;
# соль – по вкусу.
Как приготовить гречку в мирковолновке
Приготовление
Промываем крупу до прозрачной воды. В посуду для микроволновки добавляем промытую гречку и кипяченую воду, совсем немножко солим. Выбираем наиболее подходящий режим приготовления из описанных выше. Готовую кашу подсаливаем по вкусу и едим со сливочным маслом. Рассыпчатую гречневую кашу вкусно запивать молоком. Так же можно добавлять в нее тушенку или использовать, как гарнир к мясу, курице или рыбе.
!!!! Топим шоколад в микроволновке
Итак, миска и шоколад подобраны, осталось только разобраться, как растопить его в микроволновке. На самом деле, все очень просто. Ломаем нашу плитку на кусочки и отправляем в микроволновку, выставленную на 50% мощности. Время, которое нужно для растапливания определяется в зависимости от количества шоколада. Так, 30-50 грамм будут топиться около 1 минуты, 240 грамм – 3 минуты, а 450-500 грамм шоколада потребует 3,5 минуты. Чтобы шоколадная масса получилась однородной, необходимо следить за равномерным прогревом шоколада, а потому если в микроволновке нет поворотного круга, нужно будет поворачивать миску вручную через равные промежутки времени, не забывая перемешивать шоколад. Если вы все сделали правильно, то чаша, в которой вы топили шоколад останется прохладной. Если же миска горячая, то это не очень хорошо для шоколада, он может потерять свои свойства и использовать его для украшения тортов и кексов будет невозможно. Правда, в этом случае есть шанс все исправить – перегретый шоколад нужно сразу же перелить в другую прохладную миску и добавить туда кусочки не расплавленного шоколада и не забыть постоянно перемешивать эту массу, пока она не станет однородной и блестящей.
!!!! Горячий шоколад в микроволновке
Как только вы сумеете растопить шоколад в микроволновке правильно, так обязательно захочется найти еще какие-либо способы применения этой массе, кроме украшения пирожных. Например, можно приготовить горячий шоколад, добавив к этой массе равное количество молока, перемешав до однородности и снова отправив в микроволновую печь до закипания. Тут важно поймать момент, когда шоколад уже начал увеличиваться в объеме, но не начал выкипать. Именно в это время нужно чашку с шоколадом достать из микроволновки и подавать к столу, украсив взбитыми сливками и измельченными орехами. Ну, а если вы относитесь к фанатам этого напитка, то попробуйте приготовить горячий шоколад со специями в микроволновке по следующему рецепту.Горячий шоколад в микроволновке
Ингредиенты (на 4-6 порций):
# молоко – 5 стакан;
# сахар – 1/2 стакана;
# шоколад - 30 грамм;
# корица – 1 ч. ложка;
# мускатный орех – 1/4 ч. ложки;
# гвоздика – 1 щепотка.
Приготовление
Смешиваем 1 стакан молока, шоколад, сахар и пряности в стеклянной посуде. Ставим миску, не накрывая, в микроволновку на 6-9 минут. В течение этого времени, миску необходимо дважды достать из печки и хорошенько перемешать смесь. После аккуратно доливаем в смесь 4 стакана молока и снова ставим в микроволновку. На этот раз на 9-13 минут. Обязательно следим, чтобы шоколад не убежал. Готовый напиток разливаем по чашкам, украшаем цедрой апельсина (лимона) и подаем к столу.
!!!! Манная каша в микроволновке
Ингредиенты:
# манная крупа – 2 ст. ложки;
# сахар – 1 ст. ложка;
# молоко – 1 стакан;
# сливочное масло – 20 г;
# соль – щепотка.
Приготовление
В глубокую миску высыпаем манную крупу, добавляем сахар, соль и заливаем все холодным молоком и перемешиваем. Ставим тарелку в микроволновку, выставляем время – 1,5 минуты (при мощности 750 Вт). После этого вынимаем, кладем сливочное масло, размешиваем и ставим в микроволновку еще минуты на 1,5.
!!!! Гречневая каша в микроволновке
Ингредиенты:
# гречневая крупа – 1 стакан;
# кипяток 2 стакана;
# соль – щепотка.
Приготовление
Промытую крупу кладем в кастрюлю для микроволновки, добавляем щепотку соли и заливаем кипятком, сразу же ставим в микроволновку на максимальную мощность до закипания. После этого снимаем с кастрюльки крышку, перемешиваем крупу, выставляем мощность 600 Вт и готовим 4 минуты, после этого снова перемешиваем и еще включаем на 4-5 минут. Теперь проверяем, если воды нет, то гречка готова.
!!!! Рисовая каша в микроволновке
Ингредиенты:
# рис – 1 стакан;
# вода – 2 стакана;
# рисовая каша в микроволновке
# молоко – 1 стакан;
# сливочное масло – 30 г;
# соль, сахар – по вкусу.
Приготовление
В промытый рис вливаем воду и добавляем немного соли. Накрываем посуду крышкой и ставим в микроволновку на 20 минут при максимальной мощности. При этом каждые 4-5 минут желательно перемешивать кашу. Когда вода полностью выпарилась, добавляем молоко и сахар по вкусу. После этого включаем микроволновку еще на 4 минуты. В готовую кашу добавляем сливочное масло.
!!!! Варка пельменей в микроволновке
Когда мы начинаем думать над тем, как приготовить пельмени в микроволновке, неважно варить или жарить, кроме самой технологии нас интересует время приготовления. Необходимо учитывать, что совершенно точный ответ на вопрос, сколько варить пельмени в микроволновке, получить невозможно. Время приготовления зависит и от мощности печки и от количества пельменей, и от их качества. Так что минутки, на которые нужно оставлять пельмешки в микроволновке, здесь даются приблизительные, а вам придется первый раз внимательно следить за блюдом, чтобы оно получилось вкусным.
Итак, как же следует варить пельмени в микроволновке? Берем глубокую тарелку и наливаем туда холодную воду. Чистим морковку, лук, режем и кладем в воду. Туда же отправляем лавровый лист, соль и перец. Тарелку накрываем крышкой (или фольгой) ставим в микроволновку, печку выставляем на полную мощность и доводим до кипения – это примерно 4 минуты. Далее в горячую воду кладем пельмени 5-10 штук, больше нежелательно, могут не все провариться, и оставляем в печке при той же мощности минуты на две. Готовые пельмешки достаем из бульона (хотя можно есть и с ним), заправляем майонезом, посыпаем зеленью и желаем себе и домашним приятного аппетита.
!!!! Рецепт овсяного печенья в микроволновке
Ингредиенты:
# хлопья овсяные быстрого приготовления – 1 ст.;
# масло сливочное – 1,5 ст. ложки;
# мука – 1 ст. ложка;
# яйцо – 1 шт.;
# сахар – 2 ст. ложки.
Приготовление
Овсяные хлопья заливаем растопленным сливочным маслом, перемешиваем и вбиваем яйцо. Добавляем муку и, если хлопья были не сладкими, сахар. Вымешиваем «тесто» и влажными руками, чтобы не липло к пальцам, формируем плоские овсяные печеньки. Выкладываем их на застеленную пергаментом плоскую тарелку и отправляем на 9 минут в микроволновку на мощности всего 300 Вт. На последних минутах печеньки начнут шипеть и пениться. Останавливаем процесс, переворачиваем печенье и подрумяниваем его в микроволновке с другой стороны. Это полезное лакомство покажется особенно вкусным, если запивать его молочком!
!!!! Быстрое песочное печенье в микроволновке
Ингредиенты:
# мука – 1 ст.;
# желток яичный – 1 шт.;
# сахар – 2 ст. ложки;
# орехи грецкие – 1/2 ст.;
# шоколад горький – 50 г.
Приготовление
Размягченное масло растираем с сахаром. Добавляем желток, перемешиваем и постепенно вводим просеянную муку. Полученное тесто раскатываем на присыпанной мукой разделочной доске в пласт толщиной около 2 мм. Равномерно присыпаем рублеными орехами, слегка вдавливая их в тесто, пройдясь сверху скалкой. Нарезаем ножом небольшие квадратные печеньки (можно вырезать с помощью специальных формочек) и раскладываем их по периметру формы для запекания. Важно! – в центр формы печенье не кладем – подгорит! Отправляем в микроволновку всего на пару минут при мощности 800 Вт.
Тем временем поломанный на кусочки шоколад складываем в небольшой полиэтиленовый пакетик с замком и растапливаем на водяной бане. Затем отрезаем уголок и поливаем горячим шоколадом готовое печенье. Терпеливо ждем, пока глазурь минут 20 будет застывать в холодильнике. Подаем к столу с чаем или кофе.
!!!! Как сделать кокосовое печенье в микроволновке?
Ингредиенты:
# стружка кокосовая – 150 г;
# сахар – 150 г;
# яйца – 2 шт.
Приготовление
Рецепт кокосового печенья в микроволновке очень прост! Сахар взбиваем с яйцами до полного его растворения, добавляем кокосовую стружку и вымешиваем тесто. Оно должно получиться достаточно густым, поэтому при необходимости добавляем еще стружки. Влажными руками формируем печеньки в виде пирамидок и размещаем их в форму для запекания. Всего 5 минут в микроволновке на режиме «Гриль», и хрустящее снаружи, но мягкое и слегка влажное внутри кокосовое печенье готово!
!!!! Вкусный ржаной хлеб в хлебопечке
Ингредиенты:
# теплая вода – 250 г;
# мука пшеничная – 250 г;
# мука ржаная – 150 г;
# растительное масло – 20 мл;
# соль – 1 ч. ложка;
# сахар – 1 ст. ложка;
# сухие дрожжи – 1 ч. ложка.
Приготовление
В емкость хлебопечки выкладываем продукты в таком порядке: теплая вода, сахар, соль, растительное масло, пшеничная мука вперемешку со ржаной, сухие дрожжи. Устанавливаем контейнер в хлебопечь, выбираем программу «Французский хлеб», устанавливаем вес хлеба – 750 г и корочку – среднюю. Нажимаем кнопку «Старт». Так как вес готового изделия небольшой, то в процессе нужно следить, какое получается тесто, чтобы хлеб вышел более ровным, тесто можно подровнять руками. А когда пойдет процесс нагрева и подъема теста – крышку хлебопечи лучше не открывать. Когда вкусный ржаной хлеб в хлебопечке будет готов, аккуратно вынимаем его и перекладываем на решетку, чтобы он остыл.
!!!! Бездрожжевой ржаной хлеб в хлебопечке
Ингредиенты:
# вода;
# сухое молоко – 1,5 ст. ложки;
# сахар – 2 ст. ложки;
# соль – щепотка;
# растительное масло – 1,5 ст. ложки;
# ржаная мука – 1,4 стакана;
# пшеничная мука – 2 стакана;
# душистый перец – 1 ч. ложка;
# тмин – 1 ст. ложка;
# закваска – 9 ст. ложек.
Приготовление
В хлебопечку выкладываем все ингредиенты, здесь нужно обратить внимание на рекомендации по порядку закладки продуктов, которые дает производитель. Устанавливаем программу «Выпечка ржаного хлеба», выбираем вес – 900 г, цвет корочки – средняя. Ржаной хлеб поднимается медленно, иногда даже лишь в начале процесса выпечки.
После звукового сигнала, оповещающего об окончании процесса приготовления, вы получите ароматный домашний пшенично-ржаной хлеб, приготовленный в вашей хлебопечке с минимальными усилиями с вашей стороны.
!!!! Рецепт бездрожжевого хлеба в хлебопечке
Выпечка бездрожжевого хлеба в хлебопечке не такое хлопотное занятие, как его приготовление в духовке, главное – приготовить бездрожжевую закваску.
Ингредиенты:
Для закваски:
# зерна пшеницы для проращивания – горсть;
# молоко – 1 ст.;
# мука – столько, чтобы молоко превратилось в негустую сметану.
Для хлеба:
# вода – 210 мл;
# мука пшеничная - 290 г;
# соль – 1 ч. ложка;
# мука ржаная – 70 г;
# пшеничная закваска – 3 ст. ложки и ¼ ст.
Приготовление
Начните с закваски. Молоко перелейте в чистую банку и оставьте киснуть. На сколько это затянется, зависит от температуры в вашей квартире, рассчитывайте примерно 3-5 дней. Зерна пшеницы положите во влажную марлю и периодически смачивайте. Уже на вторые сутки должны появиться ростки.
Промойте зерна и положите их в скисшее молоко. Добавьте муку, чтобы получилась негустая сметана. Накройте банку марлей и поставьте на сутки кваситься. На второй день, когда появятся пузырьки, долейте 1/3 ст. воды или кислого молока и муки, чтобы закваска стала по консистенции, как густая сметана. Опять накройте банку и оставьте еще на день.
На третий день добавьте еще муки, чтобы консистенция опять стала как густая сметана, и накройте марлей. Проделывайте тоже самое еще несколько дней, а потом готовую закваску накройте крышкой и храните в холодильнике.
Для хлеба смешайте в хлебопечке воду, закваску и соль. Просейте к ним оба вида муки, выберите программу «Свежее тесто», пусть тесто перемешается дважды, и выключайте прибор. Оставьте тесто подойти на 10 часов, а потом выставьте программу «Выпекание» и пеките хлеб 2 часа.
Бездрожжевой ржаной хлеб в хлебопечке Панасоник
Стоит отметить, что сделать такой хлеб можно в любой модели хлебопечки. Основным в приготовлении бездрожжевого ржаного хлеба в хлебопечке является ржаная бездрожжевая закваска, которую вы сможете приготовить дома.
Ингредиенты:
Для закваски:
# ржаная мука – 4-5 ст. ложек;
# кипяченая вода – 200 мл.
Для хлеба:
# ржаная закваска – 400 мл;
# пшеничная мука – 150 г;
# ржаная обдирная мука – 300 г;
# теплая кипяченая вода – 200 мл;
# соль – 1 ч. ложка.
Приготовление
Как же сделать хлеб без дрожжей в хлебопечке? Приготовьте закваску. Для этого налейте в чистую банку воду комнатной температуры, а потом постепенно добавьте туда муку. Закваска должна получиться консистенции густой сметаны. Накройте банку тканью или марлей и поставьте настаиваться на сутки, но не забывайте увлажнять ткань.
Через сутки смесь превратится в закваску и в ней появятся пузырьки. Тогда долейте еще 100 мл воды и насыпьте муки, чтобы по густоте она опять получилась как сметана. Снова накройте тканью и оставьте на сутки. Спустя указанное время еще раз насыпьте ржаную муку в закваску и накройте тканью. Потом снова добавьте пару ложек муки и в этот раз закройте банку крышкой и поставьте готовую закваску в холодильник.
Рецепт бездрожжевого хлеба в хлебопечке
Когда соберетесь печь хлеб, уложите в хлебопечку закваску, потом воду, соль, просеянную пшеничную и ржаную муку. Выставьте программу «Свежее тесто» и когда прибор будет замешивать тесто, помогайте ему деревянной лопаткой. После того, как хлебопечка закончит замес теста, достаньте мешалку и позвольте прибору закончить программу.
После этого выключите хлебопечку и оставьте тесто подходить на 2-3 часа. Когда оно увеличится в два раза, хлеб готов к выпеканию. Выставьте программу «Выпечка» и готовьте его в течение примерно 1,5 часов (время может варьироваться в зависимости от модели). После того, как хлеб будет готов, положите его на доску, накройте полотенцем и дайте остыть.
!!!! Сладкий хлеб с изюмом
Ингредиенты:
# мука – 450 г;
# яйца – 3 шт.;
# дрожжи сухие – 2,5 ч. ложки;
# сахар – 6 ст. ложек;
# соль – 0,5 ч ложки;
# ваниль – 1 пакетик;
# растительное масло – 6 ст. ложек;
# молоко – 100 мл;
# изюм – 100 г.
Приготовление
На дно ведерка хлебопечки высыпьте сухие дрожжи. Сверху просейте муку, затем по очереди добавьте оставшиеся ингредиенты. Самым последним вылейте теплое молоко. Поставьте хлебопечку в режим «Выпечка с изюмом», средняя корочка. Когда хлеб будет готов, можете немного присыпать его сахарной пудрой.
!!!! Рецепт сладкого хлеба с корицей для хлебопечки
Ингредиенты:
# мука – 350 г;
# молоко – 250 г;
# сахар – 1,5 ст. ложки;
# соли – 0,5 ч. ложки;
# растительное масло – 50 г;
# сухие дрожжи – 1 ч. ложка.
Для начинки:
# корица – 1 ч. ложка;
# сахар – 2 ст. ложки.
Приготовление
На дно ведерка высыпьте сахар, сухие дрожжи и соль. Затем положите муку и залейте теплым молоком с растительным маслом. Поставьте в режим «Тесто» на полтора часа. У вас должен получиться упругий колобок, не прилипающий к стенкам. Готовое тесто разделите на 4 одинаковых куска и раскатайте на небольшие лепешки диаметром примерно 15-20 см. Сахар смешайте с корицей. Каждую лепешку посыпьте корицей с сахаром и сверните в рулет. Выложите ваши рулеты в ведерко без мешалки, так чтоб они были швами друг к другу. У вас должно получиться 2 рулета на двух других. Оставьте тесто на минут 40, чтоб поднялось, а затем выпекайте в режиме «выпечка» 50 минут.
!!!! Банановый сладкий хлеб – рецепт
Этот сладких хлеб, приготовленный в хлебопечке, идеально подойдет к вечернему чаю.
Ингредиенты:
# мука – 300 г;
# молоко – 70 мл;
# сливочное масло – 100 г;
# жидкий мед – 200 г;
# коричневый сахар – 50 г;
# яйца – 2 шт.;
# сметана – 100 г;
# чищеные бананы – 200 г;
# разрыхлитель – 2 ч. ложки;
# сода – 1 ч. ложка;
# корица – 0,5 ч. ложки.
Приготовление
В кастрюльке растопите масло и мед, перемешайте, остудите и вылейте в контейнер. Бананы раздавите вилкой до однородности и выложите к маслу с медом. Вылейте туда же молоко, яйца и сметану. Муку смешайте с разрыхлителем, содой, корицей и высыпьте в контейнер. Выпекайте 75-80 минут.
Для более разнообразного вкуса можете добавить измельченные грецкие орехи. В конце так же можете посыпать хлеб сахарной пудрой.
Рецепт пиццы в хлебопечке
Ингредиенты:
мука – 400 г;
сухие дрожжи – 1 ст. ложка;
теплая вода – 250 мл;
масло оливковое – 40 мл;
соль – щепотка.
Приготовление
Муку просеиваем, это важно, так как для пиццы нам нужно воздушное тесто. Высыпаем ее в контейнер хлебопечки, делаем углубление, всыпаем сухие дрожжи, растительное масло и соль. После этого вливаем теплую воду. Устанавливаем контейнер в хлебопечку. Если в вашей модели есть режим, который позволяет готовить тесто для пиццы, то выбираем его. Если такового нет, то выбираем режим приготовления обычного теста. Включаем программу и после звукового сигнала, тесто готово. Теперь его можно раскатывать, выкладывать начинку, которая вам больше нравится, и готовить пиццу по обычному рецепту.
!!!! Пицца в хлебопечке
Ингредиенты:
# мука – 3 стакана;
# вода – 250 г;
# дрожжи сухие – 1,5 ч. ложки;
# оливковое масло – 1 ст. ложка;
# сахар – 1,5 ст. ложки;
# орегано сухой – 0,5 ч. ложки;
# соль – 1 ч. ложка.
Приготовление
В ведерко хлебопечки вливаем воду и оливковое масло. Теперь добавляем соль и сахар. После этого всыпаем просеянную муку и сухие дрожжи таким образом, чтобы они не касались воды и соли. Орегано также можно добавить сейчас, а можно практически в самом конце, после звукового сигнала, который оповещает о последнем замесе. Когда дрожжевое тесто для пиццы будет готово, его можно раскатать и выложить начинку. Выпекаем при температуре 180 градусов минут 20.
!!!! Рецепт теста для пиццы без дрожжей для хлебопечки
Ингредиенты:
# яйца – 1 шт.;
# молоко – 120 мл;
# сметана – 2 ст. ложки;
# сливочное масло – 100 г;
# сода – 0,5 ч. ложки;
# мука – 170 г.
Приготовление
Сначала соду соединяем со сметаной. Растапливаем сливочное масло. Яйцо соединяем с молоком. Добавляем сметану с содой, перемешиваем, вливаем растопленное сливочное масло и снова размешиваем. После этого добавляем просеянную муку. Включаем программу «Бездрожжевое тесто». После того, как прозвучит звуковой сигнал, тесто готово. Оно отлично подходит для тоненькой основы под пиццу.
#[[filozavr.com|http://filozavr.com]]
#[[savefrom.net|http://en.savefrom.net/]]
#[[xenra.com|http://www.xenra.com/]]
#[[clipconverter.cc|http://www.clipconverter.cc/]]
#[[savedeo.com|http://savedeo.com/]]
вставить между «www.» и «youtube» всего две буквы ss (как в примере — http://www.ssyoutube.com/watch?v=vQP83dfMbWU) и нажать на Enter
http://lib.ru/BORHES/sad.txt
http://harumambu.ru/
http://gidroponika.com/content/category/5/33/126/#axzz25sQmuLN4
http://phpcmsdev.imcms.ru/gimnastika-dlja-glaz
http://www.ibm.com/developerworks/ru/library/x-android/
http://ibash.org.ru/
http://www.pwdatabase.com/ru
http://www.watch-mobile.ru/model274.php
http://mm3.tumblr.com/
[[фильмы]]
# Волчица - аниме