Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
[[6749 Mitchell Ave on Gundaker|http://www.cbgundaker.com/search/advanced/detail.jsp?mls_num=753890&type=res]]
This house could easily benefit from a garage from the alley. You'd need a Building Permit (more info in HomeImprovement). Also, it's possible that a garage with serious south facing roof could be great for SmallScaleSolar.
10/18/07 - We made an offer on the house. It was listed at 290,000 and we offered 260. After a day, the sellers countered with an offer of 283. They didn't move very much. It's interesting to note that they went exactly 1/4 of the way. I think in a down market we could probably get away with moving 30% and they could move 60%
[[www.aclaratech.com|http://www.aclaratech.com]] is our website
[[This|http://bsp.aclaratech.com/ProductMarketingIntelligence/]] is the Product Management Wiki
IntercallInstructions
[[External Webmail Site|https://mail.aclaratech.com]]
Username = PLS\dsteidtmann
HomeAreaNetwork
DCSICompetitors
DCSICustomers
I LOVE my Mac. It's a MacBook. Totally Killer
[[Apple|http://www.apple.com]] is the place to go. Although [[Mac Rumors|http://www.macrumors.com]] makes for some really interesting reading.
[[Apple Discussions|http://discussions.apple.com/index.jspa]] - The Ultimate source for answers about Mac questions
[[Apple Downloads|http://www.apple.com/downloads/macosx/]] - A good source for downloadable software
Also on my mac I use FinalCutStudio, Cinema4D, [[Shake]], [[Photoshop]].
* Block_arrow_1_way
* Block_arrow 2 way
* Block arrow 2 forks
* Block arrow 2 combined
* Block arrow bottleneck
* Block arrow twisted (processing)
* Transformer pads 3
* Transformer pads 4, 5, 6
* T
My new camera bag needs to hold:
DSLR Gear: 40D, 70-200, 17-85, 2x tele, 50 1.4, spare batt, charger, CF cards, Photo rights pamphlet, lens cloths, polarizing filters, tripod, mini-tripod, monopod,
Video Gear:
Mac n Gear:
Misc Gear:
| !SLR Gear| !Notes |
|40D | With the 70-200 lens installed |
|70-200 f/2.8L USM IS | installed on the 40D body |
|17-85 lens | eventually a faster lens would be good |
|2x teleconverter | future|
|Charger ||
|Spare Battery ||
|Filters | Polarizing|
|CF Media ||
|CF Reader ||
|CF Reader Cable ||
|Tripod ||
|Tripod head | |
|!Video Gear | !Notes |
|HV30 | |
|HV30 Charger | |
|HV30 Wide Angle lens adapter ||
|Capture Firewire Cable ||
|Tapes ||
|External Drive ||
|Blank DVDs |for archiving footage|
|Mic |Rode Video Mic |
|Lavalier Mic ||
|Fluid tripod head ||
[[Gundaker.com|http://www.gundaker.com]]
[[6749MitchellAve]]
We actually ended up buying another property. It's 3935 Flad (I think)
ComputerVendors
My Charter Broadband cable modem local IP is [[192.168.100.1|http://192.168.100.1/]] Username and password are both "user". The model is Ambit. The Charter customer service number is 888-438-2427
We did switch to SBCGlobal high speed internet.
Their contact number for new service is 1-877-722-3755
Our phone number is 314-588-7601
My Netgear router is a Netgear MIMO G. The IP and login information is on the bottom
[[192.168.1.1|http://192.168.1.1]] User = "admin" password = "password"
I have my own website at www.grassrootsdigital.net. GrassrootsDigital
Here are some places to do a speed test: [[Speedtest|http://www.speedtest.net/]]
[[KolorWheel|https://www.koloroo.com/?page_id=7]] is a cool looking iPod app
Not surprisingly lots and lots of things in the computer world are CoolTechnology including MultiTouch.
[[Dell|http://www.dell.com]] [[Sony|http:/www.sonystyle.com]] [[Apple|http://www.apple.com]]
First off there's [[Tiddly Wiki|http://www.tiddlywiki.com/]]
Here's some cool visualization stuff from [[Digg Labs|http://labs.digg.com/]]. It might be a great
MultiTouch is cool as hell.
SilverSpringNetworks is here [[www.silverspringnetworks.com|http://www.silverspringnetworks.com]]
[[Cellnet]] is here [[www.cellnet.com|http://www.cellnet.com]]
HuntTechnologies is here [[www.hunttechnologies.com|http://www.hunttechnologies.com]]
[[Itron]] is here [[www.itron.com|http://www.itron.com/pages/index.asp]]
CooperPower is here [[www.cooperpower.com|http://www.cooperpower.com]]
ImWorkingOn
WebCycle
WikiToDo
I have about 1.4 million email addresses. Here is the information about them.
| Address | Incoming Info | Outgoing Info |h
|david@g-ink.com|mail.g-ink.com<br>login: david@g-ink.com<br>password: ex... |mail.g-ink.com<br>port 25<br>no authentication|
|david@g-ink.com<br>from home on DGNET| Same as above |smtp.att.yahoo.com<br>login: david.steidtmann@att.net<br>password: la5<br>port 25 |
|david.steidtmann@gmail.com|pop.gmail.com<br>login: david.steidtmann@gmail.com<br>password: net password |smtp.gmail.com<br>login: david.steidtmann@gmail.com<br>password: net password<br>port: 25<br>Use SSL: yes |
|davids@chtrade.com|chtrade.com<br>login: davids<br>password: Compos + FLname + versi |chtrade.com<br>port 587 |
|dsteidtmann@twacs.com| | |
|davidsteidtmann@yahoo.com| | |
You can embed an image from a local file or a URL. What's particularly cool is that you can use a "title" as a tooltip that appears when you hover the mouse over the image.
{{{
[img[title|filename]]
[img[filename]]
[img[title|filename][link]]
[img[filename][link]]
}}}
[img[Overlay|overlay2.jpg]]
<<exportTiddlers inline>>
/***
|''Name:''|ExportTiddlersPlugin|
|''Source:''|http://www.TiddlyTools.com/#ExportTiddlersPlugin|
|''Author:''|Eric Shulman - ELS Design Studios|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|''~CoreVersion:''|2.0.10|
To facilitate iPhone loading from the server copy, this tiddler has been deactivated. To reactivate, add the tag "systemConfig" at the front of the tags list.
When many people edit copies of the same TiddlyWiki document, the ability to easily copy and share these changes so they can then be redistributed to the entire group is very important. This ability is also very useful when moving your own tiddlers from document to document (e.g., when upgrading to the latest version of TiddlyWiki, or 'pre-loading' your favorite stylesheets into a new 'empty' TiddlyWiki document.)
ExportTiddlersPlugin let you ''select and extract tiddlers from your ~TiddlyWiki documents and save them to a local file'' or a remote server (requires installation of compatible server-side scripting, still under development...). An interactive control panel lets you specify a destination, and then select which tiddlers to export. A convenient 'selection filter' helps you pick desired tiddlers by specifying a combination of modification dates, tags, or tiddler text to be matched or excluded. ''Tiddler data can be output as ~TiddlyWiki "storeArea ~DIVs" that can be imported into another ~TiddlyWiki or as ~RSS-compatible XML that can be published for RSS syndication.''
!!!!!Inline interface (live)
<<<
<<exportTiddlers inline>>
<<<
!!!!!Usage
<<<
Optional "special tiddlers" used by this plugin:
* SiteUrl^^
URL for official server-published version of document being viewed (used in XML export)
default: //none//^^
* SiteHost^^
host name/address for remote server (e.g., "www.server.com" or "192.168.1.27")
default: //none//^^
* SitePost^^
remote path/filename for submitting changes (e.g., "/cgi-bin/submit.cgi")
default: //none//^^
* SiteParams^^
arguments (if any) for server-side receiving script
default: //none//^^
* SiteNotify^^
addresses (if any) for sending automatic server-side email notices
default: //none//^^
* SiteID^^
username or other authorization identifier for login-controlled access to remote server
default: current TiddlyWiki username (e.g., "YourName")^^
* SiteDate^^
stored date/time stamp for most recent published version of document
default: current document.modified value (i.e., the 'file date')^^
<<<
!!!!!Example
<<<
<<exportTiddlers>>
<<<
!!!!!Installation
<<<
Import (or copy/paste) the following tiddlers into your document:
''ExportTiddlersPlugin'' (tagged with <<tag systemConfig>>)
create/edit ''SideBarOptions'': (sidebar menu items)
^^Add {{{<<exportTiddlers>>}}} macro^^
<<<
!!!!!Revision History
<<<
''2006.10.12 [2.2.3]'' in exportDIVFooter(), write POST-BODY-START/END markers for compatibility with TW2.1 core file format. Based on report from Jose Gonzalez.
''2006.05.11 [2.2.2]''
in createExportPanel, removed call to addNotification() to no longer auto-refresh the list every time a tiddler is changed. Instead, call refreshExportList(0) only when the panel is first rendered and each time it is made visible. Prevents unneeded feedback messages from being displayed and increases overall document performance, since the listbox is no longer being updated each time a tiddler is saved.
''2006.05.02 [2.2.1]''
Use displayMessage() to show number of selected tiddlers instead of updating listbox 'header' item after each selection. Prevents awkward 'scroll-to-top' behavior that made multi-select via ctrl-click nearly impossible. Reported by Paul Reiber.
''2006.04.29 [2.2.0]''
New features: "Notes" are free-form text that is inserted in the header of a TWDIV export file. When exporting to a server, the "notify" checkbox indicates that server-side script processing should send an email message when the export file is stored on the server. Comma-separated addresses may be typed in, or pre-defined in the SiteNotify tiddler.
''2006.03.29 [2.1.3]''
added calls to convertUnicodeToUTF8() for generated output, so it better handles international characters.
''2006.02.12 [2.1.2]''
added var to unintended global 'tags' in matchTags(). Avoids FF1501 bug when filtering by tags. (based on report by TedPavlic)
''2006.02.04 [2.1.1]''
added var to variables that were unintentionally global. Avoids FireFox 1.5.0.1 crash bug when referencing global variables
''2006.02.02 [2.1.0]''
Added support for output of complete TiddlyWiki documents. Let's you use ExportTiddlers to generate 'starter' documents from selected tiddlers.
''2006.01.21 [2.0.1]''
Defer initial panel creation and only register a notification function when panel first is created
in saveChanges 'hijack', create panel as needed. Note: if window.event is not available to identify the click location, the export panel is positioned relative to the 'tiddlerDisplay' element of the TW document.
''2005.12.27 [2.0.0]''
Update for TW2.0
Defer initial panel creation and only register a notification function when panel first is created
''2005.12.24 [0.9.5]''
Minor adjustments to CSS to force correct link colors regardless of TW stylesheet selection
''2005.12.16 [0.9.4]''
Dynamically create/remove exportPanel as needed to ensure only one instance of interface elements exists, even if there are multiple instances of macro embedding.
''2005.11.15 [0.9.2]''
added non-Ajax post function to bypass javascript security restrictions on cross-domain I/O. Moved AJAX functions to separate tiddler (no longer needed here). Generalized HTTP server to support UnaWiki servers
''2005.11.08 [0.9.1]''
moved HTML, CSS and control initialization into exportInit() function and call from macro handler instead of at load time. This allows exportPanel to be placed within the same containing element as the "export tiddlers" button, so that relative positioning can be achieved.
''2005.10.28 [0.9.0]''
added 'select opened tiddlers' feature
Based on a suggestion by Geoff Slocock
''2005.10.24 [0.8.3]''
Corrected hijack of 'save changes' when using http:
''2005.10.18 [0.8.2]''
added AJAX functions
''2005.10.18 [0.8.1]''
Corrected timezone handling when filtering for date ranges.
Improved error checking/reporting for invalid filter values and filters that don't match any tiddlers.
Exporting localfile-to-localfile is working for IE and FF
Exporting server-to-localfile works in IE (after ActiveX warnings), but has security issues in FF
Cross-domain exporting (localfile/server-to-server) is under development
Cookies to remember filter settings - coming soon
More style tweaks, minor text changes and some assorted layout cleanup.
''2005.10.17 [0.8.0]''
First pre-release.
''2005.10.16 [0.7.0]''
filter by tags
''2005.10.15 [0.6.0]''
filter by title/text
''2005.10.14 [0.5.0]''
export to local file (DIV or XML)
''2005.10.14 [0.4.0]''
filter by start/end date
''2005.10.13 [0.3.0]''
panel interaction
''2005.10.11 [0.2.0]''
panel layout
''2005.10.10 [0.1.0]''
code framework
''2005.10.09 [0.0.0]''
development started
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
<<<
!!!!!Code
***/
// // +++[version]
//{{{
version.extensions.exportTiddlers = {major: 2, minor: 2, revision: 3, date: new Date(2006,10,12)};
//}}}
// //===
// // +++[macro handler]
//{{{
config.macros.exportTiddlers = {
label: "export tiddlers",
prompt: "Copy selected tiddlers to an export document",
datetimefmt: "0MM/0DD/YYYY 0hh:0mm:0ss" // for "filter date/time" edit fields
};
config.macros.exportTiddlers.handler = function(place,macroName,params) {
if (params[0]!="inline")
{ createTiddlyButton(place,this.label,this.prompt,onClickExportMenu); return; }
var panel=createExportPanel(place);
panel.style.position="static";
panel.style.display="block";
}
function createExportPanel(place) {
var panel=document.getElementById("exportPanel");
if (panel) { panel.parentNode.removeChild(panel); }
setStylesheet(config.macros.exportTiddlers.css,"exportTiddlers");
panel=createTiddlyElement(place,"span","exportPanel",null,null)
panel.innerHTML=config.macros.exportTiddlers.html;
exportShowPanel(document.location.protocol);
exportInitFilter();
refreshExportList(0);
return panel;
}
function onClickExportMenu(e)
{
if (!e) var e = window.event;
var parent=resolveTarget(e).parentNode;
var panel = document.getElementById("exportPanel");
if (panel==undefined || panel.parentNode!=parent)
panel=createExportPanel(parent);
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" ;
if (panel.style.display!="none") refreshExportList(0); // update list when panel is made visible
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
return(false);
}
//}}}
// //===
// // +++[Hijack saveChanges] diverts 'notFileUrlError' to display export control panel instead
//{{{
window.coreSaveChanges=window.saveChanges;
window.saveChanges = function()
{
if (document.location.protocol=="file:") { coreSaveChanges(); return; }
var e = window.event;
var parent=e?resolveTarget(e).parentNode:document.body;
var panel = document.getElementById("exportPanel");
if (panel==undefined || panel.parentNode!=parent) panel=createExportPanel(parent);
exportShowPanel(document.location.protocol);
if (parent==document.body) { panel.style.left="30%"; panel.style.top="30%"; }
panel.style.display = "block" ;
}
//}}}
// //===
// // +++[IE needs explicit scoping] for functions called by browser events
//{{{
window.onClickExportMenu=onClickExportMenu;
window.onClickExportButton=onClickExportButton;
window.exportShowPanel=exportShowPanel;
window.exportShowFilterFields=exportShowFilterFields;
window.refreshExportList=refreshExportList;
//}}}
// //===
// // +++[CSS] for floating export control panel
//{{{
config.macros.exportTiddlers.css = '\
#exportPanel {\
display: none; position:absolute; z-index:12; width:35em; right:105%; top:6em;\
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;\
}\
#exportPanel a, #exportPanel td a { color:#009; display:inline; margin:0px; padding:1px; }\
#exportPanel table { width:100%; border:0px; padding:0px; margin:0px; font-size:8pt; line-height:110%; background:transparent; }\
#exportPanel tr { border:0px;padding:0px;margin:0px; background:transparent; }\
#exportPanel td { color:#000; border:0px;padding:0px;margin:0px; background:transparent; }\
#exportPanel select { width:98%;margin:0px;font-size:8pt;line-height:110%;}\
#exportPanel input { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%; }\
#exportPanel textarea { width:98%;padding:0px;margin:0px;overflow:auto;font-size:8pt; }\
#exportPanel .box { border:1px solid black; padding:3px; margin-bottom:5px; background:#f8f8f8; -moz-border-radius:5px; }\
#exportPanel .topline { border-top:2px solid black; padding-top:3px; margin-bottom:5px; }\
#exportPanel .rad { width:auto;border:0 }\
#exportPanel .chk { width:auto;border:0 }\
#exportPanel .btn { width:auto; }\
#exportPanel .btn1 { width:98%; }\
#exportPanel .btn2 { width:48%; }\
#exportPanel .btn3 { width:32%; }\
#exportPanel .btn4 { width:24%; }\
#exportPanel .btn5 { width:19%; }\
';
//}}}
// //===
// // +++[HTML] for export control panel interface
//{{{
config.macros.exportTiddlers.html = '\
<!-- output target and format -->\
<table cellpadding="0" cellspacing="0"><tr><td width=50%>\
export to\
<select size=1 id="exportTo" onchange="exportShowPanel(this.value);">\
<option value="file:" SELECTED>this computer</option>\
<option value="http:">web server (http)</option>\
<option value="https:">secure web server (https)</option>\
<option value="ftp:">file server (ftp)</option>\
</select>\
</td><td width=50%>\
output format\
<select id="exportFormat" size=1>\
<option value="DIV">TiddlyWiki export file</option>\
<option value="TW">TiddlyWiki document</option>\
<option value="XML">RSS feed (XML)</option>\
</select>\
</td></tr></table>\
\
<!-- export to local file -->\
<div id="exportLocalPanel" style="margin-top:5px;">\
local path/filename<br>\
<input type="file" id="exportFilename" size=57 style="width:100%"><br>\
</div><!--panel-->\
\
<!-- export to http server -->\
<div id="exportHTTPPanel" style="display:none;margin-top:5px;">\
<table><tr><td align=left>\
server location, script, and parameters<br>\
</td><td align=right>\
<input type="checkbox" class="chk" id="exportNotify"\
onClick="document.getElementById(\'exportSetNotifyPanel\').style.display=this.checked?\'block\':\'none\'"> notify\
</td></tr></table>\
<input type="text" id="exportHTTPServerURL" onfocus="this.select()"><br>\
<div id="exportSetNotifyPanel" style="display:none">\
send email notices to<br>\
<input type="text" id="exportNotifyTo" onfocus="this.select()"><br>\
</div>\
</div><!--panel-->\
\
<!-- export to ftp server -->\
<div id="exportFTPPanel" style="display:none;margin-top:5px;">\
<table cellpadding="0" cellspacing="0" width="32%"><tr valign="top"><td>\
host server<br>\
<input type="text" id="exportFTPHost" onfocus="this.select()"><br>\
</td><td width="32%">\
username<br>\
<input type="text" id="exportFTPID" onfocus="this.select()"><br>\
</td><td width="32%">\
password<br>\
<input type="password" id="exportFTPPW" onfocus="this.select()"><br>\
</td></tr></table>\
FTP path/filename<br>\
<input type="text" id="exportFTPFilename" onfocus="this.select()"><br>\
</div><!--panel-->\
\
<!-- notes -->\
notes<br>\
<textarea id="exportNotes" rows=3 cols=40 style="height:4em;margin-bottom:5px;" onfocus="this.select()"></textarea> \
\
<!-- list of tiddlers -->\
<table><tr align="left"><td>\
select:\
<a href="JavaScript:;" id="exportSelectAll"\
onclick="onClickExportButton(this)" title="select all tiddlers">\
all </a>\
<a href="JavaScript:;" id="exportSelectChanges"\
onclick="onClickExportButton(this)" title="select tiddlers changed since last save">\
changes </a> \
<a href="JavaScript:;" id="exportSelectOpened"\
onclick="onClickExportButton(this)" title="select tiddlers currently being displayed">\
opened </a> \
<a href="JavaScript:;" id="exportToggleFilter"\
onclick="onClickExportButton(this)" title="show/hide selection filter">\
filter </a> \
</td><td align="right">\
<a href="JavaScript:;" id="exportListSmaller"\
onclick="onClickExportButton(this)" title="reduce list size">\
– </a>\
<a href="JavaScript:;" id="exportListLarger"\
onclick="onClickExportButton(this)" title="increase list size">\
+ </a>\
</td></tr></table>\
<select id="exportList" multiple size="10" style="margin-bottom:5px;"\
onchange="refreshExportList(this.selectedIndex)">\
</select><br>\
</div><!--box-->\
\
<!-- selection filter -->\
<div id="exportFilterPanel" style="display:none">\
<table><tr align="left"><td>\
selection filter\
</td><td align="right">\
<a href="JavaScript:;" id="exportHideFilter"\
onclick="onClickExportButton(this)" title="hide selection filter">hide</a>\
</td></tr></table>\
<div class="box">\
<input type="checkbox" class="chk" id="exportFilterStart" value="1"\
onclick="exportShowFilterFields(this)"> starting date/time<br>\
<table cellpadding="0" cellspacing="0"><tr valign="center"><td width="50%">\
<select size=1 id="exportFilterStartBy" onchange="exportShowFilterFields(this);">\
<option value="0">today</option>\
<option value="1">yesterday</option>\
<option value="7">a week ago</option>\
<option value="30">a month ago</option>\
<option value="site">SiteDate</option>\
<option value="file">file date</option>\
<option value="other">other (mm/dd/yyyy hh:mm)</option>\
</select>\
</td><td width="50%">\
<input type="text" id="exportStartDate" onfocus="this.select()"\
onchange="document.getElementById(\'exportFilterStartBy\').value=\'other\';">\
</td></tr></table>\
<input type="checkbox" class="chk" id="exportFilterEnd" value="1"\
onclick="exportShowFilterFields(this)"> ending date/time<br>\
<table cellpadding="0" cellspacing="0"><tr valign="center"><td width="50%">\
<select size=1 id="exportFilterEndBy" onchange="exportShowFilterFields(this);">\
<option value="0">today</option>\
<option value="1">yesterday</option>\
<option value="7">a week ago</option>\
<option value="30">a month ago</option>\
<option value="site">SiteDate</option>\
<option value="file">file date</option>\
<option value="other">other (mm/dd/yyyy hh:mm)</option>\
</select>\
</td><td width="50%">\
<input type="text" id="exportEndDate" onfocus="this.select()"\
onchange="document.getElementById(\'exportFilterEndBy\').value=\'other\';">\
</td></tr></table>\
<input type="checkbox" class="chk" id=exportFilterTags value="1"\
onclick="exportShowFilterFields(this)"> match tags<br>\
<input type="text" id="exportTags" onfocus="this.select()">\
<input type="checkbox" class="chk" id=exportFilterText value="1"\
onclick="exportShowFilterFields(this)"> match titles/tiddler text<br>\
<input type="text" id="exportText" onfocus="this.select()">\
</div> <!--box-->\
</div> <!--panel-->\
\
<!-- action buttons -->\
<div style="text-align:center">\
<input type=button class="btn3" onclick="onClickExportButton(this)"\
id="exportFilter" value="apply filter">\
<input type=button class="btn3" onclick="onClickExportButton(this)"\
id="exportStart" value="export tiddlers">\
<input type=button class="btn3" onclick="onClickExportButton(this)"\
id="exportClose" value="close">\
</div><!--center-->\
';
//}}}
// //===
// // +++[initialize interface]>
// // +++[exportShowPanel(which)]
//{{{
function exportShowPanel(which) {
var index=0; var panel='exportLocalPanel';
switch (which) {
case 'file:':
case undefined:
index=0; panel='exportLocalPanel'; break;
case 'http:':
index=1; panel='exportHTTPPanel'; break;
case 'https:':
index=2; panel='exportHTTPPanel'; break;
case 'ftp:':
index=3; panel='exportFTPPanel'; break;
default:
alert("Sorry, export to "+which+" is not yet available");
break;
}
exportInitPanel(which);
document.getElementById('exportTo').selectedIndex=index;
document.getElementById('exportLocalPanel').style.display='none';
document.getElementById('exportHTTPPanel').style.display='none';
document.getElementById('exportFTPPanel').style.display='none';
document.getElementById(panel).style.display='block';
}
//}}}
// //===
// // +++[exportInitPanel(which)]
//{{{
function exportInitPanel(which) {
switch (which) {
case "file:": // LOCAL EXPORT PANEL: file/path:
// ** no init - security issues in IE **
break;
case "http:": // WEB EXPORT PANEL
case "https:": // SECURE WEB EXPORT PANEL
// url
if (store.tiddlerExists("unawiki_download")) {
var theURL=store.getTiddlerText("unawiki_download");
theURL=theURL.replace(/\[\[download\|/,'').replace(/\]\]/,'');
var title=(store.tiddlerExists("unawiki_host"))?"unawiki_host":"SiteHost";
var theHost=store.getTiddlerText(title);
if (!theHost || !theHost.length) theHost=document.location.host;
if (!theHost || !theHost.length) theHost=title;
}
// server script/params
var title=(store.tiddlerExists("unawiki_host"))?"unawiki_host":"SiteHost";
var theHost=store.getTiddlerText(title);
if (!theHost || !theHost.length) theHost=document.location.host;
if (!theHost || !theHost.length) theHost=title;
// get POST
var title=(store.tiddlerExists("unawiki_post"))?"unawiki_post":"SitePost";
var thePost=store.getTiddlerText(title);
if (!thePost || !thePost.length) thePost="/"+title;
// get PARAMS
var title=(store.tiddlerExists("unawiki_params"))?"unawiki_params":"SiteParams";
var theParams=store.getTiddlerText(title);
if (!theParams|| !theParams.length) theParams=title;
var serverURL = which+"//"+theHost+thePost+"?"+theParams;
document.getElementById("exportHTTPServerURL").value=serverURL;
// get NOTIFY
var theAddresses=store.getTiddlerText("SiteNotify");
if (!theAddresses|| !theAddresses.length) theAddresses="SiteNotify";
document.getElementById("exportNotifyTo").value=theAddresses;
break;
case "ftp:": // FTP EXPORT PANEL
// host
var siteHost=store.getTiddlerText("SiteHost");
if (!siteHost || !siteHost.length) siteHost=document.location.host;
if (!siteHost || !siteHost.length) siteHost="SiteHost";
document.getElementById("exportFTPHost").value=siteHost;
// username
var siteID=store.getTiddlerText("SiteID");
if (!siteID || !siteID.length) siteID=config.options.txtUserName;
document.getElementById("exportFTPID").value=siteID;
// password
document.getElementById("exportFTPPW").value="";
// file/path
document.getElementById("exportFTPFilename").value="";
break;
}
}
//}}}
// //===
// // +++[exportInitFilter()]
//{{{
function exportInitFilter() {
// start date
document.getElementById("exportFilterStart").checked=false;
document.getElementById("exportStartDate").value="";
// end date
document.getElementById("exportFilterEnd").checked=false;
document.getElementById("exportEndDate").value="";
// tags
document.getElementById("exportFilterTags").checked=false;
document.getElementById("exportTags").value="";
// text
document.getElementById("exportFilterText").checked=false;
document.getElementById("exportText").value="";
// show/hide filter input fields
exportShowFilterFields();
}
//}}}
// //===
// // +++[exportShowFilterFields(which)]
//{{{
function exportShowFilterFields(which) {
var show;
show=document.getElementById('exportFilterStart').checked;
document.getElementById('exportFilterStartBy').style.display=show?"block":"none";
document.getElementById('exportStartDate').style.display=show?"block":"none";
var val=document.getElementById('exportFilterStartBy').value;
document.getElementById('exportStartDate').value
=getFilterDate(val,'exportStartDate').formatString(config.macros.exportTiddlers.datetimefmt);
if (which && (which.id=='exportFilterStartBy') && (val=='other'))
document.getElementById('exportStartDate').focus();
show=document.getElementById('exportFilterEnd').checked;
document.getElementById('exportFilterEndBy').style.display=show?"block":"none";
document.getElementById('exportEndDate').style.display=show?"block":"none";
var val=document.getElementById('exportFilterEndBy').value;
document.getElementById('exportEndDate').value
=getFilterDate(val,'exportEndDate').formatString(config.macros.exportTiddlers.datetimefmt);
if (which && (which.id=='exportFilterEndBy') && (val=='other'))
document.getElementById('exportEndDate').focus();
show=document.getElementById('exportFilterTags').checked;
document.getElementById('exportTags').style.display=show?"block":"none";
show=document.getElementById('exportFilterText').checked;
document.getElementById('exportText').style.display=show?"block":"none";
}
//}}}
// //===
// //===
// // +++[onClickExportButton(which): control interactions]
//{{{
function onClickExportButton(which)
{
// DEBUG alert(which.id);
var theList=document.getElementById('exportList'); if (!theList) return;
var count = 0;
var total = store.getTiddlers('title').length;
switch (which.id)
{
case 'exportFilter':
count=filterExportList();
var panel=document.getElementById('exportFilterPanel');
if (count==-1) { panel.style.display='block'; break; }
document.getElementById("exportStart").disabled=(count==0);
clearMessage(); displayMessage("filtered "+formatExportMessage(count,total));
if (count==0) { alert("No tiddlers were selected"); panel.style.display='block'; }
break;
case 'exportStart':
exportTiddlers();
break;
case 'exportHideFilter':
case 'exportToggleFilter':
var panel=document.getElementById('exportFilterPanel')
panel.style.display=(panel.style.display=='block')?'none':'block';
break;
case 'exportSelectChanges':
var lastmod=new Date(document.lastModified);
for (var t = 0; t < theList.options.length; t++) {
if (theList.options[t].value=="") continue;
var tiddler=store.getTiddler(theList.options[t].value); if (!tiddler) continue;
theList.options[t].selected=(tiddler.modified>lastmod);
count += (tiddler.modified>lastmod)?1:0;
}
document.getElementById("exportStart").disabled=(count==0);
clearMessage(); displayMessage(formatExportMessage(count,total));
if (count==0) alert("There are no unsaved changes");
break;
case 'exportSelectAll':
for (var t = 0; t < theList.options.length; t++) {
if (theList.options[t].value=="") continue;
theList.options[t].selected=true;
count += 1;
}
document.getElementById("exportStart").disabled=(count==0);
clearMessage(); displayMessage(formatExportMessage(count,count));
break;
case 'exportSelectOpened':
for (var t = 0; t < theList.options.length; t++) theList.options[t].selected=false;
var tiddlerDisplay = document.getElementById("tiddlerDisplay");
for (var t=0;t<tiddlerDisplay.childNodes.length;t++) {
var tiddler=tiddlerDisplay.childNodes[t].id.substr(7);
for (var i = 0; i < theList.options.length; i++) {
if (theList.options[i].value!=tiddler) continue;
theList.options[i].selected=true; count++; break;
}
}
document.getElementById("exportStart").disabled=(count==0);
clearMessage(); displayMessage(formatExportMessage(count,total));
if (count==0) alert("There are no tiddlers currently opened");
break;
case 'exportListSmaller': // decrease current listbox size
var min=5;
theList.size-=(theList.size>min)?1:0;
break;
case 'exportListLarger': // increase current listbox size
var max=(theList.options.length>25)?theList.options.length:25;
theList.size+=(theList.size<max)?1:0;
break;
case 'exportClose':
document.getElementById('exportPanel').style.display='none';
break;
}
}
//}}}
// //===
// // +++[list display]
//{{{
function formatExportMessage(count,total)
{
var txt=total+' tiddler'+((total!=1)?'s':'')+" - ";
txt += (count==0)?"none":(count==total)?"all":count;
txt += " selected for export";
return txt;
}
function refreshExportList(selectedIndex)
{
var theList = document.getElementById("exportList");
var sort;
if (!theList) return;
// get the sort order
if (!selectedIndex) selectedIndex=0;
if (selectedIndex==0) sort='modified';
if (selectedIndex==1) sort='title';
if (selectedIndex==2) sort='modified';
if (selectedIndex==3) sort='modifier';
// get the alphasorted list of tiddlers
var tiddlers = store.getTiddlers('title');
// unselect headings and count number of tiddlers actually selected
var count=0;
for (var i=0; i<theList.options.length; i++) {
if (theList.options[i].value=="") theList.options[i].selected=false;
count+=theList.options[i].selected?1:0;
}
// disable "export" button if no tiddlers selected
document.getElementById("exportStart").disabled=(count==0);
// update listbox heading to show selection count
if (theList.options.length) { clearMessage(); displayMessage(formatExportMessage(count,tiddlers.length)); }
// if a [command] item, reload list... otherwise, no further refresh needed
if (selectedIndex>3) return;
// clear current list contents
while (theList.length > 0) { theList.options[0] = null; }
// add heading and control items to list
var i=0;
var indent=String.fromCharCode(160)+String.fromCharCode(160);
theList.options[i++]=
new Option(tiddlers.length+" tiddlers in document", "",false,false);
theList.options[i++]=
new Option(((sort=="title" )?">":indent)+' [by title]', "",false,false);
theList.options[i++]=
new Option(((sort=="modified")?">":indent)+' [by date]', "",false,false);
theList.options[i++]=
new Option(((sort=="modifier")?">":indent)+' [by author]', "",false,false);
// output the tiddler list
switch(sort)
{
case "title":
for(var t = 0; t < tiddlers.length; t++)
theList.options[i++] = new Option(tiddlers[t].title,tiddlers[t].title,false,false);
break;
case "modifier":
case "modified":
var tiddlers = store.getTiddlers(sort);
// sort descending for newest date first
tiddlers.sort(function (a,b) {if(a[sort] == b[sort]) return(0); else return (a[sort] > b[sort]) ? -1 : +1; });
var lastSection = "";
for(var t = 0; t < tiddlers.length; t++)
{
var tiddler = tiddlers[t];
var theSection = "";
if (sort=="modified") theSection=tiddler.modified.toLocaleDateString();
if (sort=="modifier") theSection=tiddler.modifier;
if (theSection != lastSection)
{
theList.options[i++] = new Option(theSection,"",false,false);
lastSection = theSection;
}
theList.options[i++] = new Option(indent+indent+tiddler.title,tiddler.title,false,false);
}
break;
}
theList.selectedIndex=selectedIndex; // select current control item
}
//}}}
// //===
// // +++[list filtering]
//{{{
function getFilterDate(val,id)
{
var result=0;
switch (val) {
case 'site':
var timestamp=store.getTiddlerText("SiteDate");
if (!timestamp) timestamp=document.lastModified;
result=new Date(timestamp);
break;
case 'file':
result=new Date(document.lastModified);
break;
case 'other':
result=new Date(document.getElementById(id).value);
break;
default: // today=0, yesterday=1, one week=7, two weeks=14, a month=31
var now=new Date(); var tz=now.getTimezoneOffset()*60000; now-=tz;
var oneday=86400000;
if (id=='exportStartDate')
result=new Date((Math.floor(now/oneday)-val)*oneday+tz);
else
result=new Date((Math.floor(now/oneday)-val+1)*oneday+tz-1);
break;
}
// DEBUG alert('getFilterDate('+val+','+id+')=='+result+"\nnow="+now);
return result;
}
function filterExportList()
{
var theList = document.getElementById("exportList"); if (!theList) return -1;
var filterStart=document.getElementById("exportFilterStart").checked;
var val=document.getElementById("exportFilterStartBy").value;
var startDate=getFilterDate(val,'exportStartDate');
var filterEnd=document.getElementById("exportFilterEnd").checked;
var val=document.getElementById("exportFilterEndBy").value;
var endDate=getFilterDate(val,'exportEndDate');
var filterTags=document.getElementById("exportFilterTags").checked;
var tags=document.getElementById("exportTags").value;
var filterText=document.getElementById("exportFilterText").checked;
var text=document.getElementById("exportText").value;
if (!(filterStart||filterEnd||filterTags||filterText)) {
alert("Please set the selection filter");
document.getElementById('exportFilterPanel').style.display="block";
return -1;
}
if (filterStart&&filterEnd&&(startDate>endDate)) {
var msg="starting date/time:\n"
msg+=startDate.toLocaleString()+"\n";
msg+="is later than ending date/time:\n"
msg+=endDate.toLocaleString()
alert(msg);
return -1;
}
// scan list and select tiddlers that match all applicable criteria
var total=0;
var count=0;
for (var i=0; i<theList.options.length; i++) {
// get item, skip non-tiddler list items (section headings)
var opt=theList.options[i]; if (opt.value=="") continue;
// get tiddler, skip missing tiddlers (this should NOT happen)
var tiddler=store.getTiddler(opt.value); if (!tiddler) continue;
var sel=true;
if ( (filterStart && tiddler.modified<startDate)
|| (filterEnd && tiddler.modified>endDate)
|| (filterTags && !matchTags(tiddler,tags))
|| (filterText && (tiddler.text.indexOf(text)==-1) && (tiddler.title.indexOf(text)==-1)))
sel=false;
opt.selected=sel;
count+=sel?1:0;
total++;
}
return count;
}
//}}}
//{{{
function matchTags(tiddler,cond)
{
if (!cond||!cond.trim().length) return false;
// build a regex of all tags as a big-old regex that
// OR's the tags together (tag1|tag2|tag3...) in length order
var tgs = store.getTags();
if ( tgs.length == 0 ) return results ;
var tags = tgs.sort( function(a,b){return (a[0].length<b[0].length)-(a[0].length>b[0].length);});
var exp = "(" + tags.join("|") + ")" ;
exp = exp.replace( /(,[\d]+)/g, "" ) ;
var regex = new RegExp( exp, "ig" );
// build a string such that an expression that looks like this: tag1 AND tag2 OR NOT tag3
// turns into : /tag1/.test(...) && /tag2/.test(...) || ! /tag2/.test(...)
cond = cond.replace( regex, "/$1\\|/.test(tiddlerTags)" );
cond = cond.replace( /\sand\s/ig, " && " ) ;
cond = cond.replace( /\sor\s/ig, " || " ) ;
cond = cond.replace( /\s?not\s/ig, " ! " ) ;
// if a boolean uses a tag that doesn't exist - it will get left alone
// (we only turn existing tags into actual tests).
// replace anything that wasn't found as a tag, AND, OR, or NOT with the string "false"
// if the tag doesn't exist then /tag/.test(...) will always return false.
cond = cond.replace( /(\s|^)+[^\/\|&!][^\s]*/g, "false" ) ;
// make a string of the tags in the tiddler and eval the 'cond' string against that string
// if it's TRUE then the tiddler qualifies!
var tiddlerTags = (tiddler.tags?tiddler.tags.join("|"):"")+"|" ;
try { if ( eval( cond ) ) return true; }
catch( e ) { displayMessage("Error in tag filter '" + e + "'" ); }
return false;
}
//}}}
// //===
// // +++[output data formatting]>
// // +++[exportHeader(format)]
//{{{
function exportHeader(format)
{
switch (format) {
case "TW": return exportTWHeader();
case "DIV": return exportDIVHeader();
case "XML": return exportXMLHeader();
}
}
//}}}
// //===
// // +++[exportFooter(format)]
//{{{
function exportFooter(format)
{
switch (format) {
case "TW": return exportDIVFooter();
case "DIV": return exportDIVFooter();
case "XML": return exportXMLFooter();
}
}
//}}}
// //===
// // +++[exportTWHeader()]
//{{{
function exportTWHeader()
{
// Get the URL of the document
var originalPath = document.location.href;
// Check we were loaded from a file URL
if(originalPath.substr(0,5) != "file:")
{ alert(config.messages.notFileUrlError); return; }
// Remove any location part of the URL
var hashPos = originalPath.indexOf("#"); if(hashPos != -1) originalPath = originalPath.substr(0,hashPos);
// Convert to a native file format assuming
// "file:///x:/path/path/path..." - pc local file --> "x:\path\path\path..."
// "file://///server/share/path/path/path..." - FireFox pc network file --> "\\server\share\path\path\path..."
// "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."
// "file://server/share/path/path/path..." - pc network file --> "\\server\share\path\path\path..."
var localPath;
if(originalPath.charAt(9) == ":") // pc local file
localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\\");
else if(originalPath.indexOf("file://///") == 0) // FireFox pc network file
localPath = "\\\\" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\\");
else if(originalPath.indexOf("file:///") == 0) // mac/unix local file
localPath = unescape(originalPath.substr(7));
else if(originalPath.indexOf("file:/") == 0) // mac/unix local file
localPath = unescape(originalPath.substr(5));
else // pc network file
localPath = "\\\\" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\\");
// Load the original file
var original = loadFile(localPath);
if(original == null)
{ alert(config.messages.cantSaveError); return; }
// Locate the storeArea div's
var posOpeningDiv = original.indexOf(startSaveArea);
var posClosingDiv = original.lastIndexOf(endSaveArea);
if((posOpeningDiv == -1) || (posClosingDiv == -1))
{ alert(config.messages.invalidFileError.format([localPath])); return; }
return original.substr(0,posOpeningDiv+startSaveArea.length)
}
//}}}
// //===
// // +++[exportDIVHeader()]
//{{{
function exportDIVHeader()
{
var out=[];
var now = new Date();
var title = convertUnicodeToUTF8(wikifyPlain("SiteTitle").htmlEncode());
var subtitle = convertUnicodeToUTF8(wikifyPlain("SiteSubtitle").htmlEncode());
var user = convertUnicodeToUTF8(config.options.txtUserName.htmlEncode());
var twver = version.major+"."+version.minor+"."+version.revision;
var pver = version.extensions.exportTiddlers.major+"."
+version.extensions.exportTiddlers.minor+"."+version.extensions.exportTiddlers.revision;
out.push("<html><body>");
out.push("<style type=\"text/css\">");
out.push("#storeArea {display:block;margin:1em;}");
out.push("#storeArea div");
out.push("{padding:0.5em;margin:1em;border:2px solid black;height:10em;overflow:auto;}");
out.push("#javascriptWarning");
out.push("{width:100%;text-align:left;background-color:#eeeeee;padding:1em;}");
out.push("</style>");
out.push("<div id=\"javascriptWarning\">");
out.push("TiddlyWiki export file<br>");
out.push("Source: <b>"+convertUnicodeToUTF8(document.location.href)+"</b><br>");
out.push("Title: <b>"+title+"</b><br>");
out.push("Subtitle: <b>"+subtitle+"</b><br>");
out.push("Created: <b>"+now.toLocaleString()+"</b> by <b>"+user+"</b><br>");
out.push("TiddlyWiki "+twver+" / "+"ExportTiddlersPlugin "+pver+"<br>");
out.push("Notes:<hr><pre>"+document.getElementById("exportNotes").value.replace(regexpNewLine,"<br>")+"</pre>");
out.push("</div>");
out.push("<div id=\"storeArea\">");
return out;
}
//}}}
// //===
// // +++[exportDIVFooter()]
//{{{
function exportDIVFooter()
{
var out=[];
out.push("</div><!--POST-BODY-START-->\n<!--POST-BODY-END--></body></html>");
return out;
}
//}}}
// //===
// // +++[exportXMLHeader()]
//{{{
function exportXMLHeader()
{
var out=[];
var now = new Date();
var u = store.getTiddlerText("SiteUrl",null);
var title = convertUnicodeToUTF8(wikifyPlain("SiteTitle").htmlEncode());
var subtitle = convertUnicodeToUTF8(wikifyPlain("SiteSubtitle").htmlEncode());
var user = convertUnicodeToUTF8(config.options.txtUserName.htmlEncode());
var twver = version.major+"."+version.minor+"."+version.revision;
var pver = version.extensions.exportTiddlers.major+"."
+version.extensions.exportTiddlers.minor+"."+version.extensions.exportTiddlers.revision;
out.push("<" + "?xml version=\"1.0\"?" + ">");
out.push("<rss version=\"2.0\">");
out.push("<channel>");
out.push("<title>" + title + "</title>");
if(u) out.push("<link>" + convertUnicodeToUTF8(u.htmlEncode()) + "</link>");
out.push("<description>" + subtitle + "</description>");
out.push("<language>en-us</language>");
out.push("<copyright>Copyright " + now.getFullYear() + " " + user + "</copyright>");
out.push("<pubDate>" + now.toGMTString() + "</pubDate>");
out.push("<lastBuildDate>" + now.toGMTString() + "</lastBuildDate>");
out.push("<docs>http://blogs.law.harvard.edu/tech/rss</docs>");
out.push("<generator>TiddlyWiki "+twver+" plus ExportTiddlersPlugin "+pver+"</generator>");
return out;
}
//}}}
// //===
// // +++[exportXMLFooter()]
//{{{
function exportXMLFooter()
{
var out=[];
out.push("</channel></rss>");
return out;
}
//}}}
// //===
// // +++[exportData()]
//{{{
function exportData(theList,theFormat)
{
// scan export listbox and collect DIVs or XML for selected tiddler content
var out=[];
for (var i=0; i<theList.options.length; i++) {
// get item, skip non-selected items and section headings
var opt=theList.options[i]; if (!opt.selected||(opt.value=="")) continue;
// get tiddler, skip missing tiddlers (this should NOT happen)
var thisTiddler=store.getTiddler(opt.value); if (!thisTiddler) continue;
if (theFormat=="TW") out.push(convertUnicodeToUTF8(thisTiddler.saveToDiv()));
if (theFormat=="DIV") out.push(convertUnicodeToUTF8(thisTiddler.title+"\n"+thisTiddler.saveToDiv()));
if (theFormat=="XML") out.push(convertUnicodeToUTF8(thisTiddler.saveToRss()));
}
return out;
}
//}}}
// //===
// //===
// // +++[exportTiddlers(): output selected data to local or server]
//{{{
function exportTiddlers()
{
var theList = document.getElementById("exportList"); if (!theList) return;
// get the export settings
var theProtocol = document.getElementById("exportTo").value;
var theFormat = document.getElementById("exportFormat").value;
// assemble output: header + tiddlers + footer
var theData=exportData(theList,theFormat);
var count=theData.length;
var out=[]; var txt=out.concat(exportHeader(theFormat),theData,exportFooter(theFormat)).join("\n");
var msg="";
switch (theProtocol) {
case "file:":
var theTarget = document.getElementById("exportFilename").value.trim();
if (!theTarget.length) msg = "A local path/filename is required\n";
if (!msg && saveFile(theTarget,txt))
msg=count+" tiddler"+((count!=1)?"s":"")+" exported to local file";
else if (!msg)
msg+="An error occurred while saving to "+theTarget;
break;
case "http:":
case "https:":
var theTarget = document.getElementById("exportHTTPServerURL").value.trim();
if (!theTarget.length) msg = "A server URL is required\n";
if (document.getElementById('exportNotify').checked)
theTarget+="¬ify="+encodeURIComponent(document.getElementById('exportNotifyTo').value);
if (document.getElementById('exportNotes').value.trim().length)
theTarget+="¬es="+encodeURIComponent(document.getElementById('exportNotes').value);
if (!msg && exportPost(theTarget+encodeURIComponent(txt)))
msg=count+" tiddler"+((count!=1)?"s":"")+" exported to "+theProtocol+" server";
else if (!msg)
msg+="An error occurred while saving to "+theTarget;
break;
case "ftp:":
default:
msg="Sorry, export to "+theLocation+" is not yet available";
break;
}
clearMessage(); displayMessage(msg,theTarget);
}
//}}}
// //===
// // +++[exportPost(url): cross-domain post] uses hidden iframe to submit url and capture responses
//{{{
function exportPost(url)
{
var f=document.getElementById("exportFrame"); if (f) document.body.removeChild(f);
f=document.createElement("iframe"); f.id="exportFrame";
f.style.width="0px"; f.style.height="0px"; f.style.border="0px";
document.body.appendChild(f);
var d=f.document;
if (f.contentDocument) d=f.contentDocument; // For NS6
else if (f.contentWindow) d=f.contentWindow.document; // For IE5.5 and IE6
d.location.replace(url);
return true;
}
//}}}
// //===
I have a few external disks that I need to figure out how to use them best.
Requirements:
Final Cut Pro capture disk
General purpose transfer disk
Time Machine archive disk
Video project/Picture archive disk
Here in St. Louis I shoot at [[Benchrest Rifle Club|http://www.shootingstl.com/home.htm]] and here is their [[schedule|http://www.shootingstl.com/schedule.htm]]. And the [[weather for Wright City|http://forecast.weather.gov/MapClick.php?CityName=Wright+City&state=MO&site=LSX]]. Also Benchrest has a hotline to call about scheduling, it is: (636)745-7682
Every American should own a [[DPMS|http://www.dpmsinc.com/]] [[AP-4|http://www.dpmsinc.com/firearms/308/ap4.aspx]]. I do.
Nightforce has a great new reticule the [[R1|http://www.benchrest.com/forums/showthread.php?t=32758&highlight=nightforce]]
[[Lone Wolf Stocks|http://www.lonewolfriflestocks.com/]] make for some really cool stock stuff. I like their [[Tactical Master|http://www.lonewolfriflestocks.com/tactical.html]]
I have a new thing which is VNCRemoteAccess
<<gradient vert #ffffff #ffdddd #ff8888>>GrassrootsDigital Admin Account>>
This was sent with my original iPower account. I don't know if any of it is still valid.
{{{This section provides you with your username, password, and hostname. You will use the username and password when logging into your control panel, checking mail, connecting to FTP, and when verifying account security. Your hostname can be used to upload your files, secure your site, or access your temporary URL.
Username: grassroo
Password: standard password
Hostname: host463.ipowerweb.com}}}
<<gradient vert #ffffff #ffdddd #ff8888>>vDeck Control Panel>>
This Control Panel is now obsolete. My Account has been transitioned to the new VDeck V3.0. See below:
{{{For VDeck version 1.0 use these settings:
[[VDeck Control Panel v1.0|https://host463.ipowerweb.com:8087/panel/index]]
Username: grassroo
Password: standard password}}}
The new VDeck control panel is [[VDeck Control Panel v3.0|https://secure.ipower.com/secure/login.bml?err=]] It can also be found on the far right of the sub menu of [[iPower's home page|http://www.ipower.com/ipower/index.bml]]
Username: grassrootsdigital
Password: standard password (with an added middle finger number on the end and shift same middle finger)
<<gradient vert #ffffff #ffdddd #ff8888>>FTP information>>
There's also a ftp account for ftp access. Type {{{ftp grassrootsdigital.net}}}
username: wiki
password: standard password (with the added middle finger and shift)
<<gradient vert #ffffff #ffdddd #ff8888>>Email Information>>
Though, I rarely use the email from this account
Username: grassroo@grassrootsdigital.net
Password: standard password
POP3: mail.grassrootsdigital.net
SMTP: mail.grassrootsdigital.net
IMPORTANT NOTE:
The username for any email account is the full email address. For example, if you create an email account called: info; the username for this account would be:
info@grassrootsdigital.net
We also offer [[Webmail|http://www.ipower.com/mail/index.bml?m=1]], which is a way for you to check your email from any computer with internet access. To access Webmail, please visit:
http://www.ipower.com/mail/index.bml?m=1
<<gradient vert #ffffff #ffdddd #ff8888>>Forum>>
I also installed phpBB...
Admin name: grassroo
admin password: standard password
The address for the Forum is:
[[http://grassrootsdigital.net/phpBB/index.php|http://grassrootsdigital.net/phpBB/index.php]]
<<gradient vert #ffffff #ffdddd #ff8888>>Word Press>>
[[Admin Page for Wordpress|http://grassrootsdigital.net/WordPress/wp-admin/index.php]]
Admin name: grassroo
Admin password: standard password
You can also post using email
I have a secret email setup using on my phone.
One key thing is that you have to visit this website [[http://grassrootsdigital.net/WordPress/wp-mail.php|http://grassrootsdigital.net/WordPress/wp-mail.php]] after emailing something so that WordPress automatically updates the postings.
I had to do some monkeying around with PHP to get this to work, but I got it working.
<<gradient vert #ffffff #ffdddd #ff8888>>Coppermine Picture Gallery>>
I've installed Coppermine. It's a picture gallery application. I'm not entirely sure how to use it just yet, but it looks pretty slick.
To post a FlipVideoCamera video to the site.
# Copy the MP4 file from the device to somewhere.
# Open it with Quicktime
# Choose File-Export-Movie to iPhone
# RENAME the file "filename.mp4" it's the mp4 that's the trick.
# Upload as usual
[[Grassrootsdigital.net Coppermine Gallery|http://www.grassrootsdigital.net/Coppermine/]]
Admin name: grassroo
Admin password: standard password
My login name: dave
password: web password (like glocktalk)
There are a few batch folders in the Pictures folder. There are also some new automator actions that automatically process images in the input folder for email and website applications.
| !Output Folder | !Attributes |
| Email | Sized with long edge 640 pixels |
| Web | Sized with long edge 1620, short 1080 |
| Tiny | Sized at 150 x 100 |
The workflows open in automator and give a little more feedback about how the process is going along than the applications. You know that the application is done however when the automator icons disappears from the dock.
I've included a link to Fetch in the batch processing folder. It uses the wiki FTP login to put files in {{{/public_html/Coppermine/albums}}} Once there, choose or create the sub folder most appropriate for the pictures uploaded. DON'T use spaces or goofy characters when creating a sub-folder. Then just log in to Coppermine as an administrator and choose the button "Batch Upload" and choose the folder to which you just FTP'd the pictures.
<<gradient vert #ffffff #ffdddd #ff8888>>WikiMedia Wiki>>
I've also installed WikiMedia (the software that powers Wikipedia), mostly just to play around with it. To view it, go to [[www.grassrootsdigital.net/DGLWiki|http://www.grassrootsdigital.net/DGLWiki]]
It's currently locked because it's being used for Aclara stuff, the sysop is:
Username: grassroo
password: standard password
but I log in usually with
Username: dsteidtmann
password: work password (capital first letter)
I've installed a second instance of WikiMedia for [[Slipstream www.grassrootsdigital.net/slipstream|http://grassrootsdigital.net/slipstream]] It's also locked because of the nature of Slipstream. The sysop is
Username Grassroo
password: standard password w/ middle finger and shift of that
but I normally login with
Username: dave
password: web password
Take all the metal detectors and bag searching stuff out of airports. Allow anyone that wants to to carry a gun on a plane. I guarantee you that nobody will try to take over the plane against the wishes of the rest of the passengers. Although if the plane were 80% terrorists, then perhaps they could commandeer the flight, I guess.
One competing power line data technology is [[X-10]] there is also [[INSTEON|http://en.wikipedia.org/wiki/INSTEON]]
Now we have an emerging standard [[Zigbee]].
The UCA has a working group called OpenHAN
[[Lowe's|http://www.lowes.com]] [[Home Depot|http://www.homedepot.com]]
[[City of St. Louis Building Permits|http://stlouis.missouri.org/government/building.html]]
CandidateProperties
HomeEfficiency
HomeRequirements
HomeImprovement
InspectionChecklist
AclaraInfo
HomeAreaNetwork
GrassrootsDigital
WebInterests
[[My cooking wiki|http://www.grassrootsdigital.net/cooking]]
<<importTiddlers inline>>
/***
|''Name:''|ImportTiddlersPlugin|
|''Source:''|http://www.TiddlyTools.com/#ImportTiddlersPlugin|
|''Author:''|Eric Shulman - ELS Design Studios|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|''~CoreVersion:''|2.0.10|
When many people share and edit copies of the same TiddlyWiki document, the ability to quickly collect all these changes back into a single, updated document that can then be redistributed to the entire group is very important. It can also be very extremely helpful when moving your own tiddlers from document to document (e.g., when upgrading to the latest version of TiddlyWiki, or 'pre-loading' your favorite stylesheets into a new 'empty' TiddlyWiki document.)
This plugin lets you selectively combine tiddlers from any two TiddlyWiki documents. An interactive control panel lets you pick a document to import from, and then select which tiddlers to import, with prompting for skip, rename, merge or replace actions when importing tiddlers that match existing titles. Automatically add tags to imported tiddlers so they are easy to find later on. Generates a detailed report of import 'history' in ImportedTiddlers.
!!!!!Interactive interface
<<<
{{{<<importTiddlers>>}}}
creates "import tiddlers" link. click to show/hide import control panel
{{{<<importTiddlers inline>>}}}
creates import control panel directly in tiddler content
<<importTiddlers inline>>
Press ''[browse]'' to select a TiddlyWiki document file to import. You can also type in the path/filename or a remote document URL (starting with http://)and press ''[open]''. //Note: There may be some delay to permit the browser time to access and load the document before updating the listbox with the titles of all tiddlers that are available to be imported.//
Select one or more titles from the listbox (hold CTRL or SHIFT while clicking to add/remove the highlight from individual list items). You can press ''[select all]'' to quickly highlight all tiddler titles in the list. Use the ''[-]'', ''[+]'', or ''[=]'' links to adjust the listbox size so you can view more (or less) tiddler titles at one time. When you have chosen the tiddlers you want to import and entered any extra tags, press ''[import]'' to begin copying them to the current TiddlyWiki document.
''select: all, new, changes, or differences''
You can click on ''all'', ''new'', ''changes'', or ''differences'' to automatically select a subset of tiddlers from the list. This makes it very quick and easy to find and import just the updated tiddlers you are interested in:
>''"all"'' selects ALL tiddlers from the import source document, even if they have not been changed.
>''"new"'' selects only tiddlers that are found in the import source document, but do not yet exist in the destination document
>''"changes"'' selects only tiddlers that exist in both documents but that are newer in the source document
>''"differences"'' selects all new and existing tiddlers that are different from the destination document (even if destination tiddler is newer)
''Import Tagging:''
Tiddlers that have been imported can be automatically tagged, so they will be easier to find later on, after they have been added to your document. New tags are entered into the "add tags" input field, and then //added// to the existing tags for each tiddler as it is imported.
''Skip, Rename, Merge, or Replace:''
When importing a tiddler whose title is identical to one that already exists, the import process pauses and the tiddler title is displayed in an input field, along with four push buttons: ''[skip]'', ''[rename]'', ''[merge]'' and ''[replace]''.
To bypass importing this tiddler, press ''[skip]''. To import the tiddler with a different name (so that both the tiddlers will exist when the import is done), enter a new title in the input field and then press ''[rename]''. Press ''[merge]'' to combine the content from both tiddlers into a single tiddler. Press ''[replace]'' to overwrite the existing tiddler with the imported one, discarding the previous tiddler content.
//Note: if both the title ''and'' modification date/////time match, the imported tiddler is assumed to be identical to the existing one, and will be automatically skipped (i.e., not imported) without asking.//
''Import Report History''
When tiddlers are imported, a report is generated into ImportedTiddlers, indicating when the latest import was performed, the number of tiddlers successfully imported, from what location, and by whom. It also includes a list with the title, date and author of each tiddler that was imported.
When the import process is completed, the ImportedTiddlers report is automatically displayed for your review. If more tiddlers are subsequently imported, a new report is //added// to ImportedTiddlers, above the previous report (i.e., at the top of the tiddler), so that a reverse-chronological history of imports is maintained.
If a cumulative record is not desired, the ImportedTiddlers report may be deleted at any time. A new ImportedTiddlers report will be created the next time tiddlers are imported.
Note: You can prevent the ImportedTiddlers report from being generated for any given import activity by clearing the "create a report" checkbox before beginning the import processing.
<<<
!!!!!non-interactive 'load tiddlers' macro
<<<
Useful for automated installation/update of plugins and other tiddler content.
{{{<<loadTiddlers "label:load tiddlers from %0" http://www.tiddlytools.com/example.html confirm>>}}}
<<loadTiddlers "label:load tiddlers from %0" http://www.tiddlytools.com/example.html confirm>>
Syntax:
{{{<<loadTiddlers label:text prompt:text filter source quiet confirm>>}}}
''label:text'' and ''prompt:text''
>defines link text and tooltip (prompt) that can be clicked to trigger the load tiddler processing. If a label is NOT provided, then no link is created and loadTiddlers() is executed whenever the containing tiddler is rendered.
''filter'' (optional) determines which tiddlers will be automatically selected for importing. Use one of the following keywords:
>''"all"'' retrieves ALL tiddlers from the import source document, even if they have not been changed.
>''"new"'' retrieves only tiddlers that are found in the import source document, but do not yet exist in the destination document
>''"changes"'' retrieves only tiddlers that exist in both documents for which the import source tiddler is newer than the existing tiddler
>''"updates"'' retrieves both ''new'' and ''changed'' tiddlers (this is the default action when none is specified)
>''"tiddler:~TiddlerName"'' retrieves only the specific tiddler named in the parameter.
>''"tag:text"'' retrieves only the tiddlers tagged with the indicated text.
''source'' (required) is the location of the imported document. It can be either a local document path/filename in whatever format your system requires, or a remote web location (starting with "http://" or "https://")
>use the keyword ''ask'' to prompt for a source location whenever the macro is invoked
''"quiet"'' (optional)
>supresses all status message during the import processing (e.g., "opening local file...", "found NN tiddlers..." etc). Note that if ANY tiddlers are actualy imported, a final information message will still be displayed (along with the ImportedTiddlers report), even when 'quiet' is specified. This ensures that changes to your document cannot occur without any visible indication at all.
''"confirm"'' (optional)
>adds interactive confirmation. A browser message box (OK/Cancel) is displayed for each tiddler that will be imported, so that you can manually bypass any tiddlers that you do not want to import.
<<<
!!!!!Installation
<<<
copy/paste the following tiddlers into your document:
''ImportTiddlersPlugin'' (tagged with <<tag systemConfig>>)
create/edit ''SideBarOptions'': (sidebar menu items)
^^Add "< < ImportTiddlers > >" macro^^
''Quick Installation Tip #1:''
If you are using an unmodified version of TiddlyWiki (core release version <<version>>), you can get a new, empty TiddlyWiki with the Import Tiddlers plugin pre-installed (''[[download from here|TW+ImportExport.html]]''), and then simply import all your content from your old document into this new, empty document.
<<<
!!!!!Revision History
<<<
''2006.10.12 [3.0.8]'' in readTiddlersFromHTML(), fallback to find end of store area by matching "/body" when POST-BODY-START is not present (backward compatibility for older documents)
''2006.09.10 [3.0.7]'' in readTiddlersFromHTML(), find end of store area by matching "POST-BODY-START" instead of "/body"
''2006.08.16 [3.0.6]'' Use higher-level store.saveTiddler() instead of store.addTiddler() to avoid conflicts with ZW and other adaptations that hijack low-level tiddler handling. Also, in CreateImportPanel(), no longer register notify to "refresh listbox after every tiddler change" (left over from old 'auto-filtered' list handling). Thanks to Bob McElrath for report/solution.
''2006.07.29 [3.0.5]'' added noChangeMsg to loadTiddlers processing. if not 'quiet' mode, reports skipped tiddlers.
''2006.04.18 [3.0.4]'' in loadTiddlers.handler, fixed parsing of "prompt:" param. Also, corrected parameters mismatch in loadTiddlers() callback function definition (order of params was wrong, resulting in filters NOT being applied)
''2006.04.12 [3.0.3]'' moved many display messages to macro properties for easier L10N translations via 'lingo' definitions.
''2006.04.12 [3.0.2]'' additional refactoring of 'core candidate' code. Proposed API now defines "loadRemoteFile()" for XMLHttpRequest processing with built in fallback for handling local filesystem access, and readTiddlersFromHTML() to process the resulting source HTML content.
''2006.04.04 [3.0.1]'' in refreshImportList(), when using [by tags], tiddlers without tags are now included in a new "untagged" psuedo-tag list section
''2006.04.04 [3.0.0]'' Separate non-interactive {{{<<importTiddlers...>>}}} macro functionality for incorporation into TW2.1 core and renamed as {{{<<loadTiddlers>>}}} macro. New parameters for loadTiddlers: ''label:text'' and ''prompt:text'' for link creation, ''ask'' for filename/URL, ''tag:text'' for filtering, "confirm" for accept/reject of individual inbound tiddlers. Also, ImportedTiddlers report generator output has been simplified and "importReplace/importPublic" tags and associated "force" param (which were rarely, if ever, used) has been dropped.
''2006.03.30 [2.9.1]'' when extracting store area from remote URL, look for "</body>" instead of "</body>\n</html>" so it will match even if the "\n" is absent from the source.
''2006.03.30 [2.9.0]'' added optional 'force' macro param. When present, autoImportTiddlers() bypasses the checks for importPublic and importReplace. Based on a request from Tom Otvos.
''2006.03.28 [2.8.1]'' in loadImportFile(), added checks to see if 'netscape' and 'x.overrideMimeType()' are defined (IE does *not* define these values, so we bypass this code)
Also, when extracting store area from remote URL, explicitly look for "</body>\n</html>" to exclude any extra content that may have been added to the end of the file by hosting environments such as GeoCities. Thanks to Tom Otvos for finding these bugs and suggesting some fixes.
''2006.02.21 [2.8.0]'' added support for "tiddler:TiddlerName" filtering parameter in auto-import processing
''2006.02.21 [2.7.1]'' Clean up layout problems with IE. (Use tables for alignment instead of SPANs styled with float:left and float:right)
''2006.02.21 [2.7.0]'' Added "local file" and "web server" radio buttons for selecting dynamic import source controls in ImportPanel. Default file control is replaced with URL text input field when "web server" is selected. Default remote document URL is defined in SiteURL tiddler. Also, added option for prepending SiteProxy URL as prefix to remote URL to mask cross-domain document access (requires compatible server-side script)
''2006.02.17 [2.6.0]'' Removed "differences only" listbox display mode, replaced with selection filter 'presets': all/new/changes/differences. Also fixed initialization handling for "add new tags" so that checkbox state is correctly tracked when panel is first displayed.
''2006.02.16 [2.5.4]'' added checkbox options to control "import remote tags" and "keep existing tags" behavior, in addition to existing "add new tags" functionality.
''2006.02.14 [2.5.3]'' FF1501 corrected unintended global 't' (loop index) in importReport() and autoImportTiddlers()
''2006.02.10 [2.5.2]'' corrected unintended global variable in importReport().
''2006.02.05 [2.5.1]'' moved globals from window.* to config.macros.importTiddlers.* to avoid FireFox 1.5.0.1 crash bug when referencing globals
''2006.01.18 [2.5.0]'' added checkbox for "create a report". Default is to create/update the ImportedTiddlers report. Clear the checkbox to skip this step.
''2006.01.15 [2.4.1]'' added "importPublic" tag and inverted default so that auto sharing is NOT done unless tagged with importPublic
''2006.01.15 [2.4.0]'' Added support for tagging individual tiddlers with importSkip, importReplace, and/or importPrivate to control which tiddlers can be overwritten or shared with others when using auto-import macro syntax. Defaults are to SKIP overwriting existing tiddlers with imported tiddlers, and ALLOW your tiddlers to be auto-imported by others.
''2006.01.15 [2.3.2]'' Added "ask" parameter to confirm each tiddler before importing (for use with auto-importing)
''2006.01.15 [2.3.1]'' Strip TW core scripts from import source content and load just the storeArea into the hidden IFRAME. Makes loading more efficient by reducing the document size and by preventing the import document from executing its TW initialization (including plugins). Seems to resolve the "Found 0 tiddlers" problem. Also, when importing local documents, use convertUTF8ToUnicode() to convert the file contents so support international characters sets.
''2006.01.12 [2.3.0]'' Reorganized code to use callback function for loading import files to support event-driven I/O via an ASYNCHRONOUS XMLHttpRequest. Let's processing continue while waiting for remote hosts to respond to URL requests. Added non-interactive 'batch' macro mode, using parameters to specify which tiddlers to import, and from what document source. Improved error messages and diagnostics, plus an optional 'quiet' switch for batch mode to eliminate //most// feedback.
''2006.01.11 [2.2.0]'' Added "[by tags]" to list of tiddlers, based on code submitted by BradleyMeck
''2006.01.09 [2.1.1]'' When a URL is typed in, and then the "open" button is pressed, it generates both an onChange event for the file input and a click event for open button. This results in multiple XMLHttpRequest()'s which seem to jam things up quite a bit. I removed the onChange handling for file input field. To open a file (local or URL), you must now explicitly press the "open" button in the control panel.
''2006.01.08 [2.1.0]'' IMPORT FROM ANYWHERE!!! re-write getImportedTiddlers() logic to either read a local file (using local I/O), OR... read a remote file, using a combination of XML and an iframe to permit cross-domain reading of DOM elements. Adapted from example code and techniques courtesy of Jonny LeRoy.
''2006.01.06 [2.0.2]'' When refreshing list contents, fixed check for tiddlerExists() when "show differences only" is selected, so that imported tiddlers that don't exist in the current file will be recognized as differences and included in the list.
''2006.01.04 [2.0.1]'' When "show differences only" is NOT checked, import all tiddlers that have been selected even when they have a matching title and date.
''2005.12.27 [2.0.0]'' Update for TW2.0
Defer initial panel creation and only register a notification function when panel first is created
''2005.12.22 [1.3.1]'' tweak formatting in importReport() and add 'discard report' link to output
''2005.12.03 [1.3.0]'' Dynamically create/remove importPanel as needed to ensure only one instance of interface elements exists, even if there are multiple instances of macro embedding. Also, dynamically create/recreate importFrame each time an external TW document is loaded for importation (reduces DOM overhead and ensures a 'fresh' frame for each document)
''2005.11.29 [1.2.1]'' fixed formatting of 'detail info' in importReport()
''2005.11.11 [1.2.0]'' added 'inline' param to embed controls in a tiddler
''2005.11.09 [1.1.0]'' only load HTML and CSS the first time the macro handler is called. Allows for redundant placement of the macro without creating multiple instances of controls with the same ID's.
''2005.10.25 [1.0.5]'' fixed typo in importReport() that prevented reports from being generated
''2005.10.09 [1.0.4]'' combined documentation with plugin code instead of using separate tiddlers
''2005.08.05 [1.0.3]'' moved CSS and HTML definitions into plugin code instead of using separate tiddlers
''2005.07.27 [1.0.2]'' core update 1.2.29: custom overlayStyleSheet() replaced with new core setStylesheet()
''2005.07.23 [1.0.1]'' added parameter checks and corrected addNotification() usage
''2005.07.20 [1.0.0]'' Initial Release
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
<<<
!!!!!Code
***/
// // ''MACRO DEFINITION''
//{{{
// Version
version.extensions.importTiddlers = {major: 3, minor: 0, revision: 8, date: new Date(2006,10,12)};
// IE needs explicit global scoping for functions/vars called from browser events
window.onClickImportButton=onClickImportButton;
window.refreshImportList=refreshImportList;
// default cookie/option values
if (!config.options.chkImportReport) config.options.chkImportReport=true;
config.macros.importTiddlers = { };
config.macros.importTiddlers = {
label: "import tiddlers",
prompt: "Copy tiddlers from another document",
foundMsg: "Found %0 tiddlers in %1",
countMsg: "%0 tiddlers selected for import",
importedMsg: "Imported %0 of %1 tiddlers from %2",
src: "", // path/filename or URL of document to import (retrieved from SiteUrl tiddler)
proxy: "", // URL for remote proxy script (retrieved from SiteProxy tiddler)
useProxy: false, // use specific proxy script in front of remote URL
inbound: null, // hash-indexed array of tiddlers from other document
newTags: "", // text of tags added to imported tiddlers
addTags: true, // add new tags to imported tiddlers
listsize: 8, // # of lines to show in imported tiddler list
importTags: true, // include tags from remote source document when importing a tiddler
keepTags: true, // retain existing tags when replacing a tiddler
index: 0, // current processing index in import list
sort: "" // sort order for imported tiddler listbox
};
config.macros.importTiddlers.handler = function(place,macroName,params) {
if (!config.macros.loadTiddlers.handler)
{ alert("importTiddlers error: this plugin requires LoadTiddlersPlugin or TiddlyWiki 2.1+"); return; }
if (!params[0]) // LINK TO FLOATING PANEL
createTiddlyButton(place,this.label,this.prompt,onClickImportMenu);
else if (params[0]=="inline") {// // INLINE TIDDLER CONTENT
createImportPanel(place);
document.getElementById("importPanel").style.position="static";
document.getElementById("importPanel").style.display="block";
}
else config.macros.loadTiddlers.handler(place,macroName,params); // FALLBACK: PASS TO LOADTIDDLERS
}
//}}}
// // ''INTERFACE DEFINITION''
// // Handle link click to create/show/hide control panel
//{{{
function onClickImportMenu(e)
{
if (!e) var e = window.event;
var parent=resolveTarget(e).parentNode;
var panel = document.getElementById("importPanel");
if (panel==undefined || panel.parentNode!=parent)
panel=createImportPanel(parent);
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);
}
//}}}
// // Create control panel: HTML, CSS
//{{{
function createImportPanel(place) {
var panel=document.getElementById("importPanel");
if (panel) { panel.parentNode.removeChild(panel); }
setStylesheet(config.macros.importTiddlers.css,"importTiddlers");
panel=createTiddlyElement(place,"span","importPanel",null,null)
panel.innerHTML=config.macros.importTiddlers.html;
refreshImportList();
var siteURL=store.getTiddlerText("SiteUrl"); if (!siteURL) siteURL="";
document.getElementById("importSourceURL").value=siteURL;
config.macros.importTiddlers.src=siteURL;
var siteProxy=store.getTiddlerText("SiteProxy"); if (!siteProxy) siteProxy="SiteProxy";
document.getElementById("importSiteProxy").value=siteProxy;
config.macros.importTiddlers.proxy=siteProxy;
return panel;
}
//}}}
// // CSS
//{{{
config.macros.importTiddlers.css = '\
#importPanel {\
display: none; position:absolute; z-index:11; width:35em; right:105%; top:3em;\
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;\
}\
#importPanel a, #importPanel td a { color:#009; display:inline; margin:0px; padding:1px; }\
#importPanel table { width:100%; border:0px; padding:0px; margin:0px; font-size:8pt; line-height:110%; background:transparent; }\
#importPanel tr { border:0px;padding:0px;margin:0px; background:transparent; }\
#importPanel td { color:#000; border:0px;padding:0px;margin:0px; background:transparent; }\
#importPanel select { width:98%;margin:0px;font-size:8pt;line-height:110%;}\
#importPanel input { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%}\
#importPanel .box { border:1px solid black; padding:3px; margin-bottom:5px; background:#f8f8f8; -moz-border-radius:5px;}\
#importPanel .topline { border-top:2px solid black; padding-top:3px; margin-bottom:5px; }\
#importPanel .rad { width:auto; }\
#importPanel .chk { width:auto; margin:1px;border:0; }\
#importPanel .btn { width:auto; }\
#importPanel .btn1 { width:98%; }\
#importPanel .btn2 { width:48%; }\
#importPanel .btn3 { width:32%; }\
#importPanel .btn4 { width:24%; }\
#importPanel .btn5 { width:19%; }\
#importPanel .importButton { padding: 0em; margin: 0px; font-size:8pt; }\
#importPanel .importListButton { padding:0em 0.25em 0em 0.25em; color: #000000; display:inline }\
#importCollisionPanel { display:none; margin:0.5em 0em 0em 0em; }\
';
//}}}
// // HTML
//{{{
config.macros.importTiddlers.html = '\
<!-- source and report -->\
<table><tr><td align=left>\
import from\
<input type="radio" class="rad" name="importFrom" value="file" CHECKED\
onClick="document.getElementById(\'importLocalPanel\').style.display=this.checked?\'block\':\'none\';\
document.getElementById(\'importHTTPPanel\').style.display=!this.checked?\'block\':\'none\'"> local file\
<input type="radio" class="rad" name="importFrom" value="http"\
onClick="document.getElementById(\'importLocalPanel\').style.display=!this.checked?\'block\':\'none\';\
document.getElementById(\'importHTTPPanel\').style.display=this.checked?\'block\':\'none\'"> web server\
</td><td align=right>\
<input type=checkbox class="chk" id="chkImportReport" checked\
onClick="config.options[\'chkImportReport\']=this.checked;"> create a report\
</td></tr></table>\
<!-- import from local file -->\
<div id="importLocalPanel" style="display:block;margin-bottom:5px;margin-top:5px;padding-top:3px;border-top:1px solid #999">\
local document path/filename:<br>\
<input type="file" id="fileImportSource" size=57 style="width:100%"\
onKeyUp="config.macros.importTiddlers.src=this.value"\
onChange="config.macros.importTiddlers.src=this.value;">\
</div><!--panel-->\
\
<!-- import from http server -->\
<div id="importHTTPPanel" style="display:none;margin-bottom:5px;margin-top:5px;padding-top:3px;border-top:1px solid #999">\
<table><tr><td align=left>\
remote document URL:<br>\
</td><td align=right>\
<input type="checkbox" class="chk" id="importUseProxy"\
onClick="config.macros.importTiddlers.useProxy=this.checked;\
document.getElementById(\'importSiteProxy\').style.display=this.checked?\'block\':\'none\'"> use a proxy script\
</td></tr></table>\
<input type="text" id="importSiteProxy" style="display:none;margin-bottom:1px" onfocus="this.select()" value="SiteProxy"\
onKeyUp="config.macros.importTiddlers.proxy=this.value"\
onChange="config.macros.importTiddlers.proxy=this.value;">\
<input type="text" id="importSourceURL" onfocus="this.select()" value="SiteUrl"\
onKeyUp="config.macros.importTiddlers.src=this.value"\
onChange="config.macros.importTiddlers.src=this.value;">\
</div><!--panel-->\
\
<table><tr><td align=left>\
select:\
<a href="JavaScript:;" id="importSelectAll"\
onclick="onClickImportButton(this)" title="select all tiddlers">\
all </a>\
<a href="JavaScript:;" id="importSelectNew"\
onclick="onClickImportButton(this)" title="select tiddlers not already in destination document">\
added </a> \
<a href="JavaScript:;" id="importSelectChanges"\
onclick="onClickImportButton(this)" title="select tiddlers that have been updated in source document">\
changes </a> \
<a href="JavaScript:;" id="importSelectDifferences"\
onclick="onClickImportButton(this)" title="select tiddlers that have been added or are different from existing tiddlers">\
differences </a> \
<a href="JavaScript:;" id="importToggleFilter"\
onclick="onClickImportButton(this)" title="show/hide selection filter">\
filter </a> \
</td><td align=right>\
<a href="JavaScript:;" id="importListSmaller"\
onclick="onClickImportButton(this)" title="reduce list size">\
– </a>\
<a href="JavaScript:;" id="importListLarger"\
onclick="onClickImportButton(this)" title="increase list size">\
+ </a>\
<a href="JavaScript:;" id="importListMaximize"\
onclick="onClickImportButton(this)" title="maximize/restore list size">\
= </a>\
</td></tr></table>\
<select id="importList" size=8 multiple\
onchange="setTimeout(\'refreshImportList(\'+this.selectedIndex+\')\',1)">\
<!-- NOTE: delay refresh so list is updated AFTER onchange event is handled -->\
</select>\
<input type=checkbox class="chk" id="chkAddTags" checked\
onClick="config.macros.importTiddlers.addTags=this.checked;">add new tags \
<input type=checkbox class="chk" id="chkImportTags" checked\
onClick="config.macros.importTiddlers.importTags=this.checked;">import source tags \
<input type=checkbox class="chk" id="chkKeepTags" checked\
onClick="config.macros.importTiddlers.keepTags=this.checked;">keep existing tags<br>\
<input type=text id="txtNewTags" size=15 onKeyUp="config.macros.importTiddlers.newTags=this.value" autocomplete=off>\
<div align=center>\
<input type=button id="importOpen" class="importButton" style="width:32%" value="open"\
onclick="onClickImportButton(this)">\
<input type=button id="importStart" class="importButton" style="width:32%" value="import"\
onclick="onClickImportButton(this)">\
<input type=button id="importClose" class="importButton" style="width:32%" value="close"\
onclick="onClickImportButton(this)">\
</div>\
<div id="importCollisionPanel">\
tiddler already exists:\
<input type=text id="importNewTitle" size=15 autocomplete=off">\
<div align=center>\
<input type=button id="importSkip" class="importButton" style="width:23%" value="skip"\
onclick="onClickImportButton(this)">\
<input type=button id="importRename" class="importButton" style="width:23%" value="rename"\
onclick="onClickImportButton(this)">\
<input type=button id="importMerge" class="importButton" style="width:23%" value="merge"\
onclick="onClickImportButton(this)">\
<input type=button id="importReplace" class="importButton" style="width:23%" value="replace"\
onclick="onClickImportButton(this)">\
</div>\
</div>\
';
//}}}
// // Control interactions
//{{{
function onClickImportButton(which)
{
// DEBUG alert(which.id);
var theList = document.getElementById('importList');
if (!theList) return;
var thePanel = document.getElementById('importPanel');
var theCollisionPanel = document.getElementById('importCollisionPanel');
var theNewTitle = document.getElementById('importNewTitle');
var count=0;
switch (which.id)
{
case 'fileImportSource':
case 'importOpen': // load import source into hidden frame
importReport(); // if an import was in progress, generate a report
config.macros.importTiddlers.inbound=null; // clear the imported tiddler buffer
refreshImportList(); // reset/resize the listbox
if (config.macros.importTiddlers.src=="") break;
// Load document into hidden iframe so we can read it's DOM and fill the list
loadRemoteFile(config.macros.importTiddlers.src, function(src,txt) {
var tiddlers = readTiddlersFromHTML(txt);
var count=tiddlers?tiddlers.length:0;
displayMessage(config.macros.importTiddlers.foundMsg.format([count,src]));
config.macros.importTiddlers.inbound=tiddlers;
window.refreshImportList(0);
});
break;
case 'importSelectAll': // select all tiddler list items (i.e., not headings)
importReport(); // if an import was in progress, generate a report
for (var t=0,count=0; t < theList.options.length; t++) {
if (theList.options[t].value=="") continue;
theList.options[t].selected=true;
count++;
}
clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));
break;
case 'importSelectNew': // select tiddlers not in current document
importReport(); // if an import was in progress, generate a report
for (var t=0,count=0; t < theList.options.length; t++) {
theList.options[t].selected=false;
if (theList.options[t].value=="") continue;
theList.options[t].selected=!store.tiddlerExists(theList.options[t].value);
count+=theList.options[t].selected?1:0;
}
clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));
break;
case 'importSelectChanges': // select tiddlers that are updated from existing tiddlers
importReport(); // if an import was in progress, generate a report
for (var t=0,count=0; t < theList.options.length; t++) {
theList.options[t].selected=false;
if (theList.options[t].value==""||!store.tiddlerExists(theList.options[t].value)) continue;
for (var i=0; i<config.macros.importTiddlers.inbound.length; i++) // find matching inbound tiddler
{ var inbound=config.macros.importTiddlers.inbound[i]; if (inbound.title==theList.options[t].value) break; }
theList.options[t].selected=(inbound.modified-store.getTiddler(theList.options[t].value).modified>0); // updated tiddler
count+=theList.options[t].selected?1:0;
}
clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));
break;
case 'importSelectDifferences': // select tiddlers that are new or different from existing tiddlers
importReport(); // if an import was in progress, generate a report
for (var t=0,count=0; t < theList.options.length; t++) {
theList.options[t].selected=false;
if (theList.options[t].value=="") continue;
if (!store.tiddlerExists(theList.options[t].value)) { theList.options[t].selected=true; count++; continue; }
for (var i=0; i<config.macros.importTiddlers.inbound.length; i++) // find matching inbound tiddler
{ var inbound=config.macros.importTiddlers.inbound[i]; if (inbound.title==theList.options[t].value) break; }
theList.options[t].selected=(inbound.modified-store.getTiddler(theList.options[t].value).modified!=0); // changed tiddler
count+=theList.options[t].selected?1:0;
}
clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));
break;
case 'importToggleFilter': // show/hide filter
case 'importFilter': // apply filter
alert("coming soon!");
break;
case 'importStart': // initiate the import processing
importReport(); // if an import was in progress, generate a report
config.macros.importTiddlers.index=0;
config.macros.importTiddlers.index=importTiddlers(0);
importStopped();
break;
case 'importClose': // unload imported tiddlers or hide the import control panel
// if imported tiddlers not loaded, close the import control panel
if (!config.macros.importTiddlers.inbound) { thePanel.style.display='none'; break; }
importReport(); // if an import was in progress, generate a report
config.macros.importTiddlers.inbound=null; // clear the imported tiddler buffer
refreshImportList(); // reset/resize the listbox
break;
case 'importSkip': // don't import the tiddler
var theItem = theList.options[config.macros.importTiddlers.index];
for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)
if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;
var theImported = config.macros.importTiddlers.inbound[j];
theImported.status='skipped after asking'; // mark item as skipped
theCollisionPanel.style.display='none';
config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index+1); // resume with NEXT item
importStopped();
break;
case 'importRename': // change name of imported tiddler
var theItem = theList.options[config.macros.importTiddlers.index];
for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)
if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;
var theImported = config.macros.importTiddlers.inbound[j];
theImported.status = 'renamed from '+theImported.title; // mark item as renamed
theImported.set(theNewTitle.value,null,null,null,null); // change the tiddler title
theItem.value = theNewTitle.value; // change the listbox item text
theItem.text = theNewTitle.value; // change the listbox item text
theCollisionPanel.style.display='none';
config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with THIS item
importStopped();
break;
case 'importMerge': // join existing and imported tiddler content
var theItem = theList.options[config.macros.importTiddlers.index];
for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)
if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;
var theImported = config.macros.importTiddlers.inbound[j];
var theExisting = store.getTiddler(theItem.value);
var theText = theExisting.text+'\n----\n^^merged from: ';
theText +='[['+config.macros.importTiddlers.src+'#'+theItem.value+'|'+config.macros.importTiddlers.src+'#'+theItem.value+']]^^\n';
theText +='^^'+theImported.modified.toLocaleString()+' by '+theImported.modifier+'^^\n'+theImported.text;
var theDate = new Date();
var theTags = theExisting.getTags()+' '+theImported.getTags();
theImported.set(null,theText,null,theDate,theTags);
theImported.status = 'merged with '+theExisting.title; // mark item as merged
theImported.status += ' - '+theExisting.modified.formatString("MM/DD/YYYY 0hh:0mm:0ss");
theImported.status += ' by '+theExisting.modifier;
theCollisionPanel.style.display='none';
config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with this item
importStopped();
break;
case 'importReplace': // substitute imported tiddler for existing tiddler
var theItem = theList.options[config.macros.importTiddlers.index];
for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)
if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;
var theImported = config.macros.importTiddlers.inbound[j];
var theExisting = store.getTiddler(theItem.value);
theImported.status = 'replaces '+theExisting.title; // mark item for replace
theImported.status += ' - '+theExisting.modified.formatString("MM/DD/YYYY 0hh:0mm:0ss");
theImported.status += ' by '+theExisting.modifier;
theCollisionPanel.style.display='none';
config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with THIS item
importStopped();
break;
case 'importListSmaller': // decrease current listbox size, minimum=5
if (theList.options.length==1) break;
theList.size-=(theList.size>5)?1:0;
config.macros.importTiddlers.listsize=theList.size;
break;
case 'importListLarger': // increase current listbox size, maximum=number of items in list
if (theList.options.length==1) break;
theList.size+=(theList.size<theList.options.length)?1:0;
config.macros.importTiddlers.listsize=theList.size;
break;
case 'importListMaximize': // toggle listbox size between current and maximum
if (theList.options.length==1) break;
theList.size=(theList.size==theList.options.length)?config.macros.importTiddlers.listsize:theList.options.length;
break;
}
}
//}}}
// // refresh listbox
//{{{
function refreshImportList(selectedIndex)
{
var theList = document.getElementById("importList");
if (!theList) return;
// if nothing to show, reset list content and size
if (!config.macros.importTiddlers.inbound)
{
while (theList.length > 0) { theList.options[0] = null; }
theList.options[0]=new Option('please open a document...',"",false,false);
theList.size=config.macros.importTiddlers.listsize;
return;
}
// get the sort order
if (!selectedIndex) selectedIndex=0;
if (selectedIndex==0) config.macros.importTiddlers.sort='title'; // heading
if (selectedIndex==1) config.macros.importTiddlers.sort='title';
if (selectedIndex==2) config.macros.importTiddlers.sort='modified';
if (selectedIndex==3) config.macros.importTiddlers.sort='tags';
if (selectedIndex>3) {
// display selected tiddler count
for (var t=0,count=0; t < theList.options.length; t++) count+=(theList.options[t].selected&&theList.options[t].value!="")?1:0;
clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));
return; // no refresh needed
}
// get the alphasorted list of tiddlers (optionally, filter out unchanged tiddlers)
var tiddlers=config.macros.importTiddlers.inbound;
tiddlers.sort(function (a,b) {if(a['title'] == b['title']) return(0); else return (a['title'] < b['title']) ? -1 : +1; });
// clear current list contents
while (theList.length > 0) { theList.options[0] = null; }
// add heading and control items to list
var i=0;
var indent=String.fromCharCode(160)+String.fromCharCode(160);
theList.options[i++]=new Option(tiddlers.length+' tiddler'+((tiddlers.length!=1)?'s are':' is')+' in the document',"",false,false);
theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="title" )?">":indent)+' [by title]',"",false,false);
theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="modified")?">":indent)+' [by date]',"",false,false);
theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="tags")?">":indent)+' [by tags]',"",false,false);
// output the tiddler list
switch(config.macros.importTiddlers.sort)
{
case "title":
for(var t = 0; t < tiddlers.length; t++)
theList.options[i++] = new Option(tiddlers[t].title,tiddlers[t].title,false,false);
break;
case "modified":
// sort descending for newest date first
tiddlers.sort(function (a,b) {if(a['modified'] == b['modified']) return(0); else return (a['modified'] > b['modified']) ? -1 : +1; });
var lastSection = "";
for(var t = 0; t < tiddlers.length; t++) {
var tiddler = tiddlers[t];
var theSection = tiddler.modified.toLocaleDateString();
if (theSection != lastSection) {
theList.options[i++] = new Option(theSection,"",false,false);
lastSection = theSection;
}
theList.options[i++] = new Option(indent+indent+tiddler.title,tiddler.title,false,false);
}
break;
case "tags":
var theTitles = {}; // all tiddler titles, hash indexed by tag value
var theTags = new Array();
for(var t=0; t<tiddlers.length; t++) {
var title=tiddlers[t].title;
var tags=tiddlers[t].tags;
if (!tags || !tags.length) {
if (theTitles["untagged"]==undefined) { theTags.push("untagged"); theTitles["untagged"]=new Array(); }
theTitles["untagged"].push(title);
}
else for(var s=0; s<tags.length; s++) {
if (theTitles[tags[s]]==undefined) { theTags.push(tags[s]); theTitles[tags[s]]=new Array(); }
theTitles[tags[s]].push(title);
}
}
theTags.sort();
for(var tagindex=0; tagindex<theTags.length; tagindex++) {
var theTag=theTags[tagindex];
theList.options[i++]=new Option(theTag,"",false,false);
for(var t=0; t<theTitles[theTag].length; t++)
theList.options[i++]=new Option(indent+indent+theTitles[theTag][t],theTitles[theTag][t],false,false);
}
break;
}
theList.selectedIndex=selectedIndex; // select current control item
if (theList.size<config.macros.importTiddlers.listsize) theList.size=config.macros.importTiddlers.listsize;
if (theList.size>theList.options.length) theList.size=theList.options.length;
}
//}}}
// // re-entrant processing for handling import with interactive collision prompting
//{{{
function importTiddlers(startIndex)
{
if (!config.macros.importTiddlers.inbound) return -1;
var theList = document.getElementById('importList');
if (!theList) return;
var t;
// if starting new import, reset import status flags
if (startIndex==0)
for (var t=0;t<config.macros.importTiddlers.inbound.length;t++)
config.macros.importTiddlers.inbound[t].status="";
for (var i=startIndex; i<theList.options.length; i++)
{
// if list item is not selected or is a heading (i.e., has no value), skip it
if ((!theList.options[i].selected) || ((t=theList.options[i].value)==""))
continue;
for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)
if (config.macros.importTiddlers.inbound[j].title==t) break;
var inbound = config.macros.importTiddlers.inbound[j];
var theExisting = store.getTiddler(inbound.title);
// avoid redundant import for tiddlers that are listed multiple times (when 'by tags')
if (inbound.status=="added")
continue;
// don't import the "ImportedTiddlers" history from the other document...
if (inbound.title=='ImportedTiddlers')
continue;
// if tiddler exists and import not marked for replace or merge, stop importing
if (theExisting && (inbound.status.substr(0,7)!="replace") && (inbound.status.substr(0,5)!="merge"))
return i;
// assemble tags (remote + existing + added)
var newTags = "";
if (config.macros.importTiddlers.importTags)
newTags+=inbound.getTags() // import remote tags
if (config.macros.importTiddlers.keepTags && theExisting)
newTags+=" "+theExisting.getTags(); // keep existing tags
if (config.macros.importTiddlers.addTags && config.macros.importTiddlers.newTags.trim().length)
newTags+=" "+config.macros.importTiddlers.newTags; // add new tags
inbound.set(null,null,null,null,newTags.trim());
// set the status to 'added' (if not already set by the 'ask the user' UI)
inbound.status=(inbound.status=="")?'added':inbound.status;
// do the import!
// OLD: store.addTiddler(in); store.setDirty(true);
store.saveTiddler(inbound.title, inbound.title, inbound.text, inbound.modifier, inbound.modified, inbound.tags);
store.fetchTiddler(inbound.title).created = inbound.created; // force creation date to imported value
}
return(-1); // signals that we really finished the entire list
}
//}}}
//{{{
function importStopped()
{
var theList = document.getElementById('importList');
var theNewTitle = document.getElementById('importNewTitle');
if (!theList) return;
if (config.macros.importTiddlers.index==-1)
importReport(); // import finished... generate the report
else
{
// DEBUG alert('import stopped at: '+config.macros.importTiddlers.index);
// import collision... show the collision panel and set the title edit field
document.getElementById('importCollisionPanel').style.display='block';
theNewTitle.value=theList.options[config.macros.importTiddlers.index].value;
}
}
//}}}
// // ''REPORT GENERATOR''
//{{{
function importReport(quiet)
{
if (!config.macros.importTiddlers.inbound) return;
// DEBUG alert('importReport: start');
// if import was not completed, the collision panel will still be open... close it now.
var panel=document.getElementById('importCollisionPanel'); if (panel) panel.style.display='none';
// get the alphasorted list of tiddlers
var tiddlers = config.macros.importTiddlers.inbound;
// gather the statistics
var count=0;
for (var t=0; t<tiddlers.length; t++)
if (tiddlers[t].status && tiddlers[t].status.trim().length && tiddlers[t].status.substr(0,7)!="skipped") count++;
// generate a report
if (count && config.options.chkImportReport) {
// get/create the report tiddler
var theReport = store.getTiddler('ImportedTiddlers');
if (!theReport) { theReport= new Tiddler(); theReport.title = 'ImportedTiddlers'; theReport.text = ""; }
// format the report content
var now = new Date();
var newText = "On "+now.toLocaleString()+", "+config.options.txtUserName
newText +=" imported "+count+" tiddler"+(count==1?"":"s")+" from\n[["+config.macros.importTiddlers.src+"|"+config.macros.importTiddlers.src+"]]:\n";
if (config.macros.importTiddlers.addTags && config.macros.importTiddlers.newTags.trim().length)
newText += "imported tiddlers were tagged with: \""+config.macros.importTiddlers.newTags+"\"\n";
newText += "<<<\n";
for (var t=0; t<tiddlers.length; t++) if (tiddlers[t].status) newText += "#[["+tiddlers[t].title+"]] - "+tiddlers[t].status+"\n";
newText += "<<<\n";
// 20060918 ELS: DON'T ADD "discard" BUTTON TO REPORT
// newText += "<html><input type=\"button\" href=\"javascript:;\" ";
// newText += "onclick=\"story.closeTiddler('"+theReport.title+"'); store.deleteTiddler('"+theReport.title+"');\" ";
// newText += "value=\"discard report\"></html>";
// update the ImportedTiddlers content and show the tiddler
theReport.text = newText+((theReport.text!="")?'\n----\n':"")+theReport.text;
theReport.modifier = config.options.txtUserName;
theReport.modified = new Date();
// OLD: store.addTiddler(theReport);
store.saveTiddler(theReport.title, theReport.title, theReport.text, theReport.modifier, theReport.modified, theReport.tags);
if (!quiet) { story.displayTiddler(null,theReport.title,1,null,null,false); story.refreshTiddler(theReport.title,1,true); }
}
// reset status flags
for (var t=0; t<config.macros.importTiddlers.inbound.length; t++) config.macros.importTiddlers.inbound[t].status="";
// refresh display if tiddlers have been loaded
if (count) { store.setDirty(true); store.notifyAll(); }
// always show final message when tiddlers were actually loaded
if (count) displayMessage(config.macros.importTiddlers.importedMsg.format([count,tiddlers.length,config.macros.importTiddlers.src]));
}
//}}}
/***
!!!!!TW 2.1beta Core Code Candidate
//The following section is a preliminary 'code candidate' for incorporation of non-interactive 'load tiddlers' functionality into TW2.1beta. //
***/
//{{{
// default cookie/option values
if (!config.options.chkImportReport) config.options.chkImportReport=true;
config.macros.loadTiddlers = {
label: "",
prompt: "add/update tiddlers from '%0'",
askMsg: "Please enter a local path/filename or a remote URL",
openMsg: "Opening %0",
openErrMsg: "Could not open %0 - error=%1",
readMsg: "Read %0 bytes from %1",
foundMsg: "Found %0 tiddlers in %1",
nochangeMsg: "'%0' is up-to-date... skipped.",
loadedMsg: "Loaded %0 of %1 tiddlers from %2"
};
config.macros.loadTiddlers.handler = function(place,macroName,params) {
var label=(params[0] && params[0].substr(0,6)=='label:')?params.shift().substr(6):this.label;
var prompt=(params[0] && params[0].substr(0,7)=='prompt:')?params.shift().substr(7):this.prompt;
var filter="updates";
if (params[0] && (params[0]=='all' || params[0]=='new' || params[0]=='changes' || params[0]=='updates'
|| params[0].substr(0,8)=='tiddler:' || params[0].substr(0,4)=='tag:'))
filter=params.shift();
var src=params.shift(); if (!src || !src.length) return; // filename is required
var quiet=(params[0]=="quiet"); if (quiet) params.shift();
var ask=(params[0]=="confirm"); if (ask) params.shift();
var force=(params[0]=="force"); if (force) params.shift();
if (label.trim().length) {
// link triggers load tiddlers from another file/URL and then applies filtering rules to add/replace tiddlers in the store
createTiddlyButton(place,label.format([src]),prompt.format([src]), function() {
if (src=="ask") src=prompt(config.macros.loadTiddlers.askMsg);
loadRemoteFile(src,loadTiddlers,quiet,ask,filter,force);
})
}
else {
// load tiddlers from another file/URL and then apply filtering rules to add/replace tiddlers in the store
if (src=="ask") src=prompt(config.macros.loadTiddlers.askMsg);
loadRemoteFile(src,loadTiddlers,quiet,ask,filter,force);
}
}
function loadTiddlers(src,html,quiet,ask,filter,force)
{
var tiddlers = readTiddlersFromHTML(html);
var count=tiddlers?tiddlers.length:0;
if (!quiet) displayMessage(config.macros.loadTiddlers.foundMsg.format([count,src]));
var count=0;
if (tiddlers) for (var t=0;t<tiddlers.length;t++) {
var inbound = tiddlers[t];
var theExisting = store.getTiddler(inbound.title);
if (inbound.title=='ImportedTiddlers')
continue; // skip "ImportedTiddlers" history from the other document...
// apply the all/new/changes/updates filter (if any)
if (filter && filter!="all") {
if ((filter=="new") && theExisting) // skip existing tiddlers
continue;
if ((filter=="changes") && !theExisting) // skip new tiddlers
continue;
if ((filter.substr(0,4)=="tag:") && inbound.tags.find(filter.substr(4))==null) // must match specific tag value
continue;
if ((filter.substr(0,8)=="tiddler:") && inbound.title!=filter.substr(8)) // must match specific tiddler name
continue;
if (!force && store.tiddlerExists(inbound.title) && ((theExisting.modified.getTime()-inbound.modified.getTime())>=0))
{ if (!quiet) displayMessage(config.macros.loadTiddlers.nochangeMsg.format([inbound.title])); continue; }
}
// get confirmation if required
if (ask && !confirm((theExisting?"Update":"Add")+" tiddler '"+inbound.title+"'\nfrom "+src))
{ tiddlers[t].status="skipped - cancelled by user"; continue; }
// DO IT!
// OLD: store.addTiddler(in);
store.saveTiddler(inbound.title, inbound.title, inbound.text, inbound.modifier, inbound.modified, inbound.tags);
store.fetchTiddler(inbound.title).created = inbound.created; // force creation date to imported value
tiddlers[t].status=theExisting?"updated":"added"
count++;
}
if (count) {
// refresh display
store.setDirty(true);
store.notifyAll();
// generate a report
if (config.options.chkImportReport) {
// get/create the report tiddler
var theReport = store.getTiddler('ImportedTiddlers');
if (!theReport) { theReport= new Tiddler(); theReport.title = 'ImportedTiddlers'; theReport.text = ""; }
// format the report content
var now = new Date();
var newText = "On "+now.toLocaleString()+", "+config.options.txtUserName+" loaded "+count+" tiddlers from\n[["+src+"|"+src+"]]:\n";
newText += "<<<\n";
for (var t=0; t<tiddlers.length; t++) if (tiddlers[t].status) newText += "#[["+tiddlers[t].title+"]] - "+tiddlers[t].status+"\n";
newText += "<<<\n";
// 20060918 ELS: DON'T ADD "discard" BUTTON TO REPORT
// newText += "<html><input type=\"button\" href=\"javascript:;\" ";
// newText += "onclick=\"story.closeTiddler('"+theReport.title+"'); store.deleteTiddler('"+theReport.title+"');\" ";
// newText += "value=\"discard report\"></html>";
// update the ImportedTiddlers content and show the tiddler
theReport.text = newText+((theReport.text!="")?'\n----\n':"")+theReport.text;
theReport.modifier = config.options.txtUserName;
theReport.modified = new Date();
// OLD: store.addTiddler(theReport);
store.saveTiddler(theReport.title, theReport.title, theReport.text, theReport.modifier, theReport.modified, theReport.tags);
if (!quiet) { story.displayTiddler(null,theReport.title,1,null,null,false); story.refreshTiddler(theReport.title,1,true); }
}
}
// always show final message when tiddlers were actually loaded
if (!quiet||count) displayMessage(config.macros.loadTiddlers.loadedMsg.format([count,tiddlers.length,src]));
}
function loadRemoteFile(src,callback,quiet,ask,filter,force) {
if (src==undefined || !src.length) return null; // filename is required
if (!quiet) clearMessage();
if (!quiet) displayMessage(config.macros.loadTiddlers.openMsg.format([src]));
if (src.substr(0,4)!="http" && src.substr(0,4)!="file") { // if not a URL, fallback to read from local filesystem
var txt=loadFile(src);
if ((txt==null)||(txt==false)) // file didn't load
{ if (!quiet) displayMessage(config.macros.loadTiddlers.openErrMsg.format([src,"(unknown)"])); }
else {
if (!quiet) displayMessage(config.macros.loadTiddlers.readMsg.format([txt.length,src]));
if (callback) callback(src,convertUTF8ToUnicode(txt),quiet,ask,filter,force);
}
}
else {
var x; // get an request object
try {x = new XMLHttpRequest()} // moz
catch(e) {
try {x = new ActiveXObject("Msxml2.XMLHTTP")} // IE 6
catch (e) {
try {x = new ActiveXObject("Microsoft.XMLHTTP")} // IE 5
catch (e) { return }
}
}
// setup callback function to handle server response(s)
x.onreadystatechange = function() {
if (x.readyState == 4) {
if (x.status==0 || x.status == 200) {
if (!quiet) displayMessage(config.macros.loadTiddlers.readMsg.format([x.responseText.length,src]));
if (callback) callback(src,x.responseText,quiet,ask,filter,force);
}
else {
if (!quiet) displayMessage(config.macros.loadTiddlers.openErrMsg.format([src,x.status]));
}
}
}
// get privileges to read another document's DOM via http:// or file:// (moz-only)
if (typeof(netscape)!="undefined") {
try { netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); }
catch (e) { if (!quiet) displayMessage(e.description?e.description:e.toString()); }
}
// send the HTTP request
try {
var url=src+(src.indexOf('?')<0?'?':'&')+'nocache='+Math.random();
x.open("GET",src,true);
if (x.overrideMimeType) x.overrideMimeType('text/html');
x.send(null);
}
catch (e) {
if (!quiet) {
displayMessage(config.macros.loadTiddlers.openErrMsg.format([src,"(unknown)"]));
displayMessage(e.description?e.description:e.toString());
}
}
}
}
function readTiddlersFromHTML(html)
{
// extract store area from html
var start=html.indexOf('<div id="storeArea">');
var end=html.indexOf("<!--POST-BODY-START--"+">",start);
if (end==-1) var end=html.indexOf("</body"+">",start); // backward-compatibility for older documents
var sa="<html><body>"+html.substring(start,end)+"</body></html>";
// load html into iframe document
var f=document.getElementById("loaderFrame"); if (f) document.body.removeChild(f);
f=document.createElement("iframe"); f.id="loaderFrame";
f.style.width="0px"; f.style.height="0px"; f.style.border="0px";
document.body.appendChild(f);
var d=f.document;
if (f.contentDocument) d=f.contentDocument; // For NS6
else if (f.contentWindow) d=f.contentWindow.document; // For IE5.5 and IE6
d.open(); d.writeln(sa); d.close();
// read tiddler DIVs from storeArea DOM element
var sa = d.getElementById("storeArea");
if (!sa) return null;
sa.normalize();
var nodes = sa.childNodes;
if (!nodes || !nodes.length) return null;
var tiddlers = [];
for(var t = 0; t < nodes.length; t++) {
var title = null;
if(nodes[t].getAttribute)
title = nodes[t].getAttribute("tiddler");
if(!title && nodes[t].id && (nodes[t].id.substr(0,5) == "store"))
title = nodes[t].id.substr(5);
if(title && title != "")
tiddlers.push((new Tiddler()).loadFromDiv(nodes[t],title));
}
return tiddlers;
}
//}}}
On May 10, 2007 5:27:23 PM CDT, YourName imported 15 tiddlers from
[[/Users/dave/Documents/TiddlyWiki/DSWiki.html|/Users/dave/Documents/TiddlyWiki/DSWiki.html]]:
<<<
#[[AppleMac]] - added
#[[DefaultTiddlers]] - replaces DefaultTiddlers - 11/8/2006 11:21:00 by ELSDesignStudios
#[[EmbeddingImages]] - added
#[[KnifeInfo]] - added
#[[MainMenu]] - added
#[[QuickReference]] - added
#[[ReferenceLinks]] - added
#[[SiteSetup]] - added
#[[SiteSubtitle]] - added
#[[SiteTitle]] - added
#[[SparkLines]] - added
#[[WebCycle]] - added
#[[WikiMap]] - added
#[[WikiReference]] - added
#[[WikiToDo]] - added
<<<
[[This Old House|http://www.oldhouseweb.com/stories/How-To/Home_Inspection/]] has a great Checklist to use for inspecting a building.
<<gradient vert #ffffff #ddffdd #88ff88>>Conference Calling - AUDIO>>
Toll Free Dial In Number: (866) 470-8027
Conference Code: 3148957235
Leader PIN: 7283
<<gradient vert #ffffff #ddffdd #88ff88>>Conference Calling - Instructions for Callers>>
{{{
To join this conference call:
1) Dial 866-470-8027
2) When asked, enter Conference Code 3148957235 follwed by #
To mute your line press *6. To un-mute press #6
}}}
<<gradient vert #ffffff #ddffdd #88ff88>>Conference Calling - Keyboard Shortcuts>>
Helpful Reservationless Plus Keypad Commands:
| *0 |Operator Assistance - conference |
| 00 |Operator Assistance - individual |
| *1 |Dial out to a participant |
| *2 |Begin/End Conference Record |
| *3 |Change Entry/Exit method (Recorded Names, Tones, Silence) |
| *4 |Private Roll Call |
| *5 / #5 |Mute/Unmute - group (all lines except Leader's) |
| *6 / #6 |Mute/Unmute - individual |
| *7 / #7 |Lock/Unlock conference (including Operator) |
| *8 |Allow/Disallow Conference Continuation |
| *# |Participant Count |
| ** |List available keypad commands |
1. Give your participants the date and time of the call, your Dial In Number and your Conference Code.
2. At the specified time, dial your Reservationless Plus Dial In Number.
3. When prompted, enter your Conference Code followed by #.
4. When prompted, press * to identify yourself as the call leader, then enter your Leader PIN followed by #.
5. Press 1 to begin your conference or Press 2 to access your default conference options.
<<gradient vert #ffffff #ddffdd #88ff88>>Web Ex>>
Go to [[www.conferenceplace.com|http://www.conferenceplace.com]]
Login: 3358717
Web Pin: 6073 + two zeros
<<gradient vert #ffffff #ddffdd #88ff88>>General Information>>
Owner Name: David Steidmann
Company Name: DCSI
Owner Number: 3358717
Web PIN: 6073
Your Sales Contact: Diane Jensen, (913) 402-0786, dijensen@intercall.com
Customer Service: (800) 374-2441 or (706) 645-8600
Not surprisingly, I'm pretty in to knives. I have a couple of Abel knives for every day carry.
I want a [[Microtech|http://www.microtechknives.com/index.php]]. I'm particularly fond of the Scarab and the Vector. There's a website called [[Microholics|http://www.microholics.org]] that's dedicated to fans of the Microtech.
I also own a Timberland ~SpecWar. It's not really made anymore but it's cool as hell.
Okay, so... I'm going to learn Blender if it kills me.
I have a good work project that should help the process. I want to start transferring my diagrams to 3D. So, in order to do this, I'll need to...
* Get the basics down
* Create a library of Blender objects
** Draw some sketches (arrows, twisty arrow, bottlenecks etc.)
** BlenderObjects
** I'm sure more will come from actually making diagrams
* Create some materials or textures to use
* Create a stock "scene" for the diagrams
** Seamless white photo background (sheet that bends up, like the demos for Cinema4D)
** Bright, clear lighting (ala apple or Cinema4D demos)
* Learn the shortcuts to
** Drop in an Object
** Rotate and "align"
** Add text (like labels) and extrude into 3D
** Add a "highlight" in the form of a spotlight
** Render into a jpeg to drop onto a slide
WebCycle
WikiToDo
ReferenceLinks
WikiMap
[[Google|http://www.google.com/]]
QuickReference
SiteSetup
This is the new display and interface technology.
Used in the iPhone and with [[Microsoft Surface|http://www.microsoft.com/surface/]]
SolarCells ComputerStuff FireArms InformationPresentation VideoProduction PhotoInfo
After much screwing around I've found a phototography workflow that finally fits my varied needs.
# Capture (using Image Capture on the Mac or PSRaw or Capture One or whatever) to RAWTANK
# Move captured images into Diginegs[x], where each subfolder is <500~600MB
# Archive each Diginegs[x] folder to a CD for permanent storage
# Copy images with potential to the appropriate Description Folder (such as FamilyReunion2008 or GennyArtShow)
# Process photographs //inside// their description folder and keep the original as well
# For projects that require non-photo image source material, collect all images and data (tutorial files, graphics etc) into a Project Folder
# Copy great phots and processed photos into Greatest Hits or Learning folders
Note that the contents of RAWTANK can be deleted at any time. Also any non-current Digineg folder may be deleted at any time.
I did a cool thing on my mac where I used a background image that was created in OmniGraffle to visually remind myself of the workflow I designed. It's slicker than hell. Essentially, all the data locations are on "pads" and arrows denote the path the data flows on. Then, I've put links to the appropriate "helper" applications (Fetch FTP, automator actions etc.) to facilitate the data processing stuff. I rock.
What video formats do I need to create?
# Archival version (Prores 422? or HDV out?)
## Full res (1440 x 1080 24p)
## Needs to fit on a DVD (<4GB)
## HDV would probably be sufficient
# DVD version
## Video MPEG-2
## 2 Channel Audio
## 5.1 Audio
# iPod/iPhone versions
## iPhone version (640x480 full frame rate, high bit rate)
## iPod version (for older video iPods, 600 kbps)
# Web versions
## The key is we need a sub 4MB version and a larger, high-bandwidth version
## 800 kbps
## 300 kbps
## .wmv file for pure windows compatibility
!!Dude, Trouble! (Problems with a first draft of the workflow)
Need to learn the keyboard shortcuts for FCP
!!Requirements:
* Shoot once, edit once, one click publish for HD, Web, DVD, YouTube, Email,
* What are the sizes that I want for web delivery vs CD vs whatever?
* ProRes 422 HQ (1.2G/min) vs ProRes 422 (0.8GB/min)? There's a pretty interesting [[white paper on the ProRes codec|http://images.apple.com/jp/finalcutstudio/resources/white_papers/L342568A_ProRes_WP.pdf]] from Apple.
* Figure out how to point FCP scratch disks the right place AND how to get the captured clips named correctly (Reel, Shot, etc.)
* Fairly simple to back up, but it's not a Hollywood production
* The workflow should be as streamlined as possible. Automated copy processes, droplets, Automator Workflows etc.
* The workflow should have a visual cue //a la// the photo workflow to help me remember how to go through it.
!!Draft Workflow
* Duplicate {{{Blank Project Hierarchy}}} to appropriate place
* Select a custom Easy Setup called "Capture HV30 60i for Compressor 24p"
* Point scratch disk directories to the correct place
* Capture from HV30 in FCP6 using that preset
* Close FCP 6
* Run a batch process in Compressor to do the pulldown from 60i to 24P * (there should be a HQ batch process and a regular quality batch process)
* Re-open FCP6 using the appropriate ProRes 422 Easy Setup
* Import the processed footage
* Edit
* Effects
* Sound
* Grading
* Compositing
* Render out a final version of the video
* Run a batch process in Compressor to convert the final rendered video to Web, iPod, DVD (NTSC), and HD versions.
* Use an automated process to collect the project files, media files into the blank hierarchy.
* Archive the appropriate stuff.
* Use an automated process to delete now unused temporary renders etc.
Start up all Applications
Wireless keyboard
Tablet (with new driver)
Volume knob
MS Office
Sync iPods
Nuke 4/5? (from old Mac)
Real Flow
Tube Sock
Document the working version of the video workflow. See here: [[Apple HV30 24p article|http://docs.info.apple.com/article.html?artnum=306389]] Also, test how clips get named and how to do batches etc.
Test ProRes 422 normal vs High Quality
Delete application images
I need to figure out how to do ExternalDiskStorage better
OpenHAN has a [[sharepoint website|http://sharepoint.ucausersgroup.org/OpenHAN/default.aspx]]
The site is run by a guy named Erich Gunther who works for [[EnerNex|http://www.enernex.com/]]
I have a Canon 10D with two lenses an [[EF 28-135mm f/3.5-5.6 IS USM|http://www.usa.canon.com/consumer/controller?act=ModelInfoAct&fcategoryid=149&modelid=7337]] and an [[EF 17-40mm f4L USM|http://www.usa.canon.com/consumer/controller?act=ModelInfoAct&fcategoryid=148&modelid=8940]]. All indications are that [[Canon|http://www.usa.canon.com/consumer/controller?act=ProductCatIndexAct&fcategoryid=111]] makes some great cameras.
I also have a Canon ~AE-1 and a couple lenses that were my grandfather's.
You can find details on MyPhotoWorkflow
[[DPReview|http://www.dpreview.com]] has the best camera reviews on the planet.
[[Luminous Landscape|http://www.luminous-landscape.com]] has some amazing stuff. Including fantastic pictures.
[[Phase One|http://www.phaseone.com/]] makes digital backs as well as [[Capture One|http://www.phaseone.com/Content/Software.aspx]] I used Capture One for a little while and found it to be quite good. It added some complexity to the workflow, but the pictures that came out of the process looked great. Also, there's a feature in Photoshop that captures RAW formats. It works pretty well, but I'm not sure that it's quite as amazing as Capture One.
In the extreme I'd want a [[Hasselblad|http://www.hasselblad.com/]]. They make the [[H3D|http://www.hasselblad.com/products/h-system/h3d.aspx]]. It's absurdly expensive, and the folks at Luminous Landscape wonder if medium format's days are numbered.
[[Peter Lik Photography|http://peterlik.com/home.php]] has some really remarkable images
[[B&H Photo Video|http://www.bhphotovideo.com/]] is the key place to pick up photo gear.
[[Bryan F. Petersen|http://www.bryanfpeterson.com]] wrote a great book on photography called __Learning to See Creatively__.
[[B&H Photo Video|http://www.bhphotovideo.com/]] DVXUser HV20Forum
MyPhotoWorkflow
Canon10D
CanonHV30
CameraBag
I had this wild hair that I might want to power my home's computers with solar power. At least it would be a good engineering exercise to figure it all out, and who knows, maybe the experience will help inform me about powering my whole house with solar. But first some requirements
PoweringHomeComputersWithSolarRequirements
PoweringHomeComputersWithSolarMath
PoweringHomeComputersWithSolarTechnicalDetails
PoweringHomeComputersWithSolarVendors
First some basics: Watts = Volts X Amps, Amps = Watts / Volts,
Table of Computer Power Draw (in Watts)
| !Machine | !Off | !Sleep/Standby* | !Charging | !Light Use | !Heavy Use |
| ~MacBook Pro | | | 42 | 21 | 49 |
| Vaio 2 | | | 19 | | |
| HP Desktop | | | | | |
| LCD Monitor | | | N/A | 80 (est.) | |
| AA Battery Charger | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
Note: V2 uses 35 Watts when playing videos AND charging, MBP uses 61 watts during light use AND charging
Daily Time in Each State (in Hours)
| !Machine | !Off | !Sleep/Standby* | !Charging | !Light Use | !Heavy Use |
| ~MacBook Pro | 0 | | 2 | 4 | 2 |
| Vaio 2 | | | 3 | | |
| HP Desktop | | | | | |
| LCD Monitor | | | N/A | 80 (est.) | |
| AA Battery Charger | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
Watt Hours by Machine State and Totals (per day)
| !Machine | !Off | !Sleep/Standby* | !Charging | !Light Use | !Heavy Use | !Total |
| ~MacBook Pro | | | | 84 | 98 | |
| Vaio 2 | | | 57 | | | |
| HP Desktop | | | | | | |
| LCD Monitor | | | N/A | 80 (est.) | | |
| AA Battery Charger | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| !Total | | | | | | |
* Sleep/Standby is calculated with a fully charged battery (if appropriate)
Useable sunlight hours assumption = 5 hrs per day
|J|F|M|A|M|J|J|A|S|O|N|D|
| 4| 6| 7| 8| 9| 10| 10| 9| 9| 8| 6| 4|
* Solar Panels fit on my roof.
* System should provide enough power to run all computers in the house each day AND provide enough power to charge drained batteries
* System should store enough energy to run all computers in house for 3 days.
*
<<gradient horiz #b0b0b0 #ffffff>>@@font-size:16pt; This gradient heading uses syntax below @@>>
{{{<<gradient horiz #B0B0B0 #ffffff>>@@font-size:16pt; TEXT @@>>}}}
To create a link to an external page use this syntax: {{{[[linktext|http://www.url.com]]}}}
| !To get | !Type this |h
| ''Bold'' | {{{''Bold''}}} |
| --Strikethrough-- | {{{--Strikethrough--}}} |
| __Underline__ | {{{__Underline__}}} (that's two underline characters) |
| //Italic// | {{{//Italic//}}} |
| Superscript: 2^^3^^=8 | {{{2^^3^^=8}}} |
| Subscript: a~~ij~~ = -a~~ji~~ | {{{a~~ij~~ = -a~~ji~~}}} |
| @@highlight@@ | {{{@@highlight@@}}} |
<<<
Here is a block quote made by putting three '<' on a blank line
the text of the block quote on the next line
And a last line with three '<'
<<<
* Make bullet points by putting an '*' at the beginning of the line
** Indent a bullet point with two '**'
# you can also make numbered lists using a '#'
# with automated numbers
## and even sub-numbered lists with two '##'
| !Make a Table | !Header Cells start with a ! |
| Vertical pipes | separate cells |
|No space on left pipe of the cell | means to left justify |
| No space on right pipe| means to right justify |
{{{Monospaced Text}}} uses three brackets '{' {{{to start it and three close brackets}}} '}' to end it
{{{
When the three "{" appear on a single line
And then the text to be monospaced appears on the next lines
It makes a cool box and looks like computer code. It ends with three '}'
}}}
<<gradient horiz #b0b0b0 #ffffff>>@@font-size:16pt; This gradient heading uses syntax below @@>>
{{{<<gradient horiz #B0B0B0 #ffffff>>@@font-size:16pt; TEXT @@>>}}}
The first parameter can be ''vert'' or ''horiz'' to indicate the direction of the gradient. The following parameters are two or more colours (CSS RGB(r,g,b) format is also acceptable). The GradientMacro constructs a smooth linear gradient between each of the colours in turn.
| <<gradient vert #ffffff #ffdddd #ff8888>>No images were harmed in the making of this gradient fill>> | <<gradient vert #ffffff #ddffdd #88ff88>>No images were harmed in the making of this gradient fill>> | <<gradient vert #ffffff #ddddff #8888ff>>No images were harmed in the making of this gradient fill>> |
[[HTML Colors|http://www.w3schools.com/html/html_colors.asp]] are specified with six HEX (0-F) digits They're in blocks of two corresponding to RR,GG,BB. Essentially, 00's represent NO color (thus 000000 is black) and FF's represent total color (thus FFFFFF is white). Here are some other nice colors.
@@background-color:#303030;color:#ffffff;303030@@ @@background-color:#606060;color:#ffffff;606060@@ @@background-color:#909090;color:#FFFFFF;909090@@ @@background-color:#B0B0B0;color:#FFFFFF;~B0B0B0@@ @@background-color:#F0F0F0;color:#FFFFFF;~F0F0F0@@
@@background-color:#FF0000;color:#ffffff;~FF0000@@ @@background-color:#00FF00;color:#000000;00FF00@@ @@background-color:#0000FF;color:#ffffff;0000FF@@ @@background-color:#FFFF00;color:#000000;~FFFF00@@ @@background-color:#FF00FF;color:#ffffff;~FF00FF@@ @@background-color:#00FFFF;color:#000000;00FFFF@@
@@background-color:#FF0000;color:#ffffff;font-size:18pt;18 Point White Text on Red Background@@
{{{
@@background-color:#FF0000;color:#000000;
font-size:18pt;18 Point White Text on Red Background@@
}}}
!Headers start with a '!'
!!Subheaders start with two '!!'
| !To get | !Type this |h
| ''Bold'' | {{{''Bold''}}} |
| --Strikethrough-- | {{{--Strikethrough--}}} |
| __Underline__ | {{{__Underline__}}} (that's two underline characters) |
| //Italic// | {{{//Italic//}}} |
| Superscript: 2^^3^^=8 | {{{2^^3^^=8}}} |
| Subscript: a~~ij~~ = -a~~ji~~ | {{{a~~ij~~ = -a~~ji~~}}} |
| @@highlight@@ | {{{@@highlight@@}}} |
The highlight can accept CSSSyntax
|!Format|!It will look like this...|!...if you format it like this...|
|Bold-faced type|''text''|{{{''text''}}}|
|Italic text|//text//|{{{//text//}}}|
|Underlined text|__text__|{{{__text__}}}|
|Strike-through text|--text--|{{{--text--}}}|
|Links with wikiwords|EnchiLada (inactive link - no tiddler yet)<br>WikiWord (active link to tiddler)|{{{EnchiLada}}}<br>{{{WikiWord}}}|
|~De-Wikify a ~WikiWord|~WikiWord, ~EnchiLada|{{{~WikiWord, ~EnchiLada}}}|
|Links with brackets|[[How to add background images]]|{{{[[How to add background images]]}}}|
|Pretty links|[[display text|ColorSchemes]] - links to the tiddler of color schemes|{{{[[display text|ColorSchemes]]}}}|
|External links work the same way:|http://groups.google.com/group/TiddlyWiki <br><br>[[TiddlyWiki Google group|http://groups.google.com/group/TiddlyWiki]]|{{{http://groups.google.com/group/TiddlyWiki}}} <br><br> {{{[[TiddlyWiki Google group|http://groups.google.com/group/TiddlyWiki]]}}}|
|Links to local files|To a file on a CD in your D drive: <br><br>To a file on your USB stick on your e drive: <br><br>To a file in your hard drive:|{{{file:///D:/filename.doc/}}}<br><br>{{{file:///E:/filename.doc/}}}<br><br>{{{file:///C:/filepath/filename.doc/}}}|
|Colored text|@@color(green):green colored@@|{{{@@color(green):green colored@@}}}|
|Text with colored background|@@bgcolor(#ff0000):color(#ffffff):red colored@@|{{{@@bgcolor(#ff0000):color(#ffffff):red colored@@}}}|
|Highlighting|@@text@@|{{{@@text@@}}}|
|Superscript|2^^3^^=8|{{{2^^3^^=8}}}|
|Subscript|a~~ij~~ = -a~~ji~~|{{{a~~ij~~ = -a~~ji~~}}}|
''Simple indenting:''
{{{ {{indent{text }}} produces:
{{indent{text
''Numbered lists:''
{{{#item one }}}
{{{##Item 1a}}}
{{{###Item 1ai}}}
produces:
#item one
##Item 1a
###Item 1ai
''Bulleted lists:''
{{{*Bullet one}}}
{{{**Bullet two}}}
{{{***Bullet three}}}
produces:
*Bullet one
**Bullet two
***Bullet level three
''Headlines''
{{{!Text}}} produces:
!Text
{{{!!Text}}} produces:
!!Text
{{{!!!Text}}} produces:
!!!Text
and so on.
''Tables:''
This is the formatting:
{{{|!Table header|!Column Two|}}}
{{{|>| colspan |}}}
{{{| rowspan |left aligned|}}}
{{{|~| right aligned|}}}
{{{|bgcolor(#DC1A1A):colored| centered |}}}
{{{||*lists<br>*within<br>*tables<br><br>and double-spaced too|}}}
{{{|caption|c}}}
This is the result:
|!Table header|!Column Two|
|>| colspan |
| rowspan |left aligned|
|~| right aligned|
|bgcolor(#DC1A1A):colored| centered |
||*lists<br>*within<br>*tables<br><br>and double-spaced too|
|caption|c
To align a cell so that its text displays at the top rather than the center, add {{{vertical-align:top;}}} at the beginning of the cell.
''Images:''
{{{[img[http://farm1.static.flickr.com/39/122259544_6913ca58f3_m.jpg]]}}} is the formatting for:
[img[http://farm1.static.flickr.com/39/122259544_6913ca58f3_m.jpg]]
''Dotted horizontal lines:''
{{{----}}} produces:
----
''Line-by-line blockquotes:''
{{{>level 1}}}
{{{>level 1}}}
{{{>>level 2}}}
{{{>>level 2}}}
{{{>>>level 3}}}
{{{>>>level 3}}}
{{{>>level 2}}}
{{{>level 1}}}
produces:
>level 1
>level 1
>>level 2
>>level 2
>>>level 3
>>>level 3
>>level 2
>level 1
''Extended blockquotes:''
{{{<<<}}}
{{{Extended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotes}}}
{{{<<<}}}
produces:
<<<
Extended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotes
<<<
<<gradient horiz #B0B0B0 #ffffff>>External links that might be useful. (They open in a new browser window)>>
[[NOAA Weather Service|http://www.nws.noaa.gov/]] [[STL Radar|http://radar.weather.gov/radar.php?rid=lsx&product=N0R&overlay=11101111&loop=no]] [[STL Forecast|http://www.crh.noaa.gov/ifps/MapClick.php?CityName=Saint+Louis&state=MO&site=LSX]] [[US IR Satellite|http://www.goes.noaa.gov/ECIR4.html]] [[WeatherUndergroud|http://www.weatherunderground.com/cgi-bin/findweather/getForecast?query=63103]]
<<gradient horiz #B0B0B0 #ffffff>>News sources>>
[[FARK|http://www.fark.com]] [[NPR|http://www.npr.org]] [[Snopes|http://www.snopes.com]] [[Laramie Daily Boomerang|http://www.laramieboomerang.com/index.asp]] [[CNN|http://www.cnn.com/]] [[BBC|http://news.bbc.co.uk/]] [[Economist|http://www.economist.com/index.html]] [[WSJ|http://online.wsj.com/public/us]] [[NYTimes|http://nytimes.com/]] [[ESPN|http://espn.go.com/]]
<<gradient horiz #B0B0B0 #ffffff>>Tiddlers that contain reference information.>>
[[Atomic Clock|http://www.time.gov/]] QuickHelp QuickReference WikiReference
Oh the marvelous iPod from Apple. I have a 60GB Video 5th Generation version. And I also have an AppleiPhone. Love em both. Here's how you get a DVD onto them:
<<gradient horiz #B0B0B0 #ffffff>>60GB Video iPod 5th Generation>>
# Rip the DVD using MacTheRipper or DVDDecrypt or whatever
# Encode the movie using [[Handbrake|http://www.handbrake.org]]
Here are the settings I use.
.mp4 file
x264 Baseline profile
Bit Rate must be between 384 and 768. I use 400 and 700 depending on my desired quality level
Picture settings:
| Source | Width | Height |h
| Anamorphic | 416 | 176 |
| 16x9 | 368 | 208 |
| 4x3 | 320 | 240 |
Note that both Width and Height must be divisible by 16. Also, Width * Height must be less than 78,000. These are restrictions placed on the h.264 codec.
The Windows Handbrake command line syntax is:
{{{
hbtest.exe -i "Input_Path" -o output_path_file.mp4 -e x264b13 -w 416 -l 192 -b 768
}}}
Note: the "-i" switch needw quotes around the path, the -o switch needs ".mp4" as the file extension, and note the space after the switches.
<<gradient horiz #B0B0B0 #ffffff>>iPhone 1st Generation>>
MainMenu - For menu on left
DefaultTiddlers - Tiddlers shown on startup
SiteTitle
SiteSubtitle
This version has some PlugIns installed. There is an ImportTiddlersPlugin with an ImportTiddlersPanel and an ExportTiddlersPlugin with an ExportTiddlersPanel that have been quite useful. Most can be found at [[Tiddly Tools|http://www.tiddlytools.com]]
My non-linear web notebook
There are a bunch of tiddlers with Solar Stuff. I think I was mostly experimenting with tiddler organization.
A good first step though is USBSolar. The idea here is that for small devices, USB is a pretty good standard. I can charge my iPods, iPhone, Treo, and AA/AAA batteries through a standard USB port. Think of it as a jumping off point into larger solar installations
PoweringComputersWithSolar, PoweringHomeComputersWithSolarMath, and PoweringHomeComputersWithSolarResources.
[[Solar Shingles|http://www.solar-components.com/pvshingl.htm]]
86"x12" = 7 ft^2 = 17 Watts ==> 2.3W/ft^2
3kW of power would require 3000/2.3 = 1300 ft^2 of roof space.which is roughly 36 ft per side.
A typical 2 car garage would be about 24' x 26' footprint. A "mineshaft modern" version would give about 600ft^ of roof space. That is about 1.4kW of solar space. If you get 5 hours of usable sun per day, that's about 7 kWh of power.
If an A/C unit draws 11 Amps at 220V that's about 1.7kW of power which isn't quite driven by the solar. But the A/C unit isn't likely to run all the time, so I'm not exactly sure how much power it takes.
A "Sparkline" is a small, intense, word-like graphic. It lives in-line with the text and essentially gives a up/down view of numerical values.
{{{
<<sparkline 163 218 ... 1328 1611>>
}}}
The values of "stuff" goes moves in cyclic <<sparkline 6 7 6 8 15 21 22 18 7 -2 -5 -1 0>> fashion.
I've always thought that having all the stuff you need on a flash drive would be pretty cool. The idea is that if ALL of your data AND ALL of your applications are on a single flash drive, then you could just put that drive into whatever computer happened to be in front of you at that moment and BAM! it's just like your computer.
To that end, I've got a USB Micro Vault Tiny 2GB drive to try something like that.
On the device I'd want...
* This TiddlyWiki
* A thin email client
* Light weight image editing/drawing software
* Light weight office software (how big is OO?)
* Light weight audio software (Audacity maybe)
* My Documents of various kinds...
How will I handle version control?
Type the text for 'USBSolar'
So I've been playing with Teleport on the iPhone. I bought it from the iTunes store for 25 bucks.
It's software from www.jugaari.com It works frickin' fantastic on my local WiFi network. But, I'm now trying to get it to work over Edge/3G.
I have an account at www.no-ip.com
username: david@g-ink.com
password: standard web password
The host name I've chosen is:
he host davidsteidtmann.no-ip.biz resolving to 70.130.243.197 has successfully been added to our system. New additions will take up to 5 minutes to become live on our DNS servers.
I have a new camera now it's the [[Canon Vixia HV30|http://www.usa.canon.com/consumer/controller?act=ModelInfoAct&fcategoryid=177&modelid=16206]]. And the information on Canon's website isn't especially helpful. But there are some great internet resources.
[[DVXUser.com|http://www.dvxuser.com]] has an [[HV20/HV30 Forum|http://www.dvxuser.com/V6/forumdisplay.php?f=104]]. It has some great help on workflow kind of stuff. Also, there's a dedicated [[HV20 Forum|http://www.hv20.com/]] that has some very good info.
Those resources have helped me develop MyVideoWorkflow.
Before you can vote, you must pass a test on the government. Nothing amazing, three branches etc. I mean we tst for triver's licences, why not for the crucial act of voting?
<<gradient horiz #B0B0B0 #ffffff>>Greatest Hits>>
[[GRD Blog|http://grassrootsdigital.net/WordPress/]] [[G-Ink Mail|http://www.ipower.com/mail/index.bml?m=1]] [[Intrade Play Money|http://play.intrade.com]] [[Dow Jones|http://finance.google.com/finance?q=INDEXDJX:.DJI]] [[VSE|http://vse.marketwatch.com/Game/Homepage.aspx]] [[GDL Wiki|http://www.grassrootsdigital.net/GDLWiki/]] [[Mac Rumors|http://www.macrumors.com/]]
<<gradient horiz #B0B0B0 #ffffff>>Common Sites and News>>
[[FARK|http://www.fark.com]] [[Google|http://www.google.com]] [[Wikipedia|http://en.wikipedia.org/wiki/Main_Page]] [[Google Maps|http://maps.google.com/]] [[IMDB|http://www.imdb.com/]] [[IBDB (IMDB for plays)|http://www.ibdb.com/]] [[Dictionary.com|http://www.dictionary.com]]
[[NOAA Weather Service|http://www.nws.noaa.gov/]] [[STL Radar|http://radar.weather.gov/radar.php?rid=lsx&product=N0R&overlay=11101111&loop=no]] [[STL Forecast|http://www.crh.noaa.gov/ifps/MapClick.php?CityName=Saint+Louis&state=MO&site=LSX]] [[US IR Satellite|http://www.goes.noaa.gov/ECIR4.html]] [[WeatherUndergroud|http://www.weatherunderground.com/cgi-bin/findweather/getForecast?query=63103]]
[[NPR|http://www.npr.org]] [[Snopes|http://www.snopes.com]] [[Laramie Daily Boomerang|http://www.laramieboomerang.com/index.asp]] [[CNN|http://www.cnn.com/]] [[BBC|http://news.bbc.co.uk/]] [[Economist|http://www.economist.com/index.html]] [[WSJ|http://online.wsj.com/public/us]] [[NYTimes|http://nytimes.com/]] [[ESPN|http://espn.go.com/]]
[[Google Finance|http://finance.google.com/finance]] [[Yahoo Finance|http://finance.yahoo.com/]] [[ESCO at Yahoo|http://finance.yahoo.com/q?s=ese]]
<<gradient horiz #B0B0B0 #ffffff>>My Sites>>
[[Grassroots Digital Site|http://www.grassrootsdigital.net]] [[Kitty Cam|http://www.grassrootsdigital.net/kittycam.jpg]] [[GRD Forum|http://grassrootsdigital.net/phpBB/index.php]] [[GRD Blog|http://grassrootsdigital.net/WordPress/]] [[Coppermine|http://www.grassrootsdigital.net/Coppermine/]] GrassrootsDigital
[[G-Ink|http://www.g-ink.com]] [[G-Ink Mail|http://www.ipower.com/mail/index.bml?m=1]] [[G and D|http://www.ganddsteidtmann.net]] [[CH Trade|http://www.chtrade.com]] [[Genny's Blog|http://ganddsteidtmann.net/WordPress/]] [[Gmail|https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl<mpl=yj_wsad<mplcache=2]] [[Yahoo Mail|https://login.yahoo.com/config/login_verify2?&.src=ym]] [[B of A|https://www.bankofamerica.com/index.jsp]]
<<gradient horiz #B0B0B0 #ffffff>>Tiddly Areas>>
DCSIInfo, PhotoStuff, GunStuff, ComputerStuff, MyVideoWorkflow
QuickReference, WikiReference. RippingiPodMovies, MyPhotoWorkflow
<<gradient horiz #B0B0B0 #ffffff>>Hobbies>>
[[General Non-Glocking|http://www.glocktalk.com/forumdisplay.php?s=&forumid=29]] [[ARTactical|http://artactical.com]] [[The Hide|http://www.snipershide.net/forum/ubbthreads.php]] [[ARFCOM|http://www.ar15.com/]] [[C4D Cafe|http://www.c4dcafe.com/ipb/index.php?act=home]] [[DVX User|http://www.dvxuser.com/V6/]]
[[Benchrest|http://www.shootingstl.com/home.htm]] [[Benchrest Schedule|http://www.shootingstl.com/schedule.htm]] [[STL Skeet Trap|http://www.skeetrap.com/]] [[Forest Park Golf Tee Time|http://www.forestpark.americangolf.com/]]
[[Intrade Play Money|http://play.intrade.com]] [[Hollywood Stock Exchange|http://www.hsx.com]] [[Facebook|http://www.facebook.com]]
[[Apple|http://www.apple.com]] [[Apple Discussions|http://discussions.apple.com/index.jspa]] [[Apple Downloads|http://www.apple.com/downloads/macosx/]] [[Demonoid|http://www.demonoid.com/files/?category=5&subcategory=3&language=0&seeded=0&external=2&query=&uid=0&sort=]] [[Mac Rumors|http://www.macrumors.com/]]
LearningBlender
[[Lowe's|http://www.lowes.com/lowes/lkn?action=home]] [[Home Depot|http://www.homedepot.com]] [[Woodcraft|http://www.woodcraft.com/]]
[[Home Content TiddlyWiki|file:///Users/dave/Documents/TiddlyWiki/HomeContentTiddlyWiki.html]] MyInterests
Go to [[attvoice.webex.com|http://attvoice.webex.com]] note that there is no "www" in the URL.
Web Conferencing
User Login = "knewcomb"
Password = "93662960"
The Audio Portion
Dial-In #: 888-834-2663
International Dial-In #: 617-786-4658
Chairperson Passcode: 93662960
Participant Passcode: 74604434
Audio Controls:
|Operator Assistance | *0 |
|Conference Help Menu | #0 |
|Participant Roll Call | #1 |
|Participant Count | #2 |
|Conference Lock & Unlock | *7 |
|Stop Audio Message | *2 |
|Initiate Dial Out Facility | #3 |
|Rejoin Conference with New Participant | #4 |
|Rejoin Conference Alone | #5 |
|Mute/Unmute Chairperson Line | *6 |
|Mute/Unmute Participant Lines | *5 |
|End Conference | ## |
AT&T Voce Conferencing Services Help Desk 1-800-743-7553
NOTE: First time users should allow 3-5 minutes to download the plug in before the meeting.
Dana asked me to take pictures at her wedding. I'd like to make a list of the classic wedding shots. I should look at Ben and Renee's wedding video.
Two rings together on something
Shots up the aisle (although will we have enough people for an aisle)
Here's a list I found online. We'll probably have some good "mountain-y" stuff to add.
{{{
Wedding Photography Shots Before the Ceremony
___ Wedding dress lying over a chair
___ Zipping up or buttoning the wedding dress
___ Mother of the bride fastening the bride's necklace
___ The bride's garter
___ The bride's veil
___ A close up of the bride's shoes peeking out from under the dress
___ Bride looking into a mirror
___ Bride looking out window
___ Bride and bridesmaids putting on makeup
___ Bride pinning corsage/boutonniere on mother/father
___ Bride hugging parents
___ Bride touching up
___ Bride and parents leaving for ceremony
___ Groom tying tie
___ Groom looking into mirror
___ Bride looking out window
___ Groom pinning corsage/boutonniere on mother/father
___ Groom hugging parents
___ Bride and parents leaving for ceremony
Wedding Photography Shots At the Ceremony
___ Outside of ceremony site
___ Guests walking into ceremony site
___ Bride and father entering ceremony site
___ Parents being seated
___ Grandparents being seated
___ Maid of honor walking down the aisle
___ Bridesmaids walking down the aisle
___ Flower girl and ring bearer walking down aisle
___ Groom waiting for bride
___ Ceremony musicians
___ Officiant
___ Altar or canopy during ceremony
___ Close up of bride, just before she makes her entrance
___ Bride and father walking down aisle
___ Groom seeing bride for first time
___ The back of bride and father walking down the aisle – with the groom waiting in the distance
___ Bride's father and Bride hugging at end of aisle
___ Shot of the audience from the bride and groom's point of view
___ The unity ceremony
___ Close up of bride and groom saying the vows
___ Wide shot of bride and groom saying the vows
___ Exchanging the rings
___ Close up of hands
___ The kiss
___ Bride & Groom walking up the aisle
___ Receiving line
___ Bride & Groom outside on steps
___ Guests throwing confetti/rose petals/birdseed
___ Bride & Groom hugging guests, laughing, getting congratulations
___ Bride & Groom getting in car
___ Bride & Groom in back seat
Posed Wedding Photography Before the Reception (These can also be taken before the ceremony)
___ Bride alone (full length)
___ Bride with Maid of Honor
___ Bride with bridesmaids
___ Groom with bridesmaids
___ Bride with parents
___ Bride & Groom together
___ Bride & Groom with parents
___ Bride & Groom with families
___ Bride & Groom with entire wedding party
___ Bride & Groom with flower girl and ringbearer
___ Groom with parents
___ Groom with best man
___ Groom with groomsmen
___ Bride with groomsmen
During the Reception (to help your photographer, you may wish to list these shots in the order they will happen at your reception)
___ Outside of reception site
___ Bride & Groom arriving
___ Bride & Groom greeting guests
___ Table centerpieces
___ Table setting
___ Bride & Groom's table (head table)
___ Musicians or DJ
___ Guest book
___ Place card table
___ Closeup of bride and groom's place card
___ Wedding cake
___ Groom's cake
___ Gift table
___ Decorations (specify which _________________________)
___ A shot of bride & groom with guests at each table
___ Bride with college alums
___ Groom with college alums
___ The buffet or, if having table service, a dinner serving
___ Bride & Groom's first dance
___ Bride & Father dancing
___ Groom & Mother dancing
___ Guests dancing
___ Bride & Groom cutting the cake
___ Bride & Groom feeding each other cake
___ Toasts (specify who is giving them: ____________________)
___ Bride & Groom drinking champagne
___ Signing the marriage license
___ Bride throwing bouquet
___ Groom retrieving garter
___ Groom tossing garter
___ Garter/Bouquet dance
___ The getaway car
___ Bride & Groom leaving party
___ Bride & Groom driving away
}}}
ReferenceLinks
ComputerStuff
MusicStuff
OutdoorStuff
FireArms
PhotoInfo
VideoInfo
WildIdeas
EmbeddingImages is possible with ~TiddlyWiki
SparkLines are an especially interesting new trick from [[Edward Tufte|http://www.edwardtufte.com]]
!Formatting Text
[[HTML Colors|http://www.w3schools.com/html/html_colors.asp]] are specified with six HEX (0-F) digits They're in blocks of two corresponding to RR,GG,BB. Essentially, 00's represent NO color (thus 000000 is black) and FF's represent total color (thus FFFFFF is white). Here are some other nice colors.
@@background-color:#303030;color:#ffffff;303030@@ @@background-color:#606060;color:#ffffff;606060@@ @@background-color:#909090;color:#FFFFFF;909090@@ @@background-color:#B0B0B0;color:#FFFFFF;~B0B0B0@@ @@background-color:#F0F0F0;color:#FFFFFF;~F0F0F0@@
@@background-color:#FF0000;color:#ffffff;~FF0000@@ @@background-color:#00FF00;color:#000000;00FF00@@ @@background-color:#0000FF;color:#ffffff;0000FF@@ @@background-color:#FFFF00;color:#000000;~FFFF00@@ @@background-color:#FF00FF;color:#ffffff;~FF00FF@@ @@background-color:#00FFFF;color:#000000;00FFFF@@
@@background-color:#FF0000;color:#ffffff;font-size:18pt;18 Point White Text on Red Background@@
{{{
@@background-color:#FF0000;color:#000000;
font-size:18pt;18 Point White Text on Red Background@@
}}}
<<gradient horiz #bbbbbb #eeeeee #ffffff>>The new GradientMacro allows simple horizontal and vertical coloured gradients. They are constructed from coloured HTML elements, and don't require any images to work.>>
The GradientMacro is an ExtendedMacro that processes the text after it up until the next '>>' sequence. It looks like this:
{{{
<<gradient vert #ffffff #ffdddd #ff8888>>gradient text>>
}}}
<<gradient horiz #0099CC #ffffff #000000 #ffffff>>This should look cool>>
The first parameter can be ''vert'' or ''horiz'' to indicate the direction of the gradient. The following parameters are two or more colours (CSS RGB(r,g,b) format is also acceptable). The GradientMacro constructs a smooth linear gradient between each of the colours in turn.
| <<gradient vert #ffffff #ffdddd #ff8888>>No images were harmed in the making of this gradient fill>> | <<gradient vert #ffffff #ddffdd #88ff88>>No images were harmed in the making of this gradient fill>> | <<gradient vert #ffffff #ddddff #8888ff>>No images were harmed in the making of this gradient fill>> |
* Figger out how the Journal feature works and where those tiddlers go?
* Make a reasonable WikiMap with general overview tiddlers
* Capture the information about how to make it work in Safari, Vista, XP - SP2
* Figger out a good way to capture goofy interests (like knot tying, or cartes du ciel, or whatever) on this wiki. Ultimately, I want this to become my "portal" to the internet.
* Figure out a way to get an image in-line
[[Policy Futures|http://hanson.gmu.edu/policyanalysismarket.html]] are a slick little tool that I'd love to learn more about. I remember that I saw an article about futures in product launch at Microsoft.
GunsOnPlanes PREVENTS terrorists on airplanes
VotingTests Ensures marginally reasoned votes
This goes around in an email every so often. I thought it was interesting enough to record. I'm not sure if it's real research, but I know that I've been able to read it, and everybody I've talked to can also read it. My old buddy PatMosier did several reading comparison tests including re-typing it correctly and timing how long it took him to read both versions.
{{{
i cdnuolt blveiee taht I cluod aulaclty uesdnatnrd waht I was rdanieg.
The phaonmneal pweor of the hmuan mnid, aoccdrnig to a rscheearch
at Cmabrigde Uinervtisy, it dseno't mtaetr in waht oerdr the ltteres in a
wrod are, the olny iproamtnt tihng is taht the frsit and lsat ltteer be in
the rghit pclae. The rset can be a taotl mses and you can sitll raed it
whotuit a pboerlm. Tihs is bcuseae the huamn mnid deos not raed ervey
lteter by istlef, but the wrod as a wlohe. Azanmig huh? yaeh and I
awlyas tghuhot slpeling was ipmorantt! if you can raed tihs forwrad it
}}}
A power line data transmission technology.
[[Wikipedia's X-10 Article|http://en.wikipedia.org/wiki/X10_%28industry_standard%29]]
[[Zigbee|http://www.zigbee.org]]