Presentation: Using Technology Effectively in a Bible Study

Last weekend, I was invited by Houston’s First Baptist Church to give a presentation on “Using Technology Effectively in a Bible Study” at their annual Midnight Madness event.  This is a training event for leadership and is intended to equip bible study leaders to be effective.  There were lots of interesting sessions and if I wasn’t presenting I would have definitely wanted to attend a few sessions.

Preparing for this session was a good learning process.  Although I already had a rough idea for some content, based on my own experience using technology in a Bible study, I needed to polish up some areas and dive in a bit deeper with researching tools and technologies.  I found some interesting tools along the way and was able to frame the the session around answering the “how” and “why” questions.  The attendees to my two sessions were varied in their experience and comfort level with using online technologies so I had to be accommodating to that.  Overall, I am glad I volunteered to give the talk and am thankful for the opportunity to have served the church.

Here is my slide deck:

[Direct link]

Conditional Serialization with Json.NET

In ASP.NET MVC, I typically use View Models along with the Json.NET library to get JSON back to the client.  When I want some members to be omitted from serialization I will simply add the [JsonIgnore] attribute to the target property.  This works great for static omission but sometimes I come across the need to perform conditional (i.e. at runtime) omission.  To do this, you can use the largely undocumented [bool ShouldSerialize{MemberName}()] approach.

Simply add a bool return method named ShouldSerialize{MemberName} to the model class.  The {MemberName} portion of the name should match the member name that will be conditionally omitted.  Json.NET will check for the existence of this method and conditionally serialize the corresponding member value.  I also like to use an additional property (with [JsonIgnore]) that I set externally which is used by the ShouldSerialize methods.  In the example below, this property is called SerializeSensitiveInfo.

Run a program as another domain user in Windows

This is a short post, and mainly for my own reference in the future.  I run a MacBook Air at work and have Windows 7 running on a VirtualBox VM.  It’s a long story as to why, but my Windows VM is not joined on our work domain (Active Directory).  Most of the time this isn’t a big deal but occasionally there are times I really do need to run a program in the context of my Active Directory domain user.  A good example is SQL Server Management Studio, because to connect to servers with “Windows Authentication” it assumes you are already running SSMS in the context of the Windows user you will be connecting with.  Since my box isn’t even connected to the domain, this is a problem.  To get around this, I changed my SSMS shortcut to use the following command.  This command opens a command prompt, asks me to enter my password, and then opens a program in the context of the user I specify.

C:\Windows\System32\runas.exe /netonly /user:MYDOMAIN\username “C:\Program Files (x86)\yada\yada.exe”

ASP.NET Web Forms Model Binding

I prefer to work with ASP.NET MVC but currently work with a hybrid code base that includes plenty of Web Forms pages laying around.  One of the nice new features ASP.NET 4.5 brought to the Web Forms world is called Model Binding.  This makes binding data to a form very clean and plays nicely with Entity Framework, Code First.  It took some reading and experimenting to get up to speed with it so I created a Gist (below) that demonstrates a simple example of using Model Binding to populate a GridView.  Note that sorting / paging are built-in automatically and I am passing a TextBox field in for filtering the results.

Bento Budget

Way back in 2005 when my wife and I got married we went to pre-marital counseling and learned we had a bit of a problem in our relationship. Not surprisingly, it had to do with money. I was a so called “saver” and she was a so called “spender”.  We had different ideas about how spend money and we were counseled to start a budget. The idea of budgeting made my eyes roll, to be honest, because it seemed like such a drag. I figured we should just save as much and spend as little so we didn’t have to worry about keeping track of everything.

We started keeping the budget with Excel.  I had a bunch of worksheets with cross references, crazy complex functions and all.  It was super cool, complex and she hated it.  It didn’t last long because it was too cumbersome and didn’t pass the WAF.

Then we started Using Quicken.  It was great because it integrated with our banks and make transaction entry a breeze.  With its insane amount of features it seemed that it could handle any budget scenario we threw at it.  Things went well for quite awhile but over time we started misusing it.  We wanted to start saving up for things and planning ahead rather than looking at historical reports so we created a concept call “buckets” and had a two page documented process.  It became a mess.

We realized we were trying to do Envelope Method of budgeting so we looked for a solution that would download our transactions like Quicken but allow us to use the envelope so we found and used a web based program called Mvelopes.  It was nice.  It was real nice.  It did all we wanted it to. However, it was expensive and sluggish (Flash based).

Being a software developer, I began to think about rolling my own solution.  I had about 3 false starts (C# WinForms, Silverlight, simple HTML app) over the course of a year and couldn’t settle on a solid direction.  However, I started getting into Rails development and learning more about Javascript frameworks like jQuery so I thought this would be a great opportunity to put these to use so I could really learn them well and make some solid traction with a budgeting app.

Fast-forward 2 years and I had a working Rails based application and was able to migrate off of Mvelopes and begin to use it.  I called it “Bud-E” (get it?  Buddy but an E for Envelope?  Yeah, it’s lame and I ended up changing the name later.)  It was rough around the edges for sure but it worked.  It download transactions from our banks, allowed us to enter transactions, manage envelopes and transfer money between them.  Over the next year, I worked on making it better and somewhere along the way I decided I could make this thing into a commercial, subscription based application.  I saw a market opportunity and thought I might be able to make some money.  I also knew this type of app would have a bigger audience with a SAAS model rather than being an open source project.

Fast forward another year and I finished the polishing and released my first commercial project called “Bento Budget”.  Bento is a type of Japanese meal that is partitioned into multiple sections on a plate.  This term seemed to go along with the envelope, “bucket” idea where you have different partitions for your money.  It also helped that the bentobudget.com domain was available :).

Under the hood, it’s a Rails 3 app that relies heavily on Bootstrap, jQuery, jQuery UI.  On the server side, I have a C# REST application, utilizing the Nancy framework that does the financial institution integrations.  For data, I use MySQL with the InnoDB engine.  There is an iOS and Android app, both built using PhoneGap.

This project was a lot of fun and a ton of work.  I learned many useful things along the way.  I’ve already had a good bit of interest and usage and am excited to see what the future holds for Bento Budget. Go check it out at www.bentobudget.com!

 

Bento Budget