Annotate Screenshots in Mountain Lion is Super Easy
I often have to create documentation with screenshots of web pages or applications. In order to make it easier for a reader to focus on what is important I want to annotate the image with ovals, rectangles or text. So far this was not very easy but by pure luck I figured out a quit fast and easy solution which does not to require to create temporary files.
These are the steps:
- Create a screenshot to the clipboard (Shift-Control-Command-4) and optionally you can then hit the spacebar to select a window
- Go to Preview (open it if not yet done)
- Create new document (Command-N) => the image from the clipboard is placed automatically into the window
- Annotate (like Control-Command-R) the image
- If needed select all (Command-A)
- Copy the image (Command-C)
- Go to the target App (Nisus Writer, Pages etc)
- Paste the image (Command-V)
The only annoying step is that I have to “delete” the image in Preview afterwards but that can be done at the end.
I can also copy an image from the target document or from another source like Safari etc.
Happy documenting – Andy
My Way to Paperless
This is my account of going paperless. I will update the post when there is something going on. The parts will be in reverse order so that you always have the latest first.
July 21st: Hazel
Lately I didn't have much time to spare for this project but we started to use the scanner more often. Rather than to fret what to do with a document we just throw it into the scanner and then drop it into the delayed shredder bin. We can sort out where to place it later.
For that matter doing my travel receipts is much easier now. Just scan the receipts, open the resulting PDF into PDFpen, add the electronic invoices like flight tickets and the spreadsheet with the receipts summary and I'm done.
I was briefly using Hazel to see how it works and it should do the trick even though it's probably a little bit tougher to create good rules and we might spend more time manually name the documents. For example the receipts document is very hard to create a good Hazel rule for but I think using TextExpander instead should speed up the naming process enough to keep it efficient.
July 12th: Getting Ready
If my wife hadn't started to work full time we probably would still use papers even though in my job I started to use less and less paper a few years back. The last time we bought a new house and sold our old one we started to use PDFs, Dropbox and PDFpen to sign and share most of the documents with our realtors.
With the dawn of paperless billing keeping all invoices, business paperwork and receipts in one place is becoming more and more of a challenge. What I don't want is to search all my documents in multiple places rather than just open my computer and search for it.
In the beginning of 2012 my wife and I started to talk about going paperless but it took nearly another 6 months to put it in place. I knew that my printer/scanner combo wasn't good enough to scan efficiently nor was a simple PDF image of my documents going to help us cataloging and searching the documents efficiently. When I bought PDFpen I saw the power of OCR to convert a document into searchable text. Then I started to share sensitive documents about our house transaction with our realtors over Dropbox and later used CrashPlan for an online backup. The only missing so far was how to automate the scanning, sorting, syncing and backing up of our documents.
In order to make everything work well all our documents are stored on a central location with a minimal effort to convert into searchable documents and automatically sorter based on its content, at least for recurring documents. Having already a Mac Mini Server adding a great scanner to it, scan and sort the documents into a shared folder on the server looks very promissing. Finally I can use CrashPlan to backup these folder(s) and the only thing I need to figure out if I want to encrypt the documents locally before the are backed up.
The only missing piece is the automatic sorting and for the Mac the solution seems to be simply Hazel. With this tool I can automate actions on files bases on various features like file name, properties, Spotlight comments, content and more. In order to trigger Hazel I need to place my documents into a folder no matter if it was scanned or arrived digitally. Hazel will check the content and move, rename, add tags etc on all documents it understands. The rest will remain in the original folder and we need either to create new Hazel rules or just rename / move them manually.
Even though we didn't start yet I want to collect paper documents in our office in a bin then periodically scan them except I need the documents right away like receipts. After a given time I want to check if I still can find some random documents and if found I will shred the paper.
Because the scanner is a very important piece we bought a Fujitsu SnapScan S1500M and after a few tries I can scan a document in seconds. The Fujitsu software is then running OCR in the background and places the PDF into our central folder. This is dead simple because the scanner scans both sides in one pass, uses a sonic sensor to make sure it did not scan two pages together and the OCR is pretty good. The only thing I need to figure out is how to place multiple pages in on PDF file. So far I see two solutions, either I scan one document at the time and let the software combine them into one document or I scan all pages as one document and combine them later with PDFpen manually. Even though the scanner ran obout $440 it is a great investment to go paperless.
– Andy
Guitar Shop: Still Didn’t get the Memo that Customer Service Counts
Update
When I wrote this piece I mixed up the name of the Store. So it is the Guitar Center Murrieta from which I bought the Amplifier.
Since I bought a Taylor Guitar on my sons’ School Gala silent auction I started to look into buying a good but versatile amplifier because my JamVox is nice but cannot fill the room. On the day after Father’s Day I received a newsletter from the Guitar Shop that their $100 off for purchases over $499 I finally decided to buy a Line 6 Spider IV 150. So I drove down to my closest Guitar Shop despite the warning from the beard to test drive it. After 20 minutes I wanted to buy it but I ran into a lot of troubles afterwards and I am not a happy customer. In the current economy I would have expected a way better customer service. In every company something can go wrong and I am not someone that expects perfect service but I expect that every company puts even more effort into customer service when something goes wrong but not the Guitar Shop.
So that is what happened:
First when I wanted to buy it I was told they did not have it in store even when their website said otherwise. The salesman lame excuse was that they had the display model. So in order to buy it they had to transfer the amp from another store and I left the store about 45 minutes later.
In the store I was told that I would receive the amp within two to three days and that they would call me when it arrives at the store. Two days later no call. When I called to check on the order nobody could give me a good answer but the person on the phone told me that he will call back that day to tell me what is going on. Of course he never called. The next day I called in again and after getting a similar run-around I asked for the manager which promised to call me the same day. He called back the same day telling me that I will either shipped home or to the store and should arrive 7 or 8 days after I bought it.
Finally on Monday I received a big package with the amp in it but just the amp. No electrical plug, no manual, no disks and no registration card. Eventually I had to call Line 6 technical support to figure out what the package content is. The thing that upset me was the fact that I have no idea if this wasn’t a display model or refurbished model even though I looked new.
A few days later I decided to keep the amp and went back to the store to talk to the manager. But he was in a hurry to get out for his lunch break and didn’t bother to listen to my thoughts but rather said that I could have a cable or strings as “compensation”. At that moment I was close to just bring it back and shop somewhere else but I was too tired but I will remember this when I am in the market for my next gear.
– Andy
CQ 5.4 / 5.5 Resource Mapping
Introduction ∞
Several times I ran into Resource Mapping inside CQ / WBEM and had issues with it over and over again. Now I had to go into it and make it work and this is the result of it.
There were a few issues that need to be handled in order to avoid a lot of grief and there are a few things that can be done in order to make life easier.
Resource Mapping ∞
CQ is able to map resources on an incoming request as well as on the outgoing result. For example if your resource is /content/geometrixx/en/products.html and you map it to /en/products.html then CQ will show it with /en/products.html (obviously) but it also maps a link inside another page when the page is sent to the browser.
This means that one has to be careful when mapping resources because CQ will map them no matter what and you must be especially careful when dealing with the Author instance.
Map the Root ∞
Here I assume we are working inside CRXDE|Lite on the Publish instance. Now we want to map http://testme.com:4502/ to /content/geometrixx/de.html. This is what you need to do:
- Open the hosts file (Mac/Unix: /etc/hosts) and add row with 127.0.0.1 testme.com and make sure with ping testme.com that is resolves to 127.0.0.1
- Go to the Node /etc/map/http
- Right-click and select Create Node
- Enter name testme_com with the type sling:Mapping
- Go to the Properties of the newly created node
- Add a new Property with name sling:match and value testme\.com.4502
- Add a new Property with name sling:internalRedirect and value /content/geometrixx/de.html
-
Save it with Save All
Now you can open a browser and enter the Url http://testme.com:4504/ and you should see the German Geometrixx site. Now if you click on the Products on the toolbar we are back with the /content/geometrixx/de path.
Dealing with Mapping Issues ∞
Working with Resource Mapping in CQ can be very frustrating depending on the project your are working on. For example the Geometrixx site is a good example what can go wrong but also how to avoid issues like this.
First problem I ran into when mapping resources was that I ended up in an endless loop when trying to map both the English and German pages to different domain names. Because of the browser jumping between various pages I wasn’t able to see what is going on. Eventually I went to the command line (Mac) and used curl to access the web site:
curl http://testgerman:4502
and checked the output. Sure enough the Geometrixx site used the login page fromm the English site and so it would jump to http://testenglish.com:4502, login (on publish it does that automatically as anonymous) and then jump back to http://testegerman.com:4502 where it wasn’t logged in and repeated the loop. Because using curl I could see the source of the desired page and had no endless loop.
Next issue was that even when the page was coming up right it would come up without any images, style sheets etc and using curl again I saw that mapping of elements from /etc won’t work anymore. This means that I had to make sure that certain entries are mapped differently and because the browser accessed the page on the root we had to make sure that we exclude certain entries from the loop.
Map Content ∞
Mapping content is similar to mapping the root but here we can use a trick. If we don’t provide a sling:match property CQ will use the name of the node as a match. So we create it this way:
- Create a Node with Name testme.com.4502 and type sling:Mapping
- Add a property with name sling:internalRedirect and value /content/goemetrixx/de
-
Save it with Save All
Now you can open in a browser http://testme.com:4502/products.html and it will bring up the page but without images and style sheets as mentioned above. So we need to make sure that CQ isn’t mapping /etc. This is done this way:
- Under the node testme.com.4502 we create a child node with name etc and type sling:Mapping
- Enter a property with name sling:internalRedirect and value /etc
-
Save it with Save All
Because CQ is looking for the longest matching string testme.com:4502/etc is longer than testme.com:4502 and so it will take this one which maps /etc to /etc which is just what we wanted. Now opening http://testme.com:4502/products.html in a browser should come up just fine (you might need to clear the cache).
You can repeat this for other parts of your system like /apps etc if needed.
Still not 100% ∞
Having a closer look at the Products page you will notice that there is no toolbar because it is an URL that maps to /content/geometrixx and not /content/geometrixx/de even though the page starts with de.. This is unfortunate and you might be able to add additional mapping using Regex but then again you are probably not running Geometrixx as your site and so you can make sure that the toolbar etc is inside your CQ context. Unfortunately these shortcomings are not fixed in CQ 5.5. Even worse looking at your page you will find links that start with localhost:4502 even if you CQ instance is running on another port or host.
So it is not 100% but it is close enough for good sites in CQ.
Tips when dealing with Resource Mapping ∞
- Resource Mapping is only mapping CQ resources. Don’t try to map anything else.
- If a browser gives you grief use curl to see what the server returns
- Create a CQ package with the /etc/map as content, delete everything and start step by step. Each step must work as expected before going to the next.
- Check the HTML code from the server to verify the results. Browser’s output is often misleading
- Make sure that first level folders like /etc, /apps etc are not mapped
- To avoid mapping on Author but define the mapping on Author you can create /etc/map.publish instead of /etc/map and then replicate it to the Publish instane(s). Often mapping is not desired inside Author.
- If you have problems accessing the CQ Webpage because of the mapping you can use WebDav to remove the mapping nodes.
-
If you map different domains to different CQ sub folders make sure they are distinct otherwise the mapping of resources inside a returned page is undefined.
Final Result of my Mapping as JSon ∞
curl http://localhost:4502/etc/map.tidy.-1.json { "jcr:createdBy": "system", "jcr:created": "Mon Mar 26 2012 19:47:11 GMT-0700", "jcr:primaryType": "sling:Folder", "testmegerman_com": { "jcr:createdBy": "admin", "sling:internalRedirect": "/content/geometrixx/de.html", "jcr:created": "Wed Mar 28 2012 07:43:42 GMT-0700", "jcr:primaryType": "sling:Mapping", "sling:match": "testmegerman\.com.4502/$" }, "testmefrench_com": { "jcr:createdBy": "admin", "sling:internalRedirect": "/content/geometrixx/fr.html", "jcr:created": "Wed Mar 28 2012 07:43:42 GMT-0700", "jcr:primaryType": "sling:Mapping", "sling:match": "testmefrench\.com.4502/$" }, "testmefrench.com.4502": { "jcr:createdBy": "admin", "jcr:created": "Wed Mar 28 2012 07:43:42 GMT-0700", "sling:internalRedirect": "/content/geometrixx/fr", "jcr:primaryType": "sling:Mapping", "etc": { "jcr:createdBy": "admin", "sling:internalRedirect": "/etc", "jcr:created": "Wed Mar 28 2012 11:10:16 GMT-0700", "jcr:primaryType": "sling:Mapping" } }, "testmegerman.com.4502": { "jcr:createdBy": "admin", "jcr:created": "Wed Mar 28 2012 07:43:42 GMT-0700", "sling:internalRedirect": "/content/geometrixx/de", "jcr:primaryType": "sling:Mapping", "etc": { "jcr:createdBy": "admin", "sling:internalRedirect": "/etc", "jcr:created": "Wed Mar 28 2012 11:10:16 GMT-0700", "jcr:primaryType": "sling:Mapping" } } }
Alfred Powerpack: Bad Business Model?
Today I got an email from Alfred (Mac OS X app launcher) that Alfred is now two years old and to celebrate they offer the Powerpack with a 10% discount. I was thinking about buying it and it sounds reasonably priced but not with the limitations.
If I buy the current version it will run with 1.x release of Alfred which just turned two. That said I have no idea when they will release version 2.x. This prevents me from actually buying it or let’s say it this way it makes they price rather unreasonable. I paid more for software but all of them do more like Omnifocus, Omnigraffle, Pixelmator etc.
To make it work for me the Alfred team either needs to give us an idea how long 1.x is the current version or limit the time the license is valid like 2 years.
Finally the mega-support license is great but then how long will be Alfred around so that my investment is worthwhile.
For now I use the free but limited Alfred without the Powerpack.
– Andy
Post with Blogsy
This is my first post using Blogsy to write a post on my iPad. Even though I prefer writing on my MacBook Air it is nice to write it on a small device like the iPad.
– Andy
Mac OS X Tip: Manage Screenshots with DEVONthing
Since a while I am thinking on how to manage screenshots the best. I take them but then are lurking around inside a directory and if I don’t head over, review and rename them I will loose the context and often they become worthless. What I want is to take a series of screenshots (for example to demonstrate how to do something), then review and rename them quickly.
Because I am using DEVONthink as my second brain where I just dump everything I need to keep an eye on or need to work on later and then use its search / quick preview feature to go over the entries and organize them correctly. The nice think about DEVONthink is that it has a directory for its Inbox in the file system that I can use to drop items there using Finder or any other file selection tool.
Now I started to think if it would be possible to use the Mac Screen Capture system to add these screenshots to DEVONthink so that I can review them, add tags and organize them correctly after I am done with taking the shots. So I followed the instruction from Mac World OS X Hints how to change the default location for screenshots and opened a terminal:
defaults write com.apple.screencapture location \ "/Users/<User Name>/Library/Application Support/DEVONthink Pro 2/Inbox"
Then I had to log out and log back in so that the change could take into effect.
Now when I take a screenshot it won’t appear on the Desktop but rather in the Inbox of DEVONthink where I can easily view them, add tags and copy them into the final destination.
– Andy
Warning: Don’t shop at Hobbytown USA, Temecula
Since we moved into the region I was a regular customer at Hobbytown USA in Temecula but this came to a screeching halt because of their bad customer service which also includes the entire franchise Hobbytown USA because they weren’t willing to help me settle my argument with the shop. So the shop and the franchise are loosing me as a valuable customer (I bought several remote controlled cars, helicopters, remote controls and much more) over an argument over $400.
My wife wanted to buy all our kids a toys they could use together and she settled on a Slot Car racing track system. So she went to Hobbytown USA in Temecula because we had good experiences so far and bought the digital SCX 3 cars racing system for $400. So on Christmas day we built the racing track and my wife and the two oldest kids were racing with it on the junior settings so that they don’t shoot out of the tracks on every turn. An hour or so later my wife’s car lane change system stop working which is crucial to play it because that is the way how to refuel the car and at the end of 2 hours playing the spoiler on the trunk of another car was ripped out on one side.
Because we paid so much I packed up the system and went back to the store to return it because the quality of the system doesn’t match its price tag. But there I got a real eye-opener because the store owner was not willing to return it at all. He more or less accused me that we played too rough whatever that means on a racing system and therefore it is our problem now. After I told him that I am disappointed and that I could return a toy even at Toys’R’Us he kicked me out of the store.
After I came home I started to searched the system SCX D10009X510 1/32 Digital System GT Pit Box Slot Car Set 20.4′ I figured out that I could have bought the system cheaper on-line. Close to a month later Hobbytown USA isn’t selling the system anymore and I am wondering why. In an effort to resolve that issue I contacted Hobbytown USA because it was their flyer that gave my wife the idea and it was them defining the catalog of the toys sold. Again now luck with them because they just told me that all shops are owned independently and they set the rules. When I responded that it was their catalog which choose the system from and that it is their name / brand on the store and so I expect that they should help resolve the issue they just didn’t respond anymore.
If a store sells toys at a premium and doesn’t want to be compared to Toys’r’us then they should make sure that what they sell is worth the money and if it fails they should correct it and I don’t care about the relationship between the store and the brand, period. I would have gladly accepted an in-store credit but they choose to let me down and ruin a good customer relationship.
So from now on I will not buy anything from Hobbytown USA store in Temecula and from a Hobbytown USA store anywhere including their online store. Hobbytown USA should have a look at Apple and how their customer relationship is making me preferring their store instead of buying at Fryr’s, BestBuy or any other computer store. I had an iPad 2 where the homebutton would sometimes not work even though I felt the click. They replaced the iPad 2 without any questions and this one costed $600. Even if the Apple store is more expensive I know that I get great customer service and that if anything isn’t up to par I can return it. Or they should look at the 2 person company of Studioneat which make the Cosmonaut, an iPad stylus, and when some of their tips did not work effortlessly they send out an email to tell their customers and replaced mine without questioning and now and I am an even bigger fan of them as before I got the Cosmonaut.
In today’s economy I don’t understand how a company can blow their customer relationships like this and they don’t care if I was a one-time customer or a regular, long-time customer. But they did and I won’t forget it.
MacBook Air Arrived and Ready
Yesterday my new MacBook Air arrived and I started to set it up. Going to a smaller device I did not copy the content of my original 17-inch laptop over but started from scratch again.
Funny thing today is that I got an email from Apple that the Air was shipped even though I received it yesterday and the first delivery was made two days ago. So it seems that Apple had a problem with my shipment but at least I got it and it is working perfectly.
The first thing that amazed me was how light it is. Carrying it around compared to the 17-inch is a breeze. The overall speed is quite slower but not enough to be a drag. Of course creating or extracting large ZIP files is progressing a lot slower but that isn’t my daily business. Developing on CQ5.4 from Adobe (Day) is comparable and still beats my current Dell desktop at my workplace.
Having the Air connected to my 27-inch monitor it nearly feels like the 17-inch and so working at home with the Air is more or less the same. On the road the screen is small but because of that easy to use in a car or plane. If I am on-site it might be a little bit small for regular development but for now I rarely do that.
The only thing that baffles me a little bit is that the Activity Monitor is showing for CPUs for a Dual Core i5:
For now the only reason why I would go back to my 17-inch is if I need to have a powerful development machine away from my home and there is no way I could have an external monitor with a better resolution that the Air which is pretty good with 1440×900.
– Andy
iPad-ification of Development
Since I started my career as professional software developer my motto towards new laptops was bigger, faster, larger until now. Since I started working with iPads I started to think maybe lighter, quicker, longer maybe better afterall and so I went ahead and bought an 13-inch Mac Air on Black Friday.
Initially a new laptop had to be:
- bigger meaning the screen real estate had to be bigger so that I could view more code without scrolling
- faster meaning faster CPUs to just get work done faster
- larger meaning more harddisk space to store all my projects and other documents data.
Now having a Mac Pro at the office with a 30-inch monitor I have no need for a big laptop and when I am on the road I rarely do hardcore development that requires a big screen and being on an airplane or inside a car the size of the laptop makes it cumbersome to code anyhow. So my priorities shifted to:
- lighter meaning having a lightweight laptop is easier to transport and I can work with it everywhere
- quicker meaning the laptop is always on like an iPad. My 17-inch laptop with its SSD boot drive is close to it but I have some hickups with the setup from time to time.
- longer meaning battery life. Again the 17-inch laptop is close but not quite there.
So I already started my transition to the Air a while ago with my MacBook Pro but now I want to have it in a nice little package that I can take everywhere without breaking my back or being afraid it might slip.
The need for more CPU power went away some time ago because I rarely max out CPUs and if I really need to deal with movies then I’ll use my Mac Pro instead.
Finally the need for large harddisks also became somewhat mute with external drives that are quick and big. Lately I never had to manage many huge projects and so the only reason I need a lot of disk space is because I have many projects around for reference which I rarely use so an external drive would do just fine.
So now I think I am ready to develop on an iPad like device rather than carry around a “Schlepptop”.
– Andy