Implementing WCF Service Behaviors, How important this is ?

August 29, 2012 § 3 Comments

Introduction

This article will explain how we can achieve through puts, reliability and performance using various WCF Service behavior techniques. Most application differs widely in their scalability and performance strategies. WCF service behaviors provide various possible ways to configure key run time behaviors. We will go through various service behavior elements one by one.

Concurrency

By default WCF service handles only single request at a time and all other service request threads are queued and processed one by one. Concurrency element allows clients to send multiple requests at the same time, but service implementation should be break free of scenarios like dead locks.

There are three types of Concurrency modes.

    1. Single(Default): Concurrency mode single will allows only one at a time to the service instance. And all other pending requests will be maintained in queue and processed one by one. Whenever a new request comes dispatcher gets a lock before entering in to the code. Refer Figure 1.

Figure 1.

ConcurrencyMode Single is defined as follows:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]
public class VisitorCount : IVisitorCount
{
}
    1. Multiple: This will allow parallel requests, and that are processed at the same time by spawning separate thread for each and every request. Refer Figure 2.

Figure 2

Here is how we would define ConcurrencyMode Multiple.

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
public class VisitorCount : IVisitorCount
{
}
    1. Re-entrant: Whenever a client calls WCF service a thread lock will be assigned to this client call. Let us consider a scenario where Service 1 makes an external call to Service 2. Thread lock won’t be released until entire service call is completed. So all other client requests are in waiting state. Re-entrant allows the client to release the lock before making call to the external service (Service 2) and this will allow other client to use the Service 1 facilities until Service 2 process is completed. Refer Figure 3.

Figure 3

Decorating service class with ConcurrencyMode Reentrant.

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)]
public class VisitorCount : IVisitorCount
{
}

Concurrency mode can increase the amount of passing through the service methods and hence overall service performance increases.

Instance Context Mode

WCF Instancing decides how objects are created and refers to the life time of the service object. Whenever clients make request runtime will create service objects to provide the response. Through instancing we ca control how long this service instance wants to be retained. For that we are using the three instancing modes.

    1. Per Call: In this scenario, all the calls to the service become stateless. And for every thread request a new service instance will be created. This will work with all the service bindings. Refer Figure 4.

Figure 4.

Here is how we would define InstanceContext Mode Percall.

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single,
       InstanceContextMode = InstanceContextMode.PerCall)]
public class VisitorCount : IVisitorCount
{
}
    1. Per Session: The life time of service object is independent of the life time of Client channels, so  this will create a new service object whenever a new communication session is established and disposed after that. Each client channel gets a dedicated service instance and the subsequent calls in the same session are handled by the same Service object. This is the default value for Instancing Context. And this will work with all bindings except basicHttpBindings. Refer Figure 5.

Figure 5.

Here is how we would define InstanceContextMode PerSession.

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single,InstanceContextMode = InstanceContextMode.PerSession)]
public class VisitorCount : IVisitorCount
{
}
    1. Single: This will help us to share the data globally. We can create only one instance and the same instance will be reused on the subsequent calls. Same like Per Session this will work with all bindings except basicHttpBinding. Single ton instance will not be disposed until service host is down. Refer Figure 6.

Figure 6

Here is how we would define InstanceContext mode Single.

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single,InstanceContextMode = InstanceContextMode.Single)]
public class VisitorCount : IVisitorCount
{
}

Service Throttling

WCF allows you to throttle load on a particular service type.

This includes

  1. Maximum number of Concurrent sessions
  2. Maximum number of Concurrent calls
  3. Maximum number of Concurrent instances

Whenever these values exceeded, the callers will be added to the queue and processed FIFO order. We can configure throttling behavior in application configuration file as follows.

<serviceBehaviors> 
<behavior name="visitorCountServiceBehavior"> 
<serviceThrottling maxConcurrentCalls="5" maxConcurrentInstances="10" maxConcurrentSessions="10"> 
</serviceThrottling>
</behavior> 
</serviceBehaviors>

Using the code

Let us create a sample application to demonstrate different service behaviors. First create an interface and decorate it with  ServiceContract and OperationalContract attributes to specify that these operations of this interface can be used by the client applications.

[ServiceContract]
public interface IVisitorCount
{
[OperationContract]
int GetVisitorCount();
}

Now we have to create a service class to implement above interface method. And we have to decorate service class with different service behaviors, following code explains Concurrency Mode Single and Instance context mode single.

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single,InstanceContextMode = InstanceContextMode.Single)]
public class VisitorCount : IVisitorCount
{
  int _visitorCount = 0;

  public VisitorCount()
  {           
      Console.WriteLine("New Service Instance Created");
  }

  public int GetVisitorCount()
  {

   _visitorCount++;

   return _visitorCount;
   }
}

Now let us see how we can make this service available to client applications, Configuration file App.Config contents are given below.

<configuration>
  <system.web>
    <compilation debug="true">
  </compilation></system.web>
  <system.servicemodel>
    <services>
      <service name="InstanceContextModeService.VisitorCount">
        <endpoint binding="wsHttpBinding" contract="InstanceContextModeService.IVisitorCount">
          <identity>
            <dns value="localhost">
          </dns></identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange">
        <host>
          <baseAddresses>
            <add baseaddress="http://localhost:8732/InstanceContextModeService/VisitorCount/">
          </baseAddresses>
        </add></host>
      </endpoint></service>
    </services>
    <behaviors>
      <servicebehaviors>
          <behavior>
          <servicemetadata httpgetenabled="True">
          <servicedebug includeexceptiondetailinfaults="False">
          <servicethrottling maxconcurrentcalls="5" maxconcurrentinstances="10" maxconcurrentsessions="10">
        </servicethrottling></servicedebug></servicemetadata><</behavior>
      </servicebehaviors>
    </behaviors>
  </system.servicemodel>
</configuration>

Following service host code will host VisitorCounter service to the client applications.

class Program
{
  private static ServiceHost host = null;
  static void Main(string[] args)
  {
     host = new ServiceHost(typeof(InstanceContextModeService.VisitorCount));
     host.Opened += new EventHandler(host_Opened);
     host.Closed += new EventHandler(host_Closed);
     host.Open();
     Console.ReadKey();
     host.Close();
     Console.ReadKey();
  }

  static void host_Closed(object sender, EventArgs e)
  {
     Console.WriteLine("Service Closed");
  }

  static void host_Opened(object sender, EventArgs e)
  {
    Console.WriteLine("Service Started");
  }
}

We have our service is hosted and defined. Following code explains how clients utilize service and service behaviors.

static class Program
{
 static void Main(string[] args)
 {            
    VisitorCountClient client = new VisitorCountClient();
    Console.WriteLine("First Call-->" + client.GetVisitorCount());
    Console.ReadKey();
    Console.WriteLine("Second Call-->" + client.GetVisitorCount());
    Console.ReadKey();
    Console.WriteLine("Third Call-->" + client.GetVisitorCount());
    Console.ReadKey();
    Console.WriteLine("Forth Call-->" + client.GetVisitorCount());
    Console.ReadKey();
 }
}

Summary

Whenever we design an enterprise application, it should provide great performance, scalability, through puts and reliability. WCF can achieve these features with different technologies discussed in this piece of writings.

80 Open Source Replacements for Really Expensive Applications

August 27, 2012 § 6 Comments

Datamation’s annual list of open source replacements for really expensive applications has proven to be highly popular. Huge thanks to the many commenters on last year’s list. We tried to incorporate as many of your suggestions as possible into this year’s version.

One note: When we list an open source app as a “replacement” for another app, that doesn’t mean that the open source version has exactly the same features and capabilities as the commercial app it’s meant to replace. Sometimes the open source apps offer a more basic feature set and don’t meet the needs of high-end users.

However, in some cases, the open source apps actually offer more features and a better interface than the commercial equivalent. The purpose of the list is to point users to open source software that is roughly similar to commercial software they might be considering in the hopes that some of them might find a better fit for their needs and save some money.

Also, we understand that licensing is just a small part of the total cost of ownership when talking about enterprise apps. Still, many users report that they reduce their TCO with open source solutions, particularly when they choose an open source option that offers commercial support and services.

With that said, here are 80 outstanding open source applications that might help you save hundreds, thousands or even tens of thousands of dollars on licensing costs. If you know of other apps that should be on the list, please note them in the comments section below, and we’ll consider them for next year.

Accounting

1. Edoceo Imperium

Replaces QuickBooks Pro ($229.95), Sage 50 Complete Accounting ($369.00)

Designed for small and medium-sized businesses, this Web-based app offers billing and accounting capabilities, plus basic CRM and job tracking. It integrates with Google Calendars and other Google Apps, and it can import IMAP email. Operating System: OS Independent

2. FrontAccounting

Replaces QuickBooks Pro ($229.95), Sage 50 Complete Accounting ($369.00)

Another Web-based option, FrontAccounting offers financial management and some ERP functionality. It boasts more than 100,000 downloads, and a helpful demo is available on the site. Operating System: OS Independent

3. GnuCash

Replaces QuickBooks Pro ($229.95), Sage 50 Complete Accounting ($369.00)

GnuCash combines personal and small business accounting functionality into a single app that’s great for consultants, freelancers and other independent professionals. It offers double-entry accounting, investment tracking, financial calculators and import/export with common financial file types. Operating System: OS Independent

4. TurboCASH

Replaces QuickBooks Pro ($229.95), Sage 50 Complete Accounting ($369.00)

Used by more than 80,000 small businesses around the world, TurboCASH claims to offer all the capabilities most small organizations will ever need, including multi-user and multi-company features. It supports multiple languages, and it comes with a standard chart of accounts for U.S. or U.K. users. Operating System: Windows

5. XIWA

Replaces QuickBooks Pro ($229.95), Sage 50 Complete Accounting ($369.00)

Short for “XIWA is Web accounting,” XIWA is now more than a decade old. Key features for this Web-based accounting app include basic payroll functionality, double-entry accounting, stock and investment tracking, and support for multiple users and multiple sets of ledgers. Operating System: Linux

Audio Recording/Editing

6. Audacity

Replaces Apple LogicPro ($199.99), FL Studio Producer Edition ($199.00)

An excellent option for garage bands and other amateur musicians, Audacity offers live recording, file import and export, multi-track and multi-channel recording, intuitive editing, unlimited undo, pitch adjustment, many special effects, analysis tools and much more. The 2.0 version, released earlier this year, offers improved special effects, a new Sync-Lock Tracks feature, a device toolbar, automatic crash recovery, fast “on-demand” import of WAV/AIFF files and more. Operating System: Windows, Linux, OS X

7. Frinika

Replaces Apple LogicPro ($199.99), FL Studio Producer Edition ($199.00)

Frinika’s audio editing capabilities aren’t quite as advanced as Audacity’s, but it adds other features like a soft synthesizer and a notation editor. It aims to be “a complete platform for making music with your computer.” Operating System: OS Independent

8. Linux MultiMedia Studio

Replaces Apple LogicPro ($199.99), FL Studio Producer Edition ($199.00)

Specifically designed as an alternative to FL Studio, LMMS includes a song editor, beat and bassline editor, piano roll, FX mixer, and more. The site includes many sample songs created with LMMS. (Also, note that while it says “Linux” in the name, it also supports Windows.) Operating System: Windows, Linux

Business Intelligence

9. Jaspersoft

Replaces Oracle Business Intelligence Standard ($25,000.00+)

The “world’s most widely used business intelligence software,” Jaspersoft offers interactive, Web-based reports, dashboards and analytics built for the cloud, mobile and big data. For the free, community versions of Jaspersoft, see JasperForge.org. Operating System: OS Independent

10. Pentaho

Replaces Oracle Business Intelligence Standard ($25,000.00+)

Pentaho combines data integration and business analytics tools in a single platform. In addition to the open source version, the company offers basic, professional and enterprise versions that offer additional functionality for an annual subscription. Operating System: Windows, Linux, OS X

11. JedoxPalo BI

Replaces Oracle Business Intelligence Standard ($25,000.00+)

Palo offers offers an open source suite that combines OLAP Server, Palo Web, Palo ETL Server and Palo for Excel, or you can download the apps separately. Jedox offers a paid version that adds more capabilities to the core Palo product. See the comparison chart for details. Operating System: OS Independent

CAD

12. BRL-CAD

Replaces AutoCAD ($4,195.00 and up)

The U.S. military has been using this open source app to model weapons systems for more than 20 years. It’s recently completed one of its biggest updates ever, which greatly expanded its feature set and improved overall performance. Operating System: Windows, Linux, OS X, others.

13. FreeCAD

Replaces AutoCAD ($4,195.00 and up)

Built for mechanical engineers and product designers, FreeCAD is a general purpose parametric 3D modeler that imports and exports from numerous industry-standard formats. Operating System: Windows, Linux, OS X, others

14. Archimedes

Replaces AutoCAD ($4,195.00 and up)

Created with architects in mind, Archimedes is a simplified but extensible CAD program that’s best for designing buildings. It’s based on Java and Eclipse, so you can use it on any platform. Operating System: Windows, Linux, OS X

Customer Relationship Management

15. SugarCRM

Replaces Salesforce.com Enterprise ($125.00 per user per month), Microsoft Dynamics CRM ($1,555.00 and up) Sage ACT! ($229.99 and up)

SugarCRM’s customers include Coca-Cola, Avis, Chevrolet and many other companies. It offers management tools for sales, marketing and customer service, and it’s available in both cloud and on-premise versions. See SugarForge.org for the free open source version. Operating System: OS Independent

16. vTiger

Replaces Salesforce.com Enterprise ($125.00 per user per month), Microsoft Dynamics CRM ($1,555.00 and up) Sage ACT! ($229.99 and up)

vTiger boasts more than 100,000 customers for its SaaS product and 2.8 million downloads of the open source version. It provides sales and marketing, support, inventory management, project management, calendar, mobile apps, reports and analytics, private customer portals, document sharing, email integration, quotes and invoicing, and many other capabilities. Operating System: Windows, Linux

17. SplendidCRM

Replaces Salesforce.com Enterprise ($125.00 per user per month), Microsoft Dynamics CRM ($1,555.00 and up) Sage ACT! ($229.99 and up)

SplendidCRM comes in three SaaS versions, commercially supported on-premise versions and the open source on-premise version. It can back up or import Salesforce.com data, and it can sync with iCloud, Google Apps or QuickBooks. Operating System: Windows.

18. ConcourseSuite

Replaces Salesforce.com Enterprise ($125.00 per user per month), Microsoft Dynamics CRM ($1,555.00 and up) Sage ACT! ($229.99 and up)

Java-based ConcourseSuite claims to be “the first front office application suite to integrate customer relationship management (CRM), Web content management and team collaboration capabilities into a single, easy-to-use Web application.” It comes in free and commercially supported versions for use on premise or in the cloud. Operating System: Windows, Linux, OS X.

Database

19. MySQL

Replaces Microsoft SQL Server Standard ($898.00 and up)

The self-proclaimed “world’s most popular open source database,” Oracle’s MySQL claims to be able to reduce total cost of ownership 90 percent compared to Microsoft SQL Server. In addition to the free community edition, it comes in numerous supported versions. Operating System: Windows, Linux, Unix, OS X

20. PostgreSQL

Replaces Microsoft SQL Server Standard ($898.00 and up)

PostgreSQL might not be the most popular, but it does consider itself the “world’s most advanced open source database.” It’s more than 15 years old and is standards-compliant. Support is available through third-party vendors. Operating System: Windows, Linux, Unix, OS X, Solaris

21. Firebird

Replaces Microsoft SQL Server Standard ($898.00 and up)

This mature RDBMS offers many SQL standard features and released an updated version just last month. No commercial support is available directly from the project owners, but many third-party Firebird specialists do offer support. Operating System: Windows, Linux, Unix, OS X, Solaris

22. Kexi

Replaces Microsoft Office Access 2010 ($139.95), FileMaker Pro 11 ($299.00)

Similar to Microsoft Access and Filemaker, Kexi is KDE’s rapid database application development tool. It integrates with the KOffice suite and supports Ruby and Python, as well as macros. Operating System: Windows, Linux, OS X

Desktop Publishing

23. Scribus

Replaces InDesign ($699.00), QuarkXPress ($849.00)

Scribus offers professional-quality page layout features, including color separations, CMYK and spot color support, ICC color management, and the ability to create PDFs. The project does not offer paid support, but a wealth of tutorials, how-tos and other resources are available at the site. Operating System: Windows, Linux, OS X

24. MiKTeX

Replaces InDesign ($699.00), QuarkXPress($849.00)

Best for the creation of scientific books and other works that include a lot of mathematical formulas, MiKTeX updates the TeX typesetting system for Windows. The interface and features are quite a bit different than other desktop publishing applications, but it does a good job with text-heavy or math-heavy documents. Operating System: Windows, Linux

Development Tools

25. KDevelop

Replaces Microsoft Visual Studio 2010 Professional ($499.00)

This integrated development environment (IDE) from KDE that supports C and C++, as well as some other programming languages. It’s based on the KDevPlatform, a set of open source libraries used by several IDEs. Operating System: Linux, OS X

26. Mono

Replaces Microsoft Visual Studio 2010 Professional ($499.00)

Now sponsored by Xamarin, this IDE was specifically designed as an open source, cross-platform version of Microsoft’s .NET development platform. The site also offers two related tools for mobile development: MonoTouch for iOS and Mono for Android. Operating System: Windows, Linux, OS X, iOS, Android

27. SharpDevelop

Replaces Microsoft Visual Studio 2010 Professional ($499.00)

Another .NET alternative, SharpDevelop supports projects written in C#, VB.NET, Boo, IronPython, IronRuby and F#. It includes a debugger, code analysis, unit testing and a profiler, and it supports both Git and Subversion. Operating System: Windows

28. OpenBD

Replaces Adobe ColdFusion ($1,499.00)

Formerly known as Open BlueDragon, OpenBD offers Web app developers a free way to use the popular ColdFusion Markup Language (CFML). It makes it easy to deploy applications to the Google App Engine or anywhere else you choose. Operating System: Windows, Linux

29. Railo

Replaces Adobe ColdFusion ($1,499.00)

Railo claims to be the fastest open source CFML server available. Commercial consulting, training and services are available from Railo Technologies. (And the name comes from an obscure Star Trek character, which boosts the project’s geek cred.) Operating System: Windows, Linux

30. Lazarus

Replaces Delphi XE2 Professional ($899.00)

Similar to Delphi, Lazarus is a rapid application development tool that includes an IDE and a compiler. It uses the FreePascal libraries to create write-once, compile-anywhere applications. Operating System: Windows, Linux, OS X

E-mail/Collaboration/Groupware

31. Zimbra

Replaces Microsoft Exchange ($708.00 and up)

The open source version of Zimbra includes a shared e-mail, calendar and contact management solution that works with Zimbra’s e-mail client and similar apps. The company also offers several paid network editions that can be deployed on premises or in the cloud. Operating System: Linux, Unix, OS X

32. Citadel

Replaces Microsoft Exchange ($708.00 and up)

Citadel calls itself the “leader in true open source e-mail and collaboration.” Like Zimbra, it also supports cloud deployment, but the project does not offer paid support. Operating System: Linux

33. Group-Office

Replaces: Microsoft Office Outlook ($199.00 and up, as part of Microsoft Office)

This open source groupware includes shared calendar, basic CRM features, e-mail, file sharing and some project management capabilities. You can host the open source version on your own server, host the paid professional version yourself or subscribe to the hosted version. Operating System: OS Independent

34. phpGroupWare

Replaces: Microsoft Office Outlook ($199.00 and up, as part of Microsoft Office)

Part of the Gnu project, this app offers more than 50 contact, calendar, e-mail, file sharing, project management and related apps. Users can pick and choose the features and capabilities they need. Operating System: Windows, Linux

35. Simple Groupware

Replaces: Microsoft Office Outlook ($199.00 and up, as part of Microsoft Office)

This enterprise groupware app can sync with Outlook, and it offers dozens of Web-based modules. Organizations can extend its capabilities buy building their own add-ons with the sgsML language. Operating System: Windows, Linux

36. Evolution

Replaces: Microsoft Office Outlook ($199.00 and up, as part of Microsoft Office)

Sometimes called “the Outlook of Linux,” Evolution looks and feels a lot like older versions of Microsoft Outlook. Key features include spam filtering, advanced search and built-in encryption capabilities. Operating System: Linux

37. Thunderbird with Lightning

Replaces: Microsoft Office Outlook ($199.00 and up, as part of Microsoft Office)

To get the functionality of Outlook, you’ll need to use both of these apps together. Thunderbird is a mail client with an interface that looks similar to the Firefox browser, and Lightning is a calendar that integrates with Thunderbird. Operating System: Windows, Linux, OS X

Enterprise Resource Planning (ERP)

38. Compiere

Replaces Microsoft Dynamics ($174 per user per month and up), SAP (price varies)

Compiere claims to be “the leading Cloud-based, open-source ERP software and customer relationship management (CRM) system.” In addition to the free community version, it also comes in an enterprise version, and you can run it in Amazon’s cloud. Operating System: Windows, Linux

39. OpenERP

Replaces Microsoft Dynamics ($174 per user per month and up), SAP (price varies)

With modules for CRM, accounting, point of sale, project management, warehouse management, human resources, purchasing, manufacturing, marketing, invoicing and an application builder, this ERP solution lets businesses mix and match to find the capabilities they need. In addition to the free community edition, it also comes in a paid enterprise edition for on-site deployment, or a subscription-based online edition. Operating System: Windows, Linux

40.Openbravo

Replaces Microsoft Dynamics ($174 per user per month and up), SAP (price varies)

Openbravo claims to be the “world’s leading browser-based open source business suite.” It boasts an intuitive interface, low IT overhead, anywhere access, customization capabilities and much more. The open source version is available for a free download, and the company also offers paid standard, on demand, enterprise and unlimited versions. Operating System: OS Independent

41. Phreedom

Replaces Microsoft Dynamics ($174 per user per month and up), SAP (price varies)

The Phreedom ERP suite builds on the capabilities of the PhreeBooks financial management software. The software is completely free, but paid support is available. Operating System: OS Independent

Foreign Language

42. Zkanji

Replaces Rosetta Stone Japanese ($399.00)

Designed for Japanese learners of all abilities, Zkanji includes a dictionary, a guide to Japanese characters and vocabulary study tools, including flashcards. It also gives you long-term study reports so that you can track your progress. Operating System: Windows.

43. ZWDisplay

Replaces Rosetta Stone Chinese ($399.00)

ZWDisplay doesn’t offer a step-by-step program like Rosetta Stone, but it does offer all the basic building blocks you need to teach yourself to read and speak Mandarin. It includes pronunciation and grammar helps, a dictionary, flashcards and more. Operating System: Linux

Gateway Security Appliances

44.Endian Firewall Community

Replaces Check Point Security Gateways ($650.00 and up)

With Endian’s community software, you can turn any old PC into a unified threat management (UTM) appliance, complete with firewall, anti-vius, spam-filtering, content filtering and VPN capabilities. Endian also sells hardware, software and virtual appliances based on the same technology. Operating System: Linux

45. Untangle

Replaces Check Point Security Gateways ($650.00 and up)

Untangle boasts that it protects 2 million users in more than 30,000 organizations worldwide. Much like Endian, it comes in an open source “Lite” version, or you can purchase supported software or hardware appliances. Operating System: Windows, Linux

Graphics/Drawing

46. Dia

Replaces Visio Professional ($559.99)

“Roughly inspired by” Microsoft Visio, Dia allows users to create org charts, UML diagrams, flowcharts, network diagrams, and more. By default, it saves files in XML format, but it can also export to EPS, SVG, XFIG, WMF and PNG formats. Operating System: Windows, Linux

47.Gimp

Replaces Photoshop ($699.00)

This professional-quality software offers most of the photo-editing features you’ll find in Photoshop–and it’s completely free. It offers advanced filters, drawing tools, layers, channels and much more. Note that if you’re on Windows, you’ll need Gimp-win. Operating System: Windows, Linux, OS X, others

48.Inkscape

Replaces Illustrator ($599.00), CorelDraw ($499)

Also suitable for professional use, Inkscape is a vector graphics editor with many advanced features. The web site also offers a library of open source clip art to help you get started with your own creations. Operating System: Windows, Linux, OS X

49. Paint.Net

Replaces Photoshop ($699.00)

Paint.Net is a Windows-only photo editor with an intuitive interface and impressive speed. It includes numerous special effects, gradients, Bezier curves, clone stamp, Magic Wand and more. Operating System: Windows

Mathematics

50. Sage

Replaces Mathematica Professional ($2495.00 and up)

Built from 100 different open source packages, Sage can perform a wide variety of mathematical operations from basic algebra and calculus to very advanced number theory, cryptography, exact linear algebra and more. To get the most out of its features, you’ll need to be comfortable working from the command line and know the Python programming language. Operating System: Windows, Linux, OS X

51. Genius

Replaces Mathematica Professional ($2495.00 and up)

Like Sage and Mathematica, Genius solves a wide of math problems, including calculus, statistics, trigonometric functions, modular arithmetic and more. It can also generate 2D and 3D graphs and output to TeX documents. Operating System: Linux, OS X

52. R

Replaces Mathematica Professional ($2495.00 and up), MATLAB ($2,150.00)

Similar to MATLAB, R is an environment for performing statistical calculations and generating graphs. As with the other apps in this category, you’ll need some programming know-how in order to use it. Operating System: Linux, OS X

53. Scilab

Replaces Mathematica Professional ($2495.00 and up), MATLAB ($2,150.00)

Another good replacement for MATLAB, Scilab can perform hundreds of mathematical functions as well as generating 2D and 3D graphs. Commercial services and support are available through Scilab Enterprises. Operating System: Linux, OS X

Music

54. MuseScore

Replaces Sibelius 7 ($599.95 and up), Finale ($600.00)

MuseScore offers a WYSIWYG music notation editor, integrated sequencer and a software synthesizer. You can hook it up to your MIDI keyboard, and it also imports and exports MusicXML and Midi files. Operating System: Linux, OS X

Office Productivity

55. OpenOffice.org

Replaces Microsoft Office Professional ($349.99 and up)

Apache-managed OpenOffice offers word processor (Writer), spreadsheet (Calc), presentation (Impress), graphics (Draw), math/science notation (Math) and database (Base) software that is fully compatible with Microsoft Office file formats. The most recent version, released in May, has already been downloaded more than 10 million times. Operating System: Windows, Linux, OS X

56. LibreOffice

Replaces Microsoft Office Professional ($349.99 and up)

Although it’s based on the same source code as OpenOffice, this community-oriented fork adds a few capabilities that aren’t in its predecessor. Extensive documentation is available at the site. Operating System: Windows, Linux, OS X

57. KOffice

Replaces Microsoft Office Professional ($349.99 and up)

This office suite from KDE includes five separate applications: KWord (word processing), KCells (spreadsheets), Showcase (presentations), Kivio (diagrams and flowcharts) and Artwork (vector graphics). Unlike OpenOffice, the interface is substantially different from Microsoft Office, but it doesn’t take long to learn. Operating System: Windows, Linux

58. NeoOffice

Replaces Microsoft Office Professional ($349.99 and up)

NeoOffice is based on the same code as OpenOffice and LibreOffice, but it includes special Mac-only features that you won’t find in the other apps. The latest version adds high-resolution text drawing for users with retina displays and it supports Mountain Lion. Operating System: OS X, iOS

Operating System

59. Ubuntu

Replaces Windows 7 Ultimate ($219.99)

Used by more than 20 million people, Ubuntu is the most popular desktop Linux distribution. It also comes in server and cloud editions. Operating System: Linux

60. Fedora

Replaces Windows 7 Ultimate ($219.99)

Fedora is the free community version of RedHat, and it’s managed by the same company. In addition to the standard desktop version in comes in several customized “spins” for security, design, gaming or electronics R&D. Operating System: Linux

 

61. openSUSE

Replaces Windows 7 Ultimate ($219.99)

Regular SUSE requires a paid support subscription, but openSUSE is available for free. It comes in both desktop and server versions. Operating System: Linux

62. Debian

Replaces Windows 7 Ultimate ($219.99)

The basis for Ubuntu and several other Linux distributions, Debian is popular with hard-core open source enthusiasts. It includes more than 29,000 pre-compiled software packages. Operating System: Linux, FreeBSD

PDF Tools

63. PDFCreator

Replaces Adobe Acrobat X Standard ($449.00)

With this app, you can turn almost any kind of document, from any application, into a PDF. It also includes security features like password-protection, encryption and digital signatures. Operating System: Windows

Point of Sale

64. Openbravo for Retail

Replaces QuickBooks Point of Sale Basic ($1099.95), AccuPOS ($795 and up)

Formerly known as Openbravo POS, the retail version of Openbravo offers support for both Web and brick-and-mortar operations, compatibility with mobile devices, back office and analytics capabilities, and more. The website above primarily promotes the paid professional version, but you can find the free open source version at Openbravo forge. Operating System: Windows, Linux, OS X

65. Lemon POS

Replaces QuickBooks Point of Sale Basic ($1099.95), AccuPOS ($795 and up)

Best for small or very small businesses, Lemon POS provides features like multiple terminal support, role-based permissions, a themable interface, price checker, sales suspension and more. It includes both a vendors interface (“Lemon”) and an administrative interface (“Squeeze”), and it stores data in a MySQL database. Operating System: Linux

Project Management

66. Dotproject

Replaces Microsoft Project Professional ($995.95 and up), Primavera P6 Professional Project Management ($2,500.00, plus $550.00 support)

Conceived in 2000 as an alternative to Microsoft Project, this application offers a clean interface and a focus on project management without extraneous groupware functions. Key features include an e-mail based ticket/trouble system, hierarchical task list, discussion forum, file repository and more. Operating System: Windows, Linux

67. GanttProject

Replaces Microsoft Project Professional ($995.95 and up), Primavera P6 Professional Project Management ($2,500.00, plus $550.00 support)

This cross-platform project management option can create both Gantt and PERT charts, assign resources, define milestones, draw dependencies and more. It can also import and export files from Microsoft Project. Operating System: Windows, Linux, OS X

68. Onepoint Project

Replaces Microsoft Project Professional ($995.95 and up), Primavera P6 Professional Project Management ($2,500.00, plus $550.00 support)

Onepoint offers a very attractive, easy-to-use interface, high scalability and a large library of reports, including work breakdown, cost baseline, milestone trend analysis, Gantt schedules, project pipeline and others. It comes in two open source versions–basic and community–as well as paid professional, master, group and enterprise versions. Operating System: Windows, Linux, OS X

69. OpenProj

Replaces Microsoft Project Professional ($995.95 and up), Primavera P6 Professional Project Management ($2,500.00, plus $550.00 support)

Although it was once extremely popular with millions of downloads, this Microsoft Project replacement hasn’t been updated in a couple of years, and the SaaS version is no longer available. It’s still a solid choice, particularly if you have a smaller project list, and you can download the last version from the SourceForge link above. Operating System: Windows, Linux, Unix, OS X

70. openXprocess

Replaces Microsoft Project Professional ($995.95 and up), Primavera P6 Professional Project Management ($2,500.00, plus $550.00 support)

A good choice for application development teams, openXprocess has some tools for using Agile and Scrum methodologies, and Xprocess also offers training for using the app to support Agile and Scrum development. The company also offers paid support. Operating System: Windows, Linux

71. ]project-open[

Replaces Microsoft Project Professional ($995.95 and up), Primavera P6 Professional Project Management ($2,500.00, plus $550.00 support)

Project-open boasts more than 150,000 downloads and more than 32,000 active users. It offers project management and project portfolio management along with some ERP capabilities. Additional modules, consulting, support and automatic updates are available for a fee, and it also comes in an SaaS version. Operating System: Windows, Linux

Reporting

72. JMagallanes

Replaces SAP Crystal Reports ($495), DBxtra ($490 and up)

Java-based JMagallanes can create static reports, Swing pivot tables for OLAP analysis, and charts. It accepts data from SQL, Excel, XML and many other formats. Operating System: OS Independent

Screenplay Writing

73. Celtx

Replaces Final Draft ($249.95)

Used by more than 2 million people around the world, Celtx not only helps format your screenplay correctly, it also includes a variety of pre-production tools, including storyboards, call sheets, script reports, catalogs and shot blocking. It also comes in a paid “Plus” version, as well as cloud and mobile versions. Operating System: Windows, Linux, OS X

Video Tools

74. Blender

Replaces AutoDesk Maya ($3,675.00)

Suitable for use by professionals, Blender offers a complete suite for the creation of 3D content. The gallery on the website demonstrates some of the amazing 3D artwork created with the tool, and you can also check out the movies page for some videos. Operating System: Windows, Linux, OS X

75. Cinelerra

Replaces Adobe Premiere Pro ($799.00)

Describing itself as a “movie studio in a box,” this professional-quality compositing and editing tool invites users to “unleash the 50,000 watt flamethrower of content creation in your UNIX box.” There’s also a community fork of the project at Cinelerra.org. Operating System: Linux

76. OpenShot Video Editor

Replaces Adobe Premiere Pro ($799.00)

This video editor for Linux includes capabilities like unlimited tracks, clip resizing and scaling, video transitions, compositing and overlays, 3D titles, rotoscoping and more. It boasts an easy-to-use interface that makes it suitable for beginning filmmakers and hobbyists. Operating System: Linux

77. Kdenlive

Replaces Adobe Premiere Pro ($799.00)

This video editor aims to “answer all needs, from basic video editing to semi-professional work.” It’s easy-to-use, highly versatile and supports a wide variety of file formats. Operating System: Linux, OS X

78. Avidemux

Replaces Adobe Premiere Pro ($799.00)

Although it’s not quite as powerful as some of the other open source video editors, Avidemux offers basic editing capabilities for amateurs, and it’s one of the few open source apps in this category that runs on Windows and OS X. The site offers a wiki and a helpful forum for new users who need help getting started. Operating System: Windows, Linux, OS X

Web Site Design

79. Kompozer

Replaces Adobe Dreamweaver ($399.00), Microsoft Expression Studio Web Professional ($149.00)

A good choice for novice Web developers, Kompozer offers an easy-to-use WYSIWYG page editor as well as an HTML editor. Key features include an FTP site manager, color picker, tabbed interface, CSS editor, forms, spellchecker and more. Operating System: Windows, Linux, OS X

80. Aptana

Replaces Adobe Dreamweaver ($399.00), Microsoft Expression Studio Web Professional ($149.00)

A better option for professional Web application developers, Aptana supports HTML5, CSS3, JavaScript, Ruby, Rails, PHP and Python. It also offers Git integration and easy deployment to Heroku or EngineYard. Operating System: Windows, Linux, OS X

John Carmack discusses the art and science of software engineering

August 26, 2012 § Leave a comment

I’m a hard core gamer, and my fas­ci­na­tion with pro­gram­ming did begin with video games (and specif­i­cally, ren­der­ing algo­rithms). So when I saw John Carmack’s 2012 Quake­Con keynote show up in my feed, I thought I’d lis­ten to a bit of it and learn a bit about the state of game design and development.

What I heard instead was a hacker’s hacker and Automation talk about his recent real­iza­tion that soft­ware engi­neer­ing is actu­ally a social sci­ence. Across 10 min­utes, he cov­ers many human aspects of devel­oper mis­takes, pro­gram­ming lan­guage design, sta­tic analy­sis, code reviews, devel­oper train­ing, and cost/benefit analy­ses. The empha­sis through­out is mine (and I also tran­scribed this, so I apol­o­gize for any mistakes).

In try­ing to make the apps faster, which has to be our pri­or­ity going for­ward, I’ve made a lot of mis­takes already, but pri­or­i­tiz­ing that can help us get the apps done faster, just has to be where I go. Because I just can’t do this going.

On the soft­ware devel­op­ment side, you know there was an inter­est­ing thing at E3, one of the inter­views I gave, I had men­tioned some­thing about how, you I’ve been learn­ing a whole lot, and I’m a bet­ter pro­gram­mer now than I was a year ago and the inter­viewer expressed a lot of sur­prise at that, you know after 6 years and going through all of this that you’d have it all fig­ured out by now, but I actu­ally have been learn­ing quite a bit about soft­ware devel­op­ment, both on the per­sonal crafts­man level but also pay­ing more atten­tion by what it means on the team dynam­ics side of things. And this is some­thing I prob­a­bly avoided look­ing at squarely for years because, it’s nice to think of myself as a sci­en­tist engi­neer sort, deal­ing in these things that are abstract or prov­able or objec­tive on there and there.

In real­ity in com­puter sci­ence, just about the only thing that’s really sci­ence is when you’re talk­ing about algo­rithms. And opti­miza­tion is an engi­neer­ing. But those don’t actu­ally occupy that much of the total time spent pro­gram­ming. You know, we have a few pro­gram­mers that spend a lot of time on opti­miz­ing and some of the select­ing of algo­rithms on there, but 90% of the pro­gram­mers are doing pro­gram­ming work to make things hap­pen. And when I start to look at what’s really hap­pen­ing in all of these, there really is no sci­ence and engi­neer­ing and objec­tiv­ity to most of these tasks. You know, one of the pro­gram­mers actu­ally says that he does a lot of mon­key programming—you know beat­ing on things and mak­ing stuff hap­pen. And I, you know we like to think that we can be smart engi­neers about this, that there are objec­tive ways to make good soft­ware, but as I’ve been look­ing at this more and more, it’s been strik­ing to me how much that really isn’t the case.

Aside from these that we can mea­sure, that we can mea­sure and repro­duce, which is the essence of sci­ence to be able to mea­sure some­thing, repro­duce it, make an esti­ma­tion and test that, and we get that on opti­miza­tion and algo­rithms there, but every­thing else that we do, really has noth­ing to do with that. It’s about social inter­ac­tions between the pro­gram­mers or even between your­self spread over time. And it’s nice to think where, you know we talk about func­tional pro­gram­ming and lambda cal­cu­lus and mon­ads and this sounds all nice and sci­ency, but it really doesn’t affect what you do in soft­ware engi­neer­ing there, these are all best prac­tices, and these are things that have shown to be help­ful in the past, but really are only help­ful when peo­ple are mak­ing cer­tain classes of mis­takes. Any­thing that I can do in a pure func­tional lan­guage, you know you take your most restric­tive sci­en­tific ori­ented code base on there, in the end of course it all comes down to assem­bly lan­guage, but you could exactly the same thing in BASIC or any other lan­guage that you wanted to.

I have work on so many different platform and all I know is language doesn’t matter, its all about good Software Design and strong Logical reasoning, but as I start think­ing about how some­body learns pro­gram­ming from really ground zero, it was open­ing my eyes a lit­tle bit to how much we take for granted in the soft­ware engi­neer­ing com­mu­nity, really is just lay­ers of arti­fice upon top a core fun­da­men­tal thing. Even when you go back to struc­tured pro­gram­ming, whether it’s while loops and for loops and stuff, at the bot­tom when I’m sit­ting think­ing how do you explain pro­gram­ming, what does a com­puter do, it’s really all the way back to flow charts. You do this, if this you do that, if not you do that. And, even try­ing to explain why do you do a for loop or what’s this while loop on here, these are all con­ven­tions that help soft­ware engi­neer­ing in the large when you’re deal­ing with mis­takes that peo­ple make. But they’re not fun­da­men­tal about what the computer’s doing.All of these are things that are just try­ing to help peo­ple not make mis­takes that they’re com­monly making.

One of the things that’s been dri­ven home extremely hard is that pro­gram­mers are mak­ing mis­takes all the time and con­stantly. I talked a lot last year about the work that we’ve done with sta­tic analy­sis and try­ing to run all of our code through sta­tic analy­sis and get it to run squeaky clean through all of these things and it turns up hun­dreds and hun­dreds, even thou­sands of issues. Now its great when you wind up with some­thing that says, now clearly this is a bug, you made a mis­take here, this is a bug, and you can point that out to every­one. And every­one will agree, okay, I won’t do that next time. But the prob­lem is that the best of inten­tions really don’t mat­ter. If some­thing can syn­tac­ti­cally be entered incor­rectly, it even­tu­ally will be. And that’s one of the rea­sons why I’ve got­ten very big on the sta­tic analy­sis, I would like to be able to enable even more restric­tive sub­sets of lan­guages and restrict pro­gram­mers even more because we make mis­takes con­stantly.

One of the things that I started doing rel­a­tively recently is actu­ally doing a daily code review where I look through the check­ins and just try to find some­thing edu­ca­tional to talk about to the team. And I anno­tate a lit­tle bit of code and say, well actu­ally this is a bug dis­cov­ered from code review, but a lot of it is just, favor doing it this way because it’s going to be clearer, it will cause less prob­lems in other cases, and it ruf­fled, there were a few peo­ple that got ruf­fled feath­ers early on about that with the kind of broad­cast nature of it, but I think that every­body is appre­ci­at­ing the process on that now. That’s one of those scal­a­bil­ity issues where there’s clearly no way I can do indi­vid­ual code reviews with every­one all the time, it takes a lot of time to even just scan through what every­one is doing. Being able to point out some­thing that some­body else did and say well, every­body should pay atten­tion to this, that has some real value in it. And as long as the team is agree­able to that, I think that’s been a very pos­i­tive thing.

But what hap­pens in some cases, where you’re argu­ing a point where let’s say we should put const on your func­tion para­me­ters or some­thing, that’s hard to make an objec­tive call on, where lots of stuff we can say, this indi­rec­tion is a cache miss, that’s going to cost us, it’s objec­tive, you can mea­sure it, there’s really no argu­ing with it, but so many of these other things are sort of style issues, where I can say, you know, over the years, I’ve seen this cause a lot prob­lems, but a lot of peo­ple will just say, I’ve never seen that prob­lem. That’s not a prob­lem for me, or I don’t make those mis­takes. So it has been really good to be able to point out com­monly on here, this is the mis­take caused by this.

But as I’ve been doing this more and more and think­ing about it, that sense that this isn’t sci­ence, this is just try­ing to deal with all of our human frail­ties on it, and I wish there were bet­ter ways to do this. You know we all want to become bet­ter devel­op­ers and it will help us make bet­ter prod­ucts, do a bet­ter job with what­ever we’re doing, but the fact that it’s com­ing down to train­ing dozens of peo­ple to do things in a con­sis­tent way, know­ing that we have pro­gram­mer turnover as peo­ple come and go, new peo­ple com­ing and look­ing at the code base and not under­stand­ing the con­ven­tions, and there are clearly bet­ter and worse ways of doing things but it’s frus­trat­ingly dif­fi­cult to quan­tify.

That’s some­thing that I’m spend­ing more and more time look­ing at Automation.

Reliability and precision

The old focus on using automation simply to increase productivity and reduce costs was seen to be short-sighted, because it is also necessary to provide a skilled workforce who can make repairs and manage the machinery. Moreover, the initial costs of automation were high and often could not be recovered by the time entirely new manufacturing processes replaced the old. (Japan’s “robot junkyards” were once world famous in the manufacturing industry.)

Automation is now often applied primarily to increase quality in the manufacturing process, where automation can increase quality substantially. For example, recently implemented Automation in my project for eCommerce where earlier it was done manually.  After implementing automated system, it was big success, because the error rate from manual was around 1-30.5%, but has been reduced to 0.00001% with automation. Secondly handling large orders manually was next to impossible to do the fulfillment.

Health

The costs of automation to the environment are different depending on the technology, product or engine or system automated. Working continuously for long hours just to full filled your goals and objectives, lack of sleep and no mental satisfaction were always early contenders for automation.

Automation just works perfectly here. Without mental stress and with minimal presence or supervision.

Convertibility and turnaround time

Another major shift in automation is the increased demand for flexibility and convertibility in manufacturing processes. Manufacturers are increasingly demanding the ability to easily switch from manufacturing Product A to manufacturing Product B without having to completely rebuild the production lines. Flexibility and distributed processes have led to the introduction of Automated Guided Vehicles with Natural Features Navigation.

The automation system we Implemented has already proved its result. What a turn over this year by E commerce Dept.

And the answer is as far as I can tell really isn’t out there. With the developmental process, I had few minor bugs and one major concurrency bug . Definitely software development process and definitely more awareness and depth business knowledge. And that’s some­thing that I still don’t think that we do the best job at.

We know our code is liv­ing for, real­is­ti­cally, we’re look­ing at a decade. I tell peo­ple that there’s a good chance that what­ever you’re writ­ing here, may well exist a decade from now and it will have hun­dreds of pro­gram­mers, look­ing at the code, using it, inter­act­ing with it in some way, and that’s quite a bur­den. I do think that it’s just and right to impose pretty severe restric­tions on what we’ll let past analy­sis and what we’ll let into it, but there are large scale issues at the soft­ware API design lev­els and fig­ur­ing out things there, that are artis­tic, that are crafts­man like on there. And I wish that there were more quan­tifi­able things to say about that. And I am spend­ing a lot of time on this as I go forward.

15 THINGS WE LEARNED ABOUT INTERFACE DESIGN AS DEVELOPERS

August 26, 2012 § Leave a comment

As developers who realized that no one will care about our product or clients more than ourselves, we took the design of our new product iteration onto ourselves. These are the 15 things we learned about user interface design in the process:

1.) Use patterns as much as possible. You can even use groups and white space to create patterns.

2.) Things that are close together should belong together. Look at the example remote bellow. Buttons form logical groups based on their functions.

 

 

3.) 9% of all men are color blind. Use vischeck.com to check how your site, or web app looks to those people.

4.) Whenever possible, use progressive disclosure. Principle of progressive disclosure dictates that the user should be provided only the information he needs at that time. More information on screen increases chances for confusion and ultimately – inaction.

5.) If you must make tradeoffs between clicks and thinking. Use more clicks and less thinking.

6.) People are more motivated as they get closer to a goal. Example: Coffee shop has two types of stamp cards. Card A with 10 stamp slots and card B with 12 stamp slots but 2 already pre-stamped. Card B is set to perform much better. People will focus on what remains to be done vs. what is already completed.

7.) All error messages should tell people what they did wrong. Explain the problem and instruct user how to correct it. Error messages should be written in active, not passive voice. Never make the user feel stupid by making an error message sound accusatory.

Example of a really bad iTunes error message:

 

 

…and a really good one:

 

Picture_48

8.) If people are doing a boring task, raise the level of arousal with colors, sounds and movement but be careful not to overdo it.

9.) If people are doing a difficult task, decrease the level of arousal by eliminating any distracting elements such as colors, sounds or movement.

10.) Make your forms cache non-confidential information (such as text areas and text boxes) real-time. So that in case user is interrupted he can continue later. If it is worth user entering – it is worth app remembering.

11.) Never give a blank slate. Once they sign-up, make sure that the first step is not theirs but yours. It is not an accident that Dropbox pre-creates a welcome file for each new user.

12.) If you design for the extreme scenarios, the middle will often take care of itself.

13.) Avoid unnecessary reporting. There is no need for a “good job” notification every time a user performs a task successfuly.

14.) Feedback has to be constant and instantaneous. It can be a sound you hear when you press a button or a light you see when you receive a message.

15.) Color is a communication tool. Use of color should be unobtrusive. If you are making an app people will use on a daily basis you cannot make the background yellow or buttons pink. Colors must respect and fit in the environment.

Our new app (soon to be out)

 

posted by MILAN VREKIC

Top 25 Most Difficult Companies To Interview; Consulting Firms Lead The Way

August 24, 2012 § 1 Comment

Some companies are notorious for using interview processes that bring you back to the days of your college entrance exams wrought with riddles, written tests, bizarre questions, and multiple rounds of group or in-person interviews. So which companies have the toughest interview processes out there? Glassdoor dug through more than 80,000 interview reviews shared over the past year to uncover the Top 25 Most Difficult Companies to Interview.

Company Interview Difficulty Rating Interview Experience: Positive Interview Experience: Negative Company Rating Company Rating
McKinsey 3.9 62% 13% 4.1 Very Satisfied
Boston Consulting 3.8 70% 10% 4.1 Very Satisfied
Oliver Wyman 3.7 57% 9% 3.6 Satisfied
A. T. Kearney 3.7 64% 12% 3.4 OK
ZS Associates 3.7 65% 6% 3.4 OK
Thoughtworks 3.6 64% 16% 3.8 Satisfied
Bain & Company 3.6 73% 2% 4.2 Very Satisfied
Shell Oil 3.6 65% 4% 3.8 Satisfied
Google 3.5 45% 18% 4.1 Very Satisfied
Unisys 3.5 70% 5% 3.1 OK
Rackspace 3.4 72% 11% 3.9 Satisfied
Cypress Semiconductor 3.4 76% 10% 2.9 OK
Susquehanna International Group 3.4 58% 7% 3.7 Satisfied
bazaarvoice 3.4 38% 13% 3.2 OK
Procter & Gamble 3.4 63% 7% 3.8 Satisfied
Teach for America 3.4 65% 6% 3.7 Satisfied
L.E.K. Consulting 3.4 62% 5% 3.4 OK
Juniper Networks 3.4 67% 8% 3.3 OK
Sapient 3.4 75% 6% 3.3 OK
Stryker 3.4 31% 19% 3.2 OK
General Mills 3.3 49% 15% 3.8 Satisfied
Progressive 3.3 52% 24% 3.6 Satisfied
Headstrong 3.3 60% 12% 2.9 OK
Facebook 3.3 51% 19% 4.6 Very Satisfied
Amazon 3.3 44% 18% 3.3 OK

Report based on companies with at least 20 interview and company reviews from 7/13/11-7/12/12. Interview and company ratings based on a 5-point scale. Interview difficulty ratings: 1.0=very easy, 5.0=very difficult. Company ratings: 1.0=very dissatisfied, 3.0=OK, 5.0=very satisfied. Reviews and ratings are based entirely on experiences from employees and recent job candidates.

 

Below are some highlights:

  • Toughest Interview Process: Consulting firms lead the way with McKinsey & Company (Interview difficulty: 3.9) taking top honors, followed by Boston Consulting Group (Interview difficulty: 3.8), and Oliver Wyman (Interview difficulty: 3.7) . Interestingly, almost half of the companies represent the tech industry with companies like Google (Interview difficulty: 3.5) andFacebook (Interview difficulty: 3.3), who are famous in Silicon Valley for their tough interview techniques.
  • Difficult Interviews Don’t Necessarily Mean Negative Experiences: Despite a tough interview, positive interview experiences outweigh negative interview experiences at all of the companies on the list. Cypress Semiconductor receives the highest rate of candidates experiencing a positive interview (76% positive, 10% negative), followed bySapient (75% positive, 6% negative) and Bain & Company (73% positive, 2% negative).
  • Veterans and Newcomers: For the second year in a row, McKinsey & Company (Interview difficulty 2012: 3.9; 2011: 3.9) tops the list, and several other companies on last year’s report have made it into the top 25 again, including Oliver Wyman (Interview difficulty 2012: 3.7; 2011: 3.4) and Teach for America (Interview difficulty 2012: 3.4; 2011: 3.5). Newcomers to this list include Shell Oil (Interview difficulty: 3.6), Google (Interview difficulty: 3.5), Rackspace (Interview difficulty: 3.4), Facebook (Interview difficulty: 3.3) and Progressive Corporation (Interview difficulty: 3.3).

Some of the most daunting questions candidates have recently been asked include:

“There are 3 products: tomatoes, luxury cars, t-shirts. What value added tax is applied to each product type?” –McKinsey & Company Junior Consultant Candidate (location n/a)

“How many people would use a drug that prevents baldness?” – Boston Consulting Group Associate Candidate(Boston, MA)

“What is the marginal cost of a gigabyte in gmail?” – Google Associate Product Manager Candidate (Mountain View, CA)

Think one of your job interviews was tough? Share your interview review  and tell future job candidates what to expect, and how to prepare.

(posted by : GlassDoor Team)

Know your application better with visual studio 2010 load testing

August 10, 2012 § Leave a comment

Why this article again?

Good question! yeah when you implement a complex system & high volume data performing transaction. The Automation comes to rescue everywhere for testing as well as system. So I sharing it to everyone

Here is article on

Know your application better with visual studio 2010 load testing

Introduction

We’ve reached a day when every business applications are built with a varieties of complexity and grows with large volume of data. Over the time when data volume grows or user base increase , there is a scope of decreasing the overall performance of the application or even failed to deliver as expected. For this reason as a precaution actual capability of the application must be measured in advance to avoid unexpected situations. Now a days simple application which will serve single user consistently is becoming antique. This is time when applications scalability and performance plays a vital role in the software specification as well as architecture. And thus the performance testing and analysis became handy. Goal of this article to provide a quick and simple approach to configure load test for real scenario and analyze results. Through this article I will share my experience of implementing load testing and analyzing results with visual studio 2010 ultimate.

Prerequisites

“load testing with visual studio 2010” goggling this phrase is more then enough for anyone to find lots of fantastic articles about basic load testing setup. So in this article we will not walk in that path, instead I will share some additional info and share some configurations that will require to setup load testing for real life and focus on the analyzing the results. But before moving on I recommend you to learn basics of web test and load test if you are completely new to this kingdom. Visual studio 2010 shipped with very handy testing tool, we are going to utilize this tool to perform load testing. I recommend you to go through how to setup web test first, it will help you understand better.You can suggest any additional info to make this post more helpful.

Load Testing Topology

Load testing involves generating traffic to a system and measuring how it responds. Tools simulate heavy volumes of users taking various realistic scenarios in the system and we will use visual studio 2010 for this purpose. There is two ways to run load tests. Generate load from Visual Studio 2010 this will uses only 1 core/processor with limited to 250 simulated users. Another way is load testing through test rig which can simulate lots more users require much more more configuration in network and hardware layer. To avoid complexity we will not focus on test rig, but some day we will share this experiences too. The following diagram shows how a thorough load test could be set up using visual studio 2010.
Load Testing Topology

Load Testing

While doing load testing these are the considerations

  • Understanding the environment of the application being tested
  • A test plan defining user scenarios
  • Tools to generate load and capture metrics
  • Analysis of performance indicators

Visual studio 2010 can simulate approximately 1000 users per processor. we can generate load from Visual Studio 2010 through 2 approach

  • Default: uses only 1 core/processor and limited to 250 simulated users
  • Test Rig: can use multiple core/processor and can simulate lots more users

It is recommended that performance testing database and application database shouldn’t on the same server otherwise while test controllers sample and save the load test run results in the database on the application server it may impact the test results.
configaration 1
Visual studio load testing tool is consist of versatile concepts implemented and msdn got all well explained, which could be way out of head for a starter, So rather I listed few impotent concepts that are least required for carry out the load test.

  • Think Time: the time spent by a user perusing a Web page, including viewing the page and determining the next action. Think time does not include the time that is required for a page to load.
  • Ramp time: This property allows the increase number of user from one step to the next to occur gradually rather than immediately
  • Sample Rate: Time interval between collecting test data.For longer load tests, increasing the sample rate reduces the amount of data that you collect.
  • Run duration: Total time the test is expected to run.
  • Warm up: the load test will increase the load gradually during the warm-up period

we will use above concepts are configured in our attached sample project. To simulate real time request/response we can utilize mix that can control the percentage of load that is distributed among tests, browser types, or network types in a load test scenario.There are three types of mix

  • Test mix: It can specify for the probability that a particular test will be randomly selected by a virtual user during a load test run.
  • Browser mix: It do not simulate the test in a stripped down browser. Test agents includes a set of associated headers for the selected browsers and added to each HTTP request before submit.
  • Network mix: It simulate network bandwidth at the application layer. It does not simulate latency.

 

Configure and Use Sample Project

Sample project consist of 2 projects

  • TestingBox: test project consist of web test and performance test
  • TestingBox-Demo: we project invoked by the load test

In order to use the sample project within your application, you need to configure theses parameters below according to your needs,

  • Think Time: to simulate realistic wait times we set 3 seconds.
  • Think Profile: Normal Distribution
  • Step Ramp time: the user load would be increased from 10 to 20 users over a 10 second period
  • Sample Rate time: system will collect result data after each 10 second
  • Run duration: 10 minutes which is calculated based on the step load distribution
  • Warm up duration:load test will increase the load gradually within 5 seconds.

Another consideration is database.Visual Studio strictly requires SQL Server for the load test store. If you don’t have a SQL Server database, you cannot save test run data. You can check the databse setting from Test (visual studio menu) > Manage Test Controllers. A dialog will appear which allows set/reset of connection string of test data store.
configaration 2

 

Analyze Results

The primary goal of performance testing is to study application performance under normal load and heavy load for sustained durations or for short durations. In order to know our applications capability, our load tetsing should be answer these questions below

  • Does web application function properly under given load?
  • Does the page response times satisfy target requirements?
  • Which one is the slowest page on web application during tests?
  • Which page take longest time to download?
  • How many simultaneous users can web application handle?

And in this section we will try to find these answers by analyzing graphs provided by visual studio load testing.
At visual Studio 2010 several built-in graphs are provided. we can use the built-in graphs as is or we can customize them. Additionally, we can create our own graphs.
Load test analyzer graphs display counters. Each graph follow a specific measurement to plot a graph. The y-axis is not labeled with any specific range, but is instead labeled with values from 0-100 that represent a percentage of the total range for each counter. For example, for a counter with a range of 1000, a data point of 60 on the y-axis would correspond to a value of 600 for the counter. The horizontal timeline x-axis for a collapsing graph has an origin of 00:00 and a range that covers the entire test run. Average’s are not plotted in graph.
result monitor
We can analyze load test results by using the Load Test Analyzer in the following ways:

  • Monitor a load test in real time while it is running.
  • Analyze a load test results
  • Analyze results from previous load test(s).

Now lets try to find our answers from the graphs.
Does web application function properly under given load?
We can create an HTTP summary graph which will contain “Request time out”,”Passed request”,”Failed Requests”. This will provide time-based frequency of errors over the duration of the test. Error rate is an important metric in stress testing. This indicates the maximum number of users that can be served correctly, without errors and hence application capacity.
Ideally error percentage should be zero throughout the test run. If error percent is high, root cause of the error should be analyzed. It could be because of wrong inputs to the load test, network connectivity problem or the server might have crashed.
http summary
Does the page response times satisfy target requirements?
Visual studio load testing has a builtin graph called “Page Response Time”. This response Time versus Elapsed Time report indicates the average response time of the transactions over the elapsed time of the load test as shown.
From this graph it is possible to identify peaks in the response time over a period of time. Ideal behavior of response time graph is that response time does not increase with load. The point at which the graph increases sharply indicates beyond this load server cannot serve the request and users will see no response or a very slow response
Which one is the slowest page on web application during tests?
Same “Page Response Time” graph can be utilize for this purpose. This graph represents average response time for the each page in time. Each bar in the graph is the average server response time for each page.From this graph it possible to identify slowest page of the application.
result as a grid
Which page take longest time to download?
Same “Page Response Time” graph can be utilize for this purpose too.Each point in the graph is the average of the page download time during that interval. Page Download time graph of individual pages help you to identify the exact page that has high download time.
How many simultaneous users can web application handle?
Built in”Test Response Time” graph can be used for this purpose. If we analyze Response Time Vs Test response Graph we can find out the capability of the web application.The Response Time graph shows the time the server took for responding as the test load is increased. The peak indicates that the server has reached its capacity to serve data, and is unable to scale further.

Finally, visual studio load test has so much more to offer, this post only focused on those analysis that I thought important to get to know your application better. You can come up with lots of custom reports by utilize the result data if you need to. Hope this will help you.

 

Want to be more secure? Build two-factor authentication into your webapp

August 9, 2012 § 1 Comment

I too believe in  two-factor authentication I already implement in my web apps.. There more better and secure way. Its been covered in the article I read today

Here goes the article :

 

After the hacking of a former Gizmodo writer’s Apple account, a lot of discussion has been going on concerning turning on two-factor authentication on services like Google Apps. I absolutely recommend doing so, but I also think that’s not enough. A good majority of the people who read this blog are creators of webapps of some description. It’s time for us to start building two-factor authentication into our products.

Off the top of my head, I know of two well-documented methods of implementing two-factor auth, and after some googling I found one more:

Authy – They launched a few days ago, but their API looks really solid. For most people (meaning for people with webapps under 100,000 people), this service is free, too.

AlterEgo – The venerable team behind MailChimp built this one. I’ve used it on my MailChimp account for a while now, and it hasn’t ever caused me any problems. The main draw of this is that it’s completely free.

Duo Security – This looks by far to be the most comprehensive solution, however this comes at a price. They have a free tier, but unless you have fewer than 10 users on your application, this won’t cut it.

Google Authenticator (thanks @tbyehl) – The Google Authenticator app uses open standards and can be used by anyone. The upsides of this implementation are that it’s free and people who use two-factor auth most likely already have the Google Authenticator app on their phones.

Some more provided by some users on Twitter: YubiKey (thanks @typelife, @oskarpearson and @ArondeParon),  SecureAuth (thanks @STS_Hayes), Perfect Paper Passwords (thanks @halffullheart)

(Did I miss a service? Ping me on Twitter if you know of any more)

Not every webapp needs two-factor authentication. It’s up to you to gauge whether or not you think the data on your service needs this much security. But, if you have some spare development time, it doesn’t hurt to add one of these services as an option. Oh and I beg of you; use a password manager.

Let’s hope Apple step up their game, but just because they haven’t yet doesn’t mean you shouldn’t, either.

 

(Source : http://blog.alainmeier.com/)

Where Am I?

You are currently viewing the archives for August, 2012 at Naik Vinay.