Carolina Code Camp – 2013
You will learn how to structure your app’s code in a way that
– improves maintainability
– enables testability of your app’s UI behavior
– reduces maintenance cost
– enables cross-platform deployment
Author: tewari
The Site44 Workflow
A light weight development workflow with real-time website deployment.
I recently built a sample website to illustrate how clean, semantic html markup can be maintained when using Bootstrap’s grid system. The solution is to use a css pre-processor to incorporate Bootstrap’s LESS based mixins into your own .less files and push the Bootstrap instructions down into your stylesheets. There are two ways to “compile” .less stylesheets – use a stand-alone LESS compiler or use less.js. I found it very convenient to use less.js (note that it is not recommended in production deployment). As I started working on developing the sample code I found it a bit cumbersome to work with an entire web application project in Visual Studio, considering I was working with some really simple sample client-side html, css. As I craved for an alternative, I stumbled on to a development workflow that is incredibly simple and a lot of fun. I call it the Site44 workflow. Site44 turns your dropbox folders into websites. And it is awesome! Here is what you do –
1. Sign into Site44.com using your dropbox credentials.
2. Create a new site (all you have to do is come up with a name). I named it “ash”. A sub-folder with this name will show up in your dropbox folder.
3. Drag this folder to your Github for Windows screen and drop it there to create a github repo in that folder and push it to github.
4. Smile and write code.
As you save your code. The changes are deployed in real-time to your website. You commit to your github repo as you please. If you revert to a different version/branch of our code from your git repo, that version will be deployed (almost) instantly to your website. I wish there was a .site44ignore feature in Site44, just like .gitignore. That will allow me to keep my .git folder (and some other files) from getting published to the website. Other than that, this worked out really well for me.
I wrote about the experience of extending Bootstrap with LESS here : Bootstrap with LESS.
Hat tip to Justin Saraceno for introducing me to site44.
Understanding and Using System.Transactions
These are some resources to help grasp System.Transactions functionality and use it effectively in your projects:
- Features Provided by System.Transactions to create transactional applications
- Implementing an Implicit Transaction using Transaction Scope
- MSDN Magazine Articles by John Papa:
- These are specific to TransactionScope (the way to go in most cases):
- Here is a practical example of Using TransactionScope to handle transactions in .net.
- This article in MSDN Magazine gets in depth with the way a TransactionScope like functionality can be implemented. Gives you a good understanding of what is happening under the hood when using TransactionScope in some Repository implementations in multi-threaded scenarios.
- This CodeProject article is another example of implementing a transactional repository.
- There are excellent tips here about configuring TransactionScope when using it with SQL Server.
- This is a good resource for understanding CommitableTransaction usage.
- And this one on the CodeProject has brilliant, in-depth and under-the-hood coverage – Truly Understanding .NET Transactions and WCF Implementation.
Protecting Your Api Keys
I am working on a Windows 8 app (details to follow in a subsequent post) and the code is published in a public repo on github. My app uses third-party APIs and after I committed the first cut to github, I realized that I had included my api keys in the code. The whole world had access to my keys. I did not want to publish the developer keys for those APIs to the entire world.
When the app will be released and distributed, those keys will need to be included in the app somehow. Once the keys are out there they can not be 100% protected from a determined mind. So, why bother? Why would I want to hide the api keys in the source code? Here are some good reasons –
1. It might be illegal to put the keys out there in plain sight for the whole world to see.
2. Developer keys may be throttled or have other restrictions on how many times they can be used per day or per minute.
3. The keys might allow access to expensive cloud computing resources.
4. The keys might allow access to confidential/sensitive customer data.
First, I had to take my keys back from git repo. Can you really remove information from a public git repository? Yes, you can, using git filter-branch. Here is how – https://help.github.com/articles/remove-sensitive-data. It worked! I successfully rewrote the history! My past commits don’t have those file(s) anymore that had my private api keys.
Next, I made sure that I don’t make this mistake again –
1. I added a new file ApiKeys.cs to the project.
2. Exposed the api keys as constants from a static class in this new file.
3 Added ApiKeys.cs in .gitignore file, to prevent this file from being committed to the repository.
4. Added instructions in ReadMe.txt for external developers to include their own keys.
This is not an ideal solution. If you are using a continuous build server, this technique will obviously not work. The code will not compile as-is, a file must be added to the project before it will start compiling. This works for me for now, but I am still looking for a better solution.
Favorite Excel Keyboard Shortcuts
I am a big fan of keyboard shortcuts. Here are some of my favorites keyboard shortcuts in Excel.
Solution to the fetch puzzle
Here is a brute force solution to the fetch puzzle.
The puzzle goes like this – You have two buckets. A 3 gallon bucket and a 5 gallon bucket. Buckets are not marked or graduated. You are to fetch 4 gallons of water in a single trip to the river. How will you do it?
Basically, at each step there are three possibilities :
- You can fill a bucket.
- You can transfer water from one bucket to the other one.
- You can dump out the water from a bucket.
In this brute force solution, I try each one of these steps and then try all three again after each one of the previous steps. And on and on until I get the required amount of water in one of the buckets.
Check it out. Source code is on my github repo – https://github.com/ashtewari/fetch