O’Reilly publication on iPhone App Store
If you are interested in eBooks and don't mind them being non-portable, you can look at the growing items from O'Reilly on iPhone App Store. Just search for "oreilly" on iTunes and you'll find over 130 eBooks. By non-portable I mean you can only read it on iPhone / iPod touch and you cannot transfer it on your computer or any other device. The prices are mostly $5 that make them a good deal compared to the average of $40 in print format. Some good titles are Learning WCF and Myths of Innovation.
I found it when I was browsing O'Reilly's web site to purchase "RESTful .NET" eBook which is available for $10 (compared to $40 in print format). Unfortunately RESTful .NET is not available on App Store but at least I could get it directly from O'Reilly in 3 non-DRM formats: mobi, PDF and ePub.
I hope more publishers will join O'Reilly to publish their books on App Store. I searched for Manning, Apress, InformIT but didn't find them there. Am I missing any publisher of technical books on iPhone App Store? Let me know.
Do you really need Flash for that?
Flashback: When I started my web development experience back in 2000, it looked so cool to use Flash for anything. Great looking rounded and shiny buttons, polished frames and rolling images. Some components were even built into DreamWeaver to make our lives easier. Browsers weren't powerful enough to create such effects in JavaScript.
Today: I received an email from The Movie Network on my iPhone that asked me to check out their redesigned web site. Alright. Considering that I canceled my subscription from The Movie Network with Rogers and using zip.ca instead to rent movies, I don't care much but I liked to see how the new web site looks. I tapped on the link and BAM! There's a big Flash in the middle of the home page staring right at me. Well, iPhone doesn't support Flash and neither does any other mobile browser so far as far as I know. So all I see is a blank area with a message that asks me to install Flash player. Sure let's tap on that link!
I went home and checked the web site. What is in that middle part? Just a good looking image selector. Did they really need Flash for that? NO, THEY DIDN'T! The same thing could be done using a JavaScript library like jQuery with little coding. The same goes for MuchMusic.com and MTV.ca and it's a pity that such big companies in Entertainment industry never thought of consequences of their web development decisions for different browsers, platforms or even niche markets like mobile browsers which by the way is used the most by younger audience that they are targeting.
You should check out jQuery, a new kind of library for writing code in JavaScript. It changed the way I look at and think about writing code in JavaScript to the extent that I don't remember what I did before using jQuery! jQuery is now also the standard JavaScript library in ASP.NET MVC and Telerik ASP.NET Ajax UI controls.
So this goes for all web developers, please make your choices wisely when using Flash, Silverlight or whatnot. I believe the only things we cannot use JavaScript for are playing movie or music in browsers or running advanced games. Remind me if we need Flash for anything else. Even if a web site needs to have Flash in it, it's better to create two versions of web site, one in HTML and another in Flash rather than a broken one if you don't have Flash. Remember that having Flash for some is not a choice, it's a limit in browser or platform (such as iPhone).
An example of a good image rotator is Image Cycle Plugin for jQuery. This is just a sample of what is out there for creating web sites Flash free. If you don't believe in what browsers are recently capable of, I invite you to watch this long but great and mind blowing movie that demonstrates Google's upcoming new online communication and collaboration tool: Google Wave.
Refactoring is a grossly abused term
I always admire Jeremy Miller for his straight talking and kin posts. This is one of my favorites. I recommend everyone to read it.
Refactoring is a grossly abused term. Refactoring is improving the structure of existing code while maintaining the same functionality, hopefully in a disciplined manner backed up by automated tests. You use refactoring to remove little code smells as you go and bigger refactorings to remove duplication and enable new changes. Telling management that you're just doing some refactoring to cover the fact that you're really doing an architectural rewrite is just plain lying. Shame on all of us who've ever played a shell game with "refactoring." One more thing, the phrase, "do it quick now and you can just refactor it later" makes my blood boil.
If your unit tests are regularly taking longer than 10 minutes, you probably need to rethink your approach and look for a different way. Long unit testing cycles and/or needing the debugger quite a bit are an indication that your code may not be cohesive or loosely coupled.
The simplest thing that could possibly work isn't a license to hack.
Read the rest of the article here: Lots of Provocative Thoughts from Sam Gentile
Compare and Review Free .NET Object-Relational Mapping Tools (Part 2)
This is the second post in a series to find an ideal O/R mapping tool.
The best place to start was MyGenerations.com. MyGeneration is a free code generator and O/R mapping tool. Their own O/R architecture is named dOOdads. Unfortunately this nice and powerful tool doesn't support .NET 2.0 but they are on track and released alpha version of MyGenerations with .NET 2.0 support about a month ago. Based on their Roadmap the tool would be released sometime near mid 2007 (I know, it's pretty late) but this was off the topic now. The point is that MyGenerations supports a few O/R tools that is a very good start to look for some solid selection.
The next source is SharpToolbox.com. SharpToolbox contains a very comprehensive list of .NET components and tools. It's sister site for Java developers is JavaToolbox.com.
I couldn't believe my eyes! More than 25 free O/R tools listed here.
I googled to see if I can find some place that has a list of .NET O/R tools and voila! I found this:
How-To-Select an Object-Relational Mapping Tool for .NET
This page is not exactly the ultimate answer to all of my questions, but rather a list of many O/R tools and a brief description about each.
So by looking at these two sources and hand picking based on my requirements, I came up with this list of tools:
- NHibernate
- dOOdads
- Gentle.NET
- EasyObjects
- ActiveRecord
- iBatis
- Codus
- .NET Data Access Objects
- Grove Develop Kit
- Neo
- NPersist
- OJB.NET
- ORM.NET
- Pragmatier.Persistence
- Retina.NET
- Sooda
The other tools that where free and I took off my list either have been discontinued or haven't been updated for more than a year from their authors.
So, my next step would be looking at each of these tools one by one and coming up with a list of candidates.
Stay tuned!
Compare and Review Free .NET Object-Relational Mapping Tools (Part 1)
I'm trying to find the best .NET Object-Relational Mapping Tool/SDK. It's impossible to find the best tool if you don't have any objective and wishlist, so here's what I seek in such a tool:
- It shall be free.
- Business Entities shall be seperate from Business Service (Business Logic Layer)
I hate when I see business entities are combined with Data Access Layer or Business Logic Layer. In my ideal tool Business Entities are only a bunch of dumb getter/setters (the same as beans in Java). What I don't want to see is that my Address class contains all properties along with Save, Load, Filter and a lot more functionalities in one class. - It shall support multiple RDBMS (MS SQL Server, MySql, Oracle...)
- It shall not introduce any black box dependency in my code, meaning no assembly file that I have to depend on.
- No dependency to DataSet or Strong-Typed Datasets whatsoever.
- Extending the O/R mapping shall be easy. I want to avoid generating a bulk of generic non-sense code where it cannot be extended. In case of adding new tables/objects I don't like any part of my code to be overwritten by newly generated code by the tool.
- Transactions, paging and caching would be nice to have features.
- Nice to have object oriented query language.
- I prefer if it supports stored procedures for CRUD.
- I like it to contain a utility to map tables to classes, configure and generate code.
- The least dependency of output code to O/R tool is desired.
- .NET 2.0 shall be supported by the tool. Generics? Sure, why not!
I'm not sure if I can find a tool that can cover all my wishes. For example, having object oriented query language feature and at the same time supporting stored procedures, or multipe database support and stored procedure support are sort of features that are hard to have together in the same tool. I'm just listing my wishes and what tool does the best job to make my dreams come true.
Anyways, I'll update this post in case I think of new points or wishes.
In my next post I'll list all the candidates and start analyzing them to find the best tool that fits my needs.
Taking a few lessons from Open Source projects
These principles, if adhered to, will help lead to success on any project, open source or proprietary. These principles are:
- Tell the truth all the time
- Trust the team
- Review everything, test everything
- All developers are created equal
- The fastest way through the project is to do it right
Read the whole article by Andrew Stellman, Jennifer Greene, authors of Applied Software Project Management
ONLamp.com -- What Corporate Projects Should Learn from Open Source
Your code might not be as good as you think it is
"I don't care how good you think your design is. If I can't walk in and
write a test for an arbitrary method of yours in five minutes its not
as good as you think it is, and whether you know it or not, you're
paying a price for it."
An article from Michael Feathers the author of "Working Effectively with Legacy Code".
Test-Driven Development in Microsoft .NET: A review to the book.
I had a chance to borrow the book and read it. Although it has been a while since I read the book but I dare to say that it is a very poor book. This is one of the books I don't recommend anyone to even look at it because it's completely misleading on the subject.
- The book is working on a very tedious, long and boring example and explaining it all over the book. Most of it related to data access layer and almost over doing what TDD is all about: Simplicity.
- The book is full of examples of code. For this subject I believe that the patterns and practices are far more important than what this book presents. Presenting examples based on the practices are what I'm looking for in a book of this subject.
- TDD is all about abstraction, interfaces, loosely coupled development, dependency injection, mock objects, refactoring and up-front and on-demand design. I was surprised that some of them are compeletly ignored in the book. For example there's no mention of mock objects and dependency injection in the book, which are the most essential parts of the TDD and the most unknown part of the TDD to the developers.
I personally owe most of my TDD knowledge and experience to Jeremy D. Miller and his precious articles on this subject.
Do you know any software related to automatic build?
"Do you know any software related to automatic build.? And by that, I mean a software that really automates the process, not just a scripting software."
This is a question that a dear friend of mine asked me and here was my answer:
I was trying recently CruiseControl.NET, though didn't start to use it officially yet. It's a bit tricky to understand since it's open source and doesn't have a very detailed document but you can figure out how to use it after a couple of days. The other free one which is simpler that CC.NET is Draco.NET which apparently has UI [I'm not sure of this] but is not as powerful as CC.NET is.
Besides these free ones, there are a couple of paid softwares, but I guess you might already have had some search one those.
Here are the links:
CruiseControl.NET
Draco.NET
And here's a link that might give you some ideas of how they work.
Continuous Integration article from TheServerSide.net
Test Driven Development
Almost every developer adopted to Agile processes specially XP (eXtreme Programming) fans know that: You better (official meaning: have to) write unit tests first! This means that you should write test code first before implementing the code.
When looking for some materials about unit testing on the internet, I discovered an invaluable web site that is now one of the primary sites I visit everyday: TestDriven.com
There's something named Test Driven Development (TDD), which I assume has the same concept of three steps in coding as mentioned in TestDriven website: wirte test, write code, refactor.
Microsoft recently (Feb '04) has published a book on test driven development with .NET, still didn't have a chance to look inside:
Test-Driven Development in Microsoft .Net: Learn How to Leverage Test-Driven Development in the .Net Platform
I found this book (though I didn't read it): IEEE Standard for Software Unit Testing which has been published back in 1987!
SCRUM Methodology
I was going to start a full length post on how great Scrum is and how it improves software project development process. But I found a very valuable document in Agile web site which has an overview on Scrum. The link is at the bottom of this posting.
I worked on one project with Scrum methodology with a team of less than 10 people and it worked great. I'll shortly give you my understanding and perception on that; following with links to some related documents.
In short, Agile process is basically a methodology or attitude of implementing and developing projects that may change based on ongoing change of requirement coming from customer during the process of implementing software. XP (Extreme Programming, Scrum and other related methodologies are based on Agile process. Check this out as an excerpt from first link to a document I put below: “In general, agile processes value code production more than plan-driven processes do. In a plan-driven process, developers might treat Unified Modeling Language designs and other noncode items as first-class artifacts. In an agile process, however, these items usually exist only to support the coding activity.“ Pretty weird for people not used to Agile process!
Scrum methodology works great for teams of less than 15-20 people. It's consisted of sprints which is defined as a monthly cycles of software implementation where the team commit on working on potential shippable software at the end of each sprint. Every day team members meet briefly to discuss about their daily tasks and any obstacles they may have during the day and their plan for the rest of the day and until next day's Scrum meeting. At the beginning of each sprint team members gather to discuss about their plan, schedule and task assignment for next sprint. Finally at the end of each sprint, team gets together to review the previous sprint and show the product owner a demo of what has been done during last sprint (sprint backlog). Even though there could be changes in requirements, team never changes its plan and objective during the sprint but adds requirements and unplanned (possibly forgotten) tasks to sprint backlog which is a list of tasks to be done during project timeline.
You can read more details from the following invaluable documents:
Agile Alliance (The official web site of Agile Process):
Control Chaos (Home of Scrum)
Get Ready For Scrum (excerpt from Agile Software Development with Scrum book)
Introducing an Agile Process to an Organization
Scrum again!
I digged in some of Scrum related links and found the following link which has a very comprehensive overview of Scrum.
Gosh I hoped everybody knew this about n-tier development!
Don't assume that you are a simple developer and this is just for more experienced developers and masters. Learn now and avoid the mess! I have seen many of developers that declare their code as the cleanest and the most perfect, but they manipulate database from ASP.NET (or even ASP) pages, don't know what code-behind is, put ASP.NET controls' event calls and declerations in aspx pages, and don't even create a ShoppingCart class for their e-commerce application.
I feel better now!
Visual Studio 2005 Product Line
I was wondering what is the difference between Visual Studio Express, Professional and Enterprise Editions. So I asked it when I saw the news in Vs2005new's WebLog about release of its Beta 1.
Kent Sharkey answered my question and you can see the comparison chart here. Well, not very surprised, but disappointed that Express edition is not good enough for a seasoned developer as it lacks lots of cool features of Pro and Ent editions. I hope Microsoft would do a smart move on pricing unlike what they did for 2003.
Don’t miss Maxthon!
I was surprised by the new release of MyIE2. It's been renamed to Maxthon, a better and clear name. In case you don't know what Maxthon is, it is an IE based browser. Technically it is a shell for IE, a browser created by IE Control. This is one of rare replacement applications I am using for more than awhile and I like it so much that I didn't dare to look back to days I used IE!
Now what's so new in Maxthon? From my taste, the most amazing *new* features that makes Maxthon different from any other Browser out there is:
- When you click on a link which opens a a new popup window, besides its better management of ad blocks, it opens the the new page in a custom sized window. In the previous versions formerly named MyIE2, it opened the page full size like any other tab page based browsers, so it doesn't mess up the page anymore.
- It has tons of free plugins, skins and sidebars.
And compared to its old versions, it now supports Unicode. This is what I wished to be in my favorite browser.
You can see the full list of features in Maxthon web site.
How to buy a laptop
This is a guide where you can find excellent tips to choose a good laptop.
Sony’s Clie discontinued!
Sony decided to discontinue its Clie PDA in American Market. It will only continue its market in Japan. Which company would be the next??
Anyway, I think Sony made the best PalmOS based PDA in the market.
Wikipedia, Wiktionary, Wikibooks and XML!
In case you didn't notice in my last post, based on Wiki concept there is a cool reference web site Wikipedia which contains a lot of free information including an encyclopedia, Dictionary, Books and more.
Amongst books I found something interesting that may be in your interest too: XML, A technology for managing data exchange. I took an overall look into it and found it useful.
WikiWiki! What is Wiki?
First let's see what Wiki is. In simple words, Wiki is a collection of web pages that allow everybody to contribute writing and adding content to them without password or permission.
So let's say you start a Wiki about Investment. You can setup different pages, one about Stocks, one Mutual Funds and so on. You start adding content adding definitions to each page. Everybody who visits your pages can add content and their opinions to it by switching to edit mode, adding text and then save it. This is just a very basic suggestion of practical use of Wiki.
You can find even more comprehensive information about Wiki in Wikipedia.
Now that you know more about Wiki I feel more free to refer to a few sites I adore which has pure contents and are based on Wiki. However this doesn't mean you need to learn ins and outs of Wiki to read web sites based on Wiki. Just wanted you to learn more!
ZVON – The Guide to the XML Galaxy
zvon.org is a site loaded with tutorials by example in different languages and formats (xml with css / xslt, pdf...) for XML and all related technologies. You can find a lot of online and downloadable references there too.