tag:blogger.com,1999:blog-62334892635345862042024-03-14T04:28:18.694-07:00Do or do not, there is no try...catch..finallyLiving as a developerPedrohttp://www.blogger.com/profile/13024206465146490588noreply@blogger.comBlogger10125tag:blogger.com,1999:blog-6233489263534586204.post-63132027807171315522012-03-12T09:58:00.000-07:002012-03-12T09:58:24.587-07:00Performance de SquirrelLa segunda parte de Squirrel.<br />
En este post veremos el performance de Squirrel vs Linq to SQL y Entity Framework 4.<br />
<br />
<a href="http://www.impulsotechnologies.com/Blog/El_Performance_de_Squirrel">http://www.impulsotechnologies.com/Blog/El_Performance_de_Squirrel</a><br />
<br />
<br />Pedrohttp://www.blogger.com/profile/13024206465146490588noreply@blogger.com0tag:blogger.com,1999:blog-6233489263534586204.post-39966572131107648262012-02-29T16:20:00.002-08:002012-02-29T16:20:41.264-08:00Usando SquirrelLink to my new post in my new website(in spanish)<br />
<a href="http://www.impulsotechnologies.com/Blog/Usando_Squirrel">http://www.impulsotechnologies.com/Blog/Usando_Squirrel</a>Pedrohttp://www.blogger.com/profile/13024206465146490588noreply@blogger.com0tag:blogger.com,1999:blog-6233489263534586204.post-60473542119841037772011-08-23T08:30:00.000-07:002011-08-23T08:30:51.063-07:00Why so many fail when trying to move to the cloud?
<br />
<div class="MsoNormal">
<span style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-fareast-font-family: "Times New Roman";">First of all, I am talking from
anecdotal experience working mostly with the Mexican IT scene, but it’s not
restricted to it, I have observed the same behavior on some US companies.</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-fareast-font-family: "Times New Roman";">The last months I have been working
with companies helping them move to SaaS taking advantage of the Cloud, my
colleague at Scio consulting, Mike Dunham has written a series of posts “The
Cloud, SaaS and the Total Costs of Operations” you can found here:<span class="apple-converted-space"> </span><a href="http://blog.sciodev.com/2011/07/07/the-cloud-saas-and-the-total-cost-of-operations-tcop-part-1/">part 1</a>,<span class="apple-converted-space"> </span><a href="http://blog.sciodev.com/2011/07/12/the-cloud-saas-and-the-total-cost-of-operations-tcop-part-2/">part 2</a><span class="apple-converted-space"> </span>and<span class="apple-converted-space"> </span><a href="http://blog.sciodev.com/2011/07/15/the-cloud-saas-and-the-total-cost-of-operations-tcop-part-3/">part 3</a><span class="apple-converted-space"> </span>. This is a developer's
point of view.</span></div>
<div class="MsoNormal">
<span style="mso-fareast-font-family: "Times New Roman";"><br style="mso-special-character: line-break;" />
<div class="MsoNormal">
<span style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-fareast-font-family: "Times New Roman";"><span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; orphans: 2; text-align: -webkit-auto; widows: 2; word-spacing: 0px;">Microsoft and AWS
in a lesser extent, both have information about their products, and how to use
them, but one thing that is missing , there are no papers encouraging
developers to change their mind set to develop applications that take advantage
of the cloud in terms of business benefits. We, the developers have to start
getting more involved in the business side of our companies so we are aware of
the challenges, the objectives and the market, how can we design and develop
and application that takes our company to business success if we are not
aware of those “boring” things?</span>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-fareast-font-family: "Times New Roman";">Other thing that I have found, is
that, as scrum is invading the startup scene and as companies are being dazzled
by the scrum shine, the “fail” line grows faster. Don't get me wrong scrum has
its place, but I won't use it for all the projects and I won't use it with all
the people. I will use it on projects with people that already know and like
each other.</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-fareast-font-family: "Times New Roman";">Many architects and developers
design and code the application the same way for on premise and cloud
environments. Most of those applications will fail when they need to
scale because of their success and the only option to is to scale them up. To
run efficiently in the cloud, many apps require changes and rewrites of some
parts to run on a web farm. How can architects and developers design and
code for success if scrum and a big picture awareness can't live together?</span></div>
</span></div>
<div class="MsoNormal">
<span style="mso-fareast-font-family: "Times New Roman";"><br style="mso-special-character: line-break;" />
<div class="MsoNormal">
<span style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-fareast-font-family: "Times New Roman";"><span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; orphans: 2; text-align: -webkit-auto; widows: 2; word-spacing: 0px;">So what is the
solution? It is easy to say we need to design and develop for business success,
but not as easy to implement. We have to learn and remember to design and
develop applications to scale automatically on demand (elastic), always develop
with operations in mind and remember that today ignorance and laziness is
tomorrow's nightmare.</span>
</span></div>
<br /></span></div>
</span></div>
Pedrohttp://www.blogger.com/profile/13024206465146490588noreply@blogger.com1tag:blogger.com,1999:blog-6233489263534586204.post-70274018778550832042011-05-19T09:12:00.000-07:002011-05-20T05:05:45.495-07:00Software development is like cooking<br />
One of the things that I enjoy other than spend time with my family and programing, is cooking, and I was thinking that I may enjoy it just because it's very similar to programing, seriously!.<br />
<br />
I have always think about software development as Art, Craft and Science, cooking is the same, the result of you developing or cooking can be considered Art if you are a good craftsman, if you applying science properly and of course if you add creativity and imagination to the process, lets talk about other similarities between software development and cooking.<br />
<br />
Software development and cooking process have some similarities:<br />
First you want to fill a need or you want to create something new.<br />
<br />
For software development:<br />
- You need to define your goal, your scope, your budget.<br />
- You define high level requirements:<br />
- You have platforms.<br />
- You make some estimates.<br />
- You develop something:<br />
- You have pre built solutions, that you can customize.<br />
- You have tools and frameworks.<br />
- The Actual development.<br />
- You test and debug your work.<br />
- You validate your work.<br />
- You publish your work.<br />
- You receive feedback.<br />
- You adjust.<br />
<br />
Sample for cooking:<br />
- Dinner/ 6 persons / 100dls<br />
- Appetizer, Soup, main dish, desert:<br />
- Vegetarian, Meat lover:<br />
- Mexican<br />
- Italian<br />
- Etc.<br />
- Preparation in two hours, 1lb meat, 5 tomatoes, 1 onion. etc.<br />
- The actual cooking:<br />
- Frozen food.<br />
- Pans, knife, recipes, frozen vegetables, anything ready to use.<br />
- The actual cooking.<br />
- Taste, add salt, add water, etc.<br />
- Ask a family member to taste your dish.<br />
- Serve.<br />
- Receive complements or complains.<br />
- Take note and adjust for next time.<br />
<br />
The actual development and cooking process is where a lot of things can make a significant difference, even if you are following a recipe, it's in that part where you can be creative, add or remove ingredients to the recipe, cook for more or less time, etc. its also the most risky part, you made a mistake and it will be very difficult to fix it without having to start again, also the more you cook, the better you are.<br />
<br />
There are also specialties, some developers are better working on the front end and others in the back end, as some chefs are better cooking deserts, salads, etc.<br />
<br />
Software development and cooking are not precise, but you can make very good guesses applying some science to your process.<br />
<br />
Presentation, consistence, smell, or UI and UX, presentation is one of the most important things for chefs, if the dish is very tasty but lacks of a good presentation, many people will not even would like to try it, the same applies for software development, your product may be a super cool idea, you may be using the latest technology and probably you designed some super fast algorithms but if your product don't have an interesting UI and a very good UX, nobody will use it.<br />
<br />
I am pretty sure that there are many other things that make software development and cooking a similar process, but thats all that I can think for now.<br />
<div>
<br /></div>Pedrohttp://www.blogger.com/profile/13024206465146490588noreply@blogger.com0tag:blogger.com,1999:blog-6233489263534586204.post-59998523866020902952011-04-05T15:34:00.000-07:002011-04-05T15:38:20.037-07:00Hiring developers...This month <a href="http://www.sciodev.com/">we</a> stared hiring developers, by the way, if you are a C# developer with strong knowledge of javascript(jquery nice to have) you can send your resume to <a href="mailto:hmatamoros@sciodev.com">hmatamoros@sciodev.com</a>, anyways, we are hiring, I am in charge of most of the technical interviews and this time I am using a different approach for the interviews, let me elaborate:<br />
<br />
Most of the times, in most of the companies when they perform remote interviews, the interview goes like:<br />
<br />
Interviewer <i>- do you know what is "X"(some obscure or new language feature)? -</i><br />
Candidate <i>- err (googling the question)...yes, sure!, I used that on my last project -</i><br />
Interviewer <i>- what does MVP, MVC, MVVM mean? -</i><br />
Candidate <i>- (googling)...answering.</i><br />
etc., etc.<br />
<br />
Some other companies(us included) use small problems like the famous "bizz buzz", and this is ok, but a developer is not going to be solving simple bizz buzz problems always!, so if you are relying on that kind of tests you are screwed, take a look to:<br />
<br />
<i> for (int i = 1; i < num; i++)</i><br />
<i>{</i><br />
<i> Console.WriteLine(i % 15 == 0 ? "FizzBuzz" : i % 5 == 0 ? "Buzz" : i % 3 == 0 ? "Fizz" : i.ToString());</i><br />
<i>}</i><br />
<br />
does that tells you if I know OOP, if I know programing principles? does that tells you if I know how to apply some patterns?, of course no!, I also found that some guys that practice for programming concourses solve this kind of problems "easily" but their OOP skills are terrible.<br />
<br />
The problem with many technical interviews is that those are not evaluating the skills and knowledge that the individual is going to be using on daily basis, thats why I started to use a slightly different approach, I still use the quick challenges, but I also put them some weird code and I expect them to fix it or comment what is wrong with that code, I also ask them to write some code like a simple repository, and also exercises that help me evaluate their OOP skills, like write a simple game engine.<br />
<br />
The results so far are great, previously we hired some people that were not very good programmers, and what happens when you put some pressure on bad programmers? they quit or they just put everybody on trouble and we have to ask them to leave the company, why in the world would I accept a job if I know that I cheated using google on the interview? why would I take the risk of moving to a new city if I know that I am not qualified?, that's something that I will never understand.<br />
<br />
Just to finalize, I know that I need to learn a lot of many things, but I am honest and when I don't know something I just said, "I don't know" and then I will put my self to study, I expect the others to do the same, our company always give the people the oportunity to learn, we just use the interview to know if the people is a good match for our culture and to have an idea of their skills.<br />
<br />
<br />
<br />Pedrohttp://www.blogger.com/profile/13024206465146490588noreply@blogger.com0tag:blogger.com,1999:blog-6233489263534586204.post-44315232130185996642010-11-30T11:29:00.000-08:002010-11-30T11:30:31.463-08:00JavascriptMVC<span style="color: #666666;"><br /></span><br />
<div style="margin-left: .375in; margin: 0in;">
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">The last week I finally had time to put my hands
on </span></span></span><a href="http://www.javascriptmvc.com/"><span style="font-family: "Arial";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">http://www.javascriptmvc.com/</span></span></span></span></a><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">, I heard about that
framework sometime ago but I didn't toke time to play with it, I was a little
bit tired about my SaaS ASP.Net MVC framework that I am working on, so I
decided to take a look to that framework.</span></span></span><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;"> </span></span></span></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><br />
<div style="color: black; font-family: "Arial"; margin-bottom: 0in; margin-left: 0.38in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">When I first saw the Javascript MVC video tutorial I was exited
about how easy you can create a simple application following the MVC pattern
with javascript so I decided to create a very simple application (TODO list)
with a WCF REST service connected to it, this is the final version of the app
that I created:</span></span></span></div>
<div style="color: black; font-family: "Arial"; margin-bottom: 0in; margin-left: 0.38in; margin-right: 0in; margin-top: 0in;">
<span style="color: #666666;"><br /></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQcyeHxJYXsJyWW4s9NPhy6gVZaOtb7wkDSZnmfNeMNKBsQ_r0aqGBnyiRQGgf5Sso4IFVmsKATJRhZPtFxgbm6UY_L6HHDm_mzAIg7kJE4zQNCTqiB-YOKkLhweOoqQUhxPgzpbALdpkc/s1600/homePage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="411" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQcyeHxJYXsJyWW4s9NPhy6gVZaOtb7wkDSZnmfNeMNKBsQ_r0aqGBnyiRQGgf5Sso4IFVmsKATJRhZPtFxgbm6UY_L6HHDm_mzAIg7kJE4zQNCTqiB-YOKkLhweOoqQUhxPgzpbALdpkc/s640/homePage.png" width="640" /></a></div>
<div style="color: black; font-family: "Arial"; margin-bottom: 0in; margin-left: 0.38in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;"><br /></span></span></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><br />
<div style="color: black; font-family: "Arial"; margin-bottom: 0in; margin-left: 0.38in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">After being working with Asp.Net MVC for a while I didn't have any
problem following the javascript code and I found the approach very interesting, as the
framework is designed to work together with a REST service by default the app
runs pretty fast, because small chunks of data are sent and received to/from the
service, I know that you can do the same with normal ASP.Net MVC but that is
something that usually you do don't do in your firsts projects because usually
you are following a simple tutorial that works with normal posts and gets(ajax
or no ajax), the advantage of developing the app with Javascript mvc is that
you are forced to write your app that way(ajax, json, REST, etc.), also, as the
framework helps you writing unit and functional tests so your app will be more
robust and you will learn some tricks that you can apply to other
applications, of course I have only created a very simple app and only it
will be after I create something more complicated that I will know the
limitations and trade offs of using that framework.</span></span></span></div>
<div style="color: black; font-family: "Arial"; margin-bottom: 0in; margin-left: 0.38in; margin-right: 0in; margin-top: 0in;">
<span style="color: #666666;"><br /></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><br />
<div style="font-family: "Calibri"; margin-bottom: 0in; margin-left: 0.38in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">For
the moment you can download the sample app that I wrote </span><a href="http://www.dotnetmorelia.net/downloads/todoservice.rar"><span style="color: #666666;">here</span></a><span style="color: #666666;">:</span></span></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><br />
<div style="font-family: "Calibri"; margin-bottom: 0in; margin-left: 0.38in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">I
changed the framework's source code a little bit to make the testing faster,
now the application detects when its being executed in the context of a unit or
functional test so all the ajax requests are emulated and the app works only
with data in memory, also I allowed the user to manually set the app to run in
test mode so you don’t be messing with real data when you are developing,
testing and debugging your app and tests.</span></span></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><br />
<div style="font-family: "Calibri"; margin-bottom: 0in; margin-left: 0.38in; margin-right: 0in; margin-top: 0in;">
<span style="color: #666666;"><br /></span></div>
<div style="font-family: "Calibri"; margin-bottom: 0in; margin-left: 0.38in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">These
are some tricks and gotchas that I found when I was developing the wcf REST
service:</span></span></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><br />
<ul style="direction: ltr; margin-bottom: 0in; margin-left: .375in; margin-top: 0in; unicode-bidi: embed;" type="disc"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><span style="color: #666666;">
</span>
<li style="margin-bottom: 0; margin-top: 0; vertical-align: middle;"><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">You cannot make ajax
post/delete/put request to other domain, I knew this one but I wasted a couple
of hours because I just forgot it, well, you can do it with some tricks
but not naturally.</span></span></span></span></li>
<span style="color: #666666;">
</span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><span style="color: #666666;">
</span>
<li style="margin-bottom: 0; margin-top: 0; vertical-align: middle;"><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">If you want your service to
return real json and not a string that represents a json object you should
not return a string in your web method, let me elaborate, almost all of
the tutorials and comments on internet just said that you have to add the
following parameters to your </span><b><span style="color: #666666;">WebInvoke</span></b><span style="color: #666666;"> attribute: </span></span></span></span><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><i><b><span style="color: #666666;">BodyStyle =
WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json </span></b></i></span></span></span><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;"> </span></span></span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">but that is not enough others said that
just setting the correct </span><b><i><span style="color: #666666;">ContentType</span></i></b><span style="color: #666666;"> will do the trick, but that does not
work either, and that’s because no matter that you are returning a json
object (as string) the response will be wrapped so your return value will
be wrapped as if it was a normal string, this is not actually a real
problem since you can then convert that string into json object(s) in js with
a simple instruction like:</span></span></span></span><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;"> </span><b><i><span style="color: #666666;">jQuery.parseJSON(StringData) </span></i></b></span></span></span><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">but as you can imagine, if your
data is very large the conversion will take a while and the browser will
blocked by this conversion, also, why convert the data if we can just send
it correctly?, to make it work, you service has to return a </span><b><span style="color: #666666;">Stream</span></b><span style="color: #666666;"> and you
should write your json serialized object into that Stream.</span></span></span></span></li>
<span style="color: #666666;">
</span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><span style="color: #666666;">
</span>
<li style="margin-bottom: 0; margin-top: 0; vertical-align: middle;"><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">Serialize your object with
the </span><b><span style="color: #666666;">DataContractJsonSerializer</span></b><span style="color: #666666;"> instead of the </span></span></span></span><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><i><b><span style="color: #666666;">JavaScriptSerializer</span></b></i></span></span></span><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">, this way you will have
complete control on how your object is serialized.</span></span></span></span></li>
<span style="color: #666666;">
</span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span></ul>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><br />
<div style="font-family: "Calibri"; margin-bottom: 0in; margin-left: 0.38in; margin-right: 0in; margin-top: 0in;">
<span style="color: #666666;"><br /></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><br />
<div style="font-family: "Calibri"; margin-bottom: 0in; margin-left: 0.38in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">This
is the structure (not detailed) of the sample solution:</span></span></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><br />
<ul style="direction: ltr; margin-bottom: 0in; margin-left: .375in; margin-top: 0in; unicode-bidi: embed;" type="disc"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><span style="color: #666666;">
</span>
<li style="margin-bottom: 0; margin-top: 0; vertical-align: middle;"><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">The </span><b><span style="color: #666666;">root</span></b><span style="color: #666666;"> folder contains the
wcf service and other classes that I use in the service's code.</span></span></span></span></li>
<span style="color: #666666;">
</span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><span style="color: #666666;">
</span>
<li style="margin-bottom: 0; margin-top: 0; vertical-align: middle;"><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">The </span><b><span style="color: #666666;">RestServiceCode</span></b><span style="color: #666666;"> contains
code required by the Rest service.</span></span></span></span><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><i><span style="font-size: xx-small;"><span style="color: #666666;">(this note was added by captain obvious)</span></span></i></span></span></li>
<span style="color: #666666;">
</span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><span style="color: #666666;">
</span>
<li style="margin-bottom: 0; margin-top: 0; vertical-align: middle;"><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;"> </span></span></span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><b><span style="color: #666666;">documentjs</span></b><span style="color: #666666;">, </span><b><span style="color: #666666;">funcunit</span></b><span style="color: #666666;">,</span><b><span style="color: #666666;">jquery</span></b><span style="color: #666666;"> and </span><b><span style="color: #666666;">steal</span></b><span style="color: #666666;">
folders are javascript mvc stuff.</span></span></span></span></li>
<span style="color: #666666;">
</span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><span style="color: #666666;">
</span>
<li style="margin-bottom: 0; margin-top: 0; vertical-align: middle;"><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><b><span style="color: #666666;">todo</span></b><span style="color: #666666;"> folder, this is where
the javascript mvc app resides, I suggest that you take a look to the
video tutorial so you are familiarized with the structure of an javascript
mvc app.</span></span></span></span></li>
<span style="color: #666666;">
</span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><span style="color: #666666;">
</span>
<li style="margin-bottom: 0; margin-top: 0; vertical-align: middle;"><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">The DBScripts folder that
contains one big script to create the db and populate a few tasks.</span></span></span></span></li>
<span style="color: #666666;">
</span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span></ul>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><br />
<div style="font-family: "Calibri"; margin-bottom: 0in; margin-left: 0.38in; margin-right: 0in; margin-top: 0in;">
<span style="color: #666666;"><br /></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><br />
<div style="font-family: "Calibri"; margin-bottom: 0in; margin-left: 0.38in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">Running
the sample code:</span></span></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><br />
<ul style="direction: ltr; margin-bottom: 0in; margin-left: .375in; margin-top: 0in; unicode-bidi: embed;" type="disc"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><span style="color: #666666;">
</span>
<li style="margin-bottom: 0; margin-top: 0; vertical-align: middle;"><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">Create a database called </span></span></span></span><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">ToDoDB </span></span></span></span><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">(use that name so you don’t
have to change the script).</span></span></span></span></li>
<span style="color: #666666;">
</span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><span style="color: #666666;">
</span>
<li style="margin-bottom: 0; margin-top: 0; vertical-align: middle;"><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">Run the script included in
the source code.</span></span></span></span></li>
<span style="color: #666666;">
</span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><span style="color: #666666;">
</span>
<li style="margin-bottom: 0; margin-top: 0; vertical-align: middle;"><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">Modify the web.config and the
app.config (tests project) so it points to your new DB.</span></span></span></span></li>
<span style="color: #666666;">
</span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><span style="color: #666666;">
</span>
<li style="margin-bottom: 0; margin-top: 0; vertical-align: middle;"><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">Run the app, if you don’t see
a thing, check that your browser its pointing to this url:</span></span></span></span><a href="http://localhost:19978/todo/todo.html"><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">http://localhost:19978/todo/todo.html</span></span></span></span></a><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;"> </span></span></span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">(or the port that is configured in your
machine)</span></span></span></span></li>
<span style="color: #666666;">
</span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><span style="color: #666666;">
</span>
<li style="margin-bottom: 0; margin-top: 0; vertical-align: middle;"><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">If you want to run the app in
test mode just add the query string test=true, so the url will be
something like: </span></span></span></span><a href="http://localhost:19978/todo/todo.html?test=true"><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">http://localhost:19978/todo/todo.html?test=true</span></span></span></span></a><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;"> </span></span></span></span></li>
<span style="color: #666666;">
</span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><span style="color: #666666;">
</span>
<li style="margin-bottom: 0; margin-top: 0; vertical-align: middle;"><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">To run the unit and
functional tests follow the instructions on the video tutorial.</span></span></span></span></li>
<span style="color: #666666;">
</span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><span style="color: #666666;">
</span>
<li style="margin-bottom: 0; margin-top: 0; vertical-align: middle;"><span style="font-family: "Calibri";"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">That’s all.</span></span></span></span></li>
<span style="color: #666666;">
</span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span></ul>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><br />
<div style="font-family: "Calibri"; margin-bottom: 0in; margin-left: 0.38in; margin-right: 0in; margin-top: 0in;">
<span style="color: #666666;"><br /></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><br />
<div style="font-family: "Calibri"; margin-bottom: 0in; margin-left: 0.38in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">Please
notice that the app does not follow all the best practices and I just wrote two
normal MS tests to test the service, the intention of the sample code is not to
teach best practices but to show a javascriptmvc working app .</span></span></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><br />
<div style="font-family: "Calibri"; margin-bottom: 0in; margin-left: 0.38in; margin-right: 0in; margin-top: 0in;">
<span style="color: #666666;"><br /></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">
</span></span></span><br />
<div style="font-family: "Calibri"; margin-bottom: 0in; margin-left: 0.38in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="color: #666666;">Comments
and questions are welcome.</span></span></span></div>
<span style="color: #666666;"><br /></span>Pedrohttp://www.blogger.com/profile/13024206465146490588noreply@blogger.com0tag:blogger.com,1999:blog-6233489263534586204.post-59550172252345459802010-11-04T07:49:00.001-07:002010-11-04T07:53:08.285-07:00Data Access with Cheetah Framework.<span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;"><br /></span></span></span></span><br />
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;"> </span></span></span></span></span></span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">
</span></span></span></span></span></span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">As I mentioned in my </span></span></span></span><a href="http://thereisnotrycatchfinally.blogspot.com/2010/10/cheetah-framework-developing-saas.html"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">previous post</span></span></span></span></a><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">, I am working on a Framework(Cheetah Framework) that will help developers writing SaaS applications with asp.net MVC, in this post I will be talking about how the Cheetah Framework help developers with the data access for SaaS applications.</span></span></span></span></span></span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">
</span></span></span></span></span></span><br />
<div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">First of all, usually there are three main ways that the data is stored on the server:</span></span></span></span></span></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">
</span></span></span></span></span></span><br />
<div>
<ol><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">
</span></span></span></span>
<li><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">Isolated Schema, isolated database.</span></span></span></span></span></span></li>
<span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">
</span></span></span></span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">
</span></span></span></span></span></span><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">
</span></span></span></span>
<li><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">Isolated Schema, shared database.</span></span></span></span></span></span></li>
<span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">
</span></span></span></span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">
</span></span></span></span></span></span><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">
</span></span></span></span>
<li><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">Shares schema, shared database.</span></span></span></span></span></span></li>
<span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">
</span></span></span></span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">
</span></span></span></span></span></span></ol>
<div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">For more information about advantages and disadvantages about each model you can go </span></span></span></span><a href="http://msdn.microsoft.com/en-us/library/aa479086.aspx"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">here</span></span></span></span></a></span></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">
</span></span></span></span></span></span><br />
<div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;"><br /></span></span></span></span></span></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">Cheetah Framework uses the third option, i.e. shared schema, shared database, to make it work, Cheetah Framework needs you to follow some simple rules when creating your database, oh and by the way, Cheetah Framework supports SQL server and </span></span></span></span></span></span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">SQL</span></span></span></span></span></span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;"> </span></span></span></span></span></span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">Azure, once you have your database defined, you need to configure just one connection string and update one single file(no single line of code involved) and Cheetah Framework takes control from there, just compile your project and you will have access to functionality that was generated for you.</span></span></span></span></span></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">
</span></span></span></span></span></span><br />
<div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">Cheetah Framework will automatically filter the data based on the active tenant so developers will work with the data as if they were developing a single tenant application, also Cheetah Framework has built in support that allows the tenant to extend any table in their database, so, for instance, developers can define a base table "Products" with a fixed set of fields and each tenant will be able to extend the "Products" table to fit their needs, in terms of code, developers can access those extended fields directly as if they were part of the "Products" table, something like:</span></span></span></span></span></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">
</span></span></span></span></span></span><br />
<div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">NewProduct.MyCustomField = "test"</span></span></span></span></span></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">
</span></span></span></span></span></span><br />
<div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">This feature is also useful when creating verticals, lets said that you are creating a Time Track SaaS application, you can define a vanilla app and then define extended fields for specific verticals, like Time Track for Developers, Time Track for Doctors, Time Track for teachers, and so on, also each vertical's tenant will be able to add their own custom fields.</span></span></span></span></span></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">
</span></span></span></span></span></span><br />
<div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">The following is an example with the current version of the Cheetah Framework that was added to a vanilla MVC application:</span></span></span></span></span></span></div>
<div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">This is the aspnet_Users table: </span></span></span></span></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4vaxlTQEG8MQXO5Mu4YDgJRSYrygr3hVLaPmIrNfteV3bE_dyGjHQvWOHauPOhx1KBerb3487WOFMkjXLyvMuAxK1OXipwDDvUSnn_30k4c050zE0SIzgYe5BxGOZaJMvP-aKqFeuk7Uj/s1600/DB.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="171" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4vaxlTQEG8MQXO5Mu4YDgJRSYrygr3hVLaPmIrNfteV3bE_dyGjHQvWOHauPOhx1KBerb3487WOFMkjXLyvMuAxK1OXipwDDvUSnn_30k4c050zE0SIzgYe5BxGOZaJMvP-aKqFeuk7Uj/s320/DB.jpg" width="320" /></a></div>
<div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">As you can see the field "FirstName" is not part of this table.</span></span></span></span></span></span></div>
<div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;"> </span></span></span></span></span></span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">This is the basic code that you will need in the controller:</span></span></span></span></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBCT54twBbiQqTranVc1F_YFCgBYsyKygbXGyaEeFOOOtFMcYOXiOhXUciBITrZ-xOqJQoAm273A2MQFgNOhTivlaknGXQq-EhwtPMRUoTmLYSxTR7usQsdrJH_D8WDTQXlXKB4nxqwcxK/s1600/controller.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="68" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBCT54twBbiQqTranVc1F_YFCgBYsyKygbXGyaEeFOOOtFMcYOXiOhXUciBITrZ-xOqJQoAm273A2MQFgNOhTivlaknGXQq-EhwtPMRUoTmLYSxTR7usQsdrJH_D8WDTQXlXKB4nxqwcxK/s640/controller.jpg" width="640" /></a></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">
</span></span></span></span></span></span><br />
<div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">And this is a simple example of </span></span></span></span></span></span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;"> the View :</span></span></span></span></span></span></div>
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">
</span></span></span></span></span></span><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbXLclgaINuUiY7VFCO5LWoR3k0wRJlLubTAn_8uuVhLbaUDDTiEq0qt42RO7qqUusjKcHSqQIhmOF4Dv4Kc9YTpbHHExvUaiGsxZOSvw_ont5jYKIuMisu9AhYW6v0z7ZKjA4gRYk72s1/s1600/view.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="336" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbXLclgaINuUiY7VFCO5LWoR3k0wRJlLubTAn_8uuVhLbaUDDTiEq0qt42RO7qqUusjKcHSqQIhmOF4Dv4Kc9YTpbHHExvUaiGsxZOSvw_ont5jYKIuMisu9AhYW6v0z7ZKjA4gRYk72s1/s640/view.jpg" width="640" /></a><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;"> </span></span></span></span></span></span><br />
<span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;"><br /></span></span></span></span><br />
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">As you can see, you use the extended field "FirstName" as it was part of the original object, any extended fields can be accessed that way.</span></span></span></span></span></span><br />
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;"><br /></span></span></span></span></span></span><br />
<span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"><span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;">Well, thats all for now, in the next post I will continue talking about how the data is accessed and other things that Cheetah Framework does for you.</span></span></span></span></span></span><br />
<span style="background-color: #444444;"><span style="background-color: black;"><span style="background-color: #f3f3f3;"><span style="background-color: white;"><br /></span></span></span></span>Pedrohttp://www.blogger.com/profile/13024206465146490588noreply@blogger.com0tag:blogger.com,1999:blog-6233489263534586204.post-17316559412840545462010-10-14T08:44:00.000-07:002010-10-14T08:46:14.829-07:00Cheetah Framework, developing SaaS applications fast with Asp.Net MVCThe first time that I developed an application with Asp.Net mvc was when the second mvc beta was released, of course it was just a small application for demo purposes, putting mvc and jquery together was the best move from Microsoft, I just loved the way the code was cleanly separated and how easy was to work together with a web designer to create a cool and beautiful application together.<br /><br />
The <a href="http://sciodev.com/">company</a> where I am working at specializes developing SaaS applications with Microsoft technologies, so for me it is a natural step to create a framework to develop SaaS applications with asp.net mvc, I call it Cheetah Framework, I chose the name because for some reason a lot of people like to use animals as their project's name, but most important because the purpose of the framework is to give to the developer tools to create SaaS applications fast, bloody fast!.<br /><br />
In the next posts I will be talking about the features that I will be implementing, currently I am finishing the Multi tenancy built in support and the custom fields(meta data) features.Pedrohttp://www.blogger.com/profile/13024206465146490588noreply@blogger.com0tag:blogger.com,1999:blog-6233489263534586204.post-11715061753188093652010-07-22T07:20:00.000-07:002010-07-23T04:21:47.361-07:00What is wrong with the "Kids"<div class="MsoNormal"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;">When I was 13 subscribed to a course to obtain a degree as “Programmer and analyst” I got my degree at 14, now I am 34 and since then I have been programming with different languages, I started mastering Basic, then I go through Pascal, Turbo Pascal, Dbase, Fox/Fox Plus, C, C++, Visual Fox, VB.Net. C#, also I know the basis of Assembly, Ruby, Java and F# some of them in different OS like Fox/Fox Plus, C, C++, C#(with Mono) and Ruby, I have used(real use) a lot of Oss, DOS, Windows, Linux(Ubuntu, Red-Hat/Fedora, SUSE, Mandrake->Mandriva, Debian), Unix(SCO 3.2, Open Server, UnixWare, Solaris), BeOs, Mac OS, QNX and others that I don’t remember right now, I remember that most of my class mates from college and the people that I knew there liked programming and were passionate about building software.</span></span></div><div class="MsoNormal"><br />
</div><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"> </span></span><br />
<div class="MsoNormal"><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;">The company where I am working on right now (<a href="http://www.sciodev.com/">Sciodev</a>) has been having problems finding qualified developers, qualified developers</span></span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"> </span></span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;">are not local and don’t</span></span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;"> </span></span><span style="font-family: "Arial", "Helvetica", sans-serif;"><span style="font-size: small;">want to move from their current positions and some of them when they move they just quit after a few months for different reasons, so we turned our heads to the local universities, Morelia is a special place in México, it’s an small city but has a lot of Universities, most of them offering Computer Science related careers, my surprise was that most of the students of those computer science related careers were not interested in programming, they wanted to work on IT Support or they wanted to become Project Managers, there is nothing wrong working in IT or as PM, but only 5 students interested in software development from a whole group?!. I have been interviewing fresh graduates and I have been participating on our company’s training programs for Internships and I have found that most of the people don’t have a real understanding of Object Oriented Programming and other basic principles, some of them knew the theory but were not able to give a real example of how to apply OOP, some of them even thought that OOP it is not necessary!, how can this be happening?! What is happening at universities that they are failing to teach programming basic principles, other thing that I found is that many people that decided to get into Computer Science related careers is that they choose the career because they like to chat with the IM, or they like facebook or twitter and for some reason they think that that Computer Science careers are about to use an IM, facebook or twitter and not actually create an IM, facebook or twitter.</span></span></div>Pedrohttp://www.blogger.com/profile/13024206465146490588noreply@blogger.com0tag:blogger.com,1999:blog-6233489263534586204.post-80439098188643717892010-07-21T06:48:00.001-07:002010-07-21T06:48:36.368-07:00Going Live!Yeap, this is just the mandatory first post.Pedrohttp://www.blogger.com/profile/13024206465146490588noreply@blogger.com0