Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
Seasons Greetings!
Tis the season for holiday cheer and SAWE is in the holiday spirit. We
would like for you to join your fellow Capital Region SAWE engineers at
"Phillips Seafood Restaurant" on the DC Waterfront for a holiday feast.
Here are the details:
Date: December 18, 2008
Time: 11:30 AM
Location: Phillips Seafood Restaurant
900 Water Street, SW (Waterfront),
Washington, DC, 20024
And to show that our chapter is in the giving mood, the chapter will
pick up half of the cost of the buffet (SAWE Members Only). For the
remaining cost of $10.00, you will get the all you can eat seafood
buffet, tea, coffee, sodas, tax and tip. Non-members will still need to
pay the full price ($20.00) but are still welcome to join us.
I will need a head count back to the restaurant by December 15 so please
reply ASAP if you are planning to attend.
Please join us and Happy Holidays!
Daniel Dolan
Manager, Weights and Stability
CSC
Pictures here: [[2008 Holiday Lunch]]
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://gallery.me.com/telletdl99/100058]] »|
----
<html><div align="center"><iframe src ="http://gallery.me.com/telletdl99/100058" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://gallery.me.com/telletdl99/100062]] »|
----
<html><div align="center"><iframe src ="http://gallery.me.com/telletdl99/100062" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://gallery.me.com/telletdl99/100041]] »|
----
<html><div align="center"><iframe src ="http://gallery.me.com/telletdl99/100041" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://gallery.me.com/telletdl99/100070]] »|
----
<html><div align="center"><iframe src ="http://gallery.me.com/telletdl99/100070" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
AaA BbB CcC DdD EeE FfF GgG HhH IiI JjJ KkK LlL MmM NnN OoO PpP QqQ RrR SsS TtT UuU VvV WwW XxX YyY ZzZ
!!!ABWE
is the Allocated Baseline Weight Estimate that establishes the contractual values (for a performance-type contract) for weight and KG and is the baseline for detail design and construction weight control.
!!!ABS
stands for the American Bureau of Shipping.
!!!Accepted Ship Report (ASR)
is the document that demonstrates the Contractor’s performance with
regard to weight control. The ASR highlights the differences between the Accepted Weight Estimate (AWE) or the Allocated Baseline Weight Estimate (ABWE) and the delivered ship as measured by an inclining experiment.
!!!Accepted Weight Estimate (AWE)
establishes the contractual values for weight and KG and is the baseline
for detail design and construction weight control.
!!!Aft
Toward the stern or rear of ship. Between the stern and the amidship section of a vessel.
!!!Aft perpendicular
is generally a vertical datum line passing through the ship’s rudder stock or at the after end of the rudder post. For submarines this is normally the after end of the propeller.
!!!Aft trim tank
is the aftermost variable ballast tank. Often this is the only variable ballast tank that is aft of the longitudinal center of gravity of the submarine and therefore it is often one of the largest of the variable ballast tanks.
!!!Allocated Baseline Weight Estimate (ABWE)
establishes the contractual values (for a performance type contract) for weight and KG and is the baseline for detail design and construction weight control.
!!!Amidships
is at or near the longitudinal middle of the ship.
!!!~AoA
is the acronym for Analysis of Alternatives.
!!!~As-Inclined
refers to the condition of the ship at the time of the inclining experiment, prior to correction to a standard condition.
!!!ASTM
stands for the American Society for Testing and Materials.
!!!Athwartship
is the term for something that runs across the ship at right angles to the fore and aft centerline.
!!!Auxiliary tanks
are variable ballast tanks located inside the pressure hull of a submarine.
!!!AWE
is the Accepted Weight Estimate that establishes the contractual values for weight and KG and is the baseline for detail design and construction weight control.
!!!Abstract Project Completed!
Thanks to all those who contributed to this project!
----
Members: The SAWE is striving to get searchable abstracts completed for all our technical papers. To do this, they have asked for each chapter to write up abstracts for selected groups of papers. Below is the list of papers that have been assigned to the Capital Region Chapter. If you want to participate, please select a paper or papers and let [[Dan Dolan|mailto:ddolan3@csc.com]] and [[David Tellet|mailto:telletdl99@mac.com]] know. We will keep a running tally here on the website. We hope to finish this effort by January, so any and all help you can provide will be greatly appreciated.
Updated: 11/19/10 11:39
|!Paper no.|!Title|!Year|!Volunteer|!Done|
|250|Passenger Seating Pattern - A Statistically Based Cabin Load or Passenger Seating Assumption Applicable to Airline Operatio|1960| Dolan |Done|
|252|Aircraft Pound Cost Evaluation|1960| Dolan |Done|
|253|Standard Form for Weight and Balance Data Presentation|1960| Dolan |Done|
|254|An Investigation of Changes of Loadability of an Airplane Due to Changes in Interior Arrangement|1960| Dolan |Done|
|256|Fuel Cell Power Systems Design - Weight Aspects|1960| Dolan |Done|
|257|An Approach to Weight Estimation of Manned Space Entry Vehicles|1960| Dolan |Done|
|258|The Helicopter Crane as a Prime Mover|1960| Bergman |Done|
|259|Rib Weight Estimation by Structural Analysis|1960| Bergman |Done|
|260|Turbinizing the S-55|1960| Bergman |Done|
|261|Weight Control - An Analysis of an Attitude|1960| Tellet |Done|
|262|Design Consideration of Chemically Milled Parts|1960| Dolan |Done|
|263|Brazed Tube Joints for High Performance Vehicles|1960| Heidt |Done|
|264|Five Years of Vendor System Weight Control With the Weapon System Management Concept|1960| Dolan |Done|
|265|Beryllium - A Useful Structural Material|1960| Heidt |Done|
|266|Basic Accuracy Limitations in Weight and Center of Gravity Determination|1960| Tellet |Done|
|267|The Unity Equation and Growth Factor|1960| Dolan |Done|
|268|Selection of Optimum Insulation|1960| Dolan |Done|
|269|The Influence of Balance and Loadability on the Design of Commercial Passenger Transports|1960| Dolan |Done|
|270|Payload Capability of Satellite Systems|1960| Dolan |Done|
|271|Electrical Equipment Weight Considerations for High Temperature Environments|1960| Dolan |Done|
|272|Introduction to Solid Propellant Rockets|1961| Bergman |Done|
|273|Weight Engineering and the Operational ICBM|1961| Dolan |Done|
|274|Aspects of High Performance Sounding Rockets|1961| Dolan |Done|
|275|Some Reasons for Concern About the ""M"" in F=MA in Rocketry|1961| Dolan |Done|
|276|Weight in Overall Missile Performance|1961| Bergman |Done|
|278|Are We Anticipating the Data Needs of Astronauts?|1961| Bergman |Done|
|279|Flow Measurements in Rocketry or Weight Management Through Flow Measurement|1961| Dolan |Done|
|280|Today's Graphical Aircraft Load Devices|1961| Dolan |Done|
|281|Runway Gross Weight Analysis|1961| Dolan |Done|
|282|A New Emphasis on Center of Gravity|1961| Tellet |Done|
|284|Loading the Caravelle|1961| Tellet |Done|
|285|Load Processing|1961| Cimino |Done|
|286|The Current Trends of Threaded Fastener Weight in Aerospace Vehicles|1961| Tellet |Done|
|287|Maximum Strength - Minimum Weight and Cost - How?|1961| Tellet |Done|
|288|Secondary Force Standards for the Calibrating Weighing Equipment|1961| Cimino |Done|
|289|Aircraft Optimization|1961| Cimino |Done|
|290|~Tri-Filar Moment of Inertia Apparatus|1961| Tellet |Done|
|291|Optimization of Fluid Lines|1961| Tellet |Done|
|292|Inherent Accuracy Advantages of a Direct Digital Weighing System as Applied to Center of Gravity and Fuel Flow Problems|1961| Dolan |Done|
|293|A ~Low-Cost, Practical Approach to the Actual Measurement of the Horizontal and Vertical Center of Gravity of a Small Missile|1961| Dolan |Done|
|295|Electronic Scales and Precise Weight Determination|1961| Heidt |Done|
|296|The Derivation of an Efficiency Factor and Its Application to a Torsional System for Determining Mass Moments of Inertia|1961| Dolan |Done|
|297|Weight Group Operation in Relation to the Bureau of Naval Weapons|1961| Heidt |Done|
|298|Derivation and Dissemination of Mass Standards|1961| Tellet |Done|
|300|Optimum Design for Transient Loading|1962| Cimino |Done|
|301|The Total Cost of Weight|1962| Dolan |Done|
|303|Some Aspects of Weight Engineering as Applied to Marine Vehicles|1962| Heidt |Done|
|304|Simulation of Mass Properties for Test Vehicles Using the Inertia Component Method|1962| Tellet |Done|
|305|Predicting the Accuracy of Mass Property Calculations|1962| Tellet |Done|
|306|Value Engineering and Its Relationship to Weight Engineering|1962| Tellet |Done|
|307|Save Weight While You Save Money, Through Value Control|1962| Tellet |Done|
|308|A Simplified Method for Estimating the Wetted Area of Aircraft Fuselages|1962| Tellet |Done|
||!Monday, 18 October|
|0800-0815|Introduction|
|0815-1200|Misclassification, new equipment, and miscellaneous topics. Page numbers 7-12, 14, 15, 19-24, 30-35, 52-67|
|0915|Break|
|1030|Break|
|1200-1300|Lunch|
|1300-1500|EME/Rafts. Page numbers 2, 5, 6, 13, 29, 51, 68|
|1400|Break|
||!Tuesday, 19 October|
|0800-0900|IPS System. Page numbers 4, 16-18, 25-28|
|0910-1010|Submarine combat system and fairwater planes and new submarine groups. Page numbers 3, 36-50|
|1020-1130|New technologies: fiber optics, dual band radar, RSCEI, modular technology|
|1130-1230|Lunch|
|1230-1430|New technologies continued|
|1330|Break|
|1430-1500|Wrap-up|
See [[ESWBS]] for more information about the meeting.
|!Multiply:|!By:|!To Obtain:|!Multiply:|!By:|!To Obtain:|
|acres| 43560|square feet|square inches| 0.006944|square feet|
|acres| 0.00404785|square kilometers|square inches| 6.4516 x 10-4|square meters|
|acres| 4047.856|square meters|square inches| 645.2|square millimeters|
|acres| 0.001562|square miles|square inches| 1 x 10+6|square mils|
|acres| 4840|square yards|Square kilometers| 247.10538|acres|
|ares| 100|square meters|Square kilometers| 1.076391 x 10+7|square feet|
|ares| 119.6|square yards|Square kilometers| 1 x 10+6|square meters|
|barn| 1 x 10-28|square meters|Square kilometers| 0.3861|square miles|
|centares| 1|square meters|Square kilometers| 1.196 x 10+6|square yards|
|circular mils| 5.067 x 10-6|square centimeters|square meters| 2.471 x 10-4|acres|
|circular mils| 7.854 x 10-7|square inches|square meters| 10.7639|square feet|
|circular mils| 0.7853981|square mils|square meters| 3.861 x 10-7|square miles|
|hectares| 2.471|acres|square meters| 1.196|square yards|
|hectares| 1.076 x 105|square feet|square miles| 640|acres|
|square centimeters| 1.973 x 10+5|circular mils|square miles| 2.787828 x 10+7|square feet|
|square centimeters| 0.001076|square feet|square miles| 2.5899881|square kilometers|
|square centimeters| 0.155|square inches|square miles| 3.098 x 106|square yards|
|square centimeters| 1 x 10-4|square meters|Square millimeters| 1973|circular mils|
|square centimeters| 3.861 x 10-11|square miles|Square millimeters| 0.00155|square inches|
|square centimeters| 100|square millimeters|Square millimeters| 1 x 10-6|square meters|
|square feet| 2.295684 x 10-5|acres|Square millimeters| 1550|square mils|
|square feet| 929|square centimeters|square mils| 1.27323|circular mils|
|square feet| 144|square inches|square mils| 6.45216 x 10-6|square centimeters|
|square feet| 0.09290304|square meters|square mils| 1 x 10-6|square inches|
|square feet| 3.587 x 10-8|square miles|square yards| 9|square feet|
|square feet| 1/9|square yards|square yards| 1296|square inches|
|square inches| 1.2732395 x 10+6|circular mils|square yards| 0.8361|square meters|
|square inches| 6.452|square centimeters|square yards| 3.228 x 10-7|square miles|
----
AaA CcC DdD EeE FfF GgG HhH IiI JjJ KkK LlL MmM NnN OoO PpP QqQ RrR SsS TtT UuU VvV WwW XxX YyY ZzZ
----
!!!Ballast
is any solid or liquid weight placed in the ship to increase the draft, change the trim, or regulate stability. For submarines, ballast is used for trim, stability, and to maintain equilibrium.
!!!Baseline
is a level, horizontal line at the bottom of the ship from which all vertical heights are measured.
!!!Baseline Weight Estimate (BWE)
is any designated weight estimate that is used as a starting point in
a design phase for comparative analysis with subsequent weight estimates. After contract award, the AWE or ABWE is used for this purpose.
!!!Beam, deck
is an athwartship horizontal structural member supporting a deck or flat.
!!!Beam, moulded
is the maximum breadth of the hull measured between the inboard surfaces of the side shell plating of flush-plated ships, or between the inboard surfaces of the inside strakes of lap seamplated vessels. For submarines, this is the maximum breadth measured from the outside of the hull plating.
!!!Below
is a term for below a deck or decks (corresponds to “downstairs”).
!!!Bidder’s Independent Weight Estimate (BIWE)
is the bidder’s independent weight estimate prepared by each potential contractor in response to a solicitation. It is the bidder’s evaluation of the ship design based on the ship specifications, drawings, and other data that comprise the contract package.
!!!Bilge
is the curved section between the bottom and the side of a ship. Also the bottom recesses into which all water drains.
!!!Bilge Keel
is a long longitudinal fin fitted on the outside of a ship at the turn of the bilge to reduce rolling.
!!!BIWE
is the acronym for the Bidder’s Independent Weight Estimate.
!!!Block Coefficient
= CB = 5(L×B×D)
!!!Body Plan
is a drawing showing the shapes of the frames as they contact the moulded surface of the shell, and showing the waterlines and buttocks as straight lines.
!!!Bonjean Curves
is a plot of transverse sectional areas versus drafts.
!!!BOP
is the acronym for blow out preventer.
!!!Brow
is a portable bridge or ramp between the ship and the wharf, pier, or dock.
!!!Bubble
is an indication of the hull angle (fore and aft) of a submarine with respect to the horizontal plane of the water’s surface.
!!!Bulkhead
is a term for the vertical partition walls which subdivide the interior of a ship into compartments or rooms.
!!!Bulkhead Deck
is the uppermost deck up to which the transverse watertight bulkheads and shell are carried.
!!!Bulwark
is the fore and aft vertical plating immediately above the upper edge of the sheer strake.
!!!Buttock
is a vertical plane running parallel to and at specified distances from the centerline of the ship.
http://www.sawe.org
http://sname.org
/%
|Name|BreadcrumbsCommand|
|Source|http://www.TiddlyTools.com/#BreadcrumbsCommand|
|Version|1.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|BreadcrumbsPlugin|
|Overrides||
|Description|"crumbs" command displays current breadcrumbs list in a popup|
%/<html><hide linebreaks><a href="javascript:;" class="TiddlyLink" title="tiddlers viewed during this session"
onclick="var p=Popup.create(this); if (!p) return;
var d=createTiddlyElement(p,'div');
d.style.whiteSpace='normal'; d.style.width='auto'; d.style.padding='2px';
wikify('\<\<breadcrumbs [[\<html\>\<hr\>\</html\>]] [[<br>]]\>\>',d);
Popup.show(p,false); event.cancelBubble = true; if (event.stopPropagation) event.stopPropagation();
return(false);"
>crumbs</a></html>
/***
|Name|BreadcrumbsPlugin|
|Author|Eric Shulman|
|Source|http://www.TiddlyTools.com/#BreadcrumbsPlugin|
|Documentation|http://www.TiddlyTools.com/#BreadcrumbsPluginInfo|
|Version|2.0.0|
|License|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|Story.prototype.displayTiddler,TiddlyWiki.prototype.deleteTiddler|
|Options|##Configuration|
|Description|list/jump to tiddlers viewed during this session plus "back" button/macro|
This plugin provides a list of links to all tiddlers opened during the session, creating a "trail of breadcrumbs" from one tiddler to the next, allowing you to quickly navigate to any previously viewed tiddler, or select 'home' to reset the display to the initial set of tiddlers that were open at the start of the session (i.e., when the document was loaded into the browser).
!!!!!Documentation
<<<
see [[BreadcrumbsPluginInfo]]
<<<
!!!!!Configuration
<<<
<<option chkCreateDefaultBreadcrumbs>> automatically create breadcrumbs display (if needed)
<<option chkShowBreadcrumbs>> show/hide breadcrumbs display
<<option chkReorderBreadcrumbs>> re-order breadcrumbs when visiting a previously viewed tiddler
<<option chkBreadcrumbsHideHomeLink>> omit 'Home' link from breadcrumbs display
<<option chkShowStartupBreadcrumbs>> show breadcrumbs for 'startup' tiddlers
<<option chkBreadcrumbsReverse>> show breadcrumbs in reverse order (most recent first)
<<option chkBreadcrumbsLimit>> limit breadcrumbs display to {{twochar{<<option txtBreadcrumbsLimit>>}}} items
<<option chkBreadcrumbsLimitOpenTiddlers>> limit open tiddlers to {{twochar{<<option txtBreadcrumbsLimitOpenTiddlers>>}}} items
<<<
!!!!!Revisions
<<<
2008.05.01 [2.0.0] added 'limit open tiddlers' feature (with safety check for tiddler in edit mode)
| Please see [[BreadcrumbsPluginInfo]] for previous revision details |
2006.02.01 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.BreadcrumbsPlugin= {major: 2, minor: 0, revision: 0, date: new Date("May 1, 2008")};
var co=config.options; // abbreviation
// show/hide display option (default is to SHOW breadcrumbs)
if (co.chkShowBreadcrumbs===undefined) co.chkShowBreadcrumbs=true;
// REORDER breadcrumbs when visiting previously viewed tiddler (default)
if (co.chkReorderBreadcrumbs===undefined) co.chkReorderBreadcrumbs=true;
// create default breadcrumbs display as needed (default is to CREATE)
if (co.chkCreateDefaultBreadcrumbs===undefined) co.chkCreateDefaultBreadcrumbs=true;
// show breadcrumbs for 'startup' tiddlers (default is FALSE = only show crumbs for tiddlers opened after startup)
if (co.chkShowStartupBreadcrumbs===undefined) co.chkShowStartupBreadcrumbs=false;
// show crumbs in reverse order (most recent first)
if (co.chkBreadcrumbsReverse===undefined) co.chkBreadcrumbsReverse=false;
// limit number of crumbs displayed
if (co.chkBreadcrumbsLimit===undefined) co.chkBreadcrumbsLimit=false;
if (co.txtBreadcrumbsLimit===undefined) co.txtBreadcrumbsLimit=5;
// limit number of open tiddlers
if (co.chkBreadcrumbsLimitOpenTiddlers===undefined) co.chkBreadcrumbsLimitOpenTiddlers=false;
if (co.txtBreadcrumbsLimitOpenTiddlers===undefined) co.txtBreadcrumbsLimitOpenTiddlers=3;
// omit home link from breadcrumbs display
if (co.chkBreadcrumbsHideHomeLink===undefined) co.chkBreadcrumbsHideHomeLink=false;
config.macros.breadcrumbs = {
crumbs: [], // the list of current breadcrumbs
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var area=createTiddlyElement(place,"span",null,"breadCrumbs",null);
area.setAttribute("homeSep",params[0]?params[0]:this.homeSeparator); // custom home separator
area.setAttribute("crumbSep",params[1]?params[1]:this.crumbSeparator); // custom crumb separator
this.render(area);
},
add: function (title) {
var thisCrumb = title;
var ind = this.crumbs.indexOf(thisCrumb);
if(ind === -1)
this.crumbs.push(thisCrumb);
else if (config.options.chkReorderBreadcrumbs)
this.crumbs.push(this.crumbs.splice(ind,1)[0]); // reorder crumbs
else
this.crumbs=this.crumbs.slice(0,ind+1); // trim crumbs
if (config.options.chkBreadcrumbsLimitOpenTiddlers)
this.limitOpenTiddlers();
this.refresh();
return false;
},
getAreas: function() {
var crumbAreas=[];
// find all DIVs with classname=="breadCrumbs"
// Note: use try/catch to avoid "Bad NPObject as private data" fatal error caused when
// some versions of embedded QuickTime player element is accessed by hasClass() function.
var all=document.getElementsByTagName("*");
for (var i=0; i<all.length; i++)
try{ if (hasClass(all[i],"breadCrumbs")) crumbAreas.push(all[i]); } catch(e) {;}
// find single DIV w/fixed ID (backward compatibility)
var byID=document.getElementById("breadCrumbs")
if (byID && !hasClass(byID,"breadCrumbs")) crumbAreas.push(byID);
if (!crumbAreas.length && config.options.chkCreateDefaultBreadcrumbs) {
// no existing crumbs display areas... create one...
var defaultArea = createTiddlyElement(null,"span",null,"breadCrumbs",null);
defaultArea.style.display= "none";
var targetArea= document.getElementById("tiddlerDisplay");
targetArea.parentNode.insertBefore(defaultArea,targetArea);
crumbAreas.push(defaultArea);
}
return crumbAreas;
},
refresh: function() {
var crumbAreas=this.getAreas();
for (var i=0; i<crumbAreas.length; i++) {
crumbAreas[i].style.display = config.options.chkShowBreadcrumbs?"block":"none";
removeChildren(crumbAreas[i]);
this.render(crumbAreas[i]);
}
},
render: function(here) {
var out=""
var homeSep=here.getAttribute("homeSep"); if (!homeSep) homeSep=this.homeSeparator;
var crumbSep=here.getAttribute("crumbSep"); if (!crumbSep) crumbSep=this.crumbSeparator;
if (!config.options.chkBreadcrumbsHideHomeLink) {
createTiddlyButton(here,"Home",null,this.home,"tiddlyLink tiddlyLinkExisting");
out+=homeSep;
}
for (c=0; c<this.crumbs.length; c++) // remove non-existing tiddlers from crumbs
if (!store.tiddlerExists(this.crumbs[c]) && !store.isShadowTiddler(this.crumbs[c]))
this.crumbs.splice(c,1);
var count=this.crumbs.length;
if (config.options.chkBreadcrumbsLimit && config.options.txtBreadcrumbsLimit<count)
count=config.options.txtBreadcrumbsLimit;
var list=[];
for (c=this.crumbs.length-count; c<this.crumbs.length; c++) list.push('[['+this.crumbs[c]+']]');
if (config.options.chkBreadcrumbsReverse) list.reverse();
out+=list.join(crumbSep);
wikify(out,here);
},
home: function() {
story.closeAllTiddlers();
restart();
config.macros.breadcrumbs.crumbs = [];
var crumbAreas=config.macros.breadcrumbs.getAreas();
for (var i=0; i<crumbAreas.length; i++) crumbAreas[i].style.display = "none";
return false;
},
limitOpenTiddlers: function() {
var limit=config.options.txtBreadcrumbsLimitOpenTiddlers; if (limit<1) limit=1;
for (c=this.crumbs.length-1; c>=0; c--) {
var tid=this.crumbs[c];
var elem=document.getElementById(story.idPrefix+tid);
if (elem) { // tiddler is displayed
if (limit <=0) { // display limit has been reached
if (elem.getAttribute("dirty")=="true") { // tiddler is being edited
var msg="'"+tid+"' is currently being edited.\n\n";
msg+="Press OK to save and close this tiddler\nor press Cancel to leave it opened";
if (confirm(msg)) { story.saveTiddler(tid); story.closeTiddler(tid); }
}
else
story.closeTiddler(this.crumbs[c]);
}
limit--;
}
}
}
};
if (config.macros.breadcrumbs.homeSeparator==undefined) // note: not a cookie
config.macros.breadcrumbs.homeSeparator=" | ";
if (config.macros.breadcrumbs.crumbSeparator==undefined) // note: not a cookie
config.macros.breadcrumbs.crumbSeparator=" > ";
config.commands.previousTiddler = {
text: 'back',
tooltip: 'view the previous tiddler',
hideReadOnly: false,
dateFormat: 'DDD, MMM DDth YYYY hh:0mm:0ss',
handler: function(event,src,title) {
var here=story.findContainingTiddler(src); if (!here) return;
var crumbs=config.macros.breadcrumbs.crumbs;
if (crumbs.length>1) {
var crumb=crumbs[crumbs.length-2];
story.displayTiddler(here,crumb);
}
else
config.macros.breadcrumbs.home();
return false;
}
};
config.macros.previousTiddler= {
label: 'back',
prompt: 'view the previous tiddler',
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var label=params.shift(); if (!label) label=this.label;
var prompt=params.shift(); if (!prompt) prompt=this.prompt;
createTiddlyButton(place,label,prompt,function() {
var crumbs=config.macros.breadcrumbs.crumbs;
if (crumbs.length>1) {
var crumb=crumbs[crumbs.length-2];
story.displayTiddler(place,crumb);
}
else
config.macros.breadcrumbs.home();
});
}
}
// hijack story.displayTiddler() so crumbs can be refreshed when a tiddler is displayed
if (Story.prototype.breadCrumbs_coreDisplayTiddler==undefined)
Story.prototype.breadCrumbs_coreDisplayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler,template,animate,slowly)
{
var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
this.breadCrumbs_coreDisplayTiddler.apply(this,arguments);
// if not displaying tiddler during document startup, then add it to the breadcrumbs
// note: 'startingUp' flag is a global, set/reset by the core init() function
if (!startingUp || config.options.chkShowStartupBreadcrumbs) config.macros.breadcrumbs.add(title);
}
// hijack store.removeTiddler() so crumbs can be refreshed when a tiddler is deleted
if (TiddlyWiki.prototype.breadCrumbs_coreRemoveTiddler==undefined)
TiddlyWiki.prototype.breadCrumbs_coreRemoveTiddler=TiddlyWiki.prototype.removeTiddler;
TiddlyWiki.prototype.removeTiddler= function(title)
{
this.breadCrumbs_coreRemoveTiddler.apply(this,arguments);
config.macros.breadcrumbs.refresh();
}
//}}}
<<calendar thismonth>>
<<calendar nextmonth>>
/***
|Name|CalendarPlugin|
|Source|http://www.TiddlyTools.com/#CalendarPlugin|
|Version|2008.09.09|
|Author|Eric Shulman|
|Original Author|SteveRumsby|
|License|unknown|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Options|##Configuration|
|Description|display monthly and yearly calendars|
NOTE: For enhanced date display (including popups), you must also install [[DatePlugin]]
!!!!!Usage:
<<<
|{{{<<calendar>>}}}|Produce a full-year calendar for the current year|
|{{{<<calendar year>>}}}|Produce a full-year calendar for the given year|
|{{{<<calendar year month>>}}}|Produce a one-month calendar for the given month and year|
|{{{<<calendar thismonth>>}}}|Produce a one-month calendar for the current month|
|{{{<<calendar lastmonth>>}}}|Produce a one-month calendar for last month|
|{{{<<calendar nextmonth>>}}}|Produce a one-month calendar for next month|
|{{{<<calendar +n>>}}}<br>{{{<<calendar -n>>}}}|Produce a one-month calendar for a month +/- 'n' months from now|
<<<
!!!!!Configuration:
<<<
|''First day of week:''<br>{{{config.options.txtCalFirstDay}}}|<<option txtCalFirstDay>>|(Monday = 0, Sunday = 6)|
|''First day of weekend:''<br>{{{config.options.txtCalStartOfWeekend}}}|<<option txtCalStartOfWeekend>>|(Monday = 0, Sunday = 6)|
<<option chkDisplayWeekNumbers>> Display week numbers //(note: Monday will be used as the start of the week)//
|''Week number display format:''<br>{{{config.options.txtWeekNumberDisplayFormat }}}|<<option txtWeekNumberDisplayFormat >>|
|''Week number link format:''<br>{{{config.options.txtWeekNumberLinkFormat }}}|<<option txtWeekNumberLinkFormat >>|
<<<
!!!!!Revisions
<<<
2008.09.10: added "+n" (and "-n") param to permit display of relative months (e.g., "+6" means "six months from now", "-3" means "three months ago". Based on suggestion from Jean.
2008.06.17: added support for config.macros.calendar.todaybg
2008.02.27: in handler(), DON'T set hard-coded default date format, so that *customized* value (pre-defined in config.macros.calendar.journalDateFmt is used.
2008.02.17: in createCalendarYear(), fix next/previous year calculation (use parseInt() to convert to numeric value). Also, use journalDateFmt for date linking when NOT using [[DatePlugin]].
2008.02.16: in createCalendarDay(), week numbers now created as TiddlyLinks, allowing quick creation/navigation to 'weekly' journals (based on request from Kashgarinn)
2008.01.08: in createCalendarMonthHeader(), "month year" heading is now created as TiddlyLink, allowing quick creation/navigation to 'month-at-a-time' journals
2007.11.30: added "return false" to onclick handlers (prevent IE from opening blank pages)
2006.08.23: added handling for weeknumbers (code supplied by Martin Budden (see "wn**" comment marks). Also, incorporated updated by Jeremy Sheeley to add caching for reminders (see [[ReminderMacros]], if installed)
2005.10.30: in config.macros.calendar.handler(), use "tbody" element for IE compatibility. Also, fix year calculation for IE's getYear() function (which returns '2005' instead of '105'). Also, in createCalendarDays(), use showDate() function (see [[DatePlugin]], if installed) to render autostyled date with linked popup. Updated calendar stylesheet definition: use .calendar class-specific selectors, add text centering and margin settings
2006.05.29: added journalDateFmt handling
<<<
***/
/***
!!!!!Code section:
***/
//{{{
version.extensions.CalendarPlugin= { major: 0, minor: 7, revision: 0, date: new Date(2008, 6, 17)};
if(config.options.txtCalFirstDay == undefined)
config.options.txtCalFirstDay = 0;
if(config.options.txtCalStartOfWeekend == undefined)
config.options.txtCalStartOfWeekend = 5;
if(config.options.chkDisplayWeekNumbers == undefined)//wn**
config.options.chkDisplayWeekNumbers = false;
if(config.options.chkDisplayWeekNumbers)
config.options.txtCalFirstDay = 0;
if(config.options.txtWeekNumberDisplayFormat == undefined)//wn**
config.options.txtWeekNumberDisplayFormat = "w0WW";
if(config.options.txtWeekNumberLinkFormat == undefined)//wn**
config.options.txtWeekNumberLinkFormat = "YYYY-w0WW";
config.macros.calendar = {};
config.macros.calendar.monthnames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
config.macros.calendar.daynames = ["M", "T", "W", "T", "F", "S", "S"];
config.macros.calendar.todaybg = "#ccccff";
config.macros.calendar.weekendbg = "#c0c0c0";
config.macros.calendar.monthbg = "#e0e0e0";
config.macros.calendar.holidaybg = "#ffc0c0";
config.macros.calendar.journalDateFmt = "DD MMM YYYY";
config.macros.calendar.monthdays = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
config.macros.calendar.holidays = [ ]; // Not sure this is required anymore - use reminders instead
//}}}
//{{{
function calendarIsHoliday(date) // Is the given date a holiday?
{
var longHoliday = date.formatString("0DD/0MM/YYYY");
var shortHoliday = date.formatString("0DD/0MM");
for(var i = 0; i < config.macros.calendar.holidays.length; i++) {
if(config.macros.calendar.holidays[i] == longHoliday || config.macros.calendar.holidays[i] == shortHoliday)
return true;
}
return false;
}
//}}}
//{{{
config.macros.calendar.handler = function(place,macroName,params) {
var calendar = createTiddlyElement(place, "table", null, "calendar", null);
var tbody = createTiddlyElement(calendar, "tbody", null, null, null);
var today = new Date();
var year = today.getYear();
if (year<1900) year+=1900;
// get format for journal link by reading from SideBarOptions (ELS 5/29/06 - based on suggestion by Martin Budden)
var text = store.getTiddlerText("SideBarOptions");
var re = new RegExp("<<(?:newJournal)([^>]*)>>","mg"); var fm = re.exec(text);
if (fm && fm[1]!=null) { var pa=fm[1].readMacroParams(); if (pa[0]) this.journalDateFmt = pa[0]; }
var month=-1;
if (params[0] == "thismonth") {
var month=today.getMonth();
} else if (params[0] == "lastmonth") {
var month = today.getMonth()-1; if (month==-1) { month=11; year--; }
} else if (params[0] == "nextmonth") {
var month = today.getMonth()+1; if (month>11) { month=0; year++; }
} else if (params[0]&&"+-".indexOf(params[0].substr(0,1))!=-1) {
var month = today.getMonth()+parseInt(params[0]);
if (month>11) { year+=Math.floor(month/12); month%=12; };
if (month<0) { year+=Math.floor(month/12); month=12+month%12; }
} else if (params[0]) {
year = params[0];
if(params[1]) month=parseInt(params[1])-1;
if (month>11) month=11; if (month<0) month=0;
}
if (month!=-1) {
cacheReminders(new Date(year, month, 1, 0, 0), 31);
createCalendarOneMonth(tbody, year, month);
} else {
cacheReminders(new Date(year, 0, 1, 0, 0), 366);
createCalendarYear(tbody, year);
}
window.reminderCacheForCalendar = null;
}
//}}}
//{{{
//This global variable is used to store reminders that have been cached
//while the calendar is being rendered. It will be renulled after the calendar is fully rendered.
window.reminderCacheForCalendar = null;
//}}}
//{{{
function cacheReminders(date, leadtime)
{
if (window.findTiddlersWithReminders == null) return;
window.reminderCacheForCalendar = {};
var leadtimeHash = [];
leadtimeHash [0] = 0;
leadtimeHash [1] = leadtime;
var t = findTiddlersWithReminders(date, leadtimeHash, null, 1);
for(var i = 0; i < t.length; i++) {
//just tag it in the cache, so that when we're drawing days, we can bold this one.
window.reminderCacheForCalendar[t[i]["matchedDate"]] = "reminder:" + t[i]["params"]["title"];
}
}
//}}}
//{{{
function createCalendarOneMonth(calendar, year, mon)
{
var row = createTiddlyElement(calendar, "tr", null, null, null);
createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon] + " " + year, true, year, mon);
row = createTiddlyElement(calendar, "tr", null, null, null);
createCalendarDayHeader(row, 1);
createCalendarDayRowsSingle(calendar, year, mon);
}
//}}}
//{{{
function createCalendarMonth(calendar, year, mon)
{
var row = createTiddlyElement(calendar, "tr", null, null, null);
createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon] + " " + year, false, year, mon);
row = createTiddlyElement(calendar, "tr", null, null, null);
createCalendarDayHeader(row, 1);
createCalendarDayRowsSingle(calendar, year, mon);
}
//}}}
//{{{
function createCalendarYear(calendar, year)
{
var row;
row = createTiddlyElement(calendar, "tr", null, null, null);
var back = createTiddlyElement(row, "td", null, null, null);
var backHandler = function() {
removeChildren(calendar);
createCalendarYear(calendar, parseInt(year)-1);
return false; // consume click
};
createTiddlyButton(back, "<", "Previous year", backHandler);
back.align = "center";
var yearHeader = createTiddlyElement(row, "td", null, "calendarYear", year);
yearHeader.align = "center";
yearHeader.setAttribute("colSpan",config.options.chkDisplayWeekNumbers?22:19);//wn**
var fwd = createTiddlyElement(row, "td", null, null, null);
var fwdHandler = function() {
removeChildren(calendar);
createCalendarYear(calendar, parseInt(year)+1);
return false; // consume click
};
createTiddlyButton(fwd, ">", "Next year", fwdHandler);
fwd.align = "center";
createCalendarMonthRow(calendar, year, 0);
createCalendarMonthRow(calendar, year, 3);
createCalendarMonthRow(calendar, year, 6);
createCalendarMonthRow(calendar, year, 9);
}
//}}}
//{{{
function createCalendarMonthRow(cal, year, mon)
{
var row = createTiddlyElement(cal, "tr", null, null, null);
createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon], false, year, mon);
createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+1], false, year, mon);
createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+2], false, year, mon);
row = createTiddlyElement(cal, "tr", null, null, null);
createCalendarDayHeader(row, 3);
createCalendarDayRows(cal, year, mon);
}
//}}}
//{{{
function createCalendarMonthHeader(cal, row, name, nav, year, mon)
{
var month;
if (nav) {
var back = createTiddlyElement(row, "td", null, null, null);
back.align = "center";
back.style.background = config.macros.calendar.monthbg;
var backMonHandler = function() {
var newyear = year;
var newmon = mon-1;
if(newmon == -1) { newmon = 11; newyear = newyear-1;}
removeChildren(cal);
cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);
createCalendarOneMonth(cal, newyear, newmon);
return false; // consume click
};
createTiddlyButton(back, "<", "Previous month", backMonHandler);
month = createTiddlyElement(row, "td", null, "calendarMonthname")
createTiddlyLink(month,name,true);
month.setAttribute("colSpan", config.options.chkDisplayWeekNumbers?6:5);//wn**
var fwd = createTiddlyElement(row, "td", null, null, null);
fwd.align = "center";
fwd.style.background = config.macros.calendar.monthbg;
var fwdMonHandler = function() {
var newyear = year;
var newmon = mon+1;
if(newmon == 12) { newmon = 0; newyear = newyear+1;}
removeChildren(cal);
cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);
createCalendarOneMonth(cal, newyear, newmon);
return false; // consume click
};
createTiddlyButton(fwd, ">", "Next month", fwdMonHandler);
} else {
month = createTiddlyElement(row, "td", null, "calendarMonthname", name)
month.setAttribute("colSpan",config.options.chkDisplayWeekNumbers?8:7);//wn**
}
month.align = "center";
month.style.background = config.macros.calendar.monthbg;
}
//}}}
//{{{
function createCalendarDayHeader(row, num)
{
var cell;
for(var i = 0; i < num; i++) {
if (config.options.chkDisplayWeekNumbers) createTiddlyElement(row, "td");//wn**
for(var j = 0; j < 7; j++) {
var d = j + (config.options.txtCalFirstDay - 0);
if(d > 6) d = d - 7;
cell = createTiddlyElement(row, "td", null, null, config.macros.calendar.daynames[d]);
if(d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))
cell.style.background = config.macros.calendar.weekendbg;
}
}
}
//}}}
//{{{
function createCalendarDays(row, col, first, max, year, mon) {
var i;
if (config.options.chkDisplayWeekNumbers){
if (first<=max) {
var ww = new Date(year,mon,first);
var td=createTiddlyElement(row, "td");//wn**
var link=createTiddlyLink(td,ww.formatString(config.options.txtWeekNumberLinkFormat),false);
link.appendChild(document.createTextNode(ww.formatString(config.options.txtWeekNumberDisplayFormat)));
}
else createTiddlyElement(row, "td", null, null, null);//wn**
}
for(i = 0; i < col; i++)
createTiddlyElement(row, "td", null, null, null);
var day = first;
for(i = col; i < 7; i++) {
var d = i + (config.options.txtCalFirstDay - 0);
if(d > 6) d = d - 7;
var daycell = createTiddlyElement(row, "td", null, null, null);
var isaWeekend = ((d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))? true:false);
if(day > 0 && day <= max) {
var celldate = new Date(year, mon, day);
// ELS 2005.10.30: use <<date>> macro's showDate() function to create popup
// ELS 5/29/06 - use journalDateFmt
if (window.showDate)
showDate(daycell,celldate,"popup","DD",config.macros.calendar.journalDateFmt,true, isaWeekend);
else {
if(isaWeekend) daycell.style.background = config.macros.calendar.weekendbg;
var title = celldate.formatString(config.macros.calendar.journalDateFmt);
if(calendarIsHoliday(celldate))
daycell.style.background = config.macros.calendar.holidaybg;
var now=new Date();
if ((now-celldate>=0) && (now-celldate<86400000)) // is today?
daycell.style.background = config.macros.calendar.todaybg;
if(window.findTiddlersWithReminders == null) {
var link = createTiddlyLink(daycell, title, false);
link.appendChild(document.createTextNode(day));
} else
var button = createTiddlyButton(daycell, day, title, onClickCalendarDate);
}
}
day++;
}
}
//}}}
//{{{
// We've clicked on a day in a calendar - create a suitable pop-up of options.
// The pop-up should contain:
// * a link to create a new entry for that date
// * a link to create a new reminder for that date
// * an <hr>
// * the list of reminders for that date
// NOTE: The following code is only used when [[DatePlugin]] is not present
function onClickCalendarDate(e)
{
var button = this;
var date = button.getAttribute("title");
var dat = new Date(date.substr(6,4), date.substr(3,2)-1, date.substr(0, 2));
date = dat.formatString(config.macros.calendar.journalDateFmt);
var popup = createTiddlerPopup(this);
popup.appendChild(document.createTextNode(date));
var newReminder = function() {
var t = store.getTiddlers(date);
displayTiddler(null, date, 2, null, null, false, false);
if(t) {
document.getElementById("editorBody" + date).value += "\n<<reminder day:" + dat.getDate() +
" month:" + (dat.getMonth()+1) + " year:" + (dat.getYear()+1900) + " title: >>";
} else {
document.getElementById("editorBody" + date).value = "<<reminder day:" + dat.getDate() +
" month:" + (dat.getMonth()+1) +" year:" + (dat.getYear()+1900) + " title: >>";
}
return false; // consume click
};
var link = createTiddlyButton(popup, "New reminder", null, newReminder);
popup.appendChild(document.createElement("hr"));
var t = findTiddlersWithReminders(dat, [0,14], null, 1);
for(var i = 0; i < t.length; i++) {
link = createTiddlyLink(popup, t[i].tiddler, false);
link.appendChild(document.createTextNode(t[i].tiddler));
}
return false; // consume click
}
//}}}
//{{{
function calendarMaxDays(year, mon)
{
var max = config.macros.calendar.monthdays[mon];
if(mon == 1 && (year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0)) max++;
return max;
}
//}}}
//{{{
function createCalendarDayRows(cal, year, mon)
{
var row = createTiddlyElement(cal, "tr", null, null, null);
var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first1 < 0) first1 = first1 + 7;
var day1 = -first1 + 1;
var first2 = (new Date(year, mon+1, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first2 < 0) first2 = first2 + 7;
var day2 = -first2 + 1;
var first3 = (new Date(year, mon+2, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first3 < 0) first3 = first3 + 7;
var day3 = -first3 + 1;
var max1 = calendarMaxDays(year, mon);
var max2 = calendarMaxDays(year, mon+1);
var max3 = calendarMaxDays(year, mon+2);
while(day1 <= max1 || day2 <= max2 || day3 <= max3) {
row = createTiddlyElement(cal, "tr", null, null, null);
createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;
createCalendarDays(row, 0, day2, max2, year, mon+1); day2 += 7;
createCalendarDays(row, 0, day3, max3, year, mon+2); day3 += 7;
}
}
//}}}
//{{{
function createCalendarDayRowsSingle(cal, year, mon)
{
var row = createTiddlyElement(cal, "tr", null, null, null);
var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
if(first1 < 0) first1 = first1+ 7;
var day1 = -first1 + 1;
var max1 = calendarMaxDays(year, mon);
while(day1 <= max1) {
row = createTiddlyElement(cal, "tr", null, null, null);
createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;
}
}
//}}}
//{{{
setStylesheet(".calendar, .calendar table, .calendar th, .calendar tr, .calendar td { text-align:center; } .calendar, .calendar a { margin:0px !important; padding:0px !important; }", "calendarStyles");
//}}}
// // override cookie settings for CalendarPlugin:
//{{{
config.options.txtCalFirstDay=6;
config.options.txtCalStartOfWeekend=5;
//}}}
// // override internal default settings for CalendarPlugin:
//{{{
config.macros.calendar.journalDateFmt="DDD MMM 0DD YYYY";
//}}}
----
AaA BbB DdD EeE FfF GgG HhH IiI JjJ KkK LlL MmM NnN OoO PpP QqQ RrR SsS TtT UuU VvV WwW XxX YyY ZzZ
----
!!CAD
is the acronym for Computer Aided Design. It is a wide range of computer-based tools that assist engineers, architects and other design professionals in their design activities. It is the main geometry
authoring tool within the Product Lifecycle Management process and involves both software and sometimes special-purpose hardware. Current packages range from 2D vector based drafting systems to 3D solid and surface modellers.
!!!Camber
is the transverse curvature or roundup (crown). It is the difference in height between the deck at the side and the deck at the centerline.
!!!Canning Plate
is a steel plate used as a cover over a compartment or bin containing lead ballast (or lead shielding).
!!!Center of Buoyancy
Archimedes’ Principle states that the sum of the vertical components of the hydrostatic pressure on the immersed surface of a floating body is equal to the weight of the fluid displaced by that floating body. For practical reasons these forces can be treated as a single force acting
through the center of gravity (in a vertical plane) of the displaced water and this center of gravity is known as the center of buoyancy B.
Centerline is a straight line running from bow to stern midway between the sides of the ship, from which all transverse horizontal measurements are taken.
!!!CFE
stands for ~Contractor-Furnished Equipment.
!!!Chain Locker
is a compartment in the forward portion of the ship in which anchor chain is stowed.
!!!Cofferdam
is a narrow vacant space between two bulkheads. A double watertight bulkhead.
!!!Collision Bulkhead
is the watertight bulkhead nearest the bow of a ship; forepeak bulkhead.
!!!Compensation
is, in a submarine, the process of transferring water ballast between the variable ballast tanks and the sea, to effect the desired equilibrium and trim.
!!!Condition A
is the U.S. Navy’s designation for the light ship condition with the addition of lead or permanent ballast. This condition includes all the permanent parts of the ship and all normal operating liquids but without any variable loads such as fuel, food, or personnel.
!!!Condition A-1
is the U.S. Navy’s designation for the light ship condition without lead or permanent ballast. This condition includes all the permanent parts of the ship and all normal operating liquids but without any variable loads such as fuel, food, or personnel.
!!!Condition D
is the U.S. Navy’s designation for the full load condition for a surface ship. It is the ship complete and ready for service in every respect.
!!!Condition N
is the U.S. Navy’s designation for the full load condition for a submarine in diving trim. This is Condition A plus all the variable loads. It is also sometimes called Normal Surface Condition (NSC).
!!!CONOPS
is the acronym for Concept of Operations which is an early stage ship design document describing the way the ship will operate.
!!!Contract Data Requirements List (CDRL)
is a contract form listing all data items to be delivered under the contract. It includes the format, content, frequency, submittal, and distribution requirements.
!!!Contract Design Weight Estimate (CDWE)
is the weight estimate of the light ship, full load, and any other specified loading condition prepared during the contract design phase.
!!!Contract Modification Margin (~ConMod)
is a weight and KG allowance included in the weight estimates
and reports to account for increases associated with contract modifications during the detail design and construction phase. This margin is included in the feasibility, preliminary, and contract
design phase weight estimates.
!!!COR
is the acronym for the Circular of Requirements document.
!!!~Cross-Curves of Stability
To facilitate the design of a new ship, designers calculate a series of
righting arms for various angles of inclination at different displacements. A plot is then made of righting moment arm (vertical scale) vs. displacement (horizontal scale) at different angles of list. Since this approach assumes that the center of gravity lies on the centerline of the ship, corrections should be made for offset center of gravities where they exist.
''[[Chapter Officers]]''
!!!Director: David Tellet
Naval Architect, NAVSEA 05P3, Weight Control and Stability.
202-781-3718 [[david.tellet@navy.mil|mailto:david.tellet@navy.mil]]
!!!President: Brian Heidt
Naval Architect with ~NSWC-Carderock Division Code 244, Weight Control and Stability
[[brian.heidt@navy.mil|mailto:brian.heidt@navy.mil]]
!!!Vice President: Dan Dolan
Manager, Weights and Stability, CSC
202-675-4340 [[ddolan3@csc.com|mailto:ddolan3@csc.com]]
!!!Treasurer: Tom Holloman
Naval Marine Engineer with CSC.
202-675-6859 [[gholloma@csc.com|mailto:gholloma@csc.com]]
!!!Secretary: Matt Yoder
Naval Architect with NAVSEA 05P15, Weight Control and Stability.
[[matthew.d.yoder@navy.mil|mailto:matthew.d.yoder@navy.mil]]
Webmaster: [[telletdl99@mac.com|mailto:telletdl99@mac.com]]
Background: lightyellow
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*
TiddlyWiki Comments Plugin - Online demo at http://tiddlyguv.org/CommentsPlugin.html
TODO:
- Support Cascade comment delete when the top-level tiddler is deleted
- Support more than one < <comments> > per tiddler. This will probably entail creating an invisible root tiddler to
hold all the comments for a macro together. The user will need to provide an ID for this tiddler.
- Don't use global "macro" var (use "macro" param a la jquery)
- Sort by tiddler title or duration
*/
/***
|Name|CommentsPlugin|
|Description|Macro for nested comments, where each comment is a separate tiddler.|
|Source|http://tiddlyguv.org/CommentsPlugin.html#CommentsPlugin|
|Documentation|http://tiddlyguv.org/CommentsPlugin.html#CommentsPluginInfo|
|Version|0.1|
|Author|Michael Mahemoff, Osmosoft|
|''License:''|[[BSD open source license]]|
|~CoreVersion|2.2|
***/
/*{{{*/
if(!version.extensions.CommentsPlugin) {
version.extensions.CommentsPlugin = {installed:true};
(function(plugin) {
var cmacro = config.macros.comments = {
init: function() {
var stylesheet = store.getTiddlerText(tiddler.title + "##StyleSheet");
if (stylesheet) { // check necessary because it happens more than once for some reason
config.shadowTiddlers["StyleSheetCommentsPlugin"] = stylesheet;
store.addNotification("StyleSheetCommentsPlugin", refreshStyles);
}
if (!version.extensions.CommentsPlugin.retainViewTemplate) cmacro.enhanceViewTemplate();
},
enhanceViewTemplate: function() {
var template = config.shadowTiddlers.ViewTemplate;
if ((/commentBreadcrumb/g).test(template)) return; // already enhanced
var TITLE_DIV = "<div class='title' macro='view title'></div>";
var commentsDiv = "<div class='commentBreadcrumb' macro='commentBreadcrumb'></div>";
config.shadowTiddlers.ViewTemplate = template.replace(TITLE_DIV,commentsDiv+"\n"+TITLE_DIV);
},
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var macroParams = paramString.parseParams();
var tiddlerParam = getParam(macroParams, "tiddler");
tiddler = tiddlerParam ? store.getTiddler(tiddlerParam) : tiddler;
if (!tiddler || !store.getTiddler(tiddler.title)) return;
cmacro.buildCommentsArea(tiddler, place, macroParams);
// cmacro.refreshCommentsFromRoot(story.getTiddler(tiddler.title).commentsEl, tiddler, macroParams);
cmacro.refreshCommentsFromRoot(place.commentsEl, tiddler, macroParams);
},
buildCommentsArea: function(rootTiddler, place, macroParams) {
var commentsArea = createTiddlyElement(place, "div", null, "comments");
var heading = getParam(macroParams, "heading");
if (heading) createTiddlyElement(commentsArea, "h1", null, null, heading);
var comments = createTiddlyElement(commentsArea, "div", null, "");
place.commentsEl = comments;
if (cmacro.editable(macroParams)) {
var newCommentArea = createTiddlyElement(commentsArea, "div", null, "newCommentArea", "New comment:");
cmacro.forceLoginIfRequired(params, newCommentArea, function() {
var newCommentEl = cmacro.makeTextArea(newCommentArea, macroParams);
// var addComment = createTiddlyElement(newCommentArea, "button", null, "addComment button", "Add Comment");
var addComment = createTiddlyButton(newCommentArea, "Add Comment", null, function() {
var comment = cmacro.createComment(newCommentEl.value, rootTiddler, macroParams);
newCommentEl.value = "";
cmacro.refreshCommentsFromRoot(comments, rootTiddler, macroParams);
}, "addComment button");
});
}
},
makeTextArea: function(container, macroParams) {
var textArea = createTiddlyElement(container, "textarea");
textArea.rows = getParam(macroParams, "textRows") || 4;
textArea.cols = getParam(macroParams, "textCols") || 20;
textArea.value = getParam(macroParams, "text") || "";
return textArea;
},
refreshCommentsFromRoot: function(rootCommentsEl, rootTiddler, macroParams) {
cmacro.treeifyComments(rootTiddler);
cmacro.refreshComments(rootCommentsEl, rootTiddler, macroParams);
},
refreshComments: function(daddyCommentsEl, tiddler, macroParams) {
var commentsEl;
if (tiddler.fields.daddy) {
var commentEl = cmacro.buildCommentEl(daddyCommentsEl, tiddler, macroParams);
daddyCommentsEl.appendChild(commentEl);
commentsEl = commentEl.commentsEl;
} else { // root element
removeChildren(daddyCommentsEl);
// refreshedEl = story.getTiddler(tiddler.title);
commentsEl = daddyCommentsEl;
}
for (var child = tiddler.firstChild; child; child = child.next) {
cmacro.refreshComments(commentsEl, child, macroParams);
}
},
// This has become more complex due to "confused comments" - multiple comments
// pointing back to the same daddy (which implies they all think they're the first
// child) or a single "2nd-last" sibling (which implies they all think they're the
// last sibling). This happens in the typical "atomic transaction 101" scenario -
// user A opens wiki, user B opens wiki, one of the users submits a comment,
// the other user submits a comment.
//
// Normally, each comment says "make my daddy's first child be me", or "make my prev
// sibling's next sibling be me". That's how the tree gets built. But to deal
// with confused comments, we now have to check if daddy/prev is already pointing
// to something. If so, we will have to walk through the list to find the right place
// for the new item.
//
// We begin by sorting by date; if we can assume we are walking through the comments by date,
// the confused comments will appear in the right order.
treeifyComments: function(rootTiddler) {
// First, clear the tree data
// We sort the comments to ensure "confused" comments
var comments = cmacro.findCommentsFromRoot(rootTiddler).sort(function(a,b) {
return a.modified > b.modified;
});
var nodes=comments.concat(rootTiddler);
for (var i=0; i<nodes.length; i++) {
delete nodes[i]["firstChild"];
delete nodes[i]["next"];
}
// Now walk through each comment
cmacro.forEach(comments, function(comment) {
var prev = comment.fields.prev;
var daddy = comment.fields.daddy;
if (prev) {
var prevTiddler = store.getTiddler(prev);
if (prevTiddler.next) {
for (var lastChild=prevTiddler.next; lastChild.next; lastChild=lastChild.next)
;
lastChild.next = comment;
// } else {
} else {
prevTiddler.next = comment;
}
} else {
var daddyTiddler = store.getTiddler(daddy);
if (daddyTiddler.firstChild) {
for (var lastChild=daddyTiddler.firstChild; lastChild.next; lastChild=lastChild.next)
;
lastChild.next = comment;
} else {
daddyTiddler.firstChild = comment;
}
}
});
for (var i=0; i<comments.length; i++) {
var c=comments.sort()[i];
}
},
logComments: function(comments) {
for (var i=0; i<comments.length; i++) {
var comment = comments[i];
}
},
findCommentsFromRoot: function(rootTiddler) {
var comments = [];
store.forEachTiddler(function(title,tiddler) {
if (tiddler.fields.root==rootTiddler.title) comments.push(tiddler);
});
return comments;
},
findChildren: function(daddyTiddler) {
var comments = [];
store.forEachTiddler(function(title,tiddler) {
if (tiddler.fields.daddy==daddyTiddler.title) comments.push(tiddler);
});
return comments;
},
buildCommentEl: function(daddyCommentsEl, comment, macroParams) {
// COMMENT ELEMENT
var commentEl = document.createElement("div");
commentEl.className = "comment";
// HEADING <- METAINFO AND DELETE
var headingEl = createTiddlyElement(commentEl, "div", null, "heading");
var metaInfoEl = createTiddlyElement(headingEl, "div", null, "commentTitle", comment.modifier + '@' + comment.modified.formatString(getParam(macroParams,"dateFormat") || "DDD, MMM DDth, YYYY hh12:0mm:0ss am"));
metaInfoEl.onclick = function() {
// story.closeAllTiddlers();
story.displayTiddler("top", comment.title, null, true);
// document.location.hash = "#" + comment.title;
};
var deleteEl = createTiddlyElement(headingEl, "div", null, "deleteComment", "X");
deleteEl.onclick = function() {
if (true || confirm("Delete this comment and all of its replies?")) {
cmacro.deleteTiddlerAndDescendents(comment);
commentEl.parentNode.removeChild(commentEl);
}
};
// TEXT
commentEl.text = createTiddlyElement(commentEl, "div", null, "commentText");
wikify(comment.text, commentEl.text);
// REPLY LINK
if (cmacro.editable(macroParams)) {
var replyLinkZone = createTiddlyElement(commentEl, "div", null, "replyLinkZone");
var replyLink = createTiddlyElement(replyLinkZone, "span", null, "replyLink", "reply to this comment");
replyLink.onclick = function() { cmacro.openReplyLink(comment, commentEl, replyLink, macroParams); };
}
// var clearance = createTiddlyElement(commentEl, "clearance", null, "clearance");
// clearance.innerHTML = " ";
// COMMENTS AREA
commentEl.commentsEl = createTiddlyElement(commentEl, "div", null, "comments");
// RETURN
return commentEl;
},
openReplyLink: function(commentTiddler, commentEl, replyLink, macroParams) {
if (commentEl.replyEl) {
commentEl.replyEl.style.display = "block";
return;
}
commentEl.replyEl = document.createElement("div");
commentEl.replyEl.className = "reply";
replyLink.style.display = "none";
var newReplyHeading = createTiddlyElement(commentEl.replyEl, "div", null, "newReply");
createTiddlyElement(newReplyHeading, "div", null, "newReplyLabel", "New Reply:");
var closeNewReply = createTiddlyElement(newReplyHeading, "div", null, "closeNewReply", "close");
closeNewReply.onclick = function() {
commentEl.replyEl.style.display = "none";
replyLink.style.display = "block";
};
cmacro.forceLoginIfRequired(params, commentEl.replyEl, function() {
var replyText = cmacro.makeTextArea(commentEl.replyEl, macroParams);
var submitReply = createTiddlyButton(commentEl.replyEl, "Reply", null, function() {
var newComment = cmacro.createComment(replyText.value, commentTiddler, macroParams);
replyText.value = "";
closeNewReply.onclick();
cmacro.refreshComments(commentEl.commentsEl, newComment, macroParams);
});
});
commentEl.insertBefore(commentEl.replyEl, commentEl.commentsEl);
},
createComment: function(text, daddy, macroParams) {
var rootTitle = daddy.fields.root ? daddy.fields.root : daddy.title;
// second case is the situation where daddy *is* root
var newComment = cmacro.createCommentTiddler(macroParams, rootTitle);
var fieldsParam = getParam(macroParams, "fields") || "";
var fields = fieldsParam.decodeHashMap();
var inheritedFields = (getParam(macroParams, "inheritedFields") || "").split(",");
cmacro.forEach(inheritedFields, function(field) {
if (field!="") fields[field] = daddy.fields[field];
});
var tagsParam = getParam(macroParams, "tags") || "comment";
var now = new Date();
newComment.set(null, text, config.options.txtUserName, now, tagsParam.split(","), now, fields);
var youngestSibling = cmacro.findYoungestChild(daddy)
if (youngestSibling) newComment.fields.prev = youngestSibling.title;
newComment.fields.daddy = daddy.title;
newComment.fields.root = rootTitle;
cmacro.saveTiddler(newComment.title);
autoSaveChanges(false);
return newComment;
},
findYoungestChild: function(daddy) {
var siblingCount = 0;
var elderSiblings = cmacro.mapize(cmacro.selectTiddlers(function(tiddler) {
isChild = (tiddler.fields.daddy==daddy.title);
if (isChild) siblingCount++;
return isChild;
}));
if (!siblingCount) return null;
// Find the only sibling that doesn't have a prev pointing at it
var youngestSiblings = cmacro.clone(elderSiblings) // as a starting point
cmacro.forEachMap(elderSiblings, function(tiddler) {
delete youngestSiblings[tiddler.fields.prev];
});
for (title in youngestSiblings) { return youngestSiblings[title]; }
},
// The recursive delete is run by a separate function (nested inside
// this one, for encapsulation purposes).
deleteTiddlerAndDescendents: function(tiddler) {
function deleteRecursively(tiddler) {
for (var child = tiddler.firstChild; child; child = child.next) {
deleteRecursively(child);
}
store.removeTiddler(tiddler.title);
}
cmacro.treeifyComments(store.getTiddler(tiddler.fields.root));
// save some info prior to deleting
var prev = tiddler.fields.prev;
var next = tiddler.next;
deleteRecursively(tiddler);
// used saved info
if (next) {
next.fields.prev = prev;
cmacro.saveTiddler(next.title);
}
autoSaveChanges(false);
},
forEach: function(list, visitor) { for (var i=0; i<list.length; i++) visitor(list[i]); },
forEachMap: function(map, visitor) { for (var key in map) visitor(map[key]); },
select: function(list, selector) {
var selection = [];
cmacro.forEach(list, function(currentItem) {
if (selector(currentItem)) { selection.push(currentItem); }
});
return selection;
},
selectTiddlers: function(selector) {
var tiddlers = [];
store.forEachTiddler(function(title, tiddler) {
var wanted = selector(tiddler);
if (wanted) tiddlers.push(tiddler);
});
return tiddlers;
},
map: function(list, mapper) {
var mapped = [];
cmacro.forEach(list, function(currentItem) { mapped.push(mapper(currentItem)); });
return mapped;
},
remove: function(list, unwantedItem) {
return cmacro.select(list,
function(currentItem) { return currentItem!=unwantedItem; });
},
mapize: function(tiddlerList) {
var map = {};
cmacro.forEach(tiddlerList, function(tiddler) { map[tiddler.title] = tiddler; });
return map;
},
clone: function(map) { return merge({}, map); },
editable: function(params) {
var editable = getParam(params, "editable");
return (!editable || editable!="false");
},
needsLogin: function(params) {
var loginCheck = getParam(params, "loginCheck");
return loginCheck && !window[loginCheck]();
},
forceLoginIfRequired: function(params, loginPromptContainer, authenticatedBlock) {
if (cmacro.needsLogin(params)) wikify("<<"+getParam(macroParams, "loginPrompt")+">>", loginPromptContainer);
else authenticatedBlock();
},
mergeReadOnly: function(first, second) {
var merged = {};
for (var field in first) { merged[field] = first[field]; }
for (var field in second) { merged[field] = second[field]; }
return merged;
},
// callers may replace this with their own ID generation algorithm
createCommentTiddler: function(macroParams, rootTitle) {
// var titleFormat = getParam(macroParams, "titleFormat") || "%root%Comment";
var prefix = rootTitle+"Comment"; // was "_comment"
if (!store.createGuidTiddler) return store.createTiddler(prefix+((new Date()).getTime()));
return store.createGuidTiddler(prefix);
},
saveTiddler: function(tiddler) {
var tiddler = (typeof(tiddler)=="string") ? store.getTiddler(tiddler) : tiddler;
store.saveTiddler(tiddler.title, tiddler.title, tiddler.text, tiddler.modifier, tiddler.modified, tiddler.tags, cmacro.mergeReadOnly(config.defaultCustomFields, tiddler.fields), false, tiddler.created)
},
log: function() { if (console && console.firebug) console.log.apply(console, arguments); },
assert: function() { if (console && console.firebug) console.assert.apply(console, arguments); },
copyFields: function(fromTiddler, toTiddler, field1, field2, fieldN) {
for (var i=2; i<arguments.length; i++) {
fieldKey = arguments[i];
if (fromTiddler.fields[fieldKey]) toTiddler.fields[fieldKey] = fromTiddler.fields[fieldKey];
}
}
}
config.macros.commentsCount = {
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var count = 0;
if (tiddler && store.getTiddler(tiddler.title)) {
var rootTiddler = paramString.length ? paramString : tiddler.title;
count = config.macros.comments.findCommentsFromRoot(store.getTiddler(rootTiddler)).length;
}
createTiddlyText(place, count);
}
},
config.macros.commentBreadcrumb = {
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
if (!tiddler.fields.root) return;
var rootLink = createTiddlyElement(place, "span", null, null);
createTiddlyLink(rootLink, tiddler.fields.root, true);
var rootIsParent = tiddler.fields.daddy==tiddler.fields.root;
var rootIsGrandparent = (store.getTiddler(tiddler.fields.daddy)).fields.daddy==tiddler.fields.root;
if (!rootIsParent) {
if (!rootIsGrandparent) createTiddlyElement(place, "span", null, null, " > ... ");
createTiddlyElement(place, "span", null, null, " > ");
var daddyLink = createTiddlyElement(place, "span", null, null);
createTiddlyLink(daddyLink, tiddler.fields.daddy, true);
}
createTiddlyElement(place, "span", null, null, " > ");
// place.appendChild(createTiddlyLink(tiddler.fields.root));
}
}
config.macros.tiddlyWebComments = {};
config.macros.tiddlyWebComments.handler =
function(place,macroName,params,wikifier,paramString,tiddler) {
paramString = "fields:'server.workspace:bags/comments' inheritedFields:'server.host,server.type'";
config.macros.comments.handler(place,macroName,params,wikifier, paramString,tiddler);
};
function log() { if (console && console.firebug) console.log.apply(console, arguments); }
})(version.extensions.CommentsPlugin);
/***
!StyleSheet
.comments h1 { margin-bottom: 0; padding-bottom: 0; }
.comments { padding: 0; }
.comment .comments { margin-left: 1em; }
.comment { padding: 0; margin: 1em 0 0; }
.comment .comment { margin 0; }
.comment .toolbar .button { border: 0; color: #9a4; }
.comment .heading { background: [[ColorPalette::PrimaryPale]]; color: [[ColorPalette::PrimaryDark]]; border-bottom: 1px solid [[ColorPalette::PrimaryLight]]; border-right: 1px solid [[ColorPalette::PrimaryLight]]; padding: 0.5em; height: 1.3em; }
.commentTitle { float: left; }
.commentTitle:hover { text-decoration: underline; cursor: pointer; }
.commentText { clear: both; padding: 1em 1em; }
.deleteComment { float: right; cursor: pointer; text-decoration:underline; color:[[ColorPalette::SecondaryDark]]; padding-right: 0.3em; }
.comment .reply { margin-left: 1em; }
.comment .replyLink { color:[[ColorPalette::SecondaryDark]]; font-style: italic;
cursor: pointer; text-decoration: underline; margin: 0 1em; }
.comment .created { }
.comment .newReply { color:[[ColorPalette::SecondaryDark]]; margin-top: 1em; }
.newReplyLabel { float: left; }
.closeNewReply { cursor: pointer; float: right; text-decoration: underline; }
.comments textarea { width: 100%; padding: 0.3em; margin-bottom: 0.6em; }
.newCommentArea { margin-top: 0.5em; }
.clearance { clear: both; }
!(end of StyleSheet)
***/
config.macros.comments.init();
} // end of 'install only once'
/*}}}*/
// function log() { if (console && console.firebug) console.log.apply(console, arguments); }
|!Material|!lbs/Cu Ft|
|Steel| 490.00|
|Aluminum| 165.00|
|Brass| 538.00|
|Concrete| 145.00|
|Copper| 547.00|
|Lead| 710.00|
|Polyurethane| 57.43|
|Rubber - Bulk| 76.00|
|Polyethylene| 54.41|
/***
|Name|DatePlugin|
|Source|http://www.TiddlyTools.com/#DatePlugin|
|Documentation|http://www.TiddlyTools.com/#DatePluginInfo|
|Version|2.7.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Options|##Configuration|
|Description|formatted dates plus popup menu with 'journal' link, changes and (optional) reminders|
There are quite a few calendar generators, reminders, to-do lists, 'dated tiddlers' journals, blog-makers and GTD-like schedule managers that have been built around TW. While they all have different purposes, and vary in format, interaction, and style, in one way or another each of these plugins displays and/or uses date-based information to make finding, accessing and managing relevant tiddlers easier. This plugin provides a general approach to embedding dates and date-based links/menus within tiddler content.
!!!!!Documentation
>see [[DatePluginInfo]]
!!!!!Configuration
<<<
<<option chkDatePopupHideCreated>> omit 'created' section from date popups
<<option chkDatePopupHideChanged>> omit 'changed' section from date popups
<<option chkDatePopupHideTagged>> omit 'tagged' section from date popups
<<option chkDatePopupHideReminders>> omit 'reminders' section from date popups
<<option chkShowJulianDate>> display Julian day number (1-365) below current date
see [[DatePluginConfig]] for additional configuration settings, for use in calendar displays, including:
*date formats
*color-coded backgrounds
*annual fixed-date holidays
*weekends
<<<
!!!!!Revisions
<<<
2008.03.08 [2.7.0] in addModifiedsToPopup(), if a tiddler was created on the specified date, don't list it in the 'changed' section of the popup. Based on a request from Kashgarinn.
|please see [[DatePluginInfo]] for additional revision details|
2005.10.30 [0.9.0] pre-release
<<<
!!!!!Code
***/
//{{{
version.extensions.DatePlugin= {major: 2, minor: 7, revision: 0, date: new Date(2008,3,8)};
config.macros.date = {
format: "YYYY.0MM.0DD", // default date display format
linkformat: "YYYY.0MM.0DD", // 'dated tiddler' link format
linkedbg: "#babb1e", // "babble"
todaybg: "#ffab1e", // "fable"
weekendbg: "#c0c0c0", // "cocoa"
holidaybg: "#ffaace", // "face"
createdbg: "#bbeeff", // "beef"
modifiedsbg: "#bbeeff", // "beef"
remindersbg: "#c0ffee", // "coffee"
holidays: [ "01/01", "07/04", "07/24", "11/24" ], // NewYearsDay, IndependenceDay(US), Eric's Birthday (hooray!), Thanksgiving(US)
weekend: [ 1,0,0,0,0,0,1 ] // [ day index values: sun=0, mon=1, tue=2, wed=3, thu=4, fri=5, sat=6 ]
};
config.macros.date.handler = function(place,macroName,params)
{
// do we want to see a link, a popup, or just a formatted date?
var mode="display";
if (params[0]=="display") { mode=params[0]; params.shift(); }
if (params[0]=="popup") { mode=params[0]; params.shift(); }
if (params[0]=="link") { mode=params[0]; params.shift(); }
// get the date
var now = new Date();
var date = now;
if (!params[0] || params[0]=="today")
{ params.shift(); }
else if (params[0]=="filedate")
{ date=new Date(document.lastModified); params.shift(); }
else if (params[0]=="tiddler")
{ date=store.getTiddler(story.findContainingTiddler(place).id.substr(7)).modified; params.shift(); }
else if (params[0].substr(0,8)=="tiddler:")
{ var t; if ((t=store.getTiddler(params[0].substr(8)))) date=t.modified; params.shift(); }
else {
var y = eval(params.shift().replace(/Y/ig,(now.getYear()<1900)?now.getYear()+1900:now.getYear()));
var m = eval(params.shift().replace(/M/ig,now.getMonth()+1));
var d = eval(params.shift().replace(/D/ig,now.getDate()+0));
date = new Date(y,m-1,d);
}
// date format with optional custom override
var format=this.format; if (params[0]) format=params.shift();
var linkformat=this.linkformat; if (params[0]) linkformat=params.shift();
showDate(place,date,mode,format,linkformat);
}
window.showDate=showDate;
function showDate(place,date,mode,format,linkformat,autostyle,weekend)
{
if (!mode) mode="display";
if (!format) format=config.macros.date.format;
if (!linkformat) linkformat=config.macros.date.linkformat;
if (!autostyle) autostyle=false;
// format the date output
var title = date.formatString(format);
var linkto = date.formatString(linkformat);
// just show the formatted output
if (mode=="display") { place.appendChild(document.createTextNode(title)); return; }
// link to a 'dated tiddler'
var link = createTiddlyLink(place, linkto, false);
link.appendChild(document.createTextNode(title));
link.title = linkto;
link.date = date;
link.format = format;
link.linkformat = linkformat;
// if using a popup menu, replace click handler for dated tiddler link
// with handler for popup and make link text non-italic (i.e., an 'existing link' look)
if (mode=="popup") {
link.onclick = onClickDatePopup;
link.style.fontStyle="normal";
}
// format the popup link to show what kind of info it contains (for use with calendar generators)
if (autostyle) setDateStyle(place,link,weekend);
}
//}}}
//{{{
// NOTE: This function provides default logic for setting the date style when displayed in a calendar
// To customize the date style logic, please see[[DatePluginConfig]]
function setDateStyle(place,link,weekend) {
// alias variable names for code readability
var date=link.date;
var fmt=link.linkformat;
var linkto=date.formatString(fmt);
var cmd=config.macros.date;
if ((weekend!==undefined?weekend:isWeekend(date))&&(cmd.weekendbg!=""))
{ place.style.background = cmd.weekendbg; }
if (hasModifieds(date)||hasCreateds(date)||hasTagged(date,fmt))
{ link.style.fontStyle="normal"; link.style.fontWeight="bold"; }
if (hasReminders(date))
{ link.style.textDecoration="underline"; }
if (isToday(date))
{ link.style.border="1px solid black"; }
if (isHoliday(date)&&(cmd.holidaybg!=""))
{ place.style.background = cmd.holidaybg; }
if (hasCreateds(date)&&(cmd.createdbg!=""))
{ place.style.background = cmd.createdbg; }
if (hasModifieds(date)&&(cmd.modifiedsbg!=""))
{ place.style.background = cmd.modifiedsbg; }
if ((hasTagged(date,fmt)||store.tiddlerExists(linkto))&&(cmd.linkedbg!=""))
{ place.style.background = cmd.linkedbg; }
if (hasReminders(date)&&(cmd.remindersbg!=""))
{ place.style.background = cmd.remindersbg; }
if (isToday(date)&&(cmd.todaybg!=""))
{ place.style.background = cmd.todaybg; }
if (config.options.chkShowJulianDate) { // optional display of Julian date numbers
var m=[0,31,59,90,120,151,181,212,243,273,304,334];
var d=date.getDate()+m[date.getMonth()];
var y=date.getFullYear();
if (date.getMonth()>1 && (y%4==0 && y%100!=0) || y%400==0)
d++; // after February in a leap year
wikify("@@font-size:80%;<br>"+d+"@@",place);
}
}
//}}}
//{{{
function isToday(date) // returns true if date is today
{ var now=new Date(); return ((now-date>=0) && (now-date<86400000)); }
function isWeekend(date) // returns true if date is a weekend
{ return (config.macros.date.weekend[date.getDay()]); }
function isHoliday(date) // returns true if date is a holiday
{
var longHoliday = date.formatString("0MM/0DD/YYYY");
var shortHoliday = date.formatString("0MM/0DD");
for(var i = 0; i < config.macros.date.holidays.length; i++) {
var holiday=config.macros.date.holidays[i];
if (holiday==longHoliday||holiday==shortHoliday) return true;
}
return false;
}
//}}}
//{{{
// Event handler for clicking on a day popup
function onClickDatePopup(e)
{
if (!e) var e = window.event;
var theTarget = resolveTarget(e);
var popup = Popup.create(this);
if(popup) {
// always show dated tiddler link (or just date, if readOnly) at the top...
if (!readOnly || store.tiddlerExists(this.date.formatString(this.linkformat)))
createTiddlyLink(popup,this.date.formatString(this.linkformat),true);
else
createTiddlyText(popup,this.date.formatString(this.linkformat));
if (!config.options.chkDatePopupHideCreated)
addCreatedsToPopup(popup,this.date,this.format);
if (!config.options.chkDatePopupHideChanged)
addModifiedsToPopup(popup,this.date,this.format);
if (!config.options.chkDatePopupHideTagged)
addTaggedToPopup(popup,this.date,this.linkformat);
if (!config.options.chkDatePopupHideReminders)
addRemindersToPopup(popup,this.date,this.linkformat);
}
Popup.show(popup,false);
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
return(false);
}
//}}}
//{{{
function indexCreateds() // build list of tiddlers, hash indexed by creation date
{
var createds= { };
var tiddlers = store.getTiddlers("title","excludeLists");
for (var t = 0; t < tiddlers.length; t++) {
var date = tiddlers[t].created.formatString("YYYY0MM0DD")
if (!createds[date])
createds[date]=new Array();
createds[date].push(tiddlers[t].title);
}
return createds;
}
function hasCreateds(date) // returns true if date has created tiddlers
{
if (!config.macros.date.createds) config.macros.date.createds=indexCreateds();
return (config.macros.date.createds[date.formatString("YYYY0MM0DD")]!=undefined);
}
function addCreatedsToPopup(popup,when,format)
{
var force=(store.isDirty() && when.formatString("YYYY0MM0DD")==new Date().formatString("YYYY0MM0DD"));
if (force || !config.macros.date.createds) config.macros.date.createds=indexCreateds();
var indent=String.fromCharCode(160)+String.fromCharCode(160);
var createds = config.macros.date.createds[when.formatString("YYYY0MM0DD")];
if (createds) {
createds.sort();
var e=createTiddlyElement(popup,"div",null,null,"created ("+createds.length+")");
for(var t=0; t<createds.length; t++) {
var link=createTiddlyLink(popup,createds[t],false);
link.appendChild(document.createTextNode(indent+createds[t]));
createTiddlyElement(popup,"br",null,null,null);
}
}
}
//}}}
//{{{
function indexModifieds() // build list of tiddlers, hash indexed by modification date
{
var modifieds= { };
var tiddlers = store.getTiddlers("title","excludeLists");
for (var t = 0; t < tiddlers.length; t++) {
var date = tiddlers[t].modified.formatString("YYYY0MM0DD")
if (!modifieds[date])
modifieds[date]=new Array();
modifieds[date].push(tiddlers[t].title);
}
return modifieds;
}
function hasModifieds(date) // returns true if date has modified tiddlers
{
if (!config.macros.date.modifieds) config.macros.date.modifieds = indexModifieds();
return (config.macros.date.modifieds[date.formatString("YYYY0MM0DD")]!=undefined);
}
function addModifiedsToPopup(popup,when,format)
{
var date=when.formatString("YYYY0MM0DD");
var force=(store.isDirty() && date==new Date().formatString("YYYY0MM0DD"));
if (force || !config.macros.date.modifieds) config.macros.date.modifieds=indexModifieds();
var indent=String.fromCharCode(160)+String.fromCharCode(160);
var mods = config.macros.date.modifieds[date];
if (mods) {
// if a tiddler was created on this date, don't list it in the 'changed' section
if (config.macros.date.createds && config.macros.date.createds[date]) {
var temp=[];
for(var t=0; t<mods.length; t++)
if (!config.macros.date.createds[date].contains(mods[t]))
temp.push(mods[t]);
mods=temp;
}
mods.sort();
var e=createTiddlyElement(popup,"div",null,null,"changed ("+mods.length+")");
for(var t=0; t<mods.length; t++) {
var link=createTiddlyLink(popup,mods[t],false);
link.appendChild(document.createTextNode(indent+mods[t]));
createTiddlyElement(popup,"br",null,null,null);
}
}
}
//}}}
//{{{
function hasTagged(date,format) // returns true if date is tagging other tiddlers
{
return store.getTaggedTiddlers(date.formatString(format)).length>0;
}
function addTaggedToPopup(popup,when,format)
{
var indent=String.fromCharCode(160)+String.fromCharCode(160);
var tagged=store.getTaggedTiddlers(when.formatString(format));
if (tagged.length) var e=createTiddlyElement(popup,"div",null,null,"tagged ("+tagged.length+")");
for(var t=0; t<tagged.length; t++) {
var link=createTiddlyLink(popup,tagged[t].title,false);
link.appendChild(document.createTextNode(indent+tagged[t].title));
createTiddlyElement(popup,"br",null,null,null);
}
}
//}}}
//{{{
function indexReminders(date,leadtime) // build list of tiddlers with reminders, hash indexed by reminder date
{
var reminders = { };
if(window.findTiddlersWithReminders!=undefined) { // reminder plugin is installed
// DEBUG var starttime=new Date();
var t = findTiddlersWithReminders(date, [0,leadtime], null, null, 1);
for(var i=0; i<t.length; i++) reminders[t[i].matchedDate]=true;
// DEBUG var out="Found "+t.length+" reminders in "+((new Date())-starttime+1)+"ms\n";
// DEBUG out+="startdate: "+date.toLocaleDateString()+"\n"+"leadtime: "+leadtime+" days\n\n";
// DEBUG for(var i=0; i<t.length; i++) { out+=t[i].matchedDate.toLocaleDateString()+" "+t[i].params.title+"\n"; }
// DEBUG alert(out);
}
return reminders;
}
function hasReminders(date) // returns true if date has reminders
{
if (window.reminderCacheForCalendar)
return window.reminderCacheForCalendar[date]; // use calendar cache
if (!config.macros.date.reminders)
config.macros.date.reminders = indexReminders(date,90); // create a 90-day leadtime reminder cache
return (config.macros.date.reminders[date]);
}
function addRemindersToPopup(popup,when,format)
{
if(window.findTiddlersWithReminders==undefined) return; // reminder plugin not installed
var indent = String.fromCharCode(160)+String.fromCharCode(160);
var reminders=findTiddlersWithReminders(when, [0,31],null,null,1);
createTiddlyElement(popup,"div",null,null,"reminders ("+(reminders.length||"none")+")");
for(var t=0; t<reminders.length; t++) {
link = createTiddlyLink(popup,reminders[t].tiddler,false);
var diff=reminders[t].diff;
diff=(diff<1)?"Today":((diff==1)?"Tomorrow":diff+" days");
var txt=(reminders[t].params["title"])?reminders[t].params["title"]:reminders[t].tiddler;
link.appendChild(document.createTextNode(indent+diff+" - "+txt));
createTiddlyElement(popup,"br",null,null,null);
}
if (readOnly) return; // omit "new reminder..." link
var link = createTiddlyLink(popup,indent+"new reminder...",true); createTiddlyElement(popup,"br");
var title = when.formatString(format);
link.title="add a reminder to '"+title+"'";
link.onclick = function() {
// show tiddler editor
story.displayTiddler(null, title, 2, null, null, false, false);
// find body 'textarea'
var c =document.getElementById("tiddler" + title).getElementsByTagName("*");
for (var i=0; i<c.length; i++) if ((c[i].tagName.toLowerCase()=="textarea") && (c[i].getAttribute("edit")=="text")) break;
// append reminder macro to tiddler content
if (i<c.length) {
if (store.tiddlerExists(title)) c[i].value+="\n"; else c[i].value="";
c[i].value += "<<reminder";
c[i].value += " day:"+when.getDate();
c[i].value += " month:"+(when.getMonth()+1);
c[i].value += " year:"+when.getFullYear();
c[i].value += ' title:"Enter a title" >>';
}
};
}
//}}}
/***
|Name|DatePluginConfig|
|Source|http://www.TiddlyTools.com/#DatePluginConfig|
|Documentation|http://www.TiddlyTools.com/#DatePluginInfo|
|Version|2.6.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|formats, background colors and other optional settings for DatePlugin|
***/
// // Default popup content display options (can be overridden by cookies)
//{{{
if (config.options.chkDatePopupHideCreated===undefined)
config.options.chkDatePopupHideCreated=false;
if (config.options.chkDatePopupHideChanged===undefined)
config.options.chkDatePopupHideChanged=false;
if (config.options.chkDatePopupHideTagged===undefined)
config.options.chkDatePopupHideTagged=false;
if (config.options.chkDatePopupHideReminders===undefined)
config.options.chkDatePopupHideReminders=false;
//}}}
// // show Julian date number below regular date
//{{{
if (config.options.chkShowJulianDate===undefined)
config.options.chkShowJulianDate=false;
//}}}
// // fixed-date annual holidays
//{{{
config.macros.date.holidays=[
"01/01", // NewYearsDay,
"07/04", // US Independence Day
"07/24" // Eric's Birthday (hooray!)
];
//}}}
// // weekend map (1=weekend, 0=weekday)
//{{{
config.macros.date.weekend=[ 1,0,0,0,0,0,1 ]; // day index values: sun=0, mon=1, tue=2, wed=3, thu=4, fri=5, sat=6
//}}}
// // date display/link formats
//{{{
config.macros.date.format="YYYY.0MM.0DD"; // default date display format
config.macros.date.linkformat="YYYY.0MM.0DD"; // 'dated tiddler' link format
//}}}
// // When displaying a calendar (see [[CalendarPlugin]]), you can customize the colors/styles that are applied to the calendar dates by modifying the values and/or functions below:
//{{{
// default calendar colors
config.macros.date.weekendbg="#c0c0c0";
config.macros.date.holidaybg="#ffaace";
config.macros.date.createdbg="#bbeeff";
config.macros.date.modifiedsbg="#bbeeff";
config.macros.date.linkedbg="#babb1e";
config.macros.date.remindersbg="#c0ffee";
// apply calendar styles
function setDateStyle(place,link,weekend) {
// alias variable names for code readability
var date=link.date;
var fmt=link.linkformat;
var linkto=date.formatString(fmt);
var cmd=config.macros.date;
if ((weekend!==undefined?weekend:isWeekend(date))&&(cmd.weekendbg!=""))
{ place.style.background = cmd.weekendbg; }
if (hasModifieds(date)||hasCreateds(date)||hasTagged(date,fmt))
{ link.style.fontStyle="normal"; link.style.fontWeight="bold"; }
if (hasReminders(date))
{ link.style.textDecoration="underline"; }
if (isToday(date))
{ link.style.border="1px solid black"; }
if (isHoliday(date)&&(cmd.holidaybg!=""))
{ place.style.background = cmd.holidaybg; }
if (hasCreateds(date)&&(cmd.createdbg!=""))
{ place.style.background = cmd.createdbg; }
if (hasModifieds(date)&&(cmd.modifiedsbg!=""))
{ place.style.background = cmd.modifiedsbg; }
if ((hasTagged(date,fmt)||store.tiddlerExists(linkto))&&(cmd.linkedbg!=""))
{ place.style.background = cmd.linkedbg; }
if (hasReminders(date)&&(cmd.remindersbg!=""))
{ place.style.background = cmd.remindersbg; }
if (isToday(date)&&(cmd.todaybg!=""))
{ place.style.background = cmd.todaybg; }
if (config.options.chkShowJulianDate) {
var m=[0,31,59,90,120,151,181,212,243,273,304,334];
var d=date.getDate()+m[date.getMonth()];
var y=date.getFullYear();
if (date.getMonth()>1 && (y%4==0 && y%100!=0) || y%400==0) d++; // after February in a leap year
wikify("@@font-size:80%;<br>"+d+"@@",place);
}
}
//}}}
|Name|DatePluginInfo|
|Source|http://www.TiddlyTools.com/#DatePlugin|
|Documentation|http://www.TiddlyTools.com/#DatePluginInfo|
|Version|2.7.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|documentation|
|Requires||
|Overrides||
|Description|documentation for DatePlugin|
There are quite a few calendar generators, reminders, to-do lists, 'dated tiddlers' journals, blog-makers and GTD-like schedule managers that have been built around TW. While they all have different purposes, and vary in format, interaction, and style, in one way or another each of these plugins displays and/or uses date-based information to make finding, accessing and managing relevant tiddlers easier. This plugin provides a general approach to embedding dates and date-based links/menus within tiddler content.
!!!!!Usage
<<<
This plugin display formatted dates, for the specified year, month, day using number values or mathematical expressions such as (Y+1) or (D+30). Optionally, you can create a link from the formatted output to a 'dated tiddler' for quick blogging or create a popup menu that includes the dated tiddler link plus links to tiddlers that were created/changed on that date, or are tagged with that date, as well as links to any pending reminders for the coming 31 days (if the RemindersPlugin is installed). This plugin also provides a public API for easily incorporating formatted date output (with or without the links/popups) into other plugins, such as calendar generators, etc.
This plugin defines a macro: {{{<<date [mode] [date] [format] [linkformat]>>}}}. All of the macro parameters are optional and, in it's simplest form, {{{<<date>>}}}, it is equivalent to the ~TiddlyWiki core macro, {{{<<today>>}}}.
However, where {{{<<today>>}}} simply inserts the current date/time in a predefined format (or custom format, using {{{<<today [format]>>}}}), the {{{<<date>>}}} macro's parameters take it much further than that:
* [mode] is either ''display'', ''link'' or ''popup''. If omitted, it defaults to ''display''. This param let's you select between simply displaying a formatted date, or creating a link to a specific 'date titled' tiddler or a popup menu containing a dated tiddler link, plus links to changes and reminders.
* [date] lets you enter ANY date (not just today) as ''year, month, and day values or simple mathematical expressions'' using pre-defined variables, Y, M, and D for the current year, month and day, repectively. You can display the modification date of the current tiddler by using the keyword: ''tiddler'' in place of the year, month and day parameters. Use ''tiddler://name-of-tiddler//'' to display the modification date of a specific tiddler. You can also use keywords ''today'' or ''filedate'' to refer to these //dynamically changing// date/time values.
* [format] and [linkformat] uses standard ~TiddlyWiki date formatting syntax. The default is "YYYY.0MM.0DD"
>^^''DDD'' - day of week in full (eg, "Monday"), ''DD'' - day of month, ''0DD'' - adds leading zero^^
>^^''MMM'' - month in full (eg, "July"), ''MM'' - month number, ''0MM'' - adds leading zero^^
>^^''YYYY'' - full year, ''YY'' - two digit year, ''hh'' - hours, ''mm'' - minutes, ''ss'' - seconds^^
>^^//note: use of hh, mm or ss format codes is only supported with ''tiddler'', ''today'' or ''filedate'' values//^^
* [linkformat] - specify an alternative date format so that the title of a 'dated tiddler' link can have a format that differs from the date's displayed format
In addition to the macro syntax, DatePlugin also provides a public javascript API so that other plugins that work with dates (such as calendar generators, etc.) can quickly incorporate date formatted links or popups into their output:
''{{{showDate(place, date, mode, format, linkformat, autostyle, weekend)}}}''
Note that in addition to the parameters provided by the macro interface, the javascript API also supports two optional true/false parameters:
* [autostyle] - when true, the font/background styles of formatted dates are automatically adjusted to show the date's status: 'today' is boxed, 'changes' are bold, 'reminders' are underlined, while weekends and holidays (as well as changes and reminders) can each have a different background color to make them more visibly distinct from each other.
* [weekend] - true indicates a weekend, false indicates a weekday. When this parameter is omitted, the plugin uses internal defaults to automatically determine when a given date falls on a weekend.
<<<
!!!!!Examples
<<<
The current date: <<date>>
The current time: <<date today "0hh:0mm:0ss">>
Today's blog: <<date link today "DDD, MMM DDth, YYYY">>
Recent blogs/changes/reminders: <<date popup Y M D-1 "yesterday">> <<date popup today "today">> <<date popup Y M D+1 "tomorrow">>
The first day of next month will be a <<date Y M+1 1 "DDD">>
This tiddler (DatePlugin) was last updated on: <<date tiddler "DDD, MMM DDth, YYYY">>
The SiteUrl was last updated on: <<date tiddler:SiteUrl "DDD, MMM DDth, YYYY">>
This document was last saved on <<date filedate "DDD, MMM DDth, YYYY at 0hh:0mm:0ss">>
<<date 2006 07 24 "MMM DDth, YYYY">> will be a <<date 2006 07 24 "DDD">>
<<<
!!!!!Revisions
<<<
2008.03.08 [2.7.0] in addModifiedsToPopup(), if a tiddler was created on the specified date, don't list it in the 'changed' section of the popup. Based on a request from Kashgarinn
2008.01.31 [2.6.0] refactored date style logic into separate setDateStyle() function so it can be overridden by a custom definition. See [[DatePluginConfig]].
2008.01.11 [2.5.0] added options to selectively suppress created/changes/tagged/reminders popup content
2008.01.08 [*.*.*] plugin size reduction: documentation moved to DatePluginInfo
2007.11.21 [2.4.0] added hasTagged() and addTaggedToPopup() to list any tiddlers that has been tagged using the title of the dated journal tiddler asa tag value (i.e., the tiddlers that will be listed in the standard "tagging" display when viewing the journal tiddler itself). Based on a request from Coby.
2007.06.20 [2.3.1] in onClickDatePopup(), use Popup.show() instead of deprecated ScrollToTiddlerPopup(). Fixes fatal error that prevents popups from being properly displayed
2007.05.31 [2.3.0] list "created" tiddlers in date popup. Also, force re-cache of created/modified indices when displaying current date and store.isDirty(), so that popup is kept in sync with tiddler changes.
2006.05.09 [2.2.1] added "todaybg" handling to set background color of current date. Also, honor excludeLists tag when getting lists of tiddlers. Based on suggestions by Mark Hulme.
2006.05.05 [2.2.0] added "linkedbg" handling to set background color when a 'dated tiddler' exists. Based on a suggestion by Mark Hulme.
2006.03.08 [2.1.2] add 'override leadtime' flag param in call to findTiddlersWithReminders(), and add "Enter a title" default text to new reminder handler. Thanks to Jeremy Sheeley for these additional tweaks.
2006.03.06 [2.1.0] hasReminders() nows uses window.reminderCacheForCalendar[] when present. If calendar cache is not present, indexReminders() now uses findTiddlersWithReminders() with a 90-day look ahead to check for reminders. Also, switched default background colors for autostyled dates: reminders are now greenish ("c0ffee") and holidays are now reddish ("ffaace").
2006.02.14 [2.0.5] when readOnly is set (by TW core), omit "new reminders..." popup menu item and, if a "dated tiddler" does not already exist, display the date as simple text instead of a link.
2006.02.05 [2.0.4] added var to variables that were unintentionally global. Avoids FireFox 1.5.0.1 crash bug when referencing global variables
2006.01.18 [2.0.3] In 1.2.x the tiddler editor's text area control was given an element ID=("tiddlerBody"+title), so that it was easy to locate this field and programmatically modify its content. With the addition of configuration templates in 2.x, the textarea no longer has an ID assigned. To find this control we now look through all the child nodes of the tiddler editor to locate a "textarea" control where attribute("edit") equals "text", and then append the new reminder to the contents of that control.
2006.01.11 [2.0.2] correct 'weekend' override detection logic in showDate()
2006.01.10 [2.0.1] allow custom-defined weekend days (default defined in config.macros.date.weekend[] array)
added flag param to showDate() API to override internal weekend[] array
2005.12.27 [2.0.0] Update for TW2.0
Added parameter handling for 'linkformat'
2005.12.21 [1.2.2] FF's date.getYear() function returns 105 (for the current year, 2005). When calculating a date value from Y M and D expressions, the plugin adds 1900 to the returned year value get the current year number. But IE's date.getYear() already returns 2005. As a result, plugin calculated date values on IE were incorrect (e.g., 3905 instead of 2005). Adding +1900 is now conditional so the values will be correct on both browsers.
2005.11.07 [1.2.1] added support for "tiddler" dynamic date parameter
2005.11.06 [1.2.0] added support for "tiddler:title" dynamic date parameter
2005.11.03 [1.1.2] when a reminder doesn't have a specified title parameter, use the title of the tiddler that contains the reminder as "fallback" text in the popup menu. Based on a suggestion from BenjaminKudria.
2005.11.03 [1.1.1] Temporarily bypass hasReminders() logic to avoid excessive overhead from generating the indexReminders() cache. While reminders can still appear in the popup menu, they just won't be indicated by auto-styling the date number that is displayed. This single change saves approx. 60% overhead (5 second delay reduced to under 2 seconds).
2005.11.01 [1.1.0] corrected logic in hasModifieds() and hasReminders() so caching of indexed modifieds and reminders is done just once, as intended. This should hopefully speed up calendar generators and other plugins that render multiple dates...
2005.10.31 [1.0.1] documentation and code cleanup
2005.10.31 [1.0.0] initial public release
2005.10.30 [0.9.0] pre-release
<<<
Webmaster for this site. Email at: [[telletdl99@mac.com|mailto:telletdl99@mac.com]]
----
AaA BbB CcC EeE FfF GgG HhH IiI JjJ KkK LlL MmM NnN OoO PpP QqQ RrR SsS TtT UuU VvV WwW XxX YyY ZzZ
----
!!!Dead Rise
is the rise of the bottom of the ship at midship from the half siding to a given height at the side line. See FigureA.
!!!Deadweight, Deadweight Tonnage
is the difference between a ship’s loaded and light displacement.
Total deadweight refers to carrying capacity of a ship; cargo deadweight is the total deadweight minus fuel, water, stores, dunnage and other items required for the voyage
!!!Depth
is the height of the ship at the midship section from the baseline to the moulded line of deck. See figure.
!!!Displacement
is the total weight of the ship when afloat expressed in tons of sea water (weight of sea water the ship displaces). The symbol, Δ, is used to denote the displacement.
!!!Diving trim
is that condition in which the submarine is so compensated (with loads and variable ballast)that completely flooding the main ballast tanks will cause the ship to submerge with neutral buoyancy and zero trim.
!!!DNV
stands for Det Norske Veritas, a marine classification organization.
!!!Draft Marks
are numerical markings on the ship’s hull indicating the depth or draft of the ship at that point. Surface ships generally have forward, aft, and midship draft marks; submarines have forward and aft marks.
!!!Draft Marks, Calculative
are draft marks that are normally applied at more accessible locations if the hullform makes the traditional draft marks difficult to use.
!!!Draft Marks, Limiting
are special marks on a naval ship (usually asterisk-shaped) that indicate the displacement limit of the ship in standard sea water.
!!!Draft Marks, Projected
are marks applied on the hull at the location of appendages or other equipment that extend below the ship’s baseline.
!!!DWL
stands for Design Waterline. This is the projected waterline (draft) of the ship as designed.
EventS
[[Pic of the Day]]
ReminderS
GettingStarted
|!Multiply:|!By:|!To Obtain:|!Multiply:|!By:|!To Obtain:|
|grams/cubic centimeter| 62.43|pounds/cubic foot|Pounds/cubic inch| 27680|kilograms/cubic meter|
|grams/cubic centimeter| 0.03613|pounds/cubic inch|pounds/gallon| 7.4805|pounds/cubic foot|
|kilogram/liter| 8.3454|pounds/gallon|pounds/gallon| 0.0043|pounds/cubic inch|
|pounds/cubic foot| 1.6018 x 10-2|grams/cubic centimeter|slug/cubic foot| 109407 x 10-6|grams/cubic meter|
|pounds/cubic foot| 5.787 x 10-4|pounds/cubic inch|specific gravity| 0.03613|pounds/cubic inch|
* That the SAWE website contains all past papers and any member can download papers that are more than a year old. Papers from the current year's conference are only available to those who attended the conference.
* That bibliography references can be downloaded from the SAWE website. Formats include Endnote, XML, and ~BibTex. If you use any of these when you write papers or other documents, you can just put in the SAWE paper number and the reference will be pulled in. Contains abstracts too, so also good for document searches.
Log in as member, go here (technical-papers-paper database):
>[<img[papermenu.jpeg]] then look for these tags:
[<img[bib.jpeg]]
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://gallery.me.com/telletdl99/100048]] »|
----
<html><div align="center"><iframe src ="http://gallery.me.com/telletdl99/100048" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
!!! Public Review Period
Greetings,
In October we conducted a workshop to resolve current issues in implementing ESWBS. The workshop was a great success as we compiled and reviewed all your comments. The draft includes guidance for current issues with weight reporting as well as provides a complete 3 digit ESWBS. This document is based on the 1985 ESWBS as well as the current online database. It is our desire to create a functioning document that provides continuity in the weight reporting of ships at the three digit level. A draft Recommended Practice is now available for public review:
[[ESWBS for Public Review (PDF)|http://capital.sawe.org/SAWE_Capital_Region_Chapter/SAWE ESWBS RP 03042011.pdf]]
The Public review allows you the chance to correct any mistakes to the content or format. It is important that we correct these mistakes while in the draft form. Comments on content will be reviewed by the ESWBS committee and implemented as necessary. If it is decided that this version of the RP cannot accommodate a certain issue, the comment will be recorded for later consideration. We acknowledge that changes in technology and construction practices will change the way we report weights in the future, and understand that changes will be necessary. Our goal is to create a document to apply to weight reporting today with a look to the future. Please review with Draft RP and provide comments to Matthew Yoder (matthew.d.yoder@navy.mil)
Your time is greatly appreciated.
V/r
Matthew Yoder
05P3 Stability, Hydro and Arrangements
[[matthew.d.yoder@navy.mil|mailto:matthew.d.yoder@navy.mil]]
Phone: (202)781 1381
----
!!!Update
All,
I appreciate your participation in our ESWBS Workshop. We had a productive two day workshop in late October with many productive results. I want to thank CSC for hosting the event, SNAME and SAWE for backing the effort, and a special thanks to all the participants that made this event possible. Here is a list of all the participants: [[attendence list.xls|attendance list.xls]]. If I missed someone please let me know.
Here is a copy of all the changes I have on record: [[workshop comment resolution.pdf|workshop comment resolution.pdf]]. You will notice that some of the page numbers have changed as I have removed items that were deemed non issues. The comment numbers remained static, and the comments are arranged in ESWBS number order. There are a few changes to which I had some question to the resolution, so please ensure that the issues for which you had interest are resolved.
Some of the decisions that were agreed upon are conceptual in nature. When classifying IPS related items, the items shall be placed in their traditional groups based on function. No new groups are needed for IPS as there are no new technologies in use.
~EMEs shall be placed in the 3 digit group that best describes the function of the EME. No new groups are needed for ~EMEs.
Please help me in capturing all the decisions from the workshop.
V/r
Matthew Yoder
05P3 Weight Control and Stability
[[matthew.d.yoder@navy.mil|mailto:matthew.d.yoder@navy.mil]]
Phone: (202)781 1381
-----
Greetings,
The Capital Region Chapter of the Society of Allied Weight Engineers (SAWE) and CSC are hosting a workshop to discuss the Expanded Ship Work Breakdown Structure (ESWBS) on October 18-19, 2010. The focus of this meeting is to resolve comments on creating an ESWBS recommended practices for weight reporting in ship construction.
Teaming with SNAME and industry, SAWE anticipates ESWBS recommended practices will serve as a baseline for future ship construction for the Navy as well as an opportunity to add groups for new technology, or clarify conflicts to increase weight reporting commonality. The recommended practice is based on the official ESWBS maintained by NAVSEALOGCEN in Mechanicsburg, PA and the 1985 historical ESWBS database.
The agenda for the working group will be provided once finalized. Major comments/topics will be addressed first. New comments will only be entertained after resolution of the current comments as time allows. All comments currently submitted are available in MS Word and PDF formats below Your thoughts and opinions on are appreciated for the discussion.
The meeting is being hosted by CSC with the following particulars. As this is an UNCLASSIFIED setting, no security information will be required.
October 18-19, 2010
8:00 am - 3:00 pm
CSC
Maritime Plaza 1
3rd Floor
1201 M Street, SE
Washington, DC 20003
If you can’t make the trip to Washington, we still want your input. Please join us using the following call-in information:
Call: 877-785-4761 ID: 46713048
If there are any further questions please do not hesitate to contact:
Matthew Yoder.
NAVSEA 05P15 Weight Control and Stability
[[matthew.d.yoder@navy.mil|mailto:matthew.d.yoder@navy.mil]]
Phone: (202)781-1381
OR
William H. Garzke, Jr.
CSC, Advanced Marine
[[Wgarzke@CSC.com|mailto:Wgarzke@CSC.com]]
Phone: (202)-675-8542
[[ESWBS Comment Report (Word)|http://capital.sawe.org/SAWE_Capital_Region_Chapter/ESWBSComments.doc]]
[[ESWBS Comment Report (PDF)|http://capital.sawe.org/SAWE_Capital_Region_Chapter/ESWBSComments.pdf]]
Link to [[ESWBS Listing]]
Link to Excel File ESWBS Listing (large file, ~5 megs): [[ESWBS Quick Reference Guide|http://capital.sawe.org/SAWE_Capital_Region_Chapter/ESWBSQUICKREFGUIDE.xls]]
|!Group|!Description|
|!0|!LOADS (FULL LOAD CONDITION)|
|11|Ships Officers|
|12|Ships Noncommissioned Officers|
|13|Ships Enlisted Men|
|14|Marines|
|15|Troops|
|16|Air Wing Personnel|
|19|Other Personnel|
|21|Ship Ammunition (for use by ship on which stowed)|
|22|Ordnance Delivery Systems Ammunition|
|23|Ordnance Delivery Systems|
|24|Ordnance Repair Parts (Ship Ammunition)|
|25|Ordnance Repair Parts (Ordnance Delivery System Ammunition)|
|26|Ordnance Delivery Systems Support Equipment|
|29|Special Mission Related Systems & Expendables|
|31|Provisions & Personnel Stores|
|32|General Stores|
|33|Marine Stores (for ship's complement)|
|39|Special Stores|
|41|Diesel Fuel|
|42|~JP-5|
|43|Gasoline|
|44|Distillate Fuel|
|45|NSFO - Navy Standard Fuel Oil|
|46|Lubricating Oil|
|49|Special Fuels & Lubricants|
|51|Sea Water|
|52|Fresh Water|
|53|Reserve Feed Water|
|54|Hydraulic Fluid|
|55|Sanitary Tank Liquid|
|56|Gas (~Non-Fuel Type)|
|59|Miscellaneous Liquids (~Non-Fuel Type)|
|61|Cargo Ordnance & Ordnance Delivery Systems|
|62|Cargo, Stores |
|63|Cargo, Fuels & Lubricants |
|64|Cargo, Liquids (~Non-Fuel Type) |
|65|Cargo, Cryogenic & Liquefied Gas |
|66|Cargo, Amphibious Assault Systems |
|67|Cargo, Gases |
|69|Cargo, Miscellaneous |
|71|Main Ballast Water (Submarines)|
|72|Variable Ballast Water (Submarines)|
|73|Residual Water (Submarines)|
|!100|!HULL STRUCTURE|
|101|General Arrangement - Structural Drawings|
|111|Shell Plating Surface Ship & Submarine Pressure Hull |
|112|Shell Plating Submarine ~Non-Pressure Hull |
|113|Inner Bottom|
|114|Shell Appendages|
|115|Stanchions|
|116|Longitudinal Framing Surface Ship & Submarine Pressure Hull |
|117|Transverse Framing Surface Ship & Submarine Pressure Hull |
|118|Longitudinal & Transverse Submarine ~Non-Pressure Hull|
|119|Lift System Flexible Skirts & Seals|
|121|Longitudinal Structural Bulkheads|
|122|Transverse Structural Bulkheads|
|123|Trunks & Enclosures|
|124|Bulkheads in Torpedo Protection System|
|125|Submarine Hard Tanks|
|126|Submarine Soft Tanks|
|131|Main Deck|
|132|2nd Deck|
|133|3rd Deck|
|134|4th Deck|
|135|5th Deck & Decks Below|
|136|01 Hull Deck (Forecastle & Poop Decks)|
|137|02 Hull Deck|
|138|03 Hull Deck|
|139|04 Hull Deck & Hull Decks Above|
|141|1st Platform|
|142|2nd Platform|
|143|3rd Platform|
|144|4th Platform|
|145|5th Platform|
|149|Flats|
|151|Deckhouse Structure to First Level|
|152|1st Deckhouse Level|
|153|2nd Deckhouse Level|
|154|3rd Deckhouse Level|
|155|4th Deckhouse Level|
|156|5th Deckhouse Level|
|157|6th Deckhouse Level|
|158|7th Deckhouse Level|
|159|8th Deckhouse Level & Above|
|161|Structural Castings Forgings, & Equivalent Weldments |
|162|Stacks & Macks (Combined Stack & Mast)|
|163|Sea Chests|
|164|Ballistic Plating|
|165|Sonar Domes|
|166|Sponsons|
|167|Hull Structural Closures|
|168|Deckhouse Structural Closures|
|169|Special Purpose Closures & Structures|
|171|Masts, Towers, Tetrapods |
|172|Kingposts & Support Frames|
|179|Service Platforms|
|181|Hull Structure Foundations|
|182|Propulsion Plant Foundations|
|183|Electric Plant Foundations|
|184|Command & Surveillance Foundations|
|185|Auxiliary Systems Foundations|
|186|Outfit & Furnishings Foundations|
|187|Armament Foundations|
|191|Ballast, Fixed or Fluid, & Buoyancy Units |
|192|Compartment Testing|
|195|Erection of Sub Sections (Progress Report Only)|
|196|Weld tolerance|
|197|Mill Tolerance|
|198|Free Flooding Liquids|
|199|Hull Repair Parts & Special Tools|
|!200|!PROPULSION PLANT|
|201|General Arrangement - Propulsion Drawings|
|202|Machinery Plant Central Control Systems|
|212|Nuclear Steam Generator|
|213|Reactors|
|214|Reactor Coolant System|
|215|Reactor Coolant Service System|
|216|Reactor Plant Auxiliary Systems|
|217|Nuclear Power Control & Instrumentation|
|218|Radiation Shielding (Primary)|
|219|Radiation Shielding (Secondary)|
|221|Propulsion Boilers|
|222|Gas Generators|
|223|Main Propulsion Batteries|
|224|Main Propulsion Fuel Cells|
|231|Propulsion Steam Turbines|
|232|Propulsion Steam Engines|
|233|Propulsion Internal Combustion Engines|
|234|Propulsion Gas Turbines|
|235|Electric Propulsion|
|236|~Self-Contained Propulsion Systems|
|237|Auxiliary Propulsion Devices|
|238|Secondary Propulsion (Submarines)|
|239|Emergency Propulsion (Submarines)|
|241|Propulsion Reduction Gears|
|242|Propulsion Clutches & Couplings|
|243|Propulsion Shafting|
|244|Propulsion Shaft Bearings|
|245|Propulsors|
|246|Propulsor Shrouds & Ducts|
|247|Water Jet Propulsors|
|248|Lift System Fans & Ducting|
|251|Combustion Air System|
|252|Propulsion Control System|
|253|Main Steam Piping System|
|254|Condensers & Air Ejectors|
|255|Feed & Condensate System|
|256|Circulating & Cooling Sea Water System|
|257|Piping/Accessories, Reserve Feed & Transfer System |
|258|HP Steam Drain System|
|259|Uptakes (Inner Casing)|
|261|Fuel Service System|
|262|Main Propulsion Lube Oil System|
|263|Shaft Lube Oil System (Submarines)|
|264|Lube Oil Fill, Transfer, & Purification |
|298|Propulsion Plant Operating Fluids|
|299|Propulsion Plant Repair Parts & Special Tools|
|!300|!ELECTRIC PLANT|
|301|General Arrangement - Electrical Drawings|
|302|Motors & Associated Equipment|
|303|Protective Devices|
|304|Electric Cables|
|305|Electrical Designating & Marking|
|311|Ship Service Power Generation|
|312|Emergency Generators|
|313|Batteries & Service Facilities|
|314|Power Conversion Equipment|
|321|Ship Service Power Cable|
|322|Emergency Power Cable System|
|323|Casualty Power Cable System|
|324|Switchgear & Panels|
|325|ARC Fault Detector (AFD) Systems|
|331|Lighting Distribution|
|332|Lighting Fixtures|
|341|SSTG Lube Oil|
|342|Diesel Support Systems|
|343|Turbine Support Systems|
|398|Electric Plant Operating Fluids|
|399|Electric Plant Repair Parts & Special Tools|
|!400|!COMMAND AND SURVEILLANCE|
|401|General Arrangement - Command & Surveillance|
|402|Security Requirements|
|403|Personnel Safety|
|404|Radio Frequency Transmission Lines|
|405|Antenna Requirements|
|406|Grounding & Bonding|
|407|Electromagnetic Interference Reduction (EMI)|
|408|System Test Requirements|
|409|Combat System General Requirements|
|411|Data Display Group|
|412|Data Processing Group|
|413|Digital Data Switchboards (Deleted see 414)|
|414|Interface Equipment (Analog & Digital Switchboards)|
|415|Digital Data Communications|
|417|Command & Control Analog Switchboards (Deleted see 414)|
|421|~Non-Electrical/~Non-Electronic Navigation Aids|
|422|Electrical Navigation Aids (includes Navigation Lights)|
|423|Electronic Navigation Systems|
|424|Electronic Navigation Systems, Acoustical |
|425|Periscopes|
|426|Electrical Navigation Systems|
|427|Inertial Navigation Systems|
|428|Navigation Control Monitoring|
|431|Switchboards for Interior Communication Systems|
|432|Telephone Systems|
|433|Announcing Systems|
|434|Entertainment & Training Systems|
|435|Voice Tubes & Message Passing Systems|
|436|Alarm, Safety, & Warning Systems |
|437|Indication, Order, & Metering Systems |
|438|Consolidated Control & Display Systems|
|439|Recording & Television Systems|
|441|Radio Systems|
|442|Underwater Systems|
|443|Visual & Audible Communication Systems|
|444|Telemetry Systems|
|445|Teletype & Facsimile Systems|
|446|Security Equipment Systems|
|451|Surface Surveillance Radar Systems|
|452|Air Search Radar (2D)|
|453|Air Search Radar (3D)|
|454|Aircraft Control Radar Systems|
|455|Identification Systems (IFF)|
|456|~Multi-Function Radar Systems|
|457|Infrared Surveillance & Tracking Systems|
|458|Automatic Detection & Tracking Systems|
|459|Space Vehicle Electronic Tracking|
|461|Active Surveillance Sonar|
|462|Passive Surveillance Sonar|
|463|Multiple Mode Surveillance Sonar|
|464|Acoustic Analysis Systems|
|465|Bathythermograph|
|466|~Multi-Purpose Ship Equipment Systems|
|468|Surface Ship Combat Systems|
|469|Submarine Combat Systems|
|471|Active EW (includes Combination Active/Passive)|
|472|Passive ECM (Electronic Countermeasures)|
|473|Underwater Countermeasures|
|474|Decoy Systems|
|475|Degaussing Systems|
|476|Mine Countermeasure Systems|
|481|Gun Fire Control Systems|
|482|Missile Fire Control Systems|
|483|Underwater Fire Control Systems|
|484|Integrated Fire Control Systems|
|489|Weapon Systems Switchboards|
|491|Electronic Test Equipment (includes Calibration)|
|492|Flight Control & Instrument Landing Systems|
|493|Automated Data Processing Systems (~Non-Combat)|
|494|Meteorological Systems|
|495|Special Purpose Intelligence Systems|
|498|Command & Surveillance Operating Fluids|
|499|Command & Surveillance Repair Parts & Special Tools|
|!500|!AUXILIARY SYSTEM|
|501|General Arrangement - Auxiliary Systems Drawings|
|502|Auxiliary Machinery|
|503|Pumps|
|504|Instruments & Instrument Boards|
|505|General Piping Requirements|
|506|Overflows, Air Escapes, & Sounding Tubes |
|507|Machinery & Piping Designation & Marking|
|508|Thermal Insulation for Piping & Machinery|
|509|Thermal Insulation for Vent & A/C Ducts|
|511|Compartment Heating System|
|512|Ventilation System|
|513|Machinery Space Ventilation System|
|514|Air Conditioning System|
|515|Air Revitalization Systems (Submarines)|
|516|Refrigeration System|
|517|Auxiliary Boilers & Other Heat Sources|
|521|Firemain & Flushing (Sea Water) System|
|522|Sprinkler System|
|523|Washdown System|
|524|Auxiliary Sea Water System|
|526|Scuppers & Deck Drains|
|527|Firemain Actuated Services - Other|
|528|Plumbing Drainage|
|529|Drainage & Ballasting System|
|531|Distilling Plant|
|532|Cooling Water|
|533|Potable Water|
|534|Auxiliary Steam & Drains Within Machinery Box|
|535|Auxiliary Steam & Drains Outside Machinery Box|
|536|Auxiliary Fresh Water Cooling|
|541|Ship Fuel & Fuel Compensating System|
|542|Aviation & General Purpose Fuels|
|543|Aviation & General Purpose Lubricating Oil|
|544|Liquid Cargo|
|545|Tank Heating|
|546|Auxiliary Lubrication Systems|
|549|Special Fuel & Lubricants, Handling & Stowage |
|551|Compressed Air Systems|
|552|Compressed Gases|
|553|O2 N2 System|
|554|Main Ballast Tank Blow & List Control System|
|555|Fire Extinguishing Systems|
|556|Hydraulic Fluid System|
|557|Liquid Gases, Cargo |
|558|Special Piping Systems|
|561|Steering & Diving Control Systems|
|562|Rudder|
|563|Hovering & Depth Control (Submarine)|
|564|Trim & Drain Systems (Submarines)|
|565|Trim & Heel Systems (Surface Ships)|
|566|Diving Planes & Stabilizing Fins (Submarines)|
|567|Strut & Foil Systems|
|568|Maneuvering Systems|
|571|~Replenishment-at-Sea Systems|
|572|Ship Stores & Equipment Handling Systems|
|573|Cargo Handling Systems|
|574|Vertical Replenishment Systems|
|575|Vehicle Handling & Stowage Systems|
|581|Anchor Handling & Stowage Systems|
|582|Mooring & Towing Systems|
|583|Boats, Boat Handling & Stowage Systems |
|584|Landing Craft Handling & Stowage Systems|
|585|Elevating & Retracting Gear|
|586|Aircraft Recovery Support Systems|
|587|Aircraft Launch Support Systems|
|588|Aircraft Handling, Servicing & Stowage |
|589|Miscellaneous Mechanical Handling Systems|
|591|Scientific & Ocean Engineering Systems|
|592|Swimmer & Diver Support & Protection Systems|
|593|Environmental Pollution Control Systems|
|594|Submarine Rescue, Salvage, & Survival Systems |
|595|Towing, Launching & Handling for Underwater Systems |
|596|Handling Systems for Diver & Submersible Vehicles|
|597|Salvage Support Systems|
|598|Auxiliary Systems Operating Fluids|
|599|Auxiliary Systems Repair Parts & Tools|
|!600|!OUTFIT AND FURNISHINGS|
|601|General Arrangement - Outfit & Furnishings Drawings|
|602|Hull Designating & Marking|
|603|Draft Marks|
|604|Locks, Keys, & Tags |
|605|Rodent & Vermin Proofing|
|611|Hull Fittings|
|612|Rails, Stanchions, & Lifelines |
|613|Rigging & Canvas|
|621|~Non-Structural Bulkheads|
|622|Floor Plates & Gratings|
|623|Ladders|
|624|~Non-Structural Closures|
|625|Airports, Fixed Portlights, & Windows |
|631|Painting|
|632|Zinc & Metallic Coatings|
|633|Cathodic Protection|
|634|Deck Covering|
|635|Hull Insulation|
|636|Hull Damping|
|637|Sheathing|
|638|Refrigerated Spaces|
|639|Radiation Shielding|
|641|Officer Berthing & Messing Spaces|
|642|Noncommissioned Officer Berthing & Messing Spaces|
|643|Enlisted Personnel Berthing & Messing Spaces|
|644|Sanitary Spaces & Fixtures|
|645|Leisure & Community Spaces|
|651|Commissary Spaces|
|652|Medical Spaces|
|653|Dental Spaces|
|654|Utility Spaces|
|655|Laundry Spaces|
|656|Trash Disposal Spaces|
|661|Offices|
|662|Machinery Control Centers Furnishings|
|663|Electronics Control Centers Furnishings|
|664|Damage Control Stations|
|665|Workshops, Labs, Test Areas (includes Portable Tools, Equipment) |
|671|Lockers & Special Stowage|
|672|Storerooms & Issue Rooms|
|673|Cargo Stowage|
|686|Trials & Certification (formerly 868)|
|691|Transmission Loss Treatment|
|698|Outfit & Furnishings Operating Fluids|
|699|Outfit & Furnishings Repair Parts & Special Tools|
|!700|!ARMAMENT|
|701|General Arrangement - Weaponry Systems|
|702|Armament Installations|
|703|Weapons Handling & Stowage, General |
|711|Guns|
|712|Ammunition Handling|
|713|Ammunition Stowage|
|721|Launching Devices (Missiles & Rockets)|
|722|Missile, Rocket, & Guidance Capsule Handling Systems |
|723|Missile & Rocket Stowage|
|724|Missile Hydraulics|
|725|Missile Gas|
|726|Missile Compensating|
|727|Missile Launcher Control|
|728|Missile Heating, Cooling, Temperature Control |
|729|Missile Monitoring, Test & Alignment |
|731|Mine Launching Devices|
|732|Mine Handling|
|733|Mine Stowage|
|741|Depth Charge Launching Devices|
|742|Depth Charge Handling|
|743|Depth Charge Stowage|
|751|Torpedo Tubes|
|752|Torpedo Handling|
|753|Torpedo Stowage|
|754|Submarine Torpedo Ejection|
|755|Torpedo Support, Test & Alignment |
|761|Small Arms & Pyrotechnic Launching Devices|
|762|Small Arms & Pyrotechnic Handling|
|763|Small Arms & Pyrotechnic Stowage|
|772|Cargo Munitions Handling|
|773|Cargo Munitions Stowage|
|782|Aircraft Related Weapons Handling|
|783|Aircraft Related Weapons Stowage|
|784|Aircraft Related Weapons Elevators, Upper Stages |
|785|Aircraft Related Weapons Elevators, Lower Stages |
|786|Aircraft Related Weapons, Hydraulics |
|792|Special Weapons Handling|
|793|Special Weapons Stowage|
|797|Miscellaneous Ordnance Spaces|
|798|Armament Operating Fluids|
|799|Armament Repair Parts & Special Tools|
!!!ESWBS Tool/Practice
Whether you love it or hate it, we are, to a great extent, stuck with using the Expanded Ship Weight Breakdown Structure for ship and submarine projects. We know there are a lot of inconsistencies within ESWBS, and that it does not always lend itself to efficient management of weight data, especially with new designs and acquisition strategies. In order to improve how we use the ESWBS, the chapter is considering developing a recommended practice or computer tool for ESWBS that would codify its use and clear up inconsistent use (even if we can't change the ESWBS itself).
As a first step in this project, NAVSEA 05Z12 is soliciting comments on the ESWBS in general, and on individual ESWBS groups. A database has been created to track the comments and to hopefully serve as a basis for a definitive ESWBS computer tool. If you have any comments or suggestions, or if you want to volunteer for this project, contact Matt Yoder at [[matthew.d.yoder@navy.mil|mailto:matthew.d.yoder@navy.mil]]
----
AaA BbB CcC DdD FfF GgG HhH IiI JjJ KkK LlL MmM NnN OoO PpP QqQ RrR SsS TtT UuU VvV WwW XxX YyY ZzZ
----
!!!ECP
stands for Engineering Change Proposal.
!!!Equilibrium
is, for submarines, the state where the weight of the boat exactly equals the water displaced; the boat is submerged with neutral buoyancy.
!!!Equilibrium Polygon
is a graphical representation of the capabilities of a submarine’s variable ballast system.
The 2008 elections are finished and the results are in. Thank you all for running and participating.
@@President: Brian Heidt (re-elected)
Vice President: Dan Dolan
Secretary: Christos Filiopoulos (re-elected)@@
Dom Cimino remains Director
Tom Holloman remains Treasurer
Contact information is here: ''[[Chapter Contacts]]''
!!!1/10/11 13:46
Uploaded new draft document (draft4) to files page. Edited text for content. Added scope, NIST reference, and ship and ground reference datums.
----
!!!01/03/11
Uploaded new draft document (draft3). Edited text for content, typos, and consistency. Added major todo items. Draft now shows most edited areas except for wholesale rearrangement (two subsections switched positions).
----
!!!12/17/10 10:50
Uploaded new draft document. Added more figures, references, new content in section 9, start of a glossary, date/time stamp, ability to track changes, added linenumbers to help with collaboration, cleaned up some text. Will start editing existing text soon for clarity and content. Updated [[0. Outline|Outline]] page.
----
!!!12/10/10 10:06
Yesterday's phonecon with Alan and Davy: agreed to include Davy's outline into draft. Draft article discussed - much editing to do, but good approximation of length and outline. Davy will look into Italian professor's papers on car weighing - may add to vehicle section. All will start tagging terms for section 2 glossary. Agreement to try to put error sources with sections on methods and machines, and add precision discussion to section 1 or 2. Text may not be the issue - if we have to regenerate figures it may make deadline difficult. David will start looking at figures and see what can be used. Need to find cleared pictures of instruments and processes. Next phonecon Jan 18.
----
!!!12/09/10 09:12
Received Davy's outline for vehicle weighing. Compiled boilerplate to see how we were doing with length and content - at around 30 pages now, will likely be in the 50 page range with figures. Draft outline almost complete.
----
!!!12/07/10 10:29
Phonecon moved to 12-9-10.
Continue to pull in boilerplate from papers and RPs. Estimate we have about 22 pages (without figures) now although nothing has been edited yet.
----
!!!11/30/10 14:06
Continue to fill wikispaces site with draft sections. Simplified the outline based, mainly, on ~RP-16. Added questions section to site to track questions and notes and their adjudication.
----
!!!11/29/10 14:19
Continue to fill wikispaces site with draft sections taken from ~RP-16, papers 2444, 3147, 3354, and the handbook chapter 6. Also clipped a number of usable figures from 3354 (pdf format).
----
!!!11/22/10 11:50
Set up Wiki site for the project at: [[encproject.wikispaces.com/|http://encproject.wikispaces.com/]]. Members (authors) can add pages, but anybody can post comments.
----
!!!11/18/10 13:53
Kick-off phone conference with Davy Hansch, Alan Titcomb, and David Tellet. Discussed:
# Subject, length, format, etc of article
# Schedule
# Outline (draft outline is completed, some holes in it and some sections may be joined. File is [[here|outline.pdf]])
# References
# Workload sharing
# Wrap-up and schedule online meetings
Next phone con is Dec 2 at 1300.
!!!!Actions:
# All to read reference papers/handbooks. Also look for other references as we go along.
# David to start pulling in sections wholesale (no editing yet) to flesh out the outline and get an idea of length.
# Davy to develop sub-outline of special cases (ship, airplane, ground vehicle weighing) and reseach reference material for that section.
----
!!!11/03/10 11:44
Spoke with the editor, Myer Kutz, today. Seems to be a pretty hands off guy, just wanted to make sure we had what we needed. I asked about the format and resolution of figures, and he said as long as they print out okay they should be okay. Warned about using colors - not sure if it will be printed in color or not, so we should assume not. Gave him a tentative schedule: Outline in December, rough draft in Feb, final draft in April. He was okay with that.
Brad Hill agreed to be a reviewer. No word yet on an aerospace contributor.
----
!!!11/02/10 08:45
Initial literature search [ongoing - tellet]. RPs, technical papers (Boynton's especially), and the textbooks should provide most of the detailed information needed for the article. Some general stuff too, but that will need to be repackaged. I think the article should have examples of some of the unique measuring tasks like a satellite, an airplane, and a ship. Need to ensure we cover the gamut of weight, cg, and MOI measurement. Good references:
* Paper No. 2444
* Paper No. 3147
* Paper No. 3354 (good figures)
* SAWE Handbook chapter 6
* RP 12
----
!!!10/28/10 14:39
Email from Ron Fox to Myer Kutz accepting the task of writing the article.
----
!!!10/28/10 08:36
David Tellet email accepting the lead for the project.
----
!!!10/15/10 15:00
Email from Myer Kutz soliciting article from SAWE for his engineering measurement encyclopedia.
The SAWE has been asked to contribute a chapter on mass properties measurement for an engineering encyclopedia. Here is part of the letter from the editor:
<<<
I am editing a major reference work, the Engineering Measurements Encyclopedia, for Wiley. This will be a multi-volume work and will be published both in print and electronically.
To be brief: I would like to know whether you, alone or together with colleagues, are interested in providing an article on Mass Properties Measurements for the Engineering Measurements Encyclopedia. (Should you wish to contribute an article on another topic, please feel free to suggest it.) Topic coverage should be broad, yet detailed enough to serve as a review of relevant technology. The intended audience level for the encyclopedia is practicing engineers, as well as both graduate and undergraduate students. I envision contributions, which must be original, being up to 40 manuscript pages in length (30 book pages), including figures and references. I would like to receive all submissions by May 31, 2011. Of course, your name and affiliation will accompany your contribution, and you will receive a copy of the encyclopedia plus $400 worth of books you may select from the Wiley catalog.
<<<
I, David Tellet, have been asked to head up a team to produce this article and will report on the progress here on the website. The team will likely be myself, Davy Hansch from the Hampton Roads chapter, and an aerospace person yet to be determined. Reviewers will likely be Alan Titcomb, Bill Griffiths, and Jeff Cerro.
If you have any suggestions for the team, or helpful references on weighing, please let me know: [[david.tellet@navy.mil|mailto:david.tellet@navy.mil]]
----
See progress at: [[Wiki site|http://encproject.wikispaces.com/]]
Members,
We will be having our first SAWE meeting for 2012 on February 15. Please join us for a sub sandwich and some new Chapter business. We would also like to have someone take 10 minutes or so to talk about a interesting subject or a project that they are working with. If you would like to present something, please let me know and I will get you on the agenda.
<<<
Date: @@Wednesday, February 15th@@
Time: 1200
Location:
{{indent{Alion}}}
{{indent{6th floor conference room (get badge on second floor first)}}}
{{indent{1100 New Jersey Ave, SE}}}
{{indent{Washington, DC 20003}}}
Cost:
{{indent{$5.00 for members}}}
<<<
Please RSVP to me by Friday, February 10.
Daniel Dolan
Vice President, Capital Region
SAWE
| p: 202.675-4340 | f: 202.675-4345 | [[ddolan3@csc.com|mailto:ddolan@csc.com]] | [[www.csc.com|http://www.csc.com]]
----
AaA BbB CcC DdD EeE GgG HhH IiI JjJ KkK LlL MmM NnN OoO PpP QqQ RrR SsS TtT UuU VvV WwW XxX YyY ZzZ
----
!!!Fairwater
is the sail of a submarine (also called the fin (UK)). Also any casting or plating fitted to the hull or appendages to streamline the parts.
!!!Fast Cruise
is a period, usually prior to initial sea trials, for crew training alongside the dock with no shipyard work going on and with no shipyard personnel on board.
!!!Final Weight Report (FWR)
is a detailed final report of weight and moment data for all loading conditions. The report accurately reflects accumulated values for estimated, calculated, and actual weight data for the detail design, including the net effect of changes to GFM and adjudicated and unadjudicated contract modifications, and inclining experiment adjustment, when applicable.
!!!Flare
is the spreading out of the hull form from the central vertical plane, with increasing rapidity as it rises from the waterline to the rail. See Figure A.
!!!Forepeak
is the watertight compartment at the extreme forward end of a ship.
!!!Forefoot
is the part of the keel which curves and rises to meet the stem.
!!!Forward
is near, at, or toward the bow (front) of the ship.
!!!Forward perpendicular
is a vertical datum line passing through the intersection of the ship’s stem (or bow) with the waterline. For submarines this is normally the very forward-most point of the hull.
!!!Forward trim tank
is the forward-most variable ballast tank in a submarine.
!!!Foundations
are supports for boilers, engines, auxiliary, and other machinery.
!!!Frame
is a term used to designate one of the transverse members that make up the rib-like part of the skeleton of a ship. The frames act as stiffeners, holding the outside plating in shape and maintaining the transverse form of the ship.
!!!Frame Spacing
is the fore and aft distance of adjacent transverse frames.
!!!Freeboard
is the distance from the waterline to the upper surface of the freeboard deck at the side.
!!!Free Surface Effect
is the effect caused by the free surface of a liquid in a partially filled tank. The liquid is free to shift within the tank boundaries in the direction of the roll or pitch of the vessel. This shifts the center of gravity of the vessel toward the list and therefore reduces the righting arm.
!!!FWR
stands for Final Weight Report.
[img[footy.png]] [img[footy2.bmp]]
Members,
We have been approached with a very unique challenge from SNAME. They would like for us to consider participating in their "Footy Yacht Squadron" Challenge. This looks like a fun Chapter project for us at some level. Maybe a group of us can participate or maybe as a Chapter, sponsor a person/team from a local high school. Either way, I think this would hold future benefits for both SAWE and SNAME. Take a look at this [[file|file:Footys.pdf]] and give me some feedback.
Thanks.
[[Dan Dolan|mailto:ddolan@csc.com]]
We are proposing to set regular chapter meetings and would like membership feedback. The tentative schedule for 2012 is to have meetings on the second Wednesday of every other month. This would make the schedule as shown in the ReminderS box below.
This would depend on the availability of conference rooms and attendence.
If you have any comments or questions about this schedule, please email [[David Tellet|mailto:david.tellet@navy.mil]] or [[Dan Dolan|mailto:ddolan@csc.com]]
Thanks!
|!Denominations|!Used In|!American Equivalent|!Denominations|!Used In|!American Equivalent|
|Almude|Portugal|4.423 gal|Last|England|82.56 bu|
|Ardeb|Egypt|5.6189 bu|Last|Germany|2 metric tons|
|Arratel (Libra)|Portugal|1.012 lb|Last|Prussia|112.29 bu|
|Arroba|Argentina|25.32 lb|League (land)|Paraguay|4.633 acres|
|Arroba|Brazil|32.38 lb|Li|China|1890 ft|
|Arroba|Cuba|25.36 lb|Li|China|0.01260 in |
|Arroba|Paraguay|25.32 lb|||(1/1000 ch'ih)|
|Arroba|Venezuela|25.4 lb|Libra (lb)|Argentina|1.0128 lb|
|Arro (liquid)|Venezuela|4.263 gal|Libra (lb)|Central America|1.014 lb|
|Arshine|USSR|28 in|Libra (lb)|Chile|1.014 lb|
|Arshine (sq)|USSR|5.44 ft2|Libra (lb)|Cuba|1.0143 lb|
|Artel|Morocco|1.12 lb|Libra (lb)|Mexico|1.01467 lb|
|Baril|Argentina|20.077 gal|Libra (lb)|Peru|1.0143 lb|
|Baril|Mexico|20.787 gal|Libra (lb)|Uruguay|1.0127 lb|
|Barile (wine)|Malta|11.2 gal|Libra (lb)|Venezuela|1.0143 lb|
|Berkovets|USSR|361.128 lb|Load (timber)|England|50 ft3|
|Bongkal|Fed. Malay States|835 grains|Manzana|Nicaragua|1.742 acres|
|Bouw|Sumatra|7.096.5 m2|Manzana|Costa Rica|1.727 acres|
|Bu|Japan|0.12 in|Manzana|Salvador|1.727 acres|
|Bushel|Britch|1.03205 US bu|Marco|Bolivia|0.507 lb|
|Caballeria|Cuba|33.162 acres|Mound|Bengal|82 2/7 lb|
|||2.13 bu|Mil|Denmark|4.68 mi|
|Caban (cavan)|Philippines|19.8 gal|Mil (geographic)|Denmark|4.6036 mi|
|Cafisso|Malta|5.4 gal|Milla|Nicaragua|1.1594 mi|
|Candy|Bombay|560 lb|Milla|Honduras|1.1493 mi|
|Candy|India (Madras)|500 lb|Mina|Greece|0.95 lb|
|Cantaro|Malta|175 lb|Morgen|Germany|0.63 acre|
|Carat (metriv)|World|3.086 grains|Oka (Oke)|Greece|2.82 lb|
|Catty|China|1.333 lb|Oke|Egypt|2.7514 lb|
|Catty|Japan|1.321 lb|Oke|Turkey|2.826 lb|
|Catty|Java; Malacca|1.36 lb|Pie|Egypt|22.86 in|
|Catty|Siam|2 2/3 lb|Picul|Borneo - Celebes|135.64 lb|
|Catty (stand)|Siam|1.32 lb|Picul|China|133 1/3 lb|
|Catty|Sumatra|2.12 lb|Picul|Java|136.16 lb|
|Centaro|Central America|4.2631 gal|Picul|Philippines|139.44 lb|
|Centner|Brunswick|117.5 lb|Pie|Argentina|0.9471 ft|
|Centner|Bremen|127.5 lb|Pie|Spain|0.91416 ft|
|Centner|Denmark; Norway|119.23 lb|Pik|Turkey|27.9 in|
|Centner|Germany|113.44 lb|Pood|Russia|36.113 lb|
|Centner|Sweden|93.7 lb|Pund (lb)|Denmark|1.102 lb|
|Chetvert|USSR|5.957 bu|Quart|British|1.20094 liquid qt|
|Ch'ih|China|12.6 in|Quart|British|1.03205 dry qt|
|Ch'ih (metric)|China|39.37 = 1 m|Quarter|British|8.256 bu|
|Cho|Japan|2.451 acres|Quintal|Argentina|101.3 lb|
|Coombs|England|4.1282 bu|Quintal|Brazil|129.54 lb|
|Coyan|Siam|2645.5 lb|Quintal|Castile; Peru|101.43 lb|
|Cuadra|Argentina|4.2 acres|Quintal|Chile|101.43 lb|
|Cuadra|Paraguay|94.71 yd|Quintal|Mexico|101.47 lb|
|Cuadra (sq)|Paraguay|1.85 acres|Rotl|Palestine|6.35 lb|
|Cuadra|Uruguay|1.82 acres|Sagene|USSR|7 ft|
|Cwt (hundred weight)|Britch|112 lb|Salm|Malta|8.26 bu|
|Dessiatine|USSR|2.6997 acres|Se|Japan|0.02451 acre|
|Drachma|Greece|49.38 grains|Seer|India|2 2-35 lb|
|Dunam|Palestine|.22239 acre|Shaku|Japan|11.9303 in|
|Fanega (dry)|Ecuador; Salvador|1.5845 bu|Sha|Japan|1.91 liquid qt|
|Fanega|Chile|2.75268 bu|Skalpund|Sweden|0.937 lb|
|Fanega (dry)|Guatemala; Spain|1.57744 bu|Stone|British|14 lb|
|Fanega|Mexico|2.57716 bu|Sun|Japan|1.193 in|
|Fanega (dry)|Spain|1.57501 bu|Tael|China|575.64 grains (troy)|
|Fanega (liquid)|Spain|16 gal|Tan|Japan|0.25 acre|
|Fanega (double)|Uruguay|7.776 bu|To|Japan|2.05 pecks|
|Fanega (single)|Uruguay|3.888 bu|Tonde (cereal)|Denmark|3.9480 bu|
|Fanega|Venezuela|3.334 bu|Tonde (land)|Denmark|1.36 acres|
|Kwan|Japan|8.2673 lb||||
|Last|Belgium; Holland|85.134 bu||||
|>|>|>|>|>|>|The metric carat of 200 milligrams is now very generally in use. The word carat is also used to denote the proportion of alloy in metal (pure gold is 24 carats fine).|
Welcome to the new ~WeightsWiki for the Capital Region Chapter of the Society of Allied Weights Engineers. This Wiki is here to help provide information, links, chapter events, and other stuff that may be of interest to the weights or mass properties engineer.
If you have a suggestion, comment, or want to have something posted here, contact the webmaster at: [[telletdl99@mac.com|mailto:telletdl99@mac.com]]
----
Each little chunk of information is called a @@tiddler@@ and can be opened or closed or searched by you using the menus on the left and right or the search box in the upper right. The menu on the left will have links to the most used information chunks. The menu on the right shows all the tiddlers in the page by timeline or by tags.
The easiest way to learn about this kind of website is to use it! Try clicking on various links and see what happens - you cannot damage weightswiki or your browser. (If you find you have too many windows open, just use the close all button over on the right to clear all the displayed tiddlers and start again). Above the top tiddler is a menu of all the tiddlers you've visited so you can go back to previous ones by clicking on that menu item.
Have fun!
----
----
----
AaA BbB CcC DdD EeE FfF HhH IiI JjJ KkK LlL MmM NnN OoO PpP QqQ RrR SsS TtT UuU VvV WwW XxX YyY ZzZ
----
!!!Garboard Strake
is the course of plates next to the keel of a ship.
!!!GFE
is the acronym for Government Furnished Equipment.
!!!GFI
is the acronym for Government Furnished Information.
!!!~Government-Furnished Material (GFM)
is material provided to the shipbuilder or contractor by the government or customer.
!!!GFM
is the acronym for Government Furnished Material.
!!!GFM Margin
is a weight and KG allowance included in the weight estimates and reports to account for increases caused by the growth in GFM during the detail design and construction phase. This margin is
included in the feasibility, preliminary, and contract design phase weight estimates.
!!!Gyradius
is used in hydrodynamic and ship motions studies and is the virtual point located from the motion center where the entire mass of the body appears to be located. The gyradius for roll, pitch, or yaw is the square root of the quotient of the ship’s weight moment of inertia about the roll, pitch, and yaw axes, respectively, divided by the ship’s displacement. K = √I/Δ
[[Haloscan|http://www.haloscan.com/]] provides a comment and trackback hosting service. This service seems like the perfect thing for providing the back-end support for these features in a TiddlyWiki.
/***
|Name|HaloscanMacro|
|Created by|JimSpeth|
|Location|http://end.com/~speth/HaloscanMacro.html|
|Version|1.1.0|
|Requires|~TW2.x|
!Description
Comment and trackback support for TiddlyWiki (via Haloscan).
!History
* 16-Feb-06, version 1.1.0, drastic changes, now uses settings from haloscan account config
* 31-Jan-06, version 1.0.1, fixed display of counts for default tiddlers
* 30-Jan-06, version 1.0, initial release
!Examples
|!Source|!Output|h
|{{{<<haloscan comments>>}}}|<<haloscan comments>>|
|{{{<<haloscan trackbacks>>}}}|<<haloscan trackbacks>>|
!Installation
Register for a [[Haloscan|http://www.haloscan.com]] account. It's free and painless.
Install the HaloscanMacro in a new tiddler with a tag of systemConfig (save and reload to activate).
In the macro configuration code (below), change //YourName// to your Haloscan account name.
Use the macro somewhere in a tiddler (see ViewTemplate for an example).
!Settings
You can adjust various options for your account in the member configuration area of Haloscan's web site. The macro will use these settings when formatting the links.
!Code
***/
//{{{
/* change "YourName" to your Haloscan account name */
config.macros.haloscan = {account: "telletdl", baseURL: "http://www.haloscan.com/load/"};
var haloscanLoaded = 0;
config.macros.haloscan.load = function ()
{
if (haloscanLoaded == 1)
return;
account = config.macros.haloscan.account;
if (!account || (account == "telletdl"))
account = store.getTiddlerText("capital.sawe.org");
var el = document.createElement('script');
el.language = 'JavaScript';
el.type = 'text/javascript';
el.src = config.macros.haloscan.baseURL + account;
document.documentElement.childNodes[0].appendChild(el);
haloscanLoaded = 1;
}
config.macros.haloscan.load();
/* this totally clobbers document.write, i hope that's ok */
var safeWrite = function(s)
{
document.written = s;
return s;
};
document.write = safeWrite;
config.macros.haloscan.refreshDefaultTiddlers = function ()
{
var start = store.getTiddlerText("DefaultTiddlers");
if (start)
{
var titles = start.readBracketedList();
for (var t=titles.length-1; t>=0; t--)
story.refreshTiddler(titles[t], DEFAULT_VIEW_TEMPLATE, 1);
}
}
var haloscanRefreshed = 0;
config.macros.haloscan.handler = function (place, macroName, params, wikifier, paramString, tiddler)
{
if (typeof HaloScan == 'undefined')
{
if (haloscanRefreshed == 0)
{
setTimeout("config.macros.haloscan.refreshDefaultTiddlers()", 1);
haloscanRefreshed = 1;
}
return;
}
var id = story.findContainingTiddler(place).id.substr(7);
var hs_search = new RegExp('\\W','gi');
id = id.replace(hs_search,"_");
account = config.macros.haloscan.account;
if (!account || (account == "telletdl"))
account = store.getTiddlerText("capital.sawe.org");
var haloscanError = function (msg)
{
createTiddlyError(place, config.messages.macroError.format(["HaloscanMacro"]), config.messages.macroErrorDetails.format(["HaloscanMacro", msg]));
}
if (params.length == 1)
{
if (params[0] == "comments")
{
postCount(id);
commentsLabel = document.written;
commentsPrompt = "Comments on this tiddler";
var commentsHandler = function(e) { HaloScan(id); return false; };
var commentsButton = createTiddlyButton(place, commentsLabel, commentsPrompt, commentsHandler);
}
else if (params[0] == "trackbacks")
{
postCountTB(id);
trackbacksLabel = document.written;
trackbacksPrompt = "Trackbacks for this tiddler";
var trackbacksHandler = function(e) { HaloScanTB(id); return false; };
var trackbackButton = createTiddlyButton(place, trackbacksLabel, trackbacksPrompt, trackbacksHandler);
}
else
haloscanError("unknown parameter: " + params[0]);
}
else if (params.length == 0)
haloscanError("missing parameter");
else
haloscanError("bad parameter count");
}
//}}}
----
AaA BbB CcC DdD EeE FfF GgG IiI JjJ KkK LlL MmM NnN OoO PpP QqQ RrR SsS TtT UuU VvV WwW XxX YyY ZzZ
----
!!!~Half-Breadth Plan
is, along with the Body Plan and Sheer Plan, one of the traditional drawings used to express the hull dimensions onto a flat drawing. The drawing shows a series of waterlines representing the intersection of the hull with longitudinal planes from baseline to the main deck.
!!!Heel
is the inclination of a vessel to one side due to a temporary source. Differs from List which is a constant inclination due to off-center loading or flooding.
!!!Heeling Arm
is a moment arm between forces that induce a heel to a vessel. E.g., the effect of wind on a ship is described in terms of a wind heeling arm for particular angles of ship heel. The heeling arm is measured against the Righting Arm to assess a ship’s stability. See figure.
!!!Hog
is the straining of the ship that tends to make the bow and stern lower than the middle portion. Opposite of Sag.
!!!Hull
is the body of a ship or submarine, including shell plating, framing, decks, and bulkheads.
----
AaA BbB CcC DdD EeE FfF GgG HhH JjJ KkK LlL MmM NnN OoO PpP QqQ RrR SsS TtT UuU VvV WwW XxX YyY ZzZ
----
!!!ICD
is the acronym for the Initial Capabilities Document.
!!!IMO
is the acronym for the International Maritime Organization. The IMO is a specialized agency of the United Nations primarily concerned with safety at sea.
!!!Inboard
connotes toward or nearer to the centerline of the ship.
!!!Inboard Profile
is a drawing of the longitudinal section at the centerline of the ship.
!!!Inclining Experiment
is the procedure for determining the height of the ship’s center of gravity by measuring the inclination produced by a known transverse moment, and for determining the displacement and longitudinal position of the ship’s center of gravity by measuring drafts.
!!!Inclinometer
is a mechanical or electrical instrument that measures either the heel angle or the tangent of the heel angle.
!!!Intercostal
is a term for between frames or beams. Also something made in separate parts. Also the opposite of continuous as in decks, girders, or beams.
!!!IPT/IPPT
is the acronym for an Integrated Process [Product] Team.
/***
|Name|ImageSizePlugin|
|Source|http://www.TiddlyTools.com/#ImageSizePlugin|
|Version|1.2.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|adds support for resizing images|
This plugin adds optional syntax to scale an image to a specified width and height and/or interactively resize the image with the mouse.
!!!!!Usage
<<<
The extended image syntax is:
{{{
[img(w+,h+)[...][...]]
}}}
where ''(w,h)'' indicates the desired width and height (in CSS units, e.g., px, em, cm, in, or %). Use ''auto'' (or a blank value) for either dimension to scale that dimension proportionally (i.e., maintain the aspect ratio). You can also calculate a CSS value 'on-the-fly' by using a //javascript expression// enclosed between """{{""" and """}}""". Appending a plus sign (+) to a dimension enables interactive resizing in that dimension (by dragging the mouse inside the image). Use ~SHIFT-click to show the full-sized (un-scaled) image. Use ~CTRL-click to restore the starting size (either scaled or full-sized).
<<<
!!!!!Examples
<<<
{{{
[img(100px+,75px+)[images/meow2.jpg]]
}}}
[img(100px+,75px+)[images/meow2.jpg]]
{{{
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img( 1%+,+)[images/meow.gif]]
}}}
[<img(34%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img( 1%+,+)[images/meow.gif]]
{{tagClear{
}}}
<<<
!!!!!Revisions
<<<
2009.02.24 [1.2.1] cleanup width/height regexp, use '+' suffix for resizing
2009.02.22 [1.2.0] added stretchable images
2008.01.19 [1.1.0] added evaluated width/height values
2008.01.18 [1.0.1] regexp for "(width,height)" now passes all CSS values to browser for validation
2008.01.17 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.ImageSizePlugin= {major: 1, minor: 2, revision: 1, date: new Date(2009,2,24)};
//}}}
//{{{
var f=config.formatters[config.formatters.findByField("name","image")];
f.match="\\[[<>]?[Ii][Mm][Gg](?:\\([^,]*,[^\\)]*\\))?\\[";
f.lookaheadRegExp=/\[([<]?)(>?)[Ii][Mm][Gg](?:\(([^,]*),([^\)]*)\))?\[(?:([^\|\]]+)\|)?([^\[\]\|]+)\](?:\[([^\]]*)\])?\]/mg;
f.handler=function(w) {
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var floatLeft=lookaheadMatch[1];
var floatRight=lookaheadMatch[2];
var width=lookaheadMatch[3];
var height=lookaheadMatch[4];
var tooltip=lookaheadMatch[5];
var src=lookaheadMatch[6];
var link=lookaheadMatch[7];
// Simple bracketted link
var e = w.output;
if(link) { // LINKED IMAGE
if (config.formatterHelpers.isExternalLink(link)) {
if (config.macros.attach && config.macros.attach.isAttachment(link)) {
// see [[AttachFilePluginFormatters]]
e = createExternalLink(w.output,link);
e.href=config.macros.attach.getAttachment(link);
e.title = config.macros.attach.linkTooltip + link;
} else
e = createExternalLink(w.output,link);
} else
e = createTiddlyLink(w.output,link,false,null,w.isStatic);
addClass(e,"imageLink");
}
var img = createTiddlyElement(e,"img");
if(floatLeft) img.align="left"; else if(floatRight) img.align="right";
if(width||height) {
var x=width.trim(); var y=height.trim();
var stretchW=(x.substr(x.length-1,1)=='+'); if (stretchW) x=x.substr(0,x.length-1);
var stretchH=(y.substr(y.length-1,1)=='+'); if (stretchH) y=y.substr(0,y.length-1);
if (x.substr(0,2)=="{{")
{ try{x=eval(x.substr(2,x.length-4))} catch(e){displayMessage(e.description||e.toString())} }
if (y.substr(0,2)=="{{")
{ try{y=eval(y.substr(2,y.length-4))} catch(e){displayMessage(e.description||e.toString())} }
img.style.width=x.trim(); img.style.height=y.trim();
config.formatterHelpers.addStretchHandlers(img,stretchW,stretchH);
}
if(tooltip) img.title = tooltip;
// GET IMAGE SOURCE
if (config.macros.attach && config.macros.attach.isAttachment(src))
src=config.macros.attach.getAttachment(src); // see [[AttachFilePluginFormatters]]
else if (config.formatterHelpers.resolvePath) { // see [[ImagePathPlugin]]
if (config.browser.isIE || config.browser.isSafari) {
img.onerror=(function(){
this.src=config.formatterHelpers.resolvePath(this.src,false);
return false;
});
} else
src=config.formatterHelpers.resolvePath(src,true);
}
img.src=src;
w.nextMatch = this.lookaheadRegExp.lastIndex;
}
}
config.formatterHelpers.addStretchHandlers=function(e,stretchW,stretchH) {
e.title=((stretchW||stretchH)?'DRAG=stretch/shrink, ':'')
+'SHIFT-CLICK=show full size, CTRL-CLICK=restore initial size';
e.statusMsg='width=%0, height=%1';
e.style.cursor='move';
e.originalW=e.style.width;
e.originalH=e.style.height;
e.minW=Math.max(e.offsetWidth/20,10);
e.minH=Math.max(e.offsetHeight/20,10);
e.stretchW=stretchW;
e.stretchH=stretchH;
e.onmousedown=function(ev) { var ev=ev||window.event;
this.sizing=true;
this.startX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
this.startY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
this.startW=this.offsetWidth;
this.startH=this.offsetHeight;
return false;
};
e.onmousemove=function(ev) { var ev=ev||window.event;
if (this.sizing) {
var s=this.style;
var currX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
var currY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
var newW=(currX-this.offsetLeft)/(this.startX-this.offsetLeft)*this.startW;
var newH=(currY-this.offsetTop )/(this.startY-this.offsetTop )*this.startH;
if (this.stretchW) s.width =Math.floor(Math.max(newW,this.minW))+'px';
if (this.stretchH) s.height=Math.floor(Math.max(newH,this.minH))+'px';
clearMessage(); displayMessage(this.statusMsg.format([s.width,s.height]));
}
return false;
};
e.onmouseup=function(ev) { var ev=ev||window.event;
if (ev.shiftKey) { this.style.width=this.style.height=''; }
if (ev.ctrlKey) { this.style.width=this.originalW; this.style.height=this.originalH; }
this.sizing=false;
clearMessage();
return false;
};
e.onmouseout=function(ev) { var ev=ev||window.event;
this.sizing=false;
clearMessage();
return false;
};
}
//}}}
!!!David A. Carlson
1938 - 2009
The Capitol Region Chapter is saddened to report that David A. Carlson, 71, passed away on Monday, July 20, 2009, at his home in Lothian, Maryland. He is survived by his beloved wife Jean Carlson and sons David Andrew Carlson, Michael A. Foreman and James Foreman. He is also survived by six grandchildren, a sister, Doris Duberg; three nieces, a nephew, other family and friends.
Dave was a native of New England. He started his professional career at Electric Boat in Groton, Connecticut working in the submarine weight group. In the 1968 Dave moved to Washington, DC to work for the Department of the Navy. From 1968 to 1988, Dave worked for the Naval Sea Systems Command (NAVSEA) in the Weights Division, and was a Branch Head for the Submarine and Craft Ships Branch. Dave then transferred to NAVSEA’s Ship Design Management office for Submarines where he worked until he retired from government service in mid 1990’s. After retiring, Dave was a consultant for about 5 years. During his career Dave was considered a technical expert in submarine mass properties and mentored many young engineers. He also worked on almost every new submarine designs during that time and his technical advice was sought by many from both the Government and Industry. Dave was dedicated to the submarine mass properties profession and was a member of SAWE and served in several local chapter offices.
Our condolences go out to Dave’s family and many friends. Memorial contributions may be made to Hospice of the Chesapeake, 445 Defense Highway, Annapolis, MD 21401
!!!@@color(darkblue):Angelo S. Karadimos@@
''1928-2007''
The Capitol Region Chapter is saddened to report that Angelo Karadimos, 79, passed away on Sunday, August 26 2007, at his home in Waldorf, Maryland as a result of Parkinson's disease. He is survived by his wife of 52 years Maurine, two daughters Diane and Tina, son-in-law, Perry and two grandchildren, Maria and James. He is also survived by his many siblings, nieces, nephews and other relatives.
Angelo was a native of Washington, DC. He graduated from Eastern High School in 1947 and earned a scholarship for Colorado State College. He earned his BS Degree in Aeronautical Engineering at Embry Riddle Aeronautical & Space Technical Institute in Miami, Florida. In 1966, he was part of the design team for the Apollo Missile Launch at Cape Canaveral, Florida which was successful in getting the first man on the moon. From 1966 to 1988, Angelo worked for the Naval Sea Systems Command (NAVSEA) in the Weights Division, and was a Branch Head for the Auxiliary and Amphibious Ships Branch. Angelo then transferred to NAVSEA’s Specification and Standards Branch where he worked until he retired from government service. During his career Angelo fostered and promoted weight engineering and mentored many young engineers.
Angelo was dedicated to the mass properties profession and was an active member of SAWE and served in many offices at the local and international level. The Society recognized his many contributions and elected him an Honorary Fellow in 1972. He held the position of International Vice president from 1969 to 1970 and International Executive Vice president from 1982 to 1983. In 1986 Angelo was elected as the International President and served as such for two terms from 1986 to 1988.
After retiring, Angelo moved closer to his daughter Tina and spend his retirement years enjoying his grandchildren, family, and friends. He was a member of Saints Constantine and Helen Greek Orthodox Church, Washington, DC and the American Legion, Bethesda, MD Chapter.
Our condolences go out to Angelo’s family and many friends.
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revisions
<<<
2009.04.11 [1.9.5] pass current tiddler object into wrapper code so it can be referenced from within 'onclick' scripts
2009.02.26 [1.9.4] in $(), handle leading '#' on ID for compatibility with JQuery syntax
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.InlineJavascriptPlugin= {major: 1, minor: 9, revision: 5, date: new Date(2009,4,11)};
config.formatters.push( {
name: "inlineJavascript",
match: "\\<script",
lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?(?: title=\\\"((?:.|\\n)*?)\\\")?(?: key=\\\"((?:.|\\n)*?)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",
handler: function(w) {
var lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var src=lookaheadMatch[1];
var label=lookaheadMatch[2];
var tip=lookaheadMatch[3];
var key=lookaheadMatch[4];
var show=lookaheadMatch[5];
var code=lookaheadMatch[6];
if (src) { // external script library
var script = document.createElement("script"); script.src = src;
document.body.appendChild(script); document.body.removeChild(script);
}
if (code) { // inline code
if (show) // display source in tiddler
wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
if (label) { // create 'onclick' command link
var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",wikifyPlainText(label));
var fixup=code.replace(/document.write\s*\(/gi,'place.bufferedHTML+=(');
link.code="function _out(place,tiddler){"+fixup+"\n};_out(this,this.tiddler);"
link.tiddler=w.tiddler;
link.onclick=function(){
this.bufferedHTML="";
try{ var r=eval(this.code);
if(this.bufferedHTML.length || (typeof(r)==="string")&&r.length)
var s=this.parentNode.insertBefore(document.createElement("span"),this.nextSibling);
if(this.bufferedHTML.length)
s.innerHTML=this.bufferedHTML;
if((typeof(r)==="string")&&r.length) {
wikify(r,s,null,this.tiddler);
return false;
} else return r!==undefined?r:false;
} catch(e){alert(e.description||e.toString());return false;}
};
link.setAttribute("title",tip||"");
var URIcode='javascript:void(eval(decodeURIComponent(%22(function(){try{';
URIcode+=encodeURIComponent(encodeURIComponent(code.replace(/\n/g,' ')));
URIcode+='}catch(e){alert(e.description||e.toString())}})()%22)))';
link.setAttribute("href",URIcode);
link.style.cursor="pointer";
if (key) link.accessKey=key.substr(0,1); // single character only
}
else { // run script immediately
var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
var c="function _out(place,tiddler){"+fixup+"\n};_out(w.output,w.tiddler);";
try { var out=eval(c); }
catch(e) { out=e.description?e.description:e.toString(); }
if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
}
}
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
}
}
} )
//}}}
// // Backward-compatibility for TW2.1.x and earlier
//{{{
if (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {
if(limit > 0) text = text.substr(0,limit);
var wikifier = new Wikifier(text,formatter,null,tiddler);
return wikifier.wikifyPlain();
}
//}}}
// // GLOBAL FUNCTION: $(...) -- 'shorthand' convenience syntax for document.getElementById()
//{{{
if (typeof($)=='undefined') { function $(id) { return document.getElementById(id.replace(/^#/,'')); } }
//}}}
/***
|Name|InlineJavascriptPluginInfo|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.4|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|documentation|
|Description|Documentation for InlineJavascriptPlugin|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Usage
<<<
This plugin adds wiki syntax for surrounding tiddler content with {{{<script>}}} and {{{</script>}}} markers, so that it can be recognized as embedded javascript code.
<script show>
/* javascript code goes here... */
</script>Every time the tiddler content is rendered, the javascript code is automatically evaluated, allowing you to invoke 'side-effect' processing and/or produce dynamically-generated content that is then inserted into the tiddler content, immediately following the script (see below). By including the optional ''show'' keyword as the final parameter in a {{{<script>}}} marker, the plugin will also include the script source code in the output that it displays in the tiddler. This is helpful when creating examples for documentation purposes (such as used in this tiddler!)
__''Deferred execution from an 'onClick' link''__
<script label="click here" title="mouseover tooltip text" key="X" show>
/* javascript code goes here... */
alert('you clicked on the link!');
</script>
By including a {{{label="..."}}} parameter in the initial {{{<script>}}} marker, the plugin will create a link to an 'onclick' script that will only be executed when that specific link is clicked, rather than running the script each time the tiddler is rendered. You may also include a {{{title="..."}}} parameter to specify the 'tooltip' text that will appear whenever the mouse is moved over the onClick link text, and a {{{key="X"}}} parameter to specify an //access key// (which must be a //single// letter or numeric digit only).
__''Loading scripts from external source files''__
<script src="URL" show>
/* optional javascript code goes here... */
</script>You can also load javascript directly from an external source URL, by including a src="..." parameter in the initial {{{<script>}}} marker (e.g., {{{<script src="demo.js"></script>}}}). This is particularly useful when incorporating third-party javascript libraries for use in custom extensions and plugins. The 'foreign' javascript code remains isolated in a separate file that can be easily replaced whenever an updated library file becomes available.
In addition to loading the javascript from the external file, you can also use this feature to invoke javascript code contained within the {{{<script>...</script>}}} markers. This code is invoked //after// the external script file has been processed, and can make immediate use of the functions and/or global variables defined by the external script file.
>Note: To ensure that your javascript functions are always available when needed, you should load the libraries from a tiddler that is rendered as soon as your TiddlyWiki document is opened, such as MainMenu. For example: put your {{{<script src="..."></script>}}} syntax into a separate 'library' tiddler (e.g., LoadScripts), and then add {{{<<tiddler LoadScripts>>}}} to MainMenu so that the library is loaded before any other tiddlers that rely upon the functions it defines.
>
>Normally, loading external javascript in this way does not produce any direct output, and should not have any impact on the appearance of your MainMenu. However, if your LoadScripts tiddler contains notes or other visible content, you can suppress this output by using 'inline CSS' in the MainMenu, like this: {{{@@display:none;<<tiddler LoadScripts>>@@}}}
<<<
!!!!!Creating dynamic tiddler content and accessing the ~TiddlyWiki DOM
<<<
An important difference between TiddlyWiki inline scripting and conventional embedded javascript techniques for web pages is the method used to produce output that is dynamically inserted into the document: in a typical web document, you use the {{{document.write()}}} (or {{{document.writeln()}}}) function to output text sequences (often containing HTML tags) that are then rendered when the entire document is first loaded into the browser window.
However, in a ~TiddlyWiki document, tiddlers (and other DOM elements) are created, deleted, and rendered "on-the-fly", so writing directly to the global 'document' object does not produce the results you want (i.e., replacing the embedded script within the tiddler content), and instead will //completely replace the entire ~TiddlyWiki document in your browser window (which is clearly not a good thing!)//. In order to allow scripts to use {{{document.write()}}}, the plugin automatically converts and buffers all HTML output so it can be safely inserted into your tiddler content, immediately following the script.
''Note that {{{document.write()}}} can only be used to output "pure HTML" syntax. To produce //wiki-formatted// output, your script should instead return a text value containing the desired wiki-syntax content'', which will then be automatically rendered immediately following the script. If returning a text value is not sufficient for your needs, the plugin also provides an automatically-defined variable, 'place', that gives the script code ''direct access to the //containing DOM element//'' into which the tiddler output is being rendered. You can use this variable to ''perform direct DOM manipulations'' that can, for example:
* generate wiki-formatted output using {{{wikify("...content...",place)}}}
* vary the script's actions based upon the DOM element in which it is embedded
* access 'tiddler-relative' DOM information using {{{story.findContainingTiddler(place)}}}
Note:
''When using an 'onclick' script, the 'place' element actually refers to the onclick //link text// itself, instead of the containing DOM element.'' This permits you to directly reference or modify the link text to reflect any 'stateful' conditions that might set by the script. To refer to the containing DOM element from within an 'onclick' script, you can use "place.parentNode" instead.
<<<
!!!!!Instant "bookmarklets"
<<<
You can also use an 'onclick' link to define a "bookmarklet": a small piece of javascript that can be ''invoked directly from the browser without having to be defined within the current document.'' This allows you to create 'stand-alone' commands that can be applied to virtually ANY TiddlyWiki document... even remotely-hosted documents that have been written by others!! To create a bookmarklet, simply define an 'onclick' script and then grab the resulting link text and drag-and-drop it onto your browser's toolbar (or right-click and use the 'bookmark this link' command to add it to the browser's menu).
Notes:
*When writing scripts intended for use as bookmarklets, due to the ~URI-encoding required by the browser, ''you cannot not use ANY double-quotes (") within the bookmarklet script code.''
*All comments embedded in the bookmarklet script must ''use the fully-delimited {{{/* ... */}}} comment syntax,'' rather than the shorter {{{//}}} comment syntax.
*Most importantly, because bookmarklets are invoked directly from the browser interface and are not embedded within the TiddlyWiki document, there is NO containing 'place' DOM element surrounding the script. As a result, ''you cannot use a bookmarklet to generate dynamic output in your document,'' and using {{{document.write()}}} or returning wiki-syntax text or making reference to the 'place' DOM element will halt the script and report a "Reference Error" when that bookmarklet is invoked.
Please see [[InstantBookmarklets]] for many examples of 'onclick' scripts that can also be used as bookmarklets.
<<<
!!!!!Special reserved function name
<<<
The plugin 'wraps' all inline javascript code inside a function, {{{_out()}}}, so that any return value you provide can be correctly handled by the plugin and inserted into the tiddler. To avoid unpredictable results (and possibly fatal execution errors), this function should never be redefined or called from ''within'' your script code.
<<<
!!!!!$(...) 'shorthand' function
<<<
As described by Dustin Diaz [[here|http://www.dustindiaz.com/top-ten-javascript/]], the plugin defines a 'shorthand' function that allows you to write:
{{{
$(id)
}}}
in place of the normal standard javascript syntax:
{{{
document.getElementById(id)
}}}
This function is provided merely as a convenience for javascript coders that may be familiar with this abbreviation, in order to allow them to save a few bytes when writing their own inline script code.
<<<
!!!!!Examples
<<<
simple dynamic output:
><script show>
document.write("The current date/time is: "+(new Date())+"<br>");
return "link to current user: [["+config.options.txtUserName+"]]\n";
</script>
dynamic output using 'place' to get size information for current tiddler:
><script show>
if (!window.story) window.story=window;
var title=story.findContainingTiddler(place).getAttribute("tiddler");
var size=store.getTiddlerText(title).length;
return title+" is using "+size+" bytes";
</script>
dynamic output from an 'onclick' script, using {{{document.write()}}} and/or {{{return "..."}}}
><script label="click here" show>
document.write("<br>The current date/time is: "+(new Date())+"<br>");
return "link to current user: [["+config.options.txtUserName+"]]\n";
</script>
creating an 'onclick' button/link that accesses the link text AND the containing tiddler:
><script label="click here" title="clicking this link will show an 'alert' box" key="H" show>
if (!window.story) window.story=window;
var txt=place.firstChild.data;
var tid=story.findContainingTiddler(place).getAttribute('tiddler');
alert('Hello World!\nlinktext='+txt+'\ntiddler='+tid);
</script>
dynamically setting onclick link text based on stateful information:
>{{block{
{{{
<script label="click here">
/* toggle "txtSomething" value */
var on=(config.txtSomething=="ON");
place.innerHTML=on?"enable":"disable";
config.txtSomething=on?"OFF":"ON";
return "\nThe current value is: "+config.txtSomething;
</script><script>
/* initialize onclick link text based on current "txtSomething" value */
var on=(config.txtSomething=="ON");
place.lastChild.previousSibling.innerHTML=on?"disable":"enable";
</script>
}}}
<script label="click here">
/* toggle "txtSomething" value */
var on=(config.txtSomething=="ON");
place.innerHTML=on?"enable":"disable";
config.txtSomething=on?"OFF":"ON";
return "\nThe current value is: "+config.txtSomething;
</script><script>
/* initialize onclick link text based on current "txtSomething" value */
var on=(config.txtSomething=="ON");
place.lastChild.innerHTML=on?"enable":"disable";
</script>
}}}
loading a script from a source url:
>http://www.TiddlyTools.com/demo.js contains:
>>{{{function inlineJavascriptDemo() { alert('Hello from demo.js!!') } }}}
>>{{{displayMessage('InlineJavascriptPlugin: demo.js has been loaded');}}}
>note: When using this example on your local system, you will need to download the external script file from the above URL and install it into the same directory as your document.
>
><script src="demo.js" show>
return "inlineJavascriptDemo() function has been defined"
</script>
><script label="click to invoke inlineJavascriptDemo()" key="D" show>
inlineJavascriptDemo();
</script>
<<<
!!!!!Revisions
<<<
2009.02.26 1.9.4 in $(), handle leading '#' on ID for compatibility with JQuery syntax
2008.06.11 1.9.3 added $(...) function as 'shorthand' for document.getElementById()
2008.03.03 1.9.2 corrected fallback declaration of wikifyPlainText() (fixes Safari "parse error")
2008.02.23 1.9.1 in onclick function, use string instead of array for 'bufferedHTML' (fixes IE errors)
2008.02.21 1.9.0 output from 'onclick' scripts (return value or document.write() calls) are now buffered and rendered into into a span following the script. Also, added default 'return false' handling if no return value provided (prevents HREF from being triggered -- return TRUE to allow HREF to be processed). Thanks to Xavier Verges for suggestion and preliminary code.
2008.02.14 1.8.1 added backward-compatibility for use of wikifyPlainText() in TW2.1.3 and earlier
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info tiddler
2007.12.28 1.8.0 added support for key="X" syntax to specify custom access key definitions
2007.12.15 1.7.0 autogenerate URI encoded HREF on links for onclick scripts. Drag links to browser toolbar to create bookmarklets. IMPORTANT NOTE: place is NOT defined when scripts are used as bookmarklets. In addition, double-quotes will cause syntax errors. Thanks to PaulReiber for debugging and brainstorming.
2007.11.26 1.6.2 when converting "document.write()" function calls in inline code, allow whitespace between "write" and "(" so that "document.write ( foobar )" is properly converted.
2007.11.16 1.6.1 when rendering "onclick scripts", pass label text through wikifyPlainText() to parse any embedded wiki-syntax to enable use of HTML entities or even TW macros to generate dynamic label text.
2007.02.19 1.6.0 added support for title="..." to specify mouseover tooltip when using an onclick (label="...") script
2006.10.16 1.5.2 add newline before closing '}' in 'function out_' wrapper. Fixes error caused when last line of script is a comment.
2006.06.01 1.5.1 when calling wikify() on script return value, pass hightlightRegExp and tiddler params so macros that rely on these values can render properly
2006.04.19 1.5.0 added 'show' parameter to force display of javascript source code in tiddler output
2006.01.05 1.4.0 added support 'onclick' scripts. When label="..." param is present, a button/link is created using the indicated label text, and the script is only executed when the button/link is clicked. 'place' value is set to match the clicked button/link element.
2005.12.13 1.3.1 when catching eval error in IE, e.description contains the error text, instead of e.toString(). Fixed error reporting so IE shows the correct response text. Based on a suggestion by UdoBorkowski
2005.11.09 1.3.0 for 'inline' scripts (i.e., not scripts loaded with src="..."), automatically replace calls to 'document.write()' with 'place.innerHTML+=' so script output is directed into tiddler content. Based on a suggestion by BradleyMeck
2005.11.08 1.2.0 handle loading of javascript from an external URL via src="..." syntax
2005.11.08 1.1.0 pass 'place' param into scripts to provide direct DOM access
2005.11.08 1.0.0 initial release
<<<
/***
| Name:|InstantTimestamp|
| Created by:|SimonBaird|
| Location:|http://simonbaird.com/mptw/#InstantTimestamp|
| Version:|1.0.4 (06-Apr-2006)|
| Requires:|~TW2.x|
!Description
If you enter {ts} in your tiddler content (without the spaces) it will be replaced with a timestamp when you save the tiddler. Full list:
* {ts} or {t} -> timestamp
* {ds} or {d} -> datestamp
* !ts or !t at start of line -> !!timestamp
* !ds or !d at start of line -> !!datestamp
(I added the extra ! since that's how I like it. Remove it from translations below if required)
!Notes
* Change the timeFormat and dateFormat below to suit your preference.
* See also AutoCorrectPlugin
!History
* 06-Apr-06, version 1.0.4
** removed the AutoCorrect stuff and put it in AutoCorrectPlugin
* 05-Apr-06, version 1.0.3
** now have exclusion by tag and tiddler name, probably less important here than in AutoCorrectPlugin
* 05-Apr-06, version 1.0.2
** put matches into array to and eval them to allow generic substitutions
* 05-Apr-06, version 1.0.1
** added ds for datestamp as suggested by DanielBaird
** made case insensitive
** Added translation for !t at start of line
* 05-Apr-06, version 1.0.0
** written after suggestion by Achim Wessling
!Code
***/
//{{{
version.extensions.InstantTimestamp = { major: 1, minor: 0, revision: 4, date: new Date(2006,4,6),
source: "http://simonbaird.com/mptw/#InstantTimestamp"
};
config.InstantTimestamp = {
timeFormat: 'MM/0DD/YY 0hh:0mm',
dateFormat: 'MM/0DD/YY',
translations: [
[/^!ts?$/img, "'!!'+now.formatString(config.InstantTimestamp.timeFormat)"],
[/^!ds?$/img, "'!!'+now.formatString(config.InstantTimestamp.dateFormat)"],
[/\{ts?\}/ig, "now.formatString(config.InstantTimestamp.timeFormat)"],
[/\{ds?\}/ig, "now.formatString(config.InstantTimestamp.dateFormat)"]
],
excludeTags: [
"noAutoCorrect",
"CSS",
"css",
"systemConfig",
"zsystemConfig",
"Plugins",
"Plugin",
"plugins",
"plugin",
"javascript",
"code"
],
excludeTiddlers: [
"StyleSheet",
"StyleSheetLayout",
"StyleSheetColors",
"StyleSheetPrint"
]
};
if (!Array.prototype.contains)
Array.prototype.contains = function(item) {
return (this.find(item) != null);
};
if (!Array.prototype.containsAny)
Array.prototype.containsAny = function(items) {
for (var i=0;i<items.length;i++)
if (this.contains(items[i]))
return true;
return false;
};
TiddlyWiki.prototype.saveTiddler_mptw_instanttimestamp = TiddlyWiki.prototype.saveTiddler;
TiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags) {
tags = (typeof(tags) == "string") ? tags.readBracketedList() : tags;
var conf = config.InstantTimestamp;
if ( !tags.containsAny(conf.excludeTags)
&& !conf.excludeTiddlers.contains(newTitle) ) {
var now = new Date();
var trans = config.InstantTimestamp.translations;
for (var i=0;i<trans.length;i++) {
newBody = newBody.replace(trans[i][0], eval(trans[i][1]));
}
}
return this.saveTiddler_mptw_instanttimestamp(title,newTitle,newBody,modifier,modified,tags);
}
//}}}
<!-- JS-KIT codeword=gel -->
----
AaA BbB CcC DdD EeE FfF GgG HhH IiI KkK LlL MmM NnN OoO PpP QqQ RrR SsS TtT UuU VvV WwW XxX YyY ZzZ
----
!!!~JP-5
is a jet fuel with a high flash point (min. 60°C), developed in 1952 for use in aircraft stationed aboard aircraft carriers where the risk from fire is particularly great. ~JP-5 remains the primary jet fuel for most navies and is also used as fuel for ships equipped with gas turbine engines.
----
AaA BbB CcC DdD EeE FfF GgG HhH IiI JjJ LlL MmM NnN OoO PpP QqQ RrR SsS TtT UuU VvV WwW XxX YyY ZzZ
----
!!!Keel
is the principle fore and aft member of a ship’s frame. The keel runs along the bottom connecting the stem and stern, and to it are attached the frames of the ship.
!!!Keel Blocks
are heavy wood or concrete blocks on which a ship rests during drydocking.
!!!KG
is the vertical center of gravity of a ship measured from the bottom of the keel. In many ship designs, the difference between the vertical center of gravity (VCG) and the KG is the thickness of the keel (i.e., the keel lies below the baseline of the ship). In general, the KG of a submarine is the same as the VCG.
!!!KM
is the distance between the keel and the metacenter.
!!!Knot
is a unit of speed equalling one nautical mile per hour (6076.1 ft, 1852 meters). 1 knot = 1.15 mi/hr, 1.852 km/hr.
!!!Knuckle
is an abrupt change in direction of the plating, frames, keel, deck, or other structure of a ship.
|!Multiply:|!By:|!To Obtain:|!Multiply:|!By:|!To Obtain:|
|angstrom units| 1 x 10-10|meters|meters| 1 x 10+10|angstrom units|
|angstrom units| 1 x 10-4|micrometers|meters| 3.28088399|feet|
|angstrom units| 0.1|nanometers|meters| 39.370079|inches|
|centimeters| 0.3937|inches|meters| 5.4 x 10-4|miles (nautical)|
|centimeters| 0.01|meters|meters| 6.214 x 10-4|miles (statute)|
|centimeters| 393.7|mils|meters| 1.0936|yards|
|decimeters| 0.1|meters|Microns| 1 x 10-6|meters|
|dekameters| 10|meters|Microns| 1|micrometers|
|fathoms| 6|feet|Microns| 0.03937|mils|
|fathoms| 1.8288|meters|miles (nautical)| 6076|feet|
|feet| 0.3048|meters|miles (nautical)| 1852|meters|
|furlongs| 660|feet|miles (nautical)| 1.1516|miles (statute)|
|furlongs| 201.168|meters|miles (nautical)| 2025.40|yards|
|furlongs| 40|rods|miles (statute)| 5280|feet|
|furlongs| 220|yards|miles (statute)| 6.336 x 10+4|inches|
|hands| 10.16|centimeters|miles (statute)| 1.609|kilometers|
|hands| 4|inches|miles (statute)| 1.69 x 10-13|light years|
|hectometers| 100|meters|miles (statute)| 1609|meters|
|inches| 2.54 x 10+8|angstrom units|miles (statute)| 0.8684|miles (nautical)|
|inches| 25.4|millimeters|miles (statute)| 1760|yards|
|inches| 1000|mils|Millimeters| 0.03937|inches|
|kilometers| 3281|feet|millimeters| 0.001|meters|
|kilometers| 1000|meters|millimeters| 39.37|mils|
|kilometers| 0.6214|miles|mils| 0.001|inches|
|kilometers| 0.53996|nautical miles|mils| 0.0254|millimeters|
|kilometers| 1093.6|yards|myriameters| 10000.00|meters|
|leagues| 3|miles (approx)|rods| 16.5|feet|
|light years| 9.46055 x 10+12|kilometers|yards| 0.9144|meters|
|light years| 5.87851 x 10+12|miles|yards| 0.914|meters|
|links (engineer's)| 12|inches|yards| 4.934 x 10-4|miles (nautical)|
|links (surveyor's)| 7.92|inches|yards| 5.682 x 10-4|miles (statute)|
----
AaA BbB CcC DdD EeE FfF GgG HhH IiI JjJ KkK MmM NnN OoO PpP QqQ RrR SsS TtT UuU VvV WwW XxX YyY ZzZ
----
!!!Length Between Perpendiculars (LBP)
is the length of a ship measured from the forward perpendicular
to the aft perpendicular.
!!!Length Overall (LOA)
is the total length of a ship, measured from the extreme aft to the extreme forward points of the hull.
!!!LCB
is the Longitudinal Center of Buoyancy. This is measured in feet from either the forward perpendicular or midships.
!!!LCF
is the Longitudinal Center of Floatation. This is read from the Displacement and Other Curves (D&O) drawing and is the longitudinal point about which a ship trims forward or aft when on the surface.
!!!LCG
is the longitudinal center of gravity. This is measured in feet from either the forward perpendicular or midships.
!!!Lightening Hole
a hole cut in a structural member to reduce its weight.
!!!Limber Hole
is a small hole or slot in a frame or plate for the purpose of preventing water or oil from collecting; a drain hole.
!!!Lines
is the form of a ship as represented by its moulded surface.
!!!List
is a constant transverse inclination of a vessel due to off-center loading or flooding. Differs from Heel which is a transitory inclination commonly caused by environment or ship handling.
Google - Search the Web
http://google.com
----
SAWE International
http://www.sawe.org
----
SNAME
http://www.sname.org
----
ASNE
http://www.navalengineers.org
----
ABS
http://www.eagle.org
----
{{borderless{
|vertical-align:bottom;<<toolbar fullscreen>>|<<tiddler NavButtons>>|vertical-align:bottom;[[Open in a new window|http://www.sawe.org]] »|
----
<html><div align="center"><iframe src ="http://www.sawe.org" width="100%" align="center" height="600" scrolling="auto" frameborder="0" allowtransparency style="border:none;"></iframe></div></html>}}}
GettingStarted
[[News]]
[[EventS]]
CalenDar
ProJects
[[Pictures]]
----
[[Chapter Officers]]
[[Membership Listing]]
----
WikiLinks
MiniBrowser
----
[[Past News]]
[[Past Events]]
[[Meeting Minutes]]
----
[[Reference]]
[[MicroCalc]]
----
[[Diversions]]
<<calendar thismonth>>
----
[[Website Revisions]]
[[Suggestion Box]]
----
AaA BbB CcC DdD EeE FfF GgG HhH IiI JjJ KkK LlL MmM NnN OoO PpP QqQ RrR SsS TtT UuU VvV WwW XxX YyY ZzZ
----
As a reference, here you can find links to the Marine Vehicle Weight Engineering Textbook glossary, plus more definitions as we come across them. Right now each window contains all the entries for one letter, we may break it up later if this gets too ungainly.
----
Let us know if you have comments on this feature: <<haloscan comments>>
----
<style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b> SAWE Capital Region Chapter WeightsWiki</b> is loading<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div>
Meeting minutes for August Meeting can be downloaded [[here|SAWE Meeting Notes 8-23-2011.doc]].
----
Meeting minutes for June Meeting can be downloaded [[here|SAWE Meeting Notes 6-9-2011.doc]].
----
!!SAWE Meeting Notes 3/10/2010
(Provided by Matt Yoder)
The meeting opened with David Tellet describing the proposed FRP. The FRP is to be presented to the SAWE community at the annual International Conference in May.
!!!Elections
The current process of electing officials at the chapter level was called into question be David Tellet. A question of society election bi-laws was called into question. A discussion on proposed changes to the current election process included term limits and annual elections for all officers. It was decided that further discussions with the director (Dominick Cimino) and a investigation of the bi-laws is necessary.
Pending concurrence from the bi-laws and conversations with the director, a motion was presented to the group:
Motion (David Tellet) – The Capital Region Chapter will accept nominations for all positions unless precluded by the bi-laws (Seconded by William Garzke) Motion passed without quorum 13-2.
!!Dues
The treasure has received a memo from Ron Fox.
Dues will remain $45 for 2010 (Retired $25, Student $15)
All Dues are due by 1st of May
See [[Membership Renewal]]
!!International Conference (VA Beach)
May 24-27
Paper due date is by April 1st (Abstract date has passed)
The Conference will discuss the following
*SRP 12
*New Deadweight SRP
*New Submarine SRP
*Proposed ESWBS SRP
*A Commercial version of SRP 12
*SRP 14 (rename or realign)
*SRP 15 (revised to include interface Documents)
*Review ~SRPs 13, 17
*Proposed FRP
*Other General Ideas
Meeting closed with lunch.
<<getTiddlerPassword capitalregion "Please enter the password for this information.">>
|>|>|>|>|!Membership list as of December 2007|
|!Last|!First|!Company|!Email|!Phone|
|Aldinger|Morgan |NAVAIR|[[morgan.aldinger@navy.mil|mailto:morgan.aldinger@navy.mil]]||
|Barker|James|Consultant|[[james.w.barker.ctr@navy.mil|mailto:james.w.barker.ctr@navy.mil]]|(202) 781-1772|
|Bauer|Peter |Alion|[[pbauer@alionscience.com|mailto:pbauer@alionscience.com]]|(703) 933-6723|
|Bergman|Michael |CSC|[[mbergma3@csc.com|mailto:mbergma3@csc.com]]|(202) 675-8504|
|Bowser|Christopher |NAVAIR|[[christopher.bowser@navy.mil|mailto:christopher.bowser@navy.mil]]|(301) 373-6865|
|Church|Clinton |Aurora|[[cchurch@aurora.aero|mailto:cchurch@aurora.aero]]|(703) 369-3633|
|Cimino|Dominick |NAVSEA|[[dominick.cimino@navy.mil|mailto:dominick.cimino@navy.mil]]|(202) 781-3681|
|Corretjer|Carlos |NSWCCD|[[carlos.corretjer@navy.mil|mailto:carlos.corretjer@navy.mil]]|(202) 781-4328|
|Craig|Bryant |NAVAIR|[[bryant.craig@navy.mil|mailto:bryant.craig@navy.mil]]||
|Crenshaw|William|Retired|None on record|(410) 823-350?|
|Dolan|Daniel|CSC|[[ddolan3@csc.com|mailto:ddolan3@csc.com]]|(202) 675-4340|
|Edomwonyi|Frank|NAVAIR|[[frank.edomwonyi@navy.mil|mailto:frank.edomwonyi@navy.mil]]||
|Filiopoulos|Chris |NAVSEA|[[christos.filiopoulos@navy.mil|mailto:christos.filiopoulos@navy.mil]]|(202) 781-3683|
|Garzke|William|CSC|[[wgarzke@csc.com|mailto:wgarzke@csc.com]]|(202) 675-8542|
|Gauthier|Peter|CSC|[[pgauthier@csc.com|mailto:pgauthier@csc.com]]|(202) 548-8944|
|Gladding|Brian|CSC|[[bgladdin@csc.com|mailto:bgladdin@csc.com]]|(202) 675-8995|
|Griffin|James|NSWCCD|[[james.a.griffin@navy.mil|mailto:james.a.griffin@navy.mil]]|(301) 227-0056|
|Heidt|Brian|NSWCCD|[[brian.heidt@navy.mil|mailto:brian.heidt@navy.mil]]|(301) 227-1714|
|Helgerson|David|CSC|[[dhelgers@csc.com|mailto:dhelgers@csc.com]]|(202) 675-6193|
|Holloman|G.Thomas|CSC|[[gholloma@csc.com|mailto:gholloma@csc.com]]|(202) 675-6859|
|Hsieh|Terng|NSWCCD|[[terng.hsieh@navy.mil|mailto:terng.hsieh@navy.mil]]|(301) 227-4528|
|Kachurak|Paul|NAVAIR|[[paul.kachurak@navy.mil|mailto:paul.kachurak@navy.mil]]|(301) 342-0204|
|Kolosky|Daniel|NAVAIR|[[daniel.kolosky@navy.mil|mailto:daniel.kolosky@navy.mil]]|(301) 737-0464|
|Leo|Ryan|Orbital Sciences|[[leo.ryan@orbital.com|mailto:leo.ryan@orbital.com]]|(703) 406-5884|
|Leotta|John|Retired|[[eleotta@msn.com|mailto:eleotta@msn.com]]|(302) 539-4465|
|Leslie|Barry|Alion|[[bleslie@alionscience.com|mailto:bleslie@alionscience.com]]||
|Levesque|Dick|Alion|[[alevesque@alionscience.com|mailto:alevesque@alionscience.com]]|(703) 933-6720|
|Marcavage|John|NSWCCD|[[john.marcavage@navy.mil|mailto:john.marcavage@navy.mil]]|(202) 406-4260|
|Mazumdar|Tapan|NAVSEA|[[tapan.mazumdar@navy.mil|mailto:tapan.mazumdar@navy.mil]]|(202) 781-3470|
|Parshall|David|Alion|[[dparshall@alionscience.com|mailto:dparshall@alionscience.com]]|(703) 406-4285|
|Ray|Debasish|CSC|[[dray21@csc.com|mailto:dray21@csc.com]]|(301) 227-5900|
|Redmond|Mark|Alion|[[mredmond@alionscience.com|mailto:mredmond@alionscience.com]]|(703) 933-6725|
|Rosborough|John|NSWCCD|[[john.rosborough@navy.mil|mailto:john.rosborough@navy.mil]]|(301) 227-5392|
|Senuta|Andy|NSWCCD|[[vytenis.senuta@navy.mil|mailto:vytenis.senuta@navy.mil]]|(301) 227-0558|
|Shanahan|Edward|NSWCCD|[[edward.shanahan@navy.mil|mailto:edward.shanahan@navy.mil]]|(202) 333-1294|
|Tellet|David|NAVSEA|[[david.tellet@navy.mil|mailto:david.tellet@navy.mil]]|(202) 781-3718|
|Voran|Rick|NSWCCD|[[rick.voran@navy.mil|mailto:rick.voran@navy.mil]]|(301) 227-0057|
|Walker|Burt|CSC|[[burt.walker@pms317.navy.mil|mailto:burt.walker@pms317.navy.mil]]|(251) 648-2762|
|Wellens|Harry|Retired|[[hwellens1@comcast.net|hwellens1@comcast.net]]|(301) 831-3638|
|Wilson|Henry|Alion|[[hwilson@alionscience.com|mailto:hwilson@alionscience.com]]|(703) 933-6747|
|Yoder|Matthew|NSWCCD|[[matthew.d.yoder@navy.mil|mailto:matthew.d.yoder@navy.mil]]|(717) 658-5766|
|Bocam|Kenneth |Orbital Sciences|[[bocam.ken@orbital.com|mailto:bocam.ken@orbital.com]]|(703) 406-5768|
|Capuco|Benedict |Gibbs & Cox|[[bcapuco@gibbscox.com|mailto:bcapuco@gibbscox.com]]||
|Corzo|Jaime |NSWCCD|[[jaime.corzo@navy.mil|mailto:jaime.corzo@navy.mil]]||
|Javed|Mohammed |NSWCCD|[[mohammed.javed@navy.mil|mailto:mohammed.javed@navy.mil]]|(301) 227-0061|
|Mata|Sly |NAVSEA|[[silvester.mata@navy.mil|mailto:silvester.mata@navy.mil]]|(202) 781-0735|
|Moschler|Joseph Jr. |NAVAIR|[[joseph.moschler@navy.mil|mailto:joseph.moschler@navy.mil]]||
|Raisig|Grant |Alionscience|[[graisig@alionscience.com|mailto:graisig@alionscience.com]]||
|Schneider|Larry D. ||[[bessieboy@myway.com|mailto:bessieboy@myway.com]]||
|Snelling|Charles C. |NAVSEA|[[charles.snelling@navy.mil|mailto:charles.snelling@navy.mil]]||
|Weiler|Daniel J. |Retired|[[w7402@aol.com|mailto:w7402@aol.com]]||
|White|Robin P. |NAVSEA|[[robin.p.white@navy.mil|mailto:robin.p.white@navy.mil]]||
|Zimmerman|Richard |D&P|[[dzimmerm@dandp.com|mailto:dzimmerm@dandp.com]]||
CAPITAL REGION CHAPTER
Society of Allied Weight Engineers, Incorporated
Serving the Aerospace - Shipbuilding - Land Vehicle and Allied Industries
March 12, 2010
To: Chapter Members
Subject: Membership dues for May 2010-April 2011.
It is that time of year again! The 2010-2011 membership campaign has begun. Please send your dues in as early as possible ( before April 30, 2010 ). The dues structure has not changed since last year. The dues structure is summarized below.
Member $45.00
Retired Member $25.00
Fellow $45.00
Retired Fellow $25.00
Honorary Fellow Free
Student Member $15.00
For new members there is a $30 enrollment fee (with Handbook), or $5 enrollment fee (no Handbook). There is no reinstatement fee for members who have become inactive but wish to rejoin. Please remit your dues at the earliest possible date to your Chapter Treasurer.
Tom Holloman
5540 Talon Court
Fairfax, VA 22032-1739
Also, see the following member contact information form. PLEASE fill out the form
and return it with your dues. PLEASE fill it out even though your information may not have changed. Phone and e-mail information is especially important in helping to keep members updated throughout the year. The information is important in maintaining the Chapter, and your fully filled out response is appreciated.
Respectfully,
Tom Holloman, Treasurer ( [[gholloma@csc.com|mailto:gholloma@csc.com]] )
Capital Region Chapter - Society of Allied Weight Engineers
CAPITAL REGION CHAPTER
Society of Allied Weight Engineers, Incorporated
Serving the Aerospace - Shipbuilding - Land Vehicle and Allied Industries
Member Name:
Member Grade: (circle)
Member, Fellow, Retired, Student
Home Address:
Home Phone: ( )
Company Name:
Company Address:
Work Phone: ( )
E-mail Address:
To: Chapter Members
Subject: Membership dues for May 2009-April 2010.
It is that time of year again! The 2009-2010 membership campaign has begun. Please send your dues in as early as possible ( by April 30, 2009 ). The dues structure has not changed since last year.
The dues structure has not changed since last year. The dues structure is summarized below.
Member $45.00
Retired Member $25.00
Fellow $45.00
Retired Fellow $25.00
Honorary Fellow Free
Student Member $15.00
For new members there is a $30 enrollment fee (with Handbook), or $5 enrollment fee (no Handbook). There is no reinstatement fee for members who have become inactive but wish to rejoin. Please remit your dues at the earliest possible date to your Chapter Treasurer.
Tom Holloman
5540 Talon Court
Fairfax, VA 22032-1739
Also, see the following member contact information form (download [[here|2009_Dues_Letter March 1st.doc]]). PLEASE fill out the form and return it with your dues. PLEASE fill it out even though your information may not have changed. Phone and e-mail information is especially important in helping to keep members updated throughout the year. The information is important in maintaining the Chapter, and your fully filled out response is appreciated.
Respectfully,
Tom Holloman, Treasurer mailto:gholloma@csc.com
/%
|Name|MicroCalc|
|Source|http://www.TiddlyTools.com/#MicroCalc|
|Version|1.1.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|html|
|Requires||
|Overrides||
|Description|a simple embeddable calculator using javascript eval() function|
Usage: <<tiddler MicroCalc>>
%/<<tiddler HideTiddlerTags>>/%
%/{{small smallform{/%
%/<html><div style="width:100%"><hide linebreaks>
<form action="javascript:;" style="display:inline;margin:0;padding:0;"><!--
--><input name="input" value="0" style="width:70%;text-align:right;"
title="INPUT: enter a JavaScript expression, function, or object/variable name"
onfocus="this.select()"
onkeyup="if (event.keyCode==13) {this.form.go.click(); return false;}"><!--
--><input name="go" type="button" value="=" style="width:10%"
title="CALCULATE: evaluate input and display results"
onclick="var i=this.form.input; var o=this.form.output; var val=i.value; var res='';
try{res=eval(val);i.value=res}catch(e){res=e.description||e.toString()};
o.value+=(o.value.length?'\n':'')+val+'\n='+res;
o.style.display='block'; o.scrollTop=o.scrollHeight;
i.select();i.focus();"><!--
--><input name="memstore" type="button" value="m" style="width:10%"
title="MEMORY STORE: save input to temporary memory"
onclick="var f=this.form; f.memory.value=f.input.value;
f.memory.parentNode.style.display='block'"><!--
--><input name="clear" type="button" value="c" style="width:10%"
title="CLEAR: erase history and reset input"
onclick="var i=this.form.input; var o=this.form.output;
o.value='';o.style.display='none';
i.value='0';i.select();i.focus();"><!--
--><div style="display:none"><!--
--><input name="memory" value="0" style="width:70%;text-align:right;"
title="MEMORY: temporarily store input during calculations"><!--
--><input name="meminsert" type="button" value="mi" style="width:10%"
title="MEMORY INSERT: append memory value to current input"
onclick="var i=this.form.input;
i.value+=this.form.memory.value; i.select();i.focus();"><!--
--><input name="memrecall" type="button" value="mr" style="width:10%"
title="MEMORY RECALL: replace current input with memory value "
onclick="var i=this.form.input;
i.value=this.form.memory.value; i.select();i.focus();"><!--
--><input name="memclear" type="button" value="mc" style="width:10%"
title="MEMORY CLEAR: clear temporary memory"
onclick="var f=this.form; f.memory.value='0';
f.memory.parentNode.style.display='none';
f.input.select();f.input.focus();"><!--
--></div><!--
--><textarea name="output" rows=5 style="width:99%;display:none;"
title="HISTORY: previous inputs and calculated results"></textarea><!--
--></form></div></html>/%
%/}}}
/***
|''Name:''|Minesweeper|
|''Version:''|0.72 (12 Oct 2005)|
|''Source:''|Tiddly W;nks (http://www.bur.st/~blazeoz/tiddlywinks/)|
|''Author:''|[[Daniel Baird]]|
|''Type:''|Macro|
!Description
It's minesweeper!
!Syntax/Example usage
{{{<<minesweeper>>}}} or {{{<<minesweeper [width] [height] [bombs]>>}}}
<<minesweeper>>
!Notes
* Let me know if you want graphics, or that MSWindows Minesweeper thing where you can click with both buttons on a numbered square, and it does the thinking for you..
!Revision History
* 0.5.0 (2-Oct-05)
** original version (Daniel)
* 0.5.1 (3-Oct-05)
** added the css styles via set~StyleSheet (Simon)
* 0.5.2 (3-Oct-05)
** added parameters to macro and fixed bug preventing detection of win (Simon)
* 0.6 (5-Oct-05)
** Fixed the problem with multiple games on screen at once.
** Cleaned up the JavaScript warning generated when you clicked anywhere but on a square.
* 0.7 (6-Oct-05)
** Integrated sweet additions from Genesis_mage (genisis329 at gmail dot com) that:
*** allows winning by having all non-mines clicked (without having to mark every mine)
*** added a mark button to mark and unmark mines without the keyboard
** Win time now shows tenths of a second.
* 0.71 (10-Oct-05)
** tweaked a style to make the mark button work better in IE
* 0.72 (12-Oct-05)
** worked out how to use a closure as a event handler, which means that the code added in 0.6 could be made a lot simpler.
***/
/*{{{*/
version.extensions.minesweeper = {major: 0, minor: 7, revision: 2};
config.macros.minesweeper = {};
config.macros.minesweeper.handler = function(place,macroName,params) {
var width = params[0];
var height = params[1];
var bombs = params[2];
if (width == undefined) width = 9;
if (height == undefined) height = width;
if (bombs == undefined) bombs = Math.round(width * height / 8)
if (bombs > width * height) bombs = width * height;
var aGame = new MinesweeperGame();
createTiddlyElement(place,'div',aGame.id,null,'If you see this, Minesweeper is broken. Let Daniel know (DanielBaird at gmail dot com).');
aGame.newGame(width, height, bombs);
}
// =======================================================================
function MinesweeperGame() {
this.idprefix = 'mines';
this.version = '0.72 beta';
this.id = this.idprefix + MinesweeperGame.prototype.nextid;
MinesweeperGame.prototype.nextid++;
return this;
}
// -----------------------------------------------------------------------
MinesweeperGame.prototype.nextid = 0;
// -----------------------------------------------------------------------
MinesweeperGame.prototype.newGame = function(height, width, mines) {
this.height = height;
this.width = width;
this.mines = mines;
this.total = height * width;
this.markMode = false;
this.startGame();
}
// -----------------------------------------------------------------------
MinesweeperGame.prototype.startGame = function() {
this.gamestate = 'ready';
this.clicks = 0;
this.marks = 0;
this.message = 'click on the board to begin';
this.starttime = null;
this.wintime = null;
this.board = new Array();
// create the squares
for (var x = 0; x < this.height; x++) {
var row = new Array();
for (var y = 0; y < this.width; y++) {
row.push( {count: 0, mine: false, clicked: false, marked: false} );
}
this.board.push(row);
}
// add mines
for (var m = 0; m < this.mines; m++) {
var mx = Math.round((this.height-1)*Math.random());
var my = Math.round((this.width-1)*Math.random());
if (this.board[mx][my].mine) {
m--;
} else {
this.board[mx][my].mine = true;
}
}
// work out counts
for (var cx = 0; cx < this.height; cx++) {
for (var cy = 0; cy < this.width; cy++) {
var count = 0;
for (var dx = -1; dx < 2; dx++) {
for (var dy = -1; dy < 2; dy++) {
var nx = cx + dx;
var ny = cy + dy;
if ( (!(dx==0 && dy==0))
&& (nx >= 0) && (nx < this.height)
&& (ny >= 0) && (ny < this.width)
&& this.board[nx][ny].mine) {
count++;
}
}
}
this.board[cx][cy].count = count;
}
}
this.showBoard();
}
// -----------------------------------------------------------------------
MinesweeperGame.prototype.showBoard = function() {
var node = document.getElementById(this.id);
var html = new Array();
html.push('<table class="minefield" cellspacing="2">');
html.push('<tr><td class="info" colspan="'+this.width+'">');
html.push('Minesweeper '+this.version+'<br /><b>'+this.gamestate+'</b>');
if (this.gamestate == 'playing') {
this.message = (this.mines - this.marks)+' mines unmarked';
}
html.push('</td></tr>');
for (var x = 0; x < this.height; x++) {
html.push('<tr>');
for (var y = 0; y < this.width; y++) {
html.push( this.makeSquare(x,y) );
}
html.push('</tr>');
}
var cls = 'un';
if (this.markMode) cls = '';
html.push('<tr><td id="'+this.id+'_markbtn" class="'+cls+'clicked widebtn" colspan="'+this.width+'">mark / unmark mines</td></tr>');
html.push('<tr><td class="info" colspan="'+this.width+'">'+this.message);
html.push('<small>');
html.push('<br /><span class="minesweeper' + cls + 'show">ctrl- shift- or alt-</span>click to reveal a square');
html.push('<br /><span class="minesweeper' + cls + 'hide">ctrl- shift- or alt-</span>click to mark a mine');
html.push('</small>');
html.push('</td></tr>');
html.push('</table>');
node.innerHTML = html.join('');
node.onclick = this.getClickHandler();
}
// -----------------------------------------------------------------------
MinesweeperGame.prototype.makeSquare = function(x,y) {
var sq = this.board[x][y];
var reveal = (this.gamestate != 'playing' && this.gamestate != 'ready');
var html = new Array();
if (sq.clicked) {
html.push('<td class="clicked" id="'+this.id+'_x-'+x+'_y-'+y+'">');
if (!sq.marked && reveal && sq.mine) {
html.push('B!');
} else if (!sq.marked && reveal && sq.mine) {
html.push('B!');
} else if (sq.count > 0){
html.push(sq.count);
} else {
html.push(' ');
}
} else {
html.push('<td class="unclicked" id="'+this.id+'_x-'+x+'_y-'+y+'">');
if (sq.marked && !reveal) {
html.push('B?');
} else if (sq.marked && sq.mine && reveal) {
html.push('B');
} else if (sq.marked && !sq.mine && reveal) {
html.push('X');
} else if (sq.mine && reveal) {
html.push('B!');
} else {
html.push(' ');
}
}
html.push('</td>');
return html.join('');
}
// -------------------------------------------------------------------
MinesweeperGame.prototype.clickSquare = function(cx,cy,modifier) {
if (this.gamestate == 'ready') {
this.starttime = new Date();
this.gamestate = 'playing';
}
if (this.gamestate == 'playing') {
if (!this.board[cx][cy].clicked) {
if ( (modifier && !this.markMode) || (!modifier && this.markMode) ) {
if (this.board[cx][cy].marked) {
this.marks--;
this.board[cx][cy].marked = false;
} else {
this.marks++;
this.board[cx][cy].marked = true;
}
} else if (!this.board[cx][cy].clicked && !this.board[cx][cy].marked) {
this.revealSquare(cx,cy);
}
this.markMode = false;
}
this.checkWin();
this.showBoard();
} else {
// clicked when we're not playing..
this.startGame();
}
}
// -------------------------------------------------------------------
MinesweeperGame.prototype.revealSquare = function(x,y) {
if (this.board[x][y].clicked == false && this.board[x][y].marked == false) {
this.board[x][y].clicked = true;
this.clicks++;
if (this.board[x][y].mine) {
this.gamestate = 'boom!';
this.message = 'click board to play again';
} else if (this.board[x][y].count == 0) {
// if it's a zero, we might have to reveal some other squares..
for (var dx = -1; dx < 2; dx++) {
for (var dy = -1; dy < 2; dy++) {
var nx = x + dx;
var ny = y + dy;
if ( (!(dx==0 && dy==0)) && (nx >= 0) && (nx < this.height) && (ny >= 0) && (ny < this.width) ) {
this.revealSquare(nx,ny);
}
}
}
}
}
}
// -------------------------------------------------------------------
MinesweeperGame.prototype.handleClick = function(e) {
// work out which cell was clicked
if (!e) var e = window.event;
var str = resolveTarget(e).id;
if (str && str != undefined) {
if (str == this.id + '_markbtn') {
this.markMode = !this.markMode;
this.showBoard();
} else {
var cx = parseInt(str.substr( str.indexOf('x-')+2 ));
var cy = parseInt(str.substr( str.indexOf('y-')+2 ));
if ( !isNaN(cx) && !isNaN(cy) ) {
this.clickSquare(cx,cy,(e.altKey || e.shiftKey || e.ctrlKey));
}
}
}
}
// -------------------------------------------------------------------
MinesweeperGame.prototype.getClickHandler = function() {
var thisGame = this;
return function(e) {
thisGame.handleClick(e);
}
}
// -------------------------------------------------------------------
MinesweeperGame.prototype.checkWin = function() {
if (this.clicks == this.total - this.mines && this.gamestate !='boom!') {
this.gamestate = 'win';
this.wintime = new Date();
this.message = 'You won in '+Math.round(((this.wintime - this.starttime)/100))/10+' seconds';
this.message = this.message + '<br />click board to play again';
}
}
// -----------------------------------------------------------------------
setStylesheet(
".viewer .minefield { "+
"background: #ddd; "+
"border: double 3px black; "+
"border-collapse: separate; "+
"border-spacing: 2px; "+
"} \n"+
".viewer .minefield td { "+
"cursor: default; "+
"width: 1.3em; "+
"height: 1.1em; "+
"text-align: center; "+
"vertical-align: center; "+
"background: #ddd; "+
"border: 1px solid #ccc; "+
"} \n"+
".viewer .minefield td.info, .viewer .minefield td.widebtn { "+
"width: auto; "+
"} \n"+
".minesweeperhide, .minesweeperunshow { "+
"display: none; "+
"} \n"+
".viewer .minefield td.unclicked { "+
"cursor: pointer; "+
"border-color: #fff; "+
"border-right-color: #999; "+
"border-bottom-color: #999; "+
"} \n"+
"",
"MinesweeperGame");
/*}}}*/
<<miniBrowser expand MBlinks>>
TiddlyWiki.com - official release
http://www.TiddlyWiki.com
----
TiddlyWiki.org - wiki, tickets, source control
http://www.TiddlyWiki.org
----
GoogleGroup: TiddlyWiki - user/author discussion
http://groups.google.com/group/TiddlyWiki/
----
GoogleGroup: TiddlyWikiDev - core/plugin discussion
http://groups.google.com/group/TiddlyWikiDev/
----
TiddlyVault - index of add-ons from many sources
http://TiddlyVault.TiddlySpot.com
----
TiddlySpot - instant TiddlyWiki hosting!!
http://www.TiddlySpot.com
----
TiddlyTools - plugins, scripts, templates, etc.
http://www.TiddlyTools.com
----
del.icio.us - find popular TiddlyWiki sites
http://del.icio.us/tag/tiddlywiki
----
<<tiddler BookmarkList>>
----
<<tiddler MiniBrowserList_osmosoft>>
----
<<tiddler MiniBrowserList_tech>>
----
<<tiddler MiniBrowserList_news>>
----
<<tiddler MiniBrowserList_media>>
----
<<tiddler MiniBrowserList_flash>>
/***
|Name|MiniBrowserPlugin|
|Source|http://www.TiddlyTools.com/#MiniBrowserPlugin|
|Version|1.4.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|PlayerPlugin (optional, recommended)|
|Overrides||
|Options|##Configuration|
|Description|embedded browser-in-browser with favorites lists and media support|
!!!!!Usage
<<<
{{{<<miniBrowser noplayer expand hidecontrols URL TiddlerName TiddlerName TiddlerName...>>}}}
* ''noplayer'' (optional)<br>disables support for embedded media player (using [[PlayerPlugin]], if installed)
* ''expand'' (optional)<br>displays minibrowser controls on two lines instead of one for increased readability, especially when long titles or URLs are displayed.
* ''hidecontrols'' (optional)<br>hide initial display of minibrowser controls (except for 'show controls' checkbox)<br>//note: if no initial URL is specified, controls will be shown anyway//
* ''URL'' (optional)<br>specifies an initial URL to open when the mini browser is rendered
* ''TiddlerName'', ''TiddlerName''... (optional)<br>indicates one or more tiddlers containing "HR-separated" lists of favorites.<br>//notes: if no tiddler is specified, [[MiniBrowserList]] is used by default. In addition, when adding/deleting favorites, the plugin automatically updates [[MiniBrowserList]], regardless of any alternative lists of favorites stored in separate tiddlers. After changes to [[MiniBrowserList]] are made, you can then use cut/paste to manually move entries from that tiddler into other tiddlers.//
<<<
!!!!!Configuration
<<<
Default mini browser size:
width: <<option txtMiniBrowserWidth>> height: <<option txtMiniBrowserHeight>>
<<<
!!!!!Example
>{{{<<miniBrowser>>}}}<br>{{smallform small{<<miniBrowser>>}}}
>{{{<<miniBrowser expand>>}}}<br>{{smallform small{<<miniBrowser expand>>}}}
>{{{<<miniBrowser hidecontrols http://www.TiddlyWiki.com>>}}}<br>{{smallform small{<<miniBrowser hidecontrols http://www.TiddlyWiki.com>>}}}
!!!!!Revisions
<<<
2008.09.30 [1.4.0] removed hard-coded 8pt fontsize. Added optional "expand" display mode to show controls on two lines instead of one for increased readability.
2008.09.16 [1.3.1] fixed getWikifiedData() when using IE (remove \r and multiple \n)
2008.08.12 [1.3.0] added support for wikifying content from favorites lists to enable use of forEachTiddler or inline script output to generate lists on the fly.
2008.08.06 [1.2.2] corrected size control buttons to use fixed width
2008.04.07 [1.2.1] added txtMiniBrowserWidth and txtMiniBrowserHeight. cleanup init handling (somewhat)
2008.04.06 [1.2.0] added support for specifying initial URL to view (suggested by Richard Berg). When opening a URL, select matching entry (if any) in bookmarks droplist. Added support for hiding minibrowser controls.
2008.01.19 [1.1.0] added support for optional extra favorites lists stored in separate tiddlers
2007.10.15 [1.0.0] combined MiniBrowser and MediaCenter inline scripts and converted to true plugin
2006.03.01 [0.0.0] inline script
<<<
!!!!!Code
***/
//{{{
version.extensions.MiniBrowserPlugin={major: 1, minor: 4, revision: 0, date: new Date(2008,9,30)};
//}}}
//{{{
config.shadowTiddlers.MiniBrowser="<<miniBrowser>>";
//}}}
//{{{
if (config.options.txtMiniBrowserWidth==undefined) config.options.txtMiniBrowserWidth="100%";
if (config.options.txtMiniBrowserHeight==undefined) config.options.txtMiniBrowserHeight="480";
//}}}
//{{{
config.macros.miniBrowser= {
favoritesList:
"MiniBrowserList",
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var noPlayer=params[0]&¶ms[0].toLowerCase()=="noplayer"; if (noPlayer) params.shift();
if (!config.macros.player) noPlayer=true; // if PlayerPlugin not installed
var expand=params[0]&¶ms[0].toLowerCase()=="expand"; if (expand) params.shift();
var hideControls=params[0]&¶ms[0].toLowerCase()=="hidecontrols"; if (hideControls) params.shift();
var url=(params[0]&&!store.tiddlerExists(params[0]))?params.shift():"";
hideControls=hideControls&&url.length; // if no initial URL, then show controls anyway
var w=config.options.txtMiniBrowserWidth;
var h=config.options.txtMiniBrowserHeight;
// create form
var guid=new Date().getTime()+Math.random().toString(); // globally unique ID
var html=this.html;
html=html.replace(/%id%/g,guid);
html=html.replace(/%noplayer%/g,noPlayer?"true":"");
html=html.replace(/%hidecontrols%/g,hideControls?"none":"block");
html=html.replace(/%bookmarksize%/g,expand?"70%":"20%");
html=html.replace(/%urlsize%/g,expand?"69.5%":"20%");
html=html.replace(/%linebreak%/g,expand?"<br>":"");
html=html.replace(/%favorites%/g,params[0]||config.macros.miniBrowser.favoritesList);
createTiddlyElement(place,"span").innerHTML=html;
// init form
document.getElementById("minibrowser_controls_"+guid).style.display=hideControls?"none":"block";
document.getElementById("minibrowser_resize_"+guid).style.display=hideControls?"none":"block";
document.getElementById("minibrowser_togglecontrols_"+guid).checked=!hideControls;
document.getElementById("minibrowser_form_"+guid).url.value=url;
document.getElementById("minibrowser_form_"+guid).w.value=w;
document.getElementById("minibrowser_form_"+guid).h.value=h;
if (noPlayer) { // hide "type" list no PlayerPlugin
document.getElementById("minibrowser_type_"+guid).style.display="none";
document.getElementById("minibrowser_url_"+guid).style.width="36%";
}
// load bookmarks droplist from HR-separated tiddler contents
var b=document.getElementById("minibrowser_bookmarks_"+guid);
while (b.options[1]) b.options[1]=null; // clear list but leave 'prompt' item
var p; while (p=params.shift()) this.getFavorites(b,p); // load custom bookmarks
if (b.length<2) this.getFavorites(b,config.macros.miniBrowser.favoritesList); // default list
// load initial URL (if any)
var place=document.getElementById("minibrowser_player_"+guid);
this.load(place,guid,"","",w,h,true,noPlayer);
this.go(document.getElementById("minibrowser_form_"+guid));
},
getFavorites: function(list,tid) {
var txt=store.getTiddlerText(tid); if (!txt||!txt.trim().length) return;
txt=this.getWikifiedData(txt);
var parts=txt.split("\n----\n");
for (var p=0; p<parts.length; p++) {
var lines=parts[p].split("\n");
var label=lines.shift()||""; // 1st line=display text
var value=lines.shift()||""; // 2nd line=item value
var indent=value&&value.length?"\xa0\xa0":"";
list.options[list.length]=new Option(indent+label,value,false,false);
}
},
getWikifiedData: // wikify tiddler content, then extract text WITH newlines and HRs included
function(txt) {
var e=createTiddlyElement(document.body,"div"); wikify(txt,e);
var breaks=e.getElementsByTagName("br");
for (var b=0; b<breaks.length; b++)
breaks[b].parentNode.insertBefore(document.createTextNode("\n"),breaks[b]);
var lines=e.getElementsByTagName("hr");
for (var l=0; l<lines.length; l++)
lines[l].parentNode.insertBefore(document.createTextNode("----\n"),lines[l]);
var items=e.getElementsByTagName("li");
for (var i=0; i<items.length; i++)
items[i].parentNode.insertBefore(document.createTextNode("\n"),items[i]);
var txt=getPlainText(e);
removeNode(e);
return txt.replace(/\r*/g,"").replace(/\n\n/g,"\n");
},
load: function(place,id,type,url,w,h,showcontrols,noPlayer) {
if (noPlayer) {
if (!place) place=document.getElementById(id).parentNode;
place.innerHTML="<iframe name='"+id+"' id='"+id+"' \
src='"+url+"' width='"+w+"' height='"+h+"' \
style='background:#fff;border:1px solid'></iframe>"
} else
config.macros.player.loadURL(place,id,type,url,w,h,showcontrols);
},
go: function(f) {
var url=f.url.value.trim();
if (!url.length) url=f.url.value=f.bookmarks.value.trim();
if (!url.length) { this.done(f); return false; }
var id=f.playerID.value;
document.getElementById("minibrowser_player_"+id).style.display="block";
document.getElementById("minibrowser_controls2_"+id).style.display="block";
this.load(null,id,f.type.value,f.url.value,f.w.value,f.h.value,f.ctrls.checked,f.noPlayer.value=="true");
var matched=false; for (var i=0; i<f.bookmarks.options.length; i++) // select matching bookmark
if (f.bookmarks.options[i].value==url) { f.bookmarks.selectedIndex=i; matched=true; break; }
if (!matched) f.bookmarks.selectedIndex=0;
f.done.disabled=false;
return false;
},
done: function(f) {
var id=f.playerID.value;
this.load(null,id,null,null,f.w.value,0,f.ctrls.checked,f.noPlayer.value=="true");
document.getElementById("minibrowser_player_"+id).style.display="none";
document.getElementById("minibrowser_controls2_"+id).style.display="none";
f.done.disabled=true;
return false;
},
fit: function(place) {
var trim=89; // fudge factor to account for the other controls + padding + borders. ADJUST THIS VALUE TO FIT LAYOUT
var t=story.findContainingTiddler(place);
if (!t) { t=place; while (t && t.className!='floatingPanel') t=t.parentNode; } if (!t) return;
var w="100%"; // horizontal stretching via CSS works, but vertical stretching doesn't... so:
var h=t.offsetHeight-trim; // workaround: get containing panel/tiddler height and subtract "trim" height
var f=place.form;
this.load(null,f.playerID.value,f.type.value,f.url.value,w,h,f.ctrls.checked,f.noPlayer.value=="true"); // reload player with new size
place.form.w.value=w; place.form.h.value=h; // update width/height input fields
},
add: function(place,title) {
var v=place.value; if (!v.length) return;
var d=prompt("Please enter a description for\n"+place.value); if (!d || !d.length) return;
var who=config.options.txtUserName;
var when=new Date();
var tid=store.getTiddler(title);
var txt="%0\n%1\n----\n%2".format([d,v,tid?tid.text:""]);
store.saveTiddler(title,title,txt,who,when,tid?tid.tags:[],tid?tid.fields:{});
if (!tid) story.displayTiddler(story.findContainingTiddler(place),title);
else story.refreshTiddler(title,1,true);
var here=story.findContainingTiddler(place);
if (here) story.refreshTiddler(here.getAttribute("tiddler"),1,true);
},
del: function(place,title) {
var v=place.value; if (!v.length) return;
var d=place.options[place.selectedIndex].text; if (!d.length) return;
if (!confirm("Are you sure you want to remove this favorite?\n\n"+d+"\n"+v)) return;
var tid=store.getTiddler(title); if (!tid) return;
var who=config.options.txtUserName;
var when=new Date();
var pat='%0\n%1\n----\n'.format([d.replace(/\xa0/g,''),v]); var re=new RegExp(pat,"i");
var txt=tid.text.replace(re,"");
store.saveTiddler(title,title,txt,who,when,tid?tid.tags:[],tid?tid.fields:{});
story.refreshTiddler(title,1,true);
var here=story.findContainingTiddler(place);
if (here) story.refreshTiddler(here.getAttribute("tiddler"),1,true);
},
html: "<form id='minibrowser_form_%id%' style='display:block;margin:0;padding:0' onsubmit='return config.macros.miniBrowser.go(this);'><!-- \
--><nobr><input type='hidden' name='playerID' value='%id%'><input type='hidden' name='noPlayer' value='%noplayer%'><!-- \
--><div id='minibrowser_controls_%id%' style='display:%hidecontrols%'><!-- \
--><input type='button' value='<' title='back' style='width:3%' \
onclick='try{window.frames[\"player_%id%\"].history.go(-1)}catch(e){window.history.go(-1)}' ><!-- \
--><input type='button' value='>' title='forward' style='width:3%' \
onclick='try{window.frames[\"player_%id%\"].history.go(+1)}catch(e){window.history.go(+1)}'><!-- \
--><input type='button' value='+' title='refresh'style='width:3%' \
onclick='try{window.frames[\"player_%id%\"].location.reload()}catch(e){;}'><!-- \
--><input type='button' value='x' title='stop'style='width:3%' \
onclick='window.stop()'><!-- \
--><select name='bookmarks' id='minibrowser_bookmarks_%id%' size='1' style='width:%bookmarksize%' \
onchange='this.form.url.value=this.value; return config.macros.miniBrowser.go(this.form);'><!-- \
--><option value=''>bookmarks...</option><!-- \
--></select><!-- \
--><input type='button' value='add' title='add URL to the bookmarks' style='width:6%' \
favorites=\"%favorites%\" \
onclick='config.macros.miniBrowser.add(this.form.url,this.getAttribute(\"favorites\"));'><!-- \
--><input type='button' value='del' title='remove URL from the bookmarks' style='width:6%' \
favorites=\"%favorites%\" \
onclick='config.macros.miniBrowser.del(this.form.bookmarks,this.getAttribute(\"favorites\"));'><!-- \
--><input type='button' value='edit' title='edit the bookmarks list' style='width:6%' \
favorites=\"%favorites%\" \
onclick='story.displayTiddler(null,this.getAttribute(\"favorites\"),2)'><!-- \
-->%linebreak%<!-- \
--><select name='type' id='minibrowser_type_%id%' size='1' style='width:12%' \
onchange='var opt=this.options; for (var i=0; i<opt.length; i++) \
if (i==this.selectedIndex) opt[i].text=opt[i].text.replace(/\xa0\xa0/,\"√\"); \
else opt[i].text=opt[i].text.replace(/√/,\"\xa0\xa0\"); \
if (this.selectedIndex==0) opt[1].text=opt[1].text.replace(/\xa0\xa0/,\"√\");'><!-- \
--><option value=''>type...</option><!-- \
--><option value=''>√ auto-detect</option><!-- \
--><option value='iframe'> web page</option><!-- \
--><option value='windows'> windows media</option><!-- \
--><option value='realone'> real one</option><!-- \
--><option value='quicktime'> quicktime</option><!-- \
--><option value='flash'> flash</option><!-- \
--><option value='image'> jpg/gif/png</option><!-- \
--></select><!-- \
--><input type='text' name='url' id='minibrowser_url_%id%' size='60' value='' style='width:%urlsize%' \
onfocus='this.select()'><!-- \
--><input type='submit' value='go' title='view URL in embedded player' style='width:6%'><!-- \
--><input type='button' value='open' title='view URL in a separate player' style='width:6%' \
onclick='if (this.form.url.value.length) window.open(this.form.url.value)'><!-- \
--><input type='button' value='done' name='done' disabled title='disconnect from URL' style='width:6%' \
onclick='return config.macros.miniBrowser.done(this.form);'><!-- \
--></div><!-- \
--><div id='minibrowser_player_%id%' style='display:none;text-align:center'></div><!-- \
--><span id='minibrowser_controls2_%id%' style='margin-top:2px;display:none;'><!-- \
--><div id='minibrowser_resize_%id%' style='display:%hidecontrols%;float:right'><!-- \
--> size: <input type='text' name='w' size='3' value='' style='' \
onfocus='this.select()'><!-- \
-->x<input type='text' name='h' size='3' value='' style='' \
onfocus='this.select()'><!-- \
--> <input type='submit' value='set' style='width:5em' \
onclick='var f=this.form; \
if(!f.w.value.trim().length) f.w.value=config.options.txtMiniBrowserWidth; \
if(!f.h.value.trim().length) f.h.value=config.options.txtMiniBrowserHeight; \
config.options.txtMiniBrowserWidth=f.w.value; config.options.txtMiniBrowserHeight=f.h.value; \
saveOptionCookie(\"txtMiniBrowserWidth\"); saveOptionCookie(\"txtMiniBrowserHeight\");'><!-- \
--><input type='submit' value='reset' style='width:5em' \
onclick='var f=this.form; f.ctrls.checked=true; f.w.value=\"100%\"; f.h.value=\"480\"; \
config.options.txtMiniBrowserWidth=f.w.value; config.options.txtMiniBrowserHeight=f.h.value; \
saveOptionCookie(\"txtMiniBrowserWidth\"); saveOptionCookie(\"txtMiniBrowserHeight\");'><!-- \
--><input type='button' value='fit' title='resize player to fit containing window' style='width:5em' \
onclick='config.macros.miniBrowser.fit(this)'><!-- \
--></div><!-- \
--> <input type='checkbox' name='ctrls' id='minibrowser_togglecontrols_%id%' title='toggle minibrowser controls' CHECKED \
onclick='document.getElementById(\"minibrowser_controls_%id%\").style.display=this.checked?\"block\":\"none\"; \
document.getElementById(\"minibrowser_resize_%id%\").style.display=this.checked?\"block\":\"none\";' \
><a href='' title='toggle minibrowser controls' \
onclick='this.previousSibling.click();return false;'>show controls</a><!-- \
--></span><!-- \
--></nobr></form> \
"
}
//}}}
|!Material| !Weight/cu in| !Weight/cu ft| !Remarks|
| | !(Pounds)| !(Pounds)| |
|>|>|>|!//Miscellaneous Liquids//|
|Acetone| 0.0286| 49.4| At 68 deg. F|
|Alcohol, ethyl (95%)| 0.0295| 50.9| At 60 deg. F|
|Alcohol, methyl (99.85%)| 0.0288| 49.7| At 60 deg. F|
|Ammonia (aqua) (27%)| 0.0326| 56.4| At 60 deg. F|
|Benzol (90%)| 0.0318| 54.8| At 60 deg. F|
|Creosote oil| 0.0376| 65.0| 8.8 pounds per U. S. Gallon|
|Ethylene glycol, inhibited| 0.0402| 69.5| At 60 deg. F|
|Freon 11| 0.0528| 91.3| At 86 deg. F|
|Freon 12| 0.0466| 80.6| At 86 deg. F|
|Freon 22| 0.0424| 73.3| At 86 deg. F|
|Glycerine (95 %)| 0.0451| 77.9| At 60 deg. F, grad A|
|Kerosene| 0.0295| 50.9| 44 cu. Ft, 329.1 gal., 1 ton|
|Muriastic acid (31 %)| 0.0418| 72.2| At 60 deg. F|
|Nitric acid (61 %)| 0.0496| 85.7| At 60 deg. F|
|Sulfuric acid (93 %)| 0.0662| 114.5| At 60 deg. F|
|>|>|>|!//Miscellaneous Gases//|
|Acetylene| --| 0.07323| At 32 deg F and 1 atmosphere|
|Air| --| 0.080701| At 32 deg F and 1 atmosphere|
|Carbon dioxide| --| 0.12340| At 32 deg F and 1 atmosphere|
|Ethane| --| 0.08469| At 32 deg F and 1 atmosphere|
|Helium| --| 0.01114| At 32 deg F and 1 atmosphere|
|Hydrogen| --| 0.005611| At 32 deg F and 1 atmosphere|
|Nitrogen| --| 0.07807| At 32 deg F and 1 atmosphere|
|Oxygen| --| 0.08021| At 32 deg F and 1 atmosphere|
|Propane| --| 0.1261| At 32 deg F and 1 atmosphere|
|!Material| !Weight/cu in| !Weight/cu ft| !Remarks|
| | !(Pounds)| !(Pounds)| |
|>|>|>|!//Miscellaneous Solids//|
|Asbestos| 0.0885| 153.9||
|Asphaltum (gilsonite)| 0.0470| 81.9||
|Bakelite, (laminated)| 0.0498| 86.0||
|Bakelite, (molded)| 0.0498| 86.0||
|Ballast Type A – Lead| 0.4051| 700.0|Minimum density|
|Ballast Type B – Iron| 0.2459| 425.0|Minimum density|
|Ballast Type C – Concrete| 0.1157| 200.0|Minimum density|
|Brick, fire| 0.0752| 130.0||
|Brickwork, common| 0.0694| 120.0||
|Brickwork, pressed| 0.0810| 140.0||
|Brickwork, soft| 0.0579| 100.0||
|Celluloid| 0.0503| 87.0||
|Cement, Portland| 0.0579| 100.0| Loose|
|Cement, Portland and sand| 0.0790| 136.5| Proportions 1:1|
|Cement, Portland and sand| 0.0777| 134.2| Proportions 1:2|
|Cement, Portland and sand| 0.0774| 133.8| Proportions 1:3|
|Charcoal, oak| 0.0191| 33.0||
|Charcoal, pine| 0.0133| 23.0||
|Clay, dry| 0.0579| 100.0| Compact|
|Clay plastic| 0.0579| 100.0||
|Coal, anthracite| 0.0301| 52.0||
|Coal, bituminous, aboard ship| 0.0309| 53.3||
|Coal, bituminous, on ashore| 0.0295| 52.0| 42 cu ft per ton|
|Concrete (plain), cured| 0.0868| 150.0||
|Cork, compressed| 0.0083| 14.4||
|Felt, wool grade A| 0.0065| 11.3||
|Felt, wool, grade B| 0.0120| 20.8||
|Glass, common or flint| 0.0955| 165.0||
|Glue, animal| 0.0378| --| Temp 140 deg F|
|Glue, blood albumin| 0.0389| --| Temp 25 deg C|
|Glue, casein| 0.0396| --| Temp 25 deg C|
|Glue, fish| 0.0424| --| Temp 25 deg C|
|Granite| 0.0955| 165.0||
|Gum arabic| 0.0492| 85.0||
|Gum, black| 0.0214| 37.0| 15 % moisture|
|Gum, cotton| 0.0203| 35.0| 15 % moisture|
|Gum, red| 0.0197| 34.0| 15 % moisture|
|Gum, rubber gasket| 0.0475| 82.0||
|Ice| 0.0331| 57.2||
|Leather| 0.0336| 58.0||
|Lime| 0.0370| 64.0| Well Shaken|
|Limestone| 0.0926| 160.0||
|Marble| 0.0984| 170.0||
|Mica| 0.1059| 183.0||
|Pitch| 0.0415| 71.7||
|Sand, dry| 0.0567| 98.0||
|Sand, wet| 0.0700| 121.0||
|Sandstone| 0.0810| 140.0||
|Slate| 0.1013| 175.0||
|Sulphur| 0.0723| 125.0||
|Talc| 0.1007| 174.0||
|Tallow| 0.0335| 57.9||
|Tar, bituminous| 0.0361| 62.4||
----
AaA BbB CcC DdD EeE FfF GgG HhH IiI JjJ KkK LlL NnN OoO PpP QqQ RrR SsS TtT UuU VvV WwW XxX YyY ZzZ
----
!!!Main Ballast Tanks (MBT)
are tanks external to the pressure hull which allow the submarine to submerge and surface. The size of the tanks equals the reserve buoyancy of the ship on the surface. Tanks are generally fully empty (blown; on the surface) or completely filled (vented; submerged).
!!!Main Deck
is the uppermost complete deck of a ship, except in aircraft carriers.
!!!MARAD
is the acronym for the U.S. Maritime Administration. MARAD administers financial programs to develop, promote, and operate the U.S. Merchant Marine; determines services and routes necessary to develop and maintain American foreign commerce and requirements of ships necessary to provide adequate service on such routes; conducts research and development activities in the maritime field; regulates the transfer of U.S. documented vessels to foreign registries; maintains equipment, shipyard facilities, and reserve fleets of Government-owned ships essential for national defense; operates the U.S. Merchant Marine Academy at Kings Point, New York; and administers a ~Grant-In-Aid Program for State-operated maritime academies in California (California Maritime Academy), Maine (Maine Maritime Academy), Massachusetts (Massachusetts Maritime Academy), Michigan (Great Lakes Maritime
Academy), New York (SUNY Maritime College), and Texas (Texas Maritime Academy).
!!!MEL
is the acronym for the Main Equipment List. This list contains all the individual equipment components in the ship design.
!!!Metacenter
Normally the force of buoyancy acts vertically upwards through the center of gravity. If the ship starts to list, the shape of the submerged portion changes, thereby moving the center of buoyancy from directly beneath the center of gravity. For angles of list up to about 10° the lines of action of the buoyant forces will all pass near a single point M called the Metacenter. If the ship is to have positive stability, the metacenter must be above the center of gravity G. The metacenter may be determined as follows:
>Pass a line through G and the original center of buoyancy B. Then with the ship heeled over a small angle (less than 10°) pass a line through the new center of buoyancy B perpendicular to the water line. The metacenter is the point of intersection of these two lines.
!!!Metacentric Height (GM)
is the distance from the VCG, or KG, to the KM. This is a basic measurement of the ship’s initial stability.
!!!Midship Coefficient
= CM = Midship Area/(B×D)
!!!Midships is at or near the middle point of a ship’s length. This is commonly shown on drawings with this symbol:
!!!Midship Section
is a cross-section through the ship, midway between the forward and after perpendiculars, showing typical structural details. Often used to develop initial weight estimates for the entire ship.
!!!Mill Tolerance
is the estimated variation in actual material thickness (usually steel plate). This tolerance is included in weight reports to take into account the weight of thickness variation.
!!!Moulded Lines or Surfaces
is the inside surface of the skin, or plating, of a ship. For a submarine, it is the outside surface. Also molded.
!!!~MT1
is the Moment to Trim 1 inch. This is read from the D&O curves and indicates the moment required to trim the ship forward or aft one inch. The may also be referred to as MTI or MCT.
!!Chapter News:
* Congratulations to Matt Yoder and David Tellet for 2011 SAWE President's Awards for the ESWBS RP and the encyclopedia article, respectively.
* Congratulations and best wishes to long time CRC member Carlos Corretjer on his retirement from Federal service.
!!!News from the International Conference
[<img[ConferenceAnnouncementCover.jpg]]
* It was agreed that the membership will soon have access to download all previous technical papers from previous conferences. The papers from each future conference will be available one year later for those who did not attend the conference (they will be immediately available to those who attended the conference, as usual).
* The 2010 conference will be in Virginia Beach at the [[Hilton|http://www1.hilton.com/en_US/hi/hotel/ORFVHHF-Hilton-Virginia-Beach-Oceanfront-Virginia/index.do]] right on the beach. The Hampton Roads Chapter looks to be pulling out all the stops for this conference, both in activities and taking advantage of the venue, and in their goals for the technical program. This will be a good conference for our chapter to make a good showing and help out Hampton, if needed.
* The 2011 conference will be in Houston and we expect to see a number of offshore industry types there attending the new Offshore Industry G/I workshop. This should provide an interesting viewpoint to the marine sector, as well as the potential for a good influx of fresh weight engineering blood.
* For 2012 we will be returning to Europe with the conference taking place in Manching, Germany, about an hour north of Munich. The hotel is a 5-star spa hotel in Bad Gögging that looks like an amazing place with all the luxury and scenery one could ask for. Start thinking about presenting a paper.
* For some unknown reason our chapter won the award for best website. Guess the competition was pretty poor this year.
* Hampton Roads Chapter (mostly Alan Titcomb) developed a new SAWE brochure for schools and colleges describing careers in the mass properties engineering field. This is a great looking fold-out and we should be getting a shipment of them soon to pass out wherever we see fit.
* Bill Boze of the Hampton Roads Chapter won the best paper award for his paper entitled: //Quantifying Uncertainty and Risk in Vehicle Mass Properties Throughout the Design Development Phase//.
* The Marine G/I session discussed a number of ongoing and future initiatives including RP 12, 13, 14, a new RP for weight distribution, and a number of new ~RPs that were proposed by Alan Titcomb. The full report of the session will be here soon, but the proposed schedule is ambitious and there will be plenty of things to do for anybody in our chapter that wants to contribute to these new ~RPs. Several of these ~RPs and drafts are on the G/I area of the SAWE website for review and comments. Please take a look and provide feedback prior to 30 June.
----
Comment on this item: <<haloscan comments>>
----
The chapter newsletter is produced irregularly, though we are trying to improve on that and we hope to soon have regular, bi-monthly newsletters. Past issues will be available here for download (pdf format) as soon as they are available.
If you have news items, announcements, comments, or interest in writing for the newsletter, please send the editor an email at: [[telletdl99@mac.com|mailto:telletdl99@mac.com]]
# [[August 2006 Newsletter|http://capital.sawe.org/SAWE_Capital_Region_Chapter/saweletter1.pdf]]
# [[January 2007 Newsletter|http://capital.sawe.org/SAWE_Capital_Region_Chapter/newsletter2.cwk%20(DR).pdf]]
# [[May 2007 Newsletter|http://capital.sawe.org/SAWE_Capital_Region_Chapter/newsletter3.pdf]]
# [[Oct 2007 Newsletter|http://capital.sawe.org/SAWE_Capital_Region_Chapter/newsletter4.pdf]]
----
AaA BbB CcC DdD EeE FfF GgG HhH IiI JjJ KkK LlL MmM OoO PpP QqQ RrR SsS TtT UuU VvV WwW XxX YyY ZzZ
----
!!!NTE
stands for Not to Exceed. In marine weight engineering this generally is used in contracts to ensure that weight or KG does not exceed naval architecture limits.
!!!Non-pressure hull
is the part of a submarine’s hull that does not see full submergence pressure. The part of the hull containing main ballast tanks, appendages, bow sonar dome etc.
<<reminder year:2009 month:6 day:17 title:"Chapter Meeting, 11am, Alion 6th floor, Reports from the International Conference">>
Greetings Chapter Members,
The Capital Region of SAWE is holding a lunchtime meeting on April 7, 2009
at 11:30 am in the 6th floor conference room at Alion (1100 New Jersey
Ave.). On the agenda will be issues that will be discussed during the G/I
Workshop at the International Conference (RP 12, 13,14, and ESWBS). Please
join us. Your comments and inputs on these topics will help in expediting
these issues during the conference.
Please RSVP back to me by COB March 27.
You can also bring your chapter dues to Tommy if you haven't paid up for the
upcoming year.
I'm not sure which way I'm going with the food for the meeting yet but it
should be around our normal $5 range.
And remember at Alion, you will need to sign in on the 2nd floor before
heading up to the 6th floor.
Daniel Dolan
Manager, Weights and Stability
CSC
1201 M. Street, SE, Suite 400, Washington, DC 20003 Defense Group | p:
202.675-4340 | f: 202.675-4345 | mailto:ddolan3@csc.com | www.csc.com
------
We would like to hold a local chapter meeting to discuss numerous open items. Some of the topics will be the upcoming international conference, 2009 dues, a few words from our Director and an update on RP 12. Then a small break for lunch followed by a telecom with Hampton Roads Chapter members and members from SNAME for a discussion on revising ESWBS. This will be a small workshop to exchange ideas on clarifying the breakdown of SWBS.
Here are the details:
Date: February 4, 2009
Place: 6th Floor Conference Room, Alion Science
1100 New Jersey Ave, SE.
Time: 11:00 AM - 1:00 PM
Cost: $5.00 (Pizza or Sandwiches)
Please join us. You input is welcome (and needed). Please let me know
if you will be joining us by COB February 2.
Daniel Dolan
202-675-4340 [[ddolan3@csc.com|mailto:ddolan3@csc.com]]
----
Seasons Greetings!
Tis the season for holiday cheer and SAWE is in the holiday spirit. We
would like for you to join your fellow Capital Region SAWE engineers at
"Phillips Seafood Restaurant" on the DC Waterfront for a holiday feast.
Here are the details:
Date: December 18, 2008
Time: 11:30 AM
Location: Phillips Seafood Restaurant
900 Water Street, SW (Waterfront),
Washington, DC, 20024
And to show that our chapter is in the giving mood, the chapter will
pick up half of the cost of the buffet (SAWE Members Only). For the
remaining cost of $10.00, you will get the all you can eat seafood
buffet, tea, coffee, sodas, tax and tip. Non-members will still need to
pay the full price ($20.00) but are still welcome to join us.
I will need a head count back to the restaurant by December 15 so please
reply ASAP if you are planning to attend.
Please join us and Happy Holidays!
Daniel Dolan
Manager, Weights and Stability
CSC
202-675-4340 [[ddolan3@csc.com|mailto:ddolan3@csc.com]]
----
AaA BbB CcC DdD EeE FfF GgG HhH IiI JjJ KkK LlL MmM NnN PpP QqQ RrR SsS TtT UuU VvV WwW XxX YyY ZzZ
----
!!!Offsets
is a term used for the coordinates of a ship’s form, deck heights, etc.
"It's the most wonderful time of the year" (at least that's what the song says) so it must be time for our yearly Holiday Gathering. Please join us for a very special luncheon this year which not only will we be celebrating the holiday season but also the retirement of a long time member and friend, Dom Cimino. We would like to take this time to recognize his long years of service not only to SAWE but with NAVSEA. So please join us.
Here are the details:
<<<
Date: @@Wednesday, December 7th@@
Time: 1130-1330
Location:
{{indent{Molly Malone's}}}
{{indent{713 8th St SE}}}
{{indent{Washington, DC}}}
Cost:
{{indent{$10.00 for members}}}
{{indent{$ TBD for non-members}}}
<<<
As we have done in the past, as a member, the Chapter will pay for half of the lunch fee. At this time, the cost is $10.00/person with the Chapter discount but may change based on overall headcount. This $10.00 is for members only!
And speaking of a headcount, I need a definite count by @@COB December 1st@@ to the restaurant to order food. If you call me after December 1st, I may not be able to get you in.
Daniel Dolan
Vice President, Capital Region
SAWE
| p: 202.675-4340 | f: 202.675-4345 | [[ddolan3@csc.com|mailto:ddolan@csc.com]] | [[www.csc.com|http://www.csc.com]]
----
Members,
We will be having a special SAWE meeting featuring Runar Aasen from BAS Engineering. He will be going over all the new features from the newly release of [[ShipWeight|http://www.shipweight.com/]] Version 10 and will also be answering all your user questions from ~ShipWeight in general. Not using ~ShipWeight? This is a great opportunity to see what this program can do at a cost of only your time. Please join us for this three hour information and training class.
Date: October 11, 2011
Time: 9:00 AM to 12:00 PM
Location: 2nd Floor Conference Room (Constitution B) @ Alion
1100 New Jersey Ave, SE
Washington, DC 20003
Please let me know if you will be attending by COB October 7th.
Thanks.
Daniel Dolan
Vice President, Capital Region
SAWE
| p: 202.675-4340 | f: 202.675-4345 | [[ddolan3@csc.com|mailto:ddolan@csc.com]] | [[www.csc.com|http://www.csc.com]]
----
Members,
We will be having a SAWE Chapter meeting on Tuesday, August 23 with the following information:
<<<
Date: @@Tuesday, August 23th@@
Time: 1200-1330
Location:
{{indent{Alion Science}}}
{{indent{1100 New Jersey Ave SE}}}
{{indent{6th floor (sign in on the 2nd floor first)}}}
{{indent{Washington, DC 20003}}}
Cost:
{{indent{$5.00 for lunch}}}
Agenda:
An open discussion about the recent work done with inclinometers for inclining experiments. Matt Yoder is working on a SAWE paper on inclinometers and has done some inclining work on the "USS Constitution" with support from Mike Bergmann. Please join us for this and other topics that effect on our chapter.
<<<
Please RSVP back to me by COB Friday, August 19, 2011 if you plan on attending.
Thanks.
Daniel Dolan
Vice President, Capital Region
SAWE
| p: 202.675-4340 | f: 202.675-4345 | [[ddolan3@csc.com|mailto:ddolan@csc.com]] | [[www.csc.com|http://www.csc.com]]
----
Members,
Please join us for our next meeting.
<<<
Date: @@Wednesday, June 9th@@
Time: 1200-1330
Location:
{{indent{Alion Science}}}
{{indent{1100 New Jersey Ave SE}}}
{{indent{6th floor (sign in on the 2nd floor first)}}}
{{indent{Washington, DC 20003}}}
Cost:
{{indent{$5.00}}}
Lunch:
{{indent{Subs}}}
The Agenda:
# New officers/ Election Results
# International Conference updates/ Actions
# A member presentation - (TBD)
<<<
I will need a head count by Tuesday, June 7, so please send me an e-mail if you are planning to attend.
Daniel Dolan
Vice President - Capital Region Chapter
SAWE
| p: 202.675-4340 | f: 202.675-4345 | [[ddolan3@csc.com|mailto:ddolan@csc.com]] | [[www.csc.com|http://www.csc.com]]
----
!!@@color(red): New Meeting Schedule. @@
Members,
Please join us for our first meeting of the year.
<<<
Date: @@Tuesday, March 15th@@
Time: 1130-1300
Location:
{{indent{Alion Science}}}
{{indent{1100 New Jersey Ave SE}}}
{{indent{6th floor (sign in on the 2nd floor first)}}}
{{indent{Washington, DC 20003}}}
Cost:
{{indent{$5.00}}}
Lunch:
{{indent{Subs}}}
The Agenda:
# Director's Report
# ESWBS RP Update
# DCCEAS
# Elections
# Up-coming International Conference
<<<
I will need a head count by Friday, March 11, so please send me an e-mail if you are planning to attend.
Daniel Dolan
Vice President - Capital Region Chapter
SAWE
| p: 202.675-4340 | f: 202.675-4345 | [[ddolan3@csc.com|mailto:ddolan@csc.com]] | [[www.csc.com|http://www.csc.com]]
----
!!!!@@color(red):Members@@,
Back by popular demand, this year's "Holiday Party" will once again be held at the "Phillips Seafood Restaurant" on Water Street in D.C. Here are the details:
<<<
Date: @@Friday, December 17, 2010@@
Time: 11:30 AM to 1:30 PM
Location:
{{indent{Phillips Seafood Restaurant}}}
{{indent{900 Water Street, SW}}}
{{indent{Washington, DC 20024}}}
Cost:
{{indent{$10.00 for members (the Capital Region Chapter is once again paying half for members) }}}
{{indent{$20.00 for Guest}}}
{{indent{This includes the Buffet, coffee, soft drinks, tax and gratuity.}}}
<<<
Please join us for some holiday cheer. I will need a head count for the restaurant by @@December 10, 2010@@ so please RSVP back to me as soon as you can.
If you have any questions, please let me know.
Daniel Dolan
Vice President, Capital Region
SAWE
| p: 202.675-4340 | f: 202.675-4345 | [[ddolan3@csc.com|mailto:ddolan@csc.com]] | [[www.csc.com|http://www.csc.com]]
----
Members,
We will be having a Chapter meeting next Wednesday, June 9, to discuss news and topics from the International Conference.
Date: June 9
Time: 11:30 am
Location: 6th floor conference room at Alion (sign-in on the 2nd floor)
1100 New Jersey Ave, SE
Washington, DC 20003
Cost: $5.00 (for lunch)
Also, if you would like to give a 5 to 10 minute presentation on a topic that you may be working on, please let me know and I will add you to the agenda. We need to get back to having more presentations and discussions during these meetings for the advancement of our Chapter and Society.
RSVP back to me no later then COB Monday, June 7.
Thanks.
Daniel Dolan
Vice President - Capital Region Chapter
SAWE
[[ddolan3@csc.com|mailto:ddolan3@csc.com]]
----
Members,
It's time again to get together and talk about a few issues. There are a lot of exciting things happening from Recommended Practices to the upcoming International Conference in Virginia Beach.
Date: March 10, 2010
Time: 11:30 am
Location: 6th floor Conference at Alion
1100 New Jersey Ave. SE
Washington, DC 20003
Cost: $5.00 (subs and soda)
Please RSVP back to me by Friday, March 5, 2010. I will send out a more detailed agenda in about a week.
Thanks.
Daniel Dolan
Vice President
Capital Region - SAWE
202-675-4340 [[ddolan3@csc.com|mailto:ddolan3@csc.com]]
----
All,
The holiday season is here and it's time for our SAWE Capital Region
Chapter Holiday Party. Again this year we will be gathering at Phillips
Seafood Restaurant on the Maine Waterfront in DC. And again for our
members only, the Chapter will pay half the cost for your meal. Below is
all the details you need:
Date: Wednesday, December 16, 2009
Time: 11:30 AM
Location: Phillips Seafood Restaurant
900 Water Street, SW
Washington, DC 20024
Menu: All you can eat Seafood Buffet and Desserts
Cost: $20.00 ($10.00 of this will be covered by the
Chapter)
includes the buffet, coffee, tee,soft drinks, tax and
gratuity
Please join us for some good food and good friends for the holiday
season. I do need a head count by Friday, December 11, 2009 so RSVP back
to me on or before the December 11 deadline.
Happy Holidays!!!!
----
Members,
We will be holding a Capital Region Chapter Meeting next --Wednesday,
September 2-- @@color(red):Tuesday, September 1@@. The topics that will be covered are the upcoming Regional
Conference, ESWBS updates, RP #12 updates and other Chapter news. Please
RSVP back to me by COB on Monday, August 31 if you are planning to
attend.
Details:
11:30 AM
6th Floor Conference @ Alion
1100 New Jersey Ave
Washington, DC
(remember you need to sign in on the 2nd floor)
Cost $5.00 per person (pizza or subs)
Also, guests are invited. We can always use new members.
Thanks.
Daniel Dolan
Vice President, Capital Region Chapter
202-675-4340 [[ddolan3@csc.com|mailto:ddolan3@csc.com]]
----
Members,
We have just gotten back from the 68th International Conference of SAWE in beautiful Wichita, Kansas (Home of the Wichita Wingnuts and Rick Voran). We would like to have a meeting to report to the Chapter what went on during the conference and our upcoming support for the completion of RP #12. Chris Filiopoulos will give us an update on RP #12 and a schedule on when this practice needs to be completed. We as a Chapter need to review and make comments supporting this document. I hope I will be able to e-mail you a draft copy prior to our meeting so comments can be discuss in this open forum.
Date: June 17
Time: 11:00 am - 1:00 pm
Location: Alion's 6th Floor Conference Room (sign in on the 3rd Floor)
Cost: $5.00 (we will again be dining on subs)
Please RSVP to me by June 12th.
Daniel Dolan [[ddolan3@csc.com|mailto:ddolan3@csc.com]]
SAWE Vice President - Capital Region
No elections this year: Matt Yoder is the new Secretary, all other positions remain the same due to lack of nominations.
[[Two RPs approved]]
[[In Memorium]]
[[News from Wichita]]
!!Website updates:
*CRC is now on Twitter. Follow us @SAWECRC . Also catch up on twitter right here on the website.
*Reference area now includes a marine weight engineering glossary and some useful tables.
----
!!!Newsletters:
Download old newsletters here: NewsLetter
!!!July 5 2008:
The SNAME book review for the Marine Vehicle Weight Engineering textbook is out in the latest edition of Marine Engineering. See a copy [[here|bookreview.pdf]]
!!!June 15 2008:
New streamlined website created for the SAWE Capital Region Chapter.
!!!June 2008:
Our president, Brian Heidt, excells in the Boston Marathon. See the article [[here|brian.pdf]].
!!!@@color(darkblue):Lifetime Achievement Award for William (Bill) Garzke@@
This November (2007), the Department of Naval Architecture and Marine Engineering of the University of Michigan will be recognizing the long and distinguished career of Bill Garzke at their annual alumni banquet in Ft. Lauderdale, Florida. Bill will be receiving the prestigious Michigan/Rosenblatt Award given each year for Outstanding Accomplishments in the Marine Field.
Over the years, Bill has been involved in all phases of ship design for both naval and commercial vessels but in recent years he as become skilled in marine forensics. He has written numerous books and papers after investigating some of the world’s most famous naval disasters. His studies of flooding and stresses that caused the hull failure of the RMS Titanic led to two documentaries for the Discovery Channel. He has also spent several years researching and interviewing survivors from the German battleship Bismarck. He probably has had more television appearances than any other naval architect, describing ship losses, and being interviewed by such notables as Dan Rather and Tom Brokaw. In 1999, Bill was invited to give a presentation as part of the Dorothy Killam Lecture Series at the Dalhousie University in Halifax on the forensic analysis on the loss of the Titanic.
Today, his involvement in formulating marine forensics has led him to new on-going investigations into the losses of the Britannic, Lusitania, Andrea Doria and the Estonia. Bill has also served as a marine forensics expert witness in a lawsuit over the loss of a commercial fishing vessel off the coast of New Jersey. But what Bill is most proud of in his career is his teaching assignments. He has taught naval architecture at the Merchant Marine Academy at Kings Point, and has most recently been teaching basic naval architecture and promoting the Continuing Education Courses in Naval Architecture for the Society of Naval Architects and Marine Engineers (SNAME).
|Standard Periodic Table (ref. Wikipedia)|c
|| !1 | !2 |!| !3 | !4 | !5 | !6 | !7 | !8 | !9 | !10 | !11 | !12 | !13 | !14 | !15 | !16 | !17 | !18 |
|!1|bgcolor(#a0ffa0): @@color(red):H@@ |>|>|>|>|>|>|>|>|>|>|>|>|>|>|>|>||bgcolor(#c0ffff): @@color(red):He@@ |
|!2|bgcolor(#ff6666): Li |bgcolor(#ffdead): Be |>|>|>|>|>|>|>|>|>|>||bgcolor(#cccc99): B |bgcolor(#a0ffa0): C |bgcolor(#a0ffa0): @@color(red):N@@ |bgcolor(#a0ffa0): @@color(red):O@@ |bgcolor(#ffff99): @@color(red):F@@ |bgcolor(#c0ffff): @@color(red):Ne@@ |
|!3|bgcolor(#ff6666): Na |bgcolor(#ffdead): Mg |>|>|>|>|>|>|>|>|>|>||bgcolor(#cccccc): Al |bgcolor(#cccc99): Si |bgcolor(#a0ffa0): P |bgcolor(#a0ffa0): S |bgcolor(#ffff99): @@color(red):Cl@@ |bgcolor(#c0ffff): @@color(red):Ar@@ |
|!4|bgcolor(#ff6666): K |bgcolor(#ffdead): Ca ||bgcolor(#ffc0c0): Sc |bgcolor(#ffc0c0): Ti |bgcolor(#ffc0c0): V |bgcolor(#ffc0c0): Cr |bgcolor(#ffc0c0): Mn |bgcolor(#ffc0c0): Fe |bgcolor(#ffc0c0): Co |bgcolor(#ffc0c0): Ni |bgcolor(#ffc0c0): Cu |bgcolor(#ffc0c0): Zn |bgcolor(#cccccc): Ga |bgcolor(#cccc99): Ge |bgcolor(#cccc99): As |bgcolor(#a0ffa0): Se |bgcolor(#ffff99): @@color(green):Br@@ |bgcolor(#c0ffff): @@color(red):Kr@@ |
|!5|bgcolor(#ff6666): Rb |bgcolor(#ffdead): Sr ||bgcolor(#ffc0c0): Y |bgcolor(#ffc0c0): Zr |bgcolor(#ffc0c0): Nb |bgcolor(#ffc0c0): Mo |bgcolor(#ffc0c0): Tc |bgcolor(#ffc0c0): Ru |bgcolor(#ffc0c0): Rh |bgcolor(#ffc0c0): Pd |bgcolor(#ffc0c0): Ag |bgcolor(#ffc0c0): Cd |bgcolor(#cccccc): In |bgcolor(#cccccc): Sn |bgcolor(#cccc99): Sb |bgcolor(#cccc99): Te |bgcolor(#ffff99): I |bgcolor(#c0ffff): @@color(red):Xe@@ |
|!6|bgcolor(#ff6666): Cs |bgcolor(#ffdead): Ba |bgcolor(#ffbfff):^^*1^^|bgcolor(#ffc0c0): Lu |bgcolor(#ffc0c0): Hf |bgcolor(#ffc0c0): Ta |bgcolor(#ffc0c0): W |bgcolor(#ffc0c0): Re |bgcolor(#ffc0c0): Os |bgcolor(#ffc0c0): Ir |bgcolor(#ffc0c0): Pt |bgcolor(#ffc0c0): Au |bgcolor(#ffc0c0): @@color(green):Hg@@ |bgcolor(#cccccc): Tl |bgcolor(#cccccc): Pb |bgcolor(#cccccc): Bi |bgcolor(#cccc99): Po |bgcolor(#ffff99): At |bgcolor(#c0ffff): @@color(red):Rn@@ |
|!7|bgcolor(#ff6666): Fr |bgcolor(#ffdead): Ra |bgcolor(#ff99cc):^^*2^^|bgcolor(#ffc0c0): Lr |bgcolor(#ffc0c0): Rf |bgcolor(#ffc0c0): Db |bgcolor(#ffc0c0): Sq |bgcolor(#ffc0c0): Bh |bgcolor(#ffc0c0): Hs |bgcolor(#ffc0c0): Mt |bgcolor(#ffc0c0): Ds |bgcolor(#ffc0c0): Rg |bgcolor(#ffc0c0): @@color(green):Uub@@ |bgcolor(#cccccc): Uut |bgcolor(#cccccc): Uuq |bgcolor(#cccccc): Uup |bgcolor(#cccccc): Uuh |bgcolor(#fcfecc): @@color(#cccccc):Uus@@ |bgcolor(#ecfefc): @@color(#cccccc):Uuo@@ |
| !Lanthanides^^*1^^|bgcolor(#ffbfff): La |bgcolor(#ffbfff): Ce |bgcolor(#ffbfff): Pr |bgcolor(#ffbfff): Nd |bgcolor(#ffbfff): Pm |bgcolor(#ffbfff): Sm |bgcolor(#ffbfff): Eu |bgcolor(#ffbfff): Gd |bgcolor(#ffbfff): Tb |bgcolor(#ffbfff): Dy |bgcolor(#ffbfff): Ho |bgcolor(#ffbfff): Er |bgcolor(#ffbfff): Tm |bgcolor(#ffbfff): Yb |
| !Actinides^^*2^^|bgcolor(#ff99cc): Ac |bgcolor(#ff99cc): Th |bgcolor(#ff99cc): Pa |bgcolor(#ff99cc): U |bgcolor(#ff99cc): Np |bgcolor(#ff99cc): Pu |bgcolor(#ff99cc): Am |bgcolor(#ff99cc): Cm |bgcolor(#ff99cc): Bk |bgcolor(#ff99cc): Cf |bgcolor(#ff99cc): Es |bgcolor(#ff99cc): Fm |bgcolor(#ff99cc): Md |bgcolor(#ff99cc): No |
*Chemical Series of the Periodic Table
**@@bgcolor(#ff6666): Alkali metals@@
**@@bgcolor(#ffdead): Alkaline earth metals@@
**@@bgcolor(#ffbfff): Lanthanides@@
**@@bgcolor(#ff99cc): Actinides@@
**@@bgcolor(#ffc0c0): Transition metals@@
**@@bgcolor(#cccccc): Poor metals@@
**@@bgcolor(#cccc99): Metalloids@@
**@@bgcolor(#a0ffa0): Nonmetals@@
**@@bgcolor(#ffff99): Halogens@@
**@@bgcolor(#c0ffff): Noble gases@@
*State at standard temperature and pressure
**those in @@color(red):red@@ are gases
**those in @@color(green):green@@ are liquids
**those in black are solids
!!Fair winds for your retirement, Dom. We'll miss you!
[img[ |domandjohn.jpg]]
In order to keep the size of this site down, and keep the speed up, for the time being pictures will be kept at another site. This can be opened within this site or in a separate window.
All photos can be downloaded, and if you have any pictures you want to share with the chapter (keep it clean), you can either upload them from the site, or send them by email at the address shown.
[[2005 Conference Pictures]]
[[Dinner Meeting Pictures]]
[[2006 Holiday Get Together]]
[[2007 Holiday Lunch Pictures]]
[[2008 Holiday Lunch]]
----
AaA BbB CcC DdD EeE FfF GgG HhH IiI JjJ KkK LlL MmM NnN OoO QqQ RrR SsS TtT UuU VvV WwW XxX YyY ZzZ
----
!!!Parallel Midbody
is the straight part at the center of the ship where the waterlines and buttocks have no curvature; that is, where all the fore and aft lines are parallel.
!!!Percent Completion
is the ratio of the current weight, less the current estimated weight, to the current weight, expressed as a percentage.
!!!PDF
stands for Probability Distribution Function. A normal distribution curve (Bell curve) is an example of a PDF.
!!!Plimsoll Mark
is a mark scribed and painted on the side of a commercial vessel designating the depth to which the ship may be loaded.
!!!Port
is the left hand side of the ship while looking forward.
!!!Preliminary Allocated Baseline Weight Estimate (PABWE)
is the potential bidder’s estimate of the weight and center of gravity of the ship in response to a solicitation for a performance-type contract.
!!!Preliminary Design Weight Estimate (PDWE)
is the weight estimate of the light ship, full load, and any other specified loading condition prepared during the preliminary design phase.
!!!Pressure hull
is the “people tank” of a submarine that is designed to withstand full submergence pressure. Contains all living, operations, and propulsion systems including variable ballast tanks.
!!!Prismatic Coefficient
= Cp = ∇/((Area of DWL)(×L))
!!!Product Model
is a three dimensional representation of a design that includes information for full product definition. This definition can include the configuration of the end product at its current level of maturity and the geometric and associated non-geometric product data information necessary for engineering, manufacturing, quality control, and logistics control.
!!!Profile
is a drawing view looking at the side of the ship. The lines plan shows buttock lines as curved lines where they contact the moulded surface. The profile view also shows the sheer of the deck.
|>|>|>|>|>|>|Conversion Factors: 1 L. Ton = 2240 Lbs., 1 Gallon = 231 Cu In|
|>|>|>|>|>|>|1 BBL = 42 Gallons, 1 Cu Ft= 1728 Cu In = 7.48 Gallons FW|
|!Liquid|!Pounds/|!Cu Ft/|!Gallons/|!Barrels/|!Pounds/|!Pounds/|
| |!Cu Ft |!Lton |!Lton |!Lton |!Barrel|!US Gallon|
|Salt Water| 64.00| 35.00| 261.90| 6.23| 359.50| 8.56|
|Fresh Water| 62.20| 36.00| 269.30| 6.41| 349.40| 8.32|
|River Water (typical tidal areas)| 63.10| 35.50| 265.50| 6.32| 354.40| 8.44|
|Fuel Oil| 59.00| 38.00| 284.00| 6.76| 331.40| 7.89|
|Diesel Fuel, Marine (DFM)| 52.04| 43.00| 322.00| 7.67| 292.20| 6.96|
|Lubricating Oil (Ship Prop)| 57.50| 39.00| 291.40| 6.94| 322.80| 7.69|
|Fog Oil| 57.40| 39.00| 291.70| 6.95| 322.50| 7.68|
|Lubricating Oil (Aviation)| 56.18| 39.90| 298.70| 7.11| 315.00| 7.50|
|HEAF (~JP-5)| 50.80| 44.10| 329.90| 7.85| 285.20| 6.79|
|Alcohol| 50.50| 44.40| 331.80| 7.90| 283.50| 6.75|
|~H2O2 – 90%| 86.62| 25.86| 193.44| 4.61| 486.36| 11.58|
|Liquid Oxygen| 70.90| 31.59| 236.30| 5.63| 397.90| 9.47|
|Hydraulic Oil| 58.18| 38.50| 288.00| 6.86| 326.70| 7.78|
|Foam (Firefighting)| 69.60| 32.18| 240.60| 5.73| 391.00| 9.31|
|Gasoline (Automotive)| 45.37| 49.40| 369.50| 8.80| 254.50| 6.06|
|Gasoline ( Aviation)| 43.75| 51.20| 383.00| 9.12| 245.70| 5.85|
!!Chapter Projects:
[[Encyclopedia Project]]
[[Abstract Project]]
[[ESWBS]]
----
AaA BbB CcC DdD EeE FfF GgG HhH IiI JjJ KkK LlL MmM NnN OoO PpP RrR SsS TtT UuU VvV WwW XxX YyY ZzZ
----
!!!Quarterly Weight Report (QWR)
is a periodic (quarterly) assessment of displacement, drafts, trim, list, GM, and KG as the weight estimate matures during detail design and construction.
!!!Recommended Practice 12 Revision
This project has been discussed at the last two lunch meetings and at the Seattle International conference. This recommended practice will be discussed at a reading session hosted by the Hampton Roads Chapter. See this link for more information: [[www.sawe.org/hamptonroads|http://www.sawe.org/hamptonroads]]
An online group has been established here: [[www.sawe.org/members/rp12workgroup|http://www.sawe.org/members/rp12workgroup]]
You will have to login as an SAWE member and then ask to join the group if you haven’t already.
Contact Dom Cimino or Chris Filiopolous for more information
[[Periodic Table]]
----
[[Marine Weights Engineering Glossary]]
----
[[Principle Liquids]]
[[Common Shipbuilding Materials]]
[[Miscellaneous Solids]]
[[Miscellaneous Liquids and Gases]]
----
[[Weight Conversion Factors]]
[[Length Conversion Factors]]
[[Area Conversion Factors]]
[[Volume Conversion Factors]]
[[Density Conversion Factors]]
[[Temperature Conversion Factors]]
----
[[ESWBS Listing]]
----
[[Foreign Weights and Measures]]
/***
|''Name:''|ReminderPlugin|
|''Version:''|2.3.10 (Jun 28, 2007)|
|''Source:''|http://remindermacros.tiddlyspot.com|
|''Author:''|Jeremy Sheeley(pop1280 [at] excite [dot] com)<<br>>Maintainer: simon.baird@gmail.com|
|''Licence:''|[[BSD open source license]]|
|''Macros:''|reminder, showreminders, displayTiddlersWithReminders, newReminder|
|''TiddlyWiki:''|2.0+|
|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|
!Description
This plugin provides macros for tagging a date with a reminder. Use the {{{reminder}}} macro to do this. The {{{showReminders}}} and {{{displayTiddlersWithReminder}}} macros automatically search through all available tiddlers looking for upcoming reminders.
!Installation
* Create a new tiddler in your tiddlywiki titled ReminderPlugin and give it the {{{systemConfig}}} tag. The tag is important because it tells TW that this is executable code.
* Double click this tiddler, and copy all the text from the tiddler's body.
* Paste the text into the body of the new tiddler in your TW.
* Save and reload your TW.
* You can copy some examples into your TW as well. See [[Simple examples]], [[Holidays]], [[showReminders]] and [[Personal Reminders]]
!Syntax:
|>|See [[ReminderSyntax]] and [[showRemindersSyntax]]|
!Revision history
* v2.3.10 (Jun 28, 2007)
** Removed window.story = window backwards compatibility hacks since they were breaking TW 2.2
* v2.3.9 (Apr 26, 2007)
** allow bracketed list format in tags param lets you use tags with spaces
* v2.3.8 (Mar 9, 2006)
**Bug fix: A global variable had snuck in, which was killing FF 1.5.0.1
**Feature: You can now use TIDDLER and TIDDLERNAME in a regular reminder format
* v2.3.6 (Mar 1, 2006)
**Bug fix: Reminders for today weren't being matched sometimes.
**Feature: Solidified integration with DatePlugin and CalendarPlugin
**Feature: Recurring reminders will now return multiple hits in showReminders and the calendar.
**Feature: Added TIDDLERNAME to the replacements for showReminders format, for plugins that need the title without brackets.
* v2.3.5 (Feb 8, 2006)
**Bug fix: Sped up reminders lots. Added a caching mechanism for reminders that have already been matched.
* v2.3.4 (Feb 7, 2006)
**Bug fix: Cleaned up code to hopefully prevent the Firefox 1.5.0.1 crash that was causing lots of plugins
to crash Firefox. Thanks to http://www.jslint.com
* v2.3.3 (Feb 2, 2006)
**Feature: newReminder now has drop down lists instead of text boxes.
**Bug fix: A trailing space in a title would trigger an infinite loop.
**Bug fix: using tag:"birthday !reminder" would filter differently than tag:"!reminder birthday"
* v2.3.2 (Jan 21, 2006)
**Feature: newReminder macro, which will let you easily add a reminder to a tiddler. Thanks to Eric Shulman (http://www.elsdesign.com) for the code to do this.
** Bug fix: offsetday was not working sometimes
** Bug fix: when upgrading to 2.0, I included a bit to exclude tiddlers tagged with excludeSearch. I've reverted back to searching through all tiddlers
* v2.3.1 (Jan 7, 2006)
**Feature: 2.0 compatibility
**Feature AlanH sent some code to make sure that showReminders prints a message if no reminders are found.
* v2.3.0 (Jan 3, 2006)
** Bug Fix: Using "Last Sunday (-0)" as a offsetdayofweek wasn't working.
** Bug Fix: Daylight Savings time broke offset based reminders (for example year:2005 month:8 day:23 recurdays:7 would match Monday instead of Tuesday during DST.
!Code
***/
//{{{
//============================================================================
//============================================================================
// ReminderPlugin
//============================================================================
//============================================================================
version.extensions.ReminderPlugin = {major: 2, minor: 3, revision: 8, date: new Date(2006,3,9), source: "http://remindermacros.tiddlyspot.com/"};
//============================================================================
// Configuration
// Modify this section to change the defaults for
// leadtime and display strings
//============================================================================
config.macros.reminders = {};
config.macros["reminder"] = {};
config.macros["newReminder"] = {};
config.macros["showReminders"] = {};
config.macros["displayTiddlersWithReminders"] = {};
config.macros.reminders["defaultLeadTime"] = [0,6000];
config.macros.reminders["defaultReminderMessage"] = "DIFF: TITLE on DATE ANNIVERSARY";
config.macros.reminders["defaultShowReminderMessage"] = "DIFF: TITLE on DATE ANNIVERSARY -- TIDDLER";
config.macros.reminders["defaultAnniversaryMessage"] = "(DIFF)";
config.macros.reminders["untitledReminder"] = "Untitled Reminder";
config.macros.reminders["noReminderFound"] = "Couldn't find a match for TITLE in the next LEADTIMEUPPER days."
config.macros.reminders["todayString"] = "Today";
config.macros.reminders["tomorrowString"] = "Tomorrow";
config.macros.reminders["ndaysString"] = "DIFF days";
config.macros.reminders["emtpyShowRemindersString"] = "There are no upcoming events";
//============================================================================
// Code
// You should not need to edit anything
// below this. Make sure to edit this tiddler and copy
// the code from the text box, to make sure that
// tiddler rendering doesn't interfere with the copy
// and paste.
//============================================================================
//this object will hold the cache of reminders, so that we don't
//recompute the same reminder over again.
var reminderCache = {};
config.macros.showReminders.handler = function showReminders(place,macroName,params)
{
var now = new Date().getMidnight();
var paramHash = {};
var leadtime = [0,14];
paramHash = getParamsForReminder(params);
var bProvidedDate = (paramHash["year"] != null) ||
(paramHash["month"] != null) ||
(paramHash["day"] != null) ||
(paramHash["dayofweek"] != null);
if (paramHash["leadtime"] != null)
{
leadtime = paramHash["leadtime"];
if (bProvidedDate)
{
//If they've entered a day, we need to make
//sure to find it. We'll reset the
//leadtime a few lines down.
paramHash["leadtime"] = [-10000, 10000];
}
}
var matchedDate = now;
if (bProvidedDate)
{
var leadTimeLowerBound = new Date().getMidnight().addDays(paramHash["leadtime"][0]);
var leadTimeUpperBound = new Date().getMidnight().addDays(paramHash["leadtime"][1]);
matchedDate = findDateForReminder(paramHash, new Date().getMidnight(), leadTimeLowerBound, leadTimeUpperBound);
}
var arr = findTiddlersWithReminders(matchedDate, leadtime, paramHash["tag"], paramHash["limit"]);
var elem = createTiddlyElement(place,"span",null,null, null);
var mess = "";
if (arr.length == 0)
{
mess += config.macros.reminders.emtpyShowRemindersString;
}
for (var j = 0; j < arr.length; j++)
{
if (paramHash["format"] != null)
{
arr[j]["params"]["format"] = paramHash["format"];
}
else
{
arr[j]["params"]["format"] = config.macros.reminders["defaultShowReminderMessage"];
}
mess += getReminderMessageForDisplay(arr[j]["diff"], arr[j]["params"], arr[j]["matchedDate"], arr[j]["tiddler"]);
mess += "\n";
}
wikify(mess, elem, null, null);
};
config.macros.displayTiddlersWithReminders.handler = function displayTiddlersWithReminders(place,macroName,params)
{
var now = new Date().getMidnight();
var paramHash = {};
var leadtime = [0,14];
paramHash = getParamsForReminder(params);
var bProvidedDate = (paramHash["year"] != null) ||
(paramHash["month"] != null) ||
(paramHash["day"] != null) ||
(paramHash["dayofweek"] != null);
if (paramHash["leadtime"] != null)
{
leadtime = paramHash["leadtime"];
if (bProvidedDate)
{
//If they've entered a day, we need to make
//sure to find it. We'll reset the leadtime
//a few lines down.
paramHash["leadtime"] = [-10000,10000];
}
}
var matchedDate = now;
if (bProvidedDate)
{
var leadTimeLowerBound = new Date().getMidnight().addDays(paramHash["leadtime"][0]);
var leadTimeUpperBound = new Date().getMidnight().addDays(paramHash["leadtime"][1]);
matchedDate = findDateForReminder(paramHash, new Date().getMidnight(), leadTimeLowerBound, leadTimeUpperBound);
}
var arr = findTiddlersWithReminders(matchedDate, leadtime, paramHash["tag"], paramHash["limit"]);
for (var j = 0; j < arr.length; j++)
{
displayTiddler(null, arr[j]["tiddler"], 0, null, false, false, false);
}
};
config.macros.reminder.handler = function reminder(place,macroName,params)
{
var dateHash = getParamsForReminder(params);
if (dateHash["hidden"] != null)
{
return;
}
var leadTime = dateHash["leadtime"];
if (leadTime == null)
{
leadTime = config.macros.reminders["defaultLeadTime"];
}
var leadTimeLowerBound = new Date().getMidnight().addDays(leadTime[0]);
var leadTimeUpperBound = new Date().getMidnight().addDays(leadTime[1]);
var matchedDate = findDateForReminder(dateHash, new Date().getMidnight(), leadTimeLowerBound, leadTimeUpperBound);
if (!store.getTiddler)
{
store.getTiddler=function(title) {return this.tiddlers[title];};
}
var title = window.story.findContainingTiddler(place).id.substr(7);
if (matchedDate != null)
{
var diff = matchedDate.getDifferenceInDays(new Date().getMidnight());
var elem = createTiddlyElement(place,"span",null,null, null);
var mess = getReminderMessageForDisplay(diff, dateHash, matchedDate, title);
wikify(mess, elem, null, null);
}
else
{
createTiddlyElement(place,"span",null,null, config.macros.reminders["noReminderFound"].replace("TITLE", dateHash["title"]).replace("LEADTIMEUPPER", leadTime[1]).replace("LEADTIMELOWER", leadTime[0]).replace("TIDDLERNAME", title).replace("TIDDLER", "[[" + title + "]]") );
}
};
config.macros.newReminder.handler = function newReminder(place,macroName,params)
{
var today=new Date().getMidnight();
var formstring = '<html><form>Year: <select name="year"><option value="">Every year</option>';
for (var i = 0; i < 5; i++)
{
formstring += '<option' + ((i == 0) ? ' selected' : '') + ' value="' + (today.getFullYear() +i) + '">' + (today.getFullYear() + i) + '</option>';
}
formstring += '</select> Month:<select name="month"><option value="">Every month</option>';
for (i = 0; i < 12; i++)
{
formstring += '<option' + ((i == today.getMonth()) ? ' selected' : '') + ' value="' + (i+1) + '">' + config.messages.dates.months[i] + '</option>';
}
formstring += '</select> Day:<select name="day"><option value="">Every day</option>';
for (i = 1; i < 32; i++)
{
formstring += '<option' + ((i == (today.getDate() )) ? ' selected' : '') + ' value="' + i + '">' + i + '</option>';
}
formstring += '</select> Reminder Title:<input type="text" size="40" name="title" value="please enter a title" onfocus="this.select();"><input type="button" value="ok" onclick="addReminderToTiddler(this.form)"></form></html>';
var panel = config.macros.slider.createSlider(place,null,"New Reminder","Open a form to add a new reminder to this tiddler");
wikify(formstring ,panel,null,store.getTiddler(params[1]));
};
// onclick: process input and insert reminder at 'marker'
window.addReminderToTiddler = function(form) {
if (!store.getTiddler)
{
store.getTiddler=function(title) {return this.tiddlers[title];};
}
var title = window.story.findContainingTiddler(form).id.substr(7);
var tiddler=store.getTiddler(title);
var txt='\n<<reminder ';
if (form.year.value != "")
txt += 'year:'+form.year.value + ' ';
if (form.month.value != "")
txt += 'month:'+form.month.value + ' ';
if (form.day.value != "")
txt += 'day:'+form.day.value + ' ';
txt += 'title:"'+form.title.value+'" ';
txt +='>>';
tiddler.set(null,tiddler.text + txt);
window.story.refreshTiddler(title,1,true);
store.setDirty(true);
};
function hasTag(tiddlerTags, tagFilters)
{
//Make sure we respond well to empty tiddlerTaglists or tagFilterlists
if (tagFilters.length==0 || tiddlerTags.length==0)
{
return true;
}
var bHasTag = false;
/*bNoPos says: "'till now there has been no check using a positive filter"
Imagine a filterlist consisting of 1 negative filter:
If the filter isn't matched, we want hasTag to be true.
Yet bHasTag is still false ('cause only positive filters cause bHasTag to change)
If no positive filters are present bNoPos is true, and no negative filters are matched so we have not returned false
Thus: hasTag returns true.
If at any time a positive filter is encountered, we want at least one of the tags to match it, so we turn bNoPos to false, which
means bHasTag must be true for hasTag to return true*/
var bNoPos=true;
for (var t3 = 0; t3 < tagFilters.length; t3++)
{
for(var t2=0; t2<tiddlerTags.length; t2++)
{
if (tagFilters[t3].length > 1 && tagFilters[t3].charAt(0) == '!')
{
if (tiddlerTags[t2] == tagFilters[t3].substring(1))
{
//If at any time a negative filter is matched, we return false
return false;
}
}
else
{
if (bNoPos)
{
//We encountered the first positive filter
bNoPos=false;
}
if (tiddlerTags[t2] == tagFilters[t3])
{
//A positive filter is matched. As long as no negative filter is matched, hasTag will return true
bHasTag=true;
}
}
}
}
return (bNoPos || bHasTag);
};
//This function searches all tiddlers for the reminder //macro. It is intended that other plugins (like //calendar) will use this function to query for
//upcoming reminders.
//The arguments to this function filter out reminders //based on when they will fire.
//
//ARGUMENTS:
//baseDate is the date that is used as "now".
//leadtime is a two element int array, with leadtime[0]
// as the lower bound and leadtime[1] as the
// upper bound. A reasonable default is [0,14]
//tags is a space-separated list of tags to use to filter
// tiddlers. If a tag name begins with an !, then
// only tiddlers which do not have that tag will
// be considered. For example "examples holidays"
// will search for reminders in any tiddlers that
// are tagged with examples or holidays and
// "!examples !holidays" will search for reminders
// in any tiddlers that are not tagged with
// examples or holidays. Pass in null to search
// all tiddlers.
//limit. If limit is null, individual reminders can
// override the leadtime specified earlier.
// Pass in 1 in order to override that behavior.
window.findTiddlersWithReminders = function findTiddlersWithReminders(baseDate, leadtime, tags, limit)
{
//function(searchRegExp,sortField,excludeTag)
// var macroPattern = "<<([^>\\]+)(?:\\*)([^>]*)>>";
var macroPattern = "<<(reminder)(.*)>>";
var macroRegExp = new RegExp(macroPattern,"mg");
var matches = store.search(macroRegExp,"title","");
var arr = [];
var tagsArray = null;
if (tags != null)
{
// tagsArray = tags.split(" ");
tagsArray = tags.readBracketedList(); // allows tags with spaces. thanks Robin Summerhill, 4-Oct-06.
}
for(var t=matches.length-1; t>=0; t--)
{
if (tagsArray != null)
{
//If they specified tags to filter on, and this tiddler doesn't
//match, skip it entirely.
if ( ! hasTag(matches[t].tags, tagsArray))
{
continue;
}
}
var targetText = matches[t].text;
do {
// Get the next formatting match
var formatMatch = macroRegExp.exec(targetText);
if(formatMatch && formatMatch[1] != null && formatMatch[1].toLowerCase() == "reminder")
{
//Find the matching date.
var params = formatMatch[2] != null ? formatMatch[2].readMacroParams() : {};
var dateHash = getParamsForReminder(params);
if (limit != null || dateHash["leadtime"] == null)
{
if (leadtime == null)
dateHash["leadtime"] = leadtime;
else
{
dateHash["leadtime"] = [];
dateHash["leadtime"][0] = leadtime[0];
dateHash["leadtime"][1] = leadtime[1];
}
}
if (dateHash["leadtime"] == null)
dateHash["leadtime"] = config.macros.reminders["defaultLeadTime"];
var leadTimeLowerBound = baseDate.addDays(dateHash["leadtime"][0]);
var leadTimeUpperBound = baseDate.addDays(dateHash["leadtime"][1]);
var matchedDate = findDateForReminder(dateHash, baseDate, leadTimeLowerBound, leadTimeUpperBound);
while (matchedDate != null)
{
var hash = {};
hash["diff"] = matchedDate.getDifferenceInDays(baseDate);
hash["matchedDate"] = new Date(matchedDate.getFullYear(), matchedDate.getMonth(), matchedDate.getDate(), 0, 0);
hash["params"] = cloneParams(dateHash);
hash["tiddler"] = matches[t].title;
hash["tags"] = matches[t].tags;
arr.pushUnique(hash);
if (dateHash["recurdays"] != null || (dateHash["year"] == null))
{
leadTimeLowerBound = leadTimeLowerBound.addDays(matchedDate.getDifferenceInDays(leadTimeLowerBound)+ 1);
matchedDate = findDateForReminder(dateHash, baseDate, leadTimeLowerBound, leadTimeUpperBound);
}
else matchedDate = null;
}
}
}while(formatMatch);
}
if(arr.length > 1) //Sort the array by number of days remaining.
{
arr.sort(function (a,b) {if(a["diff"] == b["diff"]) {return(0);} else {return (a["diff"] < b["diff"]) ? -1 : +1; } });
}
return arr;
};
//This function takes the reminder macro parameters and
//generates the string that is used for display.
//This function is not intended to be called by
//other plugins.
window.getReminderMessageForDisplay= function getReminderMessageForDisplay(diff, params, matchedDate, tiddlerTitle)
{
var anniversaryString = "";
var reminderTitle = params["title"];
if (reminderTitle == null)
{
reminderTitle = config.macros.reminders["untitledReminder"];
}
if (params["firstyear"] != null)
{
anniversaryString = config.macros.reminders["defaultAnniversaryMessage"].replace("DIFF", (matchedDate.getFullYear() - params["firstyear"]));
}
var mess = "";
var diffString = "";
if (diff == 0)
{
diffString = config.macros.reminders["todayString"];
}
else if (diff == 1)
{
diffString = config.macros.reminders["tomorrowString"];
}
else
{
diffString = config.macros.reminders["ndaysString"].replace("DIFF", diff);
}
var format = config.macros.reminders["defaultReminderMessage"];
if (params["format"] != null)
{
format = params["format"];
}
mess = format;
//HACK! -- Avoid replacing DD in TIDDLER with the date
mess = mess.replace(/TIDDLER/g, "TIDELER");
mess = matchedDate.formatStringDateOnly(mess);
mess = mess.replace(/TIDELER/g, "TIDDLER");
if (tiddlerTitle != null)
{
mess = mess.replace(/TIDDLERNAME/g, tiddlerTitle);
mess = mess.replace(/TIDDLER/g, "[[" + tiddlerTitle + "]]");
}
mess = mess.replace("DIFF", diffString).replace("TITLE", reminderTitle).replace("DATE", matchedDate.formatString("DDD MMM DD, YYYY")).replace("ANNIVERSARY", anniversaryString);
return mess;
};
// Parse out the macro parameters into a hashtable. This
// handles the arguments for reminder, showReminders and
// displayTiddlersWithReminders.
window.getParamsForReminder = function getParamsForReminder(params)
{
var dateHash = {};
var type = "";
var num = 0;
var title = "";
for(var t=0; t<params.length; t++)
{
var split = params[t].split(":");
type = split[0].toLowerCase();
var value = split[1];
for (var i=2; i < split.length; i++)
{
value += ":" + split[i];
}
if (type == "nolinks" || type == "limit" || type == "hidden")
{
num = 1;
}
else if (type == "leadtime")
{
var leads = value.split("...");
if (leads.length == 1)
{
leads[1]= leads[0];
leads[0] = 0;
}
leads[0] = parseInt(leads[0], 10);
leads[1] = parseInt(leads[1], 10);
num = leads;
}
else if (type == "offsetdayofweek")
{
if (value.substr(0,1) == "-")
{
dateHash["negativeOffsetDayOfWeek"] = 1;
value = value.substr(1);
}
num = parseInt(value, 10);
}
else if (type != "title" && type != "tag" && type != "format")
{
num = parseInt(value, 10);
}
else
{
title = value;
t++;
while (title.substr(0,1) == '"' && title.substr(title.length - 1,1) != '"' && params[t] != undefined)
{
title += " " + params[t++];
}
//Trim off the leading and trailing quotes
if (title.substr(0,1) == "\"" && title.substr(title.length - 1,1)== "\"")
{
title = title.substr(1, title.length - 2);
t--;
}
num = title;
}
dateHash[type] = num;
}
//date is synonymous with day
if (dateHash["day"] == null)
{
dateHash["day"] = dateHash["date"];
}
return dateHash;
};
//This function finds the date specified in the reminder
//parameters. It will return null if no match can be
//found. This function is not intended to be used by
//other plugins.
window.findDateForReminder= function findDateForReminder( dateHash, baseDate, leadTimeLowerBound, leadTimeUpperBound)
{
if (baseDate == null)
{
baseDate = new Date().getMidnight();
}
var hashKey = baseDate.convertToYYYYMMDDHHMM();
for (var k in dateHash)
{
hashKey += "," + k + "|" + dateHash[k];
}
hashKey += "," + leadTimeLowerBound.convertToYYYYMMDDHHMM();
hashKey += "," + leadTimeUpperBound.convertToYYYYMMDDHHMM();
if (reminderCache[hashKey] == null)
{
//If we don't find a match in this run, then we will
//cache that the reminder can't be matched.
reminderCache[hashKey] = false;
}
else if (reminderCache[hashKey] == false)
{
//We've already tried this date and failed
return null;
}
else
{
return reminderCache[hashKey];
}
var bOffsetSpecified = dateHash["offsetyear"] != null ||
dateHash["offsetmonth"] != null ||
dateHash["offsetday"] != null ||
dateHash["offsetdayofweek"] != null ||
dateHash["recurdays"] != null;
// If we are matching the base date for a dayofweek offset, look for the base date a
//little further back.
var tmp1leadTimeLowerBound = leadTimeLowerBound;
if ( dateHash["offsetdayofweek"] != null)
{
tmp1leadTimeLowerBound = leadTimeLowerBound.addDays(-6);
}
var matchedDate = baseDate.findMatch(dateHash, tmp1leadTimeLowerBound, leadTimeUpperBound);
if (matchedDate != null)
{
var newMatchedDate = matchedDate;
if (dateHash["recurdays"] != null)
{
while (newMatchedDate.getTime() < leadTimeLowerBound.getTime())
{
newMatchedDate = newMatchedDate.addDays(dateHash["recurdays"]);
}
}
else if (dateHash["offsetyear"] != null ||
dateHash["offsetmonth"] != null ||
dateHash["offsetday"] != null ||
dateHash["offsetdayofweek"] != null)
{
var tmpdateHash = cloneParams(dateHash);
tmpdateHash["year"] = dateHash["offsetyear"];
tmpdateHash["month"] = dateHash["offsetmonth"];
tmpdateHash["day"] = dateHash["offsetday"];
tmpdateHash["dayofweek"] = dateHash["offsetdayofweek"];
var tmpleadTimeLowerBound = leadTimeLowerBound;
var tmpleadTimeUpperBound = leadTimeUpperBound;
if (tmpdateHash["offsetdayofweek"] != null)
{
if (tmpdateHash["negativeOffsetDayOfWeek"] == 1)
{
tmpleadTimeLowerBound = matchedDate.addDays(-6);
tmpleadTimeUpperBound = matchedDate;
}
else
{
tmpleadTimeLowerBound = matchedDate;
tmpleadTimeUpperBound = matchedDate.addDays(6);
}
}
newMatchedDate = matchedDate.findMatch(tmpdateHash, tmpleadTimeLowerBound, tmpleadTimeUpperBound);
//The offset couldn't be matched. return null.
if (newMatchedDate == null)
{
return null;
}
}
if (newMatchedDate.isBetween(leadTimeLowerBound, leadTimeUpperBound))
{
reminderCache[hashKey] = newMatchedDate;
return newMatchedDate;
}
}
return null;
};
//This does much the same job as findDateForReminder, but
//this one doesn't deal with offsets or recurring
//reminders.
Date.prototype.findMatch = function findMatch(dateHash, leadTimeLowerBound, leadTimeUpperBound)
{
var bSpecifiedYear = (dateHash["year"] != null);
var bSpecifiedMonth = (dateHash["month"] != null);
var bSpecifiedDay = (dateHash["day"] != null);
var bSpecifiedDayOfWeek = (dateHash["dayofweek"] != null);
if (bSpecifiedYear && bSpecifiedMonth && bSpecifiedDay)
{
return new Date(dateHash["year"], dateHash["month"]-1, dateHash["day"], 0, 0);
}
var bMatchedYear = !bSpecifiedYear;
var bMatchedMonth = !bSpecifiedMonth;
var bMatchedDay = !bSpecifiedDay;
var bMatchedDayOfWeek = !bSpecifiedDayOfWeek;
if (bSpecifiedDay && bSpecifiedMonth && !bSpecifiedYear && !bSpecifiedDayOfWeek)
{
//Shortcut -- First try this year. If it's too small, try next year.
var tmpMidnight = this.getMidnight();
var tmpDate = new Date(this.getFullYear(), dateHash["month"]-1, dateHash["day"], 0,0);
if (tmpDate.getTime() < leadTimeLowerBound.getTime())
{
tmpDate = new Date((this.getFullYear() + 1), dateHash["month"]-1, dateHash["day"], 0,0);
}
if ( tmpDate.isBetween(leadTimeLowerBound, leadTimeUpperBound))
{
return tmpDate;
}
else
{
return null;
}
}
var newDate = leadTimeLowerBound;
while (newDate.isBetween(leadTimeLowerBound, leadTimeUpperBound))
{
var tmp = testDate(newDate, dateHash, bSpecifiedYear, bSpecifiedMonth, bSpecifiedDay, bSpecifiedDayOfWeek);
if (tmp != null)
return tmp;
newDate = newDate.addDays(1);
}
};
function testDate(testMe, dateHash, bSpecifiedYear, bSpecifiedMonth, bSpecifiedDay, bSpecifiedDayOfWeek)
{
var bMatchedYear = !bSpecifiedYear;
var bMatchedMonth = !bSpecifiedMonth;
var bMatchedDay = !bSpecifiedDay;
var bMatchedDayOfWeek = !bSpecifiedDayOfWeek;
if (bSpecifiedYear)
{
bMatchedYear = (dateHash["year"] == testMe.getFullYear());
}
if (bSpecifiedMonth)
{
bMatchedMonth = ((dateHash["month"] - 1) == testMe.getMonth() );
}
if (bSpecifiedDay)
{
bMatchedDay = (dateHash["day"] == testMe.getDate());
}
if (bSpecifiedDayOfWeek)
{
bMatchedDayOfWeek = (dateHash["dayofweek"] == testMe.getDay());
}
if (bMatchedYear && bMatchedMonth && bMatchedDay && bMatchedDayOfWeek)
{
return testMe;
}
};
//Returns true if the date is in between two given dates
Date.prototype.isBetween = function isBetween(lowerBound, upperBound)
{
return (this.getTime() >= lowerBound.getTime() && this.getTime() <= upperBound.getTime());
}
//Return a new date, with the time set to midnight (0000)
Date.prototype.getMidnight = function getMidnight()
{
return new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0);
};
// Add the specified number of days to a date.
Date.prototype.addDays = function addDays(numberOfDays)
{
return new Date(this.getFullYear(), this.getMonth(), this.getDate() + numberOfDays, 0, 0);
};
//Return the number of days between two dates.
Date.prototype.getDifferenceInDays = function getDifferenceInDays(otherDate)
{
//I have to do it this way, because this way ignores daylight savings
var tmpDate = this.addDays(0);
if (this.getTime() > otherDate.getTime())
{
var i = 0;
for (i = 0; tmpDate.getTime() > otherDate.getTime(); i++)
{
tmpDate = tmpDate.addDays(-1);
}
return i;
}
else
{
var i = 0;
for (i = 0; tmpDate.getTime() < otherDate.getTime(); i++)
{
tmpDate = tmpDate.addDays(1);
}
return i * -1;
}
return 0;
};
function cloneParams(what) {
var tmp = {};
for (var i in what) {
tmp[i] = what[i];
}
return tmp;
}
// Substitute date components into a string
Date.prototype.formatStringDateOnly = function formatStringDateOnly(template)
{
template = template.replace("YYYY",this.getFullYear());
template = template.replace("YY",String.zeroPad(this.getFullYear()-2000,2));
template = template.replace("MMM",config.messages.dates.months[this.getMonth()]);
template = template.replace("0MM",String.zeroPad(this.getMonth()+1,2));
template = template.replace("MM",this.getMonth()+1);
template = template.replace("DDD",config.messages.dates.days[this.getDay()]);
template = template.replace("0DD",String.zeroPad(this.getDate(),2));
template = template.replace("DD",this.getDate());
return template;
};
//}}}
<<reminder month:2 day:15 year:2012 title:"@@color(blue):Chapter Meeting - See EventS@@">>
<<reminder month:4 day:11 year:2012 title:"@@color(blue):Chapter Meeting - tentative @@">>
<<reminder month:5 day:5 year:2012 title:"@@color(red):International Meeting - Germany@@">>
<<reminder month:6 day:13 year:2012 title:"@@color(blue):Chapter Meeting - tentative @@">>
<<reminder month:8 day:8 year:2012 title:"@@color(blue):Chapter Meeting - tentative @@">>
<<reminder month:10 day:10 year:2012 title:"@@color(blue):Chapter Meeting - tentative @@">>
<<reminder month:12 day:12 year:2012 title:"@@color(blue):Chapter Meeting - tentative @@">>
----
AaA BbB CcC DdD EeE FfF GgG HhH IiI JjJ KkK LlL MmM NnN OoO PpP QqQ SsS TtT UuU VvV WwW XxX YyY ZzZ
----
!!!Reballasting
is the permanent adding, subtracting, or relocating weights in a submarine necessitated by permanent weight changes as a result of design alterations or equipment changes.
!!!Residual water
is the water in a tank that lies below the suction inlet or, in the case of submarine main ballast tanks, below the highest point of the flood grates. This water cannot be removed by normal processes and is usually considered to be a part of Condition A or a fixed load.
!!!Reserve buoyancy
is the volume of the watertight portion of the ship from the waterline up to the main deck (i.e., hull watertight envelope). This is a key indicator of the ship’s ability to survive flooding. For submarines (in diving trim), the reserve buoyancy is equal to the volume of the main ballast tanks.
!!!Righting Arm
is a moment arm between weight and buoyant forces. A measurement of stability. The perpendicular distance from the center of gravity G to the line BM (point z). This can be seen to be equal to the distance GM*sin Θ for small angles of heel. Also termed GZ.
!!!Righting Arm Curve
is a plot of righting arms against angles of heel. Also called a GZ (~G-Zed) curve. Rollback angle, equilibrium angle, maximum righting arm and downflood angle are predicated on the ship design and stability criteria used. Areas A1 and A2 are often used in stability criteria. Figure is an example of a ship righting arm curve and a wind heeling curve.
!!!Righting Moment
is the weight of the ship, W, times GM*sin Θ.
!!!RINA
is the acronym for the Royal Institution of Naval Architects.
!!!RMS
is a statistical measure of the magnitude of a varying quantity. It is the square root of the mean of the squares of the values.
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>) | <span class='comments' macro='haloscan comments'></span> | <span class='comments' macro='haloscan trackbacks'></span></div>
line for viewtemplate to put comments in the line.
/***
|Name|SearchOptionsPlugin|
|Source|http://www.TiddlyTools.com/#SearchOptionsPlugin|
|Documentation|http://www.TiddlyTools.com/#SearchOptionsPluginInfo|
|Version|3.0.7|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|extend core search function with additional user-configurable options|
Adds extra options to core search function including selecting which data items to search, enabling/disabling incremental key-by-key searches, and generating a ''list of matching tiddlers'' instead of immediately displaying all matches. This plugin also adds syntax for rendering 'search links' within tiddler content to embed one-click searches using pre-defined 'hard-coded' search terms.
!!!!!Documentation
>see [[SearchOptionsPluginInfo]]
!!!!!Configuration
<<<
Search in:
<<option chkSearchTitles>> titles <<option chkSearchText>> text <<option chkSearchTags>> tags <<option chkSearchFields>> fields <<option chkSearchShadows>> shadows
<<option chkSearchHighlight>> Highlight matching text in displayed tiddlers
<<option chkSearchList>> Show list of matches
<<option chkSearchListTiddler>> Write list to [[SearchResults]] tiddler
<<option chkSearchTitlesFirst>> Show title matches first
<<option chkSearchByDate>> Sort matching tiddlers by modification date (most recent first)
<<option chkSearchResultsOptions>> Include {{{options...}}} slider in "search again" form
<<option chkIncrementalSearch>> Incremental key-by-key search: {{twochar{<<option txtIncrementalSearchMin>>}}} or more characters, {{threechar{<<option txtIncrementalSearchDelay>>}}} msec delay
<<option chkSearchOpenTiddlers>> Search only in tiddlers that are currently displayed
<<option chkSearchExcludeTags>> Exclude tiddlers tagged with: <<option txtSearchExcludeTags>>
<<<
!!!!!Revisions
<<<
2010.05.03 3.0.8 added chkSearchResultsOptions to allow/omit the "options..." slider from the "search again" form
|please see [[SearchOptionsPluginInfo]] for additional revision details|
2005.10.18 1.0.0 Initial Release
<<<
!!!!!Code
***/
//{{{
version.extensions.SearchOptionsPlugin= {major: 3, minor: 0, revision: 8, date: new Date(2010,5,3)};
var defaults={
chkSearchTitles: true,
chkSearchText: true,
chkSearchTags: true,
chkSearchFields: true,
chkSearchTitlesFirst: true,
chkSearchList: true,
chkSearchHighlight: true,
chkSearchListTiddler: false,
chkSearchByDate: false,
chkIncrementalSearch: true,
chkSearchShadows: true,
chkSearchOpenTiddlers: false,
chkSearchResultsOptions:true,
chkSearchExcludeTags: true,
txtSearchExcludeTags: 'excludeSearch',
txtIncrementalSearchDelay: 500,
txtIncrementalSearchMin: 3
}; for (var id in defaults) if (config.options[id]===undefined)
config.options[id]=defaults[id];
if (config.macros.search.reportTitle==undefined)
config.macros.search.reportTitle="SearchResults"; // note: not a cookie!
config.macros.search.label+="\xa0"; // a little bit of space just because it looks better
//}}}
// // searchLink: {{{[search[text to find]] OR [search[text to display|text to find]]}}}
//{{{
config.formatters.push( {
name: "searchLink",
match: "\\[search\\[",
lookaheadRegExp: /\[search\[(.*?)(?:\|(.*?))?\]\]/mg,
prompt: "search for: '%0'",
handler: function(w)
{
this.lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var label=lookaheadMatch[1];
var text=lookaheadMatch[2]||label;
var prompt=this.prompt.format([text]);
var btn=createTiddlyButton(w.output,label,prompt,
function(){story.search(this.getAttribute("searchText"))},"searchLink");
btn.setAttribute("searchText",text);
w.nextMatch = this.lookaheadRegExp.lastIndex;
}
}
});
//}}}
// // incremental search uses option settings instead of hard-coded delay and minimum input values
//{{{
var fn=config.macros.search.onKeyPress;
fn=fn.toString().replace(/500/g, "config.options.txtIncrementalSearchDelay||500");
fn=fn.toString().replace(/> 2/g, ">=(config.options.txtIncrementalSearchMin||3)");
eval("config.macros.search.onKeyPress="+fn);
//}}}
// // REPLACE story.search() for option to "show search results in a list"
//{{{
Story.prototype.search = function(text,useCaseSensitive,useRegExp)
{
var co=config.options; // abbrev
var re=new RegExp(useRegExp ? text : text.escapeRegExp(),useCaseSensitive ? "mg" : "img");
if (config.options.chkSearchHighlight) highlightHack=re;
var matches = store.search(re,co.chkSearchByDate?"modified":"title","");
if (co.chkSearchByDate) matches=matches.reverse(); // most recent first
var q = useRegExp ? "/" : "'";
clearMessage();
if (!matches.length) {
if (co.chkSearchListTiddler) discardSearchResults();
displayMessage(config.macros.search.failureMsg.format([q+text+q]));
} else {
if (co.chkSearchList||co.chkSearchListTiddler)
reportSearchResults(text,matches);
else {
var titles = []; for(var t=0; t<matches.length; t++) titles.push(matches[t].title);
this.closeAllTiddlers(); story.displayTiddlers(null,titles);
displayMessage(config.macros.search.successMsg.format([matches.length, q+text+q]));
}
}
highlightHack = null;
}
//}}}
// // REPLACE store.search() for enhanced searching/sorting options
//{{{
TiddlyWiki.prototype.search = function(searchRegExp,sortField,excludeTag,match)
{
var co=config.options; // abbrev
var tids = this.reverseLookup("tags",excludeTag,!!match,sortField);
var opened=[]; story.forEachTiddler(function(tid,elem){opened.push(tid);});
// eliminate tiddlers tagged with excluded tags
if (co.chkSearchExcludeTags&&co.txtSearchExcludeTags.length) {
var ex=co.txtSearchExcludeTags.readBracketedList();
var temp=[]; for(var t=tids.length-1; t>=0; t--)
if (!tids[t].tags.containsAny(ex)) temp.push(tids[t]);
tids=temp;
}
// scan for matching titles first...
var results = [];
if (co.chkSearchTitles) {
for(var t=0; t<tids.length; t++) {
if (co.chkSearchOpenTiddlers && !opened.contains(tids[t].title)) continue;
if(tids[t].title.search(searchRegExp)!=-1) results.push(tids[t]);
}
if (co.chkSearchShadows)
for (var t in config.shadowTiddlers) {
if (co.chkSearchOpenTiddlers && !opened.contains(t)) continue;
if ((t.search(searchRegExp)!=-1) && !store.tiddlerExists(t))
results.push((new Tiddler()).assign(t,config.shadowTiddlers[t]));
}
}
// then scan for matching text, tags, or field data
for(var t=0; t<tids.length; t++) {
if (co.chkSearchOpenTiddlers && !opened.contains(tids[t].title)) continue;
if (co.chkSearchText && tids[t].text.search(searchRegExp)!=-1)
results.pushUnique(tids[t]);
if (co.chkSearchTags && tids[t].tags.join(" ").search(searchRegExp)!=-1)
results.pushUnique(tids[t]);
if (co.chkSearchFields && store.forEachField!=undefined)
store.forEachField(tids[t],
function(tid,field,val) {
if (val.search(searchRegExp)!=-1) results.pushUnique(tids[t]);
},
true); // extended fields only
}
// then check for matching text in shadows
if (co.chkSearchShadows)
for (var t in config.shadowTiddlers) {
if (co.chkSearchOpenTiddlers && !opened.contains(t)) continue;
if ((config.shadowTiddlers[t].search(searchRegExp)!=-1) && !store.tiddlerExists(t))
results.pushUnique((new Tiddler()).assign(t,config.shadowTiddlers[t]));
}
// if not 'titles first', or sorting by modification date,
// re-sort results to so titles, text, tag and field matches are mixed together
if(!sortField) sortField = "title";
var bySortField=function(a,b){
if(a[sortField]==b[sortField])return(0);else return(a[sortField]<b[sortField])?-1:+1;
}
if (!co.chkSearchTitlesFirst || co.chkSearchByDate) results.sort(bySortField);
return results;
}
//}}}
// // HIJACK core {{{<<search>>}}} macro to add "report" and "simple inline" output
//{{{
config.macros.search.SOP_handler=config.macros.search.handler;
config.macros.search.handler = function(place,macroName,params)
{
// if "report", use SearchOptionsPlugin report generator for inline output
if (params[1]&¶ms[1].substr(0,6)=="report") {
var keyword=params[0];
var options=params[1].split("=")[1]; // split "report=option+option+..."
var heading=params[2]?params[2].unescapeLineBreaks():"";
var matches=store.search(new RegExp(keyword.escapeRegExp(),"img"),"title","excludeSearch");
if (matches.length) wikify(heading+window.formatSearchResults(keyword,matches,options),place);
} else if (params[1]) {
var keyword=params[0];
var heading=params[1]?params[1].unescapeLineBreaks():"";
var seperator=params[2]?params[2].unescapeLineBreaks():", ";
var matches=store.search(new RegExp(keyword.escapeRegExp(),"img"),"title","excludeSearch");
if (matches.length) {
var out=[];
for (var m=0; m<matches.length; m++) out.push("[["+matches[m].title+"]]");
wikify(heading+out.join(seperator),place);
}
} else
config.macros.search.SOP_handler.apply(this,arguments);
};
//}}}
// // SearchResults panel handling
//{{{
setStylesheet(".searchResults { padding:1em 1em 0 1em; }","searchResults"); // matches std tiddler padding
config.macros.search.createPanel=function(text,matches,body) {
function getByClass(e,c) { var d=e.getElementsByTagName("div");
for (var i=0;i<d.length;i++) if (hasClass(d[i],c)) return d[i]; }
var panel=createTiddlyElement(null,"div","searchPanel","searchPanel");
this.renderPanel(panel,text,matches,body);
var oldpanel=document.getElementById("searchPanel");
if (!oldpanel) { // insert new panel just above tiddlers
var da=document.getElementById("displayArea");
da.insertBefore(panel,da.firstChild);
} else { // if panel exists
var oldwrap=getByClass(oldpanel,"searchResults");
var newwrap=getByClass(panel,"searchResults");
// if no prior content, just insert new content
if (!oldwrap) oldpanel.insertBefore(newwrap,null);
else { // swap search results content but leave containing panel intact
oldwrap.style.display='block'; // unfold wrapper if needed
var i=oldwrap.getElementsByTagName("input")[0]; // get input field
if (i) { var pos=this.getCursorPos(i); i.onblur=null; } // get cursor pos, ignore blur
oldpanel.replaceChild(newwrap,oldwrap);
panel=oldpanel; // use existing panel
}
}
this.showPanel(true,pos);
return panel;
}
config.macros.search.renderPanel=function(panel,text,matches,body) {
var wrap=createTiddlyElement(panel,"div",null,"searchResults");
wrap.onmouseover = function(e){ addClass(this,"selected"); }
wrap.onmouseout = function(e){ removeClass(this,"selected"); }
// create toolbar: "open all", "fold/unfold", "close"
var tb=createTiddlyElement(wrap,"div",null,"toolbar");
var b=createTiddlyButton(tb, "open all", "open all matching tiddlers", function() {
story.displayTiddlers(null,this.getAttribute("list").readBracketedList()); return false; },"button");
var list=""; for(var t=0;t<matches.length;t++) list+='[['+matches[t].title+']] ';
b.setAttribute("list",list);
var b=createTiddlyButton(tb, "fold", "toggle display of search results", function() {
config.macros.search.foldPanel(this); return false; },"button");
var b=createTiddlyButton(tb, "close", "dismiss search results", function() {
config.macros.search.showPanel(false); return false; },"button");
createTiddlyText(createTiddlyElement(wrap,"div",null,"title"),"Search for: "+text); // title
wikify(body,createTiddlyElement(wrap,"div",null,"viewer")); // report
return panel;
}
config.macros.search.showPanel=function(show,pos) {
var panel=document.getElementById("searchPanel");
var i=panel.getElementsByTagName("input")[0];
i.onfocus=show?function(){config.macros.search.stayFocused(true);}:null;
i.onblur=show?function(){config.macros.search.stayFocused(false);}:null;
if (show && panel.style.display=="block") { // if shown, grab focus, restore cursor
if (i&&this.stayFocused()) { i.focus(); this.setCursorPos(i,pos); }
return;
}
if(!config.options.chkAnimate) {
panel.style.display=show?"block":"none";
if (!show) { removeChildren(panel); config.macros.search.stayFocused(false); }
} else {
var s=new Slider(panel,show,false,show?"none":"children");
s.callback=function(e,p){e.style.overflow="visible";}
anim.startAnimating(s);
}
return panel;
}
config.macros.search.foldPanel=function(button) {
var d=document.getElementById("searchPanel").getElementsByTagName("div");
for (var i=0;i<d.length;i++) if (hasClass(d[i],"viewer")) var v=d[i]; if (!v) return;
var show=v.style.display=="none";
if(!config.options.chkAnimate)
v.style.display=show?"block":"none";
else {
var s=new Slider(v,show,false,"none");
s.callback=function(e,p){e.style.overflow="visible";}
anim.startAnimating(s);
}
button.innerHTML=show?"fold":"unfold";
return false;
}
config.macros.search.stayFocused=function(keep) { // TRUE/FALSE=set value, no args=get value
if (keep===undefined) return this.keepReportInFocus;
this.keepReportInFocus=keep;
return keep
}
config.macros.search.getCursorPos=function(i) {
var s=0; var e=0; if (!i) return { start:s, end:e };
try {
if (i.setSelectionRange) // FF
{ s=i.selectionStart; e=i.selectionEnd; }
if (document.selection && document.selection.createRange) { // IE
var r=document.selection.createRange().duplicate();
var len=r.text.length; s=0-r.moveStart('character',-100000); e=s+len;
}
}catch(e){};
return { start:s, end:e };
}
config.macros.search.setCursorPos=function(i,pos) {
if (!i||!pos) return; var s=pos.start; var e=pos.end;
if (i.setSelectionRange) //FF
i.setSelectionRange(s,e);
if (i.createTextRange) // IE
{ var r=i.createTextRange(); r.collapse(true); r.moveStart("character",s); r.select(); }
}
//}}}
// // SearchResults report generation
// note: these functions are defined globally, so they can be more easily redefined to customize report formats//
//{{{
if (!window.reportSearchResults) window.reportSearchResults=function(text,matches)
{
var cms=config.macros.search; // abbrev
var body=window.formatSearchResults(text,matches);
if (!config.options.chkSearchListTiddler) // show #searchResults panel
window.scrollTo(0,ensureVisible(cms.createPanel(text,matches,body)));
else { // write [[SearchResults]] tiddler
var title=cms.reportTitle;
var who=config.options.txtUserName;
var when=new Date();
var tags="excludeLists excludeSearch temporary";
var tid=store.getTiddler(title); if (!tid) tid=new Tiddler();
tid.set(title,body,who,when,tags);
store.addTiddler(tid);
story.closeTiddler(title);
story.displayTiddler(null,title);
}
}
if (!window.formatSearchResults) window.formatSearchResults=function(text,matches,opt)
{
var body='';
var title=config.macros.search.reportTitle
var q = config.options.chkRegExpSearch ? "/" : "'";
if (!opt) var opt="all";
var parts=opt.split("+");
for (var i=0; i<parts.length; i++) { var p=parts[i].toLowerCase();
if (p=="again"||p=="all") body+=window.formatSearchResults_again(text,matches);
if (p=="summary"||p=="all") body+=window.formatSearchResults_summary(text,matches);
if (p=="list"||p=="all") body+=window.formatSearchResults_list(text,matches);
if (p=="buttons"||p=="all") body+=window.formatSearchResults_buttons(text,matches);
}
return body;
}
if (!window.formatSearchResults_again) window.formatSearchResults_again=function(text,matches)
{
var title=config.macros.search.reportTitle
var body='';
// search again
body+='{{span{<<search "'+text.replace(/"/g,'"')+'">> /%\n';
body+='%/<html><input type="button" value="search again"';
body+=' onclick="var t=this.parentNode.parentNode.getElementsByTagName(\'input\')[0];';
body+=' config.macros.search.doSearch(t); return false;">';
if (!config.options.chkSearchResultsOptions) { // omit "options..."
body+='</html>}}}\n\n';
return body;
}
body+=' <a href="javascript:;" onclick="';
body+=' var e=this.parentNode.nextSibling;';
body+=' var show=e.style.display!=\'block\';';
body+=' if(!config.options.chkAnimate) e.style.display=show?\'block\':\'none\';';
body+=' else anim.startAnimating(new Slider(e,show,false,\'none\'));';
body+=' return false;">options...</a>';
body+='</html>@@display:none;border-left:1px dotted;margin-left:1em;padding:0;padding-left:.5em;font-size:90%;/%\n';
body+=' %/<<option chkSearchTitles>>titles /%\n';
body+=' %/<<option chkSearchText>>text /%\n';
body+=' %/<<option chkSearchTags>>tags /%\n';
body+=' %/<<option chkSearchFields>>fields /%\n';
body+=' %/<<option chkSearchShadows>>shadows\n';
body+=' <<option chkCaseSensitiveSearch>>case-sensitive /%\n';
body+=' %/<<option chkRegExpSearch>>text patterns /%\n';
body+=' %/<<option chkSearchByDate>>sorted by date\n';
body+=' <<option chkSearchHighlight>> highlight matching text in displayed tiddlers\n';
body+=' <<option chkIncrementalSearch>>incremental key-by-key search: /%\n';
body+=' %/{{twochar{<<option txtIncrementalSearchMin>>}}} or more characters, /%\n';
body+=' %/{{threechar{<<option txtIncrementalSearchDelay>>}}} msec delay\n';
body+=' <<option chkSearchOpenTiddlers>> search only in tiddlers that are currently displayed\n';
body+=' <<option chkSearchExcludeTags>>exclude tiddlers tagged with:\n';
body+=' {{editor{<<option txtSearchExcludeTags>>}}}/%\n';
body+='%/@@}}}\n\n';
return body;
}
if (!window.formatSearchResults_summary) window.formatSearchResults_summary=function(text,matches)
{
// summary: nn tiddlers found matching '...', options used
var body='';
var co=config.options; // abbrev
var title=config.macros.search.reportTitle
var q = co.chkRegExpSearch ? "/" : "'";
body+="''"+config.macros.search.successMsg.format([matches.length,q+"{{{"+text+"}}}"+q])+"''\n";
var opts=[];
if (co.chkSearchTitles) opts.push("titles");
if (co.chkSearchText) opts.push("text");
if (co.chkSearchTags) opts.push("tags");
if (co.chkSearchFields) opts.push("fields");
if (co.chkSearchShadows) opts.push("shadows");
if (co.chkSearchOpenTiddlers) body+="^^//search limited to displayed tiddlers only//^^\n";
body+="~~ searched in "+opts.join(" + ")+"~~\n";
body+=(co.chkCaseSensitiveSearch||co.chkRegExpSearch?"^^ using ":"")
+(co.chkCaseSensitiveSearch?"case-sensitive ":"")
+(co.chkRegExpSearch?"pattern ":"")
+(co.chkCaseSensitiveSearch||co.chkRegExpSearch?"matching^^\n":"");
return body;
}
if (!window.formatSearchResults_list) window.formatSearchResults_list=function(text,matches)
{
// bullet list of links to matching tiddlers
var body='';
var co=config.options; // abbrev
var pattern=co.chkRegExpSearch?text:text.escapeRegExp();
var sensitive=co.chkCaseSensitiveSearch?"mg":"img";
var link='{{tiddlyLinkExisting{<html><nowiki><a href="javascript:;" onclick="'
+'if(config.options.chkSearchHighlight)'
+' highlightHack=new RegExp(\x27'+pattern+'\x27.escapeRegExp(),\x27'+sensitive+'\x27);'
+'story.displayTiddler(null,\x27%0\x27);'
+'highlightHack = null; return false;'
+'" title="%2">%1</a></html>}}}';
for(var t=0;t<matches.length;t++) {
body+="* ";
if (co.chkSearchByDate)
body+=matches[t].modified.formatString('YYYY.0MM.0DD 0hh:0mm')+" ";
var title=matches[t].title;
var fixup=title.replace(/'/g,"\\x27").replace(/"/g,"\\x22");
var tid=store.getTiddler(title);
var tip=tid?tid.getSubtitle():''; tip=tip.replace(/"/g,""");
body+=link.format([fixup,title,tip])+'\n';
}
return body;
}
if (!window.formatSearchResults_buttons) window.formatSearchResults_buttons=function(text,matches)
{
// embed buttons only if writing SearchResults to tiddler
if (!config.options.chkSearchListTiddler) return "";
// "open all" button
var title=config.macros.search.reportTitle;
var body="";
body+="@@diplay:block;<html><input type=\"button\" href=\"javascript:;\" "
+"onclick=\"story.displayTiddlers(null,[";
for(var t=0;t<matches.length;t++)
body+="'"+matches[t].title.replace(/\'/mg,"\\'")+"'"+((t<matches.length-1)?", ":"");
body+="],1);\" accesskey=\"O\" value=\"open all matching tiddlers\"></html> ";
// "discard SearchResults" button
body+="<html><input type=\"button\" href=\"javascript:;\" "
+"onclick=\"discardSearchResults()\" value=\"discard "+title+"\"></html>";
body+="@@\n";
return body;
}
if (!window.discardSearchResults) window.discardSearchResults=function()
{
// remove the tiddler
story.closeTiddler(config.macros.search.reportTitle);
store.deleteTiddler(config.macros.search.reportTitle);
store.notify(config.macros.search.reportTitle,true);
}
//}}}
/***
|Name|SearchOptionsPluginInfo|
|Source|http://www.TiddlyTools.com/#SearchOptionsPlugin|
|Documentation|http://www.TiddlyTools.com/#SearchOptionsPluginInfo|
|Version|3.0.8|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|documentation|
|Description|Documentation for SearchOptionsPlugin|
Extend core search function with additional user-configurable options including selecting which data items to search, enabling/disabling incremental key-by-key searches, and generating a ''list of matching tiddler'' instead of immediately displaying all matches. This plugin also adds syntax for rendering 'search links' within tiddler content to embed one-click searches using pre-defined 'hard-coded' search terms.
!!!!!Search link Syntax
<<<
To insert a 'search link' into tiddler content, you can write:
{{{
[search[text to find]]
}}}
or
{{{
[search[text to display|text to find]]
}}}
Clicking on the resulting search link will trigger the search functionality, just as if the specified 'text to find' had been entered into the standard search input field usually displayed in the document sidebar.
<<<
!!!!!Inline output: search macro syntax
<<<
Alternatively, to embed search results lists directly into your tiddler content, you can use:
{{{
<<search "text" report>> (report is a literal keyword)
<<search "text" "heading" "separator">> (simple inline generator)
}}}
<<<
!!!!!Inline output examples:
<<<
*+++*[<<search "wood">>]>...
<<search "wood">>
===
*+++*[<<search "wood" "/%%/">>]>...
<<search "wood" "/%%/">>
===
*+++*[<<search "wood" "See also: ">>]>...
<<search "wood" "See also: ">>
===
*+++*[<<search "wood" "See also:\n*" "\n*">>]>...
<<search "wood" "See also:\n*" "\n*">>
===
*+++*[<<search "wood" report=list "See also:">>]>...
<<search "wood" report=list "See Also:" >>
===
*+++*[<<search "wood" report>>]>...
<<search "wood" report>>
===
*+++*[<<search "wood" report=>>]>...
<<search "wood" report=>>
===
*+++*[<<search "wood" report=all>>]>...
<<search "wood" report=all>>
===
*+++*[<<search "wood" report=summary+buttons+again+list>>]>...
<<search "wood" report=summary+buttons+again+list>>
===
*+++*[<<search "wood" report=summary+again>>]>...
<<search "wood" report=summary+again>>
===
*+++*[<<search "wood" report=summary>>]>...
<<search "wood" report=summary>>
===
<<<
!!!!!Configuration
<<<
Search in:
<<option chkSearchTitles>> titles <<option chkSearchText>> text <<option chkSearchTags>> tags <<option chkSearchFields>> fields <<option chkSearchShadows>> shadows
{{{<<option chkSearchTitles>> <<option chkSearchText>> <<option chkSearchTags>>}}}
{{{<<option chkSearchFields>> <<option chkSearchShadows>>}}}
<<option chkSearchHighlight>> Highlight matching text in displayed tiddlers {{{<<option chkSearchHighlight>>}}}
<<option chkSearchList>> Show list of matches {{{<<option chkSearchList>>}}}
<<option chkSearchListTiddler>> Write list to [[SearchResults]] tiddler {{{<<option chkSearchListTiddler>>}}}
<<option chkSearchTitlesFirst>> Show title matches first {{{<<option chkSearchTitlesFirst>>}}}
<<option chkSearchByDate>> Sort matching tiddlers by date {{{<<option chkSearchByDate>>}}}
<<option chkSearchResultsOptions>> Include {{{options...}}} slider in "search again" form
<<option chkIncrementalSearch>> Incremental key-by-key search: {{twochar{<<option txtIncrementalSearchMin>>}}} or more characters, {{threechar{<<option txtIncrementalSearchDelay>>}}} msec delay
{{{<<option chkSearchIncremental>> <<option txtSearchIncrementalMin>> <<option txtSearchIncrementalDelay>>}}}
<<option chkSearchOpenTiddlers>> Search only in tiddlers that are currently displayed {{{<<option chkSearchOpenTiddlers>>}}}
<<option chkSearchExcludeTags>> Exclude tiddlers tagged with: <<option txtSearchExcludeTags>>
{{{<<option chkSearchExcludeTags>>}}} {{{<<option txtSearchExcludeTags>>}}}
<<<
!!!!!Revisions
<<<
2010.05.03 3.0.8 added chkSearchResultsOptions to allow/omit the "options..." slider from the "search again" form
2010.02.25 3.0.7 in formatSearchResults_list, added declaration of local 'co' variable
2009.09.22 3.0.6 in TiddlyWiki.prototype.search, added 'match' param for core compatibility
2009.01.16 3.0.5 added chkSearchOpenTiddlers option to limit searches to displayed tiddlers only
2009.01.15 3.0.4 in formatSearchResults_list(), corrected link generation to properly handle single-quotes and double-quotes in tiddler titles
2009.01.09 3.0.3 added chkSearchHighlight to optionally disable highlighting of matched text
2009.01.05 3.0.2 in formatSearchResults_list(), set/clear 'highlightHack' via HTML links so that search term will be highlighted when displaying tiddlers.
2008.10.14 3.0.1 changed panel class from "tiddler" to "searchPanel" and added style definition for "searchPanel". Fixes ticket #771 (in IE, links from search results were reporting errors due to "fake" tiddler class wrapper)
2008.10.02 3.0.0 added optional list of tags to use for excluding tiddler from searches (default="excludeLists").
2008.09.24 2.9.9 performance improvment to reportSearchResults(): when rendering a real SearchResults tiddler, store.notify() isn't needed since the results tiddler is always explicitly closed and redrawn each time.
2008.09.20 2.9.8 corrected createPanel() and renderPanel() so toolbar will be correctly shown/hidden on mouseover/mouseout.
2008.09.19 2.9.7 fixes to panel handling for IE, Safari, and others. Changed panel id to #searchPanel and added .searchResults CSS class wrapper around panel content. Fixed fold/unfold handling.
2008.09.18 2.9.6 refactored panel handling code, added 'fold/unfold' panel toolbar command, added dynamic 'title' (shows search term), added txtIncrementalSearchMin option
2008.09.17 2.9.5 added focus and cursor handling for 'search again' field in #searchResults DIV report so that an incremental key-by-key search doesn't interfere with continuous typing into the field.
2008.09.17 2.9.4 fix 'flicker' when updating #searchResults DIV by wikify()ing to an 'offscreen' DIV and then using replaceChild() instead of using removeChildren() followed by wikify()
2008.09.16 2.9.3 changed report layout, added "search again" and collapsible 'options' section with incremental search checkbox and "txtIncrementalSearchDelay" timer tweak to onKeyPress()
2008.08.25 2.9.2 added animation to search results DIV. Also, the #searchResults DOM element is only auto-created if it does not exist ... and when closed, the DIV is simply hidden rather than removed. This allows custom placement of search results report in the PageTemplate definition.
2008.08.23 2.9.1 story column search results uses {{{<<moveablePanel>>}}}
2008.08.22 2.9.0 default is now to show search results at top of story column, similar to FND's SimpleSearchPlugin display, with an option to generate SearchResults tiddler as before. Also changed 'chkSearchIncremental' to 'chkIncrementalSearch' to match core option variable
2008.08.12 2.8.2 change default for chkSearchByDate back to FALSE, and adjusted "list" and "again" output formats (minor tweaks requested by PhilWhitehouse for use on TiddlyWiki.com)
2008.08.11 2.8.1 changed defaults for chkSearchTitlesFirst, chkSearchList and chkSearchShadows to TRUE to enable enhanced search results output as soon as plugin is installed.
2008.06.21 2.8.0 added extended syntax for {{{<<search "text" report heading>> and <<search "text" "heading" "seperator">>}}}
2008.05.03 2.7.1 in searchLink formatter handler(), use separate setAttribute() call instead of passing attribs to createTiddlyButton(). Avoids conflict with errant code in TiddlerNotesPlugin (v2.1 26/10/07)
2008.04.29 2.7.0 added searchLink formatter (syntax: {{{[search[text]]}}} or {{{[search[display|text]]}}})
2008.04.08 2.6.2 don't automatically add options to AdvancedOptions shadow tiddler
2007.02.17 2.6.1 added redefinition of config.macros.search.onKeyPress() to restore check to bypass key-by-key searching (i.e., when chkSearchIncremental==false), which had been unintentionally removed with v2.6.0
2007.02.13 2.6.0 remove redefinition of config.macros.search.handler since core now includes handling for ENTER key.
2007.02.08 2.5.1 include 'temporary' tag when creating SearchResults (for use with TemporaryTiddlersPlugin)
2007.01.29 2.5.0 added support for "sort results by date". Default is to sort alphabetically (standard). When sorted by dates, most recent changes are shown first
2006.10.10 2.4.0 added support for "search in tiddler data" (tiddler.fields) Default is to search extended data.
2006.04.06 2.3.0 added support for "search in shadow tiddlers". Default is *not* to search in the shadows (i.e. standard TW behavior). Note: if a shadow tiddler has a 'real' counterpart, only the real tiddler is searched, since the shadow is inaccessible for viewing/editing.
2006.02.03 2.2.1 rewrite timeout clearing code and blank search text handling to match 2.0.4 core release changes. note that core no longer permits "blank=all" searches, so neither does this plugin. To search for all, use "." with text patterns enabled.
2006.02.02 2.2.0 in search.handler(), KeyHandler() function clears 'left over' timeout when search input is < 3 chars. Prevents searching on shorter text when shortened by rapid backspaces (<500msec)
2006.02.01 2.1.9 in Story.prototype.search(), correct inverted logic for using/not using regular expressions when searching
also, blank search text now presents "No search text. Continue anyway?" confirm() message box, so search on blank can still be processed if desired by user.
2006.02.01 2.1.8 in doSearch(), added alert/return if search text is blank
2006.01.20 2.1.7 fixed setting of config.macros.search.reportTitle so that Tweaks can override it.
2006.01.19 2.1.6 improved SearchResults formatting, added a "search again" form to the report (based on a suggestion from MorrisGray)
define results report title using config.macros.search.reportTitle instead of hard-coding the tiddler title
2006.01.18 2.1.5 Created separate functions for reportSearchResults(text,matches) and discardSearchResults(), so that other developers can create alternative report generators.
2006.01.17 2.1.4 Use regExp.search() instead of regExp.test() to scan for matches. Correctd the problem where only half the matching tiddlers (the odd-numbered ones) were being reported.
2006.01.15 2.1.3 Added information (date/time, username, search options used) to SearchResults output
2006.01.10 2.1.2 use displayTiddlers() to render matched tiddlers. This lets you display multiple matching tiddlers, even if SinglePageModePlugin is enabled.
2006.01.08 2.1.1 corrected invalid variable reference, "txt.value" to "text" in story.search()
2006.01.08 2.1.0 re-write to match new store.search(), store.search.handler() and story.search() functions.
2005.12.30 2.0.0 Upgraded to TW2.0. When rendering SearchResults tiddler, closeTiddler() first to ensure display is refreshed.
2005.12.26 1.4.0 added option to search for matching text in tiddler tags
2005.12.21 1.3.7 use \\ to 'escape' single quotes in tiddler titles when generating "Open all matching tiddlers" link. Also, added access key: "O", to trigger "open all" link. Based on a suggestion by UdoBorkowski.
2005.12.18 1.3.6 call displayMessage() AFTER showing matching tiddlers so message is not cleared too soon
2005.12.17 1.3.5 if no matches found, just display message and delete any existing SearchResults tiddler.
2005.12.17 1.3.4 use {/%%/{/%%/{ and }/%%/}/%%/} to 'escape' display text in SearchResults tiddler to ensure that formatting contained in search string is not rendered. Based on a suggestion by UdoBorkowski.
2005.12.14 1.3.3 tag SearchResults tiddler with 'excludeSearch' so it won't list itself in subsequent searches. Based on a suggestion by UdoBorkowski.
2005.12.14 1.3.2 added "open all matching tiddlers..." link to search results output. Based on a suggestion by UdoBorkowski.
2005.12.10 1.3.1 added "discard search results" link to end of search list tiddler output for quick self-removal of 'SearchResults' tiddler.
2005.12.01 1.3.0 added chkSearchIncremental to enable/disable 'incremental' searching (i.e., search after each keystroke) (default is ENABLED).
added handling for Enter key so it can be used to start a search. Based on a suggestion by LyallPearce
2005.11.25 1.2.1 renamed from SearchTitleOrTextPlugin to SearchOptionsPlugin
2005.11.25 1.2.0 added chkSearchList option. Based on a suggestion by RodneyGomes
2005.10.19 1.1.0 added chkSearchTitlesFirst option. Based on a suggestion by ChristianHauck
2005.10.18 1.0.0 Initial Release. Based on a suggestion by LyallPearce.
<<<
A source of weights engineering information for the SAWE Capital Region Chapter
@@color(orange):~WeightsWiki@@
var old_lewcid_splash_restart=restart;
restart = function()
{ if (document.getElementById("SplashScreen"))
document.getElementById("SplashScreen").style.display = "none";
if (document.getElementById("contentWrapper"))
document.getElementById("contentWrapper").style.display = "block";
old_lewcid_splash_restart();
if (splashScreenInstall)
{if(config.options.chkAutoSave)
{saveChanges();}
displayMessage("TW SplashScreen has been installed, please save and refresh your TW.");
}
}
var oldText = store.getTiddlerText("MarkupPreHead");
if (oldText.indexOf("SplashScreen")==-1)
{var siteTitle = store.getTiddlerText("SiteTitle");
var splasher='\n\n<style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b>'+siteTitle +'</b> is loading<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div>';
if (! store.tiddlerExists("MarkupPreHead"))
{var myTiddler = store.createTiddler("MarkupPreHead");}
else
{var myTiddler = store.getTiddler("MarkupPreHead");}
myTiddler.set(myTiddler.title,oldText+splasher,config.options.txtUserName,null,null);
store.setDirty(true);
var splashScreenInstall = true;
}
/***
''Inspired by [[TiddlyPom|http://www.warwick.ac.uk/~tuspam/tiddlypom.html]]''
|Name|SplashScreenPlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#SplashScreenPlugin|
|Version|0.21 |
|Requires|~TW2.08+|
!Description:
Provides a simple splash screen that is visible while the TW is loading.
!Installation
Copy the source text of this tiddler to your TW in a new tiddler, tag it with systemConfig and save and reload. The SplashScreen will now be installed and will be visible the next time you reload your TW.
!Customizing
Once the SplashScreen has been installed and you have reloaded your TW, the splash screen html will be present in the MarkupPreHead tiddler. You can edit it and customize to your needs.
!History
* 20-07-06 : version 0.21, modified to hide contentWrapper while SplashScreen is displayed.
* 26-06-06 : version 0.2, first release
!Code
***/
//{{{
var old_lewcid_splash_restart=restart;
restart = function()
{ if (document.getElementById("SplashScreen"))
document.getElementById("SplashScreen").style.display = "none";
if (document.getElementById("contentWrapper"))
document.getElementById("contentWrapper").style.display = "block";
old_lewcid_splash_restart();
if (splashScreenInstall)
{if(config.options.chkAutoSave)
{saveChanges();}
displayMessage("TW SplashScreen has been installed, please save and refresh your TW.");
}
}
var oldText = store.getTiddlerText("MarkupPreHead");
if (oldText.indexOf("SplashScreen")==-1)
{var siteTitle = store.getTiddlerText("SiteTitle");
var splasher='\n\n<style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b>'+siteTitle +'</b> is loading<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div>';
if (! store.tiddlerExists("MarkupPreHead"))
{var myTiddler = store.createTiddler("MarkupPreHead");}
else
{var myTiddler = store.getTiddler("MarkupPreHead");}
myTiddler.set(myTiddler.title,oldText+splasher,config.options.txtUserName,null,null);
store.setDirty(true);
var splashScreenInstall = true;
}
//}}}
----
AaA BbB CcC DdD EeE FfF GgG HhH IiI JjJ KkK LlL MmM NnN OoO PpP QqQ RrR TtT UuU VvV WwW XxX YyY ZzZ
----
!!!Sag
is the straining of the ship that tends to make the middle portion lower than the bow and stern. Opposite of hog.
!!!SAWE
is the acronym for the Society of Allied Weight Engineers.
!!!Scantlings
are the dimensions of various shapes or the ship itself.
!!!Sea Chest
is an opening for supplying seawater to condensers, pumps, etc., and for discharging water from the ship’s water systems to the sea. It is a cast or built-up structure located in the hull below the
waterline and attached to internal piping.
!!!Service Life Allowances (SLA)
are weight and KG budgets included in the design to accommodate changes due to both authorized (e.g., ship alterations) and unplanned growth (e.g., paint, personal effects, etc. ) during the ship’s operational lifetime.
!!!SHP
is the shaft horsepower rating of a ship or marine vehicle.
!!!Sheer
is the longitudinal curve of a ship’s decks in a vertical plane, the usual reference being to the ship’s side. Due to sheer, a vessel’s deck height above the baseline is higher at the ends than amidships.
!!!Sheer Plan
is, along with the Body Plan and Half-breadth Plan, one of the traditional drawings used to express the hull dimensions onto a flat drawing. The drawing shows a series of buttock lines representing the intersection of the hull with longitudinal planes from centerline to the extreme beam.
!!!Shell Expansion
is a drawing showing the seams and butts, thickness, and associated welding or riveting of all plates comprising the shell plating, framing, etc. The plan shows the shell plating as if flattened out onto the paper. This drawing should not be confused with an outboard profile.
!!!Shell Plating
are the plates forming the outer skin of the hull.
!!!~ShipAlt
is the acronym for Ship Alteration. This is normally a permanent change to the ship; any weight associated with a shipalt would be added to the light ship.
!!!SNAME
is the acronym for the Society of Naval Architects and Marine Engineers.
!!!Sounding
is the act of measuring the level of a fluid in a tank. This is usually done by dropping a weighted tape measure down the tank’s sounding tube. Tank sounding tables are used to convert the sounding measurement to a capacity. See also Ullage.
!!!SRA
stands for Selected Restricted Availability. This is a short maintenance period for naval ships and submarines.
!!!Stability
is that property of a floating body which causes it, when disturbed from a condition of equilibrium, to develop forces or moments which tend to restore the body to its original condition.
!!!Stable Ship
A ship is stable when it has a positive distance GM (i.e. M above G). Increasing GM will result in a stiffer ship, one that resists inclining and returns to an upright position quickly.
!!!Starboard
is the right hand side of the ship while looking forward.
!!!Strength Deck
is the deck that is designed as the uppermost part of the main hull longitudinal strength girder. The bottom shell plating forms the lowermost part of this girder.
!!!SUBSAFE
is a U.S. Navy program providing for certification and supporting documents to the effect that all submarine systems and components are of sound construction and capable of withstanding deep submergence pressures.
!!!Superstructure
is a decked-over structure above the upper deck, the outboard sides of which are formed by the shell plating. For a submarine this is usually any non-pressure hull plating extending above the pressure hull.
!!!SWATH
stands for Small Waterplane Area Twin Hull which is a unique ship catamaran type ship designed to be less affected by sea states than regular hull forms.
.viewer {
line-height: 125%;
font-family: georgia;
font-size: 12pt;
text-align: justify;
}
.tiddler { border: 1px solid rgb(170, 170, 170); margin: 0pt 10px 20px; padding: 8px; font-family: verdana; background-color: rgb(243, 243, 243); }
Any and all suggestions are welcome for the website, the chapter, SAWE, or maybe just engineering in general. Feel free to [[email|mailto:telletdl99@mac.com]] us your thoughts and we will post them here (the comments tool is currently out of order).
|!Multiply:|!By:|!To Obtain:||
|Rankine (R)|0.555555|Kelvin (K)|Add 459.670 to Fahrenheit to obtain Rankine|
|Kelvin (K)|1.8|Rankine (R)|Add 273.150 to Centigrade or Celsius to obtain Kelvin|
||||Centigrade = 5/9 (Fahrenheit - 32)|
||||Fahrenheit = (9/5 x Centigrade ) + 32|
/***
|Name|TiddlerPasswordPlugin|
|Source|http://www.TiddlyTools.com/#TiddlerPasswordPlugin|
|Documentation|http://www.TiddlyTools.com/#TiddlerPasswordPluginInfo|
|Version|1.1.3|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|block viewing of tiddler content by prompting for a password before content is displayed|
This plugin blocks viewing of specific tiddler content by prompting for a NON-SECURE, UNENCRYPTED password before the tiddler is displayed. If the correct password is not entered, the tiddler is automatically closed. The process does not prevent tiddler content from being viewed directly from the TiddlyWiki source file's storeArea, nor does it encrypt the tiddler content in any way. Because it is relatively simple to bypass and/or disable the password prompting process, this macro should be thought of as a "latch" rather than a "lock" on a given tiddler.
!!!!!Documentation
> see [[TiddlerPasswordPluginInfo]]
!!!!!Installation Notes
<<<
''As soon as you have installed this plugin, you should change the default admin password in [[TiddlerPasswordPluginConfig]].'' Note: the configuration tiddler is password-protected to prevent the admin password from being viewed (and/or modified) unless the current password is provided. By default, the admin password is set to "admin".
<<<
!!!!!Revisions
<<<
2008.03.10 [*.*.*] plugin size reduction - documentation moved to [[TiddlerPasswordPluginInfo]]
2007.09.13 [1.1.3] adjusted wording of "cancelMsg" text so it can apply to either view-mode or edit-mode activities, and documented usage in ViewTemplate/EditTemplate.
| Please see [[TiddlerPasswordPluginInfo]] for previous revision details |
2006.12.02 [1.0.0] initial release - converted from GetTiddlerPassword inline script
<<<
!!!!!Code
***/
//{{{
version.extensions.getTiddlerPassword= {major: 1, minor: 1, revision: 3, date: new Date(2007,9,13)};
config.macros.getTiddlerPassword = {
msg: "Please enter a password to view '%0'",
defaultText: "enter password here",
retryMsg: "'%0' is not the correct password for '%1'. Please try again:",
cancelMsg: "Sorry, you cannot access '%0' without a valid password.",
thanksMsg: "Thank you, your password has been accepted.",
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var here=story.findContainingTiddler(place); if (!here) return;
var title=tiddler?tiddler.title:here.getAttribute("tiddler");
var who=here.getAttribute("logID");
var userPass=params[0]?params[0]:""; if (userPass=='-') userPass="";
var msg=params[1]?params[1]:this.msg;
if (who==userPass||who==this.adminPass) return; // already 'logged in'?
var who=prompt(msg.format([title]),this.defaultText); // ask for ID
while (who && who!=userPass && who!=this.adminPass) // not correct ID?
who=prompt(this.retryMsg.format([who,title]),this.defaultText); // ask again
if (who==userPass||who==this.adminPass) // correct ID? mark tiddler logged in...
{ here.setAttribute("logID",who); alert(this.thanksMsg); }
else // incorrect ID (e.g., entry cancelled by user)...
{ story.closeTiddler(here.getAttribute("tiddler")); alert(this.cancelMsg.format([title])); }
}
}
// default admin password (may be overridden in TiddlerPasswordPluginConfig)
if (config.macros.getTiddlerPassword.adminPass==undefined)
config.macros.getTiddlerPassword.adminPass="admin";
//}}}
// // Tiddler Admin Password Configuration... <<getTiddlerPassword>> /% rest of tiddler will not be displayed without password... %/
//{{{
config.macros.getTiddlerPassword.adminPass="asdfasdf";
//}}}
// {{small{NOTE: after changing the password, save-and-reload the document for the change to take effect}}} //
/***
|Name|TiddlerPasswordPlugin|
|Source|http://www.TiddlyTools.com/#TiddlerPasswordPlugin|
|Documentation|http://www.TiddlyTools.com/#TiddlerPasswordPluginInfo|
|Version|1.1.3|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|documentation|
|Requires||
|Overrides||
|Description|documentation for TiddlerPasswordPlugin|
This plugin blocks viewing of specific tiddler content by prompting for a NON-SECURE, UNENCRYPTED password before the tiddler is displayed. If the correct password is not entered, the tiddler is automatically closed. The process does not prevent tiddler content from being viewed directly from the TiddlyWiki source file's storeArea, nor does it encrypt the tiddler content in any way. Because it is relatively simple to bypass and/or disable the password prompting process, this macro should be thought of as a "latch" rather than a "lock" on a given tiddler.
!!!!!Usage
<<<
in tiddler content:
>{{{<<getTiddlerPassword>>}}}
>{{{<<getTiddlerPassword password>>}}}
>{{{<<getTiddlerPassword password "prompt message">>}}}
>{{{<<getTiddlerPassword - "prompt message">>}}}
in ViewTemplate or EditTemplate:
>{{{<span macro='getTiddlerPassword ...'></span>}}}
Place the {{{<<getTiddlerPassword>>}}} or {{{<span macro='getTiddlerPassword ...'></span>}}} macro at the beginning of your tiddler content, ViewTemplate and/or EditTemplate. The macro prompts for a password until either A) the correct password is entered or B) the user presses the cancel button from the prompt box, in which case the tiddler is automatically closed so it cannot be viewed/edited. If a valid password is input, it will be remembered only until the user closes the tiddler. Each time the tiddler is opened, the password must be re-entered.
The optional ''password'' parameter provides a "user-level" password for the tiddler in which the macro occurs. If no user password is provided, then only the admin-level password (see below) will be accepted.
By default, the prompt message reads: "Please enter a password to view '%0'" (where the %0 is automatically replaced by the name of the tiddler in which the macro occurs) To change this text, enter an additional macro parameter, following the user password.
>Note: because the prompt text is likely to contain spaces, you should always enclose it in quotes (or use {{{[[...]]}}} if it contains quotes). In addition, to enter an alternative prompt without providing a user-level password, use "-" as a //placeholder// for the password parameter.
* You can set a hard-coded admin password (see below) to define a "universal passkey" that will grant access to all tiddlers protected by this script, regardless of the individual password used on each protected tiddler.
* If you embed one or more password-protected tiddlers within another tiddler (by using the {{{<<tiddler TiddlerName>>}}} macro) the user will be prompted to provide the appropriate password for the EACH protected tiddler contained in the tiddler being rendered.
<<<
!!!!!Installation Notes
<<<
''As soon as you have installed this plugin, you should change the default admin password in [[TiddlerPasswordPluginConfig]].'' Note: the configuration tiddler is password-protected to prevent the admin password from being viewed (and/or modified) unless the current password is provided. By default, the admin password is set to "admin".
<<<
!!!!!Revisions
<<<
2008.03.10 [*.*.*] plugin size reduction - documentation moved to [[TiddlerPasswordPluginInfo]]
2007.09.13 [1.1.3] adjusted wording of "cancelMsg" text so it can apply to either view-mode or edit-mode activities, and documented usage in ViewTemplate/EditTemplate.
2007.05.06 [1.1.2] changed admin password tiddler name from TiddlerPasswordConfig to TiddlerPasswordPluginConfig so it will be processed AFTER the plugin's default initialization
2007.02.22 [1.1.1] updated documentation for using custom prompt text
2007.01.01 [1.1.0] added optional param for using custom prompt text
2006.12.03 [1.0.1] handler() uses passed-in 'tiddler.title' (if any), so that title of included protected tiddlers can be correctly displayed (instead of showng title of containing tiddler)
2006.12.02 [1.0.0] initial release - converted from GetTiddlerPassword inline script
<<<
----
AaA BbB CcC DdD EeE FfF GgG HhH IiI JjJ KkK LlL MmM NnN OoO PpP QqQ RrR SsS UuU VvV WwW XxX YyY ZzZ
----
!!!TCB
is the Transverse Center of Buoyancy. This is measured in feet from the main axis of the ship to port (left) or starboard (right) while looking forward.
!!!TCG
is the Transverse Center of Gravity. This is measured in feet from the main axis of the ship to port (left) or starboard (right) while looking forward.
!!!TLI
stands for Tank Level Indicator. ~TLIs are remote gauges that indicate tank levels. They are notoriously inaccurate.
!!!Ton
is the standard weight measure. In American shipbuilding (with some exceptions1) ton and long ton are equivalent terms and equate to 2240 pounds.
!!!Tonnage
Gross and net tonnage are measures of vessel volume or cubic capacities converted to tonnage units and are certified by the government or a recognized measurement authority. Under the Suez Canal rules and U.S. domestic (Regulatory) tonnage rules, a ton is equivalent to 100 cubic feet. Gross and net tonnage is used as bases for application of law, service fees, custom duties and canal tools. Gross tonnage is based on the total volume within the enclosed portion of a ship’s structure, including deckhouse, with certain exception. Net tonnage is intended to be a measure of a vessel’s earning capacity, such as space available for passengers and cargo and excludes spaces used for propulsion, fuel, crew, operation of a vessel that do not contribute to the earning capacity. There is no mathematical correlation between the gross and net tonnage and displacement tonnage of a ship. Displacement tonnage is a measure of vessel weight usually in long tons (2240 pounds).
!!!Tonne
is a metric ton or 1000 kilograms. This equates to 2204.6 pounds.
!!!Totalizer
is a flowmeter used by ships and submarines to measure fluid amounts flowing into or out of tanks. These are normally calibrated on a regular basis and are more accurate than ~TLIs.
!!!TPI
stands for tons per inch immersion. It is the weight in tons of sea water displaced by the ship in sinking a distance of 1 inch from that waterline without change in transverse or longitudinal inclination.
!!!Trim
is the difference between the draft forward and the draft aft. If the draft forward is the greater, the ship is said to “trim by the head”. If the aft draft is greater, the ship is “trimming by the stern”. Trim may also be expressed in degrees by the stern or by the bow.
!!!Tumblehome
is the inboard slope of a ship’s side, usually above the designed waterline. Opposite of Flare. See Figure under Depth.
!!!!Now you can follow your chapter news and events on Twitter:
!!!!follow @SAWECRC or access Twitter right here.
<<tiddler TwitterTabs>>
/%
!legal
|Name|TwitterTabs|
|Source|http://www.TiddlyTools.com/#TwitterTabs|
|Version|2.0.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|Find recent tweets by keyword or username and show results in tabs|
!end
- - - - - DO NOT EDIT ABOVE THIS LINE - - - - -
- - - - - TABSET SECTION - - - - -
!tabset
<<tabs txtTwitterTabs
'find...' 'find tweets containing...' [[TwitterTabs##search]]
'from...' 'show tweets from...' [[TwitterTabs##user]]
'SAWECRC' 'show tweets from @SAWECRC' [[TwitterTabs##SAWECRC]]
'TwitterTabsInfo' 'documentation for TwitterTabs' [[TwitterTabs##info]]
>>
!SAWECRC
<<tiddler [[TwitterTabs##showUserResults]] with: SAWECRC>>
!jermolene
<<tiddler [[TwitterTabs##showUserResults]] with: jermolene>>
!end
- - - - - TWEETFORMAT SECTION - - - - -
reminder: %0=image, %1=name, %2=text, %3=timestamp
!tweetformat
@@font-size:8pt;display:block;line-height:110%;
~~[<img[%0]]''[[%1|http://twitter.com/%1]] //%3//:''~~
%2 {{tagClear{
}}}@@
!end
- - - - - DO NOT EDIT BELOW THIS LINE - - - - -
!info
<<tiddler TwitterTabs##legal>>Usage
<<<
{{{
<<tiddler TwitterTabs>>
}}}
<<<
Configuration
<<<
Copy TwitterTabs into your document. Then, ''edit the tiddler to suit your preferences'' by adding/removing definitions from the ''tabset'' and related sections:<<tiddler TwitterTabs##showcode with: tabset>><<tiddler TwitterTabs##showcode with: tiddlytools>><<tiddler TwitterTabs##showcode with: jermolene>>You can also customize the appearance of the individual tweets by editing the ''tweetformat'' section, which uses //replacement markers// to insert values extracted from each tweet returned by Twitter's search results, where ''%0=user image, %1=user name, %2=tweet content,'' and ''%3=tweet timestamp''<<tiddler TwitterTabs##showcode with: tweetformat>>The most recently entered 'find... and 'from... search terms are automatically saved as TiddlyWiki cookie-based option values. You can override these values by placing the following statements into a tiddler tagged with 'systemConfig'. Each time you reload your document, the default inputs will be reset to these hard-coded values, rather than using the last value entered.
{{{
config.options["txtTweetSearch"]="search text";
config.options["txtTweetUser"]="username";
}}}
!showcode
<<tiddler TwitterTabs##out with: {{'!$1\n'+store.getTiddlerText('TwitterTabs##$1').replace(/\n\}\}\}/g,'\n}\}\}')}}>>
!out
{{{
$1
}}}
!end
!search
<<tiddler [[TwitterTabs##showSearchForm]] with: {{config.options.txtTweetSearch||'TiddlyWiki'}}>>
!user
<<tiddler [[TwitterTabs##showUserForm]] with: {{config.options.txtTweetUser||'TiddlyWiki'}}>>
!end
!showSearchForm
{{small smallform{
search for tweets containing: <<option {{config.options.txtTweetSearch='$1';'txtTweetSearch'}}>><html>
<nowiki><input type='button' value='search' onclick="
var target=this.parentNode.parentNode.parentNode;
var out='\<\<tiddler [[TwitterTabs##showSearchForm]] with: {{config.options.txtTweetSearch}}\>\>';
removeChildren(target); wikify(out,target); return false;
"></html>@@display:block;white-space:normal;<<tiddler [[TwitterTabs##showSearchResults]]
with: {{config.options.txtTweetSearch}}>>@@}}}
!end
!showUserForm
{{small smallform{
show tweets from: <<option {{config.options.txtTweetUser='$1';'txtTweetUser'}}>><html>
<nowiki><input type='button' value='search' onclick="
var target=this.parentNode.parentNode.parentNode;
var out='\<\<tiddler [[TwitterTabs##showUserForm]] with: {{config.options.txtTweetUser}}\>\>';
removeChildren(target); wikify(out,target); return false;
"></html>@@display:block;white-space:normal;<<tiddler [[TwitterTabs##showUserResults]]
with: {{config.options.txtTweetUser}}>>@@}}}
!end
!showSearchResults
<<tiddler TwitterTabs##callback>>{{toolbar{<html><a href='javascript:;' onclick="
var target=this.parentNode.parentNode.parentNode;
var out='<<tiddler [[TwitterTabs##showSearchResults]] with: [[$1]]>>';
removeChildren(target); wikify(out,target); return false;
">refresh</a><nowiki></html>}}}~~__[[Recent tweets about: "$1"|http://search.twitter.com/search?q=$1]]__~~
<hr>@@display:block;height:20em;overflow:auto;<<tiddler {{
window.twitterPlace=null;
'';}}>><<tiddler {{
if (!window.twitterPlace) { window.twitterPlace=place;
place.innerHTML='connecting to twitter.com...Press refresh after a moment ...';
var s=document.createElement("script");
s.src="http://search.twitter.com/search.json?q=$1&rpp=25&callback=twitterCallback";
document.body.appendChild(s);
document.body.removeChild(s);
}
'';}}>>@@@@display:block;text-align:right;^^scroll for more...^^@@
!end
!showUserResults
<<tiddler TwitterTabs##callback>>{{toolbar{<html><a href='javascript:;' onclick="
var target=this.parentNode.parentNode.parentNode;
var out='<<tiddler [[TwitterTabs##showUserResults]] with: [[$1]]>>';
removeChildren(target); wikify(out,target); return false;
">refresh</a><nowiki></html>}}}~~__[[Recent tweets from $1|http://twitter.com/$1]]__~~
<hr>@@display:block;height:20em;overflow:auto;<<tiddler {{
window.twitterPlace=null;
'';}}>><<tiddler {{
if (!window.twitterPlace) { window.twitterPlace=place;
place.innerHTML='connecting to twitter.com...Press refresh after a moment ...';
var s=document.createElement("script");
s.src="http://twitter.com/statuses/user_timeline/$1.json?callback=twitterCallback";
document.body.appendChild(s);
document.body.removeChild(s);
}
'';}}>>@@@@display:block;text-align:right;^^scroll for more...^^@@
!end
!callback
<<tiddler {{
window.twitterCallback=function(data){ // data object returned from twitter.com
var fmt=store.getTiddlerText('TwitterTabs##tweetformat');
if (data.results) data=data.results; // for SEARCH results
removeChildren(window.twitterPlace);
for (var i=0; i<data.length; i++) { var item=data[i];
var img=item.user? item.user.profile_image_url : item.profile_image_url;
var who=item.user? item.user.screen_name : item.from_user;
wikify(fmt.format([img,who,item.text,item.created_at]),window.twitterPlace);
}
}
'';}}>>
!end
%/<<tiddler {{tiddler&&tiddler.title=='TwitterTabs'?'HideTiddlerBackground':''}}>>/%
%/<<tiddler {{tiddler&&tiddler.title=='TwitterTabs'?'HideTiddlerTags':''}}>>/%
%/<<tiddler TwitterTabs##tabset>>
/%
!legal
|Name|TwitterTabs|
|Source|http://www.TiddlyTools.com/#TwitterTabs|
|Version|2.0.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|Find recent tweets by keyword or username and show results in tabs|
!end
- - - - - DO NOT EDIT ABOVE THIS LINE - - - - -
- - - - - TABSET SECTION - - - - -
!tabset
<<tabs txtTwitterTabs
'find...' 'find tweets containing...' [[TwitterTabs##search]]
'from...' 'show tweets from...' [[TwitterTabs##user]]
'SAWECRC' 'show tweets from @SAWECRC' [[TwitterTabs##SAWECRC]]
'TwitterTabsInfo' 'documentation for TwitterTabs' [[TwitterTabs##info]]
>>
!SAWECRC
<<tiddler [[TwitterTabs##showUserResults]] with: SAWECRC>>
!end
- - - - - TWEETFORMAT SECTION - - - - -
reminder: %0=image, %1=name, %2=text, %3=timestamp
!tweetformat
@@font-size:8pt;display:block;line-height:110%;
~~[<img[%0]]''[[%1|http://twitter.com/%1]] //%3//:''~~
%2 {{tagClear{
}}}@@
!end
- - - - - DO NOT EDIT BELOW THIS LINE - - - - -
!info
<<tiddler TwitterTabs##legal>>Usage
<<<
{{{
<<tiddler TwitterTabs>>
}}}
<<<
Configuration
<<<
Copy TwitterTabs into your document. Then, ''edit the tiddler to suit your preferences'' by adding/removing definitions from the ''tabset'' and related sections:<<tiddler TwitterTabs##showcode with: tabset>><<tiddler TwitterTabs##showcode with: tiddlytools>><<tiddler TwitterTabs##showcode with: jermolene>>You can also customize the appearance of the individual tweets by editing the ''tweetformat'' section, which uses //replacement markers// to insert values extracted from each tweet returned by Twitter's search results, where ''%0=user image, %1=user name, %2=tweet content,'' and ''%3=tweet timestamp''<<tiddler TwitterTabs##showcode with: tweetformat>>The most recently entered 'find... and 'from... search terms are automatically saved as TiddlyWiki cookie-based option values. You can override these values by placing the following statements into a tiddler tagged with 'systemConfig'. Each time you reload your document, the default inputs will be reset to these hard-coded values, rather than using the last value entered.
{{{
config.options["txtTweetSearch"]="search text";
config.options["txtTweetUser"]="username";
}}}
!showcode
<<tiddler TwitterTabs##out with: {{'!$1\n'+store.getTiddlerText('TwitterTabs##$1').replace(/\n\}\}\}/g,'\n}\}\}')}}>>
!out
{{{
$1
}}}
!end
!search
<<tiddler [[TwitterTabs##showSearchForm]] with: {{config.options.txtTweetSearch||'TiddlyWiki'}}>>
!user
<<tiddler [[TwitterTabs##showUserForm]] with: {{config.options.txtTweetUser||'TiddlyWiki'}}>>
!end
!showSearchForm
{{small smallform{
search for tweets containing: <<option {{config.options.txtTweetSearch='$1';'txtTweetSearch'}}>><html>
<nowiki><input type='button' value='search' onclick="
var target=this.parentNode.parentNode.parentNode;
var out='\<\<tiddler [[TwitterTabs##showSearchForm]] with: {{config.options.txtTweetSearch}}\>\>';
removeChildren(target); wikify(out,target); return false;
"></html>@@display:block;white-space:normal;<<tiddler [[TwitterTabs##showSearchResults]]
with: {{config.options.txtTweetSearch}}>>@@}}}
!end
!showUserForm
{{small smallform{
show tweets from: <<option {{config.options.txtTweetUser='$1';'txtTweetUser'}}>><html>
<nowiki><input type='button' value='search' onclick="
var target=this.parentNode.parentNode.parentNode;
var out='\<\<tiddler [[TwitterTabs##showUserForm]] with: {{config.options.txtTweetUser}}\>\>';
removeChildren(target); wikify(out,target); return false;
"></html>@@display:block;white-space:normal;<<tiddler [[TwitterTabs##showUserResults]]
with: {{config.options.txtTweetUser}}>>@@}}}
!end
!showSearchResults
<<tiddler TwitterTabs##callback>>{{toolbar{<html><a href='javascript:;' onclick="
var target=this.parentNode.parentNode.parentNode;
var out='<<tiddler [[TwitterTabs##showSearchResults]] with: [[$1]]>>';
removeChildren(target); wikify(out,target); return false;
">refresh</a><nowiki></html>}}}~~__[[Recent tweets about: "$1"|http://search.twitter.com/search?q=$1]]__~~
<hr>@@display:block;height:20em;overflow:auto;<<tiddler {{
window.twitterPlace=null;
'';}}>><<tiddler {{
if (!window.twitterPlace) { window.twitterPlace=place;
place.innerHTML='connecting to twitter.com...Press refresh after a few seconds here ...';
var s=document.createElement("script");
s.src="http://search.twitter.com/search.json?q=$1&rpp=25&callback=twitterCallback";
document.body.appendChild(s);
document.body.removeChild(s);
}
'';}}>>@@@@display:block;text-align:right;^^scroll for more...^^@@
!end
!showUserResults
<<tiddler TwitterTabs##callback>>{{toolbar{<html><a href='javascript:;' onclick="
var target=this.parentNode.parentNode.parentNode;
var out='<<tiddler [[TwitterTabs##showUserResults]] with: [[$1]]>>';
removeChildren(target); wikify(out,target); return false;
">refresh</a><nowiki></html>}}}~~__[[Recent tweets from $1|http://twitter.com/$1]]__~~
<hr>@@display:block;height:20em;overflow:auto;<<tiddler {{
window.twitterPlace=null;
'';}}>><<tiddler {{
if (!window.twitterPlace) { window.twitterPlace=place;
place.innerHTML='connecting to twitter.com...';
var s=document.createElement("script");
s.src="http://twitter.com/statuses/user_timeline/$1.json?callback=twitterCallback";
document.body.appendChild(s);
document.body.removeChild(s);
}
'';}}>>@@@@display:block;text-align:right;^^scroll for more...^^@@
!end
!callback
<<tiddler {{
window.twitterCallback=function(data){ // data object returned from twitter.com
var fmt=store.getTiddlerText('TwitterTabs##tweetformat');
if (data.results) data=data.results; // for SEARCH results
removeChildren(window.twitterPlace);
for (var i=0; i<data.length; i++) { var item=data[i];
var img=item.user? item.user.profile_image_url : item.profile_image_url;
var who=item.user? item.user.screen_name : item.from_user;
wikify(fmt.format([img,who,item.text,item.created_at]),window.twitterPlace);
}
}
'';}}>>
!end
%/<<tiddler {{tiddler&&tiddler.title=='TwitterTabs'?'HideTiddlerBackground':''}}>>/%
%/<<tiddler {{tiddler&&tiddler.title=='TwitterTabs'?'HideTiddlerTags':''}}>>/%
%/<<tiddler TwitterTabs##tabset>>
!!!Virginia Beach
8 Oct 2009
Two recommended practices were approved during a rare mid-year board of directors meeting during the Hampton Roads Regional Conference held in Virginia Beach on 8 October 2009.
The two ~RPs were the revision of RP 13 and the new RP M-1 Weight Distribution and Moments of Inertia for Marine Vehicles. These are in the DMS area of SAWE.org but not yet in the main RP section.
----
AaA BbB CcC DdD EeE FfF GgG HhH IiI JjJ KkK LlL MmM NnN OoO PpP QqQ RrR SsS TtT VvV WwW XxX YyY ZzZ
----
!!!Ullage
is the measurement of a tank expressed in terms of emptiness. It is usually measured by dropping a tape measure into the tank and measuring the distance from the tank top to the fluid level. See also Sounding.
!!!Unit Weight
is the weight of the smallest part of the structure or component that should listed in the weight report. For example, the unit weight of steel plating can be the weight per square foot for that thickness of plate.
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
|!Multiply:|!By:|!To Obtain:|!Multiply:|!By:|!To Obtain:|
|acre-feet| 43560|cubic feet|Gallons (US liquid)| 3.785412|liters|
|acre-feet| 1233.4814|cubic meters|Gallons (US liquid)| 8|pints (liquid)|
|acre-feet| 3.259x10+5|gallons|gills (US)| 7.219|cubic inches|
|barrel (US dry)| 3.281|bushels|gills (US)| 0.1183|liters|
|barrel (US dry)| 0.1589|cubic meters|gills (US)| 0.25|pints (liquid)|
|barrel (US liquid)| 31.5|gallons|hectoliters| 100|liters|
|board-feet *| 144|cubic inches|kiloliters| 264.18|gallons (US)|
|board-feet *| 0.002359737|cubic meters|kiloliters| 1000|liters|
|bushels (US)| 1.244456|cubic feet|lbs of water 39.2deg F| 0.01602|cubic feet|
|bushels (US)| 35.24|liters|lbs of water 39.2deg F| 27.68|cubic inches|
|bushels (US)| 4|pecks|lbs of water 39.2deg F| 0.1198|gallons (US)|
|bushels (US)| 32|quarts (dry)|lbs of water 39.2deg F| 0.4536|liters|
|centiliters| 0.01|liters|liters| 0.02838|bushels (US dry)|
|centiliters| 0.3382|ounces (US liquid)|liters| 1000|cubic centimeters|
|cord-feet| 16|cubic feet|liters| 0.035315|cubic feet|
|cords| 128|cubic feet|liters| 61.02374|cubic inches|
|cords| 3.62457|cubic meters|liters| 0.001|cubic meters|
|cubic centimeters| 0.06102|cubic inches|liters| 0.00130795|cubic yards|
|cubic centimeters| 2.642 x 10-4|gallons (US)|liters| 0.264172|gallons (US)|
|cubic centimeters| 0.001|liters|liters| 2.2|lbs of water 39.2deg F|
|cubic centimeters| 0.002113|pints (US liquid)|liters| 2.113|pints (liquid)|
|cubic feet| 0.80357|bushels|liters| 0.9081|quarts (dry)|
|cubic feet| 1728|cubic inches|liters| 1.056688|quarts (liquid)|
|cubic feet| 0.028316|cubic meters|microliters| 1 x 10-6|liters|
|cubic feet| 0.03704|cubic yards|Mil-feet (circular)| 1.545 x 10-4|cubic centimeters|
|cubic feet| 7.48052|gallons|Mil-feet (circular)| 9.425 x 10-6|cubic inches|
|cubic feet| 62.4262|lbs of water 39.2deg F|Ounce (UK liquid)| 28.413|cubic centimeters|
|cubic feet| 28.31685|liters|Ounce (US liquid)| 29.574|cubic centimeters|
|cubic feet| 29.92|quarts (liquid)|pecks (british)| 554.6|cubic inches|
|cubic inches| 16.39|cubic centimeters|pecks (british)| 9.0919|liters|
|cubic inches| 5.787 x 10-4|cubic feet|pecks (US)| 0.25|bushels|
|cubic inches| 0.004329|gallon|pecks (US)| 537.6|cubic inches|
|cubic inches| 0.01639|liters|pecks (US)| 8.8096|liters|
|cubic meters| 28.38|bushels|pecks (US)| 8|quarts (dry)|
|cubic meters| 35.314667|cubic feet|perches| 24.75|cubic feet|
|cubic meters| 61023|cubic inches|perches| 0.7008|cubic meters|
|cubic meters| 1.308|cubic yards|pints (dry)| 33.6|cubic inches|
|cubic meters| 264.2|gallons|pints (dry)| 0.55059|liters|
|cubic meters| 2203|lbs of water 39.2deg F|pints (dry)| 0.5|quarts (dry)|
|cubic meters| 1000|liters|pints (liquid)| 473.1765|cubic centimeters|
|cubic yards| 21.7|bushels|pints (liquid)| 28.87|cubic inches|
|cubic yards| 27|cubic feet|pints (liquid)| 1.042|lbs of water 39.2deg F|
|cubic yards| 46656|cubic inches|pints (liquid)| 0.4731765|liters|
|cubic yards| 0.764555|cubic meters|pints (liquid)| 0.8594|pints (dry)|
|cubic yards| 202|gallons|pints (liquid)| 0.5|quarts (liquid)|
|cubic yards| 1685|lbs of water 39.2deg F|quarts (dry)| 0.03125|bushels|
|cubic yards| 764.6|liters|quarts (dry)| 67.2|cubic inches|
|cupfuls| 0.5|pints (liquid)|quarts (dry)| 1.101|liters|
|deciliters| 0.1|liters|quarts (dry)| 1.164|quarts (liquid)|
|dekaliters| 10|liters|quarts (liquid)| 946.353|cubic centimeters|
|gallons (Imperial)| 1.20095|gallons (US)|quarts (liquid)| 57.75|cubic inches|
|gallons (UK liquid)| 4546.1|cubic centimeters|quarts (liquid)| 0.946353|liters|
|gallons (US liquid)| 3785|cubic centimeters|quarts (liquid)| 2|pints (liquid)|
|gallons (US liquid)| 0.1337|cubic feet|quarts (liquid)| 0.8594|quarts (dry)|
|gallons (US liquid)| 231|cubic inches|steres| 999.973|liters|
|gallons (US liquid)| 0.003785|cubic meters|tablespoons| 0.0625|cupfuls|
|gallons (US liquid)| 8.337|lbs of water 39.2deg F|teaspoon| 0.333333|tablespoon|
----
AaA BbB CcC DdD EeE FfF GgG HhH IiI JjJ KkK LlL MmM NnN OoO PpP QqQ RrR SsS TtT UuU WwW XxX YyY ZzZ
----
!!!VCB
is the Vertical Center of Buoyancy. This is measured in feet from the baseline of the ship. When the baseline of the ship is the keel (as it is for submarines), then it is referred to as the KB. This is essentially the center of gravity of the chunk of water that the ship is displacing.
!!!VCG
is the Vertical Center of Gravity. This is measured in feet from the baseline of the ship. When the baseline of the ship is the keel (as it is for submarines), then it is referred to as the KG.
!!!VDL
stands for Variable Deck Load (offshore units).
!!!6/20/09 11:19:
#Added ESWBS excel file.
#Fixed links to newsletters. Moved newsletter link to [[Past News]].
#Added [[Did You Know?]] tiddler.
|!Multiply:|!By:|!To Obtain:|!Multiply:|!By:|!To Obtain:|
|centigrams| 0.01|grams|ounces (troy)| 1.097|ounces|
|decigrams| 0.1|grams|ounces (troy)| 0.0686|pounds|
|dekagrams| 10|grams|pennyweights| 24|grains|
|drams| 0.456|drams (troy)|pennyweights| 1.555|grams|
|drams| 1.7718|grams|pennyweights| 0.0548|ounces|
|drams| 0.0625|ounces|pound force| 4.4482|newton|
|dynes| 1.017 x 10-3|grams|poundal| 14.098|grams|
|dynes| 7.233 x 10-5|poundals|poundal| 0.03108|pounds|
|dynes| 2.2481 x 10-6|pounds|poundal| 0.13825|newton|
|grains| 0.064798|grams|pounds| 44822.00|dynes|
|grains| 0.00228571|ounces|pounds| 453.59237|grams|
|grams| 980.665|dynes|pounds| 4.4482|newtons|
|grams| 0.03527396|ounces|pounds| 32.174|poundals|
|grams| 0.00220462|pounds|pounds| 0.03108|slugs|
|hectograms| 100|grams|pounds| 4.46 x 10-4|tons (long)|
|kilograms| 1000 |grams|pounds| 4.54 x 10-4|tons (metric)|
|kilograms| 2.2046226|pounds|pounds| 5 x 10-4|tons (short)|
|kilograms| 9.842065 x 10-4|tons (long)|pounds (troy)| 0.823|pounds|
|kilograms| 0.001|tons (metric)|quintals (long)| 112|pounds|
|kilograms| 0.00110231|tons(short)|quintals (metric)| 100|kilograms|
|micrograms| 1 x 10-6|grams|slugs| 14.594|kilograms|
|milligrams| 0.001|grams|slugs| 32.174|pounds|
|myriagrams| 10000|grams|stones| 14|pounds|
|newton| 1 x 105|dynes|tons (long)| 1016.05|kilograms|
|newton| 0.22481|pounds|tons (long)| 1.1060469|metric tons|
|ounce force| 0.27801|newton|tons (long)| 2240|pounds|
|ounces| 28.3495|grams|tons (long)| 1.12|tons (short)|
|ounces| 0.911458|ounces (troy)|tons (metric)| 2205|pounds|
|ounces| 0.0625|pounds|tons (metric)| 1.102|tons (short)|
|ounces (troy)| 480|grains|tons (short)| 907.18474|kilograms|
|ounces (troy)| 31.103|grams|tons (short)| 2000|pounds|
----
SAWE International: [[www.sawe.org|http://www.sawe.org]]
SNAME: [[www.sname.org|http://www.sname.org/]]
ASNE: [[www.navalengineers.org|http://www.navalengineers.org]]
RINA: [[www.rina.org.uk|http://www.rina.org.uk]]
ABS: [[www.eagle.org|http://www.eagle.org]]
AIAA: [[www.aiaa.org|http://www.aiaa.org]]
----
Need a geometry refresher or just like beautiful proofs? Take a look at the online version of Oliver Byrne’s Euclid’s Geometry (1847) which uses color instead of words:
[[www.sunsite.ubc.ca/DigitalMathArchive/Euclid/byrne.html|http://www.sunsite.ubc.ca/DigitalMathArchive/Euclid/byrne.html]]
Want to catch up on science and technology news, book reviews, and opinion? Surf over to:
[[www.scitechdaily.com|http://www.scitechdaily.com]]
For you science fiction fans, a new way to look at your favorite element:
[[www.scifi.com/scifiction/periodictable.html|http://www.scifi.com/scifiction/periodictable.html]]
Need a statistics refresher? Uncertain about uncertainty? Try this link:
[[www.itl.nist.gov/div898/handbook/index.htm|http://www.itl.nist.gov/div898/handbook/index.htm]]
Need good statistics software? Steep learning curve, but very powerful (and free!): [[www.r-project.org/|http://www.r-project.org/]]
Not sure who manages this site, but it has some very helpful conversion tables and interactive converters: [[www.allmeasures.com/|http://www.allmeasures.com/]]
Here is a good site for sea water properties: [[fermi.jhuapl.edu/denscalc.html|http://fermi.jhuapl.edu/denscalc.html]]
Here is a site with information for a wide range of engineering fields: [[www.engineeringtoolbox.com/|http://www.engineeringtoolbox.com/]]
----
AaA BbB CcC DdD EeE FfF GgG HhH IiI JjJ KkK LlL MmM NnN OoO PpP QqQ RrR SsS TtT UuU VvV XxX YyY ZzZ
----
!!!Waterline
is any one of certain lines of a ship parallel with(and at various heights above) the baseline. In half-breadth plans the waterlines are smooth curves showing the shape of the ship; in profile plans they
are projected as straight lines. (See ~Half-Breadth Plan).
!!!Waterplane Coefficient
= CWL = ~AreaDWL/(L×B)