“Geekonomics”
It’s not “Freakonomics”, it’s “Geekonomics”
I was listening to Carl Franklin on his podcast “The Tablet Show” and at “mile marker” 26:00 he gave the audience his view of Economics
In terms of promoting the value of the individual that’s essentially what this new economy does. If forces us to say "what can I do with myself that will make me unique where there isn’t anybody else but me" … and that’s how I make myself valuable maybe it’s the combination of skills that I have (that are rare or specialized)
I would add to Carl’s comments these things…
- I would argue that you need to define the domain of this new economy as limited to building apps for the mobile device or businesses that are related to that.
- The next question is how would do you monetize what it is you want to do once you figure out your "special purpose".
- Making a living on 1$ profit per app sales seems highly unrealistic, so the point of the app is similar to OSS. What your interested in doing is making yourself (i.e. your talents) addictive and in demand. With that you will have a customer base who will directly or indirectly allow you to monetize your talents.
Related link: The Rise of “Developeronomics”
Technology I used for www.MyHebrewBible.com
To show off my Geekness, I wanted to list the things I used to create this website.
- Technologies
- ASP.Net 3.0 with ASP.NET MVC 3 Tools Update
- I really dislike web development. To me JavaScript, JSON and JQuery = barf. In the past I would have but HTML and CSS in the same barf bag but I have come to realize that it behooves me to learn these technologies…still need a lot of work in the CSS arena however. With that said, having ASP.Net 3.0, Razor and EF makes developing a basic web site bearable…it even generates Html.DropDownList (Homer says Whohoo!).
- Entity Framework 4.1
- The first web site I built I used LINQ to SQL but with this one I decided to kick it up a notch … I still need work on groking EF SQL though. Since I’m a database developer “Database first” is just a no brainer for me. I used Julie Lerman’s video where she shows using DbContext to generate the code, but what I haven’t experienced is what’s it like without DbContext. Also I still haven’t figured out all the data annotation stuff i.e. where to put it and when does this come into play (design time or run time). All the new videos and content is all about code first, which I could care less about.
- Sql Server Compact Edition 4.1
- I have three separate SQL CE databases in my application. There are limitations e.g. no views which I could have used to get around my EF SQL deficiencies, but otherwise pretty cool.
- ErikEj SqlCe Membership
- This is cool because I can have my membership functionality cake and eat “I don’t need to pay for Sql Server” it.
- ELMAH 1.2
- PagedList
- ASP.Net 3.0 with ASP.NET MVC 3 Tools Update
- Tools
- SQL Compact Toolbox ver 2.0
- Microsoft Visual Studio 2010 Web Developer Express
- I think that it’s pretty cool that I can get this web site developed with a free version of Visual Studio.
- SqlSpec 6.2
- I call myself a database developer so to me that means I’m always going to have a database. Over the last couple of years when I start a project I immediately start setting up an “SqlSpec Project” to compliment my development work. I want my documentation to assist me early on in the process and not have it be some end of project after thought.
Features To Implement
Here are things I might want to implement many of which are pie in the sky.
- Features To Implement – To Do
- Use IIS Express
- Caching
- Look into ASP.NET Web Helpers Library
- Make it Open Source
- Port to Orchard
- Port to LightSwitch, maybe CSLA.
- Create a DSL (Domain Specific Language) for scriptures, or maybe use Fluent API?
- Get Elmah to work via the Elmah Controller and not elmah.axd
- Better underestand and exploit Routes
- Better underestand and implement an IOC
- Better underestand and EF Models so that I can more effectively desribe the domain.
- Better underestand and use Unit Testing
Resume Questions, From Scott Hanselman
I thought I would try out these questions and see what kind of question I come up with.
Here is his original blog post.
Here’s what I have so far.
- What is something substantive that you’ve done to improve as a developer in your career?
- Generally speaking I’ve always been a self-help guy, so I’m always trying something new with almost every opportunity I can. Do you want to know a list of books I’f read, blogs I frequently visit, technical videos I’ve downloaded yada yada yada. how about the fact that I’m blogging about this using Windows Live Writer and making an attempt to answer the questions.
- Would you call yourself a craftsman (craftsperson) and what does that word mean to you?
- Implement a <basic data structure> using <some language> on <paper|whiteboard|notepad>.
- What is SOLID?
- Some guy like Dr Bob (or something Bill?) has been on Hanselminutes taking about this…ah here and here it is and yes it was Bob as in Bob Martin. Googling now…SOLID.
- Why is the Single Responsibility Principle important?
- Every object should have one and only one responsibility
- What is Inversion of Control? How does that relate to dependency injection?
- IOC frameworks allows you to do DI, which allows you to do better unit testing.
- How does a 3 tier application differ from a 2 tier one?
- 3: UI/Business Layer/DAL UI, 2: UI / BL + DAL
- Why are interfaces important?
- It allows for clean separation of objects. When you program to interfaces you are independent of it’s implementation (Separation of Concerns)
- What is the Repository pattern? The Factory Pattern? Why are patterns important?
- It cleanly separates the DAL from the others.
- Factory pattern is what DI uses. The object doesn’t instantiate itself, the calling code does this and hands it over to the class.
- patterns are important because, amongst other things, it allows programmers to think efficiently and effectively at a high level.
- What are some examples of anti-patterns?
- To me this is a misnomer. anti-patterns are still patterns but bad patterns. If you allow me to get religious for a second, the anti-messiah is not so much 100% against or 100% in contrast to the messiah but rather he is the “instead” of messiah. If you seek redemption then the instead-of-messiah is not what you want and therefore it is a bad thing. If you habitually do things wrong then you have developed a pattern that is bad. A good pattern is similar to the good messiah and, in contrast, a bad patterns is similar to the bad messiah.
- Who are the Gang of Four? Why should you care?
- These of the fathers of patterns and I care because knowing good patterns leads to be writing effective code
- How do the MVP, MVC, and MVVM patterns relate? When are they appropriate?
- They relate because they all deal with the Model layer (DAL) and the also relate in a similar but in their own unique way how to handle the UI and Business layer interaction. E.g. MVP works good with WPF, MVC works good with Web and MVVM works good with SL.
- Explain the concept of Separation of Concerns and it’s pros and cons.
- It’ good because it’s a level of abstraction that allows you to do things like unit testing. With this separation you can implement Single Responsibility
- It’ bad because it’s a level of abstraction that you have to think about and implment and if you don’t care about things like unit testing then it can be viewed as being in your way.
- Name three primary attributes of object-oriented design. Describe what they mean and why they’re important.
- Describe a pattern that is NOT the Factory Pattern? How is it used and when?
- When the object itself “new ups” itself.
- You have just been put in charge of a legacy code project with maintainability problems. What kind of things would you look to improve to get the project on a stable footing?
- Follow the guide lines found in Roy Osherove’s book on unit testing, specifically the part about dealing with legacy code.
- Show me a portfolio of all the applications you worked on, and tell me how you contributed to design them.
- I would show them my various .chm files that I have created that documents them.
- What are some alternate ways to store data other than a relational database? Why would you do that, and what are the trade-offs?
- Azure has for example a Table Storage. This is simple compared to SQL Azure because there is much less over and it scales very well.
- Explain the concept of convention over configuration, and talk about an example of convention over configuration you have seen in the wild.
- All frameworks attempt to be extensible and they can do that by e.g. conventions or by configurations. A framework with an attitude is one that implements convention. If you like that attitude then it can do a lot of work for you. Configuration on the other hand has no opinion, but that means you have to inject your opinion via configuration. ASP.Net MVC is an example of a framework that tries to implement convention over configuration.
- Explain the differences between stateless and stateful systems, and impacts of state on parallelism.
- A RESTifarian architect thinks in terms of stateless. Their argument is that this is how we find the web world that we live in i.e. HTML lens itself to a stateless solution. stateful is an attempt to make the smart client paradigm work on the web. I’m guessing that stateless more easily allows for parallelism.
- Discuss the differences between Mocks and Stubs/Fakes and where you might use them (answers aren’t that important here, just the discussion that would ensue).
- I would have to refer to Roy Osherove’s book “The Art of Unit Tesing”. I remember him be very clear that there is a difference between a mock and a Fakes.
- Discuss the concept of YAGNI and explain something you did recently that adhered to this practice.
- “You Aint Gonna Need It” is the answer to over engineering a solution. It embraces the concept in TDD, Refactoring and Agile in the sense that you want frequent encounters with the end user and the process goes along. If it turns out that the feature that you think the user may want, then YAGNI says what until you get confirmation from them.
- Explain what is meant by a sandbox, why you would use one, and identify examples of sandboxes in the wild.
- A VM? maybe an Azure solution?
- Concurrency
- What’s the difference between Locking and Lockless (Optimistic and Pessimistic) concurrency models?
- A looking model would be good e.g. with a OLTP where as lockless with be better with OLAP
- What kinds of problems can you hit with locking model? And a lockless model?
- A poorly designed locking model will cause much contention of the data and (I would imagine) won’t scale well. A lockless model on the other hand can’t guarantee that a particular row in the DB can’t be locked.
- What trade offs do you have for resource contention?
- How might a task-based model differ from a threaded model?
- I’m guessing that a task-based model would be WWF? A problem that cries out for a WWF solution would be good (with regard to threading) because it would use less threading…this sounds good to me.
- What’s the difference between asynchrony and concurrency?
- Time to
GoogleBing - Are you still writing code? Do you love it?
- I love creating solutions to problems (specifically my own) which therefore can definitely mean writing code.
- You’ve just been assigned to a project in a new technology how would you get started?
- Bing
- How does the addition of Service Orientation change systems? When is it appropriate to use?
- What do you do to stay abreast of the latest technologies and tools?
- Podcasts, blogs
- What is the difference between "set" logic, and "procedural" logic. When would you use each one and why?
- Set: RDBMS, LINQ to everything, F#; Procedure: IMS, COBOL. I would use the former now and if I got zapped back to the 80’s I would use the latter.
- What Source Control systems have you worked with?
- Vault…love to have spent time with VS Team
- What is Continuous Integration? Have you used it and why is it important?
- Allows for frequent builds which gives quick feedback to the state of your source code.
- Describe a software development life cycle that you’ve managed.
- How do you react to people criticizing your code/documents?
- I can be defensive if they are not respectful on the other hand I would be a fool not to embrace constructive criticism. This is social skill that is an art.
- Whose blogs or podcasts do you follow? Do you blog or podcast?
- Scott Hanselman and Hanselminutes; DNR, DNRTV, RunAsRadio, Yet Another Podcast, Scott Gu, Rocky Lhotka, many others.
- Tell me about some of your hobby projects that you’ve written in your off time.
- Personal Scripture Commentary, see My Hebrew Bible (same thing at My Parasha).
- What is the last programming book you read?
- LINQ in Action
- Describe, in as much detail as you think is relevant, as deeply as you can, what happens when I type "cnn.com" into a browser and press "Go".
- Meh, I’m not a web guy, I fancy myself a DB Developer.
- Describe the structure and contents of a design document, or a set of design documents, for a multi-tiered web application.
- What’s so great about <cool web technology of the day>?
- SL allows me to do client / server technology which is what I want, but deliver it via the web.
- How can you stop your DBA from making off with a list of your users’ passwords?
- ?
- What do you do when you get stuck with a problem you can’t solve?
- Take a nap.
- If your database was under a lot of strain, what are the first few things you might consider to speed it up?
- Look at the design of the tables that are getting hit the most and re-evaluate how their indexed. See what I can do to off-load some of the load to a DW e.g.
- What is SQL injection?
- The ability to easily allow sql to be executed (e.g. bad sql like drop database x) with little or not constraints on the sql being performed.
- What’s the difference between unit test and integration test?
- Unit tests test a specific piece of code that has a single responsibility. integration test is the next level up where in you are testing a set of these units.
- Tell me about 3 times you failed.
- There are numerous times where I failed to meet a project on time, and I attribute this a lot to not be a good TDD/DDD type of developer. I’m at the point where I can write good testable code but not yet master how/what to test and with what testing frameworks. Failing is good (that’s how we learn) but the key is to fail early.
- What is Refactoring ? Have you used it and it is important? Name three common refactorings.
- It is the ability to change the code so that is more readable and concise without changing it’s functionality. It’s important because with refactoring (hopefully along with the code being well covered with a large test code base) you can become aggressive with making your code better and current with the business needs and which keeps your application from being categorized as legacy code. I have definitely used it but would like to be fore comfortable with refactoring tools like Code Refactor ( this would happen if I was better a writing actual unit test).
- You have two computers, and you want to get data from one to the other. How could you do it?
- What’s the name of the service that allows for massive upload…I forget.
- Left to your own devices, what would you create?
- I would implement my “Personal Scripture Commentary” / aka “My Hebrew Bible” and become more expert at Orchard and/or a master of building Wikipedia like solutions for the things I want to write about.
- Given Time, Cost, Client satisfaction and Best Practices, how will you prioritize them for a project you are working on? Explain why.
- What’s the difference between a web server, web farm and web garden? How would your web application need to change for each?
- Meh. web stuff again.
- What value do daily builds, automated testing, and peer reviews add to a project? What disadvantages are there?
- They ensure that your application does not become the dreaded legacy application. Disadvantages is that there’s a lot of work and required expertise to pull this off.
- What elements of OO design are most prone to abuse? How would you mitigate that?
- When do you know your code is ready for production?
- When I’ve tested it, got a peer to review my solution and sign off from the end user.
- What’s YAGNI? Is this list of questions an example?
- asked and aswered
- Describe to me some bad code you’ve read or inherited lately.
- It was code that no concept of a DAL and so my task of implementing a Log4Net logging solution made it, amongst other things, unnecessarily hard.
Your thoughts? I’ll add good questions from the comments throughout the day.
OLTP / OLAP Database Design and Log Shipping Question
Below is an email and response to Roger Jennings about a database design Question. I am posting it on my blog to make it public
Hi Roger,
My name is John Marsing and I am a database developer and a I had a question that I had been thinking about so I thought I would send you an email as I respect your views on this matter. I have found many times, that an application starts out as one database with OLTP functionality and some reporting functionality merged together. During it’s life, the reporting functionality starts to increase so an OLAP is created. it becomes useful to remove many of the reporting functionality out of the OLTP and put that in the OLAP database, because the two designs of the databases are in conflict with each other. The idea behind the OLAP/Reporting database is that you populate it periodically with the data from the OLTP, like on a daily basis for example.
My thought was how hard would it be to use SQL Server Log Shipping for every transaction that occurs in the OLTP to immediately populate the OLAP database. That way the reporting database for all practical purposes would instantly be up to date which would make the report user’s happy. I suppose you could also use the OLAP as another backup of your OLTP.
I said I call myself a database developer and not a DBA, so maybe the plumbing to do this is not a practical thing to do, or maybe I just hadn’t heard of the technique before. I would be interested in your response,
Thanks
============================================
RESPONSE
============================================
John,
Sorry I took so long to respond.
The advantages that I see to using log shipping to generate the source DB
for is to minimize traffic on the production OLTP database, use smaller
tables for better performance, and establish firm cutoffs to generate
aggregates. What’s not clear to me at the moment is how to handle
retroactive edits to OLTP data. In reality there shouldn’t be edits to
invoices, as an example, but certainly could be to sales orders. I suppose
that retro edits could be handled out of band by detecting that the
original entry date was outside the time span of the current log shipping
table.
In one of my pre-OLAP projects, a major semiconductor manufacturer running
MVS on a giant Hitachi mainframe would roll up the aggregates to DB2 in a
batch over the weekend. Eventually it took about 40 hours, which was a bit
scary.
–rj
NUnit and SQL Server Reporting Services (SSRS)
Below is an email and response about a question regarding trying to use NUnit and SSRS. Posting it on my blog to make it public
I have a question regarding how to use NUnit to test my custom code that I have created in a class library and that I use in a SQL Server Reporting Services report (SSRS).
SSRS requires that I reference shared functions e.g. “Shared Function GetSQL()…”
my problem is I don’t know how to test my code using NUnit unless I change my code to public e.g.
“Public Function
GetSQL()…”.
Hope my question makes sense, as I am new to NUnit and to VB.Net
Response from Bill
This is a problem I encounter frequently and there are 4 solutions (that I’m aware of). I’d be interested to hear other alternatives that might work too! Here are the approaches I’ve used:
1.) Go ahead and make the methods public.
2.) Use Reflection
3.) Derive a subclass that exposes public methods that just delegate to the ones you’re actually testing. Name the subclass something like “DoNotUseUnlessDoing UnitTestsFoo” to gently discourage others from misusing the subclass.
4.) Implement an interface, “IDoNotUse …”
#2 gets pretty tedious which is bad because you don’t really want to make writing tests any harder than it already is. #1, #3, #4 open up your class to abuse and both #3 and #4 add to your deployed code base due to the delegation code required. Pick your poison!
Regards,
Bill
=============
‘ Here is a code example of what I am talking about
Imports System
Imports Nunit.Framework
<TestFixture( )> Public Class GetSQL_Tests
Public Sub New()
MyBase.New()
End Sub
<Test()> Public Sub ConcatenateInTest( )
Dim SQL As clsSQL = New clsSQL
Const strSQL As String = “SELECT CompCode, AcctCode, AcctName, PostingDate, Amount FROM “
Dim strWhere As String
strWhere = “rqryGL_Detail_ 03 Where CompCode = ‘LAC’ And AcctCode _
= ’11000′ And PostingDate> =’7/1/2006′ And PostingDate< =’7/7/2006′ _
Order By CompCode, DivCode, AcctCode”
Assert.AreEqual( strSQL + strWhere, SQL.GetSQL(“LAC”, “*”, “*”, “*”, “11000″, “2006-7″, “7/7/2006″))
End Sub
End Class
leave a comment