Friday, March 27, 2009 - This may be a really dumb thing I've just done - but bear with me because I think it makes sense. I knew this point was going to come when I first started the MVC Storefront - the point where I'm no longer building "an MVC sample app" and I change directions to build a flexible, pluggable Open Source community application. So I decided to mark the occasion by changing the application name from MVC Storefront to Kona. This screencast is all about that change and what's become of the MVC Storefront.
What's Kona?
Aside from being one of the most beautiful places on the planet with one of the best brew fests EVAR, Kona is the name I chose one late night when thinking this whole thing over. Originally I wanted to go with "Hilo" (the 2nd largest city in Hawaii and also a hub of
commerce for many, many years in old Hawaii) but everyone I showed it to kept asking me what "Hi Low" was all about. Indeed it did seem confusing - so I went with Kona.
Resuming the Screencasts
One thing I've really enjoyed was being able to screencast the "learning process" as I built out the MVC Storefront. I can easily say that I have learned more over the last year than I have *ever* in my career. In fact I'll say I learned 5 times more - it was a ton of fun and I don't want to stop now!
There are so many areas to cover that I think would be interesting - such as:
http://www.codinghorror.com/blog/archives/000660.html
One more thing, you talk a little bit fast. Could you please solw down your talking speed a little bit, which would help foreigner's, like me, better following you :)
Hope to see the next screencast soon
I am also willing to try something other than Source Safe. I have to say that I have no real complaints with Source Safe. It seems to work as advertised and I find it every easy to use. That doesn't mean that something else might be even better to use.
As far as DB schema changes, I know Source Safe won't help. I have heard that this can be done with the Team system, so perhaps TFS will do it. I have access to TFS, but haven't used it yet. I will try it.
If I have a system I know every little detail about, then I know the ramifications of changes and what needs to be done to re-deploy. I have to say I don't know enough about your implimentation yet to know how any customizations, like new pages I make might interact with changes you make. To me, that is a bigger question than which source control solution to use. I think I need to know this before I could ever actually deploy a system based upon your solution. Thanks!
trying to save your soul :). Source Safe is *EVIL*. Plain, pure evil and you
should run, at very high speeds, from anything to do with Source Safe.
Seriously. I'll promise you this: upgrade your source control system and
you'll be a hero. Subversios (free), TFS - Whatever! Back away from Source
Safe... slowly... no sudden movements... it will eat your face. If you're
employer says "use Source Safe or go away" then go away. It will put you in
your grave a good 10 years before your time.
That said :)... DB schema changes - needs to ripple to the team right? How
does Source Safe do that? There, my friend, is your problem. If I may be so
bold - please accept this invitation to join the rest of the development
community in 2009. I know that 1994 might be comfortable and fun, but 15
years has bought us a lot in terms of source integration and team coding ...
I really just am not sure how I can explain it.
--------------------------------------------------
The point I was trying to make is that when I am in charge devloping or mainting an application, I know what changes need to be made, so I know if the database schema needs to be changed and what modules need changing. However, with your solution, i you make some changes, I probably won't have a clue about what exactly has changed. If I have create some new pages or modified some, will have have to start all over and add my changes to your updated solution? Pherhaps it is my lack of understanding on how the whole system works and the pieces that relate to one another that is causing this confutsion on my part.
I'm looking forward to the upcoming screencasts.
Bill
use Source Safe?
There are ways to do this - in fact I'll cover it in my next screencast.
With my usual web development, everything is in Visual Source Safe and I have a working directory that I can test things in. Once I make somce changes and thest them, I check them in to VSS, and then just deploy the web site.
That works because I know all of the changes that have been made. I will I know if a change has been made in the system, including the database and how do I then merge things?
Thanks again!
end, it comes down to selling stuff. We, as developers, have no idea what
our clients will do to sell things - how they want a page arranged, which
product appears where, etc. Therefore I'm concentrating on the most
important thing (in my mind). In the end all the tech stuff doesn't matter
if products don't move...
I really liked the mvc storefront screencast series because every screencast added a little part to the storefront application. now with Kona you added a really big chunk with templates / cms and all that. What i was trying to say is that i would like to see the changes a bit more explained in a few screencasts then adding new features (ok everyone likes new features but maybe both then? ;) )
what i was trying to say with my comment on the cms part was that i really liked the things you explained about how you think webstores/commerce applications should work with some really good examples showing amazon etc. Aren't you losing focus on the store application with the cms and all because i really liked the tips about how to build a commerce application because i think you really have some business knowledge about this and i would like to hear more about it :)
Does anyone else have this problem on checkout:
Exception has been thrown by the target of an invocation.
if (method != null) {
result = (TResult)method.Invoke(foundPlugin, input);
Line 13:
Line 14: //make sure there are more than one item
Line 15: result = order.Items.Count > 0;
Line 16:
Line 17:
I just found this article, Results-Based Interaction Design (http://net.educause.edu/ir/library/pdf/EQM0847.pdf) that talks about a new approch to web sites. It talks about education web sites, but it could be eCommerce sites. Once is selling an education, the other products.
I plan to develop an eCommerce site based upon Kona and I an interested in incorporating some of the suggestins in this article.
Thanks Rob!
This is really good stuff.
Jesse Foster | jf26028
"OrderReceived" hook will call "Plugins.Process("OrderReceived")" and you
should be able to chain in whatever you like - including posting to Twitter
:).
and taking you with me. I'm not here to write your apps for you, but if
you'd like to use what I've done to help - great.
Oxite is doing something a bit different than what I'm working on here.
Or do I need to install extra assemblies from somewhere?
On Mix09 you asked us to just use the application instead of to marry it. Well its pretty hard to get used to the application if everything keeps changing that much every screencast. ofcourse F# and Azure is pretty cool but isn't it better to just have the thing ready for people to use.
Also a comment on the CMS part of Kona. Aren't you building the same thing as Oxite is trying to do? I haven't looked at Oxite that good, i only know it's also build as a test application for ASP.NET MVC like the mvc storefront was started from. Maybe join your projects so some people can focus on the CMS part and you can focus on the storefront instead of all the other things you are doing now.
Geert
I would love to be able to use this as a base for my storefront application, but I can't wait for 6 months, a year, etc for it to be complete.
Thanks
Writing SQL code (at least basic, simple queries), when you have all those cool ORMs tools that just works, it's at least waste of time imho. And it really look ugly and confusing.
This new "architecture" is really something new in .net OS world and it look interesting. I didn't see anything similar on codeplex. Kinda refreshing! It almost reminds me to my php/asp days and quick and dirty solutions.
Keep a good work!
I think we are on the same wave length, it was just me not explaining what I meant.
Thanks
Yaz
to - but in general if you're testing a unit of functionality is should
isolate it and not fail because the connection to your DB failed.
Again - the tests you're talking about are integration tests, which means
"I've tested my logic and it works, now I want to be sure it works with this
system" and yes, the Rollback stuff works marvy. So does building the DB
from scratch every time.
Hopefully this makes some sense?
usually mention that and forgot to this time ;).
RE modules - it's just my messiness. Forgot to clean up that folder. And yes
- we're working on the contribution stuff now :)
Just... wow. Great work. I'm really looking forward to the future screen casts.
A couple of thoughts / questions.
1) Could you please make your video player able to blow out to full screen? Some of the cast was really hard to watch.
2) I was looking through the code and saw the stub for 'modules' and was wondering what the intended use of them was. It looked like a way to package up a set of widgets for rendering on a single page, but I wasn't sure.
3) Is there the possibility for community contribution on this in the future?
Thanks, and thanks again for the great work. I think the .Net community has such a small body of knowledge on the flexible /extendable / dynamic apps when compared to the PHP and Ruby guys, that this is like a breath of fresh air.
Paul
[Test, DataRollBack]
public void TestDataRollBack()
{
....
}
Cheers
Yaz
When do u do intergration testing? Is that a SPIKE? Where does the Intergration Test go in the solution layout/heirachy?
And like it was mentioned about, go with VARBINARY(MAX) instead of IMAGE. U said u've changed it already ... just not sure if u've gone the (MAX) path.
tests and should be done when integrating a system into your application. It
may sound nitpicky of me but it's super real-dealio important! You might
want to create a separate project for each system you integrate so that you
know it works and there are no issues.
I'm going to be a bit more "opinionated" on this one - unit tests need to be
isolated from as many systems as possible...
You are coorect, but I was trying to UNIT test create connection and it did not work because it was not finding the database. therefore any UNIT test that make a call to the database will not work
Cheers
Yaz
test harness trying to find the DB and not finding it...
In general, I'd love to see the end-user's upgrade story addressed - ways to handle database migrations (or "schema migrations" in the cloud ;), etc. That's an area that still trips me up often. Looking forward to this series.
Solved the problem by copying the Kona.mdf to C:\Downloads\MVC\mvcsamples-22681\trunk\Kona.Tests\bin\Debug\
Not a very good solution, but it works
Cheers
Yaz
I tried to UNIT test the DbCommon and it throws an exception
Here is my code:
DbCommon dbCommon = new DbCommon("ObjectStore");
DbConnection dbConnection = dbCommon.CreateConnection();
Assert.IsNotNull(dbConnection);
An attempt to attach an auto-named database for file C:\Downloads\MVC\mvcsamples-22681\trunk\Kona.Tests\bin\Debug\Kona.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.
TIA
Yaz
I really enjoyed this screencast as well as the MIX09 presentation too
thank you for all you've done.
Great series, I went to codeplex and downloaded the code and cannot find the database. There is a bak one and i tried to restore it and it does not work. Has anybody got the database that would work with the previous series.
TIA
Yaz
Can't wait to see how we can do some Azure stuff ... the db side of things gives me the scares -- i love having full access to the db with stored procs, etc.. so my little fail undestanding of azure makes me think we loose this and have to do things way differently?
Deployment issues are the _biggest_ problems for the ASP.NET product suite IMO. Especially if you have a web farm :( The new deployment stuff on the horizon looks like it will bring a tear to my eye.
Now .. to some requests for a fill-in / update screencast (yeah, I know i'm asking a lot here)
1) Explain why you're using IAggregateRoot and i think i saw an IEntity. Where did u get this idea from and how are you using it and why.
2) What happened to your 'Services' project? What happened to your Workflow project? (i'm not looked at the new code in detail, just browsed it online, @ codeplex).
Thanks Rob and keep up the positive work :)
:).
This is the perfect basis for a system a friend needs that brings community resources together to help ex-prisoners and their families as well as highlight resources she sells that complment the programs. I could use some additional content times and am happy to work on doing it.
I've done a ltt of work in SharePoint and it has "zones" like you have on pages, but then you select from a list of WebParts to add to the zones. They are sort of like the pluggins you have, in that you can add new ones (including 3rd party) without rebuilding the system. You use VS to create WebParts. Thanks again!
You just seem to amaze me with your screencasts all the time. Right from Subsonic to Kona!
This is a very interesting topic. Just keep it going.
http://www.codeplex.com/CommonServiceLocator
They have a variety of adapters which allow you to choose which IoC container implimentation you like. Then in your code when you resolve the types you use the Common interfaces to access them.
I think You should really (pretty please) consider plugging in the Wym editor (http://www.wymeditor.org/).
It's already got a nice dose of jQuery in it, and the code it produces is far better than any other free (and commercial for that matter) stuff.
It'll be a great pleasure watching this one develop in front of us...
Thanks again
Damir
I had MVC Beta installed because I had successfully opened the MVC Storefront preview many months ago. I have also switched to the Team versions of VS 2008.
I uninstalled the beta version and installed MVC 1.0 and everything works great now!
Now I can look at how you have sone some things. I want to see what it would take to add more type of things to sections or zones on pages. I could use also use a product list that listed the products vertically, so I could have extensive HTML code in the center about programs, with appropriate products on the right hand side.
Do I post problems on the CodePlex site? For example, the Parent of a page doesn't seem to work.
Thanks for the temendous work you have done on this and it is only going to get better! Bill
Do I post inconsitencies or problems I find on the CodePlex site? For examp
I think you've done very well keeping things simple, and easily admin extensible. I especially like the way your plugins work.
It would be amazing to see your plugin concept extracted/extended to allow admin composition of other elements of the system (views, reports come to mind). If it could be separated to work with other types of projects (WPF/Silverlight), that would be incredibly useful (think simple admin composed ruby based views/reports in Silverlight, wow!)
However, I also understand that part of what makes the current design work is its focus on simplicity and ease of use.
Great job, keep up the good work!
I want to start learning from how you have created your system, so I downloaded the most recent source today and opened it with VS Team 2008 SP1. After browsing around, I tried to open the detault.aspx module in a browser. I got 6 error messages about the follwoing namespaces not being found - ValidateInput, ValidateInputAttribute, KonaPluggin.
I must be doing something wrong. Can you please steer me in the right direction. I didn't see a list of software prerequisites. Is there something utilized that I need to install?
Thank you!
BIll
I would have gone with IZ.
we're doing!
NHibernate repo for us. Maybe I'll get him to screencast it with me :)
so that's one thing - but the app stop/recompile is another. The major
question is - how often will this happen on a live site?
I don't have the answer - we'll see I spose.
it. The DB is in App_Data
This open framework is exatcly what I need to bring up a new store front for a friend. She needs to mix HTML and products in a site that presents programs and services to help people and also list some products that are used by the programs or complment them.
I am interested in using the system, but you are still changing and enhancing it. How will I know when it is comlete enough to actually start using it? Also, where is the source code? Thanks so much! I have learned a lot and you have inspired me to use some of these techniques. Bill
Would you consider using MEF for you plugin framework??
any plans to exchange O/RM? say for the (next version of) Entity Framework?
probably not, keep it simple is the rule here, I see...
welcome back, Mono topic is definitely a great news.
Changing code in App_code will force a recompile and reload the app and will destroy all current session state data (it is not php or classic asp). Did you get arround that? You did mention something about that at Mix.
Thanks
Would like to hear your input on RIA Services
I went to your show at mix! :) A W E S O M E !
Thanks!!
...it was a ton of fun and I don't want to stop now!
There are so many areas to cover that I think would be interesting - such as:
Cloud Computing and Azure
Analytics and this F# Thing
Deep dives into javascript and jQuery
Deployment issues
Mono and what it means to us as developers
[/quote]
Rob, I want to see it all! Bring it on please!
Thanks for all you do!
For anyone who hasn't seen Rob's MIX09 session about Kona (storefront) you might wanna go check it out...
http://videos.visitmix.com/MIX09/T62F
give me more of an example though?
Amy