After spending around $12,240 on cable TV for the past 17 years, I finally decided to join the 2nd millennium and say goodbye to my cable company and hello to digital broadcast TV.
Here's my step by step guide to cutting the cord on cable with a Tivo in Austin TX.
1. Find out if you can receive any digital TV signals. Visit the FCC at www.fcc.gov/media/engineering/dtvmaps and see how many stations you can receive. Here's what Austin looks like.
2. Purchase a few digital antennas and see which one works the best and take the rest back. The price has nothing to do with quality. Antennas may be actively powered or passive. The powered may be better for far away stations, but they may not be good for close stations. Consumer Reports tried to recommend specific brands, but after testing, they could not recommend any since the antennas would do well in one area, but not another. At the recommendation of the Best Buy guy I tried this one which costs $33. See more notes below on antennas.
3. Mount the antenna on the wall near your TV, or better yet on an interior window.
4 Hook up your antenna to the back of your Tivo.
5. Convert the Tivo from cable to over the air (OTA).
The tricky part with the Tivo is that you have to go through the complete initial setup again. On the main menu select "Settings and Messages"/"Help"/"Restart or Reset"/"Repeat Guided Setup" to repeat the setup. Select "Antenna only" on all the settings.
Tivo will then scan your antenna and show you all the stations it found.
6. Remove poor quality stations.
Tivo found 20 OTA stations, but not all came in well and many were in Spanish.
After subtracting those , I now have these stations in Austin TX:
18-1 PBS
18-2 create
18-3 PBS
18-4 PBS
21-1 ABC
24-3 Justice
36-1 NBC
36-2 COZI
36-3 ION
42-1 CBS
54-1 CW
54-2 GRIT
54-3 Laff
7. Make sure everything is working correctly and then call the cable company to cut the cord.
My bill went from $150 to $ $90 with taxes.
That is still way too high for just internet at 100Mb, but it's a start.
How much do you pay for internet and phone?
Epilogue:
After trying the RCA antenna for a while I was disappointed. I took that back to Best Buy, and I got a better cheaper one ($20) from Amazon: the Mohu Leaf Metro TV Antenna, Indoor, Portable, 25 Mile Range. It works much better.
Then for my other TV I tried the Intoam Leaf, but it could only pick up 10 stations clearly.
I'm blogging about programming, but ... hey look over there - it's something shiny!
Saturday, June 10, 2017
Friday, June 09, 2017
Agile Austin Lean / Kanban SIG Group Lunch Meeting - Theory of Constraints
Jim Brission from Agilecoaching.org gave a great noon talk to the Agile Austin Lean / Kanban SIG group.
Jim started by showing I Love Lucy's famous chocolate scene
My Notes::
Recommended book: The Goal
Intro: In hiking you can only go as fast as your slowest person.
Process of Ongoing Improvement (POOGI)
1. Identify system's constraint
(Optimizing other steps is a waste)
2. Maximally exploit the constraint
3. Subordinate every else
4. Elevate Constraint fix it, make it faster
5. Iterate
Where do we see constraints in Software Development?
Any handoff - QA, Technical Writer, Release team
That guy
- knows the device driver, the kernel
- is a super debugger
Drum-Buffer-Rope
Drum sets the beat
Buffer is inventory
Rope pulls work into stockpile
Double Loop Learning
Action Strategies / Results & Consequences
Governing Variable (values, assumptions, frameworks, beliefs)
Critical Chain Project Management - CCPM
Start with
Network of tasks and dependencies
Estimates
Order
No task starts before dependencies met
No multitasking of individuals
Minimize Project Duration
Buffer: Time, Money, Scope
Put buffer at the end of a project, not in individual tasks.
Fever chart
Product owner can save the day by paring down the scope
Cost Accounting
Created after industrial revolution
Measures efficiency of men adn machines - unit production per dollar of man or machine
Cost Accounting not good for software development
ABC - Activity Based Costing
Invalid Assumptions
Local efficiencies lead to global efficiency
(.e.g, making one machine faster, doesn't necessarily help the throughput - unless its the most constrained operation)
Bad things that are viewed as good things in Cost Accounting
Build up inventory (keep machines/people busy)
Fill everyone's plate with work
or minimize personnel to ensure all are fully engaged
Show high productivity rather than high value
Jim started by showing I Love Lucy's famous chocolate scene
My Notes::
Recommended book: The Goal
Intro: In hiking you can only go as fast as your slowest person.
Process of Ongoing Improvement (POOGI)
1. Identify system's constraint
(Optimizing other steps is a waste)
2. Maximally exploit the constraint
3. Subordinate every else
4. Elevate Constraint fix it, make it faster
5. Iterate
Where do we see constraints in Software Development?
Any handoff - QA, Technical Writer, Release team
That guy
- knows the device driver, the kernel
- is a super debugger
Drum-Buffer-Rope
Drum sets the beat
Buffer is inventory
Rope pulls work into stockpile
Double Loop Learning
Action Strategies / Results & Consequences
Governing Variable (values, assumptions, frameworks, beliefs)
Critical Chain Project Management - CCPM
Start with
Network of tasks and dependencies
Estimates
Order
No task starts before dependencies met
No multitasking of individuals
Minimize Project Duration
Buffer: Time, Money, Scope
Put buffer at the end of a project, not in individual tasks.
Fever chart
Product owner can save the day by paring down the scope
Cost Accounting
Created after industrial revolution
Measures efficiency of men adn machines - unit production per dollar of man or machine
Cost Accounting not good for software development
ABC - Activity Based Costing
Invalid Assumptions
Local efficiencies lead to global efficiency
(.e.g, making one machine faster, doesn't necessarily help the throughput - unless its the most constrained operation)
Bad things that are viewed as good things in Cost Accounting
Build up inventory (keep machines/people busy)
Fill everyone's plate with work
or minimize personnel to ensure all are fully engaged
Show high productivity rather than high value
Tuesday, June 06, 2017
Agile Austin "Attacking Things Incrementally"
Walter Bodwell spoke to 55 people at Agile Austin this month.
Walter was a great speaker. He made the audience feel comfortable and people participated well. We broke into small groups and discussed how to break down some current issues we had at work.
Here's my personal notes:
Simplicity the art of maximizing the amount of work not done is essential.
Small stories are best: easier to estimate, enables earlier testing, less risk, faster feedback, easier to pivot, easier to tell when done.
Stories can be too small - overhead can be too big.
At least 5-9 stories per iteration.
Ideally .5 to 3 days per story.
Barriers to small stories: get past all or nothing; some developers don't want to itemize large tasks, overhead can be too great.
When splitting a story each "slice" should add incremental user value.
Reprioritize and resize after splitting
Who does the splitting? Product owners and developers
Split stories vertically (Ui and Middle Tier and DB) so user can see value
Don't split horizontally e.g., DB, because user can't see value or be tested
Questions to ask yourself:
How will we test this slice?
Ideas for splitting:
Handle most important users first
CRUD - Start with just Create and Read; wait on Update and Delete
Do the happy path first
Make it work, make it work fast
Why Small Releases?: Easier to defer to next release; earlier revenue opportunity; earlier feedback; pivot faster;
When doing a code rewrite, put both system out so users can still use old system. Sometimes a feature is written in such a way that a customer can do something odd and create something very valuable to them which is not documented nor was it intended.
Yassar opened the meeting |
Walter was a great speaker. He made the audience feel comfortable and people participated well. We broke into small groups and discussed how to break down some current issues we had at work.
Here's my personal notes:
Simplicity the art of maximizing the amount of work not done is essential.
Small stories are best: easier to estimate, enables earlier testing, less risk, faster feedback, easier to pivot, easier to tell when done.
Stories can be too small - overhead can be too big.
At least 5-9 stories per iteration.
Ideally .5 to 3 days per story.
Barriers to small stories: get past all or nothing; some developers don't want to itemize large tasks, overhead can be too great.
When splitting a story each "slice" should add incremental user value.
Reprioritize and resize after splitting
Who does the splitting? Product owners and developers
Split stories vertically (Ui and Middle Tier and DB) so user can see value
Don't split horizontally e.g., DB, because user can't see value or be tested
Questions to ask yourself:
How will we test this slice?
Ideas for splitting:
Handle most important users first
CRUD - Start with just Create and Read; wait on Update and Delete
Do the happy path first
Make it work, make it work fast
Why Small Releases?: Easier to defer to next release; earlier revenue opportunity; earlier feedback; pivot faster;
When doing a code rewrite, put both system out so users can still use old system. Sometimes a feature is written in such a way that a customer can do something odd and create something very valuable to them which is not documented nor was it intended.
Test Driven Development Workshop
I recently led a Test Driven Development workshop using C# at work. Here's the exercise I created to show how to do TDD.
Introduction:
Red/Green Refactoring is starting with a failing test, and then making the target software work.
Remember to write the simplest thing that could possibly work
Ping-pong is having a pair of programmers work together. The first programmer writes the test, and the second makes the test pass
Workshop Background:
We just bought a zoo and employ jr. high students to write queries against our db for our web site.
The kids work hard, but their construction of URL strings to hit the web service is often bad.
We see final queries like
https://WeBoughtAZoo.com/api&location=Asia
https://WeBoughtAZoo.com/api&location=South America?type=reptile&pen=a2#4&time
You need to write a helper URL builder function to make errors less likely, something like,
Here's my example project.
Clone solution and files from https://github.com/fincher42/TestDrivenDevelopmentWorkshop/tree/master
file ZooQuery.cs -- just a main program -- you will not change this file.
UtilitiesTest.cs -- this is where we put the tests defined in the comments below
Have one person create the test, and pass control to another person to upgrade BuildUrl() so it will pass the test. I have 5 exercises, so with 10 people everyone will get to code.
Introduction:
Red/Green Refactoring is starting with a failing test, and then making the target software work.
Remember to write the simplest thing that could possibly work
Ping-pong is having a pair of programmers work together. The first programmer writes the test, and the second makes the test pass
Workshop Background:
We just bought a zoo and employ jr. high students to write queries against our db for our web site.
The kids work hard, but their construction of URL strings to hit the web service is often bad.
We see final queries like
https://WeBoughtAZoo.com/api&location=Asia
https://WeBoughtAZoo.com/api&location=South America?type=reptile&pen=a2#4&time
You need to write a helper URL builder function to make errors less likely, something like,
string url = Utilities.BuildUrl(host, name1, value1, name2, value2, ....)
Here's my example project.
Clone solution and files from https://github.com/fincher42/TestDrivenDevelopmentWorkshop/tree/master
file ZooQuery.cs -- just a main program -- you will not change this file.
using System;
namespace TestDrivenDevelopment
{
public class ZooQuery {
public static void Main(string[] args)
{
string host = "https://WeBoughtAZoo.com/api";
string url;
url = host + "?location=Africa";
Console.In.ReadLine();
}
}
}
Utilities.cs -- this is where we write a functionnamespace TestDrivenDevelopment
{
public class ZooQuery {
public static void Main(string[] args)
{
string host = "https://WeBoughtAZoo.com/api";
string url;
url = host + "?location=Africa";
Console.In.ReadLine();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace TestDrivenDevelopment
{
public static class Utilities
{
//this is where ReSharper will create the method BuildUrl
}
}
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace TestDrivenDevelopment
{
public static class Utilities
{
//this is where ReSharper will create the method BuildUrl
}
}
UtilitiesTest.cs -- this is where we put the tests defined in the comments below
using System.Collections.Generic;
using FluentAssertions;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Web;
using TestDrivenDevelopment;
using System;
using System.Linq;
namespace UnitTestProject1
{
/* Workshop tasks, Expected URLs:
1. Simple name-value pair:
BuildUrl(host, "location","Africa");
2. Name-value pair with non-url friendly characters:
BuildUrl(host, "animal pen","#16"); //(note: # in hex is 23)
3. Multiple name-value pairs
BuildUrl(host, "type","mammal","continent","Africa","size","small","food appetite","carnivore","animal pen","#16");
code error conditions:
4. Check for bad number of parameters
BuildUrl(host, "type","mammal","continent");
5. Check for bad host value, needs to look like a host name
*/
[TestClass]
public class UtilitiesTest
{
//your tests go here.
//Use Snippet to write the initial outline of the test
}
}
using FluentAssertions;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Web;
using TestDrivenDevelopment;
using System;
using System.Linq;
namespace UnitTestProject1
{
/* Workshop tasks, Expected URLs:
1. Simple name-value pair:
BuildUrl(host, "location","Africa");
2. Name-value pair with non-url friendly characters:
BuildUrl(host, "animal pen","#16"); //(note: # in hex is 23)
3. Multiple name-value pairs
BuildUrl(host, "type","mammal","continent","Africa","size","small","food appetite","carnivore","animal pen","#16");
code error conditions:
4. Check for bad number of parameters
BuildUrl(host, "type","mammal","continent");
5. Check for bad host value, needs to look like a host name
*/
[TestClass]
public class UtilitiesTest
{
//your tests go here.
//Use Snippet to write the initial outline of the test
}
}
Have one person create the test, and pass control to another person to upgrade BuildUrl() so it will pass the test. I have 5 exercises, so with 10 people everyone will get to code.
Subscribe to:
Posts (Atom)