Hi everyone,
I've taken the plunge with OpenEnergyMonitor and started by getting an emontx shield v2 and 1 CT clamp, plus radio chip. (No AC-AC yet - will add later. And no nanodes or base stations in the system, so I'm using the serial monitor to check output from the board, rather than radio).
Was really impressed by how quickly the kit arrived! I've soldered all the non-SMT components and attached it to the Arduino.
I've uploaded the emonTxShield/Shield_CT1234 sketch.
This runs, but I don't think the readings are correct. I've tested this by attaching the clamp around the lead to my kettle to start with. The readings don't seem to change appreciably when the kettle is on, so I'm sure something isn't right! Here's an example of the output of the script with the CT connected to CT input 1:
19 0 32 0
19 0 32 0
23 0 34 0
18 0 34 0
This doesn't change if the kettle is on or off. If I disconnect the CT from the jack, then here are the kind of readings I get:
0 0 34 0
0 0 34 0
0 0 35 0
If I plug the CT into each port in turn, then I do see a big spike in readings for the relevant port. Here's an example of me plugging the CT into port 4 (with the clamp not round anything):
0 63 32 0
0 55 32 0
0 444 32 5473 <--- Here is where I plugged into CT4
0 1 31 3543
0 0 32 764
0 0 33 139
0 0 32 45
0 0 32 22
0 0 32 22 <--- CT4 is still plugged in here, and the readings seem to stabilise after the initial spike
I think something's probably not right, and I guess the most likely problem is with hardware (eg. how I've soldered the board). My question is, what is the best procedure for testing this? Are there any sensible checks I can do with a multimeter, or simple tests I can run? All the soldering I've done looks okay to theye.
I had a look through other forum posts, and I noticed there's lots of talk about tests that can be done with Robin's tools. These look like a good place to start. I've run RawSamplesTool. This works fine in debug mode (with demo values). But when I switch debug off, it appears to hang, with output looking like this --- and there's no more output after the countdown begins (eg. nothing after '4' below):
In NORMAL mode ...
SUPPLYVOLTAGE = 4962, VIn NORMAL mode ...
SUPPLYVOLTAGE = 4940, V_RATIO = 1.42, I_RATIO = 0.38
millis() now = 11
recordingMayStartAt 5011
4
-------------
Thanks in advance for help with any of this!
Tom K
Re: EmonTX Shield v2 - troubleshooting
Hi everyone,
Following the last email, I've fixed most of my problems by resoldering the joints on CT3. That seemed the best place to start, because the readings from that jack were consistently weird.
It's now working great, with all the readings spot-on.
I do still have the problem with Robin's RawSamplesTool hanging during the countdown. I was able to get the script to run without hanging once, by pressing the reset key and keeping on doing this until on one of the runs it completed successfully - but I guess that could be a bug in the script rather than a hardware error.
Thanks - looking forward to doing more experimenting with this!
Tom
Re: EmonTX Shield v2 - troubleshooting
Robin will no doubt comment on his RawSamplesTool. I'm not totally familiar with all of them, but some require the ac voltage input to work properly.
In case you were wondering about the high values when you plug the c.t. in (and warning - don't unplug or leave unplugged the c.t. while it's on a cable that's energised, you could get a nasty high voltage, 22 V if the internal protection is working and much higher if it isn't), that's due to the d.c. component that's there initially before the software high pass filter settles and removes it.
Re: EmonTX Shield v2 - troubleshooting
Thanks Robert - Ah, okay, that makes sense. Re: the RawSamplesTool - ah, yes maybe it's because of my lack of AC-AC connection. I know that lots of people are using the tool fine, so it must be something that I haven't done that is making it freeze --- perhaps it's waiting for the AC-AC input.
Tom
Re: EmonTX Shield v2 - troubleshooting
Is there not a descriptive comment at the top of the sketch? Robin usually puts quite clear instructions there. Failing that, look up the page where he first posted the tool.
Oh dear, it took me longer to find the page than to spot the clue: "it records all voltage and current samples that are taken during one complete cycle of the mains." Can you tell (maybe from looking at the sketch) how it tells when a cycle of mains begins and ends? Maybe the comment that begins at line 68 is worth reading?
Re: EmonTX Shield v2 - troubleshooting
For anyone else reading, here is a link to the page with the tools:
http://openenergymonitor.org/emon/node/1757
And the description at the top of the file reads:
*
* Tool to display the raw samples generated by an Arduino. Starts in' debug' mode
* which uses synthesized values for voltage and current. For normal operation,
* commment out the '#define DEBUG' statement a few lines down.
*
* Pauses after each set of measurements has been taken. Press spacebar, then [cr],
* to repeat.
The code that I'm reading (rawSamplesTool) doesn't have a comment on line 68, but I think what you're saying is that if there's no voltage, it's never going to be able to tell when one cycle ends, so it's just going to sit there forever waiting for a voltage change. I can't quite see this on the code, but I guess that must be what's happening.
I'll have a look through and see if there are any scripts that might help with a CT-only setup...
Tom
Re: EmonTX Shield v2 - troubleshooting
I was looking at the later "improved" version. The comment is on line 141 in the version you are using.
Re: EmonTX Shield v2 - troubleshooting
Okay - so here's a copy of the comment on line 141. It looks like the countdown should run over a few seconds, and at the end of this, the recording process starts:
... The code that determines the end of the cycle checks for a polarity change:
... And I guess this condition is never satisfied, so the program runs in an infinite loop.
It would be useful to have a guide to troubleshooting emonTxv2 shield in a CT-only setup. I'll have a look through the other programs and see if I can find any that are useful for debugging this kind of problem, and will try and get a guide together to make this process easier.
Tom


In today's hectic society, our lives feel like a never-ending procession of tasks, deadlines, events and anniversaries to keep up with. Tracking these daily activities on a to-do list can be daunting. Many task management applications today have too many buttons that you have to click through just to add a task, and user interfaces that are so cumbersome it is hard for you to make it a habit to use.
Ever wished for a tool that can manage all your daily activities in distinct categories, and suggest to you which one you want to complete first? Well, look no further as Uncle Jim's Discount To-do List is here to save your day.
Uncle Jim's Discount To-do List (Uncle Jim in short) is a revolutionary mouse-free personal task manager that helps you to keep track of your daily activities through the power of your keyboard. Gone are the days when you had to click through several pages of menus just to add a simple task to your schedule. Our command line interface is not only flexible but remarkably easy to use. Just type the command and hit enter!
Moreover, we know that you understand your activities better. So Uncle Jim allows you to create your very own categories to organise your activities. Uncle Jim is also capable of managing both tasks and events so you don't have to use two different applications to be productive. Our unique product will intelligently sieve out urgent deadlines and serve up reminders for you, so you will no longer overlook another significant activity.
Sounds exciting? Then let's get started!
Ensure you have Java version 8 update 60 or later installed on your computer.
This application will not work with earlier versions of Java 8
Download the latest copy of Uncle_Jim.jar
from our releases page.
Double-click the file to start the application. You should see something like this
Type in the command box and press Enter to execute it.
Here are some example commands you can try:
add
Finish CS2103T homework /d next Friday
-
adds a new task with the deadline set for next Fridaydelete
3
- deletes the 3rd task shown in the current listexit
- exits the appRefer to the commands reference section below for details of each command.
You can refer to the section below for the full list of commands that are available in Uncle Jim. For quick reference, you can also refer to the command summary at the end of this guide or use the help
command when using the app.
UPPERCASE
are the parameters.[SQUARE BRACKETS]
are optional./f
) for short flags....
within each parameter means you can add more items within the same parameters than specified.INDEX
. This is a number indicated on the left of a task or event as shown in the screenshot below:Uncle Jim supports flexible date formats so you can enter dates in the formats specified below:
Formal dates
Dates in a standard numerical form such as DDMMYYYY or DD/MM/YY.
Example
1978-01-28
29/10/94
Relaxed dates
It is not always necessary to write it in full formal date formats - Uncle Jim allows relaxed date formats as well. If you don't include the full date, we will use the current month or year
!!! example Oct 12 9pm 9 May
Relative dates
We also understand days of the week and even relative date and time.
Example
next Thursday
tomorrow evening
in two days
Note
If no time is specified when entering a date, Uncle Jim will use the current time by default
help
#Format: help
Help allows you to have a quick reference of the commands in case you forgot the format to follow.
add
#Format:
add
TASK NAME [/d DEADLINE] [/m DESCRIPTION] [/p] [/t TAG 1, TAG 2...]
add
EVENT NAME /d START END [/m DESCRIPTION] [/l LOCATION] [/p] [/t TAG 1, TAG 2...]
You can add new tasks or events to the To-do List using the add
command.
Although the list of parameters above looks intimidating, all of them except the name of the task are optional. Tasks will be turned into events automatically if there are two dates specified under the /d
flag.
Here are some common scenarios where you would use the various parameters:
You can add a task by simply giving a name.
Example
add
Finish up developer guide for CS2101
Note
Try to keep titles short. If you need more details, do put them in the description.
You can add events by specifying a start time and end time with the /d
flag. Event locations can be specified by adding them with the /l
flag.
Example
add
Music at the park /d 11 Dec 6pm to 8pm /l Botanic Gardens /p
If you need something done by a specific time, add a deadline to your task by specifying a single date and time with the /d
flag.
Example
add
Submit Project Proposal V0.0 /d 5 Oct 2359
If you need to add more details to a task, you can add them under the /m
flag. Note that these descriptions will be hidden from default view, once the task is added. To learn how to see these details again refer to the show
command.
Example
add
Destroy the Earth /m Going to need a lot of TNT for this. Remember to get them on sale on Friday - 50% discount on bulk orders!
Have something you don't want to forget? These tasks or events can be pinned to the top of the list using the /p
flag. See the pin
command for more details.
Example
add
Meet Li Kai at Friday Hacks! /d 21 Oct 6pm to 8pm /p
If you have a lot of tasks you can use tags to organize them. See the tag
command for more detail.
Example
add
Finish tutorial 6 /d 10 Oct /t CS2106, School
| Flag | Parameter | Used to |
|---|---|---|
/d |
DEADLINE |
Specify a deadline for the task |
/d |
START END |
Specify the start and end time for the event |
/m |
DESCRIPTION |
Add a long description to the task or event |
/l |
LOCATION |
Add a location to the event |
/p |
- | Pins the task to the top of the list |
/t |
TAG 1, TAG 2, ... |
Tags to help organize your tasks |
delete
#Format: delete
INDEX
This allows you to delete the task specified by the INDEX
parameter. The index refers to the index number shown in the current view.
Note
If you accidentally deleted the wrong task, not to worry! You can undo the action later on. See the undo command for more information.
Example
delete
2
find
Y2S1
delete
1
find
Y2S1
command.complete
#Format:
complete
INDEX
complete
/all
After finishing a task, you can mark it complete by specifying the index of the task you wish to mark complete in the INDEX
parameter. Completed tasks have their title struckthrough.
If you wish to mark a batch of task in the current view as complete, you can use the /all
flag to mark them all as complete.
Note that this is a toggle command, so if the specified task is already completed, running this will mark the task as incomplete again.
clear
#Format:
clear
If you start to have a lot of completed tasks building up, you can clear the clutter by deleting all of them with clear
. Note that this only clears completed tasks in the current view.
pin
#Format: pin
INDEX
If a particular task or event is important, you can pin it to the top of every list the item appears in using this command. You can also use this command to unpin any pinned task.
edit
#Format:
edit
INDEX [NAME] [/d DEADLINE] [/m DESCRIPTION] [/r TIME] [/p]
edit
INDEX [NAME] [/d START END] [/m DESCRIPTION] [/l LOCATION] [/p]
You can edit tasks or events using the edit
command. This command accepts the same parameters as the add
command with the addition of INDEX
, which specifies which task or event you want to edit.
Note that edits are automatically saved, and any errors can be undone using undo
.
tag
#Format:
tag
tag
INDEX TAG1, TAG2, ...
tag
[INDEX] /r OLD NEW
tag
[INDEX] /d TAG
You can use tags to organize your tasks easily. Each task may have up to 5 tags. Tags are alpha-numeric and case-insensitive, and you can use hyphens "-" and underscores "_" in your tags too. You can use the tag
command to add, edit or delete tags from one or all of the tasks. Here are some of the examples of what you can do with the tag
command:
Sometimes you might not want to reuse tags you have used for other tasks previously. To check what tags are already used, simply type tag
with no flags, and Uncle Jim will show you all tags that are used in the app.
If you wish to add tags to a task, simply type tag
with the INDEX
and the tag names you wish to add to a task. This does not overwrite any existing tags on a task:
Example
tag
1 cs2103T
cs2103T
tag to the first task on the listYou can rename tags for either a single task, or all tasks using /r
:
Example
tag
/r Business Pleasure
Business
tag to Pleasure
tag
1 /r Business Pleasure
Business
tag to Pleasure
only in task 1. Note
Note that without the INDEX parameter, doing this will affect all tasks tagged with the specified tag, such as Business in the example above.
You can also remove a tag from either a single task, or all tasks at once with /d
:
Example
tag
1 /d important
important
tag from the first task tag
/d important
important
tag from all tasks. Remember you can always undo
if you make a mistake. Keep it simple!
Tags are only really necessary if you have a lot of tasks. Uncle Jim works just as well even if you don't use tags. For maximum productivity, keep your tags short and simple, and keep them broad so that you can apply them to many tasks. In this manner, we have imposed a maximum of five tags per task.
show
#Format: show
INDEX
Descriptions of tasks and events are hidden by default. In order to display them, you can use this command to toggle between the expanded version of a task and its compact form, as shown below:
view
#Format: view
VIEW
You can drill down into your To-do List and see specific tasks, such as your incomplete tasks or today's schedule, using the view
command:
Example
view
completed
You can also use the underlined character in the view's name as the shortcut when switching views.
Example
view
i
i
is the underlined character as shown in the image above. find
#Format: find
KEYWORD [MORE KEYWORDS] [/t TAGS]
You can search for tasks using the find
command. The search is case insensitive and the order of the keywords does not matter. Add the /t
flag allows you to specifically search for those tags.
Note
Keywords are separated by spaces, not comma
Example
find
Github
find
/t code
find
git development code
exit
#Format: exit
If you wish to exit the program, simply type exit
.
undo
#Format: undo
If you make any mistake, simply typing undo
to undo your last action.
Note
Only applies to commands which have made changes to the To-do list like add
, edit
and delete
redo
#Format: redo
Similar to the undo
command, you can redo your most recent action that you revoked as well.
load
#Format: load
FILENAME
You can use load
to load another .xml
file into the application. This can be used to restore a backup or switch to different lists. You can also use this to manage different To-do lists, such as having one for home and another for work.
Example
load
myDiscountTodo.xml
save
#Format: save
[FILENAME]
By default, to-do list data are saved in a file called discountTodo.xml
in the data
folder. You can change the save file by specifying the file path as the first argument when running the program, or by using the save
command.
The save
command will show you the location of the current save file if you use it without specifying a FILENAME
.
Autosave
Your to-do list is saved automatically every time it is updated. There is no need to save manually after each edit.
Our user interface is very interactive and features a lot of visual feedback to the user. For example, for commands such as add, edit and show, you can see upon which task your action acts upon by viewing which task is highlighted.
Also, Uncle Jim distinguishes between tasks and events, not only by different tag colors but by also handling them differently. For example, if you have a task that is overdue, Uncle Jim will instantly highlight it red.
For events which are ongoing, they will be highlighted green.
For events which have passed, they will be faded, but we leave it to you to mark the events complete.
As you get more advanced with Uncle Jim, you might find typing the full command slightly cumbersome. To speed up your workflow you can type our just the first few characters of a command, because our Intelligent Command™ system can recognise commands even if you do not type them out fully.
Example
com
1
If the commands are ambiguous, our system will ask you for clarification of which command you wish to execute.
For example, typing just e
could refer to edit
or exit
so a message as shown below will be displayed to you.
We also understand that it takes time for new users to remember all the commands. As such, we have a CommandPreview™ which tells you the parameters of the command you have to enter. For example, if you type ad
the system will process your keystrokes and display to you what commands it thinks you are going to execute and displays them as shown below:
Q: Is my data secure?
A: Your data is stored locally on your hard drive. So, your data is as secure as your hard drive. We do not have access to your To-do list.
Q: How do I back up my data?
A: As your data is saved to the file that you specified, you can simply copy this file to a back up storage of your choice.
Q: How do I sync my data with multiple devices?
A: Simply load the file to a cloud sync service like Dropbox or Google Drive, and all updates will be reflected automatically to all devices using the file.
Q: How do I pay for this project?
A: Donations can be made via PayPal or Kashmi. Cash donations are fine too. Basically if you wish to donate we will find a way for us to receive your money.
| Command | Format |
|---|---|
| Help | help |
| Add | add NAME [/d DEADLINE or START END] [/m DESCRIPTION] [/p] [/t TAG 1, TAG 2...] |
| Clear | clear |
| Delete | delete INDEX |
| Complete | complete INDEX or /all |
| Pin | pin INDEX |
| Show | show INDEX |
| Edit | edit INDEX [NAME] [/d DEADLINE or START END] [/m DESCRIPTION] [/p] |
| Tag | tag INDEX TAG 1, [TAG 2...] or [INDEX] /r OLD NEW or [INDEX] /d TAG |
| Find | find KEYWORD [MORE KEYWORDS...] or /t TAG [MORE TAGS ...] or both |
| Undo | undo |
| Redo | redo |
| Load | load FILENAME |
| Save | save [FILENAME] |
| View | view VIEW |


2018-12-06: Microsoft confirms Edge is moving to Chromium sometime next year....
2018-12-05: The Verge’s Better Worlds: a science fiction project about hope...
2018-12-04: Land Rover Defender Spied Flaunting Its New Body In The...
2018-12-03: A tip for all Uber drivers: play your local jazz...
2018-11-30: I’d rather buy the digital download version of Firefly (again)...
2018-11-29: Zcash (ZEC) is launching on Coinbase Pro. I have a...
2018-11-28: Had lunch with my yellow princess.
2018-10-28: On Sundays we go out. Otherwise these two (plus mom)...
2018-10-20: After lunch cappuccino with the Prismo AeroPress thingy. It was...
2018-10-14: We made a killer entrecôte today.
2018-10-14: We Went Painting Robie and Ana painted a plane, and Bettina tried to...
2018-09-29: Another gift coffee. Very chocolatey. Trying to see if I...
2018-09-28: Forgot to post this in the morning: trying a new...
2018-09-26: El más feliz de los 37 cumpleaños. Muy agradecido por...
2018-09-26: Sugar and Star Wars.  Now I just need...
2018-09-08: Really excited to start listening to Creative Selection by Ken...
2018-08-19: For the Love of Spock is a solid documentary. A...
2018-08-12: Sous vide cold brew experiment this morning with my favorite...
2018-08-04: Picked up some freshly roasted coffee to try later today....
2018-06-30: Me maneja.
2018-06-17: Todos los días pienso en lo bueno que es el...
2018-06-17: Happiest Father’s Day with this troupe of cousins.
2018-05-13: We heart you @anitamarcela.
2018-04-14: What's my name again? I’m struggling deciding how and where to microblog. Which is...
2018-04-13: My dad’s steak adobo recipe: Soy sauce Worcester sauce Mesquite...
2018-04-11: I’m still bullish on Soylent because of its minimalist concept:...
2018-04-11: Cataratas La Paz La Paz Waterfall Gardens: About 90 min from our house...
2018-04-11: Two Roberto’s, one map. Hilarity ensues.
2018-04-08: Current cold brew coffee recipe: 1.5 cups of coarse dark...
2018-04-05: Thought I was ser for life with my Goruck GR1...
2018-04-01: Fun end of weekend con Aba.
2018-03-30: Surprised I didn’t know about the Marta File Manager for...
2018-03-28: Browsery, Barnes & Noble’s answer to Goodreads seems very interesting....
2018-03-28: 1Password 7 Beta for Macis out. I’m traveling, so I...
2018-03-27: Saw Annihilation tonight. Good movie, but not as mind blown...
2018-03-27: No smart connector on new base iPad. The keyboard is...
2018-03-26: Costa Rica has pushed me to be an accidental coffee...
2018-03-25: Suddenly feel less bad about taking 3 months to finish...
2018-03-25: Multi-media.
2018-03-23: Owner of at least two Roberto Mateu’s hearts. (Co-owner with...
2018-03-21: First time in the big boy seat
2018-03-19: Would love a comparison between Studio Neat’s upcoming Mark One...
2018-03-18: I have to agree out of principle… and justifying my...
2018-03-17: Going to give Jellies a try. YouTube Kid’s ad-supported model...
2018-03-17: Cena Peruana Tempranera No le pongamos el chupón para que no se duerma…....
2018-03-14: Jason Fried makes the case (unknowingly?) for micro.blog no follower...
2018-03-14: However, from the HNews thread on digg reader, Winds 2.0...
2018-03-14: Sad that digg reader is shutting down. I’m a happy...
2018-03-13: For DRM-free audiobooks, Bound is my favorite iOS app. As...
2018-03-12: A good bad day at work. Encountered ( found gives...
2018-03-10: We saw Wonder today. It’s a feel good movie that...
2018-03-10: Saturday trip stop.
2018-03-09: Wish TunnelBear team the best in joining McAfee. But would...
2018-03-09: Been enjoying the Scribd service, and will probably finish Sapiens...
2018-03-08: I present both the most complex engineering project I’ve embarked...
2018-03-08: YouTube TV doesn’t let me cancel from Safari… which would...
2018-03-07: Bettina's First Beach Day After planning to go to Playa Mantas we ended up...
2018-03-06: Josh Comeau’s webpage, Let’s Learn About Waveforms, deserves many awards....
2018-03-06: Excited about Legion Season 2. The first season was probably...
2018-03-06: Wesley Moore: A Year Away From Mac OS I spent...
2018-03-06: If I didn’t check the site already a few times...
2018-03-06: The Angle is a nice looking straight razor. However, not...
2018-03-06: Had to rollback a release in production. Bummed after a...
2018-03-04: Beach day.
2018-03-04: The Death of Stalin wasn’t sitcom funny, it was actually...
2018-03-03: This iPad appears broken.
2018-03-01: RAMS, about legendary German designer Dieter Rams – by Gary...
2018-02-27: Enjoyed MacSparky’s Blogging Workflow: Move the Cursor from Left to...
2018-02-26: Google and HTTP: The web is a social agreement not...
2018-02-26: Today’s morning pomodoros soundtrack 🎵 is Stillness by Heron.
2018-02-25: I don’t regret pushing my company to Slack last year....
2018-02-24: Great Vox video on app addictiveness. I do remember pull...
2018-02-23: […] Assistant will be able to understand you in multiple...
2018-02-22: Apple TV hard reset was mostly painless. Sadly FetchTV crashes...
2018-02-22: Well, movie night got off to a fun start. Stuck...
2018-02-21: Finally a lower priced Nest Aware plan ($5 a month,...
2018-02-21: Why It’s so Hard to Actually Work in Shared Offices...
2018-02-20: Enjoyed this scientifically anecdotal comparison of Apple Maps vs. Google...
2018-02-20: Here’s hoping that changing the iBooks name to Books, is...
2018-02-18: Con mi otra consentida.
2018-02-16: This Community mini reunion was very enjoyable..
2018-02-09: En la aventura actual no tenemos selfies sin enanos sonrientes,...
2018-02-08: Scribd’s new unlimited* books and audiobooks subscription is very compelling....
2018-02-08: The idea of text to speech is always compelling, but...
2018-02-07: By the by, I’m loving my 4 WyzeCam’s. Probably being...
2018-02-07: Every time I read a company is rejoining its parent,...
2018-02-06: Simple Print is an web article cleanup and PDF that...
2018-02-03: Blade Runner 2049. WOW, just wow. Love it when regardless...
2018-01-25: PencilSnap for Apple Pencil Added to wishlist.
2018-01-25: Walmart and Rakuten take on Amazon with Kobo e-reader alliance...
2018-01-23: 🔗 20 Things I Learned From Becoming Warren Buffett Gotta...
2018-01-20: If you’d ever cleaned a car seat or stroller, you...
2018-01-15: Saw Atomic Blonde last night. Enjoyed it. Wasn’t familiar with...
2018-01-09: Microsoft says security fixes will noticeably slow older PCs If...
2018-01-09: Giving Alfred a try again. Spotlight works, but I miss...
2018-01-08: Macdrifter carefully explains how blogs are dead or dying, and...
2018-01-03: Intel’s KPTI flaw is really bad, but be ready to...
2018-01-03: Brent Simmons is going to post more on micro.blog, and...
2018-01-02: “wake up early” is an eternal failed resolution my life....
2017-12-30: Interesting HN comments on Wired’s Kindle piece. Many only use...
2017-12-26: Finally saw The Last Jedi. Spoiler free thoughts: Glad I...
2017-12-22: Found my AirPods.
2017-12-21: Excellent point: These new apps may feel less like Mac...
2017-12-20: Not doing so great on the non-fiction reading these past...
2017-12-12: Giving the default macOS Spotlight a try for a few...
2017-12-07: Also, when”reputable” futures markets appear, the speculation will work both...
2017-12-07: Without a doubt cryptocurrencies like Bitcoin are the future. But...
2017-11-30: Gemini PDA: 20 Years On, Meet The All New Psion...
2017-11-27: Head to head testing between Nest and Wyze cam starts...
2017-11-22: RememBear looks like a solid password manager from the TunnelBear...
2017-11-14: The best laptop ever made Apple has made many great...
2017-11-13: Winter is coming. However, if you do order an ark...
2017-11-12: Saw Valerian and the City of a Thousand Planets. Amazing...
2017-11-09: Polyfact The best way to browse Reddit’s /r/todayilearned/ Just wasted...
2017-11-09: I’ve switched my writing (as if) to Ulysses, but IA...
2017-11-09: Exile’s Kiss You All Over is one my favorite new...
2017-11-08: This open letter to Apple regarding foreign taxes is the...
2017-11-08: CrossOver for ChromeOS (via android) is a very intriguing idea....
2017-11-07: Excited for Firefox 57 on the desktop and Firefox 10.0...
2017-11-07: Been trying to send money to Costa Rica for almost...
2017-11-07: Today while playing Robie told me Papi, cell aquí and...
2017-11-06: Taking a break from Sci-Fi, started The Nix by Nathan...
2017-11-06: Some app updates make me hungry.
2017-11-04: Giving up on New York 2140 by Kim Stanley Robinson....
2017-11-04: The building blocks of Saturday.
2017-11-03: No iPhone X for me. Rational reason is cost saving,...
2017-11-03: Embracing Friday.
2017-11-02: Finished Red Oaks last night. Probable the best summer tv...
2017-11-02: Read-It-Never: Instapaper and therapeutic self-delusion carefultech.net/2017/11/r… Ouch – the it...
2017-11-02: How to access and edit your notes from Control Center in iOS 11 In iOS 11, you can customize how the Notes app...
2017-11-02: Reddit’s favorite learning books, from 3.5B comments redditfavorites.com From a...
2017-09-12: Derretido.
2017-08-22: First day of class.
2017-08-21: Palm #eclipse2017 Shadows
2017-07-14: Flying from SJO to Miami. Empty seat next to me,...
2017-07-13: Finally playing with the micro.blog app. Deciding on subdomain for...
2017-06-18: Cook by numbers with Father’s Day gifts.
2017-05-13: Mañana de monos, mapaches y pisotes.
2017-05-07: This is Ground Control to Roberto Andrés…
2017-04-25: Posted my quick notes for the books I read over...
2017-04-25: My first tweet had a misspelling, so my first mic...
2017-03-24: Guys night-in.
2017-03-12: The end of the rainbow is… a parking in Brickell....
2017-02-19: What’s up, doc?
2017-02-11: Sometimes when he’s really bored, I get a charity kiss....


Matthews, William Henry
| Birth Name | Matthews, William Henry |
| Gender | male |
| Age at Death | about 87 years, 6 months, 6 days |
Narrative
William Matthews son of Francis Matthews (Saddler) & Frances Maria Gardener of Devon, Arrived 1839 per "Mary" with parents & sister Fanny.
7/6/1988 - Mitchell Library, checked out al the Baptism at St.John's Parramatta - S.A.G. 55 & 56 Vol 1.
SMH - MATTHEWS, July 7, 1923, at his daughter's residence, 25 Boyce St, Glege Point, WILLIAM HENRY MATTHEWS, husband of the late Jane Elizabeth Matthews, in his 87th year.
FUNERAL - The rels & friends of the late Mr WILLIAM HENRY MATTHEWS, are kindly invited to attend his funeral, to leave his daughters residence, 25 Boyce St, Glebe Point this Monday (9/7/1923) after a service at 3pm for CofE Cemetery, Waverley.
Events
| Event | Date | Place | Description | Sources |
|---|---|---|---|---|
| Birth | about 1836 | Devonshire England | ||
|
|
||||
| Death | 1923-07-07 | 25 Boyce St, Glebe NSW Aust | ||
|
|
||||
| Burial | 1923-07-09 | Waverley CofE Cemetery | ||
|
|
Parents
| Relation to main person | Name | Birth date | Death date | Relation within this family (if not by birth) |
|---|---|---|---|---|
| Father | Matthews, Francis | 1837 | ||
| Mother | Gardener, Frances Maria | |||
| Matthews, William Henry | about 1836 | 1923-07-07 | ||
| Sister | Matthews, Fanny | about 1850 | 1906/7-06-29 (Julian) |
Families
Family of Matthews, William Henry and Gray, Jane Elizabeth |
||||||||||||||||||||||||||
| Married | Wife | Gray, Jane Elizabeth ( * 1835-10-04 + 1918-09-21 ) | ||||||||||||||||||||||||
|
||||||||||||||||||||||||||
| Children |
| Name | Birth Date | Death Date |
|---|---|---|
| Matthews, Lilly May | 1865-05-15 | 1918 |
| Matthews, Henry Joseph | 1867-05-22 | 1916-08-26 |
| Matthews, Sydney James | 1868-08-17 | 1918 |
| Matthews, Janet Maude | 1870-10-29 | 1943 |
| Matthews, Alma Charles Gray | 1873-12-12 | 1942 |
| Matthews, Albert Romaine | 1875-07-31 | 1912 |
| Matthews, Beryl Ruth | 1878-04-13 | 1957 |
| Type | Value | Notes | Sources |
|---|---|---|---|
| _UID | 4CFDFA65E5C4D5119853B7EB0FA9CA6DB391 |
Attributes
| Type | Value | Notes | Sources |
|---|---|---|---|
| _UID | 5DFDFA65E5C4D5119853B7EB0FA9CA6DC4A1 |


nsupdate — Dynamic DNS update utility
nsupdate
[-d
] [[-y
] | [keyname:secret
-k
]] [keyfile
-t
] [timeout
-u
] [udptimeout
-r
] [udpretries
-v
] [filename]
nsupdate is used to submit Dynamic DNS Update requests as defined in RFC2136 to a name server. This allows resource records to be added or removed from a zone without manually editing the zone file. A single update request can contain requests to add or remove more than one resource record.
Zones that are under dynamic control via nsupdate or a DHCP server should not be edited by hand. Manual edits could conflict with dynamic updates and cause data to be lost.
The resource records that are dynamically added or removed with nsupdate have to be in the same zone. Requests are sent to the zone's master server. This is identified by the MNAME field of the zone's SOA record.
The
-d
option makes
nsupdate
operate in debug mode.
This provides tracing information about the update requests that are
made and the replies received from the name server.
Transaction signatures can be used to authenticate the Dynamic DNS
updates.
These use the TSIG resource record type described in RFC2845 or the
SIG(0) record described in RFC3535 and RFC2931.
TSIG relies on a shared secret that should only be known to
nsupdate and the name server.
Currently, the only supported encryption algorithm for TSIG is
HMAC-MD5, which is defined in RFC 2104.
Once other algorithms are defined for TSIG, applications will need to
ensure they select the appropriate algorithm as well as the key when
authenticating each other.
For instance suitable
key
and
server
statements would be added to
/etc/named.conf
so that the name server can associate the appropriate secret key
and algorithm with the IP address of the
client application that will be using TSIG authentication.
SIG(0) uses public key cryptography. To use a SIG(0) key, the public
key must be stored in a KEY record in a zone served by the name server.
nsupdate
does not read
/etc/named.conf
.
nsupdate
uses the
-y
or
-k
option (with an HMAC-MD5 key) to provide the shared secret needed to generate
a TSIG record for authenticating Dynamic DNS update requests.
These options are mutually exclusive.
With the
-k
option,
nsupdate
reads the shared secret from the file
keyfile
,
whose name is of the form
K{name}.+157.+{random}.private
.
For historical
reasons, the file
K{name}.+157.+{random}.key
must also be present. When the
-y
option is used, a signature is generated from
keyname:secret.
keyname
is the name of the key,
and
secret
is the base64 encoded shared secret.
Use of the
-y
option is discouraged because the shared secret is supplied as a command
line argument in clear text.
This may be visible in the output from
ps(1
)
or in a history file maintained by the user's shell.
The -k
may also be used to specify a SIG(0) key used
to authenticate Dynamic DNS update requests. In this case, the key
specified is not an HMAC-MD5 key.
By default
nsupdate
uses UDP to send update requests to the name server unless they are too
large to fit in a UDP request in which case TCP will be used.
The
-v
option makes
nsupdate
use a TCP connection.
This may be preferable when a batch of update requests is made.
The -t
option sets the maximum time a update request can
take before it is aborted. The default is 300 seconds. Zero can be used
to disable the timeout.
The -u
option sets the UDP retry interval. The default is
3 seconds. If zero the interval will be computed from the timeout interval
and number of UDP retries.
The -r
option sets the number of UDP retries. The default is
3. If zero only one update request will be made.
nsupdate
reads input from
filename
or standard input.
Each command is supplied on exactly one line of input.
Some commands are for administrative purposes.
The others are either update instructions or prerequisite checks on the
contents of the zone.
These checks set conditions that some name or set of
resource records (RRset) either exists or is absent from the zone.
These conditions must be met if the entire update request is to succeed.
Updates will be rejected if the tests for the prerequisite conditions fail.
Every update request consists of zero or more prerequisites and zero or more updates. This allows a suitably authenticated update request to proceed if some specified resource records are present or missing from the zone. A blank input line (or the send command) causes the accumulated commands to be sent as one Dynamic DNS update request to the name server.
The command formats and their meaning are as follows:
server
{servername} [port]
Sends all dynamic update requests to the name server
servername
.
When no server statement is provided,
nsupdate
will send updates to the master server of the correct zone.
The MNAME field of that zone's SOA record will identify the master
server for that zone.
port
is the port number on
servername
where the dynamic update requests get sent.
If no port number is specified, the default DNS port number of 53 is
used.
local
{address} [port]
Sends all dynamic update requests using the local
address
.
When no local statement is provided,
nsupdate
will send updates using an address and port chosen by the system.
port
can additionally be used to make requests come from a specific port.
If no port number is specified, the system will assign one.
zone
{zonename}
Specifies that all updates are to be made to the zone
zonename
.
If no
zone
statement is provided,
nsupdate
will attempt determine the correct zone to update based on the rest of the input.
class
{classname}
Specify the default class.
If no class
is specified the default class is
IN
.
key
{name} {secret}
Specifies that all updates are to be TSIG signed using the
keyname
keysecret
pair.
The key command
overrides any key specified on the command line via
-y
or -k
.
prereq nxdomain
{domain-name}
Requires that no resource record of any type exists with name
domain-name
.
prereq yxdomain
{domain-name}
Requires that
domain-name
exists (has as at least one resource record, of any type).
prereq nxrrset
{domain-name} [class] {type}
Requires that no resource record exists of the specified
type
,
class
and
domain-name
.
If
class
is omitted, IN (internet) is assumed.
prereq yxrrset
{domain-name} [class] {type}
This requires that a resource record of the specified
type
,
class
and
domain-name
must exist.
If
class
is omitted, IN (internet) is assumed.
prereq yxrrset
{domain-name} [class] {type} {data...}
The
data
from each set of prerequisites of this form
sharing a common
type
,
class
,
and
domain-name
are combined to form a set of RRs. This set of RRs must
exactly match the set of RRs existing in the zone at the
given
type
,
class
,
and
domain-name
.
The
data
are written in the standard text representation of the resource record's
RDATA.
update delete
{domain-name} [ttl] [class] [type [data...]]
Deletes any resource records named
domain-name
.
If
type
and
data
is provided, only matching resource records will be removed.
The internet class is assumed if
class
is not supplied. The
ttl
is ignored, and is only allowed for compatibility.
update add
{domain-name} {ttl} [class] {type} {data...}
Adds a new resource record with the specified
ttl
,
class
and
data
.
show
Displays the current message, containing all of the prerequisites and updates specified since the last send.
send
Sends the current message. This is equivalent to entering a blank line.
answer
Displays the answer.
Lines beginning with a semicolon are comments and are ignored.
The examples below show how nsupdate could be used to insert and delete resource records from the example.com zone. Notice that the input in each example contains a trailing blank line so that a group of commands are sent as one dynamic update request to the master name server for example.com.
# nsupdate > update delete oldhost.example.com A > update add newhost.example.com 86400 A <IP_ADDRESS> > send
Any A records for oldhost.example.com are deleted. and an A record for newhost.example.com it IP address <IP_ADDRESS> is added. The newly-added record has a 1 day TTL (86400 seconds)
# nsupdate > prereq nxdomain nickname.example.com > update add nickname.example.com 86400 CNAME somehost.example.com > send
The prerequisite condition gets the name server to check that there are no resource records of any type for nickname.example.com. If there are, the update request fails. If this name does not exist, a CNAME for it is added. This ensures that when the CNAME is added, it cannot conflict with the long-standing rule in RFC1034 that a name must not exist as any other record type if it exists as a CNAME. (The rule has been updated for DNSSEC in RFC2535 to allow CNAMEs to have RRSIG, DNSKEY and NSEC records.)


Luna
Tips
- Eclipse is married to Lucent Beam. If for some reason you're keeping Lucent Beam at low levels, Eclipse
is going to be useless.
- Eclipse doesn't continue after you die, so don't use it if you're getting ganked just because you're
angry that you got caught.
- Eclipse has a fairly long cast time. It's okay to cast it earlier than you need it just so you can get
it off before getting perma-stunned.
- Eclipse turns the map to night for 10 seconds.
- You're not getting a Helm of the Dominator for the lifesteal, you're getting it so you can take a creep,
send it to stack the ancients four times, and walk out a minute later with six hundred gold and two
levels.
Counters
- Luna has one of the highest base move speeds in the game, so as tempting as it can be to dive her in the
early game, it can be risky without disables.
- Luna has 1800 vision at night once she levels Lunar Blessing, so you need to be sneaky if you're trying
to gank her at night.
- Once your tier 3 tower goes down, get ready to enter Glaive City. Not only will this damage everything
in sight but there is a high probability that your Blink Dagger is going to get disabled from an errant
Glaive. Stand as far as possible from your structures if you're planning on blink initiating.


Javascript is the language that allows us to actually make things happen with our websites. Using the house analogy, with HTML and CSS, you could have a nicely structured, well designed house, but it requires Javascript to actually get the appliances/heating etc to work. From a learning perspective, this was a significant step-up in difficulty. Whilst I could often understand the concept and the code when it was written in front of me, when I had to think through a problem I almost always ended up using the hint. Very steep learning curve this one! More work needed to feel comfortable.
Control flow and loops are a way of explaining to the computer the exact specifications for which it should go about certain functions, more specifically in what order and until what condiition is met. For example, a comparison could be when we get up to go to work. First we wake up, then we check the time. If the time is still too early, we go back to sleep. This repeats until a condition is met (it's the right time), and we then get up. This if statement could be programmed using Javascript.The difference between arrays and objects is that an array is equivalent to a list, such as countries - 'New Zealand, Australia, UK' etc. An object is something with a number of different properties, such as a country's population, language, flag etc. When accessing data from an array, we need to know where it lies in the list, and then call on it using the appropriate number. In this regard, the order of the array is very important. An object though, we just need to know the property name in order to access it either using dot or bracket notation.
Functions are useful because they allow us to codify a particular process to be stored for future use. Once the code has been defined, we can continue to use this function time and again, which can be very useful if it is a common process, such as automatically calculating the exchange rate every time we buy anything in a foreign currency.
Home


MULAN RATING: 7 / 10 --> Good movie
Review Date: June 23, 1998 Directors: Tony Bancroft and Barry Cook Writers: Anonymous (poem), Robert D. San Souci, Rita Hsiao, Chris Sanders, Philip LaZebnik, Raymond Singer, Eugene Bostwick-Singer Producer: Pam Coats Actors: Ming-Na Wen as the voice of Mulan Eddie Murphy as the voice of Mushu B.D. Wong as the voice of Shang Genre: Animated Children's Year of Release: 1998
Based on an old Chinese folktale, this movie becomes Disney's 36th animated feature, and its best since THE LION KING back in 1994.
PLOT: The Huns have invaded China. One man from every Chinese family must join the Army and serve in the country's defense. Recognizing that her father is very old and incapable of effective combat duty, Mulan chops her hair into a boy-cut, and pretends to be a man, so that she can take her father's place in the war. She does effectively join the troops, and fight for the honour of her father, her country and herself.
CRITIQUE: Funny, interesting, and mostly entertaining animated Disney feature made for the marketing summer of 1998. Having gone in with little expectations, I must say that I was pleasantly surprised to find many humorous moments in this animated fable, along with some pretty cool action sequences, and an interesting lead character in Mulan. Of course, it goes without saying that the real star of this film wasn't Mulan, but the tiny disgraced dragon Mushu, voiced by Eddie Murphy. This little creature managed to get a crack out of the audience during every single one of its wonderful appearances on the big screen. Reminded me a little of the "young" Murphy on Saturday Night Live, before he got all pretty and serious (Surely, many of the lines in this film were ad-libbed by Murphy himself.).
The story of this film was also very interesting to absorb, seeing that it went within a culture that I knew very little about (Mind you, I really have no idea how accurate this film's facts are, but still...). The animation was also very well done, especially during the winter scenes in the mountains, which really looked like the real deal. On the down side, I guess that the songs in this movie could be considered its weakest link, but then again, I've never been much of a musical guy anyway, so that didn't bother me too much.
Overall, I would say this movie was a touch better than HERCULES (6.5/10), and just about as good as the unexpectedly decent ANASTASIA (7/10), but on a much funnier level, thanks mostly to the wonderful talents of Eddie Murphy. Kids will love it (As loudly expressed in the theater that I attended with Mrs. JoBlo), and most adults should also enjoy it. The cinema or video question is one that I would just as soon leave in your hands considering that I don't know of everyone's financial situation.  It's fun and genuinely harmless (At 88 minutes run-time...how could you go wrong?)
Little Known Facts: Two of this film's previous titles were CHINA DOLL and THE LEGEND OF MULAN. Ming-Na Wen also starred in ONE NIGHT STAND (5/10) opposite Wesley Snipes. Lea Salonga does the voice of Mulan singing in this movie, as Donny Osmond does the voice of Shang belting out the tunes.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


I’ve been spending several weekends in a row blogging in Steemit since I decided to involve actively in this new found community. Things got bored really soon and I think this is a good chance having some fun outdoor today. There is a beautiful lakeside nearby my place and I always wanted to spend a leisure afternoon with @jessie901220 here someday, I can experiment with some scenery sketching skills too.
美好的周日，中 Steem 毒已深的我决定不再躲在房间里埋头写作，来个久违的户外写生吧。在新加坡 Chinese Garden 一带有个大湖，就在住的地方附近，环境清幽，早就想和 @jessie901220 来这里度过一个悠闲的下午了。
This is the lakeside by Chinese Garden, Singapore. Clear sky with a calm big lake is going to be a great material for the sketching. This is a fishing zone too, you can see people fishing with various tools and some of them were skillful enough to harvest generous amount of fishes.
蓝天白云，加上绿草和湖泊，Perfect！这里同时是合法的钓鱼区，可以看见不少发烧友在这里垂钓。有者似乎功夫到家，收获颇丰。写生之余抬头看看身边人们的动静，也挺有趣的。
Finally I got the chance to pose this legendary move that I learned from the TV or comics when the artist start to sketch the scenery. Not sure what this trick does anyway haha.
终于有机会摆出传说中写生摆的 Pose，说真的我也不懂有什么用处，懂行的朋友请来解惑。
After the posing warm-up session, it’s time to get the real work started.
在一顿摆 Pose 拍照热身完毕之后，终于可以坐下来好好写生了。
For the scene were too wide it is good to lock down a specific area to draw from. I chose the left side of the lake for it has richer objects like the trees and buildings for the content.
由于区域太过广阔，首先必须选好中意的视野。我选了靠左边的景色，有树有建筑物，感觉内容丰富些。先大概起个草稿。
Use heavier line to confirm the objects.
然后用稍微重的手法确定内容。
Added the buildings which are the local HDBs and where we are staying.
加上建筑物，那些是本地的组屋区，也是靠近我们租房的区域。
Inverted image in the water.
加上水上的倒影和细节。
Enhance the details and we are almost done. We can definitely touch up more to make it more lively but my arse already complaining for sitting at a hardwood this long.
把细节强化一遍，大致上就完成了。后期可以再加工，但是现在腰都有点疼了，就此打住吧。
.gif)
Bright sky and gentle breeze, what a perfect place to hanging around.
微风徐徐，偶有人声喧闹，天上鸟儿划破天际，宁静周日完美的去处。
No easel no watercolors and various kind of brushes, only a pencil and sketchbook will suffice for sketching. This is why I love sketching so much, top choice for lazy artist.
没有画架没有水彩，这次只用了一支铅笔就在常用的绘画本上作业了。这就是素描的迷人之处，简单方便，懒人画家的不二首选。
Mobike and Obike, we biked here from our place which is 10 minutes away. Thankfully, they are not taken after our session so that we can biking back the same way.
两辆共享单车正是我们来到这里的坐骑，差不多有十分钟的路程。幸运的是，当我们收工时它们还在这里没被人骑走，可以同样的骑回家啦。
Lastly, I present you the author himself. 最后附上作者本人。
She was just beside me practicing her singing. 她就在一旁练歌作伴
This page is synchronized from the post: ‘First scenery sketching by the lakeside 湖边写生’


Do you need your tonsils removed?
by Manny AlvarezDear Dr. Manny,
When I was a little girl, I had my tonsils removed. Now that I have a child of my own, the doctors say not to remove them. Don’t you need your tonsils removed? Why don’t they remove them now?
Thanks for your question.
There are two common reasons to get your tonsils removed. If you have constant infections in your throat or tonsils, then they should be removed. The other most common reason is that the tonsils are so large that they obstruct the airways and cause sleep apnea.
Doctors these days don’t want to unnecessarily remove parts of the body unless it's extremely necessary. Tonsils are a part of the immune system.
WHAT IS IVF? HOW IN VITRO FERTILIZATION WORKS AND WHAT TO EXPECT
Tonsillitis is an infection of the tonsils. It’s fairly common in children. It starts as a cold, especially if it is caused by a virus. If it is caused by bacteria, it is typically treated with antibiotics.
CLICK HERE TO GET THE FOX NEWS APP
In order to be considered for tonsil removal, seek a medical opinion. Many physicians follow certain guidelines, such as you must have tonsillitis seven times in one year, five times a year for two years, or three times a year for three years. Also, consider a second opinion if your questions are not being answered before deciding in surgery.
Do you have a health question for Dr. Manny? Email us at AskDrManny@FoxNews.com


Help ?
Help
X
The rajasthan tourism Agent is here to help your visit related queries go easy and smooth. Try asking me question like:
Hi!
How are you?
Plan a trip for me ...
Who are you?
What's your hobby?
Will you marry me?


This is a demo page for Visual Regression Test Article
Visual Regression Testing allows us to make visual comparisons between the correct (baseline) versions of the site with new versions
It is a framework written in JS which help to automate visual regression tests so easily and faster and provides easy-to-configure test parameters for a variety of viewport sizes and pass/fail conditions
It is a framework written in JS which help to automate visual regression tests so easily and faster and provides easy-to-configure test parameters for a variety of viewport sizes and pass/fail conditions
It is a framework written in JS which help to automate visual regression tests so easily and faster and provides easy-to-configure test parameters for a variety of viewport sizes and pass/fail conditions
It is a framework written in JS which help to automate visual regression tests so easily and faster and provides easy-to-configure test parameters for a variety of viewport sizes and pass/fail conditions
It is a framework written in JS which help to automate visual regression tests so easily and faster and provides easy-to-configure test parameters for a variety of viewport sizes and pass/fail conditions
It is a framework written in JS which help to automate visual regression tests so easily and faster and provides easy-to-configure test parameters for a variety of viewport sizes and pass/fail conditions


Wondering where to stay and how to get around once you get into Prague? The conference will be held at the Klub Lavka, in the old city center district of Praha 1, and most conference events will be held within walking distance of the venue.
Prague has many direct rail, bus, and flight connections to most major European cities. In the summer, there are also direct transatlantic flights to/from New York (JFK) and several other US airports.
Prague's Vaclav Havel airport provides many direct and low-cost flights with airlines such as Czech Airlines, Ryanair, Wizz Air, Air Berlin, Norwegian... You get the idea. To get from the airport to the city center, you can either take a bus (average joureny time 30 minutes, cost ~30czk) or a taxi (average journey time 15-20 minutes depending on traffic, cost ~500czk).
Prague's main train station (Hlavni Nadrazi / hl.n) is a central railway hub, with direct trains to Germany, Poland, Austria, and Hungary. We recommend train lines by EuroCity (EC), InterCity (IC) or RailJet (RJ). You can even take a train from Denmark inside a ferry!
To look up train connections, head over to the ČD Website.
Prague is a popular destination among backpackers and shoestring travelers, so there are many affordable bus options if you are traveling within Europe. The biggest Czech bus company Student Agency operates direct bus lines between Prague and cities like Berlin, Vienna, Zagreb, Munich, etc. Global companies like Eurolines operate direct lines to many European cities.
We are not working with any of the hotels for attendee accommodations, but there are countless hotels and Airbnb apartments available within walking distance of the venue. Just head over to your favorite booking site or use one of these sites to research accommodation:
If you need help or advice when considering a specific hotel or apartment, send us an email at<EMAIL_ADDRESS>and we'll be happy to help you out.
Prague is a very accessible city and there are many transportation options available, public and otherwise.
If you navigate by smartphone, Google Maps is the most popular method to calculate routes and travel times. Do exercise caution when calculating walking routes, as the city center has many gated walkways that are locked at night.
The Prague Public Transit Co. runs an extensive network of trams, buses, and 3 metro lines. You can buy a single ticket, day ticket, or 5-day pass at ticket machines, Trafika stands (tobacconists) and at the train and bus stations.
If you're flying into Prague Airport (PRG), you can take bus number 100, 119, or the Airport Express (AE) bus. Depending on where you are staying, these bus lines will connect you to several major metro stations as well as the main train station. More information on airport transfers.
Prague does have Uber but it's still pretty young and rides are not easily located. However, there are several reliable local taxi companies:
IMPORTANT: Do not hail/flag taxis in the city center. As with most major European cities, taxi scams do occur and can be easily avoided by calling in advance or using an official taxi stand/rank (these are marked with a TAXI sign and a posted fact sheet in Czech and English).


QuickTileViewer
A Quick Way to View Tiled Images
Version 1.1
QuickTileViewer is a simple image viewing application. It features the ability to resize, mirror, rotate, and rescale images in order to see how they will look in a tiled environment such as a game engine.
An image may be loaded from the File menu or dropped into the application window via drag-and-drop.
The status bar shows the currently loaded file, its width, height, and the scale at which it is displayed on the screen. QuickTileViewer will automatically scale itself to fit a 3x3 grid of the image that is being viewed. For large images, this means that the application could become larger than the available screen size.
| Formats QuickTileViewer Loads |
| BMP |
| GIF |
| ICO |
| JPG |
| PCX |
| PNG |
| TGA |
| TIF |
| XPM |
Menus:
File Menu
Transform Menu
Buttons:
Mirror
- Left-clicking mirrors the image vertically, while right-clicking
mirrors the image horizontcally.
Rescale -
Left-clicking rescales the image smaller, while right-clicking rescales the
image larger.
Revert
- Reverts to the saved file. Undoes any changes. Note that it is impossible
to use the revert function if the image was acquired from the clipboard.
Rotate -
Left-clicking rotates the image 90 degrees clockwise, while right-clicking rotates
the image 90 degrees counterclockwise.
QuickTileViewer is based on the same technology used in PixelSwapper, also available from Zeta Centauri, Inc. See the website at http://www.zetacentauri.com for more info.
Copyright (c) 2006-2010 Zeta Centauri, Inc.


Grammar
public protocol Grammar
A language stores a set of grammar rules that can be used to parse String
s. Extensions provide additional methods (such as parsing) that operate on these rules.
-
tokenize(_:)
Extension methodCreates an iterable stream of tokens using the supplied source and this
Grammar
It is very easy to create and iterate through a stream, for example:
let source = "12+3+10" for token in try calculationGrammar.stream(source){ // Do something cool... }
Streams are the easiest way to use a
Grammar
, and consume less memory and are in general faster (they certainly will never be slower). However you cannot easily navigate and reason about the stream, and only top level rules and tokens will be created.Declaration
Swift
public func tokenize(_ source: String) -> TokenStream
Parameters
source
The source to parse
Return Value
An iterable stream of tokens *
-
parse(_:)
Extension methodCreates a
HomogenousTree
using the supplied grammar.A
HomogenousTree
captures the result of parsing hierarchically making it easy to manipulate the resultant data-structure. It is also possible to get more information about any parsing errors. For example:let source = "12+3+10" do { // Build the HomogenousTree let ast = try calculationGrammar.parse(source) // Prints the parsing tree print(ast) } catch let error as ProcessingError { print(error.debugDescription) }
Declaration
Swift
public func parse(_ source: String) throws -> HomogenousTree
Parameters
source
The source to parse with the
Grammar
Return Value
A
HomogenousTree
* -
build(_:as:)
Extension methodBuilds the supplied source into a Heterogeneous representation (any Swift
Decodable
type).This is the most powerful application of a
Grammar
and leverages Swift’sDecoable
protocol. It is strongly recommended that you read a little about that first.Essentially each token in the grammar will be mapped to a
CodingKey
. You should first parse into aHomogenousTree
to make sure your types and the hierarchy generated from your grammar align.If you want to automatically generate the
Decodable
types you can do this using STLR andstlrc
which will automatically synthesize your grammar and data-structures in Swift.Declaration
Swift
public func build<T>(_ source: String, as type: T.Type) throws -> T where T : Decodable
Parameters
source
The source to compile
type
The
Decodable
type that should be createdReturn Value
The populated type *


Cybercrime and Security
Today cybercrime causes huge problems for society personally, financially, and even in matters of national security.
Just in the last few years hundreds of millions of credit card numbers have been stolen, tens of millions of Social Security numbers and healthcare records were compromised, even nuclear centrifuges that have been hacked, and unmanned aerial drones have been hijacked. This is all done by exploiting vulnerabilities in hardware and software or more often by taking advantage of unintentional decisions made by the people using the software.People committing these cyber crimes don't a single profile or motivation it could be anyone from an international terrorist to a teenager competing for bragging rights. Today the largest countries not only have a regular army but also have a well armed cyber army. In fact the next World War may not be fought with traditional weapons, but with computers used to shut down national water supplies, energy grids, and transportation systems. Now let's take a look at how cybercrime works under the hood will learn about software viruses, denial-of-service attacks, and phishing scams. In biology and life, a virus is an organism that is spread by coughing, sneezing, or physical contact. Viruses work by infecting cells, injecting their genetic material, and using those cells to replicate. They can make people really sick and then spread to other people. A computer virus works bit similarly. A virus is an executable program that gets installed, usually unintentionally, and harms the user and their computer. It's also possible for a virus to spread itself to other computers. Now how does a virus get on your computer in the first place? There are a couple ways an attacker can infect someone's computer. They might lure a victim into installing a program with deception about the program's purpose, so for example a lot of viruses are disguised as security updates. It's also possible that the software on your computer has a vulnerability, so an attacker can install itself without even needing explicit permission. Once a virus is on your computer it can steal or delete any of your files, control other programs, or even allow someone else to remotely control your computer.
Using computer viruses, hackers can take over millions of computers world wide and then use them as a digital army, otherwise known as a botnet, to attack and take down websites. This kind of attack is called a distributed denial of service. A denial of service is when hackers overwhelm a website with too many requests. We call it a distributed denial-of-service when the attack comes from many computers all at once. Most websites are ready to respond to millions of requests a day, but if you hit them with billions or trillions of requests, coming from different places, the computers are overloaded and stop responding. Another trick used by cybercriminals is to send large amounts of spam email in an attempt to trick people into sharing sensitive personal information. This is called a phishing scam. A phishing scam is when you get what seems like a trustworthy email asking you to log into your account, but clicking the email takes you to a fake website. if you log in anyway you've been tricked into giving your password away. Hackers can then use your login credentials to access your real accounts to steal information or maybe even to steal your money. Fortunately there are many companies, laws, and government organizations working to make the internet safer, but these efforts are not enough.
You may think when a computer system gets hacked the problem was the security design or the software. Ninety percent of the time the system gets hacked however, it's not because of the security bug, but because of a simple mistake made by a human. It turns out there are steps we can all take to protect ourselves. Often your actions not only impact the security of your own data and computer, but the security of everyone at your school, workplace, and home. With billions or trillions of dollars at stake cybercriminals get smarter each year and we all need to keep up.


--- layout: default title: Krishan Patel | Projects ---
Under Development
Not Currently Under Development
Complete


{% extends "global/Page.html" %} {% load staticfiles otree %} {% block title %} Part 2 {% endblock %} {% block content %}
You will now begin part 2.
In Part 2 you will play the same game you have played in Part 1 for 5 rounds. Remember that your final payment will depend also on the points you have earned in Part 2.
Before the first round of Part 2, you and all the other participants in your market are asked to respond to a survey in the next page.
{% next_button %} {% endblock %}


Braced vs parenthesized initialization
Prefer lambdas over std::bind
Use decltype on auto&& parameters to std::forward them
lambda init capture
mutable lambda
Template Type Deduction
Argument Dependent Lookup
Special member function generation
explicit operator bool
final class
Definite answer to inline in C++
std::forward_list
direct vs copy initialization
Consider using emplace instead of insert
inline static members
super in C++
std::hash
Why queue/stack have pop and front
How you could use a union
Unicode
Make sure const functions are thread-safe.
Threading
References in containers
functions as arguments
throw without argument
Linked-List Problems
std::initializer_list by value
Avoid default lambda captures
Prefer const_iterators to iterators
Reference qualifiers
Declare overriding functions override
Prefer insert over operator[] for maps
Use constexpr whenever possible
Prefer deleted functions to private-undefined ones
Scoped vs. Unscoped Enums
Abstract classes without pure virtual methods
reading a file
Prevent stack allocation
Item 45: Use member function templates to accept “all compatible types"
Plain Old Data (POD)
Lambdas
Prefer nullptr to 0 and NULL
char/short addition
Prefer `auto` to explicit type declarations.
The *explicitly-typed-initializer* idiom
The *explicitly-typed-initializer* idiom
Prefer alias-declarations over typedefs
Be Wary of `auto` and Proxy Types.
The *Explicitly Typed Initializer* Idiom.
The *explicitly typed initializer* idiom.
Associative container’s new values
Swapping without intermediaries
Viewing types
`decltype` Deduction Rules
Untitled
`auto` Type Deduction
alignof
uint<N>_t vs uint<N>_fast_t vs uint<N>_least_t
Benchmarking
Using find, equal_range and other algorithms
Prefer member-functions to algorithms with the same name.
std::lower_bound and std::upper_bound
std::generate
Gotchas
internal vs external linkage
decltype for addition template function
decltype(x) vs decltype((x))
Always have comparison functions return false for equal values
Make functors pure functions
Design functors for pass-by-value
Why Functors
imbue, callback and put_money
std::accumulate
std::copy_if to stdout
caes-insensitive string comparison
Algorithms that expect sorted ranges
std::not1
std::remove
STL Sorting Algorithms
Operator Precedence
print
inserters
Operator new vs new operator
Use std::istreambuf_iterator for fast string stream reading
Use std::prev and std::next
Inserting and erasing from a reverse iterator
Pass the template parameter directly instead of casting
Const_iterator to iterator
Avoid in-place modification in set and multiset
Comparison types for associative containers of pointers
constexpr
Values
Equality vs. Equivalence
Swap trick for shrink_to_fit
std::vector<bool>
Different string implementations
Template template parameters
class vs typename
Re-allocation for string and vector
Size of array with constexpr
auto return value
Allocators
explicit conversion operator
max_size
Default and value initialization
delete
Making classes uncopyable
Inheritance and variables
final
Python in C++
join
Global variables
Regex
Other
General things
Inlining
Item 37: Never redefine a functions’ inherited default parameter value.
Implementation of move and forward
Arrow Operator
Copy and swap
C++14 user-defined literals
Size of string literal at compile time with constexpr
Item 47: Define non-member functions inside templates when type conversions are desired
Template specializations
Call shell process
std::mem_fn
Split string
Arrays
rvalue references, collapsing rules and perfect forwarding
noexcept and exception specifications
weak_ptr
Item 48: Template Meta Programming (TMP)
Item 41: Understand implicit interfaces and compile-time polymorphism.
STL Item 5: Prefer range member functions over single-element methods
std::istringstream and std::ostringstream
Integer or float to string
Item 33: Avoid hiding inherited names.
The friend keyword
Design Patterns
Overriden functions are called even in Base class methods
Erasing for STL containers
Fibonacci in C++11
std::function
std:: things
std::bind
Factorial in C++11
Item 43: Know how to access names in templatized base classes
STL methods
Function pointers
Slicing raw arrays
Typedef
Passing multidimensional arrays to functions
std::move vs std::forward
Prefer empty() over size() == 0
STL Containers
Logical and Bitwise const
Compile-time logic and templates
Item 50: Customizing operator new or operator delete
dynamic_cast
Base-class-specific, inherited static member
Static, const and integral members
abort() and exit()
Template specialization
rvalue and lvalue
Preprocessing - Compiling - Linking
Item 42: Understand the two meanings of typename.
Constructors with curly braces
Virtual inheritance
std::bind
Item 39: Use private inheritance judiciously.
Item 38: Model “has-a” or “is-implemented-in-terms-of” through composition.
Item 36: Never redefine an inherited non-virtual function.
Item 35: Consider alternatives to virtual functions
Item 34: Differentiate between inheritance of interface and inheritance of implementation
C++11
Functors
Item 30: Strive for exception-safe code.
Casting
Item 26: Postpone variable definitions as long as possible.
Item 24: Declare non-member functions when type conversions should apply to all parameters.
Item 23: Prefer non-member non-friend functions to member functions.
Constructing smart pointers
Item 15: Provide access to raw resources in resource-managing classes
Const pointers and pointers to const
Preventing exceptions in destructors
Reassigning references
Inheritance and the slicing problem
Explicit constructors
Masking integers to chars
Multiplication and division by 2
Odd check with bitwise operators
Implicit conversion operators
Pointer arithmetic
Nested template parameters
Convert reverse_iterator to normal forward iterator
Clearing an std::stringstream
Switch cases without break
Erasing iterator in loop
Exceptions
Stream operator overloading
Iomanip
Accessing the global scope


{% extends '_layouts/site' %}
{% set id = 'index' %}
{% set title = 'Privacy Policy' %}
{% set content %}
{{ "# Privacy Policy (\"Privacy\")
_Last updated: February 05, 2017_
- Information Collection
- Information Usage
- Information Protection
- Cookie Usage
- 3rd Party Disclosure
- 3rd Party Links
- Google AdSense
- Fair Information Practices
- Fair information
- Practices
- COPPA
- CalOPPA
- Our Contact Information
This privacy policy has been compiled to better serve those who are concerned with how their 'Personally identifiable information' (PII) is being used online. PII, as used in US privacy law and information security, is information that can be used on its own or with other information to identify, contact, or locate a single person, or to identify an individual in context. Please read our privacy policy carefully to get a clear understanding of how we collect, use, protect or otherwise handle your Personally Identifiable Information in accordance with our website.
## What personal information do we collect from the people that visit our blog, website or app?
When ordering or registering on our site, as appropriate, you may be asked to enter your name, email address or other details to help you with your experience.
## When do we collect information?
We collect information from you when you subscribe to a newsletter or enter information on our site.
## How do we use your information?
We may use the information we collect from you when you register, make a purchase, sign up for our newsletter, respond to a survey or marketing communication, surf the website, or use certain other site features in the following ways:
- To personalize user's experience and to allow us to deliver the type of content and product offerings in which you are most interested.
- To send periodic emails regarding your order or other products and services.
- To follow up with them after correspondence (live chat, email or phone inquiries)
## How do we protect visitor information?
We do not use vulnerability scanning and/or scanning to PCI standards.
We only provide articles and information. We never ask for credit card numbers.
We use regular Malware Scanning.
Your personal information is contained behind secured networks and is only accessible by a limited number of persons who have special access rights to such systems, and are required to keep the information confidential. In addition, all sensitive/credit information you supply is encrypted via Secure Socket Layer (SSL) technology.
We implement a variety of security measures when a user enters, submits, or accesses their information to maintain the safety of your personal information.
All transactions are processed through a gateway provider and are not stored or processed on our servers.
## Do we use 'cookies'?
We do not use cookies for tracking purposes
You can choose to have your computer warn you each time a cookie is being sent, or you can choose to turn off all cookies. You do this through your browser (like Internet Explorer) settings. Each browser is a little different, so look at your browser's Help menu to learn the correct way to modify your cookies.
If you disable cookies off, some features will be disabled that make your site experience more efficient and some of our services will not function properly.
## Third-party disclosure
We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information.
## Third-party links
Occasionally, at our discretion, we may include or offer third-party products or services on our website. These third-party sites have separate and independent privacy policies. We therefore have no responsibility or liability for the content and activities of these linked sites. Nonetheless, we seek to protect the integrity of our site and welcome any feedback about these sites.
## Google
Google's advertising requirements can be summed up by Google's Advertising Principles. They are put in place to provide a positive experience for users. https://support.google.com/adwordspolicy/answer/1316548?hl=en
We have not enabled Google AdSense on our site but we may do so in the future.
## California Online Privacy Protection Act
CalOPPA is the first state law in the nation to require commercial websites and online services to post a privacy policy. The law's reach stretches well beyond California to require a person or company in the United States (and conceivably the world) that operates websites collecting personally identifiable information from California consumers to post a conspicuous privacy policy on its website stating exactly the information being collected and those individuals with whom it is being shared, and to comply with this policy. - See more at: http://consumercal.org/california-online-privacy-protection-act-caloppa/#sthash.0FdRbT51.dpuf
According to CalOPPA we agree to the following:
Users can visit our site anonymously.
Once this privacy policy is created, we will add a link to it on our home page or as a minimum on the first significant page after entering our website.
Our Privacy Policy link includes the word 'Privacy' and can be easily be found on the page specified above.
Users will be notified of any privacy policy changes:
- On our Privacy Policy Page
Users are able to change their personal information:
- By logging in to their account
## How does our site handle do not track signals?
We honor do not track signals and do not track, plant cookies, or use advertising when a Do Not Track (DNT) browser mechanism is in place.
## Does our site allow third-party behavioral tracking?
It's also important to note that we do not allow third-party behavioral tracking
## COPPA (Children Online Privacy Protection Act)
When it comes to the collection of personal information from children under 13, the Children's Online Privacy Protection Act (COPPA) puts parents in control. The Federal Trade Commission, the nation's consumer protection agency, enforces the COPPA Rule, which spells out what operators of websites and online services must do to protect children's privacy and safety online.
We do not specifically market to children under 13.
## Fair Information Practices
The Fair Information Practices Principles form the backbone of privacy law in the United States and the concepts they include have played a significant role in the development of data protection laws around the globe. Understanding the Fair Information Practice Principles and how they should be implemented is critical to comply with the various privacy laws that protect personal information.
In order to be in line with Fair Information Practices we will take the following responsive action, should a data breach occur:
We will notify the users via email Within 7 business days
We also agree to the Individual Redress Principle, which requires that individuals have a right to pursue legally enforceable rights against data collectors and processors who fail to adhere to the law. This principle requires not only that individuals have enforceable rights against data users, but also that individuals have recourse to courts or government agencies to investigate and/or prosecute non-compliance by data processors.
## CAN SPAM Act
The CAN-SPAM Act is a law that sets the rules for commercial email, establishes requirements for commercial messages, gives recipients the right to have emails stopped from being sent to them, and spells out tough penalties for violations.
We collect your email address in order to:
- Send information, respond to inquiries, and/or other requests or questions.
- Market to our mailing list or continue to send emails to our clients after the original transaction has occurred.
To be in accordance with CANSPAM we agree to the following:
- NOT use false or misleading subjects or email addresses.
- Identify the message as an advertisement in some reasonable way.
- Include the physical address of our business or site headquarters.
- Monitor third-party email marketing services for compliance, if one is used.
- Honor opt-out/unsubscribe requests quickly.
- Allow users to unsubscribe by using the link at the bottom of each email.
If at any time you would like to unsubscribe from receiving future emails, you can email us at<EMAIL_ADDRESS>or follow the instructions at the bottom of each email and we will promptly remove you from ALL correspondence.
## Contacting Us
If there are any questions regarding this privacy policy you may contact us using the information below.
---
CraftX™
https://craftx.io
<EMAIL_ADDRESS>Minneapolis, MN, USA.
"|doxter({addHeaderAnchorsTo: ['h2', 'h3']}) }}


(PECL getdns >= 0.11.0)
php_getdns_context_get_namespaces — Get the namespaces used for basic resolution.
$context
, array &$value
)This function gets the ordered list of namespaces that will be queried for basic resolution. Note that this context setting is ignored for the php_getdns_general() and php_getdns_general_sync() functions; it is used for the other funtions. When a normal lookup is done, the getdns library does the lookups in the order given and stops when it gets the first result; a different method with the same result would be to run the queries in parallel and return when it gets the first result. Since lookups might be done over different mechanisms because of the different namespaces, there can be information leakage that is similar to that seen with getaddrinfo(). The default set of namespaces is determined by the OS.
context
The previously created DNS context that is to be used with this request.
value
An indexed array of namespace values. Valid values include GETDNS_NAMESPACE_DNS, GETDNS_NAMESPACE_LOCALNAMES, GETDNS_NAMESPACE_NETBIOS, GETDNS_NAMESPACE_MDNS, and GETDNS_NAMESPACE_NIS. Note that this argument is passed by reference and any existing value will be overwritten.
This function returns an integer response code. GETDNS_RETURN_GOOD indicates successful completion.


Arrays and Hashes
What's the difference between [] and {}?
May 17, 2015
Arrays are two slightly different, but equally important methods of storing information in Ruby.
An array is a list of values that are indexed by integer values. This first value is at index 0, the second is at 1, the third is at 2, etc. If you would like to count from the last value of the array, the index should be a negative number (-1 is the last value). Here is what an array looks like:
array = [1, "two", 3.0, [4, "five"]]
As you can see, you can put almost any type of element you would like in an array. It can be an integer, a string, or even another array! There are multitudinous methods that you can use to iterate over an array, so you can do almost whatever you want with the information contained. You can take a look at the Ruby-doc to see everything that you can do with an array.
A hash is a delicious dish usually made of meat and potatoes with some spices thrown in. Add a fried egg on top to make it a delicious breakfast
...But also a hash is another powerful type of information storage in Ruby. As opposed to an array, the information in a hash is not ordered by an integer index, but rather a key assigned to each value contained within the hash. The value can be almost anything, similar to the information in an array. Here is what a hash looks like:
hash = { "name" => "Connor" "age" => 23 "favorite food" => "Fried Chicken" }
The values can be called by their respective keys, and just like an array you can iterate over the hash and do whatever you want with it. Again, you can take a look at the Ruby-doc to see all the methods that you can call on a hash.


EXAMPLES
Durability
1) Description
The durability example illustrates the ability of late joining readers to obtain
data that has already been published before these readers were created.
2) Design
It consists of 4 units :
- CheckStatus : provides return status checking
- DDSEntityManager : implements a class providing operations to set up DCPS entities (creation, deletion)
- DurabilityDataPublisher application implements the publisher.
- DurabilityDataSubscriber implements the subscriber.
3) Scenario
The DurabilityDataPublisher application write 10 samples and wait for user input
to terminate the application. Three possibilities are offered (configurable via
arguments passed by command line cf.5):
- 3.1 Memory transient & auto_dispose set to true : terminating the
DurabilityDataPublsiher will cause its transient data to become disposed
and therefore not readable for any subsequent late joining
DurabilityDataSubscriber. Therefore the user should not terminate the DurabilityDataPublisher
application until the DurabilityDataSubscriber has been started .
- 3.2 Memory transient & auto_dispose set to false : terminating the
DurabilityDataPublsiher will NOT cause its transient data to becomes disposed
and therefore it will remain available to subsequent late joining
DurabilityDataSubscribers as long as the infrastructure is up and running.
So the user can terminate the DurabilityDataPublisher before the DurabilityDataSubscriber
has been started.
- 3.3 Persistent & auto_dispose set to false : terminating the DurabilityDataPublisher
will
NOT cause its persistent data to becomes disposed and therefore it will remain
available to subsequent late joining DurabilityDataSubscribers even when the
infrastructure has been completely shut down in the mean time. It does this by
storing the data on disk, and reinserting the data when the infrastructure is
restarted.
IMPORTANT : for persistence to work correctly, the configuration file should define a store type and a store location (use the configurator tool to do that).
Run the DurabilityDataSubscriber Application. It will receive the 10 samples written by
the DurabilityDataPublisher and display their content.
- For 3.1 case : any number of instances of the DurabilityDataSubscriber will receive
the samples as long as the Publisher application is not terminated.
- For 3.2 and 3.3 : any number of instances of the DurabilityDataSubscriber will still
receive the samples even when the Publisher application is terminated.
- For 3.3 : any number of instances of the DurabilityDataSubscriber will still
receive the samples even when the Publisher application is terminated
and the middleware OpenSplice stopped and restarted.
Configurable:
- durability_kind : specify the persistence of the publisher
- autodispose_flag : specify whether the publisher will automatically dispose instances each time they are unregistered
- automatic_flag : indicates if the publisher is run in interactive or automatic mode
durability_kind allows one of two values
- transient : keep some samples so that they can be delivered to any potential late joining subscribers
- persistent : data is kept on permanent storage, so that they can outlive a system session
autodispose_flag allows one of two values
automatic_flag allows one of two values
Running of examples in Standalone Mode
Usage
DurabilityDataPublisher usage:
DurabilityDataPublisher [durability_kind] [autodispose_flag] [automatic_flag]
DurabilityDataSubscriber usage:
DurabilityDataSubscriber [durability_kind]
Running the examples in a Posix environment
Environment Setup
Let's call OpenSplice_install_dir the OpenSplice installation directory.
The OpenSplice environment variables must be set in order for the examples to build/run correctly.
To do this, open a terminal and source the "OpenSplice_install_dir/release.com" script supplied with the distribution.
C and C++ Executables
Building the examples is described on the Summary page
Two executables and a library are generated in the standalone directory when the example is built:
For C++
- sacpp_durability_pub
- sacpp_durability_sub
- libsacpp_durability_types.so
For C
- sac_durability_pub
- sac_durability_sub
- libsac_durability_types.so
Java executables
Building the examples is described on the Summary page
Three jars are generated in the java/standalone or java5 directory when the example is built:
For Java
- saj_durability_pub.jar
- saj_durability_sub.jar
- saj_durability_types.jar
For Java5
- java5_Durability_pub.jar
- java5_Durability_sub.jar
ISO C++ 2 Executables
Building the examples is described on the Summary page
Two executables are generated in the isocpp2 directory when the example is built:
Running the example
Ensure that the environment for OpenSplice is set up correctly as described above for each new terminal used.
It is recommended that you run the subscriber and publisher in separate terminals to avoid mixing the output
Running in single process (heap memory) configuration : the application starts OpenSplice middleware
- OpenSplice is deployed in this mode by default.
- The OpenSplice daemon should not be started manually. Instead the OpenSplice middleware and optional services are implicitly started by the single process applications as required
- Open 2 terminals. Set up the environment and go to the example directory as described above
Running in multiple process shared memory configuration
To enable deployment in this mode, an OpenSplice configuration file must be selected that has shared memory support e.g. one of the ospl_shmem xml configuration files found in the OpenSplice_install_dir/etc/config directory.
- Open 2 terminals. In each terminal:
- Setup the environment and go to the example directory as described above
- Set the required configuraton file e.g. OSPL_URI=file://$OSPL_HOME/etc/config/ospl_shmem_ddsi.xml
- Start the OpenSplice daemon. You can do this by typing ospl start
Running the subscriber and publisher
Scenario 3.1 :
- Run the Subscriber Application, in a console go to the example directory as described above and start the subscriber
- sac_durability_sub transient for C
- sacpp_durability_sub transient for C++
- java -jar saj_durability_sub.jar transient for Java
- java -jar sub/java5_Durability_sub.jar transient for Java5
- subscriber transient for ISO C++ 2
- Run the Publisher Application,in a console go to the example directory as described above and start the publisher
- sac_durability_pub transient true false for C
- sacpp_durability_pub transient true false for C++
- java -jar saj_durability_pub.jar transient true false for Java
- java -jar pub/java5_Durability_pub.jar transient true false for Java5
- publisher transient true false for ISO C++ 2
- Check that the Subscriber receives the samples
- Stop the Publisher and the subscriber
Scenario 3.2 :
Run the Subscriber Application, in a console go to the example directory as described above and start the subscriber
- sac_durability_sub transient for C
- sacpp_durability_sub transient for C++
- java -jar saj_durability_sub.jar transient for Java
- java -jar sub/java5_Durability_sub.jar transient for Java5
- subscriber transient for ISO C++ 2
Run the Publisher Application,in a console go to the example directory as described above and start the publisher
- sac_durability_pub transient false false for C
- sacpp_durability_pub transient false false for C++
- java -jar saj_durability_pub.jar transient false false for Java
- java -jar pub/java5_Durability_pub.jar transient false false for Java5
- publisher transient false false for ISO C++ 2
Stop the Publisher Application
Run another instance of Subscriber Application as described above and check that it
receives the samples.
Stop the subscribers
Scenario 3.3 :
(If running in Shared Memory deployment we need to stop/start openSplice as we will change the topic durability
kind from Transient (in scenario 3.2) to Persistent. Otherwise we won't be
able to create the topic)
- Stop OpenSplice if running in Shared Memory deployment
- Start OpenSplice if running in Shared Memory deployment
- Run the Subscriber Application, in a console go to the example directory as described above and start the subscriber
- sac_durability_sub persistent for C
- sacpp_durability_sub persistent for C++
- java -jar saj_durability_sub.jar persistent for Java
- java -jar sub/java5_Durability_sub.jar persistent for Java5
- subscriber persistent for ISO C++ 2
- Run the Publisher Application,in a console go to the example directory as described above and start the publisher
- sac_durability_pub persistent false false for C
- sacpp_durability_pub persistent false false for C++
- java -jar saj_durability_pub.jar persistent true false for Java
- java -jar pub/java5_Durability_pub.jar persistent true false for Java5
- publisher persistent false false for ISO C++ 2
- Stop the Publisher Application
- Stop OpenSplice if running in Shared Memory deployment
- Start OpenSplice if running in Shared Memory deployment
- Run a new instance of the Subscriber Application as described above and check that
it receives the samples.
Running C/C++/C#/ISO C++ 2/Java examples on Windows
Environment Set up
Let's call OpenSplice_install_dir the OpenSplice installation directory.
The OpenSplice environment variables must be set in order for the examples to run correctly.
To do this open an OpenSplice Command Prompt which will set up the environment variables for OpenSplice automatically. The OpenSplice Command Prompt can be selected from the start menu. Alternatively, open a windows Command Prompt and execute the "OpenSplice_install_dir\release.bat" batch script supplied with the distribution.
C/C++/C# Executables
Building the examples is described on the Summary page
Two executables are generated in the standalone directory when the example is built:
For C
- sac_durability_sub.exe
- sac_durability_pub.exe
For C++
- sacpp_durability_sub.exe
- sacpp_durability_pub.exe
For C#
- sacs_durability_sub.exe
- sacs_durability_pub.exe
Java Executables
Building the examples is described on the Summary page
Three jars are generated in the java\standalone or java5 directory when the example is built:
For Java
- saj_durability_pub.jar
- saj_durability_sub.jar
- saj_durability_types.jar
For Java5
- java5_Durability_pub.jar
- java5_Durability_sub.jar
ISO C++ 2 Executables
Building the examples is described on the Summary page
Two executables are generated in the isocpp2 directory when the example is built:
- publisher.exe
- subscriber.exe
Running the C/C++/C#/ISO C++ 2/Java Examples
Ensure that the environment for OpenSplice is set up correctly as described above for each new command prompt used.
The following steps describe how to run the examples:
Running in single process (heap memory) configuration : the application starts OpenSplice middleware
- OpenSplice is deployed in this mode by default.
- The OpenSplice daemon should not be started manually. Instead the OpenSplice middleware and optional services are implicitly started by the single process applications as required
- Open 2 OpenSplice Command Prompts and go to the example directory as described above
Running in multiple process shared memory configuration
To enable deployment in this mode, an OpenSplice configuration file must be selected that has shared memory support e.g. one of the ospl_shmem xml configuration files found in the OpenSplice_install_dir\etc\config directory.
- Open 2 OpenSplice Command Prompts. In each window:
- Go to the example directory as described above
- Set the required configuraton file e.g. set OSPL_URI=file://%OSPL_HOME%\etc\config\ospl_shmem_ddsi.xml
- Start the OpenSplice daemon. You can do this by typing ospl start
Running the subscriber and publisher
Usage :
- The publisher takes 3 input parameters - durability_kind autodispose_flag automatic_flag, where
- durability_kind = transient | persistent
- autodispose_flag = false | true
- automatic_flag = false | true
indicates if the publisher is run in interactive or automatic mode
- The subscriber takes 1 parameter - durability_kind, where
- durability_kind = transient | persistent
Scenario 3.1 :
- Run the Subscriber Application, in a console go to the example directory as described above and start the subscriber
- sac_durability_sub transient for C
- sacpp_durability_sub transient for C++
- sacs_durability_sub transient for C#
- java -jar saj_durability_sub.jar transient for Java
- java -jar sub/java5_Durability_sub.jar transient for Java5
- subscriber transient for ISO C++ 2
- Run the Publisher Application,in a console go to the example directory as described above and start the publisher
- sac_durability_pub transient true false for C
- sacpp_durability_pub transient true false for C++
- sacs_durability_pub transient true false for C#
- java -jar saj_durability_pub.jar transient true false for Java
- java -jar pub/java5_Durability_pub.jar transient true false for Java5
- publisher transient true false for ISO C++ 2
- Check that the Subscriber receives the samples
- Stop the Publisher and the subscriber
Scenario 3.2 :
Run the Subscriber Application, in a console go to the example directory as described above and start the subscriber
- sac_durability_sub transient for C
- sacpp_durability_sub transient for C++
- sacs_durability_sub transient for C#
- java -jar saj_durability_sub.jar transient for Java
- java -jar sub/java5_Durability_sub.jar transient for Java5
- subscriber transient for ISO C++ 2
Run the Publisher Application,in a console go to the example directory as described above and start the publisher
- sac_durability_pub transient false false for C
- sacpp_durability_pub transient false false for C++
- sacs_durability_pub transient false false for C#
- java -jar saj_durability_pub.jar transient false false for Java
- java -jar pub/java5_Durability_pub.jar transient false false for Java5
- publisher transient false false for ISO C++ 2
Stop the Publisher Application
Run another instance of Subscriber Application as described above and check that it
receives the samples.
Stop the subscribers
Scenario 3.3 :
(If running in Shared Memory deployment we need to stop/start OpenSplice as we will change the topic durability
kind from Transient (in scenario 3.2) to Persistent. Otherwise we won't be
able to create the topic)
- Stop OpenSplice if running in Shared Memory deployment
- Start OpenSplice if running in Shared Memory deployment
- Run the Subscriber Application, in a console go to the example directory as described above and start the subscriber
- sac_durability_sub persistent for C
- sacpp_durability_sub persistent for C++
- sacs_durability_sub persistent for C#
- java -jar saj_durability_sub.jar persistent for Java
- java -jar sub/java5_Durability_sub.jar persistent for Java5
- subscriber persistent for ISO C++ 2
- Run the Publisher Application,in a console go to the example directory as described above and start the publisher
- sac_durability_pub persistent false false for C
- sacpp_durability_pub persistent false false for C++
- sacs_durability_pub persistent false false for C#
- java -jar saj_durability_pub.jar persistent true false for Java
- java -jar pub/java5_Durability_pub.jar persistent true false for Java5
- publisher persistent false false for ISO C++ 2
- Stop the Publisher Application
- Stop OpenSplice if running in Shared Memory deployment
- Start OpenSplice if running in Shared Memory deployment
- Run a new instance of the Subscriber Application as described above and check that
it receives the samples.