New Structured Notetaking Tool

Over the years we’ve tried everything for taking notes – and seem to always end up back to using either a plain text document or even pencil and paper. All the tools like Evernote and Trello and the plethora of others, while feature rich, lack the basic simplicity of jotting things down. Over the years we’ve stretched and twisted various WIKI’s and even used spreadsheets to try to come up with the right mix of structured data, simplicity, and searchability.

Full text searching has it’s place, but it’s impossible to gather together all the notes related to a certain topic or from a certain time frame.

After some 20 years of playing with various solutions…. we now think we have something that covers all the bases.

This post gives some basic instructions on how it works.

The Basic Concept

Remember in elementary school when you were taught to take notes on 3×5 index cards – one fact or idea or detail per card?  Then, you could easily re-order your cards as you were writing your paper.

That is the basic idea behind this tool.  It allows you to take short, simple notes while providing the tools to index and cross-reference those notes later.  It intends to do so with as little “fiddling” and as much flexibility as possible.

The twist is adding searchable tags that create an automatic index of your notes.

TAGS

We’re all familiar with the “hashtag.”  Besides being useful as a way to make snarky comments about things, the “hashtag” is a useful tool to call attention to what’s important in a post or a comment and to cross reference items related to the same thing . . . mostly.The downside is that the symbol # doesn’t give any information about the significance of what follows it.  And this becomes a problem when trying to search.  Do a search on #1984 and your likely to not only get references to the book by George Orwell, but you will find references to events that happened in the year 1984.  With a simple search, there’s no way to know ahead of time what you will get.Now, imagine that references to the book were tagged   bk:1984  (bk: being a tag indicating that what follows is a book) and references to an event in that year was tagged  yr:1984 or dt:1984-07-04  (yr: being a tag for “year” or dt: being a tag for a “date”).Now suddenly things become easier to search and index.  If you want to find all the events that happened in 1984, you can search for “yr:1984″  or do a wildcard search “dt:1984*”.There are a million ways to use such tagging.For example, in the organizational system GETTING THINGS DONE(tm), David Allen suggests creating todo lists based on the context in which a task can be done.  So you may have one list for “errands”, another for “home,” and another for “office”.With our tagged note-taking system – adding a task to one of these lists is as easy as including “list:office” or “list:errands” somewhere in the note.  Is there some reason you want it to appear on a couple of different lists?  Perhaps “calls” and “office”, just include both.Want to group everything related to your “birthday party project” together?  Just tag everything with “project:birthdayparty”.Our note taking system will allow an unlimited number of tags and allows you to search them in any combination.  For example, when you want to sit down and make phone calls for the birthday party, you would simply search for “list:calls project:birthdayparty”. You can even sort based on the value of the tag.  So if you were working on a history project and you included a date tag for each event – for example – “Fall of the Berlin wall dt:1989-11-09,”  and “Fall of the building:WTC in place:NYC dt:2001-09-11″ along with other dates, you could do something like “<~dt:%” and it would search for all your notes containing the “dt:” tag and sort them in ascending order.  You could sort them in descending order instead by searching for “>~dt:%”.Excluding items is as easy as putting a dash (“-“) before the search term.  So if you wanted to exclude all calls related to the birthdayparty project from your “calls” task list, you would simply search for “list:calls -project:birthdayparty”.In addition to creating a custom tag, the system also recognizes the “#” mark as a generic tag marker as well.

Adding Notes/Log Entries

Our mantra for adding notes was, “KEEP IT SIMPLE.”  The whole purpose of the tool is to get data in as quickly as possible.  No pretty formatting, just get the notes into the system.  The tagging of data is arbitrary and you can create any convention you wish.

Tags are simply a series of letters and numbers followed by a colon (“:”).  Anything that’s tagged with the same series of letters and numbers before the colon can be easily searched and grouped together.

To begin adding notes, you have to create a log to put them in.

New logs are easy to create.  Simply click on the “Log Options” button (the “cog” or “gear” in the top menu).  Then click on the “Add Log” (the “plus” symbol) once you get there.  Once you have added a log, you can add entries by going to the “home” or main screen (click the “house” on the top menu).

Once you’ve created a log.  You’re ready to begin adding notes.

The note entry screen has 4 fields.  (1) A selector for which log to store the note in.  (2) A “prefix” field, (3) A “Log Entry” field, and (4) a “suffix” field.

If you are adding multiple notes, the log selector as well as the prefix and suffix fields will keep their values when you click “Add”.  You only need to type the next note (unless you want to change them for some reason).

Once you have selected which log to update, you can just type your notes in the “Log Entry” field and click “Add”.  Your log item will be saved and the system will show you the last several entries.

Remember to keep your notes short – one thought or idea per note – and tag items you may want to cross reference in the future.

Prefix/Suffix

Retyping the same tags over and over when you’re taking notes on the same things would be tedious and annoying.  That’s why there is a “prefix” and “suffix” field on the notetaking screen.  When you click the “Add” button, whatever was in the “prefix” and “suffix” fields will be carried over for your next note.

If you’re taking notes for a book report on George Orwell’s 1984, for example, it may be helpful to put “book:1984 chapter:2″ in the “suffix” field and it will automatically include those tags when you click “Add”.  Now you can search for “book:1984 <~chapter:%” and it will sort your notes in chapter order.  If you included the page number by using a tag like “page:100″, you could search for “book:1984 <~page:%” and have all your notes sorted in page number order.  Or, if you were working on a section on the main character Wilson, you could search for “book:1984 character:Wilson”.

Tags only have meaning to you.  So you could use “bk:” instead of “book:” and “char:” instead of “character:” – or even just use single letters!  The trick is to be consistent.

Multiple Notes

You can also enter multiple notes that all have the same prefix and suffix without clicking “Add” between each note.

To do so, simply include three dashses (“—“) all by themselves on a line between each note.  The three dashes (“—“)  must be the only thing on the line with no spaces in front and no spaces at the end.

If you’ve added a series of notes separated by three dashes on a line by themselves, each note will be added to the database separately and have the prefix and/or suffix attached just as if you clicked “Add” in between each.

This is a great feature to use if you don’t have online access!  Simply create a simple text document and take all your notes while you’re offline – separating each note with a line containing only three dashes.  When you can get online, you simply need to cut and paste the contents of your document into the add note screen and click “Add”.  All your notes will be added – and if there is anything in the Prefix or Suffix fields, that will also be added to each note!

Searching for Entries

Fuller documentation on advanced search functionality is still under development.

The basic format is:  (sort order)(search type)(operator){tag}:{value}

Sort order:   <  = ascending,   > = descending

Search type:  ~ = wildcard,  ? = specific value.

Operator (for specific value searches only):    <  = Less than,  =  = Equal to,   >  = Greater than.

When using a wildcard search, include “%” in the value to represent zero or more unspecified characters.  So a search for  “~dt:1984%” would find all values beginning with 1984. A search for “~dt:%-10-%” would search for all dates in October of any year if the “dt:” tag is used for dates.

NOTE: Currently there is no “full text” searching available.  It is only possible to search for tagged items.  Full Text searching is being considered as part of future releases.

Multiuser

Documentation on the multiuser functionality is still under development.

Refresh cached pages in NGINX

Here’s a quick tidbit for forcing individual pages to refresh on an nginx reverse caching server.

In your SERVER block put:


if ($request_uri ~* "^/cache-refresh/(.*)") {
set $cache_bypass 1;
rewrite ^(/cache-refresh/)(.*)$ /$2 last;
}

and in your LOCATION block(s), add:


location / {
proxy_cache_bypass $cache_bypass; # Do not serve response from cache.
proxy_cache staticfilecache;
proxy_pass http://backendsite;
}

There are numerous other helpful directives as well. But if you’re looking for a way to refresh your cached pages individually, this should be enough to help you in the right direction.

Contacts in Android not Saving or Syncing Properly

I recently had difficulty syncronizing my contacts between Google and my Android tablet. The symptoms were actually pretty strange. I could change contacts, I could add them in Google and they would show up on my tablet. But, contacts created on the tablet would not only never make it to Google, but they wouldn’t even save on the tablet.

After some work and searching around, I found the solution was to reset the Android contact database.

WARNING!!!! YOU MUST DELETE YOUR CONTACTS FROM YOUR ANDROID TO RESET THE DATABASE. MAKE SURE TO BACK YOUR CONTACTS UP TO REMOVABLE STORAGE (SD Card) BEFORE BEGINNING THIS PROCESS!

After backing up your contacts to a removable storage device, follow this procedure:

From your main Android apps screen, click your menu button and select “settings”.

Click on “Accounts & sync” and uncheck “background sync”.

Return to your “settings” page (click the back key) and click “Applications”.

Select “Manage Applications” then choose “ALL”.

Find the “Contacts Storage” application and open it.

Click the “clear data” button.

Return to the main Android apps screen, click “menu” then select “settings” again.

Click on “Accounts & sync” and recheck “background sync”.

Then reload contacts from backup and select Google to syncronize with.

This resolved my issues, hopefully it may help someone else as well! Comments or questions? List them below!

Minecraft ModLoader Install in Linux

Being a computer geek is kind of fun… unless it’s a holiday weekend and family members continually use you for free technical support.  Of course, when it’s your son, it’s hard to say, “No!”  Besides, I live for technical challenges that need solving with very scant information.

So, on New Years Day, my son was attempting to install ModLoader for Minecraft.  When he had asked, he had already struggled to follow the instructions for some time, and things were NOT going well.

Anyway, it appears that the way that some of the “make-it-easy-to-do-stuff” tools don’t actually do everything right.  Specifically, using “Archive Manager” in Ubuntu Linux to add files to a Java .jar file doesn’t properly work.

So, if you’re trying to follow the install instructions for ModLoader on Linux and your program freezes on the Mojang splash-screen, the .jar file it is likely that your jar file is somehow corrupted.  The best way to add the appropriate files to your minecraft.jar file is to create a new directory and unzip the minecraft.jar file into that directory.  Add the appropriate files.  Zip up the directory again and rename it minecraft.jar.

Make sure to use the -r (recurse subdirectories) when zipping up the jar file again.  Otherwise, the .jar file will still be incomplete.

Here’s a quick transcript of what we did to recreate the minecraft.jar file with the proper files from ModLoader 1.0.0:

A couple of notes – ModLoader.zip was placed in the .minecraft/Downloads directory (a directory specifically created to store minecraft download files like mods and others).

#cd ~/.minecraft/Downloads
#mkdir ModLoader
#cd ModLoader
#cp ../ModLoader.zip .
#unzip ModLoader.zip
#cd ~/.minecraft/bin
#cp minecraft.jar minecraft.orig.jar               #NOTE: Make a backup copy – just in case
#mkdir modloader-workdir
#cd modloader-workdir
#cp ../minecraft.jar .
#unzip minecraft.jar
#rm minecraft.jar
#cp ../../Downloads/ModLoader/* .
#rm -r META-INF #NOTE: This REQUIRED STEP missed in original posting
#zip -r minecraft.zip *
#mv minecraft.zip ../minecraft.jar
#cd ..
#rm -rf modloader-workdir

That will create a new minecraft.jar file with the ModLoader classfiles.  NOTE: You will need to follow these instructions any time MineCraft updates (even if it’s a forced update) – so make sure to keep the ModLoader.zip file around.

Hopefully this will help others, but more importantly, it’ll help me remember what the heck I did when Minecraft gets updated and I need to redo this.

LINKS:

MOD_FCGID ignores directives in VirtualHost block

Hopefully the following will help some people from wasting a lot of time chasing their tail.

There are many “How-To” documents describing how to use mod_fcgid in Apache with PHP and almost all of them are absolutely WRONG!

If you run across a document which directs you to place process limiting directives for mod_fcgid in the <VirtualHost> block, don’t listen to it. Although the documentation for mod_fcgid says you can place these directives there (up until version 2.3.2), you need to be aware that they will be ignored!

Here’s a note from the latest and greatest readme:

Some directives which could be placed inside <VirtualHost> but were
ignored before now result in configuration errors. As before, these
directives must be set at global scope to have the desired effect.
(emphasis added)

If you are attempting to use any of these directives, you MUST use them in a global scope (which means they can NOT be set per virtual host even though the documentation says they are allowable in that context).

The following is a list of previously ignored – now causing an error if placed in VirtualHost – directives for mod_fcgid:

FcgidBusyScanInterval, FcgidBusyTimeout, FcgidMaxProcessesPerClass, FcgidDefaultMinProcessCount, FcgidErrorScanInterval, FcgidIdleScanInterval, FcgidIdleTimeout, FcgidMaxProcesses, FcgidFixPathinfo, FcgidProcessLifetime, FcgidProcessTableFile, FcgidIPCDir, FcgidSpawnScore, FcgidSpawnScoreUpLimit, FcgidTerminationScore, FcgidTimeScore, and FcgidZombieScanInterval

If you are having trouble with your MaxProcesses, ProcessLifetime, MaxProcessesPerClass or MinProcessCount being ignored, try moving them to the global context.

Google Blacklisting WordPress Websites over Old Vulnerability

Keeping your software updated is part of keeping your website secure. Most sites are hacked using old vulnerabilities that simply haven’t been fixed yet.

The recent spike in malware (bad software) infecting thousands of WordPress websites is a case in point.

The fix has been out for some time, but many website owners have not made the required changes.

If your site has been blocked – or if your site has not YET been blocked and you would like to keep it that way, email us. We offer affordable rates for WordPress Support to deal with your WordPress problems.

Sites who have not been compromised can be innoculated for as little as $50! That’s a small price to pay for a little peace of mind. If your WordPress site uses TimThumb, email us or call us at (586)779-3242 about making sure it is up to date so you don’t find your site blacklisted by Google!