Chrome needs a new search

Since Chrome was released, my web browsing habits have reached new heights. I’m constantly running at least 5 Chrome windows with at least 5 tabs each on my three monitor setup (as I write this on my single monitor laptop I have 75 tabs open between 7 chrome windows — the laptop has been on for at least 2 weeks).tabs1

A minutes ago I tried to find one tab with a very specific website and realized I couldn’t find it right away (this is the first time, I can usually find it within 5 seconds). A Chrome solutions would be ideal. Otherwise MS could help by adding a search feature to windows 7 to allow me to search through all open instances of a single app. Meanwhile, I guess I’ll open a new tab and take care of it the old fashion way.

Wikis In the Workplace

Most likely when you hear the work “wiki” you think of Wikipedia. Wikipedia, as you probably know, is a wildly popular online encyclopedia. If you haven’t integrated Wikipedia into your daily live you are really missing out, but that isn’t the topic of this post. This post is about the role of wikis in the workplace.

At the core a wiki is a text management system that allows people to create, edit, and share articles online. A wiki can be used for many things, not just encyclopedic content. For example, one common use of wikis is to create online help documentation. The wiki is the best choice to store many kinds of company knowledge because it flexible, accessible, and it maintains revision history.

The storage and sharing of company knowledge is critical to the success of any business. Employees must know processes, procedures, policies, and information each day to accomplish their work. If a person quits or calls in sick the other employees must have the information they need to compensate for the missing team member. If your office is like most offices, the vast majority of this information is stored in the heads of a few key employees. This is clearly not the most effective solution. Any office must have a persistent and accessible method of storing this critical information.

A wiki is the perfect solution to this problem. By creating a secure company-wide wiki you and your employees can begin to document their job and share their knowledge. Policies can be shared more easily, processes that are only known by few can be performed by many, and everyone can learn new skills that will enhance the value of themselves and the company.

wikicapture We use a wiki at Atlas Bay for a variety of purposes. One of the most important uses of a wiki for us is to document technical processes. By storing this information in our wiki there is no need for multiple people to figure out the same problem. Additionally, when we must perform a task again after many months of learning the task we can simply read our wikis for any procedures and notes regarding the task.

Another use of our wiki is software specification documentation. When working on a new project we work closely with a customer to determine exactly what they are looking for and what their needs are. By using our company wiki to to store this data, each person working on that project team has constant access to that information and can make updates as need.

I strongly recommend that your company utilize a wiki and begin to centralize your company knowledge. The process is simple and affordable. Your wiki will start out small, but over time it will grow organically into a large an useful collection of information that will increase the effectiveness of your business.

Billco Pics by Lacey Haslam

One of the things that most excites me about AtlasBay is the opportunity to approach my favorite businesses with the tools and knowledge to help them communicate with their clients. Last year we were on track to build a website for Billco’s Bar and Billiard’s in Napa. Unfortunately, as the economy started crumbling, Billco’s cancelled their plans for their site. Fortunately, by that point we had already been able to get Lacey Haslam into the bar and capture some great pictures. I figure we might as well post the pictures to show off how well Lacey was able to capture the subtleties that make Billco’s a local favorite.

Non-Profit Marketing and Branding

Like most industries these days budget cuts are a fact of life for non-profit organizations. With the market down, donors are holding back or reducing annual grants and donations to non-profit organizations. To help reduce the effects of these cutbacks it is more important than ever for non-profit organizations to efficiently and effectively utilize every marketing dollar that is spent. Atlas Bay has collaborated with the designers and branding experts at Kalidoscopoio to provide web design, branding packages, and marketing materials for many non-profit originations. Through this collaboration we are able to bring our clients a diverse set of skills ranging from branding to computer programming.

In recent years we have seen the power of the internet. Politicians used websites, social networks, and viral campaigns to raise record amounts of money from individuals across the world. Non-profit organizations have collected millions of dollars from individual donors on Facebook and through PayPal Donations. With traditional funding sources drying up, now is the time to make sure your organization is using these new resources effectively.

One of the most recent projects designed and created by our partners at Kalidoscopio was for Universitarios para el Desarrollo (The Association of Universities for Development). The Universitarios para el Desalrrollo is a joint project between teachers, students, and professionals that promotes development and social responsibility in Argentina. The organization has been active in their mission for nearly 20 years and has helped thousands of young people become better and more productive members of society.

Kalidoscopio was tasked with designing the association’s website to highlight the values, results, and current information about the association, its members, and the communities. Working closely with members of the association’s staff Kalidoscopio designed an attractive and functional website that enhanced the overall brand of the organization.

Capture

The overall design of the website focuses a great deal on photos and personal stories. As you can see in the image above the page header is a custom font with three photos showing the user snapshots of the programs. The website features the traditional elements such as a blog, photos, videos, general information, and contact details. The website differs from most non-profit organization websites in one important way: it is always changing.

Capture1Powering this website is a content management system that allows any authorization  individual within the organization to post updates, change text content, and more through a simple web interface. Unlike most non-profit organizations with static content on their sites visitors will be enticed to return to this site regularly for important news and updates. Furthermore, visitors can remain constantly connected by subscribing to RSS feeds for updates directly from the organization.

In designing the site, Kalidoscopio chose to feature various personal stories, photos, and quotations from individuals who have been involved in the program. These stories bring a personal touch to the site and really invite the user to get involved or donate to the program.

The last, and perhaps most interesting component of this website is the social networking focus. In today’s get-it-now, instant-feedback world it is important for all organizations to connect to their users. Tools like Facebook and Twitter are quickly become just as important as the telephone or email when it comes to communicating with your customers.

Capture2

Non-profit organizations that miss the bus on these new tools to connect with their communities, clients, and funders will soon find themselves trailing by more agile and responsive organizations. The non-profit organization industry is an important and competitive one and every organization must constantly improve to stay ahead of the curve.

With the intention of staying more in touch and better connected Kalidoscopio and Universitarios para el Desarrollo decided that it was important to prominently display the organization’s Facebook groups right on the front of their homepage. By encouraging visitors to join these groups Universitarios para el Desarrollo will stay more connected and more responsive and be able to better serve their clients.

If your organization is looking to update their brand, website, or simply to become more engaged with your clients and community give us a call. We would love to help you help others.

Product Review: DropBox

For the last 6 month I’ve been using DropBox (www.getdropbox.com) for all my file sharing and backup needs. The app does a great job with version control and has been crucial for sharing files with others.

The only problems are noticed are that:

1. Sometimes the interface can be a little confusing — it’s too simple. I think they should box some stuff in a little bit. It would be really nice if they also incorporated FB Connect and allowed you to invite any of your friends to view certain files.

2. You cannot share sub folders: you are only able to share the root folders. This isn’t a big deal though.

3. The url of the files uploaded to the Public folder don’t work on my computer. They also aren’t working on my brother’s account. I’ll have to look into this a little more — I doubt it doesn’t work for anyone.

All things considered, this is a great app. The free version is more than enough for most users. Companies or people that really need their files online can pay $100/yr for 50gb of online storage that automatically syncs to any computer that has the client installed.

ASP.NET MVC RC on Mosso

Today, I setup my first production ASP.NET MVC website. After a little investigation and a contact to Mosso’s tech support everything went up as planned. The first step is to configure your application like you would for any IIS7 host. You don’t need to have the “mvc” extension after your controllers in your routes. Next upload the application to your Mosso website. When you upload your site make sure you include the ASP.NET MVC dll files in your website’s bin directory. The needed files are System.Web.Abstractions.dll, System.Web.Mvc.dll, and System.Web.Routing.dll. These files will be located in Program Files\Microsoft ASP.NET\ASP.NET MVC RC\Assemblies on your computer. At this point your default route should be working. The last thing to take care of is resolving the 404 error you will receive when accessing urls within the site.

image

The reason for the error is that Mosso runs all IIS7 applications in classic mode by default. You will need to contact Mosso tech support and ask them to switch your application to integrated mode. It will take about 15 minutes for the changes to propagate to all of Mosso’s servers. After the propagation is complete your ASP.NET MVC site should be up and running.

This process should work on any shared host or cloud host as long as they are running Windows Server 2008 and allow you to run your application in integrated mode.

Cloud Hosting Experience

Recently, we have switched most of our hosting accounts over to Mosso’s (http://www.mosso.com) cloud hosting service. Previously, we were using virtual servers or dedicated servers to host all of our web applications and websites for Atlas Bay as well as our clients. My early experiences with Mosso have been great.

First, the technology Mosso uses is up to date and diverse. I can host websites using the latest version of .Net and PHP in the same folder without worry about configuring IIS to use PHP or any other complex scenarios. With Mosso, I can simply upload my application and it will figure out how to properly host it. So far everything has worked really well and been incredibly easy.

Second, there customer service has been incredible. I don’t really like to bother calling in to places for simple questions so I love there instant chat feature. On every page of their website and control panel there is a link to chat instantly with technical support. I have had every issue or question resolved in a matter or 1 or 2 minutes. It has been super convenient and saved me a lot of time.

Third, I love the integrated billing system. Now with Mosso, we dont have to create invoices for our hosting clients and process each payment separately. Mosso will take care of the billing and pay us directly. This service is really convenient and offered at a fair price (4% or $2, per transaction). For the amount of time this saves us I will gladly pay the service fee.

My one complaint, which is why we just started using Mosso, is that it took them a long time to roll out .net 3.5 sp1. I understand the issues with breaking changes, but I believe it is important for them and other hosting companies to making a commitment to supporting the newest technology. This is going to be an issue they will have to deal with in order to keep me as a long term customer. I can pretty much guarantee that if it takes them 6+ plus months to deploy the next version of .Net they will loose my business. Hopefully, they will have this worked out so they can quickly deploy new releases of frameworks and web servers without negatively impacting legacy software.

Overall, I am extremely satisfied with Mosso and I would recommend it to anyone who is deploying web applications on either Windows or Linux.

New Blog and Open Source Software

Well, we finally did it. We moved our blog to WordPress. This comes at a time when we are reevaluating our current software both inside our company and that we sell to clients. For the past years we have provided almost entirely Microsoft products to our customers and run our company off almost entirely Microsoft Products as well.

There are a couple of reason’s that we have now started evaluating and using open source software. The first, is simply about time. I have moved into a new role at Atlas Bay where I have stepped back from the day to day development of software. My new role is entirely about planning and management. Given that I was previously spending nearly 100% of my time either coding, planning projects, or implementing solutions I was not able to spend a great deal of time evaluating software too far outside of our current areas of expertise. My new role allows me much more freedom to experiment and research new product types and lines.

The second reason for this change is a technological shift. It is becoming easier and easier to integrate systems build on different platforms. For example, we can have external websites authenticate with our Windows Domain accounts using new identity federation technologies. Additionally, with cloud hosting becoming more mainstream it is now more practical and affordable to maintain servers and software running on a variety of operating systems and platforms. This was previously a large time consumer and expense for smaller companies and non-profit organizations.

The final reason is the economy. Given the current budget constraints of our company and our clients we cannot afford to miss any viable option to save money. If we can find free software that can be easily configured, reduce maintenance expenses, and satisfy our customer’s needs we would be failing our clients if we did not offer those solutions.

I do want to make clear that this does not mean we are abandoning systems or solutions that we have deployed for ourselves or our customers. There are still many Microsoft products that we have developed significant expertise in and invested time in creating custom experiences for our customers. I still believe that there are many Microsoft products that are the best in the industry and can save organization’s money by increasing productivity or decreasing long term expenses associated with a particular piece of software.

We have always believed in finding the right solution for ourselves and our customers. Part of finding the right solution is making sure that solution integrates with the customer’s existing systems and the users will easily be able to learn the new system. This means that we will use open source software only where it fits. If we cannot integrate something well into existing processes and systems in a way that will make the user’s work easier, we wont use the software.

Robots.txt HttpHandler in IIS7

In a ongoing effort to automate more of my work I decided to build a HttpHandler for IIS that automatically creates my robots.txt files. This particular handler will create robots.txt files that block all search robots. This handler will be installed on our projects web server which is used for development purposes only, and as such we don’t want these pages being listed in search engines.

First, we create a class project in visual studio. Next, add a reference to System.Web. Then create one class titled RobotsHandler.cs and add the following code.

Capture_1

Next, we need to strongly sign the assembly. This is required because we are going to add this assembly to the GAC on our web server. See this link for instructions if you are not familiar with this concept. http://msdn.microsoft.com/en-us/library/xwb8f617.aspx

Now that our little class library is completed we need to build. Remember to change the compilation to Release. Now, copy the assembly to the web server and register it in the GAC. See this link for more details on using gacutil. http://msdn.microsoft.com/en-us/library/ex0ss12c(VS.80).aspx

After the assembly has been registered, we will register the handler in IIS7. See this link for instructions on how register a custom handler. http://technet.microsoft.com/en-us/library/cc753249.aspx. Remember to set the path of the handler to "robots.txt". This will intercept all requests to robots.txt and map them to your new handler.

Now, test to make sure everything worked correctly using your web browser. Go to http://www.mysite.com/robots.txt. You should see this text:

User-agent: * Disallow: /

You could definitely expand this to use custom rules from a database or configuration file. You could also set the file to allow all robots by changing "Disallow: /" to "Disallow:".

Photo Box Rotator

I have created a JavaScript photo rotator similar to the one on iStockPhoto.com’s home page. This rotator is pretty simple and only requires about 20 lines of JavaScript. You can see an example here: http://www.solanocoalition.org. This sample was built using ASP.NET and does use a few functions from the ASP.NET AJAX Library. You could easily change it to whichever library you use or don’t use.

First we setup the containers to hold the images:

<ul id="panes" class="blockpix">
    <li class="onehunpic">
      <img src="<%=Url.Content("~/content/images/splash/0.jpg") %>" />
    </li>
    <li class="onehunpic">
      <img src="<%=Url.Content("~/content/images/splash/1.jpg") %>" />
    </li>
    <li class="onehunpic whitesq"></li>
    <li class="onehunpic whitesq"></li>
    <li class="onehunpic">
      <img src="<%=Url.Content("~/content/images/splash/2.jpg") %>" />
    </li>
    <li class="onehunpic">
      <img src="<%=Url.Content("~/content/images/splash/3.jpg") %>" />
    </li>
    <li class="onehunpic">
      <img src="<%=Url.Content("~/content/images/splash/4.jpg") %>" />
    </li>
    <li class="onehunpic whitesq"></li>
    <li class="onehunpic">
      <img src="<%=Url.Content("~/content/images/splash/5.jpg") %>" />
    </li>
    <li class="onehunpic">
      <img src="<%=Url.Content("~/content/images/splash/6.jpg") %>" />
    </li>
    <li class="onehunpic">
      <img src="<%=Url.Content("~/content/images/splash/7.jpg") %>" />
    </li>
    <li class="onehunpic">
      <img src="<%=Url.Content("~/content/images/splash/8.jpg") %>" />
    </li>
</ul>

Next, is the JavaScript:

// All images
var im0 = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25);
// Loaded images (set manually in html, then dynamically)
var im1 = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8);
// The indexes of the panels that will rotate
var pn = new Array(0, 1, 4, 5, 6, 8, 9, 10, 11);
// The path were the images are located
var imagePath = '<%=Url.Content("~/content/images/splash/") %>';
var currentPane = 0;
var currentImage = 0;
var speed = 1750;
var panes;
function StartRotate() {
    try {
        if (!panes) {
            panes = document.getElementById("panes");
        }
        setTimeout(function() {
            var randPane;
            do {
                randPane = Math.floor(Math.random() * pn.length);
            } while (randPane == currentPane);
            do {
                currentImage = Math.floor(Math.random() * im0.length);
            } while (Array.contains(im1, currentImage));
            im1[randPane] = currentImage;
            var src = imagePath + currentImage + ".jpg";
            panes.getElementsByTagName("li")[pn[randPane]].childNodes[0].src = src;
            currentPane = randPane;
            StartRotate();
        }, speed);
    } catch (ex) { }
}
Sys.Application.add_load(StartRotate);

There are a few nice features about this rotator. First, the images are completely random. Second, one pane will not switch images more than one time before another pane rotates. Third, there will never be duplicate images displayed at the same time.

A few things to note. First, you could remove all of the hard coded images in the HTML and just build them dynamically the first time the function is run. This would cut down on some the HTML. I chose to do it this way in case there was an error on the client or if the user has JavaScript disabled. This way they will still see static images rather than an empty space.