Tuesday, July 10, 2012

The first .NET HTML5 Websockets Rich Enterprise Application Framework update


Well, this has been a very exciting week already.  Have been working through an issue related to Threading with the Websockets Framework.  Have managed to get things working as designed.  Basically, I was faced with a dreaded - "An error occurred invoking the method.  The destination thread no longer exists." error.  The internal Thread being used was still available, or at least I thought so.  I discovered that the Thread was running as a Background Thread and was finalizing by the time I was attempting to access Thread.  I couldn't get this Thread to stay alive due to the way in which I was using it, so I had to resort to using a Thread Pool Manager which keeps the Threads in a Queue.  Then I was faced with another dreaded - "Cross-thread operation not valid: Control 'UserControl1' accessed from a thread other than the thread it was created on." error which was related to accessing one of the controls from another thread besides the GUI Thread.  I over came this also by using ISynchronizeInvoke interface.  Now, the Websockets Framework is stable and pretty fast in a Browser.  Interfaces built with this framework are nearly as fast as Windows Desktop native applications because of Websockets.  53 user interface controls are working but need a little work to make them stable and I have to finish up 7 more before CTP1.  Right now the following controls exists:
ExtJs Controls -
Window Accordion Panel
Accordion
Accordion Panel
Button
CheckBox
ComboBox
DateBox
FieldSet
GroupBox
HTMLEditor
Label
NumberBox
Panel
PlaceHolder
Radio
TextArea
TimeBox
Timer
TabPanel
DataList
BorderLayout
CardLayout
ContentPanel
ColorMenu
DateMenu
TreeView
StatusBar
ToolBar
ToolStrip
UserControl

JQuery Controls -
CrossSlide
CycleImage
ImageScroller

HTML Controls -
Marquee
HTMLAnchor
HTMLButton
HTMLCheckBox
HTMLDropDownList
HTMLFieldSet
HTMLFileUpload
HTMLHiddenField
HTMLHorizontalRule
HTMLFrame
HTMLLabel
HTMLListBox
HTMLObject
HTMLPanel
HTMLParagraph
HTMLRadio
HTMLTable
HTMLTextArea
HTMLTextBox
HTMLBorderLayout

HTML5 Controls - Future releases...

Today was a great day.  Hopefully the next couple of weeks are just as successful.  

Sunday, June 17, 2012

My Experience in the Bizspark Program

May 22nd, I officially graduated and became a Bizspark Alumni. An exciting time that I would love to do all over again. Microsoft has provided my company with their entire software library to assist me in growing my business and building my software. I code in C# and use Visual Studio quite extensively, so the use of these tools was invaluable. I had a great idea for what I wanted to build but didn't know how to get to the finish line. I used the online documentation library quite a bit to acquire the knowledge I needed to complete the task at hand.


My companies mission is to provide the best Line of Business Rich Enterprise Applications. I had chosen Sencha Touch to build my Client Interface Controls for browser applications. I just needed to figure out a way to construct the interfaces dynamically. With my experience building JavaScript User Interfaces, I was a little frustrated with the continuous coding of JavaScript and time involved. I knew there had to be a better way and set out to experiment.

With the release of Windows Server 2012 which introduces Websocket support, I am able to deliver a HTML5 Websocket Rich Enterprise Application Development Framework that will allow developers to create desktop looking applications in minutes. The Framework integrates with Visual Studio 2011 and uses .NET 4.5. Developers will have drag and drop support Graphical User Interface Designer with realtime data support. Developers will be able to build web applications that run on IIS 8.0 and support 100,000+ users.


The first .NET HTML5 Websockets Rich Enterprise Application Framework CTP coming soon


This groundbreaking solution which has been under development for the past 3 years will be released to the developer community in September. Dynamic Asynchronous JavaScript (DAJA) on Websockets was designed to allow developers to build Rich Enterprise Applications using .NET Winforms as a GUI Designer that emits Sencha Touch JavaScript Widgets as the client interface. All browsers that support Websockets HyBi 76 will run applications in realtime. Backend web server will run on IIS 8.0.

Please stay tuned, more to come...
Charles E. Walk Jr.
http://www.walksolutions.com/


Tuesday, September 29, 2009

New Development of Web Based SQL Server Manager

Well, this has been an exciting two months. On July 27th, 2009, I signed up with BizSpark under Bob Walsh. I have decided to take the plunge and become a Micro ISV... The BizSpark program seemed like a perfect fit for me and so I went for it. For the longest I have wanted to create web based enterprise applications. I have been very lucky to have worked for some owesome development shops and designed and developed very robust ASP.NET Applications. I have been able to use some of the newest technologies and experiment with new and upcoming technologies. I have worked with a lot of end users in different areas and learned a lot of their pain points. It has been a very satisfing journey. This has given me a lot of desire to build something of my own.

One application I have been wanting to write for quite some time is a web based Enterprise Manager. I found that Microsoft had written an ASP.NET Enterprise Manager application back in 2004. I downloaded and installed it and found it was quite interesting and was programmed to use Distributed Management Objects (DMO). SQL Server Management Objects (SMO) is the new technology being used now, but Microsoft hasn't developed anything for this which made me excited. So, I have decided to build a web based interface using SMO and I will upload screenshots here and describe my journey. I have decided to use ExtJS for the interface and ASP.NET for the framework. I think this is a perfect union of technologies that will provide a very nice interface with a robust infrastructure. When I get close to completion, I will be providing some Alph and Beta versions for everyone to try out. My test so far with SMO are very impressive and I must say, Microsoft has done a great job with API design.


Well, back to coding I go...

Tuesday, January 20, 2009

RenderPartial to String in ASP.NET MVC Beta

This has been an interesting journal working with ASP.NET MVC. I started working with the MVC Framework back in April 2008 while it was Preview 3. I was on a contract in Los Angeles with the Department of Public Health and was very excited. This was my first opportunity to work on the new release of Visual Studio 2008 which had not officially been released to the public, but because this was a government institution, Microsoft was hooking the government up first. The director was an older gentleman with lots of experience in C & C++ programming. He loved what C# brought to programming and expressed his love for the .NET Framework. He brought me on board as a Principal .NET Developer to help him get the development department in shape. My experience is just what he needed to get the development department more standardized. The ASP.NET MVC Framework was exactly what he thought would strengthen the process and make applications more object oriented.

I was quite familiar with microsoft's windows MVC, but wasn't to keen on the ASP.NET MVC model, so I had a learning curve. I have always been blessed with the ability to learn new technologies pretty easily, so I wasn't to concerned. I was put in charge of 3 Senior .NET Developers what were in the same boat as myself, so it was important for me to learn fast so that I could be of assistance to my developers. I became quite facinated with the ASP.NET MVC Framework and loved the methodology by which it allowed you to seperate the Model, View and Controller layers. This is exactly what I had been wishing for. I spent years using ASP.NET and never liked the page lifecycle. This was primarily because I started using AJAX with ASP.NET a few years back and hated how I didn't have much control of page processing unless I used a HTTP Handler. As I got more and more familiar with the ASP.NET MVC Framework, I loved how much control it gave you. My Director wanted to use a client side Javascript library called YUI to build more intrigueing interfaces, so I had to dig in and find out how to use this library with the ASP.NET MVC Framework.

I must admit, this was a difficult process because, there wasn't much documentation on how to do this. Plus, the YUI was a little unstable because it was Beta and their documentation wasn't quite up to what I thought it should be. At the time, I was very familiar with a different Javascript library called ExtJs that to me was more superior than the YUI, so I did my best to convince the Director to us ExtJs instead, but he shot me down stating that the .NET Architect thought the YUI would be perfect for the project. So, I didn't want to cause and ripples, so I proceeded to dig into the YUI documentation to get a better understanding. Man, I tell you, this experience with the YUI was making me love the ExtJs library all that much better.

Billy McCafferty, the .NET Architect was very bright and had extensive knowledge with NHibernate and Spring.NET. He turned out to be the owner of Codai, LLC and orginator of S#arp Architecture - http://devlicio.us/blogs/billy_mccafferty/archive/2008/11/12/s-arp-architecture-0-9-released.aspx . I knew nothing about any of this and was eager to learn. The only problem was Billy nor I had time for one on one training like we wanted. I did get an opportunity to learn a little about NHibernate, but I was still confused about some aspects of what I had learned and no one was about to assist me in getting a better understanding.

The project proceeded about 2 months and the results were not looking too good. The YUI library was a beast and none of the developers were enjoying the journey. We ended up going past our release date and had an application that was quite unstable. In my mind, I was confident that if we had chosen ExtJs over YUI, we would have been a whole lot further a long and this wasn't because YUI sucked but because my experience level with ExtJs was much greater. I would have been able to lead my developers a whole lot better that how I was, which was, "the blind leading the blind".

I ended up leaving this organization back in July 2008 because of my Health issues. I moved back to Colorado Springs, CO with my wife and kids and got a job at Current USA Inc. as a Web Developer. Life is much different now, but I do miss the Department of Public Health sometimes. I am now working on a website redesign of http://www.currentgiftcards.com/ that is running on the ASP.NET MVC Framework. I am working with some pretty sharp developers who are eager to improve on the current website. I am bringing my experience with AJAX and Javascript to the table and hoping to improve the user experience of the website.

My of my tasks is to create a modular Javascript Framework that allows us to reuse a lot of the widgets we are building for the website. The Javscript Framework choosen for this project was the YUI and of course I was hating the thought of having to go through this all again. But, this time, I tried to have a much different attitude so that I could atleast give this another chance. I started to dig into the documentation again for information on some of the widgets we were going to implement. I started to find out that the documentation looked like it had been improved and a percentage of the library wasn't in Beta stage anymore. That kind of made me excited to finally get something with a little more stability. So, I charged on in and started implementing some of the widgets. The API's aren't as robust as ExtJs, but they are very usable, so I kept a positive attitude and built my first Carousel and Dialog and was pretty happy with the results.

Using the ASP.NET MVC Framework and YUI seems to be a perfect match. I created a Javascript Module to handle AJAX calls back to the server and the functionality was great and performed very well. One of the things that I wanted to do with the ASP.NET MVC Framework was render a UserControl as a string and emit it to the client for population into the DOM. Well, unfortunately, there wasn't a built in easy way to do this. After reading some blogs and trying different solutions that failed, I was at a loss. Then it hit me, why not use what I used to use in ASP.NET to render HTML, the renderControl method of the control object. So, I implemented a static class to perform the conversion process -

public static string RenderUserControl(string controlName, System.Web.Mvc.ControllerContext controllerContext) { System.Web.Mvc.ViewPage vp = new System.Web.Mvc.ViewPage(); vp.ViewContext = new System.Web.Mvc.ViewContext(controllerContext, new System.Web.Mvc.WebFormView("."), null, null); //vp.ViewContext = new System.Web.Mvc.ViewContext(controllerContext, new System.Web.Mvc.WebFormView("/Views/Samples/View.aspx", "/Views/Shared/Site.Master"), null, null); Control control = vp.LoadControl(controlName); vp.Controls.Add(control); StringBuilder sb = new StringBuilder(); using (StringWriter sw = new StringWriter(sb)) { using (HtmlTextWriter text = new HtmlTextWriter(sw)) { vp.RenderControl(text); } } return sb.ToString(); }

What this did for me was allow me to pass the usercontrol name to this method and get a string returned to emit to the client AJAX call handler. This was a thing of beauty and a whole lot better solution than what I had been finding on google. Now, we can design our interfaces the way we want in a usercontrol and spit out the HTML to be placed in the user interface using AJAX.

Well, off to learn some more. Take Care and Have a Great Day.

Monday, May 26, 2008

New Beginnings Again

Alrighty then, it has been quite some time since I have written in my blog as you can see. My life has taken another turn in a new direction. I just recently moved again from Topeka, Kansas to California. The decision to move started sometime early this year when my wife informed me that she had spoken with her Grandmother in California who informed her that she wanted us to move back California. Now I was surprised and excited at the same time, because I have wanted to get back to California for quite some time. I loved the California weather and beaches, so I was more than willing. My wife’s Grandmother is over 70 years of age, but manages pretty well that you wouldn’t even think she was a day over 50. But we all know that there is a time when that all starts to change and things slow down quite a bit and I think that time is nearing. Her health is pretty good, besides the health issues she may have that she doesn’t tell anyone about. But, my wife feels like she really needs to be there for her and I am not in disagreement, so back to Cali we go.

I began the process of job searching again to see what was available in the California market for my skill set and man was I presently surprised. I decided to place my resume on Dice and Monster to see what responses I would get and my cell phone wouldn’t stop ringing. Recruiters were calling left and right and wondering when I was going to be available for an interview. I had to explain that I was still located in Topeka and would be relocating to California. Now this was in February and I informed them that I would be coming out to California for good in April and was preparing for my transition. This news confused several recruiters because they had never dealt with this type of situation before and most needed someone available ASAP. My only requirement was to have a 2 week notice and 1 week relocation time period, which most were okay with.

Several recruiters had procedures that required them to meet with me face to face before they would send a candidate out to a client. I could understand that, but I wasn’t in a position to work with that option at this time. I have been a consultant for nearly 8 years now and have gone to work for several large organizations with nothing but a phone interview with the client. I was confident in my abilities and from my previous engagements; I knew I wouldn’t have any problems. About 4 out of the 20 or so recruiters were on top of there game. I had informed them that I would be making a trip out to California for 2 to 3 days and would be available to meet with clients for interviews. Things turned out great and I was able to get interviews with Myspace, Countrywide, Kaiser Permanente, and Spark Networks.

Now, the interviews were quite interesting. I don’t think I had ever gone through such grueling interviews in my life, or that I can remember. I was applying for Senior .NET Developer positions since those are the positions I have been working in so far. I was interviewed by Senior .NET Developers, .NET Architects, and Managers. Out of all the interviews, Myspace and Kaiser were my hardest. I faced a lot of questions which were geared for book smarts which I certainly wasn’t good at. I have never done well with test and I have acknowledged that but don’t let that hold me back. I pride myself in understanding what I am learning and if I can’t understand it, I have no shame in saying I don’t know. I am more than willing to learn what I don’t know, but it has to make sense for me to retain it. I am thankful when I have difficult interviews because I learn quite a bit about my weaknesses and areas that I need improvement. My interview with Myspace was done by 2 Senior .NET Developers who hit me with a lot of difficult questions, but the challenge was when they went to the white board and asked me to solve some complex issues. Talk about make your sweat! I was drenched and almost brain dead by the end of that interview.

Now, Kaiser was very interesting for the simple fact that I was interviewed by 7 .NET Architects. You can say, I was a little intimidated at first, but I did quite well. So, well, that they extended an offer to me the next day, but feel quite short on salary expectations, so I turned them down. Myspace came back and turned me down later. I never did hear back from Spark Networks and Countrywide is on hold because they are going through some financial issues.

My trip to California was a little expensive and I wasn’t successful in acquiring employment. A little discouraging at first, but I just kept plugging away. I had several conversations with different recruiters who wanted me to come in for some face to face interviews. At this time, I was not really feeling face to face interviews at my expense, so I pushed back for some phone interviews. A lot of opportunities went by me, but I don’t regret this decision. I had one very interesting conversation with a recruiter who was looking to fill a contracting position with LA County Public Health. The contract hadn’t been won yet because it was contingent on the candidate and she thought I was the perfect fit for the job. She informed me that should I be selected, a face to face interview would be required. I wasn’t too excited about this possibility and informed her that I may have to pass on this opportunity because I really can’t afford to keep flying back and forth for interviews. She understood my situation convinced me to at least give it a try and see if I am even selected, so I gave it a try.

I spoke with the wife about this and she agreed with me that this was too expensive right now and that I should keep looking. That night, the same recruiter contacted me asking if she could also submit me for another position for that same client. I gave her the green light with some reservations, but wanted to see what might happen. Two days later, I received a call from the same recruiter informing me that I had been selected for the second position that she had submitted me for. I was excited and disappointed at the same time, because I knew I couldn’t afford to do this right now. I informed the recruiter that I would have to pass on this opportunity and appreciated all her efforts. Surprisingly she refused to give up and insisted that I take the weekend to discuss it with my wife and think about it. I informed the wife and we both still agreed that it wasn’t worth it.

Monday morning, I called the recruiter and informed her that I would have to let this opportunity go. She immediately countered and made an offer to pay half the travel cost if I get the position. Not really an impressive offer, but worth considering I guess. I called the wife and passed this new information on to her and she wasn’t impressed either. She immediately asked me, “Do you really want to go for this?” I was straddling the fence because I thought this would be a great opportunity should I get the job and at the same time a huge waste of money should I not get the job. My wife and her great wisdom responded saying that I will really regret it if I didn’t at least try. So, I called the recruiter back and told her that I would do it.

The interview was setup for a Wednesday, so I flew out Tuesday night with an expected return flight of Wednesday evening. I interviewed with the Director of Applications Development and the interview was awesome. I don’t think I have ever met such a knowledgeable Director of Applications Development. He was an old school programmer with modern thinking capabilities. He was looking for someone with my exact skill sets with an eagerness to learn new technologies. I was the perfect fit. He informed me that I would be the Lead .NET Developer helping to manage up to 14 other .NET Developers. I would be heading up a new project that used the ASP.NET MVC Framework on Visual Studio 2008. I was blown away and felt like a child on Christmas day. I would have never thought in a million years that I would be in this position. Most places I work are always behind 1 to 2 versions of the .NET Framework and I would be venturing into a new territory with .NET 3.5 and MVC. Wow!!!

I flew back to Topeka, Kansas completely mind boggled and ready to go to California ASAP. I told the wife what happened and she was blown away too. The next day, the recruiter called me to inform me that I got the job and they wanted me to start ASAP. That was an exciting day and I am glad that I took the chance and went for the interview.

I have been on the job for about 5 weeks now and have learned a ton of things about ASP.NET and MVC. The project I am working on is orchestrated by a .NET Architect who is showing me how the MVC Framework operates and what can be done with it that wasn’t possible with standard ASP.NET. I am amazed to say the least and confused at the same time, because this is such a new technology that there aren’t any books on this yet. That in it self is exciting because I am really on the leading edge of technology and one of the first early adopters. The framework is still a CTP Beta version. By the time it reaches release candidate stage, I should be an expert which puts me light years ahead of everyone else. This makes me more marketable than I ever was before. Knowing ASP.NET alone is awesome, but adding MVC to your skill sets is even better. My aim is to perfect this framework to the point where I can do it in my sleep. My business is going to grow by leaps and bounds. This is exciting and I am going to enjoy this ride as much as I can.

Happy coding!!!

Friday, February 1, 2008

Week Gone Wild

Here it is Friday and I am finally home after a fairly stressful day. This whole week has been quite stressful. I am working on a project with a company implementing SQL Server Reporting Services and man is this a difficult project at times. I have been working with reports for about 8 years now and it always amazes me how difficult they can become. When I used to work with Crystal Reports, it would sometimes drive me crazy and SQL Server Reporting Services is no different. Now, don't get me wrong, I am technically capable of designing and developing the reports, it is just the issues around end user specifications and data extraction. It is fairly common for me to be in situations where no one seems to know their data and I am tasked with figuring it all out while still performing my main tasks of report creation.

Now, I would like to clarify one fact here. I am by no means a DBA! I think I have stressed that fact in several projects and it never fails, I am thrown the awesome task of navigating my way through the database and creating complex queries that would drive an ape mad. I guess the worst part is that I love challenges too much and I haven't quite realized just how deep I am getting until after I am drowning. I keep telling myself that I can't let this keep going on, but I loose focus and fall right back into the pit and struggle each time to get out.

I am a programmer, think like a programmer and breathe programming! That is what I am. A .NET Programmer with a love for creating applications that provide solutions to problems that exist in the Enterprise. I like finding ways to code an application that can do what no other existing application can do. But, I find myself stuck administering band aides to wounds that need surgery. I guess the reason I enjoy reports is because of my creative nature, but there's a whole lot more to reports than creativity and those are the things that I guess I struggle with.

I chose Microsoft Technologies because Microsoft is very good at one thing and a lot of people don't like to give them credit for it. They create jobs! Microsoft's main purpose is to provide the tools for the populous which allows the populous to provide the solutions to their customer base. Prime example, I had an issue today that has just added to my already extensive list of future projects. I work in an environment that is tight on security and the systems I have to operate on use both SQL and Oracle. SQL Server Reporting Services is the tool of choice to extract data from these different systems.

Oracle is a complex data warehouse with about 15 different data stores housing terabytes of data. This makes for a very interesting day when attempting to create reports. I am tasked with creating queries that encompass about 5 to 10 table joins from potentially multiple data sources. To put the icing on the cake, I may at times have to extract data from a SQL Server data warehouse that is also several terabytes in size. This is where the pressure builds because these queries can take anywhere from 5 minutes to several hours depending on the tables I am joining to. Plus for some strange reason, security doesn't allow for oracle to use database links to SQL where I could run more efficient queries. So, I attempt to go the other way around by using a database link from SQL to oracle and find that utilizing any complex queries with OPENQUERY fails and when working is slower than running the queries in the oracle database. My time basically doubles.

Now, I see an opportunity here. How can I leverage my knowledge of both systems to provide a better solution then what is currently being used. There just has to be a better way than this. I attempted to formulate some plans today to attack this issue with little success. I figured if I could create some sort of middle component to allow me to perform this same process, things would be beautiful. What better technology to use than .NET, so I pull up a new project and started coding away. I had a great idea and had spec'd it out and started on the design and development. Then, the Business Analyst (BA) for reports shows up wanting the reports I have been working on yesterday. He has for some strange reason, promised his client some results by noon and needed to provide them with feedback. I informed him that I was having difficulties with getting data migrated over to oracle and I don't have enough permissions in SQL to migrate data from oracle and I didn't really want to do either since that would create duplicate data. So as far as I am concerned, those reports wouldn't be ready today. He of course didn't like that response and pressured me to provide some type of results today.

So, I had to put my ideas aside and return to the archaic process I have been using. That is pretty much the way things work everywhere I do contracts. Fixing problems for the long term aren't important. Preference is placed on temporary fixes. That of course saves them money short term, they think but they end up spending more money in the long term, because they will be calling me back next month to repair the same problem that I repaired last month.

Now, some tables have millions of rows that will potentially only supply me with a couple of records. So, my day is spent running queries and waiting for the results just to find out, there's no data. I make a change to the query and rerun to wait another 5 minutes to several hours. That isn't a problem for most people who don't mind milking the clock and getting their paycheck and going home. It just happens to be a problem for me since I want to get some work done sometime today.

Now, when I express this frustration to management and other associates, I seem to get the same response. This is the way stuff works around here and that just kills me. What can I do besides roll with the punches? So, I just develop an attitude of who cares, just come in and do your job and go home. Get your paycheck and be happy. Do enough to keep your contract and keep your client happy. Well, I must admit, today rubbed me the wrong way.

It is imperative that I work for myself. Every day I work on this project for this client, makes me more eager to finish developing my own software and do what I do best, provide software solutions.

walkins5