It was about a year ago we moved into a new (to us) house and it has a lot of cool features. One of the items is a set of in-ceiling sound in the kitchen area and the living room. It’s a pair of Speakercraft MT6 One’s that run through a volume knob near an entrance to each room with the speaker wiring terminating at the bottom of one of kitchen cabinets. Unfortunately when we moved in there was nothing plugged into them to power them. So out of my pile of old electronics (which is overly large) I pulled the first receiver I owned, a SonySTR-D515. While the Laser Disc button wasn’t all that helpful the fact that it had A/B speaker output made it ideal for the job. I had an old Belkin bluetooth receiver I added to one of the aux inputs so we could stream music over it. In the end though this really ended up be more of a hassle to turn the receiver on ( because it always put out white noise ) and select the right input and dial in the volume to play music over the speakers. Whatever you were streaming bluetooth with (usually a phone) has to stay really close to the receiver. A singular sound volume never really worked out well either. In the end an Echo we had in the room became the day to day music playing solution and the nice speakers sat silent.
It was about a month ago I got an itch that I wanted to change the situation. I am in no way a real audiophile. So my goals were simple:
- take up less room in the cabinets
- be able to control the sound and treble/bass adjustment for each room independently
- do both bluetooth and chromecast audio for some future proofing
- not cost a ton of money
While I’d looked at the possibility of putting in Sonos or some other system like that, it was beyond what I wanted to spend. My big disappointment here in the Amazon Alexa products is that the Echo doesn’t do bluetooth, but I did have an Echo Dot which does, so I ended up just swapping their locations. This setup will most likely be backed by a Google Home once it arrives, but that’s an entirely different post. At one point I debated going with two Chromecast Audios, one for the kitchen and the other for the living room. While I could create a group and cast to both of them I couldn’t really think of a time where I would want to play two different streams into two rooms that close together. One might be on or off, but I didn’t think they would have two different things to them. This was probably good as in the end I have two input channels that I mix together and split out, with two Chromecasts I would have had to split the bluetooth and then mix into each amp separately and would have upped the cost.
My shopping list in the end looked like this:
- 2 x Pyle PFA300 90-Watt Amp – to power my speakers
- Chromcast Audio – so I can cast
- Belkin Bluetooth Receiver – well not really, I already had it
- Fifine DJ Mixer – to mix the output of the Chromecast and Bluetooth down to one signal
- 3.5mm audio splitterÂ – to split the output of the mixer to both of the amps
Some peg board and zip ties and I end up with:
This now sits at the back of the cabinet freeing up space to stash more pots and pans in the space the receiver had taken up.
It allows me to tune the living room speakers volume, bass and treble different than the kitchen if I so wish and I can adjust the input of the chromecast vs bluetooth if one seems to play louder than the other. For wiring I did add some ends to my speaker wire and will need to custom make something to hold the plugs apart, right now it’s just little pieces of foam and that does the trick. Maybe one of those things that holds your toes apart when you paint the nails would do the trick, but I don’t happen to have any.
The sounds is good and I can tell the Dot to connect to the bluetooth speakers and cast that way without a problem and switch over to casting a playlist off of Plex from my laptop without needing to adjust anything. So right now I’m very happy. There is probably more tweaking to be done in the future and switching over to the Google Home could be an interesting adventure.
It’s been a couple of years since I did an update to the up and running with Cloud Foundry post. Things have change quite a bit under the covers, but the up and running is nearly the same. So here what it looks like:
First you won’t be doing a gem install of cf, instead you should go here and grab the installer package since it’s now done in go.
You should also have signed up for an account with Pivotal Web Services here or another CF provider’
In this demo I’ll use the php buildpack which is going to let me just write and index.html and view that
Once you’ve got those two things done a deploy looks like this
scottkahler$ mkdir demo scottkahler$ cd demo/ scottkahler$ echo 'This is a test' > index.html scottkahler$ cf push -b https://github.com/cloudfoundry/php-buildpack.git demo30sec
Creating app demo30sec in org scottk-org / space development as email@example.com... OK
Creating route demo30sec.cfapps.io... OK
Binding demo30sec.cfapps.io to demo30sec... OK
Uploading demo30sec... Uploading from: /Users/scottkahler/cf_30/demo 149, 1 files OK
Starting app demo30sec in org scottk-org / space development as firstname.lastname@example.org... OK
0 of 1 instances running, 1 starting 0 of 1 instances running, 1 starting 0 of 1 instances running, 1 starting 1 of 1 instances running
Showing health and status for app demo30sec in org scottk-org / space development as email@example.com... OK
requested state: started instances: 1/1 usage: 1G x 1 instances urls: demo30sec.cfapps.io
state since cpu memory disk #0 running 2016-01-13 05:58:12 PM 0.0% 0 of 1G 0 of 1G
And BAM! Once again I’ve got a running app.
After some internal debate I decided to go ahead an order a K40 laser off of Ebay. They are inexpensive 40W Laser engraver/cutter setups with software. There are a lot of mixed reviews for and against them, but paying $500 vs $2000+ for a starter laser seemed like a better way to dip my toes in the water. So a couple weeks ago a went ahead and bought one. This last Friday something appeared at our door.
Score. Now I knew what I was going to be playing with over the weekend. So I started unboxing. Unfortunately I quickly ran into a problem.
It looks like it was wrapped before the paint had dried. As I continued to unwrap it more and more paint came off. Even the water hoses that were attached had paint on them where they had been tucked inside the cavity. In addition the controller board was mounted so that the USB port was partially covered up. Obviously a rush job. There was a CD inside with nothing written on it. I guessed this was the software and happened to be right, there weren’t any manuals. I was highly suspicious about the fan,but it checked out okay. The included USB cable was labeled High Quality, so it must be high quality.
I sent off an email to the seller with some pictures and we’ll need to figure out how to handle this. Their first response asked me to hook it up and see if the internals were working.
So after setting up a small shop area in the garage and a trip to Lowes to get a couple things to zap I fired up the software and started trying to figure it out. I was amazed as the internals seem to work just fine and the laser had good focus. So I churned out a couple of test projects.
I’ve got a few fails, but I won’t post those. Mainly related to figuring out how to cut through board and not switching between Engrave and Cut mode correctly. There are also a couple that are due to the controller board just straight out flipping out and not cutting what I told it to do too.
Looking at things that need improvement. Definitely the bed needs to be replaced and an air assist head added. Something totally different needs to be done with the exhaust system. It seems to work pulling air out of the cutting area, but it’s not really directing anything down the pipe it attaches to. I am fairly excited about actually being able to do something even though it looks like the machine has been attacked with a weed whacker.
Look for a little more life in this site as I post updates on my progress and my setup.
Over the past few weeks there has been the usual glut of “2013 Year in Review” and “What’s Going to Happen in 2014” posts and I figured I should probably add to the list. So here are my 2014 thoughts:
- Big Data will not become Data – There is a bunch of predictions out there pushing the Big being dropped from Big Data because Big is the new norm. Big is not the new norm, data that can potentially run on one server will remain the norm. Specific applications and use cases will call for “Big” data solutions, it will be overkill to move your normal data needs to those platforms. So my prediction is Big Data will remain it’s own beast.
- Hadoop as an application platform – A YARN enabled Hadoop will remove it from being a data processing only platform to a multiple application platform. Hadoop will still be data centric but over the second half of the year there will be far more non-HDFS centric things running in a Hadoop footprint.
- Cloud Abstraction is the next big thing – AWS, vSphere and Openstack will start to take a backseat to cloud abstraction technologies like Cloud Foundry and Open Shift. Thus far it’s been about getting out of the data center Â and into the cloud to be agile and cut costs. Now people are realizing they are locked into a cloud and/or the cost savings they thought would be there aren’t. Abstraction platforms will allow companies to leverage multiple cloud providers pricing against one another and remove massive integration project to move from one cloud API to another. This will become a big boon for Openstack as companies become more flexible in their cloud choice.
- Go, go, go – Go will gain more traction and will see more widespread adoption.
- Hadoop Purchases – One or two current Hadoop vendors will be purchased. One will fail horribly in integrating with the new owner and the other will feel pains that will cause it issues for six months after the first six months it was initially acquired.
- Apple’s not so big next big thing – Apple will launch something it sees as revolutionary like iAds, which will get about as much traction.
- Object Storage – Object storage platforms and software will get a lot more hype this next year.
- Non-coast startups – Colorado, Texas, Chicago and the Silicon Prairie will leap forward as startup incubators for low cost of living and abundant resources. The coasts will bounce back from tech bubble and the housing busts, in order to do so though they won’t be friendly to those who are cost concerned.
- Tablets are just there – Like Atari, VCRs and Nintendo. It will be the norm for a middle class and above family to have a tablet by the end of 2014.
- Martin will find a woman – That boy has been single too long.
It’s now been a little over six months since I did my last up and running with Cloud Foundry post and now that things have moved to CFv2 it looks like I need to do an update. Pivotal has rolled out an enterprise CF that runs on VSphere and I’ve got it up and running in my lab ( cf.simpit.com … you’ll have to get your own ) which made me realize I need to update my post on getting an app up and running quickly. So here it is:
scottkahler$ gem install cf scottkahler$ gem install sinatra
scottkahler$ mkdir demo scottkahler$ cd demo/ scottkahler$ vim demo.rb
get ‘/’ do
“Hello from the Demo”
scottkahler$ vim config.ru
scottkahler$ vim Gemfile
scottkahler$ bundle Fetching gem metadata from https://rubygems.org/........... Fetching gem metadata from https://rubygems.org/.. Resolving dependencies... Using rack (1.5.2) Using rack-protection (1.5.1) Using tilt (1.4.1) Using sinatra (1.4.4) Using bundler (1.3.5) Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed. scottkahler$ cf target api.cf.simpit.com Setting target to https://api.cf.simpit.com... OK Target Information (where will apps be pushed): CF instance: https://api.cf.simpit.com (API version: 2) user: admin target app space: development (org: demo) scottkahler$ scottkahler$ cf push Name> demo Instances> 1 1: 128M 2: 256M 3: 512M 4: 1G Memory Limit> 256M Creating demo... OK 1: demo 2: none Subdomain> demo 1: cf.simpit.com 2: none Domain> cf.simpit.com Binding demo.cf.simpit.com to demo... OK Create services for application?> n Save configuration?> y Saving to manifest.yml... OK Uploading demo... OK Preparing to start demo... OK -----> Downloaded app package (4.0K) -----> Using Ruby version: ruby-2.0.0 -----> Installing dependencies using Bundler version 1.3.2 Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin --deployment Fetching gem metadata from https://rubygems.org/.......... Fetching gem metadata from https://rubygems.org/.. Installing rack (1.5.2) Installing rack-protection (1.5.1) Installing tilt (1.4.1) Installing sinatra (1.4.4) Using bundler (1.3.2) Your bundle is complete! It was installed into ./vendor/bundle Cleaning up the bundler cache. -----> Downloaded app package (4.0K) -----> Using Ruby version: ruby-2.0.0 -----> Installing dependencies using Bundler version 1.3.2 Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin --deployment Fetching gem metadata from https://rubygems.org/.......... Fetching gem metadata from https://rubygems.org/.. Installing rack (1.5.2) Installing rack-protection (1.5.1) Installing tilt (1.4.1) Installing sinatra (1.4.4) Using bundler (1.3.2) Your bundle is complete! It was installed into ./vendor/bundle Cleaning up the bundler cache. -----> Uploading droplet (50M) Checking status of app 'demo'... 1 of 1 instances running (1 running) Push successful! App 'demo' available at demo.cf.simpit.com scottkahler$
And BAM! Once again I’ve got a running app.
root# gem install refinerycms Building native extensions. This could take a while… ERROR: Error installing refinerycms: ERROR: Failed to build gem native extension.
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb mkmf.rb can’t find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h
Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/json-1.7.7 for inspection. Results logged to /Library/Ruby/Gems/1.8/gems/json-1.7.7/ext/json/ext/generator/gem_make.out
The solution ended up being that I need to install Xcode and go to Xcode Preferences and add in the Command Line Tools. After that, it’s all good.
I’ve been sitting on the bigdatamidwest domain for awhile planning to do something with it and it looks like I’m finally going to have the time and backing by my company to get to work on it. In an attempt to do some dogfooding I decided I’d start out by throwing up a Cloud Foundry instance to see just how hard it was. The first step was setting up a Cloudfoundry.com account, which took longer then creating and deploying at sample app. My first journey into dropping an app is as follows:
scottkahler$ gem install vmc scottkahler$ gem install sinatra
scottkahler$ mkdir bigdatamidwest scottkahler$ cd bigdatamidwest/ scottkahler$ vim bdmw.rb
get ‘/’ do
“Hello from BigDataMidwest”
scottkahler$ vmc target api.cloudfoundry.com Setting target to https://api.cloudfoundry.com... OK scottkahler$ vmc push Please log in first to proceed.
Authenticating... OK Name> bigdatamidwest
1: sinatra 2: other Framework> 1
1: ruby18 2: ruby19 3: other Runtime> 2
1: 64M 2: 128M 3: 256M 4: 512M 5: 1G 6: 2G Memory Limit> 1
Creating bigdatamidwest... OK
1: bigdatamidwest.cloudfoundry.com 2: none Domain> bigdatamidwest.cloudfoundry.com
Updating bigdatamidwest... OK
Create services for application?> n
Bind other services to application?> n
Save configuration?> yes
Saving to manifest.yml... OK Uploading bigdatamidwest... OK Starting bigdatamidwest... OK Checking bigdatamidwest... 0/1 instances: 1 starting 1/1 instances: 1 running OK
And BAM! I’ve got a running app.
Another timely XKCD comic, just yesterday I was talking with a bunch of my coworkers about how much of a change there could be to Google Maps if they start pulling in Glass images. For a large corporation with a couple dozen people walking around you could probably map out the entire campus outdoors and even inside structures within a week. At that point you are looking at Google Maps not only telling you how to drive to the next meeting, but where you can park, how to get in the building and where the conference room is. You can go through all that on your phone the day before the meeting to familiarize yourself. Maybe similar to the avoid toll roads function you’ll also be able to customize your path to avoid passing through the department of people waiting on your report that has not yet been delivered.