Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
B.Sc. (Trent), Ph.D. (Theoretical Chemistry, Queen's)
//Associate Professor
Director of Graduate Studies
Faculty of Computer Science, UNB Fredericton//
[[Contact]]
My area of research is High Performance Computing. I'm part of the new [[IBM Center for Advanced Studies - Atlantic|http://www.cs.unb.ca/casa]] (we're [[looking for students!|http://www.cs.unb.ca/grad/html/CASAGrad-ad-2010.pdf]]). I'm also associated with the Atlantic Computational Excellence Network ([[ACEnet|http://www.ace-net.ca/]]). My extracurricular activities include swimming with the [[UNB Master's swim club|http://www.unbf.ca/clubs/masters]].
I'm co-editor of a special issue of the Journal of Grid Computing on High Performance Grid and Cloud Computing. See the CFP on the [[JoGC website|http://www.springer.com/computer/communication+networks/journal/10723]].
See my new blog: [[tabletrazza.blogspot.com|http://tabletrazza.blogspot.com]]
Research funded by:
[img(25%+,auto)[NSERC|NSERC_C.jpg][http://www.nserc-crsng.gc.ca]]
* Compare C for CUDA and ~OpenCL on current Nvidia ~GPUs, in terms of productivity and performance
* Top-down vs. bottom-up dynamic programming. Which is better: bottom-up tabulation (like the textbook algorithm for the Knapsack problem) or top-down recursion? Can they work together? Follow up on some exciting exploration done by a UNB FCS Master's student.
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #993333
PrimaryMid: #990033
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
| !Office: | Information Technology Centre (550 Windsor St.), room C322 |
| !Phone: | (506) 458-7268 |
| !Fax: | (506) 453-3566 |
| !Email: | aubanel@unb.ca |
//Faculty of Computer Science
University of New Brunswick
Fredericton, N.B.
~E3B 5A3 //
!Fall 2011
* [[CS1073|http://eservices.unb.ca/calendar/undergraduate/display_desc.cgi?number=CS%25201073]]
* [[CS2253|http://eservices.unb.ca/calendar/undergraduate/display_desc.cgi?number=CS%25202253]]
* [[Research Methods (graduate students)|ResearchMethods]]
!Winter 2012
* [[CS6035|CS6035prospectus.html]]
New project funded by [[NBIF|http://www.nbif.ca/]], co-led by [[Dr. David Bremner|http://www.cs.unb.ca/~bremner/]]. The objective of this project is to develop an open source framework for parallel tree search applications. Tree search applications are characterized by their use of divide-and-conquer to find a solution, and by the use of a shared knowledge pool to accelerate the search.
Computationally intensive computer programs often decompose their data into parts to enable concurrent execution on multiple computers. Many of these programs employ a graph data structure to describe the computation and communication requirements of an underlying mesh, such as for finite element solvers for partial differential equations (PDE). Graph partitioning is the technique used to produce a balanced decomposition of these graphs and achieve a minimization of the communication requirement when the program is executed on a parallel computer. A number of graph partitioning techniques have been developed, including work by my research group which has created the [[PaGrid|http://code.google.com/p/pagrid/]] partitioner.
Current work is exploring a new approach based on performance modeling of the platform and the application.
/***
|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;
};
}
//}}}
[img[me|eric_brown_small.jpg]]
[[Contact]]
[[Courses]]
[[CS4997 thesis topics]]
[[Research]]
[[Selected Publications]]
[[Theses Supervised]]
<<toggleSideBar "Show/hide side bar" "side bar" hide>>
[<img[UNB logo|UNB_fr_small.gif][http://www.unb.ca]]
In collaboration with Dr. Patricia Evans (UNB Computer Science). Motivated by our recent work on parallelization of an algorithm for RNA structure comparison. The space and time complexity of dynamic programming applications can be addressed using lazy evaluation with memoization. Lazy evaluation can be incorporated into dynamic programming using memoization (storing results to avoid multiple evaluation of a function with the same input), and can save the time and space that would be otherwise used to evaluate and store results that are not used. Further gains can be made by parallelization, however complex dependencies make these types of recurrences difficult to parallelize effectively. Therefore the motivation for this work is to facilitate the efficient parallel implementation of complex DP algorithms, thus avoiding the need for a heroic effort for each problem.
Funded in part by an ~ACENet/SUN Research fellowship.
[[Selected Publications]]
!Current Projects
* [[Dynamic Moldable Scheduling for Tree Search]]
* [[Parallelization of Dynamic Programming with Lazy Evaluation]]
* [[Time Parallelization of Initial Value Partial Differential Equations]]
* [[Divisible Load Scheduling for Computational Grids]]
* [[Graph Partitioning for High Performance Computing]]
!Conferences/Workshops/Journals
*I'm co-editor of a special issue of the Journal of Grid Computing on High Performance Grid and Cloud Computing. See the CFP on the [[JoGC website|http://www.springer.com/computer/communication+networks/journal/10723]]
*I'm co-chair of the [[High Performance Grid Computing workshop|http://www.cs.unb.ca/~aubanel/hpgc/]], held annually since 2004, as part of the International Parallel and Distributed Processing Symposium ([[IPDPS|http://www.ipdps.org]]). Co-chaired with Virendra Bhavsar (UNB) and Michael Frumkin (Google).
*I'm Program Vice Chair for the Grid, Cluster and Cloud Computing track for [[HPCC 2011|http://cse.stfx.ca/~hpcc2011/]]
*I'm a member of numerous program committees, including the [[IEEE Int'l Workshop on High Performance Computational Biology (HiCOMB 2011)|http://www.hicomb.org/]], the [[IEEE Int'l Workshop on Parallel and Distributed Scientific and Engineering Computing (PDSEC)|http://cse.stfx.ca/~ltyang/ipdps11-pdsec/]], and the [[High Performance Computing Symposium (HPC 2011)|http://hosting.cs.vt.edu/hpc2011/]]
For all new MCS and ~PhD students, an introduction to graduate level research.
''In addition to attending the weekly class, all students must attend at least two computer science talks (seminars, ~PhD proposals, MCS/~PhD defenses, directed studies presentations) and submit a one paragraph summary of each to a FCS faculty member (either the speaker, or someone familiar with the area)''
!Schedule
Fall 2011: Wednesdays 12:30 - 1:20, ~GW-C111
|Sept. 14 |[[Introduction to the program|researchMethods/IntroductionToGradStudies_2011.pdf]] (EA) |
|Sept. 21 |[[Introduction to UNB library|researchMethods/IntroLibrary.pdf]] (Steve ~LeLievre, CS library) |
|Sept. 28 |Literature searching (SL) |
|Oct. 5 |Writing up background material (EA) |
|Oct. 12 |Managing Bibliographies with Refworks (SL) ''in GWC 112 lab''|
|Oct. 19 |Using Latex (David Bremner): ''in GWC 112 lab'' |
|Oct. 26 |Using Latex with Refworks and UNB's thesis development site (SL, EA) |
|Nov. 2 |Presentations (EA) |
|Nov. 9 |Research proposals (EA) |
|''Nov. 23, 3:30 pm'' |Experiments in CS (Wei Song) ''3:30 pm'' |
!Schedule
Includes links to pdfs of the slides
| Sept. 15 |[[Introduction to the program|researchMethods/IntroductionToGradStudies.pdf]] (EA) |
| Sept. 22 |[[Intro to library|researchMethods/IntroLibrary.pdf]] (Steve ~LeLievre) |
| Sept. 29 |[[Literature searching|researchMethods/IntroLibrary2.pdf]] (SL) |
| Oct. 6 |[[Writing up background material|researchMethods/write-up_EA.pdf]] (EA) |
| Oct. 13 |[[Refworks|http://www.lib.unb.ca/refworks]] (SL) |
| Oct. 20 |[[Using Latex|http://www.ctan.org/tex-archive/info/lshort/english/lshort.pdf]] (David Bremner)|
| Oct. 27 |[[Electronic Theses and Dissertations|http://www.unb.ca/etd/]] (SL & Lyle Smith) |
| Nov. 3 |[[Presentations|ResearchMethods/presentations.pdf]] (EA) |
| Nov. 10 |[[Experiments and experimental results|ResearchMethods/Experiments_in_CS.pdf]] (EA) |
| Nov. 17 |[[Research proposals|ResearchMethods/prop_basics.pdf]] (EA) |
| Nov. 24 |Research Ethics (Dr. Patricia Evans) |
!Technical Reports
# Siew Yin Chan, Teck Chaw Ling, Eric Aubanel, [["Benchmarking and Profiling Heterogeneous Multi-Core Clusters Using Graph-Partitioning Workload"|sy_rvs_tech_report_2.pdf]], Technical Report ~CS-2011-01, October 2011.
## Poisson and Synapp benchmarks available on request to [[aubanel@unb.ca|mailto:aubanel@unb.ca]]
!Articles Published in Refereed Journals
# S.Y. Chan, T.C. Ling, E. Aubanel, "The Impact of Heterogeneous ~Multi-Core Clusters on Graph Partitioning: An Empirical Study", accepted by Cluster Computing, March 2012.
# J. Larusic, A.P. Punnen, E. Aubanel, "Experimental analysis of heuristics for the bottleneck traveling salesman problem", Journal of Heuristics, 18:473-503, 2012.
# E. Aubanel [["Scheduling of Tasks in the Parareal Algorithm"|time_parallelization_parco_final.pdf]], Parallel Computing 37 (2011) 172–182.
# J. Rioux, M. Halse, E. Aubanel, B.J. Balcom, J. Kaffanke, S. Romanzetti, T. Dierkes and N.J. Shah, "An Accurate Non-uniform Fourier Transform For SPRITE Magnetic Resonance Imaging Data", ACM Transactions on Mathematical Software, Volume 33 Issue 3, August 2007, 21 pages.
# S. Huang, E. Aubanel, and V.C. Bhavsar, "~PaGrid: A Mesh Partitioner for Computational Grids", Journal of Grid Computing, Vol. 4 No. 1, pp. 71 - 88, 2006.
# M. Halse, J. Rioux, S. Romanzetti, J. Kaffanke, B. ~MacMillan, I. Mastikhin, N.J. Shah, E. Aubanel, B.J. Balcom, "Centric scan SPRITE magnetic resonance imaging: optimization of SNR, resolution, and relaxation time mapping", J. Magnetic Resonance 169 102-117 (2004)
# A.D. Bandrauk, E.E. Aubanel, ”Electron Control by ~Two-Colour Laser Processes”, Chem. Phys. 198 159 (1995)
# E.E. Aubanel, A.D. Bandrauk, “Orbital Alignment and Electron Control in Photodissociation Products by ~Two-Colour Laser Interference”, Chem. Phys. Lett. 229 169 (1994)
# E.E. Aubanel, A. Conjusteau, A.D. Bandrauk, “Effect of Rotations on Stabilization in ~High-Intensity Photodissociation of H2+”, Phys. Rev. A. 48 R4011 (1993)
# E.E. Aubanel, A.D. Bandrauk, “Rapid Vibrational Inversion via ~Time-Gating of ~Laser-Induced Avoided Crossings in ~High-Intensity Photodissociation”, J. Phys. Chem. 97 12620 (1993)
# E.E. Aubanel, J.M. Gauthier, A.D. Bandrauk, “Molecular Stabilization and Angular Distribution in Photodissociation of H2+ in Intense Laser Fields”, Phys. Rev. A. 48 2145 (1993)
# E.E. Aubanel, A D Bandrauk, P Rancourt, “~Pulse-Shape Effects and ~Laser-Induced Avoided Crossings in Photodissociation”, Chem. Phys. Lett. 197 419 (1992)
!Refereed Book Chapters
# E. Aubanel, [["Resource-Aware Load Balancing of Parallel Applications"|ResourceAwareLoadBalancing_accepted.pdf]], Handbook of Research on Grid Technologies and Utility Computing: Concepts for Managing ~Large-Scale Applications, pp 12-21, IGI Global, May 2009.
!Refereed Conference Proceedings
# S.T. Stewart, E. Aubanel and P.A. Evans, "Finding Common RNA Secondary Structures: A Case Study on the Dynamic Parallelization of a Data-driven Recurrence", Eleventh IEEE International Workshop on High Performance Computational Biology (~HiCOMB), in Proc. 26th Intl. Parallel and Distributed Processing Symposium, May 2012, Shanghai, China, IEEE ~CD-ROM (2012), 10 pages.
# H. Xiao and E. Aubanel, "Scheduling of tasks in the parareal algorithm for heterogeneous cloud platforms, Thirteenth IEEE International workshop on Parallel and Distributed Scientific and Engineering Computing (PDSEC), in Proc. 26th Intl. Parallel and Distributed Processing Symposium, May 2012, Shanghai, China, IEEE ~CD-ROM (2012), 9 pages.
# T.F. Beatty, E.E. Aubanel, and K.B. Kent. “An ~OpenMP-based Circuit Design Tool: Customizable ~Bit-width”, 2009 IEEE Pacific Rim Conference on Communications, Computers and Signal Processing, August 2009, Victoria, BC, 6 pages.
# E. Snow, E. Aubanel, and P. Evans, “Dynamic Parallelization for RNA Structure Comparison”, Eighth IEEE International Workshop on High Performance Computational Biology (~HiCOMB), in Proc. 23rd Intl. Parallel and Distributed Processing Symposium, May 2009, Rome, Italy, IEEE ~CD-ROM (2009), 8 pages.
# B. Clout and E. Aubanel, “~EHGrid: an emulator of heterogeneous computational grids”, workshop on Parallel and Distributed Scientific and Engineering Computing (PDSEC), in Proc. 23rd Intl. Parallel and Distributed Processing Symposium, May 2009, IEEE ~CD-ROM (2009), 8 pages.
# T.F. Beatty, K.B. Kent, and E.E. Aubanel, "Evaluating and Improving an ~OpenMP-based Circuit Design Tool", 11th Euromicro Conference on Digital System Design (DSD 2008), September 2008, Parma, Italy, IEEE Computer Society, 2 pages (Work in Progress session).
# K. Ghazinour, R.E. Shaw, E. Aubanel, and L.E. Garey, "A Linear Solver for Benchmarking Partitioners", Workshop on Parallel and Distributed Scientific and Engineering Computing (PDSEC), in Proc. 22nd Intl. Parallel and Distributed Processing Symposium, April 2008, Miami, Florida, IEEE ~CD-ROM (2008), 8 pages.
# R. Proudfoot, K. Kent, E. Aubanel, and N. Chen, "Flexible ~Software-Hardware Network Intrusion Detection System", 19th IEEE/IFIP International Symposium on Rapid System Prototyping (RSP 2008), June 2008, Monterey, California, 7 pages.
# R. Proudfoot, K, Kent, E. Aubanel, and N. Chen, “High Performance ~Software-Hardware Network Intrusion Detection System”, International Conference on ~Field-Programmable Technology 2007 (ICFPT'07), 4 pages.
# E. Aubanel and X. Wu, "Incorporating Latency in Heterogeneous Graph Partitioning", Workshop on Parallel and Distributed Scientific and Engineering Computing (PDSEC), in Proc. 21st Intl. Parallel and Distributed Processing Symposium, March 2007, Long Beach California, IEEE ~CD-ROM (2007), 8 pages.
# H. Botadra, Q. Cheng, S.K. Prasad, E. Aubanel, and V. Bhavsar, "iC2mpi: A Platform for Parallel Execution of ~Graph-Structured Iterative Computations", Workshop on Parallel and Distributed Scientific and Engineering Computing (PDSEC), in Proc. 21st Intl. Parallel and Distributed Processing Symposium, March 2007, Long Beach California, IEEE ~CD-ROM (2007), 8 pages.
# B. Philipps, E. Aubanel, A. Healy and A. Gerber, "~GridMPC: a ~Service-Oriented Grid Architecture for Coupling Simulation and Control of Industrial Systems", Workshop on Service Oriented Techniques (~SOT06), at the Eighth International Conference of ~E-Commerce (~ICEC06), Canadian National Research Council, in press, 8 pages. An expanded version appears in the following:
** B. Philipps, E. Aubanel, A. Healy and A. Gerber, "A ~Service-Oriented Architecture for Coupling Simulation and Control of Industrial Systems", Int. J. Business Process Integration and Management, Volume 2, Number 4, (2007), pp. 302 - 311.
# R. Wanschoor and E. Aubanel, “Partitioning and Mapping of ~Mesh-Based Applications onto Computational Grids”, 5th IEEE/ACM International Workshop on Grid Computing (Grid 2004), Nov. 8, 2004, Pittsburgh, PA, USA, IEEE Computer Society, pp. 156-162.
# R. Wanschoor and E. Aubanel, "Mesh Partitioning for Computational Grids", Second Annual Conference on Communication Networks and Services (~CNSR-2004), May 19-21, 2004, Fredericton, New Brunswick, IEEE Computer Society, pp. 325-328.
# W. Huang, E. Aubanel, and V.C. Bhavsar, “Mesh Partitioners for Computational Grids: A Comparison,” Proc. of the 2003 International Conference on Computational Science and Its applications (ICCSA 2003), Montreal, PQ, Canada, May 18-21, 2003, Lecture Notes in Computer Science 2267-2269, Springer Verlag (2003), pp. 60-68.
# E.E. Aubanel and F.E. Khettabi, “Parallelization of the ~Three-Dimensional Transport Equation for Boron Neutron Capture Therapy”, Workshop on Parallel and Distributed Scientific and Engineering Computing with Applications, in Proc. 17th Intl. Parallel and Distributed Processing Symposium, April 2003, Nice, France, IEEE ~CD-ROM (2003), 8 pages.
# E.E. Aubanel and F.E. Khettabi, “Parallelization of Radiation Transport on Unstructured Triangular Grids with Spatial Decomposition and ~OpenMP”, Workshop on Parallel and Distributed Scientific and Engineering Computing with Applications, in Proc. 16th Intl. Parallel and Distributed Processing Symposium, April 2002, Ft. Lauderdale, USA, IEEE ~CD-ROM (2002), 8 pages.
!Conference Proceedings
# J. Rioux, B. ~MacMillan, M. Halse, E. Aubanel, B. Balcom, "Enhancement of SPRITE Images With the Chirp ~Z-Algorithm", 45th Experimental Nuclear Magnetic Resonance Conference, Pacific Grove, California, April 18-23, 2004
# D.J. Lizotte, E.E. Aubanel, and V.C. Bhavsar, “Nonuniform DFT Applications in MRI: A Novel Algorithm and Parallel Implementation”, Proceedings of the 15th International Symposium on High Performance Computing Systems and Applications (HPCS 2001), pp. 41-54, Kluwer Academic Press, 2002.
Associate Professor and Director of Graduate Studies
/*{{{*/
* html .tiddler {height:1%;}
body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}
h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}
hr {height:1px;}
a {text-decoration:none;}
dt {font-weight:bold;}
ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}
.txtOptionInput {width:11em;}
#contentWrapper .chkOptionInput {border:0;}
.externalLink {text-decoration:underline;}
.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}
.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}
/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}
#mainMenu .tiddlyLinkExisting,
#mainMenu .tiddlyLinkNonExisting,
#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}
.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}
.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}
#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}
#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}
.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}
#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}
.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}
.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}
.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}
#contentWrapper {display:block;}
#splashScreen {display:none;}
#displayArea {margin:1em 17em 0 14em;}
.toolbar {text-align:right; font-size:.9em;}
.tiddler {padding:1em 1em 0;}
.missing .viewer,.missing .title {font-style:italic;}
.title {font-size:1.6em; font-weight:bold;}
.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}
.tiddler .button {padding:0.2em 0.4em;}
.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}
.footer {font-size:.9em;}
.footer li {display:inline;}
.annotation {padding:0.5em; margin:0.5em;}
* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}
.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}
.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}
.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}
.fieldsetFix {border:0; padding:0; margin:1px 0px;}
.sparkline {line-height:1em;}
.sparktick {outline:0;}
.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}
* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}
.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
!Master's Theses
* Mark Lord, Divisible Load Scheduling on Multi-level Processor Trees, January 2011.
* Eric Snow, Heterogeneous Parallelization for RNA Structure Comparison (co-supervisor: Patricia Evans, UNB), April 2009.
* Tim Beatty, Improving an ~OpenMP-based Circuit Design Tool, (co-supervisor: Ken Kent, UNB), August 2008
* Basile Clout, A ~Test-Bed Framework for Heterogeneous Mesh Partitioners, May 2008.
* Kambiz Ghazinour Naini, A Linear Solver for Benchmarking Partitioners (co-supervisor: Ruth Shaw, * UNBSJ), December 2007.
* Ryan Proudfoot, High Performance Software/Hardware Packet Classification (co-supervisor: Ken Kent, UNB), July 2007.
* Xiaochen Wu, Flexible Mesh Partitioning for Computational Grids, April 2007.
* Shuangyu Yu, ~PaGridT: a Mesh Partitioner with Tabu search for Computational Grids, December 2006.
* Nan Chen, An Analysis of a NIDS for Hardware/Software Implementation (co-supervisor: Ken Kent, UNB), August 2006.
* Benoit Philipps, A Grid Architecture for the remote control of industrial systems, December 2005.
* Tanvire Elahi, Efficient Solutions of Systems of Equations with Banded Coefficient Matrices and Their Implementation as a Grid Service (co-supervisor: Ruth Shaw, UNBSJ), August 2005.
* Renaud Wanschoor, Mesh Partitioning for Computational Grids, September 2004.
* Sili Huang, ~PaGrid: A Mesh Partitioner for Computational Grids (co-supervisor: prof. Virendra Bhavsar), April 2003.
!Honour's Theses
* Mark Lord, Divisible Load Scheduling with respect to Bandwidth, Computation, and Latency parameters, Summer 2008. ''Awarded the prize for the best ~CS4997 thesis.''
* Steven Stewart, Parallelization of Cellular Automata using the iC2mpi platform, 2007-2008
* Adam Paynter, A Job Submission Portal for ~ACEnet, 2006-2007.
* Eric Snow, Testing the Quality of Mesh Partitioners over a Heterogeneous Platform, 2005-2006.
* Ding Cai, Efficient Parallel Implementation of `3D Simulation of Static Magnetic Field Distribution in Porous Media, 2005-2006. Co-supervised by Dr. Bruce Balcom, UNB Physics.
* John Larusic, An Algorithm Implementation for Solving the Bottleneck Traveling Salesman Problem, Winter 2005. Co-supervised by Dr. Abraham Punnen. ''Awarded the prize for the best ~CS4997 thesis.''
* Derek Weaver, From ~2D to ~3D Simulation of Static Magnetic Field Distribution in Porous Media: Investigation of a Suitable Parallel Implementation, Winter 2005. Co-supervised by Dr. Bruce Balcom.
* Lu Xue, Should numerical programs use Hyperthreading?, Winter 2005.
* Mondelle Simeon, Parallel and Distributed Interface for Octave, Winter 2004.
* James Rioux, ~Non-Uniform Fast Fourier Transformation of SPRITE MRI Data, Fall 2003. Co-supervised by Bruce Balcom. ''Awarded the prize for the best ~CS4997 thesis.''
* Tijana Tripkovic and David ~MacBride, Comparison of Parallel Implementations of Ant Colony Optimization for the Quadratic Assignment Problem, Summer 2003.
* Adam ~Amos-Binks, The Mapping of a Parallel CFD Test Case to a Computational Grid, Fall 2002.
* Daniel J. Lizotte, Nonuniform DFT Applications in MRI: A Novel Algorithm and Parallel Implementation, Winter 2001. Co-supervised by Dr. Virendra Bhavsar. ''Awarded the prize for the best ~CS4997 thesis.''
/***
|''Name:''|TiddlersBarPlugin|
|''Description:''|A bar to switch between tiddlers through tabs (like browser tabs bar).|
|''Version:''|1.2.5|
|''Date:''|Jan 18,2008|
|''Source:''|http://visualtw.ouvaton.org/VisualTW.html|
|''Author:''|Pascal Collin|
|''License:''|[[BSD open source license|License]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 2.0; InternetExplorer 6.0, others|
!Demos
On [[homepage|http://visualtw.ouvaton.org/VisualTW.html]], open several tiddlers to use the tabs bar.
!Installation
#import this tiddler from [[homepage|http://visualtw.ouvaton.org/VisualTW.html]] (tagged as systemConfig)
#save and reload
#''if you're using a custom [[PageTemplate]]'', add {{{<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>}}} before {{{<div id='tiddlerDisplay'></div>}}}
#optionally, adjust StyleSheetTiddlersBar
!Tips
*Doubleclick on the tiddlers bar (where there is no tab) create a new tiddler.
*Tabs include a button to close {{{x}}} or save {{{!}}} their tiddler.
*By default, click on the current tab close all others tiddlers.
!Configuration options
<<option chkDisableTabsBar>> Disable the tabs bar (to print, by example).
<<option chkHideTabsBarWhenSingleTab >> Automatically hide the tabs bar when only one tiddler is displayed.
<<option txtSelectedTiddlerTabButton>> ''selected'' tab command button.
<<option txtPreviousTabKey>> previous tab access key.
<<option txtNextTabKey>> next tab access key.
!Code
***/
//{{{
config.options.chkDisableTabsBar = config.options.chkDisableTabsBar ? config.options.chkDisableTabsBar : false;
config.options.chkHideTabsBarWhenSingleTab = config.options.chkHideTabsBarWhenSingleTab ? config.options.chkHideTabsBarWhenSingleTab : false;
config.options.txtSelectedTiddlerTabButton = config.options.txtSelectedTiddlerTabButton ? config.options.txtSelectedTiddlerTabButton : "closeOthers";
config.options.txtPreviousTabKey = config.options.txtPreviousTabKey ? config.options.txtPreviousTabKey : "";
config.options.txtNextTabKey = config.options.txtNextTabKey ? config.options.txtNextTabKey : "";
config.macros.tiddlersBar = {
tooltip : "see ",
tooltipClose : "click here to close this tab",
tooltipSave : "click here to save this tab",
promptRename : "Enter tiddler new name",
currentTiddler : "",
previousState : false,
previousKey : config.options.txtPreviousTabKey,
nextKey : config.options.txtNextTabKey,
tabsAnimationSource : null, //use document.getElementById("tiddlerDisplay") if you need animation on tab switching.
handler: function(place,macroName,params) {
var previous = null;
if (config.macros.tiddlersBar.isShown())
story.forEachTiddler(function(title,e){
if (title==config.macros.tiddlersBar.currentTiddler){
var d = createTiddlyElement(null,"span",null,"tab tabSelected");
config.macros.tiddlersBar.createActiveTabButton(d,title);
if (previous && config.macros.tiddlersBar.previousKey) previous.setAttribute("accessKey",config.macros.tiddlersBar.nextKey);
previous = "active";
}
else {
var d = createTiddlyElement(place,"span",null,"tab tabUnselected");
var btn = createTiddlyButton(d,title,config.macros.tiddlersBar.tooltip + title,config.macros.tiddlersBar.onSelectTab);
btn.setAttribute("tiddler", title);
if (previous=="active" && config.macros.tiddlersBar.nextKey) btn.setAttribute("accessKey",config.macros.tiddlersBar.previousKey);
previous=btn;
}
var isDirty =story.isDirty(title);
var c = createTiddlyButton(d,isDirty ?"!":"x",isDirty?config.macros.tiddlersBar.tooltipSave:config.macros.tiddlersBar.tooltipClose, isDirty ? config.macros.tiddlersBar.onTabSave : config.macros.tiddlersBar.onTabClose,"tabButton");
c.setAttribute("tiddler", title);
if (place.childNodes) {
place.insertBefore(document.createTextNode(" "),place.firstChild); // to allow break line here when many tiddlers are open
place.insertBefore(d,place.firstChild);
}
else place.appendChild(d);
})
},
refresh: function(place,params){
removeChildren(place);
config.macros.tiddlersBar.handler(place,"tiddlersBar",params);
if (config.macros.tiddlersBar.previousState!=config.macros.tiddlersBar.isShown()) {
story.refreshAllTiddlers();
if (config.macros.tiddlersBar.previousState) story.forEachTiddler(function(t,e){e.style.display="";});
config.macros.tiddlersBar.previousState = !config.macros.tiddlersBar.previousState;
}
},
isShown : function(){
if (config.options.chkDisableTabsBar) return false;
if (!config.options.chkHideTabsBarWhenSingleTab) return true;
var cpt=0;
story.forEachTiddler(function(){cpt++});
return (cpt>1);
},
selectNextTab : function(){ //used when the current tab is closed (to select another tab)
var previous="";
story.forEachTiddler(function(title){
if (!config.macros.tiddlersBar.currentTiddler) {
story.displayTiddler(null,title);
return;
}
if (title==config.macros.tiddlersBar.currentTiddler) {
if (previous) {
story.displayTiddler(null,previous);
return;
}
else config.macros.tiddlersBar.currentTiddler=""; // so next tab will be selected
}
else previous=title;
});
},
onSelectTab : function(e){
var t = this.getAttribute("tiddler");
if (t) story.displayTiddler(null,t);
return false;
},
onTabClose : function(e){
var t = this.getAttribute("tiddler");
if (t) {
if(story.hasChanges(t) && !readOnly) {
if(!confirm(config.commands.cancelTiddler.warning.format([t])))
return false;
}
story.closeTiddler(t);
}
return false;
},
onTabSave : function(e) {
var t = this.getAttribute("tiddler");
if (!e) e=window.event;
if (t) config.commands.saveTiddler.handler(e,null,t);
return false;
},
onSelectedTabButtonClick : function(event,src,title) {
var t = this.getAttribute("tiddler");
if (!event) event=window.event;
if (t && config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton])
config.commands[config.options.txtSelectedTiddlerTabButton].handler(event, src, t);
return false;
},
onTiddlersBarAction: function(event) {
var source = event.target ? event.target.id : event.srcElement.id; // FF uses target and IE uses srcElement;
if (source=="tiddlersBar") story.displayTiddler(null,'New Tiddler',DEFAULT_EDIT_TEMPLATE,false,null,null);
},
createActiveTabButton : function(place,title) {
if (config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton]) {
var btn = createTiddlyButton(place, title, config.commands[config.options.txtSelectedTiddlerTabButton].tooltip ,config.macros.tiddlersBar.onSelectedTabButtonClick);
btn.setAttribute("tiddler", title);
}
else
createTiddlyText(place,title);
}
}
story.coreCloseTiddler = story.coreCloseTiddler? story.coreCloseTiddler : story.closeTiddler;
story.coreDisplayTiddler = story.coreDisplayTiddler ? story.coreDisplayTiddler : story.displayTiddler;
story.closeTiddler = function(title,animate,unused) {
if (title==config.macros.tiddlersBar.currentTiddler)
config.macros.tiddlersBar.selectNextTab();
story.coreCloseTiddler(title,false,unused); //disable animation to get it closed before calling tiddlersBar.refresh
var e=document.getElementById("tiddlersBar");
if (e) config.macros.tiddlersBar.refresh(e,null);
}
story.displayTiddler = function(srcElement,tiddler,template,animate,unused,customFields,toggle){
story.coreDisplayTiddler(config.macros.tiddlersBar.tabsAnimationSource,tiddler,template,animate,unused,customFields,toggle);
var title = (tiddler instanceof Tiddler)? tiddler.title : tiddler;
if (config.macros.tiddlersBar.isShown()) {
story.forEachTiddler(function(t,e){
if (t!=title) e.style.display="none";
else e.style.display="";
})
config.macros.tiddlersBar.currentTiddler=title;
}
var e=document.getElementById("tiddlersBar");
if (e) config.macros.tiddlersBar.refresh(e,null);
}
var coreRefreshPageTemplate = coreRefreshPageTemplate ? coreRefreshPageTemplate : refreshPageTemplate;
refreshPageTemplate = function(title) {
coreRefreshPageTemplate(title);
if (config.macros.tiddlersBar) config.macros.tiddlersBar.refresh(document.getElementById("tiddlersBar"));
}
ensureVisible=function (e) {return 0} //disable bottom scrolling (not useful now)
config.shadowTiddlers.StyleSheetTiddlersBar = "/*{{{*/\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .button {border:0}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .tab {white-space:nowrap}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar {padding : 1em 0.5em 2px 0.5em}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += ".tabUnselected .tabButton, .tabSelected .tabButton {padding : 0 2px 0 2px; margin: 0 0 0 4px;}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += ".tiddler, .tabContents {border:1px [[ColorPalette::TertiaryPale]] solid;}\n";
config.shadowTiddlers.StyleSheetTiddlersBar +="/*}}}*/";
store.addNotification("StyleSheetTiddlersBar", refreshStyles);
config.refreshers.none = function(){return true;}
config.shadowTiddlers.PageTemplate=config.shadowTiddlers.PageTemplate.replace(/<div id='tiddlerDisplay'><\/div>/m,"<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>\n<div id='tiddlerDisplay'></div>");
//}}}
Time parallelization involves decomposition of the temporal domain to allow parallel solution of time dependent partial differential equations. This can allow longer longer time evolution than is possible using only spatial domain decomposition. Work so far has focussed on [[scheduling of the tasks of this algorithm|Selected Publications]] (also known as the parareal algorithm. Ongoing work is examining scheduling of the parareal algorithm on clouds and application to CFD problems.
[img[parareal animation|parareal.gif]]
/***
|Name|ToggleSideBarMacro|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#ToggleSideBarMacro|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Provides a button for toggling visibility of the SideBar. You can choose whether the SideBar should initially be hidden or displayed.
!Demo
<<toggleSideBar "Toggle Sidebar">>
!Usage:
{{{<<toggleSideBar>>}}} <<toggleSideBar>>
additional options:
{{{<<toggleSideBar label tooltip show/hide>>}}} where:
label = custom label for the button,
tooltip = custom tooltip for the button,
show/hide = use one or the other, determines whether the sidebar is shown at first or not.
(default is to show the sidebar)
You can add it to your tiddler toolbar, your MainMenu, or where you like really.
If you are using a horizontal MainMenu and want the button to be right aligned, put the following in your StyleSheet:
{{{ .HideSideBarButton {float:right;} }}}
!History
*23-07-06: version 1.0: completely rewritten, now works with custom stylesheets too, and easier to customize start behaviour.
*20-07-06: version 0.11
*27-04-06: version 0.1: working.
!Code
***/
//{{{
config.macros.toggleSideBar={};
config.macros.toggleSideBar.settings={
styleHide : "#sidebar { display: none;}\n"+"#contentWrapper #displayArea { margin-right: 1em;}\n"+"",
styleShow : " ",
arrow1: "«",
arrow2: "»"
};
config.macros.toggleSideBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)
{
var tooltip= params[1]||'toggle sidebar';
var mode = (params[2] && params[2]=="hide")? "hide":"show";
var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;
var label= (params[0]&¶ms[0]!='.')?params[0]+" "+arrow:arrow;
var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleSideBar,"button HideSideBarButton");
if (mode == "hide")
{
(document.getElementById("sidebar")).setAttribute("toggle","hide");
setStylesheet(this.settings.styleHide,"ToggleSideBarStyles");
}
};
config.macros.toggleSideBar.onToggleSideBar = function(){
var sidebar = document.getElementById("sidebar");
var settings = config.macros.toggleSideBar.settings;
if (sidebar.getAttribute("toggle")=='hide')
{
setStylesheet(settings.styleShow,"ToggleSideBarStyles");
sidebar.setAttribute("toggle","show");
this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);
}
else
{
setStylesheet(settings.styleHide,"ToggleSideBarStyles");
sidebar.setAttribute("toggle","hide");
this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);
}
return false;
}
setStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 0 5px;}\n","ToggleSideBarButtonStyles");
//}}}
<<formTiddler NewPluginTemplate>><data>{"author":"Saq Imtiaz (Lewcid)","link":"http://tw.lewcid.org/#%5B%5BExtensions%20Overview%5D%5D","format":"Macro","twversion":"2.x","category":"Toggling page elements","description":"Provides a button for toggling visibility of the SideBar. You can choose whether the SideBar should initially be hidden or displayed."}</data>