Nice to meet you!
Let’s stay in touch. You can find me on GitHub or Twitter. Tweeting at me or DM’ing is the best way to get ahold of me. You can also try emailing me at<EMAIL_ADDRESS>I’m basically a professional gene hacker
I’m an incoming resident doctor at the University of Toronto, specializing in Radiation Oncology. That means I am learning to be an effective cancer doctor, with a focus on treating cancer with radiation. I grew up in a few different cities, but mostly in Vancouver, BC.
I love health, and I love data. So I especially love studying how we can use data to improve health.  I’m basically a gene hacker - I use data science to uncover new knowledge about the human cancer genome. See my full CV and list of publications here.
My PhD research happened at the illustrious Michael Smith Genome Sciences Centre in beautiful British Columbia, Canada. I investigated how cancers (fail to) repair their DNA, and how that could improve cancer treatment. For details, see this academic paper or this news feature. I am an alumnus of the UBC MD/PhD program.
When I’m not seeing patients or keeping up with the scientific literature, you’ll find me tinkering with graphic design, playing music, biking around the city, listening to podcasts, shooting photos, and many more things I feel obligated to do as a west coast millenial.


Event 2D
Hover over markers, bars, columns, slices, and so on.
1: textDir = "rtl"
2: textDir = "auto"
3: textDir = "auto"
4: textDir inherited from UI
5: textDir = "rtl"
That's all Folks!


During my second module of university one of my courses was to design an interactive gift giving experience.
Me and a colleague, in collaboration with Hallmark, spent over 2 months looking for solutions to problems such as scallability, as well as building a persona to receive the so-called gift.
The final result was very satisfactory, winning an award for Best Overall Experience (the trophy was a chocolate letter!)
Below you can see the video we used to present the final product to the Hallmark marketing team.


RULES
• Players can move up to 3 spaces per turn •
• Landing directly on a weapon will pick it up and drop your old one •
• If a player moves into a square touching another player a battle ensues •
• The player on turn attacks first, then the defending player retaliates •
• At end of turn a player can choose to raise their shield until their next turn •
• A raised shield reduces attack damage by half, but does not allow retalliation •
• The last critter standing wins •
CLOSE


NDPluginFile is a base class from which actual file plugins are derived. There are currently file plugins for JPEG, TIFF, netCDF, Nexus, HDF5, and GraphicsMagick. The GraphicsMagick plugin can write a large number of formats, including JPEG, TIFF, PNG, PDF and many others.
NDPluginFile inherits from NDPluginDriver. The NDPluginFile class documentation describes this class in detail. This class is designed to simplify the task of supporting a new file format. A derived class to support a new file format will typically need to implement only the pure virtual functions openFile(), readFile(), writeFile(), and closeFile(). Note that none of the current file plugins actually support the readFile() function yet, but this is planned for future releases.
The NDArray callback data can be written to disk in 1 of 3 modes:
The CreateDirectory record controls whether directories are created if they don't exist. If it is zero (default), no directories are created. If it is negative, then the absolute value is the maximum of directories that will be created (i.e. -1 will create a maximum of one directory to complete the path, -2 will create a maximum of 2 directories). If it is positive, then at least that many directories in the path must exist (i.e. a value of 1 will create all directories below the root directory and 2 will not create a directory in the root directory).
If value of the LazyOpen record is "No" (0) then at least one array with the same datatype, array size, and attributes must have been collected by the driver (and/or plugins) from which the file saving plugin is getting its data before capture or stream mode file saving is started. This is required so that the openFile() function can know the dimensions and datatype of the arrays. If LazyOpen is "Yes" and the mode is Stream then the file open if deferred until the first array callback after streaming is started. This will slow down the saving of the first file.
NDPluginFile supports all of the file saving parameters defined in asynNDArrayDriver, e.g. NDFilePath, NDFileName, etc. Thus, the same interface that is used for saving files directly in a driver is used for this plugin.
The base class will delete the "original" file that the driver created for that array if the following are all true:
The file saving plugins normally determine the name of the file from the FileName and FileNumber records. However, it is possible to have these values come instead from attributes in the array passed to the callback. The following 3 special attributes are used:
Having the file information come from the array allows the driver to control which plugin saves a particular array. For example, there may be two file writing plugins active; the first saves the flat field files for a tomography experiment, and the second saves the normal projections. These plugins each stream data to a separate file. The driver knows which files are flat fields and which are normal projections, and adds the appropriate attributes to control which plugin saves each array. This would not be possible using a single plugin and EPICS PVs to switch the file, because of the problem of frames being buffered in the plugin queue.
Normally files in Stream and Capture mode are automatically closed when the requested number of frames have been collected, or when the Capture record is set back to 0. It is also possible to use an NDArray attribute to close the file. If the NDArray contains an attribute named FilePluginClose and the attribute value is non-zero then the current file will be closed.
NDFileNull inherits from NDPluginFile. This is a dummy file writer, which does not actually write anything. Its main purpose is to delete original driver files (DeleteDriverFile record) without writing the data to disk. For example, if the Pilatus is being used simply for alignment or testing one might want to display the images but then immediately delete the files that the Pilatus had created. This plugin allows one to do this, since it always reports success in "writing" the file, so the NDPluginFile base class will deleted the driver file if all the conditions outlined above are met.
The NDFileNull class documentation describes this class in detail.
The NDFileNull plugin is created with the NDFileNullConfigure command, either from C/C++ or from the EPICS IOC shell.
NDFileNullConfigure (const char *portName, int queueSize, int blockingCallbacks, const char *NDArrayPort, int NDArrayAddr, size_t maxMemory, int priority, int stackSize)
Performance measurements were made on the Linux and Windows systems shown in the following table.
| Model | Operating system | CPU | RAM | Disk |
|---|---|---|---|---|
| Dell Precision T7500 | Windows 7 64-bit | Two quad-core Xeon X5647, 2.93 GHz (8 cores total) | 96 GB | Two 500 GB 15K RPM SAS disks RAID 0 |
| Penguin Relion 1751 Server | Linux, Fedora Core 14 64-bit | Two quad-core Xeon E5630, 2.53 GHz (8 cores total) | 12 GB | Three 300 GB 15K RPM SAS disks No RAID |
The tests were performed under the following conditions:
| File plugin | Mode | Windows (frames/s = MB/s) | Linux (frames/s = MB/s) |
|---|---|---|---|
| JPEG | Stream | 79.1 | 68.4 |
| TIFF | Stream | 259.9 | 186.4 |
| Magick, TIFF | Stream | 55.7 | 39.0 |
| netCDF | Stream | 204.3 | 185.0 |
| netCDF | Single | 133.7 | 179.1 |
| Nexus | Stream | 192.3 | 193.4 |
| Nexus | Single | 106.3 | 145.6 |
| HDF5 | Stream | 1113.5 | 192.0 |
| HDF5 | Single | 139.7 | 108.6 |


| No | Document | No | Date of Issue | Date of Expiry | Type | File |
|---|---|---|---|---|---|---|
| 1 | International Passport | Please insert Issue Date | Please insert Expiry Date | Please upload file File too Big!!! | ||
| 2 | Identification Card (Malaysian/PR) | Please insert Issue Date | Please insert Expiry Date | Please upload file File too Big!!! | ||
| 3 | COC and COE | Please insert Issue Date | Please insert Expiry Date | Please upload file File too Big!!! | ||
| 4 | Malaysia Seaman Card | Please insert Issue Date | Please insert Expiry Date | Please upload file File too Big!!! | ||
| 5 | Marine Department Medical | Please insert Issue Date | Please insert Expiry Date | Please upload file File too Big!!! | ||
| 6 | PETRONAS/PMU Medical | Please insert Issue Date | Please insert Expiry Date | Please upload file File too Big!!! | ||
| 7 | BOSIET/T-BOSIET/FOET-T-FOET | Please insert Issue Date | Please insert Expiry Date | Please upload file File too Big!!! | ||
| 8 | Seaman Book (all pages) | Please insert Issue Date | Please insert Expiry Date | Please upload file File too Big!!! | ||
| 9 | Basic Training Certificates | Please insert Issue Date | Please insert Expiry Date | Please upload file File too Big!!! | ||
| 10 | Proficiency if Fast Rescue Boats | Please insert Issue Date | Please insert Expiry Date | Please upload file File too Big!!! | ||
| 11 | Other 1 | Please insert Issue Date | Please insert Expiry Date | |||
| 12 | Other 2 | Please insert Issue Date | Please insert Expiry Date | |||
| 13 | Other 3 | Please insert Issue Date | Please insert Expiry Date |
| Name | Company | Designation | Contact No. |
|---|---|---|---|


01. fade in overlay:
User Avatar
02. slide in overlay from top:
03. slide in overlay from bottom:
04. slide in overlay from left:
05. slide in overlay from right:


In our world of constantly advancing technology, it seems as though a new industry is born more often than in recent generations. For example, just ten years ago it would have been fairly impossible to predict the boom of the FinTech industry, especially as we know it today. With new technology, however, will come new regulations. What these new and disruptive companies do (or don’t do) today will certainly have an impact on their future success.
 This innovative form of ride sharing is taking the transportation industry by storm with its accessibility and affordable charm. Companies such as Lime, Bird, and Scoot are the largest players as of right now. One thing that I imagine they did not foresee, or maybe they did and brushed it off their shoulder, is the safety regulations. The first company to successfully lobby the local, state, and federal government in their favor will definitely win in the end.
Now, there are several other industries that have, and will surely, run into regulatory battles. Drones/Unmanned Aerial Vehicles (UAVs), Cryptocurrency, Blockchain, and especially Artificial Intelligence are just a select few areas of emerging technology under the government’s close watch. As soon as one of these companies slips up or intentionally breaks a law, “The Man” will swiftly move in and begin the stretching out of red tape.
My best word of advice to these companies in disruptive industries is to educate themselves on legislation that is pertinent to their field of work. If you are starting a business that is fairly unregulated, try not to break any laws that already exist. Lastly, become proactive in the policymaking arena. You do not need a special license to speak with your local government officials, so advocate on behalf of your company if you truly believe that you are making positive change in the world.
Written by Jordan Donaldson Smart Advocacy. Photographs by Images.


Unsettled API - A context for thread-safe execution of work. More...
#include <work_queue.hpp>
Public Member Functions | |
| work_queue () | |
| Unsettled API - Create a work queue. | |
| work_queue (container &) | |
| Unsettled API - Create a work queue backed by a container. | |
| bool | add (work fn) |
Unsettled API - Add work fn to the work queue. More... | |
| bool | add (void_function0 &fn) |
Deprecated - Use add(work) . | |
| void | schedule (duration, work fn) |
Unsettled API - Add work fn to the work queue after a duration. More... | |
| void | schedule (duration, void_function0 &fn) |
Deprecated - Use schedule(duration, work) . | |
Unsettled API - A context for thread-safe execution of work.
Event-handler functions associated with a single proton::connection
are called in sequence. The connection's proton::work_queue
allows you to "inject" extra work from any thread and have it executed in the same sequence.
You may also create arbitrary proton::work_queue
objects backed by a container that allow other objects to have their own serialised work queues that can have work injected safely from other threads. The container ensures that the work is correctly serialised.
The proton::work
class represents the work to be queued and can be created from a function that takes no parameters and returns no value.
| bool add | ( | work | fn | ) |
Unsettled API - Add work fn
to the work queue.
Work fn
will be called serially with other work in the queue. The work may be deferred and executed in another thread.
fn
has been or will be called; false if the event loops is ended or fn
cannot be injected for any other reason. | void schedule | ( | duration | , |
| work | fn | ||
| ) |
Unsettled API - Add work fn
to the work queue after a duration.
Scheduled execution is "best effort". It may not be possible to inject the work after the elapsed duration. There will be no indication of this.
Work fn
will be called serially with other work in the queue. The work may be deferred and executed in another thread.
fn
has been or will be called; false if the event loops is ended or fn
cannot be injected for any other reason.


File Class
Introduction
The File class offers a set of methods for working with files & directories. This can be done through some helper methods or through a more advanced object oriented method where all files and directories are wrapped in objects.
Configuration
The File class is highly configurable and gives you all the control you need over the behaviour supplied by the class. Configuration settings vary from restricting filesystem access to setting drivers by filetype.
The default file config is located at core/config/file.php. To change these settings create a config file with your own settings at app/config/file.php.
The following configuration values can be defined:
| Param | Type | Default | Description |
|---|---|---|---|
| base_config.basedir | string |
|
The path to the basedir. Defaults to null for no restrictions. When defined this will restrict the access to that specific directory. |
| base_config.extensions | array |
|
Array of allowed extensions, null for all. If defined the File class will only handle the given extentions and filter out the rest. |
| base_config.url | string |
|
Base url for files, null for not available. |
| base_config.use_locks | null |
|
Whether to use file locks. Set to true if you want the File class to use them. |
| base_config.file_handlers | array |
|
Array of file drivers per extension. These allow you to use custom drivers on a by filetype basis. |
| magic_file | string |
|
Alternative location of the fileinfo() magic file. If not specified, the system default will be used. |
| chmod.files | integer |
|
Permissions for newly created files. |
| chmod.folders | integer |
|
Permissions for newly created directories. |


--- layout: post title: 'Software engineering is design all the way: code as design' date: 2011-02-12 22:23:31.000000000 +01:00 type: post published: true status: publish categories: - Methodology tags: [] meta: _edit_last: '2' _wp_old_slug: '' _jetpack_related_posts_cache: a:0:{} author: login: admin email<EMAIL_ADDRESS>display_name: gerbrand first_name: Gerbrand last_name: van Dieijen ---
Recently I came across an article I remember reading quite some years ago and having quite an influence on my thinking.
A short summary in my own words. Creating software is usually viewed as a form of engineering, hence the name software engineering. Engineering consists of designing constructs and building them. What exactly is then programming? In engineering of products like hardware, house-hold devices, bridges, or houses - hard products- first a design is created, then a the actual product is build. How can engineers know if they're design is correct? They create mock-ups, use calculations and their knowledge to verify correctness of their design (nowadays usually with help of software) and show mock-ups and visualizations of design to end-users, product managers, marketing or other people involved.
Finally they have the product actually build by robots or contractors. Many people, even many software developers think programming is part of the building phase. Is this correct? Programmers write code and frequently use their IDE, compiler, automatic unit tests to verify the correctness. Then, they'll show the outcome to all parties involved. When all is good, the software is packed and installed to servers or pressed on CD-ROMS to made available to the public. When comparing to other enginering jobs as listed above, these tasks are all part of the design task, except maybe for the part of releasing/publishing (which is often not done by the software engineer but by either an automatic process or a system administrator). So all in all software engineering, as well as programming, is design all the way.
See code as design for the source.


public interface HadoopConnectingService<T extends AbstractHadoopConnectionData>
extends java.io.Closeable
Defines service that can connect to Hadoop cluster and communicate with the cluster, optionally performing operations on the cluster. This interface only describes ability to connect to the cluster. It is meant to be inherited to provide definition of specific operations.
This service must be connected before it can provide any useful operation. As that connection may fail due to external factors instances of this interface should not be used if such a failure is not expected. Specifically, instances of this interface are only meant to be used from engine. Separated services that do not extend this interface should be created for use from designer.
| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
DUPLICATED_CONNECT_CALL_MESSAGE |
static java.lang.String |
NOT_CONNECTED_MESSAGE |
| Modifier and Type | Method and Description |
|---|---|
void |
connect(T connectionData,
java.util.Properties additionalSettings)
Connects to one or more Hadoop master nodes (typically namenode, jobtracker or both).
|
boolean |
isConnected()
Gets connection status of this
HadoopConnectingService . |
java.lang.String |
validateConnection()
Validates connection to Hadoop cluster established by
HadoopConnectingService#connect(Properties) . |
static final java.lang.String NOT_CONNECTED_MESSAGE
static final java.lang.String DUPLICATED_CONNECT_CALL_MESSAGE
void connect(T connectionData, java.util.Properties additionalSettings) throws java.io.IOException
Connects to one or more Hadoop master nodes (typically namenode, jobtracker or both). Must be called before
any other operation that require connection to Hadoop cluster are performed on instance of
HadoopConnectingService
.
Implementors should ensure that additional settings specified by additionalSettings
parameter do
not take priority to connection settings contained in connectionData
parameter. That is
by default if the same setting is specified by both parameters then value specified by connectionData
overrides value specified by additionalSettings
. However this behaviour can be changed by implementors if
desired.
connectionData
- Non null object containing at least information necessary to establish connection.additionalSettings
- Non null additional settings of connection to Hadoop cluster.java.io.IOException
- If communication with master node fails.java.lang.IllegalStateException
- If called twice or more times.java.lang.String validateConnection() throws java.io.IOException
HadoopConnectingService#connect(Properties)
.null
if validation was successful, non-null message describing validation failure reason
otherwise.java.io.IOException
- If communication with cluster fails. In such case connection should also be considered
invalid.java.lang.IllegalStateException
- If isConnected()
returns false.boolean isConnected()
HadoopConnectingService
. Returns true
if it is connected to
some Hadoop cluster.true
if HadoopConnectingService#connect(Properties)
has been called successfully and
Closeable.close()
has not been called yet, false
otherwise.Copyright © 2002-2015 Javlin a.s.


The Napp Drawer module extends the Appcelerator Titanium Mobile framework. The module is licensed under the MIT license.
Thanks to the folks at Mutual Mobile for their great work with MMDrawerController https://github.com/mutualmobile/MMDrawerController
Find the newest version in the dist folder
Simply add the following lines to your tiapp.xml
file:
<modules>
<module platform="iphone">dk.napp.drawer</module>
</modules>
For more detailed code examples take a look into the example app
Napp Drawer does not require you to use the 3 windows. You can also use either the combo of center/left or center/right for your desired needs.
javascript
var mainWindow = NappDrawerModule.createDrawer({
centerWindow: navController,
leftWindow: winLeft,
rightWindow: winRight,
closeDrawerGestureMode: NappDrawerModule.CLOSE_MODE_ALL,
openDrawerGestureMode: NappDrawerModule.OPEN_MODE_ALL,
leftDrawerWidth: 180,
rightDrawerWidth: 220
});
A method that allow change of a window. You can either use a window or a navigation group.
javascript
var newWin = Ti.UI.createWindow({
backgroundColor: "#FF0000"
};
mainWindow.setCenterWindow(newWin);
Update the width with these methods. The default width is 280
javascript
mainWindow.setLeftDrawerWidth(160);
Set different types of interactivity for the centerWindow.
javascript
mainWindow.setCenterHiddenInteractionMode(NappDrawerModule.OPEN_CENTER_MODE_FULL);
| input (constant) | Description | | ----- | ----------- | | OPENCENTERMODENONE | The user can not interact with any content in the center view. | | OPENCENTERMODEFULL | The user can interact with all content in the center view. | | OPENCENTERMODE_NAVBAR | The user can interact with only content on the navigation bar. The setting allows the menu button to still respond, allowing you to toggle the drawer closed when it is open. This is the default setting. |
Set gesture support for opening the drawer through a mask.
javascript
mainWindow.setOpenDrawerGestureMode(NappDrawerModule.OPEN_MODE_BEZEL_PANNING_CENTERWINDOW);
| input (constant) | Description | | ----- | ----------- | | OPENMODENONE | The user can not open the drawer by panning. | | OPENMODEALL | The user can open the drawer by panning anywhere. | | OPENMODEPANNINGNAVBAR | The user can open the drawer by panning anywhere on the navigation bar. | | OPENMODEPANNINGCENTERWINDOW | The user can open the drawer by panning anywhere on the center view. | | OPENMODEBEZELPANNINGCENTERWINDOW | The user can open the drawer by starting a pan anywhere within 20 points of the bezel. |
Set gesture support for closing the drawer through a mask.
javascript
mainWindow.setCloseDrawerGestureMode(NappDrawerModule.CLOSE_MODE_TAP_CENTERWINDOW);
| input (constant) | Description | | ----- | ----------- | | CLOSEMODENONE | The user cannot close the drawer by any panning gestures. | | CLOSEMODEALL | The user can close the drawer by panning anywhere. | | CLOSEMODEPANNINGNAVBAR | The user can close the drawer by panning anywhere on the navigation bar. | | CLOSEMODEPANNINGCENTERWINDOW | The user can close the drawer by panning anywhere on the center view. | | CLOSEMODEBEZELPANNINGCENTERWINDOW | The user can close the drawer by starting a pan anywhere within the bezel of the center view. | | CLOSEMODETAPNAVBAR | The user can close the drawer by tapping the navigation bar. | | CLOSEMODETAPCENTERWINDOW | The user can close the drawer by tapping the center view. | | CLOSEMODEPANNING_DRAWER | The user can close the drawer by panning anywhere on the drawer view. |
Note that these gestures may impact touches sent to the child view controllers, so be sure to use these appropriately for your application.
The animation velocity of the open and close methods, measured in points per second.
By default, this is set to 840 points per second (three times the default drawer width), meaning it takes 1/3 of a second for the Window
to open/close across the default drawer width. Note that there is a minimum .1 second duration for built in animations, to account for small distance animations.
javascript
mainWindow.setAnimationVelocity(400);
Should the shadow be visible?
javascript
mainWindow.setShowShadow(true);
A small effect when the drawer is dragged, the drawer stretches.
javascript
mainWindow.setShouldStretchDrawer(true);
toggleLeftWindow()
and toggleRightWindow()
are used to toggle each visibility of either the left or right window.
javascript
mainWindow.toggleLeftWindow();
A small animation to show the app user that its possible to interact with the drawer.
javascript
mainWindow.bounceLeftWindow();
Mads Moller
web: http://www.napp.dk
email<EMAIL_ADDRESS>twitter: @nappdev
Copyright (c) 2010-2013 Mads Moller
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


Calculate expected due date
from month
{{#inputFieldName}}
User field {{inputFieldName}} used as input
{{/inputFieldName}}
{{^inputFieldName}}
No input user field given
{{/inputFieldName}}
{{#saveAs}}
Result saved as {{saveAs}}
{{/saveAs}}
{{^saveAs}}
No result field given
{{/saveAs}}


This record stores a block of metadata records.
Record Data — BIFF8 only
|
Offset |
Name |
Size |
Contents |
|
4 |
Rt |
2 |
Record type; this matches the BIFF rt in the first two bytes of the record; =088Ah |
|
6 |
grbitFrt |
2 |
FRT cell reference flag; =0 currently |
|
8 |
(Reserved) |
8 |
Currently not used, and set to 0 |
|
16 |
rgmdir |
var |
Block of metadata records |
The rgmdir field contains an array of 8-byte long metadata records of the following structure:
|
Offset |
Name |
Size |
Contents |
|
0 |
imdt |
4 |
Index of metadata record type amongst MDTINFO records; 1-based index stored as a 4-byte integer value |
|
4 |
mdd |
4 |
Index of metadata record value in the storage corresponding to record type |


.
Hello there, awesome person!
Favourite sites in order:
This is a link to Gmail!
This is a link to Google SE!
This is a link to Google Classroom!


Work Day Scheduler
A simple calendar app for scheduling your work day
9AM
10AM
11AM
12PM
1PM
2PM
3PM
4PM
5PM
6PM
7PM
8PM
9PM
10PM
11PM


I have successfully assembled and Im able to monitor my power consumption on emoncms.org however, im looking for a way to run it locally on a raspberry 2 (ubuntu), I already went to read the linux installation guide on https://github.com/emoncms/emoncms/blob/master/docs/LinuxInstall.md
Several questions come to my mind, but the most important is this one:
The original SD card that was shipped to me from the emonstore has a script where I had to edit my account API key and just like that everything works as intended (on emoncms.org); If I decide to install debian/ubuntu on that same SD card, and then follow the steps in the Linux installation guide... then... Can it actually save the data to de database without an internet connection and use localhost to check my graphs?? if not, how can I accomplish this?
The script in the prebuilt SD card does this process to post the data online however, i cant see this working without it
All i want to be able to do is use localhost/emoncms to access the application on my browser that will be showing the data stored to my external USB Harddrive, all of this without an internet connection (no ethernet nor Wifi just linux and the emonTx 3.4)
Thanks in advance.
Re: Installing emoncms in the Raspberri Pi2 and store data to a USB hard drive (no internet)
if your data is coming via a rfm network then you should use emonHub to interface the RFM2Pi and then emonHub can deliver the data to emonCMS on the same machine via the localhost url, no network required.
The script you mention to add your emoncms.org account apikey to works exactly the same way for a local install, you just need the apikey from your local install and set the "url" to http://localhost/emoncms rather than http://emoncms.org.
emonHub will work just as well on ubuntu, just keep it in mind when following any guides the majority of OEM users use Raspbian so the guides can be a bit biased, so may need tweaking.
Emonhub installation/update tells you how to install emonHub (on Raspbian)
Paul


This component is still in beta and should in time replace the existing templates.
A migration period will allow to switch at its own pace once the component is officially published, then its use will be made mandatory and the old templates will disappear.

…

<button id="navsideToggle" aria-expanded="false" class="layout-navside-toggle">Menu</button>

…

…

…

…

…

…

…

…

These childrens of the layout are optional, you can directly remove them from the DOM if necessary.
layout-content-headers-header
layout-content-headers-subheader
layout-content-footer
layout-navside-footer
layout-aside-footer
layout-aside
(you must also add a .mod-asideRemoved
class for this one)Tip: we can also avoid the layout-container if we want to.
You can add these modifiers to the .layout
, they change the default behavior of the structure:
.mod-navsideWithoutScrollbar
to remove the scrollbar from the navigation menu and make the main scrollbar of the page inherit its management;.mod-navsideLarge
to double the width of the navigation menu;.mod-asideBefore
to put secondary content before main content;.mod-contentHeaderStatic
to disable the sticky behavior of the header;.mod-contentSubheaderStatic
to disable the sticky behavior of the subheader;.mod-navsideFooterStatic
to disable the sticky behavior on the footer of the navigation menu;.mod-asideFooterStatic
to disable the sticky behavior on the footer of the aside menu;.mod-contentFooterStatic
to disable the sticky behavior on the footer of the main content;
Important:
you have to delete the headers
container if you only want the header or the subheader sticky.


Moving Away From Wordpress
Recently, my old hosting contract ran out. This did two things:
- Lock down all my old blog content so I couldn’t access it unless I renewed
- Make me re-asses my hosting plan, domain name, and general blog philosophies
The former bummed me out quite a bit, as I had some decent (and decently well travelled) blog posts about various aspects of Android development. It kind of stings to lose those, but, oh well. This led me to the latter: it was probably time to move on anyways. My old blog at advancingbackwards (which now redirects here) was being neglected, and it wasn’t much fun to write on it anymore. Why was that?
The main reason was that I really am not overly fond of Wordpress. It makes creating a blog really simple: install, add theme, create content. Great, if thats all you want to do. But, I have always been a bit of a hacker when it comes to these things. I like having control over the systems I’m using, and concurrently, I also like to have a strong working knowledge of whats making things happen as I use them. With Wordpress, I was never really motivated to learn what was making it tick. I just never really cared. And that, largely, is the reason I stopped using it.
I had decided a while back that I was going to ditch my Wordpress site at some point, I just kept putting it off due to other obligations. My hosting expiring was just the kick in the pants I needed.  YOu can find the github repo here and you can see a working copy of it hosted here. My goal is to keep hacking on this project until it is suitable for production (its currently got some large, gaping SEO issues, which I may write about in another post). After I decided that Curious Wall was not in suitable state to run as a blog, I started looking for alternatives.
I was showing off my advances on Curious Wall as a blog to a friend of mine, Bruce Eckel, and we got to talking about blog software. He mentioned a project I had never heard of called Octopress. I was sold the second I set it up. First off, it uses Jekyll to generate itself, so the whole site is static, which means fast loading times. Second, it comes out of the box with all sort of nifty features such as code highlighting, Github integration, and gist support. Third, its fun to use. I can write my blog content in Vim, run a rake task, and automatically generate the site. Running a second rake task uploads the site to my server via Rsync. Simple, enjoyable, and awesome.
Hopefully, this all combined will give me more reason to more frequently write posts about things, which you can then read (hence, the name of the site). I would eventually like to transfer this all to my fork of Curious Wall, but thats a ways off, and as things stand, I think I like Octopress too much to shift away it.
I’ll be adding things as I see a need, maybe some of it will be helpful, maybe not. Either way, if you’re bored of Wordpress and looking for something a little more friendly, give Octopress a try, its a great project.


Patrick Kearney
About
Portfolio
Contact
Portfolio
Scientific
Culinary
Horticultural
Fitness
Entomological
Connect with Me


*** User 2017-04-18 14:14:19.693 ***
14:14:19.693 [info] Disabling blocking sync...
*** User 2017-04-18 14:14:19.697 ***
14:14:19.697 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-1@MBPdeAnneFrance'
*** User 2017-04-18 14:14:21.179 ***
14:14:21.179 [info] Enabling membership...
*** User 2017-04-18 14:14:21.180 ***
14:14:21.180 [info] Disabling blocking sync...
*** User 2017-04-18 14:14:21.185 ***
14:14:21.185 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-2@MBPdeAnneFrance'
*** User 2017-04-18 14:14:22.655 ***
14:14:22.654 [info] Enabling membership...
*** User 2017-04-18 14:14:22.656 ***
14:14:22.656 [info] Disabling blocking sync...
*** User 2017-04-18 14:14:22.661 ***
14:14:22.661 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-3@MBPdeAnneFrance'
*** User 2017-04-18 14:14:22.880 ***
Joining node: 'node-3@MBPdeAnneFrance' to runner@MBPdeAnneFrance at port 49420
*** User 2017-04-18 14:14:22.880 ***
Joining issued: 'node-3@MBPdeAnneFrance' to runner@MBPdeAnneFrance at port 49420
*** User 2017-04-18 14:14:22.881 ***
Joining node: 'node-2@MBPdeAnneFrance' to runner@MBPdeAnneFrance at port 49405
*** User 2017-04-18 14:14:22.881 ***
Joining issued: 'node-2@MBPdeAnneFrance' to runner@MBPdeAnneFrance at port 49405
*** User 2017-04-18 14:14:22.882 ***
Joining node: 'node-1@MBPdeAnneFrance' to runner@MBPdeAnneFrance at port 49394
*** User 2017-04-18 14:14:22.882 ***
Joining issued: 'node-1@MBPdeAnneFrance' to runner@MBPdeAnneFrance at port 49394
*** User 2017-04-18 14:14:22.943 ***
Waiting for join to complete with manager: partisan_default_peer_service_manager
*** User 2017-04-18 14:14:22.944 ***
Finished.
*** CT 2017-04-18 14:14:22.944 *** COVER INFO
Adding nodes to cover test: [runner@MBPdeAnneFrance]
*** CT 2017-04-18 14:14:22.953 *** COVER INFO
Successfully added nodes to cover test: []
*** User 2017-04-18 14:14:22.989 ***
Tokens: [{select,1,select},
{var,1,name},
{from,1,from},
{var,1,users},
{where,1,where},
{var,1,age},
{comparator,1,'='},
{integer,1,22},
{union,1,'or'},
{var,1,age},
{comparator,1,'<'},
{integer,1,10}]
*** User 2017-04-18 14:14:22.989 ***
Parse Tree: {query,{select,[name]},
{from,users},
{where,{union,{predicate,{var,age},'=',22},
{predicate,{var,age},'<',10}}}}
*** User 2017-04-18 14:14:23.091 ***
Tokens: [{select,1,select},
{var,1,name},
{from,1,from},
{var,1,users},
{where,1,where},
{var,1,age},
{comparator,1,'<='},
{integer,1,22},
{intersection,1,'and'},
{var,1,age},
{comparator,1,'=>'},
{integer,1,10}]
*** User 2017-04-18 14:14:23.092 ***
Parse Tree: {query,
{select,[name]},
{from,users},
{where,
{intersection,
{predicate,{var,age},'<=',22},
{predicate,{var,age},'=>',10}}}}
*** User 2017-04-18 14:14:23.195 ***
Tokens: [{select,1,select},
{var,1,name},
{from,1,from},
{var,1,users},
{where,1,where},
{var,1,age},
{comparator,1,'<'},
{integer,1,22},
{intersection,1,'and'},
{var,1,age},
{comparator,1,'>'},
{integer,1,19}]
*** User 2017-04-18 14:14:23.196 ***
Parse Tree: {query,
{select,[name]},
{from,users},
{where,
{intersection,
{predicate,{var,age},'<',22},
{predicate,{var,age},'>',19}}}}
*** User 2017-04-18 14:14:23.299 ***
Tokens: [{select,1,select},
{var,1,name},
{',',1},
{var,1,age},
{from,1,from},
{var,1,users},
{where,1,where},
{var,1,age},
{comparator,1,'<'},
{integer,1,22},
{intersection,1,'and'},
{var,1,age},
{comparator,1,'>'},
{integer,1,19}]
*** User 2017-04-18 14:14:23.299 ***
Parse Tree: {query,
{select,[name,age]},
{from,users},
{where,
{intersection,
{predicate,{var,age},'<',22},
{predicate,{var,age},'>',19}}}}
*** User 2017-04-18 14:14:23.401 ***
Tokens: [{select,1,select},
{var,1,name},
{',',1},
{var,1,age},
{from,1,from},
{var,1,users},
{where,1,where},
{var,1,name},
{comparator,1,'='},
{string,1,"Foo"},
{union,1,'or'},
{var,1,name},
{comparator,1,'='},
{string,1,"Baz"}]
*** User 2017-04-18 14:14:23.402 ***
Parse Tree: {query,{select,[name,age]},
{from,users},
{where,{union,{predicate,{var,name},'=',"Foo"},
{predicate,{var,name},'=',"Baz"}}}}
*** User 2017-04-18 14:14:23.504 ***
Case finished: sql_parser_test
*** User 2017-04-18 14:14:30.549 ***
14:14:30.549 [info] Application lasp exited with reason: stopped
*** User 2017-04-18 14:14:30.549 ***
14:14:30.549 [info] Application partisan exited with reason: stopped
=== Ended at 2017-04-18 14:14:30
=== successfully completed test case
=== Returned value: ok
Test run history
| Top level test index


.NET Modeling Framework (NMF)
The .Net Modeling Framework (NMF) is a framework to support model-driven engineering using .NET technologies. It consists of several subprojects that ease various model-driven tasks, such as generating code for model representation, or languages to support model transformation, synchronization and optimization.
If the video above does not work, here is a direct link to a tutorial how to use NMF.
NuGet Packages
There are a range of NuGet-packages available that bundle some of the functionality of NMF. These packages are potentially more stable than the source code, but may not contain the latest features of NMF. The packages are:
- NMF-Expressions : Contains the NMF library for incremental computation. This package has no other dependencies and can even be used independently of the modeling framework.
- NMF-Repository : Conatins the repository management of NMF (depends on NMF-Expressions)
- NMF-Basics : Contains the latter two plus a code generator to generate model representation code from any Ecore or NMeta metamodel. The code generator integrates with the Nuget Package Console.
- NMF-Expressions-Utilities : Contains some utility classes for NMF Expressions such as dictionary of incremental values
- NMF-Transformations : Contains the model transformation language NTL used in NMF
- NMF-Synchronizations : Contains the incremental, uni- and bidirectional model transformation language NMF Synchronizations
Tutorials
Besides, there is a range of solutions to various cases of the Transformation Tool Contest (TTC). They can serve to describe how to solve specific problems using NMF and each come with a GitHub repository that includes the code. Further, the journal publications contain rich documentation on select topics. Lastly, the PhD thesis of Georg Hinkel is probably the richest documentation available.
Detailed Project information
Detailed project information to the sub-projects of NMF can be found on the wiki pages to these projects:
Publications
The publications about NMF are available on a separate section
Roadmap
At the moment, the lack of documentation is the biggest hurdle, so work in the near future will go either into resolving issues or adding documentation. Any help here is welcome! Further points of development will be a benchmark of the parallel change propagation and testing of dynamic deep modelling support.
NMF has been the PhD project of Georg Hinkel. Further development is done at the moment rather as kind of a hobby.
Contribute
Developers are dear welcome to contribute to NMF in various ways. Please just write an Email to Georg Hinkel.


Yosemite
Not just a great valley, but a shrine to human foresight, the strength of granite, the power of glaciers, the persistence of life, and the tranquility of the High Sierra.
First protected in 1864, Yosemite National Park is best known for its waterfalls, but within its nearly 1,200 square miles, you can find deep valleys, grand meadows, ancient giant sequoias, a vast wilderness area, and much more.
Price for Single Person:
Price for Family:


Brief introduction
Using Perl 6 official documentation
Documenting a large language like Perl 6 has to balance several contradictory goals, such as being brief whilst being comprehensive, catering to professional developers with wide experience whilst also being accessible to newcomers to the language.
For a quick hands-on introduction, there is a short annotated programming example
.
For programmers with experience in other languages, there are a number of Migration guides that compare and contrast the features of Perl 6 with other languages.
A number of Tutorials cover several areas in which Perl 6 is particularly innovative. The section headers should help navigate the remaining documents.
There are a number of useful resources
listed elsewhere on the perl6.org site. These include articles, books, slide presentations, and videos.
It has been found that newcomers to Perl 6 often ask questions that indicate assumptions carried over from other programming paradigms. It is suggested that the following sections in the Fundamental topics
section should be reviewed first.
Signatures
- each routine, which includes subroutines and methods, has a signature. Understanding the information given in the signature of asub
ormethod
provides a quick way to grasp the operation and effect of the routine.Containers
- variables, which are like the nouns of a computer language, are containers in which information is stored. The first letter in the formal name of a container, such as the '$' of $my-variable, or '@' of @an-array-of-things, or '%' of %the-scores-in-the-competition, conveys information about the container. However, Perl 6 is more abstract than other languages about what can be stored in a container. So, for example, a $scalar container can contain an object that is in fact an array.Classes and Roles
- Perl 6 is fundamentally based on objects, which are described in terms of classes and roles. Perl 6, unlike some languages, does not impose object-oriented programming practices, and useful programs can be written as if Perl 6 was purely procedural in nature. However, complex software, such as the Rakudo compiler of Perl 6, is made much simpler by writing in object-oriented idioms, which is why the Perl 6 documentation is more easily understood by reviewing what a class is and what a role is. Without understanding about classes and roles, it would be difficult to understand types, to which a whole section of the documentation is devoted.Traps to Avoid
- Several common assumptions lead to code that does not work as the programmer intended. This section identifies some of them. It is worth reviewing when something doesn't quite work out.