Finally Gmail
Gmail is taking the compose window out of the corner of your window.
The long bolts with plastic washers attach to the head and foot of the cot (1). These are easier to screw in using a drill with a hex bit. Put the four smallest bolts through the holes (2) before attaching the sides or you’ll be taking the sides off again. These will be used to attach the mattress spring.
Cams go in the head and foot (1), smallest bolts as described above (2).
Now just attach the sides with the medium bolts and then the mattress spring using the wing nuts.
Missing one of the medium bolts? It’s in this bag somewhere. When asking Kate to help by putting bolts in a bag remember to be very, very specific about which bag next time. The rest of the hardware is in a Ziploc in a side pocket.
(Published to the Fediverse as: Memo to future: How to reassemble Kate’s cot #etc #cot How to reassemble Kate’s cot, has been helpful at least twice, hoping not to need these instructions again though. )
The Gmail Android client helpfully puts the first letter of the name of the person who emailed you in a big block at the left of the mail list (I guess if you have Google Plus friends you probably get a photo instead). But it's pretty easy to change the from name in your email client and trivial to do this programmatically.
Tips... spell your message backwards and use a different subject line for each email so they don't get grouped together.
(Published to the Fediverse as: Immature Gmail Exploit #etc #gmail How to get Gmail to say anything you want in the message list... )
I had a play with the Google Spreadsheets API recently to feed in some data from a C# application. The getting started guide is great and I was authenticated and adding dummy data in no time. But as soon as I started to work with real data I got:
"The remote server returned an error: (400) Bad Request."
And digging deeper into the response:
"We're sorry, a server error occurred. Please wait a bit and try reloading your spreadsheet."
The original sample code still worked so it didn't seem like any sort of temporary glitch as the message suggests. After much hair torn it turns out I was getting this error because I had used the literal column names from my spreadsheet. The API expects them to be lower case with spaces removed. If not columns match you get the unhelpful error above, if at least one column matches you get a successful insert with some missing data.
Error messages are one of the hardest parts of an API to get right. If you're not very detailed then what seems obvious to you can leave your developers stumped.
Hope this helps someone else...
(Published to the Fediverse as: Google Spreadsheets API and Column Names #etc #google #api #spreadsheet A 400 bad request from the Google Spreadsheets API may be caused by incorrect column names. How to fix. )
Gmail is taking the compose window out of the corner of your window.
You know what's healthy? Leaving your house to get a snack.
(Published to the Fediverse as: NatureBox #etc #naturebox Healthy is not getting snacks delivered to your door as a subscription... )
Cory Doctorow wrote an article criticizing SiDiM in Publishers Weekly last week:
"But the fact that the basis behind this security measure was countered 25 years ago by employing a simple tool that’s getting into its 40s is not the silliest part of this supposed new DRM breakthrough."
This misses the point about how DRM really works.
Most people are fundamentally honest but reading a book or watching a TV show or installing one more copy of a software program doesn't feel like you're doing anything wrong. If you throw up a small roadblock then this is generally enough to gently remind people that they need to cough up.
If I can install another copy of Photoshop from the shared drive to get my job done then I will. If it asks for a license I'm going to ask my boss for one rather than hunting down a cracked copy. DRM works even if it doesn't do very much.
In fact it works best when it doesn't do much. A more sophisticated DRM is more likely to go wrong and is harder to operate. Highly effective DRM starts to hurt you with support and maintenance costs. When it fails to work or to be fair it can backfire spectacularly and cause a consumer backlash.
I spent a lot of time earlier in my career developing and selling DRM and copy protection. Deals were won on security but successful relationships were built from helping publishers balance the technical possibilities with ensuring that legitimate customers had a good experience.
"The idea that copyright owners might convince a judge, or, worse, a jury that because they found a copy of an e-book on the Pirate Bay originally sold to me they can then hold me responsible or civilly liable is almost certainly wrong, as a matter of law."
This doesn't sound right either. We've had enough experience of the record labels and movie studios suing individual copyright infringers, most of whom can't afford to risk a court case even if they have a plausible 'left my laptop unlocked' defense. This wasn't a smart move before, but it doesn't mean that book publishers can't deploy the same flawed strategy.
(Published to the Fediverse as: The Economics of Digital Rights Management #etc #drm The utility (or not) of Digital Rights Management has very little to do with the level of security provided. )
The BBC's Fast Track has a good segment on how absolutely miserable British Airways' Avios frequent flyer program is.
I've been using the Facebook Comments Box on this blog since I parted ways with Disqus. One issue with the Facebook system is that you won't get SEO credit for comments displayed in an iframe. They have an API to retrieve comments but the documentation is pretty light and so here are three critical tips to get it working.
The first thing to know is that comments can be nested. Once you've got a list of comments to enumerate through you need to check each comment to see if it has it's own list of comments and so on. This is pretty easy to handle.
The second thing is that the first page of JSON returned from the API is totally different from the other pages. This is crazy and can bite you if you don't test it thoroughly. For https://developers.facebook.com/docs/reference/plugins/comments/ the first page is https://graph.facebook.com/comments/?ids=https://developers.facebook.com/docs/reference/plugins/comments/. The second page is embedded at the bottom of the first page and is currently https://graph.facebook.com/10150360250580608/comments?limit=25&offset=25&__after_id=10150360250580608_28167854 (if that link is broken check the first page for a new one). The path to the comment list is "https://developers.facebook.com/docs/reference/plugins/comments/" -> "comments" -> "data" on the first page and just "data" on the second. So you need to handle both formats as well as the URL being included as the root object on the first page. Don't know why this would be the case, just need to handle it.
Last but not least you want to include the comments in a way that can be indexed by search engines but not visible to regular site visitors. I've found that including the SEO list in the tag does the trick, i.e.
I've included the source code for an ASP.NET user control below - this is the code I'm using on the blog. You can see an example of the output on any page with Facebook comments. The code uses Json.net.
FacebookComments.ascx:
FacebookComments.ascx.cs
(Published to the Fediverse as: How to get SEO credit for Facebook Comments (the missing manual) #etc #facebook #seo #comments Optimize Facebook comments for SEO by using the API to add comment text before loading the comment box via JavaScript (C# implementation but principle will work anywhere). )
Skype just released a completely rewritten version of their Android client.
It's a nice streamlined UI and for the first time on Android it actually loads the 15,422 chats I'm required to participate in work and is usable and responsive. I've used it for a few days and really want to like it.
But.
Even though it's faster and prettier it still destroys battery life. Imo.im ad Plus.im manage to handle multiple networks all day without putting a noticeable dent int the battery. With Skype up and running my phone is dead by the early evening. It's useless.
They also haven't fixed syncing the read state of messages which is the worst deficiency of Skype on both mobile and the desktop. Imo.im did this wonderfully until Skype cut them off at the kneecaps.
Back to Plus.im for now...
There are things I still sort of like about Skype. I use it a lot for video calls (although for work and muti-party video it's pretty much all about Google Hangouts these days). I have a Philips phone that integrates with Skype for international calls (they seem to have discontinued it, and while the calls are cheap the UI is baroque). But the IM is horrible. It can't remember which messages you've seen between devices and so you're constantly trying to figure out what you have and haven't read.
And the IM on the desktop is nothing compared to the horror of the Skype Android app. This slowly spins up and by the time it's loaded previous messages your battery is dead.
Imo.im made Skype IM tolerable on Android and possible on a Chromebook. In the last week it seems that Skype has kneecapped them and blocked their servers from signing in. I'm limping by with IM+ Pro at the moment, but it's slow and buggy and frustrating.
I sympathize with Imo.im. I've been stiffed by Skype before as an officially sanctioned partner so it's no shock that they'd take out this kind of tool.
It would be nice if they could fix mobile and web access to the network first though.
Accessing Printer Press ESC to cancel
International Date Line Longitude, Latitude Coordinates
Animation of US PM2.5 Air Pollution in 2023
Is it safe to open securedoc.html (Cisco Registered Envelope)?
3D Printing a Window Mount for a Google Nest Indoor Wired Gen 2 Camera
3D Printing a discreet wall mount shelf for the Aura Carver Mat
3D Printing a 72-58mm step down Camera Filter Adapter