Upcoming Events!

by Arra Derderian 4. September 2010 22:55

HTML 5 - 9/27/2010 - HTML 5 Discussion on new Features

F# - 9/13/2010 - New Web Technology Discussion

Cloud Computing Camp - 10/11/2010 - Cloud Camp

Search Engine Optimization - 9/13/2010 - SEO Information

 

I am going to try and hit all of these events. They seem really interesting and are all FREE!

Tags:

Cloud Computing | User Experience

Apple Annoys Me

by Arra Derderian 26. August 2010 06:33

I love my iPhone 3Gs. It has a great interface, it is fast, it does everything I want. I own a MacBook and it is also great. Fast, great UI, and tons of cool features. What annoys me about Apple though is that it is sooooooo...."trendy". People want to buy $1,200 laptops because they are Apple and not for any of the great features they may have. I think it is due to the iPhone's success which has exposed so many people to Apple products.

Secondly, I am annoyed because my girlfriend owns an iPhone 3G and it is slow and doesn't even function at all anymore. Opening text messages, the stock application, and email are all terribly slow. This happened over time and got worse after some of the updates Apple pushed out. What is she supposed to do? Oddly this all occurred when the iPhone 4 came out and it makes me think they are done supporting it. What should she do? Buy a new iPhone?

I don't know. Nobody ever questions Apple, but everyone is so quick to hate Microsoft. Antenna problem? "It's the way your holding it." Sometimes I like to rant. Maybe I am off base. Whatever. Goodnight. 

Edward I am awaiting your response to this...

 

Tags: , ,

Technology

First impressions of Azure and MVC

by Arra Derderian 11. August 2010 07:33

I attended a discussion tonight on Windows Azure and ASP.NET MVC with Azure. All around it was a great learning experience for someone who is so accustomed to building applications using ASP.NET and IIS. The main point I learned was that MVC is an alternate route to take when building websites rather than a replacement for ASP.NET form style development. MVC had some cool features like: 

  • Ability to easily display the same data models using different views.
  • Strongly typed objects being posted to a page that can easily be accessed.
  • Enhanced security on literals being posted and displayed on a page.
  • Built in validation including client side validation being synced with server side.
  • SEO optimization built into URL's.
Windows Azure is what I really wanted to learn about and I was able to get a good idea of how the new cloud computing model works. I plan on getting a project up and running as soon as possible. Azure has a local "Fog Cloud" development fabric that allows you to easily debug your cloud projects which is great. You begin by adding the Azure SDK or if you have Visual Studio 2010 it comes with it. Once I get going on this and attend the information session on Sept.23 I will be sure to give a good writeup on Azure.

Lastly, it is definitely time to purchase a new laptop with Windows 7, .NET 4.0, and Visual Studio 2010 because all the new features looked great. If your looking to quickly get a development environment up and running you can get all the free tools in one place here.

Tags: , , , , ,

Cloud Computing | Engineering | Technology | MVC | Azure

Adding a lazy load to your site for speed and efficiency

by Arra Derderian 30. July 2010 23:37

An example of a site we built:

http://www.ezwayprods.com/products/category/default.aspx?cid=3

Things that help:

1. Latest jquery library and knowledge of the framework.

2. Server technology to request new items from. (I used a webservice)

Pagination is most often the solution for having users browse through large amounts of data. It is tedious and not a great user experience. While building a site for a client (See example link above) our original design did not include pagnation because the customer's inventory was not very large. After building the site we decided to include more items from his paper catalog. This ended up with around 1000 products in the 4 categories we originally setup. Since each product came with a picture and 5 columns of data the page was taking too long to load the images and text.

The solution we came up with was a lazy load for the products as the user scrolled down on the page. We bind an event handler to the document scroll event and check to see if the user is at the bottom of the page. If they are then we make a web service call for the next 25 results in the catalog. This keeps occurring until the user has loaded all of the items. The page now loads quickly and only with the items the user wants.

I will only include the JS file for this functionality since the loading of the products list can be done. The product list is fed from a .Net Web Service which populates a Product object using LINQ to SQL, which is stored in our SQL database. The object returned by the webservice is a List<Product>.

JAVASCRIPT:

 

var pageIndex = 1;
var isLoading = false;

$(document).ready(function() {

     $(window).bind("scroll", function() {

       if (isScrolledIntoView($("#footer")) && !isLoading)
          DynamicLoad();

      });
});

function isScrolledIntoView(elem) {
     var docViewTop = $(window).scrollTop(),
     docViewBottom = docViewTop + $(window).height(),
     elemTop = $(elem).offset().top,
     elemBottom = elemTop + $(elem).height();
     //Is more than half of the element visible
     return ((elemTop + ((elemBottom - elemTop) / 2)) >= docViewTop &&
    ((elemTop + ((elemBottom - elemTop) / 2)) <= docViewBottom));
}


function DynamicLoad() {

     $.ajax({
     url: "/services/EZWayService.asmx/GetNextProducts",
     data: "{categoryID : " + querySt("cid") + ", pageIndex : " + pageIndex++ + "}",
     beforeSend: function before(e) {
     $("#loading-image").show();
     isLoading = true;
     },
     success: function process(result) {

          if (result.d.length > 0) {
             $.each(result.d, function() {

                 var tableRow = "";
                 var productName = this.SKU_GROUP_DESCRIPTION == null ? this.SHORT_DESCRIPTION : this.SKU_GROUP_DESCRIPTION;
                 var category = this.PRODUCT_SUBCATEGORY_1;
                 var productLine = this.ProductLine == null ? "N/A" : this.ProductLine.product_line_name;
                 var company = this.MANUFACTURER;

                 tableRow = "<td class=\"img\"><img alt=\"No Image Supplied.\" src=\"/_assets/images/100x100/" +

                 this.IMAGENAME + "\" /></td><td>" + productName + "</td><td>" + company + "</td><td>" + productLine +

                    "</td><td>" + category + "</td><td>" + (this.SKU_DESCRIPTION_1 == null ? "N/A" : this.SKU_DESCRIPTION_1) + "</td><td>" +
                 this.SHORT_DESCRIPTION + "<br/><a href=\"/products/category/products.aspx?pid=" + this.ID
                 + "\">Learn More</a></td>";

                $(".searchResults").append("<tr onclick=\"window.location='/products/category/products.aspx?pid=" + this.ID + "';\">" + tableRow + "</tr>");

         });

         $("#loading-image").hide();
         isLoading = false;

       }
       else {
          //force a true here so there is no more loading when we are done
          isLoading = true;
          $("#loading-image").hide();

       }

     }
   });

}

END CODE

As you can see above we start by binding to the document scroll event when the page is completely loaded. We have a global flag that lets us know if the page is currently loading new products or not and a page index variable. I am not going to get into details of the isScrolledIntoView method but it basically lets you know if an element (I used our footer DIV) is more than half in view on the page or not. We attach our handler to the scroll event so that everytime the user scrolls we check if they are at the bottom of the page or are already loading a new list of elements. (Sometimes they may continuously scroll even if they are at the bottom and we don't want to flood the screen with multiple requests.)

If the user is at the bottom of the page and we are not loading new products we call the DynamicLoad method. In DynamicLoad we make an AJAX request to the server for our new products. We show a loading graphic before this starts and then hide that graphic when the request is completed. Secondly, before the request starts we update the isLoading flag to true to block subsequent requests from happening. When the request comes back we make sure we have some new items, if not we keep the isLoading flag to true forever because we are at the end of the list. Each request we pass the page index we want and the category of products we want as well.

If we get a new list of products we iterate over each one appending them to our already existing table on the page. As you can see because we are using JSON as our data serialization technique we can easily reference our products as native javascript objects and access the properties for each one.

That's it! Let me know if you have any suggestions for me or if you have any problems implementing the code. Not shown here is all our custom error handling code and .Netwebservice but we recommend using both. Next week I will explain the dynamic search capabilities we built with keyword highlighting on the same site. http://www.ezwayprods.com/products/default.aspx


Thanks!

Tags: , , , ,

Engineering | Technology

iAd on IOS4

by emckeown 15. June 2010 00:52

So what is iAd and what makes it so different than a regular online ad? iAd is a key feature of the new IOS (IOS4) by Apple and what makes it interesting is that iAd is integrated into the operating system of the new mobile device. This allows for a better user experience and a more seamless transition between the ad and the app that the user is on.

Lets say you are a 3G network and there is an ad that you click on. One of the problems with the current app is that  when you click on it, it will take you to another site. However, before that happens it will stop the current app you are in, launch a new app, and then load the site at a snails pace. All of this has the potential to annoy the user and not really entice them to buy the product. Apple has answered this problem by creating its own ad service, iAd, which would make the user experience seamless. If a user clicks on an ad the app then navigates them to the ad in the app they are in. And if they quit out of it they will be right back to where they originally were, making the entire process seamless.

Currently, there are only large firms advertising with iAd as the cost is very high. However, I suspect that more and more small businesses will join that group once it is a bit more affordable. iAd will start serving ads on the first of July.

Tags:

Cloud Computing | User Experience

Should a Small Business Build their Site with Flash or HTML?

by emckeown 25. May 2010 01:13

This is an interesting question and before I answer, I would like to say that I am a big fan of Apple and their various devices, so I may be a bit biased.

 

It has always been an interesting question should a client building a site use Flash and then be tied in with the Adobe Plug-in?  I think the answer to that question depends on the site. If you want a highly interactive site it is not a bad idea to use Flash.  

 

So what are the possible obstacles with using Flash? As of today you will restrict any iPhone, iPod and iPad user from seeing your site. With Apple having sold over a million iPads in the first few week of them introducing the device, that is a certain negative and recommendation not to use Flash. If you want your site to be interactive you can use AJAX. AJAX is not as good as Flash but it is an open source and using an open source solution in the long run might be the most cost effective way to run your website.

 

The battle between Flash and Apple is not over but with the growing popularity of Apple mobile devices, I would bet on Apple.  


Tags:

Mobile Payment for a Small Business.

by emckeown 17. May 2010 19:47

Accept payment everywhere with ‘Square’. If you have an iPhone, iPad or Android,

you can now accept credit card payment anytime, anyplace.

 

How does it work? Well, when you sign up with Square they will send you a credit card reader (for free) that you then plug into your audio jack. Now, you can swipe any credit card and get credit card payment anywhere that you are.

 

According to Square, it is both safe and secure and their fee structure is less then other vendors. There is no monthly charge, just a transaction fee which is 2.75% + .15¢ if the user swipes the card and 3.50% + .15¢ if the user keys in the number. The additional fee, according to the company is because the latter is a slightly more complex process.

 

I think this is an interesting company and the perfect solution for a small business or individual with a smart phone.

 

check out their getting started page. https://squareup.com/get-started


Tags:

Technology

LINQ to SQL and N-tier Design

by Arra Derderian 5. May 2010 18:33

N-tier design consists of building out stored procedures and functions which are called by a "DBHelper" or database wrapper class which is then called by your application layer consisting of various business objects. This is the model I have always used when building websites and applications and it has always worked out great. I easily instantiate my business objects on my webpages and bind controls to their properties while encapsulating all the application logic inside their classes while also utilizing the DB wrapper class to make updates to these objects. Recently I tried out some of the capabilities of LINQ to SQL on a site we built in an effort to learn the technology. The site consisted of basic objects such as Products, Companies, and Product Lines. I was able to build my database tables and configure all my relationships in SQL Enterprise Manager and then simply drag those tables onto the DBML designer and presto I had my DB wrapper class and application layer built for me. I then created a static "DBMLHelper" class that retrieved and updated the tables using LINQ constructed queries.

All of this seemed great since I did not need to build application objects, associated constructors, public properties, and db methods which takes up much of the time. Also when deploying the project all I needed to do was deploy the tables and not worry about all the stored procedures. It is also great since I can SVN all my code and not worry about having to script out every stored procedure. I could easily get lists of objects and use LINQ to query them for whatever objects I needed and had all property relationships at the tips of my fingers.Lastly, it supported my dynamic environment configuration settings as well which was very nice.

Throughout all this I was wondering what drawbacks there might be. One problem I encountered was circular references. This kept happening because LINQ would create properties of parents on the children objects when I had one to many relationships. I had to spend some time customizing my DBML using the properties window turning the "Create Parent Property on Child" feature off. Also everytime I changed a table I had to rebuild my DBML and it never rebuilt it exactly how I had it. This caused me some frustration when having to modify all my Child property settings each time and I can guarantee in a large scale development environment this could get tedious. Lastly, because I place a good amount of custom code in my application layer and LINQ to SQL generates this all for you I could not modify this dynamic file by hand because it would get overwritten each time I regenerated my DBML. Things like application object caching, custom formatting, and exception checking would have to be moved to the DBML wrapper class. Dealing with sorting was also annoying because you could not dynamically performa a sort based on a parameter where in SQL you can. The last thing I thought might be a problem would be when I have a very complex query that SQL can do very well, writing it in LINQ would not only be hard but it might not write the "best" SQL for the job and thus create a performance problem without you knowing.

In the end I am not sure where I stand on the issue of classic n-tier design vs. LINQ to SQL. There are pros and cons for both. I think mainly for small project involving clearly defined object types it is very helpful and eliminates a lot of repetitive SQL and application code. This is probably where I will mostly use it for now. I also think exploring all of the LINQ syntax and abilities may sway my decision in the future as I have heard other developers rave about LINQ to Objects and LINQ to SQL. I plan on trying to integrate in my upcoming projects and hopefully it can make my life easier without sacrificing the flexibility of an n-tier model. Many times when Microsoft tries to make things more convenient for the developer (Microsoft .NET AJAX Library) we end up sacrificing a lot of felxibilty and gain a lot of overhead (unecessary script files).

Let me know your experiences!

Tags: , , , ,

Engineering | Technology

“Why don’t you put it on the blog; Rockin’ like this is my job.”

by Rebecca Pleshaw 4. May 2010 06:50

Maybe it’s not the same rocking that the Black Eyed Peas are talking about, but I’d like to think I rock out my own corner of the internet. And it is my job, actually. I nerd it up all day long, developing websites of all shapes and sizes, continually discovering the ever expanding World Wide Web. There’s no way around it; the internet is where I park it for most of my days. So what would make more sense than having everything I need available in that very spot I’m always at? The answer (for me) is nothing. I find it brilliantly efficient having everything I need securely at my fingertips via widely available high-speed connectivity. But what exactly do I keep behind the internet looking glass? Well, technically speaking…everything.

Financials. I’m a big fan of banking online. I can pay any and every bill through my bank’s online interface. Also, I take the paperless route, eliminating bulky statements in the mail, which in turn eliminates the question of where to store all that printed material. Through other institutions online, I can also keep track of retirement account historical data and fully current investment details. There are also sites out there that help maintain a budget by securely feeding in your bank account information, like Mint.com.

Now let me transition to another beautiful online solution. I love music. It provides a soundtrack to life, constantly keeping me intrigued and entertained.  My collection at home is enough to fill a few large external hard drives, but none of that can stand alone on one computer, and quite frankly it’s becoming a hassle to backup. I’m a delinquent iPod user, still listening to playlists from a few years ago due to the fact I can’t be bothered to sift through my massive music library. I'm a little bit behind the internet ball on this one, but I'm newly fascinated with Grooveshark.com. This is your solution to that dusty stack of MP3's hogging most of your hard drive. Grooveshark is an online streaming music library where you can search for any song you want to hear and then add it to your very own virtual library. You can play music on the fly. You can even create playlists and share them with friends. The best part?...It's all for free! My music selections are saved and available to me just as I left them, from anywhere I log in. A music menu I don’t have to worry about backing up, losing, or growing old.

So consider turning to the web for some innovative task solutions. Keep your eyes searching for ways to make your everyday routines cleaner, easier, and more efficient. And nobody dislikes efficiency.

Tags: , , ,

Apple moving towards "Cloud" storage for iTunes.

by Arra Derderian 1. May 2010 20:55

After acquiring online music service Lala Apple has decided to shut it down and most likely begin work on a new way to deliver iTunes music to customers via cloud computing. This would allow customers of iTunes to store all of their music online and have it available to them anywhere they go. No longer will a user need to worry about buying a 4GB or 8GB iPod, storage will be taken care of inside Apple's new cloud. This coincides nicely with nicely with 4G coming along soon so streaming performance will be better and also it is speculated you will be able to download some songs to local storage so you can listen to songs if you are offline.

I am not sure how I feel about this change but being part of a company that believes in the future of the Cloud model I like the idea. I worry about the fact I have purchased something that I really do not have in my possession. It is stored remotely on an Apple server that I can access but at anytime can be unavailable to me or taken away if I happen to violate an Apple agreement. Technically speaking I wonder if Apple will store a separate copy of every song for every user who purchases it and place it in a location only available to that user or will they just grant access to that song for each user who purchases it. The second model seems like it would save tons of storage space but it does change what you are actually purchasing. No longer are you purchasing a physical commodity like an MP3 but it is really the ability to access that song in the cloud.

With the cloud model there are some questions users have to ask themselves concerning the ease of accessing files versus the security of having the file stored locally. Even more as people stop buying computers and start paying for operating systems as a service. It will be interesting to see how quickly the cloud model is adopted due to its resource benefits amidst the security and privacy concerns of users.

Tags: , , ,

Cloud Computing | Technology