For this semester, I have:
- Programming Paradigms
- Advanced Data Modeling
- Parallel and Distributed Systems Architecture
- Modeling Concurrent Processing
- Scientific Methodology of Computer Science
Before I left for Romania, I spent a bit over a week at my mom and dad’s house. As with any trip back home, it’s always a good time to look at the current state of my parent’s tech and complete any tweaks, maintenance and upgrades. Of course, much of this my mom can handle as she’s really quite handy with tech herself, but she’s always glad for the help.
During this trip, we replaced much of her existing tech, including a roll-your-own file server we’d created using an HP mini server and Ubuntu server. It worked well, but at a certain point, using the console for maintenance became a bit too much for my mom to want to manage. (Fair enough) We ended up replacing it with the same server I have, the Synology DS416play.
We also took the time to upgrade her wifi and router. About 4 years ago we moved her to a Cisco small business router and wireless access point. It’s proved to be rock solid reliable and capable. But it’s still 802.11g, so it limited her speed and reach a bit.
I’d been looking at the Google Wifi system for a while and thought that now was a good time to get her into a mesh system. I believe it was even on sale at the time. Given the size of her house, we thought that she needed more than one, so we picked up a three pack and set two of them up. I then brought one of them with me here to Romania with the idea of using it as my access point.
Now that I have set up two of the Google Wifi systems, I have some thoughts. There are a number of comprehensive reviews of the new Google Wifi system out there, so I’m not going to try and write a full on review, but instead I want to call out a few good and a few slightly annoying points that I would have liked to know before going in.
Note: these thoughts are based on v 9460.40.8 firmware on the access point and software version jetstream-BV10119_RC0003 for Android and 2.4.6 for iOS. I bring this up as things could change over time.
Target Audience
One key thing to note about the system is that it’s definitely aimed at the more non-technical audience. While it does have some more technical bits, some of the normal configuration options other routers offer are absent. A few key ones are:
Now, to be fair, much of this really isn’t necessary for your average consumer, but for the more nerdy of us, these could be deal breakers.
Here is a high level list of the things I liked about the system.
Speed
Like any mesh system, Google Wifi is not just an access point, but it’s also a mesh network system. For my mom, that meant that her two access points would cover the whole house and key parts of her back yard. Technically, we could extend it further, but those are the places she uses them. With just one, I don’t know (yet) if it’ll be enough to cover my needs, but it should be a good starting point. And because it’s a system, I can always buy more later if I want.
After we moved from the Cisco to the Google router, the throughput ramped up from 20mbps to maxing out her 60mbps cable modem. Here in Romania via a double NAT setup, with who knows what else going on at the time.
The App
The app you use to configure the system is fairly easy to use. On initial setup, it appears to connect via Bluetooth and complete the initial connection. From there, it walks you through setting up your Internet connection and wifi password.
It also allows you to share the management of the system with other Google account holders. Now, you do have to have a Google account to make this work and that could be a deal breaker for some. In my case, I have the ability to manage my mom’s system remotely. This can be useful if something pops up that is beyond her ability to fix or even if she just needs a second set of eyes. It also means that you can extend the access to other family members to they can pause the network for certain devices.
One of my favorite features of the app is the devices list. From the middle tab you can see a quick overview of the network, your access points and a count of all the devices connected to your network currently.
If you select the devices node, you can see the list of all devices currently connected, including their current bandwidth usage. It even tried to identify the device and what type of device it is (iPhone, Kindle Fire).
This can be quite useful for sure. I had an issue a few years ago where my network ended up really slow and I couldn’t figure out why. I tracked it back to my wifi network, but couldn’t determine what was happening beyond that. I had two access points and I’d cut one off and the traffic moved to the other one and then back. Ended up being my Nexus phone uploading pictures (Dropbox, OneDrive and Google Photos) simultaneously. With this, I could have simply accessed the app and visually viewed what device was hogging my bandwidth.
A few other neat items include:
There are a few things that drive me a bit nuts, though. Here are the highlights:
I’m not certain any of these are deal breakers for me. I may end up changing my mind later, but right now it appears solid.
At the end of the day, I trend to judge technology based on results. If it solves a problem and works reliably then it gets my approval.
The Google Wifi system seems to do just that. It was definitely an upgrade for my mom, allowing her much better access to the Internet and her local file server. For me, it’s worked great as a secondary router here in Romania. My father-in-law’s router seems decent but there’s a problem with the wifi stack. Every time we’ve been here, we end up taking it down every 24 hours or so. I don’t know if it has a memory leak or what, but every day or so the network just drops.
Plugging in the Google system via the wired port and connecting all my devices to it seems to have solved the issue. Almost a week in and we’ve had no failures since.
Otherwise, it’s a nice looking and reliable router. I think I could recommend it to most people, but for true techies, I might be inclined to look elsewhere.
I know I’ve been chatting with a few of you, but I thought I’d go ahead and update everyone on what’s going on with me. Last I wrote, I was still waiting to hear back from UBB about my PhD application. Since then, the response has come back and I was rejected because I don’t yet have a masters. That’s a bit annoying because I did bring this up early in the process and tried to get an answer, but oh well. With that specific response in hand, we have now applied for a masters and are waiting to hear back about that.
In the meantime, we are now here in Romania and trying to get settled into our new life. I think it’ll be a bit before we can completely relax as I still have some paperwork to get through, but at least we are here and can start moving forward again.
In 2005, Hurricane Katrina hit the Gulf Coast and destroyed a large swath of New Orleans and other cities in its path. I remember listening to people talk about the destruction and what they lost. One common item people lamented that was lost was often not things, but pictures and memories. Unfortunately, time (and water) are not kind to pictures.
It was this experience that compelled me to purchase a good quality slide scanner. After a bit of research, I ended up with a Nikon CoolScan ED. While it was the cheapest Nikon slide scanner available, it still can make incredible scans of slides and negatives.
Oh, and as a bonus, my mom and dad had kept the negatives from all our pictures from when we were kids. That ended up being number of rolls of film. I spent about a year, working a bit at a time, scanning all the negatives. (Yet another reason to love working from home …) As a result, I now have almost 250 Gb of pictures in TIFF format. That ended up being about 60 DVDs of images.
With our impending move (and the reduction in cost of both cloud storage and HDDs), it’s time to move them on to spinning media and into the cloud. I’ve now spent the past three or four days here in Richmond copying all the files off onto an external HDD, unzipping, sorting and fixing.
I’ve been rather surprised that in all my DVDs, I’ve only hit three that have had issues. One was my fault as it was sticking up out of the sleeve and ended up bleached in the sun. Whoops. The other failures were do to scratches and the like. None appear to have failed due to a failure of the actual DVD (yet).
As a reminder, in addition to having the files you need to make sure you have good backups. When in doubt, remember 3-2-1:
I now have the Synology back up and running, at least up to a point. It appears I was able to fully back up my data, replace the disks and rebuild the volume. I’m now in the process of trying to restore the data and reconnect it to OneDrive, Dropbox and other online services.
One nice side effect of this is I’m able to perform the basic reorganization I should have done a while back. At least now I can move the folders and make really, truly take one copy of everything with me instead of multiples.
That being said, I do have one more rebuild to go. I had four disks in there and one was new. I thought I’d left that as disk #1, but apparently I was wrong. I think it was actually disk #4 which ended up failing and causing the whole meltdown to begin with. So, I now need to perform the replacement one last time. I’m just waiting for the full disk scan and parity check to complete, then I shutdown, replace the drive and rebuild.
Here’s one for you. I bought (and still really like) the Synology NAS earlier this year. It’s proven to be faster and more flexible than the server it replaced. Granted the Hyper-V server could run any workload I wanted, however I ended up using it only for file and iTunes/music sharing so that was going to waste.
I had four Western Digital Red 3TB drives in it. The WD Reds are quite likely my current favorite drives for this purpose. They are 5400 RPM, quiet, cool and fast enough. I do recommend them. My only real gripe is they have a three year warranty instead of a five, but that’s what it is. More expensive WD drives have longer MTBF/warranty times, so you have options.
That being said, three of my drives are at the end of their lifespan. In fact, one was giving me bad sectors so I decided it was time to replace it, followed by the rest over the next few weeks. With that in mind, I ordered two new drives, used one to back up the data I cared about and set about replacing the failing drive two.
Within 5 minutes of replacing that drive and starting the rebuild process, I received a number of emails about failures and ultimately a crashed array because drive FOUR had started generating bad sectors.
Ugh.
Next time I have the NAS perform RAID maintenance to catch this. I’m fairly confident that had I done that it would have fixed the issues and moved on, but now I have a permanently degraded array and a fairly big issue. I’m not in the process of copying EVERYTHING off the NAS and onto a collection of spare drives (three 2tb Reds and a couple other 1tb SSD/HDDs).
At least the array stayed live, albeit read-only, so I could get this done. It’s more annoying than fatal at this point, but I must admit I’m a bit annoyed the ongoing self-checks didn’t catch the issue. I also suspect that somewhere there was a note to perform basic maintenance on the array before pulling a drive ….
Ce’st la vie …
I’ve put together a list of items I hope to accomplish before we leave for Romania. As a music guy, of course that includes a list of bands and concerts I’d love to see before I go. I just received a notification that one of the bands, OK Go, is coming to Baltimore in June!
In case you who don’t know, OK Go is an incredible band that rose to fame through their now infamous dancing treadmill video for Here We Go Again. I found them through other means when they chose to go their own way and publish music as an independent artist instead of through a major label. I’ve since grown to love their music and appreciate their artistry. Below is their most recent video. It’s worth checking out and I’d also recommend watching the making of videos.
For reference, here’s the list of shows I’m hoping to see before I leave:
For those interested, I have a history with Darlingside and Jamie Kent (albeit a bit loose … cue Weird Al Yankovic’s Lame Claim to Fame) in that they toured together back in 2012. One stop they made was Ebenezers Coffeehouse here in DC. I was front of house for that show, so now I can be “that guy” who hollers “I knew them when …”.
On another subject, we do get to go see Empire of the Sun at Echostage as well and that should be a fun show too. I also got to see Save Ferris a month or so ago at the Black Cat.
I’m about two weeks into having the NAS and so far so good. I’ve spent much of the last two weeks sorting out all my pictures (see my other blog posts about that process) in preparation for the big move. I’d spent so much time at one point or another making duplicates or moving files around that I had at least two copies of almost every picture I’d ever taken. Needless to say, that wasn’t really sustainable long term. It also meant that my file server had more than its fair share of extra files on it. Now I’m at the point where I have, basically, one good copy of all my pictures. Oh, and I’ve held onto the iPhoto libraries from all the way back too, just in case.
This means that I was able to move some of my three terabyte Western Digital Red drives into the NAS. Of course, in true moving-a-bit-too-fast-for-my-own-good style, I grabbed the wrong drives out of the server only to have it boot up and tell me that it had no working arrays … whoops. Fortunately for me, the Synology’s Diskstation Manager (DSM) didn’t immediately grab the drives and try to reformat them. As such, I just stuck the correct drives back into the old server, grabbed the right drives, booted the system and all was well.
With the additional drives in the new NAS, it was time to add them to the array. Right now (24 hours later), it’s at 25% expansion of the array. It’s definitely taking longer than I would have expected to complete the expansion, but I’m hoping that’s a one-time deal. It is something to be aware of, though, if you plan on expanding an array in a hurry.
A few other notes:
After 10 years (or so) of using a PC as a file server, I finally decided enough is enough. The size, noise and upkeep of my old PC was just a bit too much for me to want to deal with any longer. Not that there’s an issue with using a PC as a file server, but it just seems, now, a bit overkill.
My original goal when I build the PC server was to use virtualization in order to run various servers and experiment with various technologies. While that worked for a time, the amount of memory I needed ended up growing beyond what I have and the price to upgrade became too much for what is basically an eight-year-old machine.
The size also became a bit too much to handle. When I built the machine originally, I bought a huge full tower case. I assumed that I would ultimately need multiple HDDs and a big power supply. Had I stuck with the virtualization, then this may have made more sense. Now, it’s just a noisy boat anchor that serves (pun intended) as a file and iTunes server.
One other reason to move away starts with the advent of streaming music services (Google Play, which I use). I now rely much less on the iTunes sharing than ever before. My kids have a bedtime play list they use every night to go to sleep, but other than that (and the occasional Sonos use), I don’t rely on it as heavily as before.
With this in mind, I started looking at stand alone Network Attached Storage devices. I like the idea of a bespoke device to manage this setup. I also like the size of the device as opposed to beastie I have now. The new devices also appear to offer more functionality and can, basically, replace a lot of the things I needed a stand alone PC for before.
If you’re curious, I ended up with a Synolog DS416play. It was slightly more expensive than I was planning on, but it does offer better media capabilities, including hardware-based media transcoding. This was something I’d tried on the old system and it just couldn’t keep up. I’m hoping to dump much of my media on there and share them out to my Chromecast and Roku devices.
As I spend more time with it, I’ll post more.
Earlier this year, I finally broke down and purchased a Samsung SmartThings home automation hub. I had wanted to get one for about two years after hearing about them advertised on the TWiT network. I did wait a bit until I had a bit of spare cash and for the SmartThings 2.0 hub to come out. The big draw for the 2.0 was some limited local network-only remote control.
Anyway, it started with just a Z-wave front door lock and has begun to spread. I now have several receptacle and smart appliance switches, garage door opener, door sensor and a number of Aeotec water sensors.
In fact, those just saved me today when we had a small water problem in the basement. Somehow the hot water was left on and that caused a poorly installed trap to slip just enough to let water start leaking onto the floor.
When I bought the sensors originally, that was the very first place I intended to put one because this has happened to me before. The sink is a pedestal sink which makes it hard to get access to the trap in case of a leak. Well, when it happened before it took me a while to catch it and I’ve been a bit paranoid about it happening again since.
Well, this time the sensor saved me. The app first indicated a water problem in the basement at 1:34pm. By 1:45ish, I’d fixed the problem and cleaned up the mess.
Oh and thanks for the assist goes to Pushbullet. I’ve been using it for a number of years to handle notification mirroring from my Android phones to Chrome on my PCs. In this case, the notification popped up on my laptop while I was doing something else, so I was able to immediately react. For lack of that, I may not have caught it until a bit later. Come to think of it, I may want to update the action on the water problems to include an email …
After about three weeks of work, I believe I’ve identified almost 167,000 unique pictures (give or take a thousand or so) and over 250k duplicates. Right now, OneDrive is struggling to determine what of the myriad of changes I’ve made are valid and trying to sync that up to the cloud. I sort of expect that to take quite some time.
I still haven’t resorted them based on the Year/Month/Day/Model mode I mentioned earlier, but I do plan on doing that eventually. First I need to let this sync happen and then I plan on identifying which cameras belong to us, family and friends so I can separate ours/theirs/etc. Once that’s done, then I’m going to slowly perform the final reorgs of Mobile/Regular and apply the new sort.
I’m also considering whether I should separate out all the videos or not. Part of me says yes, part of me says no. Having the videos separate might make it easier to prepare videos and other multimedia things in the future, but there’s also something nice about having the pictures/videos intermingled and can lead to some neat discoveries.
I’ll post more as I go.
Since my last post, I’ve continued running the script to process my images and am getting close to being done. Given that, there are a few things I would like to have done differently:
Overall, the process has been a bit of a pain in the back side and definitely slow, but I’m almost to the point where I have one canonical copy of all my pictures. (Well, actually two because I’m working off my local OneDrive mirror).
My wife and I are (or at least were) shutter bugs of a sort. At this moment, I have just a bit shy of 1.5 terabytes of photos that she and I have take over the years. I’ve also managed to make a hash of them with copies, duplicates and the occasional “I think I have this somewhere, but I can’t say for certain” directory.
I’ve been looking for the past year or two for a solution and still haven’t really found one I liked, so like a good nerd, I’ve rolled my own. It’s cobbled together using BASH, ImageMagick, dcraw and MediaInfo.
My primary goal was to make sure that I had one copy of every file, not necessarily one high quality version of each picture or video. Meaning, that if I end up with duplicated of a picture in RAW, high res JPEG and a JPEG thumb, I’m ok with that. Once I have the initial culling of the photos, then I make take another swipe at further deduping it.
Anyway, my script starts by recursively looping through the current path and all subdirectories. If it encounters a file, it will retrieve the extension and then conditionally call some combination of the above utilities to retrieve the creation/capture/modified timestamp and the camera make/model. It does this fairly well, but there are some major caveats which I’ll discuss in a bit.
Once it has retrieved the above, it starts creating the following folder structure:
/<camera>/<year>/<month>/<day>
It then takes the file and tries to copy it into the following:
/<<camera>/<year>/<month>/<day>/<year><month><day><hour><minute><second>.<#>.<ext>
This should, in theory, allow me to identify a specific picture taken by a specific type of camera at a specific moment in time. The initial issue I ran into with this is around time resolution. The timestamps given to me by the various tools only resolve to the second (not millisecond like I’d prefer). This means that if you have a camera that can take multiple pictures per second, then you can easily end up with duplicates, hence the <#> at the end.
If I encounter a file that is the same timestamp, I then do a MD5 sum on both files to confirm they are actually the same time. If they are, then off to a duplicates tree the file goes. If they aren’t the same, then I start an auto increment pass until I can write the file out uniquely in the target folder.
One issue, though, is that if the 0 file doesn’t match, I don’t check for subsequent matches, so the script could easily end up with files 1 2 3 and 4 all being duplicates. Maybe I’ll try and fix that in a future edit.
As for the tooling, I use the following:
Probably one of the biggest issues I have is that while your typical JPG/NRW/NEF file includes the camera details, a video typically does not. That means that I’m a bit hard pressed to determine what camera took a specific video. I also found that the camera metadata for when the file was captured isn’t always that useful, so there are limits.
One other thing to note: ImageMagick isn’t always that fast, so there’s room for improvement on this, specifically around JPEG processing. I was hoping to use MacOSs mdls for getting the camera data, but that only works if the filesystem is local (not mounted like mine was).
If you’re a BASH expert, please be kind. I’m good at programming, not always good at scripting. Otherwise, help yourself.
#!/bin/bash
BASE="/Volumes/e/Pictures/Processed"
moveFile()
{
# local SOURCE="$1"
# local BASE="$2"
# local EXT="$3"
# local SUFFIX="$4"
if [ -f "$2.$4.$3" ] ; then
moveFile "$1" "$2" "$3" $(($4 + 1 ))
else
mv -n "$1" "$2.$4.$3"
fi
}
moveNonDuplicateFile()
{
mkdir -p "$BASE/Sorted/$2/$3/$4/$5"
local T="$BASE/Sorted/$2/$3/$4/$5/$3$4$5$6$7$8"
moveFile "$1" "$T" "$9" "0"
}
# moveDuplicateFile "$1" "$BASE" "$CAMERA" "$YEAR" "$MONTH" "$DAY" "$HOUR" "$MINUTE" "$SECOND" "$EXT"
moveDuplicateFile()
{
mkdir -p "$BASE/Duplicates/$2/$3/$4/$5"
local T="$BASE/Duplicates/$2/$3/$4/$5/$3$4$5$6$7$8"
moveFile "$1" "$T" "$EXT" 0
}
processMOV()
{
TIMESTAMP=`mediainfo "$1" | grep "Encoded date" | head -n 1 | sed 's/Encoded date//' | awk '{$1=$1;print}' | sed 's/: //'`
YEAR=`date -ujf "%Z %Y-%m-%d %H:%M:%S" "$TIMESTAMP" +%Y`
MONTH=`date -ujf "%Z %Y-%m-%d %H:%M:%S" "$TIMESTAMP" +%m`
DAY=`date -ujf "%Z %Y-%m-%d %H:%M:%S" "$TIMESTAMP" +%d`
HOUR=`date -ujf "%Z %Y-%m-%d %H:%M:%S" "$TIMESTAMP" +%H`
MINUTE=`date -ujf "%Z %Y-%m-%d %H:%M:%S" "$TIMESTAMP" +%M`
SECOND=`date -ujf "%Z %Y-%m-%d %H:%M:%S" "$TIMESTAMP" +%S`
if [ -z "$CAMERA" ] ; then
CAMERA="MOV"
fi
}
processRAW()
{
TIMESTAMP=`dcraw -i -v "$1" | grep Timestamp | sed s/Timestamp\:\ //`
YEAR=`date -jf "%a %b %d %H:%M:%S %Y" "$TIMESTAMP" +%Y`
MONTH=`date -jf "%a %b %d %H:%M:%S %Y" "$TIMESTAMP" +%m`
DAY=`date -jf "%a %b %d %H:%M:%S %Y" "$TIMESTAMP" +%d`
HOUR=`date -jf "%a %b %d %H:%M:%S %Y" "$TIMESTAMP" +%H`
MINUTE=`date -jf "%a %b %d %H:%M:%S %Y" "$TIMESTAMP" +%M`
SECOND=`date -jf "%a %b %d %H:%M:%S %Y" "$TIMESTAMP" +%S`
CAMERA=`dcraw -i -v "$1" | grep 'Camera:' | awk -F\: '{ print $2 }' | tr '[:lower:]' '[:upper:]' | awk '{$1=$1;print}'`
}
processAVI()
{
TIMESTAMP=`mdls "$1" | grep kMDItemContentCreationDate | sed 's/kMDItemContentCreationDate = //'`
if [ "$TIMESTAMP" == "" ] ; then
YEAR="0000"
MONTH="00"
DAY="00"
HOUR="00"
MINUTE="00"
SECOND="00"
else
YEAR=`date -jf "%Y:%m:%d %H:%M:%S %z" "$TIMESTAMP" +%Y`
MONTH=`date -jf "%Y-%m-%d %H:%M:%S %z" "$TIMESTAMP" +%m`
DAY=`date -jf "%Y-%m-%d %H:%M:%S %z" "$TIMESTAMP" +%d`
HOUR=`date -jf "%Y-%m-%d %H:%M:%S %z" "$TIMESTAMP" +%H`
MINUTE=`date -jf "%Y-%m-%d %H:%M:%S %z" "$TIMESTAMP" +%M`
SECOND=`date -jf "%Y-%m-%d %H:%M:%S %z" "$TIMESTAMP" +%S`
fi
if [ -z "$CAMERA" ] ; then
CAMERA="AVI"
fi
}
processJPG()
{
# TIMESTAMP=`mdls "$1" | grep kMDItemContentCreationDate | sed 's/kMDItemContentCreationDate = //'`
# CAMERA=`mdls "$1" | grep kMDItemAcquisitionModel | sed 's/kMDItemAcquisitionModel = \"//' | sed s/\"//`
TIMESTAMP=`identify -verbose "$1" | grep DateTimeDigitized | sed 's/ exif:DateTimeDigitized: //'`
TIMESTAMP="$TIMESTAMP -0000"
CAMERA=`identify -verbose "$1" | grep "exif:Model" | sed 's/ exif:Model: //'`
if [ "$TIMESTAMP" == " -0000" ] ; then
TIMESTAMP=`identify -verbose "$1" | grep "date:modify" | sed 's/ date:modify: //' | sed 's/\(.*\)-\(.*\)-\(.*\)T\(.*\)\([+-]\)\(.*\):\(.*\)/\1:\2:\3 \4 \5\6\7/'`
#TIMESTAMP=`mdls "$1" | grep kMDItemFSContentChangeDate | sed 's/kMDItemFSContentChangeDate = //'`
fi
# | awk '{$1=$1;print}'`
#echo $TIMESTAMP / $IMAGE
# 2014-07-05T11:12:16-04:00
if [ "$TIMESTAMP" == "" ] ; then
YEAR="0000"
MONTH="00"
DAY="00"
HOUR="00"
MINUTE="00"
SECOND="00"
else
# YEAR=`date -jf "%Y-%m-%d %H:%M:%S %z" "$TIMESTAMP" +%Y`
# MONTH=`date -jf "%Y-%m-%d %H:%M:%S %z" "$TIMESTAMP" +%m`
# DAY=`date -jf "%Y-%m-%d %H:%M:%S %z" "$TIMESTAMP" +%d`
#
# HOUR=`date -jf "%Y-%m-%d %H:%M:%S %z" "$TIMESTAMP" +%H`
# MINUTE=`date -jf "%Y-%m-%d %H:%M:%S %z" "$TIMESTAMP" +%M`
# SECOND=`date -jf "%Y-%m-%d %H:%M:%S %z" "$TIMESTAMP" +%S`
YEAR=`date -jf "%Y:%m:%d %H:%M:%S %z" "$TIMESTAMP" +%Y`
MONTH=`date -jf "%Y:%m:%d %H:%M:%S %z" "$TIMESTAMP" +%m`
DAY=`date -jf "%Y:%m:%d %H:%M:%S %z" "$TIMESTAMP" +%d`
HOUR=`date -jf "%Y:%m:%d %H:%M:%S %z" "$TIMESTAMP" +%H`
MINUTE=`date -jf "%Y:%m:%d %H:%M:%S %z" "$TIMESTAMP" +%M`
SECOND=`date -jf "%Y:%m:%d %H:%M:%S %z" "$TIMESTAMP" +%S`
fi
if [ -z "$CAMERA" ] ; then
CAMERA="Unidentified"
fi
}
processMPEG4()
{
TIMESTAMP=`mediainfo "$1" | grep "Encoded date" | head -n 1 | sed 's/Encoded date//' | awk '{$1=$1;print}' | sed 's/: //'`
YEAR=`date -ujf "%Z %Y-%m-%d %H:%M:%S" "$TIMESTAMP" +%Y`
MONTH=`date -ujf "%Z %Y-%m-%d %H:%M:%S" "$TIMESTAMP" +%m`
DAY=`date -ujf "%Z %Y-%m-%d %H:%M:%S" "$TIMESTAMP" +%d`
HOUR=`date -ujf "%Z %Y-%m-%d %H:%M:%S" "$TIMESTAMP" +%H`
MINUTE=`date -ujf "%Z %Y-%m-%d %H:%M:%S" "$TIMESTAMP" +%M`
SECOND=`date -ujf "%Z %Y-%m-%d %H:%M:%S" "$TIMESTAMP" +%S`
if [ -z "$CAMERA" ] ; then
CAMERA="MP4"
fi
}
processFile()
{
echo "Processing file $1"
local EXT=`echo "$1" | sed 's/.*\.\([A-Za-z0-9]*\)/\1/' | tr '[:lower:]' '[:upper:]'`
case $EXT in
# Picture Formats Here
NEF)
processRAW "$1"
;;
NRW)
processRAW "$1"
;;
JPG)
processJPG "$1"
;;
# Media Formats Here
AVI)
processAVI "$1" "$EXT"
;;
MOV)
processMOV "$1" "$EXT"
;;
MP4)
processMPEG4 "$1" "$EXT"
;;
M4V)
processMPEG4 "$1" "$EXT"
continue
;;
DB)
rm "$1"
return 0
;;
PNG)
rm "$1"
moveFile "$BASE/Other/PNG" "$2" 0 "PNG"
continue
;;
PANO)
rm "$1"
moveFile "$BASE/Other/PANO" "$2" 0 "PANO"
continue
;;
\*)
continue
;;
DS_STORE)
rm "$1"
;;
*)
echo Unmaped extension $EXT
continue
;;
esac
if [ -z "$YEAR" ] ; then
echo "Image with no YEAR"
continue
fi
if [ -z "$MONTH" ] ; then
echo "Image with no MONTH"
continue
fi
if [ -z "$DAY" ] ; then
echo "Image with no DAY"
continue
fi
if [ -z "$HOUR" ] ; then
echo "Image with no HOUR"
continue
fi
if [ -z "$MINUTE" ] ; then
echo "Image with no MINUTE"
continue
fi
if [ -z "$SECOND" ] ; then
echo "Image with no SECOND"
continue
fi
TARGET="$BASE/Sorted/$CAMERA/$YEAR/$MONTH/$DAY/$YEAR$MONTH$DAY$HOUR$MINUTE$SECOND.0.$EXT"
if [ -f "$TARGET" ] ; then
SOURCEHASH=`md5 -r "$1" | awk '{ print $1; }'`
TARGETHASH=`md5 -r "$BASE/Sorted/$CAMERA/$YEAR/$MONTH/$DAY/$YEAR$MONTH$DAY$HOUR$MINUTE$SECOND.0.$EXT" | awk '{ print $1; }'`
if [ "$SOURCEHASH" == "$TARGETHASH" ] ; then
moveDuplicateFile "$1" "$CAMERA" "$YEAR" "$MONTH" "$DAY" "$HOUR" "$MINUTE" "$SECOND" "$EXT"
else
moveNonDuplicateFile "$1" "$CAMERA" "$YEAR" "$MONTH" "$DAY" "$HOUR" "$MINUTE" "$SECOND" "$EXT"
fi
else
moveNonDuplicateFile "$1" "$CAMERA" "$YEAR" "$MONTH" "$DAY" "$HOUR" "$MINUTE" "$SECOND" "$EXT"
fi
# mv -n "$1" "$TARGET"
}
processDirectory()
{
echo "Processing dir $1"
cd "$1"
YEAR=""
MONTH=""
DAY=""
HOUR=""
MINUTE=""
SECOND=""
CAMERA=""
for FILE in * ; do
if [ -d "$1/$FILE" ] ; then
processDirectory "$1/$FILE"
# rmdir "$1/$FILE"
else
processFile "$1/$FILE" "$FILE"
fi
done
if [ -f ".DS_Store" ] ; then
rm .DS_Store
fi
cd ..
rmdir "$1"
}
CURRENT=`pwd`
processDirectory "$CURRENT”
So, I know this blog hasn’t been active in a while. Anyone that knows me will know that I’m not necessarily that big into social media. I like the concept, but I tend to get a bit too busy to bother posting. Oh, and don’t even bother looking for me on Facebook. I’m not there, at least not really.
However, given that I do have this blog and this little spot in the world, I thought I’d give it another go. No promises for sure.
Today marks day day 60 that Felicia and Alex were over in Romania. When they first took off, I wasn't really sure what to expect. And from what I can remember, neither was Feli. I remember at the time thinking that 10 weeks was such a long time for them to be away. Don't let anyone kid you, it is quite a long time for them to be away. But I think it's also been a good time.
I do know that Alex has had a grand time in Romania with his grandparents. And I also know that they have had a good time having him around. What's funny is watching him via Skype and videos that Feli takes of him. I think he's learned quite a bit of Romanian while he was there. Not speaking it, but definitely understanding it when spoken to him. It'd be rather interesting to determine who knows more, me or him. I think I'd win that one, but only by a small bit.
If you've been reading the blog or following the trip on Friendface, then I'm sure you've seen just how much he's grown over the past two months. I know that when I was there, he'd grown a bit, but over the last 4 weeks he really seems to have grown. And not just grown, but matured. He no longer looks like a baby, but looks like a little boy.
I will say that this time apart would definitely have been more painful if it weren't for the trip I took over there for 8 days. In retrospect, I should have taken a bit more time there (especially since it wouldn't have cost much more and could have happened in and around Memorial Day here in the States), but at least I as able to see them. I think that 10 full weeks would have been almost unbearable.
At least while they were away I was able to get some work done on the house. RIght now, I'm sitting in Alex's room in the glider rocker typing this blog entry. As I type this, I'm surrounded by not only his stuff, but a decent percentage of the furniture and stuff from the living and dining rooms. Why? Well, that's because while they were gone I had both the upstairs and the main level's wood floors done. The upstairs was a complete sand down and refinish (and man do they look different … you can see pictures on my Google+ account if you're interested).
The main level wasn't quite as invasive, though they were in much better shape too. Instead of a complete sand down, these were just screened and poly's. In fact, it was meant to be a single coat, but due to a technical glitch, our floor guy (if anyone needs a their floors done in DC, let us know, we can definitely recommend him) had to come back and redo the work. So now the main level has two coats of fresh polyurethane on it and do they look shiny.
So, now as the last 10 days speed past I can look forward to having squirbles and @felioland back from abroad. It's been a good time apart and now I'm ready to have them back home. But if you happen to think of them on Wednesday night and/or Thursday morning, could you say a little prayer for them? I'm not going to be able to help them as they travel back to the US and I'm sure the flight won't be the most fun thing they've ever done. I'm sure Feli will have something to say about it here in a little over a week.
Cross posted from Alex's blog
So, I saw an article today on The Verge asking what people's mobile phone timeline was. Looking at some of the older phones people mentioned in the comments got me thinking about my phone history. So, just for fun, here's mine:
So, my first phone, that I bought myself, was an Ericsson T28 world phone. I still remember buying this at the Best Buy in Rockville just off I-270. I went with it because it was a GSM-based world phone that I suspected would work in Europe. I would have been right, but I didn't realize they SIM-locked phones. So, instead I used it when I was home and used something different over in the UK. In fact, my first real phone was also an Ericsson T10, I think. However, since this was a pre-paid phone that was loaded me by eGrail, I'm not absolutely certain it counts.
I still think this phone was one of the coolest phones I ever owned. I bought this little guy in the UK so I would have a phone of my own and to have when I came home. It came unlocked and worked on the 1900 MHz frequencies that T-Mobile (then VoiceStream) used in the US. I carried that little guy all over Europe with me. Unfortunately, it developed a crack along the speaker (just above the Nokia logo). This caused the screen to basically stop working unless I squeezed on the top really hard. It was too bad too as I really did like that little phone. In fact, I still have it today, though I doubt it would even turn on if I had to.
My next phone was also a candy bar style phone. At the time, flip phones were all the rage, like my older T28. However, I wasn't a real fan of the flip phones. For some reason, they never felt right to me. The smaller, more svelte phones like the T610 always suited me better. This one was no exception. I really did like that phone and kept on using it until I decided I had to have a smart phone. In fact, I really do believe I have this one still too. It may even be unlocked. I don't remember.
After a spate of "feature" and candy bar phones, I upgraded to a true nerd phone, the T-Mobile MDA. This was a Windows Mobile 5.0-based phone. Sometimes I do miss this particular phone. Granted, my new phones are much more full featured and definitely have a better collection of applications available for it, but this phone had one thing my newer phones don't: a keyboard. And it was a decent keyboard too. By the time I'd had it for a bit over 2.5 years, I'd become quite adept at typing on it. Too bad the browser stunk and towards the end it would lock up for no real good reason.
So the story goes like this. I've been a T-Mobile user since 2000 and really didn't want to switch. I needed a new phone, quite badly as my phone (the aforementioned MDA) was really flaking out. In fact, our last night in Rome saw the phone basically throw an electronic hissy-fit. It decided that the alarm needed to go off and keep going off no matter how many times I rebooted. That was basically the final straw on this one.
I assumed that I'd end up with the T-Mobile G1, the first Android-based phone on the market. My plan was to head to the closest T-Mobile store and pick one up once I got back the States. However, a trip to duty free at the airport sort of derailed me. They had iPhone 3Gs on sale and unlocked. Granted the price was €699, so quite steep, but at least I could use it on my current contract and service. With a little prodding from @felioland, I grabbed it and used it for a bit over 2 years.
It worked pretty good, though getting it to play nice with the T-Mobile network was a bit of work and it did take a bit of time to track down the right settings. And, of course, it never would with on 3G as it was never compatible with the T-Mobile US frequencies. But I did like the phone.
And now to my current phone, the Samsung Nexus S. Now, this phone I truly love. The form factor is great and the OS, Android 4.0 Ice Cream Sandwich (not pictured above), makes for a great phone experience. Also, since it's a true T-Mobile phone, it offers decently fast speeds. Fast enough to watch Netflix via WiFi sharing. This almost consistently beats out hotel Wifi for performance. It also came unlocked, something I didn't realize until I was trying to get T-Mobie to unlock my phone. It took the rep chatting with her manager to realize that it was never locked to begin with.
So back in May I ordered a new mobile phone. As much as I liked my old iPhone 3G, it was getting to be a little long in the tooth. It worked, but was a bit on the goofy side when I tried to do certain things. Plus, there was a bit of screw you AT&T for trying to buy T-Mobile in my choice. I ended up with the Nexus S. While I personally am new to the Android world, my other half has been in the Android world for almost 2 years. She has the G1. Now that I’ve had the phone for a couple of months, I wanted to document some of my experiences.
First and foremost, one of the best features of the phone is the built in Wi-Fi hotspot. Now, to be fair, the newer iPhones do have it built in as well, but since I’m on T-Mobile, the additional feature costs me nothing extra. And it’s legit. No jail breaking, no side loading, nothing. Just a built in feature of the phone. In fact, I’m at a coffee shop here in DC right now watching over my child process (also known as Alex) and I didn’t even bother getting a code for the Wi-Fi here. Instead, I’ve conducted some basic business over the portable hotspot on my Nexus S.
And while it’s handy, one thing I’ve found rather astonishing was the fact that during a recent trip to Philadelphia, my Nexus S was better for internet connectivity than the major name hotel I was staying at. I was even able to watch Netflix streaming on my iPad over the personal hotspot while I couldn’t over the hotel provided Wi-Fi. Now, there was also a wired connection and I wonder if that would have worked better, but since my iPad lacks an ethernet jack …
Other surprising things for me included:
There are definitely some things I miss and some of the applications aren’t as good on the Android as on iOS, but overall, I’m quite happy with my choice.