2015-01-29

Online photo sharing shouldn't be so hard

I'm traveling the world right now, which isn't something i do frequently, and would like photos from my trip. Of course, in this day and age, what photo collection would be complete without an online share.

I had thought it would be easier, given all the easy and free online tools. This is my (ongoing) experience with the tools as I encountered them.

My workflow in this trip is while I'm at the airport, organize the photos from the previous week or so, then post the album online, with some additional commentary, or description.

I am doing this from  a Nexus 5 with Lollipop 5.0.1, and this is my experience with the popular candidates.

First up, Twitter.

I had an unused twitter account, and this was a good opportunity to dig it up. Unfortunately it turns out I'm not a Twitter person. Additionally, the client doesn't have an offline mode, and just tells you your tweets were lost. The nail in the coffin was the limitation of 4 pictures per tweet, which isn't really surprising given the service's microblogging start. I'm not going to share my pictures 4 at a time so it was off to find a worthy substitute.

Next up; Facebook, the 800 lb gorilla of social media.

The android app is limited to 30 pictures per post which is better than 4, but still not good enough. I could split my photos over 2 posts, but that's lame.

Google's attempt, Google plus actually

Next up, their big rival Google plus. This actually worked on the first leg. I managed to make a post, attach as many pictures as I wanted, do a write up, and caption my photos.

Great. This will work just fine. :)

...of course not. If it was, if have no reason to write this post and merely declare Google plus to be the true social network and cut all ties with Facebook.

It didn't have quite the right privacy options I was used to from google docs and the whole "circles" thing is a great idea, but it suffers from the over-under motivation* problem.

Okay, brass tacks. The reason I gave up on Google plus is because the Android app ate my post multiple times, and I burned myself out on it from trying to organize the photos from the second leg of my trip.

It also crashed when trying to set my location. Kinda annoying when you're trying to brag about being 10,000 miles away from home.

Moving on... Instagram. It's not designed for this use case, preferring instead to focus on single pictures, and is unsuitable if I'm trying to post 40 pictures at once.

Next up, Flickr. Yahoo's got a new CEO, and one of the things she did was to have them build a mobile app for Flickr. This should be good.

Open up the app, go through the account setup rigmarole, which is extra annoying due to Yahoo!-ing, and... where are my pictures? Oh, I need to sync them first. No problem, there's WiFi at the airport. Go into settings, click a few buttons, aaaaaand... hm.

Nope, not uploading. New pictures show up, but existing ones aren't. Go check settings again... nope, nothing relevant.

Well, that's a bust before it even started. Sorry, I tried.

Well, keep going. I have the Imgur app installed for cat pics, but there's an account feature and albums are a useful feature they have.

Let's give that a shot. The app is a bit rough around the edges, but I can look past that. Or at least thought I could until I made my selection, hit OK, let it start syncing my photos, and then the act of my poking around the app while it's background syncing causes it to lose the background sync job. Oof. I was hoping the poor presentation was just the ui layer but I guess their apps back end could USD a bit of work too.

It's around here that I start considering writing my own app. Well, what's the annoying part? Getting the photos off my phone and into the internet.

I take a brief detour to nerd out for a second, and break out droidscp. It would have worked too if it weren't for the fact that droid scp is shareware, and it's not really designed for this purpose, so it would work, but is quite cumbersome for this purpose.

Alright, new plan. We figure out a good way to get the pictures off my phone. Dropbox!

Install the app, make an account, click around in settings, and... it's syncing!

I can even make an album! Hell, I can create an album, add a single picture, go back and add more pictures later!

I'm back in the air, so we'll have to see how it goes in the next episode.

--

*the Over-under motivation problem is what happens when you get a chance to start New! And Fresh! You go wild, setting up everything perfectly; Proper Organization! Categories! Motivated!

Of course you lose that motivated version of yourself, and three weeks later you don't care, the organizing is a chore and you hate it, and hate what it reminds you of - everything you've ever failed at. Okay, maybe not quite that dramatic, but you get what I'm saying.

2012-02-28

annoying google

At some point, google search results stopped linking directly to the destination, instead, they changed to point at http://www.google.com/url?BIGUGLYMESS, which I normally don't mind, but when the url links to some resource you want the URL for that your webbrowser downloads, it's quite annoying.

~/$ python
Python 2.7.2+ (default, Oct  4 2011, 20:06:09) 
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib
>>> urllib.unquote('https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCcQFjAA&url=https%3A%2F%2Fep2012.europython.eu%2Fmedia%2Fconference%2Fslides%2F5-years-of-bad-ideas.pdf&ei=gF5NT5j0DbCasgLp94Qh&usg=AFQjCNG38H3baMjpc9vw68G_mP8JpBAVSA&cad=rja')
'https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCcQFjAA&url=https://ep2012.europython.eu/media/conference/slides/5-years-of-bad-ideas.pdf&ei=gF5NT5j0DbCasgLp94Qh&usg=AFQjCNG38H3baMjpc9vw68G_mP8JpBAVSA&cad=rja'
>>> 

Bleh.

unholy python

import dis, sys

def return_value_used():
    frame = sys._getframe(2)
    code = frame.f_code.co_code[frame.f_lasti:]
    try:
        has_arg = ord(code[0]) >= dis.HAVE_ARGUMENT
        next_code = code[3 if has_arg else 1]
    except IndexError:
        return True
    return ord(next_code) != dis.opmap['POP_TOP']

def foo():
    if return_value_used():
        return 42
    print 'doom'

foo()
print foo()
--
This outputs:
doom
42

Well that's... unholy.

(I'm also quite late to this party; Youtube video of the talk or the pdf)

2011-11-24

fixed bug in buildbot 0.8.5

So I setup a buildbot system at work, and I was upgrading it today. I'm also using git (like all the cool kids)(and a version > 1.7.7) for source control. I ran into this bug today with a new buildslave I was setting up.

Now, looking over the change history:

Changed 7 weeks ago by dustin

    Status changed from new to closed
    Resolution set to fixed

Fix is merged - thanks for spotting that!

Oh good, they merged a fix, which means I can fix it on my system!

...except any of those details were not logged or are obscured.

bleh.

Anyway, after some digging I found the patch that fixes it in case anyone else needs a fix before the next version of buildbot is released.

2011-07-14

ps3 mkv to mp4

Stick this in ~/.mplayer/mencoder.conf

[PS3_MKV]
oac=lavc=yes
lavcopts=vglobal=1:acodec=aac
af=volume=10
ovc=copy=yes
of=lavf=yes
lavfopts=format=mp4
forcedsubsonly=yes


Then do:
mencoder -profile PS3_MKV input.mkv -o output.mp4

Transcodes the audio, but that's very quick. Could not find a way to copy audio that worked. Tried the fafmttag values in my copy of codecs.conf:
format 0xff
format 0x706D
format 0x4143 ; aac in asf
format 0xA106 ; aac in avi
format 0xAAC0

-s

2011-06-13

xmodmap stopped working

in autorun.sh, do:
set xkbmap -option ctrl:nocaps

to make capslock into a ctrl key

2010-10-11

Samsung Transform

I have joined the future with a Samsung Transform.

Detail of note: the rageagainstthecage root exploit works.

2010-09-19

Downloading Real Audio

I recently needed to download a Real Media podcast. Here's what was needed:

wget the ram file
Inside the ram is an rtsp URL
Using openRTSP from the debian package livemedia-utils:
openRTSP -S 0 rtsp://...
Somewhere in the output file from that, is an audio tag, referring to another rtsp file.
Run mplayer against that...
mplayer -dumpstream rtsp://....

and you have an actual real media file that vlc will play. Unfortunately, mplayer doesn't (seem) to want to run faster than realtime against an rtsp url.

2010-06-16

mozless and ff 3.6

I finally got tired of mozless not working on my Ubuntu 10.04 system.

Brief instructions and how I fixed it:

Download the xpi, unzip and create a file called chrome.manifest in the root of the extension. Fill it with the following:

content mozless chrome/content/
skin mozless classic/1.0 chrome/skin/
locale mozless en-US chrome/locale/en-US/


overlay chrome://browser/content/browser.xul chrome://mozless/content/mozless.xul
overlay chrome://browser/content/navigator.xul chrome://mozless/content/mozless-mozilla.xul

overlay chrome://mozless/content/mozless.js

----

Then in the chrome directory, unzip the mozless.jar file and delete the file itself.

zip up the directory and install your 'new' extension, and delight at 'j' and 'k'.

2010-04-18

udev -> xorg.conf.d snippet

More changes.
To support the Trackpoint keyboard with the newer xorg (1:7.5+5) in Debian, the solution is to create a file named /etc/X11/xorg.conf.d/20-thinkpad.conf with the follwing contents:

Section "InputClass"
Identifier "Trackpoint Wheel Emulation"
MatchProduct "TrackPoint"
MatchDevicePath "/dev/input/event*"
Driver "evdev"
Option "EmulateWheel" "true"
Option "EmulateWheelButton" "2"
Option "Emulate3Buttons" "false"
Option "XAxisMapping" "6 7"
#Option "YAxisMapping" "4 5"
EndSection

For Ubuntu, try putting the file into /usr/lib/X11/xorg.conf.d/ instead if the putting it into the /etc/X11/Xorg.conf.d/ directory does not work.

If having that file causes other input devices to die, also add /etc/X11/xorg.conf.d/99-allinput.conf with the following:
Section "InputClass"
Identifier "allinput"
Driver "evdev"
EndSection

(A 3rd conf file for synaptics configuration is left as an exercise for the reader.)

2010-02-08

Fixing the Patent System

In US copyright system there is the notion of mechanical royalties where I can use any songwriter's work without a negotiated license. I record my usage, and there is a rate (cents/minute). Now, I am free to negotiate a different rate with the songwriter if so desired, but there is a compulsory aspect where permission from the original author is not required.

How about applying this to the patent system? Like in the copyright system, a collection of patent judges could determine the relative worth of a patent, examining not just the patent itself, but various aspects surrounding it, such as barrier to entry for the market, (non) obviousness, complexity, and usage. A patent on a large-scale industrial manufacturing process would cost much more than a simplistic patent on a method of how to use child's swing. The patent can then be licensed by anybody on a per-unit basis for this rate, but alternate rates can be negotiated, possibly in a lump-sum instead of a per-unit basis.

The largest effect this would have is turn patents from a (per-claim) all-or-nothing game, into a game of degree. It is already up to patent examiners to look at the sheer validity of patents, giving them an additional level of control does not sound infeasible to me. This also wouldn't be cost-prohibitive like requiring a function prototype.

2010-02-04

hal -> udev upgrade

I'm running Debian, which recently deprecated HAL for input stuff, so my old fdi file to enable middle button drag scrolling on my lenovo trackpoint usb keyboard was not working.

The fix is to create a file in /etc/udev/rules.d/99-trackpoint that has:

ACTION=="add", \
ATTRS{idVendor}=="17ef", ATTRS{idProduct}=="6009", \
ENV{x11_options.EmulateWheel}="1", \
ENV{x11_options.EmulateWheelButton}="2", \
ENV{x11_options.XAxisMapping}="6 7", \
ENV{x11_options.Emulate3Buttons}="0"

2009-12-11

MIMO UM-710

Notes on this usb bus-powered 7-in LCD.

Ubuntu 9.10 has built in drivers for it (udlfb.ko) and creates a /dev/fb0 device node.
(Drive is in drivers/staging/udlfb/

To draw to the screen:
sudo apt-get install libdirectfb-bin # needed for mkdfiff utility

mkdfiff -f RGB16 <(convert -resize 800x480! novembersnow1920.jpg png:fd:1 ) | dd of=/dev/fb0 bs=1 skip=24

There is a flickering issue under linux that supposedly doesn't happen under windows that I have not investigated.

(There's an X driver for it for usage as an actual monitor but raw framebuffer access is easier at this point.)

2008-08-28

Why has opinion turned on Apple?

(in response to /. comment.)

In the past long while, Apple has becoming a media darling, while simultaneously an counter-culture of dislike has sprung up. If I were to wax philosophical about the topic, I guess it has to do with some pseudo-shared Utopian ideals of society that Apple fought for in 1984. Apple since then has become another bit player on the corporate stage. They sell DRM'd music, as if bits weren't copyable; 'rentable' video, as if bits rot, and they skip merrily along as if this were just fine. Sure, their DRM isn't onerous, but the fact that it exists is an affront to this mythical Utopian future. As a pragmatist, I accept that the providers of media need reassurance that their world hasn't fallen into P2P digital anarchy, even though is already has.

High minded ideals die hard. They may have a bigger walled garden, but they've walled it off all the same, and for our own protection, of course. Bluetooth profiles on the iPhone are limited to the headset, and GPS is inaccessible on a basic level within the sponsored SDK sandbox. Jailbreakers have no such limits. They trot out boogiemen like viruses and battery life and say you can only sell through their store, after they take their cut, or course. Better end user experience be damned, why do I have to sell my AwesomeWidget through your store? And only after I get 'approval' from brother Jobs to do so?

Apple made a promise that things were 3-step easy, with 'thats it, there is no step three' as the third step. Everybody knows somebody who's been tried to sync their iPod with a new computer and despite warnings that it would, had iTunes delete all their songs with varying reactions.

They broke that promise if you want do anything 'unsupported'. I want to share my wired desktop's internet with my laptop via 802.11 but I want something something stronger than WEP. Thats... not gonna to work. HostAP from *nix land may be able to do it, but I'm sure that's not 3-step easy. Problems with their cifs client aside, I'm not bitter.

Sensible? Maybe not.

2008-08-14

gen_bridge_metadata

On OS-X to get ruby/python bindings for frameworks, there is a program called 'gen_bridge_metadata' that ships with Leopard. Unfortunately, it is broken. It complains of an undefined local variable or method:

Exception `NameError' at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rexml/document.rb:187 - undefined local variable or method `trans' for ... :REXML::Document

The fix is to edit the document.rb, located at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rexml/document.rb, directly. Here's a patch that should should be applicable for anyone that comes across it.

--- a/document.rb 2008-08-14 16:45:08.000000000 -0400
+++ b/document.rb 2008-08-14 16:45:11.000000000 -0400
@@ -184,7 +184,7 @@
output = Output.new( output, xml_decl.encoding )
end
formatter = if indent > -1
- if trans
+ if transitive
REXML::Formatters::Transitive.new( indent, ie_hack )
else
REXML::Formatters::Pretty.new( indent, ie_hack )

2008-02-26

froogle

Who uses froogle?

Yes, it's a convenient interface to stores that use google checkout, but that is about it. By the time I hit Froogle, I'm probably pretty sure what I am looking for. An Nokia N95, an 8G iPhone, a V3 RAZR; a specific thing. And there's a reason for that. If search for cell phone on froogle, and what do I get? Cellphones, to be sure, but the 3rd hit is a listing priced at $8,000, for 50 cell phones.

Wheres my ease-of-use, my "I'm feeling lucky" option? Sure, "I'm feeling lucky" isn't as useful now, but where's the daring value-add to online search-and-buy, that hubris to say "Buy the first result". I don't know what it's doing, and that's certainly not what I am asking for. The smallest concession to that is "Sort by: Relevance", and thats only because sort by cheapest invariably gives you all the cheapest accessories. 20 pages into a froogle search for "printer", sorted by cheapest, and it is still at $1.18 for printer paper and dividers. An arguably better search for "hp 2605dn" (a specific printer) when sorted by cheapest, still gives me pages of $1.50 cables and etc.

Wheres the magic product finder that helps me figure it out? Froogle seems like a normal google search, with a picture of the item, and a smaller database of things to return. I want to compare all the possible hits, build a grid listing features, and then be able to sort. I want to search for "laptop" and then be given a list of possible options. I want to be asked what monitor size, operating system, ram, etc. For the hardware hacking version, try taking a look at Digikey's search. They have a fixed dataset to work with, so their search is just implementation. Search for 'post', they then offer a variety of ways to further filter your search if you got too many results.

Why can't Google do that for /everything/? Yes, it isn't an easy problem, but that's what Google's first product was. Smarter search.

I'm absolutely not saying Google should start doing user product reviews. That is certainly not a direction everyone could agree on, but Froogle could certainly find out features listed for anything sold on Froogle. There are some devilish details to be worked out; how to sort out "PC Webcam" as being different products; how to differentiate 4G iPod and 4G iPod as being fourth generation or four gigabyte capacity. But I bet it could be done. Because even though I've stopped using C|Net, laptops.cnet.com is still a very nice place to find out what ultraportable laptops with 11" screens and 4 gigs of RAM are out there. What are my choices if those are the important qualities? Are there even any out there?

I can't be the only person out there who wants that kind of searchability on my next shoe purchase, or my next TV purchase. And Google, and more pointedly, Google checkout should be there to help me make my purchasing decision. If I'm already there, and now I've decided to buy it, I'm going to want a way to actually buy it. And that's Google's two-percent and twenty-cents.

2008-02-03

Recompile ubuntu vmhgfs for -generic instead of -virtual

Ubuntu jeos has not enough kernel, and for some reason, the version of the module struct between 2.6.24-5-generic and 2.6.24-5-virtual disagrees. First solution I managed to do was:

mkdir generic; cd !$
apt-get source linux-image-2.6.24-5-generic

cd -; mkdir virtual; cd !$
apt-get source linux-ubuntu-modules-2.6.24-5-virtual

cd virtual/linux-ubuntu-modules-2.6.24-2.6.24/ubuntu/vmhgfs

make TOPDIR=../../../../generic/linux-2.6.24/ SRCROOT=.

This should produce ../vmhgfs.o , which loads just fine into booted 2.6.24-5-generic.

2008-01-30

linux-2.6 typo commit

I came across this while poking around changesets:


commit 3f6dee9b2a22cc66050682287a77d5fccadb9733

Fix some typos in Documentation/: 'A'

This patch fixes typos in various Documentation txts.
This patch addresses some words starting with the letter 'A'.



Trimmed changeset inside.



-parameter. The default adrress range will not be used when a smb_addr
+parameter. The default address range will not be used when a smb_addr
- A useful ammount of documentation can be found in the hardware
+ A useful amount of documentation can be found in the hardware
- The archicture has been designed to support as many machines as can
+ The architecture has been designed to support as many machines as can
-It does not cover the support needed from aplications to enable the BIOS to
+It does not cover the support needed from applications to enable the BIOS to
- implements bus probing (detecting EISA cards avaible on the bus),
+ implements bus probing (detecting EISA cards available on the bus),
- - try to implement accel on voodoo2 , this board can actualy do a
+ - try to implement accel on voodoo2, this board can actually do a
-the subsystem to provide feedback as to whether the attibutes are
+the subsystem to provide feedback as to whether the attributes are
- highmem can be used for, but it is also availble for the
+ highmem can be used for, but it is also available for the
-is exited. This is acomplished with the help of the lower-privilege
+is exited. This is accomplished with the help of the lower-privilege
-ariety of new computer products. Product variations in a number of
+variety of new computer products. Product variations in a number of
- Forces specified clocksource (if avaliable) to be used
+ Forces specified clocksource (if available) to be used
- clocksource is not avalible, it defaults to PIT.
+ clocksource is not available, it defaults to PIT.
- The assumed authorititive key is inherited across fork and exec.
+ The assumed authoritative key is inherited across fork and exec.
-with approriate commit interval options. When this option is set to 0, this
+with appropriate commit interval options. When this option is set to 0, this
-6) Future Domain MCS-600/700, OEM'd IBM Fast SCSI Aapter/A and
+6) Future Domain MCS-600/700, OEM'd IBM Fast SCSI Adapter/A and
- The size should be atleast PAGE_SIZE (4k) and should be a power
+ The size should be at least PAGE_SIZE (4k) and should be a power
-cachelets for normal memory accesss. The semantics of the Alpha removes the
+cachelets for normal memory accesses. The semantics of the Alpha removes the
- keyboard activitiy.
+ keyboard activity.
- You may also provide a timer latency value while disabling adpative-rx:
+ You may also provide a timer latency value while disabling adaptive-rx:
-You can install this driver without any addtional parameter. However, if you
+You can install this driver without any additional parameter. However, if you
- Your IP Adress
+ Your IP Address
- - Gap, chosen so that packet data (Start+tp_net) alignes to
+ - Gap, chosen so that packet data (Start+tp_net) aligns to
-pktgen creates a thread on each CPU where each thread has affinty it's CPU.
+pktgen creates a thread on each CPU where each thread has affinity to its CPU.
-Most important the devices assigend to thread. Note! A device can only belong
+Most important the devices assigned to thread. Note! A device can only belong
-( there is a gap on z/Architecure too currently between 0xc00 & 1000 which linux uses ).
+( there is a gap on z/Architecture too currently between 0xc00 & 1000 which linux uses ).
-9) type it in again or alernatively cut & paste it on the console adding the -g option.
+9) type it in again or alternatively cut & paste it on the console adding the -g option.
-accumalate the status in a struct irb and then call the device interrupt handler.
+accumulate the status in a struct irb and then call the device interrupt handler.
-bus/iucv/drivers/netiucv. Piping to this attibute creates a new netiucv
+bus/iucv/drivers/netiucv. Piping to this attribute creates a new netiucv
-distribution. The following URL provides informations on latest avalaible
+distribution. The following URL provides information on latest available
-Driver achive for old drivers:
+Driver archive for old drivers:
-as the ncr53c8xx is perfectly supporting these adpaters since some time.
+as the ncr53c8xx is perfectly supporting these adapters since some time.

2008-01-22

tinyurl

Whats the limit on those things? Can I UUEncode data as a rediculously long url, and use tinyurl or a similar service to shorten it?

2007-11-01

Open social

The Intertubes is abuzz with news of Google's impending announcement of their opensocial api to link (most) social networking schemes together. So that you can write applications like for facebook, but for all of them. Screw applications, This is the single sign-on ID that everyone's been clamoring for. Of course the devils' in the details, so I'll have to see what those APIs can actually do, but at some level, they must need to authenticate a user, most likely with that user's own password.

Some glue code, and we've got single sign on for the internet. And it's linked to (supposedly) real people, (ignoring MySpace) so blog spam should now be (more) fight-able. Only registered users can comment, but the rub is registered w/ one of the supported services. Which between Myspace, linkedin and the other big names, most people should have an account.

http://code.google.com/apis/opensocial

(Off to look at the facebook api)