Using Open Live Writer for writing blogs

Writing blog has always been one of my favorite hobby. I had been using Windows Live Writer for posting my ideas, thoughts and sharing my experience to the outside world. Recently I came around with another writer called Open Live Writer which can also be used for writing blogs. It is almost similar to Windows Live Writer. As a coder and blogger, I would like to share my experience of how you can get this writer and how you can embed your code snippet to your post.

The writer can be downloaded from the location. Once you download the writer, you will be asked to configure it to connect to your blog account. In my case I am using WordPress as my blog account. Once you have installed the writer, you need download the Source Code Snippet plugin from the following location. Thanks to the following link https://richhewlett.com/wlwsourcecodeplugin/live-writer-plugin-download/ from where I got the instruction of downloading the plugin and configuring it. Once you download the plugin, you need to unzip the plugin folder and copy the contents to any of your local directory folder.

image

Now you need to open your registry and follow the path HKEY_CURRENT_USER\Software\OpenLiveWriter\PluginAssemblies where you need to add a Key: SyntaxHighlight_WordPressCom_OLWPlugIn_V2.0.0 and Value: C:\OLWPlugin\SyntaxHighlight_WordPressCom_OLWPlugIn.dll. The value will be the folder path where the plugin files resides.

image

Next open the configuration file OpenLiveWriter.exe.config from the following location C:\Users\UserName\AppData\Local\OpenLiveWriter\app-0.6.2 and update the configuration file by adding <loadFromRemoteSources enabled=”true” /> at the runtime section.

image Once you complete this process, close the writer and reopen it. You will be able to view the Source Code Snippet plugin in the writer utility.

image

Hope this helps to all my fellow bloggers.

Diversifying skill sets into multiple technology stacks

It is hard to define what can be the best of technology stack that defines your skill sets and makes you stand out in the crowd of millions of developers. It is also not easy when you stick to one technology and one fine day you have a feeling that you are far behind in the technological race. Every day we see new technologies emerging in market, some are outstanding to make a difference in your day-to-day life as a developer and some which makes no difference at all.

After all when we start our day as a programmer and try to create new dimensions in our code-base or dig into a high priority defect or bug reported, the only question that comes to our mind is how can we resolve this with minimal work, better optimization, less orientation and provide better approach or process involved. Its like we have a dish full of ingredients to prepare the food but we are not sure which one to take and leave behind the ones which might not be good in taste. People around us like fellow developers, architect, solution engineers will guide us to decide the best approach but what makes difference is how you attempt to use your technology stack and combine with some new technologies which you have never worked with. A fear of denial and failure comes to our mind and we place ourselves in one single room not extending our boundaries or thinking out-of-box to be safe and avoid the discrepancies.

Every technology have a root to follow, a guideline common in every aspect whether it is defining relations between object and classes or a pattern that leverage the orientation and process workflow of code. Regardless of what technologies known to you and the ones new to you, every technology follows a common pattern of instructions and guidelines to streamline the process. We need to emphasize more on our understanding for the root of these technologies and these patterns which will make us more strong to take decisions of what can be the best approach for our solution which will follow some programming protocols. Diversifying our skill-sets into multiple technology stacks by listening to various technology podcasts, reading technical articles and journals, reviewing blogs will surely help us to make ourselves stand out in the crowd. Most of us have an aspect of reading these technical blog or listening the podcast when we face an issue and we look around to find a possible resolution, but if we always keep ourselves updated reading these these technical articles at our free times or leisure we might already have a solution in our mind when we face these technological challenges in our day-to-day life. All we need to do is diversify ourselves, our thought processes to come out-of-box and enhance our learning capabilities. Its true there is no age to learn new things because when we learn something new we earn a better part of life.

Architecting a solution

We Software engineers are practitioner of software engineering which states that we apply principles of engineering to design, development, maintenance, testing and evaluation of a software and systems involved in SDLC process. Instrumentation is emphasized mostly with various patterns and practices we come across while we are involved in SDLC process.

First of all it is difficult to define precisely the meaning of an architecture but I would like to take some approaches which might define architecture of a solution effectively.

First Approach:
First approach we deal while defining the architecture of a solution is so called pragmatic approach. Pragmatic architecture as the name suggest is about adopting the approach that works best for you and focuses on essential concrete tasks and priorities the work according to the value it brings to the project. A pragmatic architect is open-minded and follows activities that leverage the solution offered in many ways in following context:

P: Promote collaborative work that involves all team members
R: Reduce risks and uncertainties
A: Adhere to minimalism and simplicity principles
G: Gather key elements to outline the architecture during your initial timed-boxed iteration
M: Modify the design throughout the development lifecycle to adapt to emergent needs
A: Address both functional and non-functional requirements
T: Try out theoretical concepts and leverage past empirical experience
I: Invest in known requirement instead of hypothetical future needs
C: Concentrate on tasks that support the development team

Second Approach:
The second ideal approach is with defining the four metaphors of architecture which mostly relates to Data Collection and Analysis. These four metaphors are:

Architecture as Blueprint which defines the working implementation which involves in implementing or programming the system according to specifications.
Architecture as Literature which defines the solution or the collection of solutions made in the past which make us aware of the kind of system we have when we deal with heterogeneous environments.
Architecture as Language which defines the common understand about the structure of the system and let us know where we are going. This information serves as the communication between different stakeholders about high-level structures and solutions.
Architecture as Decision which defines the basis for rational decision-making concerning resources and strategies. This influence on needed resources when building the system, their special skills and the amount of money that must be spent on third party licenses.

Third Approach:
The third and systematic approach is defining the tier architecture with Business Logic Layer, Data Layer and Presentation Layer.

Business Logic Layer encodes the real world business rules that determines how the data can be created, displayed, stored and changed. This layer typically include Business logic components that is concerned with the retrieval, processing, transformation and management of application data, application of business rules and policies and ensuring data consistency and validity.

It generally comprises of Business Workflow Components which defines and coordinate long running, multi step processes implemented using Business Process management tools and Business Entity Components which generally represent business objects, encapsulate the business logic and data necessary to represent real world elements.
Data Layer consists of Data Access Components which abstract the logic required to access the underlying data stores and Service Agents which implement data access components that isolate the varying requirements for calling services from application like Caching, Offline support, etc.

Presentation Layer contains the components that implement and display the user interface and manage user interaction. This layer comprises of User Interface Components which are the visual elements to display information to user andPresentation Logic Components which defines the logical behaviour and structure of the application in a way that it is independent of any specific user interface implementation.

Fourth Approach:
We extend our layered architecture in terms of defining the Service Layer also which defines and implement the service interface and data contracts in accordance to provide translator components that translate data formats between business layer entities and data contracts without exposing details of the internal processes or business entities used within the application

To Summarize…

An architecture extends with various entities when we define a proposed solution for a new system or enhancing features and performance orientation of an existing system. Usage of various design patterns, ORM tools, Web Service and Shared Library implementation, Domain model creation with DDD approach, etc., always are the core components while we define the architecture.

We need to follow some pre-defined approaches when we are proposing an architecture for a system and ensure we follow these approaches to bring consistency during SDLC phase of a Project life cycle.

Migration of existing Application to Win 8/8.1 RT Platform

windows-8_1-price-logo

How many times we have thought what could be the best possible ways of migrating our existing applications to support Win 8/8.1 RT platform. We stepped back thinking that migration estimate will be huge and it will not go easy for us to derive a better conclusion on this aspect. Today I would like to share some of my thoughts on this migration aspect which I hope might help my fellow developers and architects to draw a better picture for this activity.

Let us divide this migration activity into three important aspects: User Experience,Architectural Design Areas and last but not least Integration and Security aspect. Lets have a detailed understanding how we are going to touch base each of these aspects.

User Experience

  1. Thought process should start of providing Fast and Fluid Responsive UI design for Windows 8 Style App.
  2. Enhance of Touch experience is pretty important to make user in control of across multiple form factors like mobile, tablet, desktop or laptop
  3. Provide Contracts and Notifications to User to share data between multiple applications and getting live details in one place
  4. Integration of Live Tile to get real-time data involved
  5. Consider support of multiple device integration aspect

Architectural Design

  1. Presentation layer to be developed using XAML with C#/VB.NET, HTML5 and CSS3 with JavaScript, Plus Direct with native C++, XAML with C++. This means we need to emphasize on restructuring the ASP.NET UI to take advantage of Win 8 Style UI capabilities
  2. For existing ASP.NET application migrate from (ASP.NET (MVP), HTML/JavaScript and AJAX) to (XAML with WinRT or HTML5 with CSS3 and WinJS)
  3. For existing Silverlight/WPF application migrate from XAML to (XAML with WinRT or HTML5 with CSS3 and WinJS)
  4. For existing Winform application migrate from (VB.NET and VB 6.0) to (XAML with WinRT or HTML5 with CSS3 and WinJS)
  5. Redeveloping the Business layer using Portable Class library and extend services to Cloud with WCF/RESTful wrapper
  6. We need to emphasize on moving ASP.NET API calls from code-behind files to corresponding WinRT APIs.
  7. We have to remove Flash Player, Silverlight Components and ActiveX Components since they are not supported by WinRT.
  8. Consider migration of all Synchronous code written in code-behind to Asynchronous code.
  9. Emphasize on exposing DAL logic through WCF Services since WinRT doesn’t support direct connection to SQL Server.
  10. Provide updated Content with Live Titles and Notifications which utilizeWindows Push Notification Service
  11. Emphasize on considering migrating of Services to WCF v4.5 to take advantage of Asynchronous API.
  12. Synchronization of App, data, etc., across all devices like sync content back to Tablet/PC having native connectivity of data with Cloud based Storages
  13. Connecting Apps, Files, PCs and Devices to the cloud using SkyDrive having the facility for uploading documents to SkyDrive.

Integration and Security Concepts

  1. Leverage SkyDrive storage to store files and data reducing the redundancy of data on user system
  2. Implementing SSO (Single Sign On) as part of Live SDK Integration
  3. Using Azure Toolkit to store data in cloud and Push Notification Service
  4. Using a new logon methods like Four digit PIN/Picture password
  5. Promoting new booting mechanism, Unified Extensible firmware interface to offer a better security, faster start up times and avoid unauthorized firmware
  6. Packaging manifest containing deployment instructions, intervention for device resources.
  7. Considering Trust Based Security like using SAML Token, STS Provider, 2-Way Certificates, etc., for migration
  8. Consider Integration Patters like App-to-App, App-to-Cloud or Enterprise-to-Cloud

As I have covered the major work areas that we need to consider as part of this migration aspect, we should also emphasize on the deployment perspective for the migrated application. We should be looking out for deploying our application toWindows 8 Marketplace (Apps Store) where Tablet, Mobile and PC users can make use of this application.

I hope this article will provide my fellow developers a generic idea how to start and come up with the migration platform.

Lead by Example, Not by Experience

developer

 

OK so what am I trying to explain here is pretty simple. I am a developer with an ambition to someday lead a team of Developers, Analysts and Testers. I work very hard every day to meet my expectations and also the expectations of my managers. With my experience in technology stacks and analytical mindset I have created a good reputation with my client. All these years working as a developer I have been the best on every assignment I worked on. Now its my time to look forward to become a lead and prove my years of expertise in my next assignment. What else do I need, a good pay, a good role and a perfect establishment in my organization. That’s it….

Do you realize where I am going wrong. All I am trying to do is to become one selfish individual all the way only to prove myself that I am the best. All I am trying to achieve here is to lead my life with my experience rather than setting an example for others and let others grow.

When you realize the fact that you are travelling to another horizon of becoming a lead, it is very important to change your mindset from a developer and convert yourself to someone who can be a guide, a mentor and create a platform for others to grow. Its important to realize that there is a world outside your coding world where the team rely on you and you need to create that single trust and belief that “YES”my lead is always there for me in every situation as a guardian, protecting me and guiding me in every possible way he can.

To be a good Leader you need to be someone with the following attributes.

  • A Good Listener – You need to hear the voice of others because until you hear your team how will you solve their problems.
  • A Good Practitioner – Yours patterns and day-to-day practices are the ones that your team follows. If you be a good practitioner, your team will always follow your path.
  • Be a Motivator and not a Dictator – Your client have demands to fulfil and they keep high expectations on you that you will fulfil their demands whatever it takes. Rather than proving yourself to keep up the expectations, you need to analyse the strength and weakness of your team and not become judgemental. Remember all five fingers are not equal and if one of them is broken, the rest will not work because there is a synchronization effect between these five fingers. First of all calm down and take a deep breath, strategize yourself to handle the situation and rather then becoming a dictator become a motivator for the team so that your team get sometime to realize the situation and help you meet the expectation.
  • Don’t overcommit to your client – This aspect is very important when you know you are dealing with not a single individual but a whole team of people and not everyone are same in their knowledge, experience and mindset. You need to prove your team and not yourself when you are a lead.
  • Set some examples to help your team – Each and every member of your team need your guidance and support. Feel the difference between the world of writing few lines of code and the word of handling crisis and taking managerial decisions that will build your team effectively. Creating your own pod-casts, writing technical blog, collaborating with external and internal dependencies, mentoring your team members in every aspect, effective communication and clientèle management are few of the aspects that can be set as examples for your team.
  • Be a Preacher and not a Teacher – Remember a preacher is someone who is dealing with varieties, different mindset, believers as well as non-believers while a teacher is dealing with one single entity of people of same mindset. As a preacher you are dealing with wide range of people some highly motivated and some completely unmotivated while as a teacher you are dealing with only motivated individuals. All team members are not same so you need to be a preacher and not a teacher.
  • Acceptance and Denial – As a lead we are always try to keep a motto of life, people should accept me and my changes and we cannot accept the denial aspect from people. You need to let go of these kind of feelings or change your mindset from this. Don’t try to live with these words when you are dealing with a team because some will accept you and some will deny. Vote of Confidence is the only one aspect that you need to get from your team. If your team is confident on you, what else you need to make your project a successful one.

Last but not least read some good books. I try to find some time from my busy schedules to read some good books where I can learn and I can help someone also to learn. Be a change for yourself and you will see the change you have in your life. Be a good leader, help others and then only you can help yourself.

Production Release – The D-Day

ProductionRelease

Here I am trying to share some of my thought processes that can help a team or an individual to strategize for a better release day. Few of the points might be similar to you and few might not be the ideal case involved in a release process. The points highlighted are all generic to thought processes that can make Production releases efficient and effective. Production release happens based on sole criteria specified by organization either during a day or during night, mostly it is termed as release night. It is a Judgement Day for all the developers like us since this is the day when all our codebase, fixes becomes live to world and any bug associated with the codebase might create a big impact once the functionality is live to customers.

Few issues that might be encountered:

  • Update of a DB Script failed in Production Server.
  • Compilation of a library missing to be part of the release
  • HTTP 500 Server error occurred during the release time
  • Target Framework is not installed in the Production Server
  • Ports and IP Addresses not configured or open to access the websites and web services hosted in Production Server

With few of the examples that I had shared RCA or Root Cause Analysis are followed after the Release Night. This is strongly practiced as a best practices in organizational level to adapt best ways to strengthen the release processes.

I feel few follow up action items that can be a good practice a day prior to our deployment day will make the release smooth and flawless. Also some of these action items might not be the ideal approaches and varies from organization or project level practices.

  • Pre-deployment instruction set should be created prior to deployment day and provided to deployment team in order to avoid any discrepancies during deployment day
  • Initiate a deployment check guidelines with cross teams and dependencies prior to deployment day
  • Verify the Production source code branch in order to have a checkpoint of the latest codebase being migrated
  • Prioritize your regression testing having all test cases covered including compliance and data level testing
  • Initiate a process prior to release date with Software Configuration Management team or Deployment team to validate the environment, IIS version and Application Pool configuration, COM Component and necessary 3rd part library configuration in the Production Environment
  • Consider creation of checklist point for dependency teams like Environment, DBA, Cross teams, etc., and contact persons prior to release date for conference call as and when required
  • Have your Mock data prepared for various services to be tested once the deployment is completed with latest source code using WCF Client, WCF Storm or SOAP Client.
  • Create checklist for all the DB objects that is required to be validated during deployment phase along with SQL statements to identify the objects changed, or global data transaction happened.
  • Validate with Network team for all IP addresses, Ports that are required to be open and configured, F5 and firewall configuration defined and standing instructions for remove discrepancies.
  • I feel we should not consider the performance enhancement or issues during the release period and keep this as a separate enhancement or issue to be provided as hotfix release later.
  • Keep all the communication channels like Team Communicator open as separate window, Conference Bridge Call open for immediate attention during crisis period, etc.

At last and not least please don’t PANIC ….this will never help you and your team. So you can see that taking few approaches during release night can make your Production release more efficient and effective.