Printer Status from Sato Label printer

Background

In my earlier post on Print Document Vs Printer Control language I had mentioned about the advantages of using the printers native language to improve performance of label printing. Currently I am facing issues in getting statuses of printers that we are using in the production environment.

Why we need printer status

My team is responsible for developing a central solution which is interfacing with a scheduling service. Based on the inputs received from the service our application is supposed to print labels to one of the printer connected to any of the stores within a network. Since the label printing solution is a central deployment in the form of a WCF service it becomes necessary for us to know the status of the printer.

There can be different statuses linked to a printer

  • printer might be busy printing a print job
  • Printer is online / offline
  • There is a paper jam
  • The toner is finished
  • The printer is out of paper

In any of the above situations the printer should not be sent with further print requests. We use Sato CX400 printers to print labels. Unfortunately this model of printer does not support giving feedback to the program which initiated a print. We are unable to get any status of the printer. This is not possible programmatically.

Even if we switch off the printer and try printing a test print using Notepad or Word it doesn’t give any notification. The print job is stored in the printers internal queue and printed automatically when the printer is switched on again. This is a strange behaviour. In normal A4 printers like HP LaserJet and others if there is any problem while printing from Microsoft Word it gives a notification on the taskbar.

In our application we are also supposed to do the load balancing of printers programmatically. A store can have multiple printers and we should even out the load on all the printers available within the store. It becomes impossible to load balance if we don’t get response from the printer. We might end up firing dead printers to a printer if it is not functioning.

We tried alternate method like using Windows Management object to get the status of the printer. But that also doesn't seem to give correct status. Irrespective of the state of the printer, we always got the status as online or idle.

Conclusion

I wish there was this small capability in Sato CX400 printers to give statuses back to the calling program. We might end up using a different printer in our future project as we need this ability very badly. In the mean time if someone has any idea how to get status from Sato CX400 printers please let me know. Until next time Happy Programming :)

spacer

Comparison between Component and Feature Based Agile Teams

Background

For more than past 3 years I have been part of Agile teams. I have worked with distributed as well as co-located teams. During this time I had experience in developing the software using both component based as well as feature based products and services. These days Most of the organizations  have teams in different geographic locations. There are different ways of structuring teams in such scenario. In this post I’ll try to share my views on Component based and Feature based Agile teams.

Component Based Agile teams

I have been saying this repeatedly to my colleagues that Agile is a change in mindset about the way we develop software. For people who are born and brought up in traditional waterfall software development model it become difficult to adjust to agile very easily. We can design a system into various layers like backend or Database layer, middle tier or services layer and front end or user interface layer. In a component based team structure each of these layers will be developed by a team. As a result you might have 3 separate teams working on 3 different layer of an application.

We have been following this approach for one of our recent projects. On one hand it makes life easier by allowing a team to work within its own boundaries and finish the tasks quickly. This also allows good utilization of resources as people with specialized skills like UI development or middle tier development can work on their primary skills.

The biggest problem I have experienced with this approach is that it increases dependencies among teams. For every instance of a collaboration between two tiers of an application there is an additional overhead of communicating between teams. If both the teams are working at same velocity it might not cause much problems but very rarely does it happen in real life projects that way. Dependencies start increasing and might affect work of both the teams. This can have adverse effects on the overall release dates of the project.

Lot of time is spent in identifying and resolving the dependencies. Since both the teams are developing independently, there are greater risks at the time of integration. Additional efforts are required to resolve any of the integration issues that might arise after integrating various layers or modules.

In our case the different teams were based in different locations. Working hours are different for different teams due to different time zones. On many occasions as much as half a day is wasted one of the team is not available for clarifications on some critical items.

Feature Based Agile Team

As compared to the above approach, there can be an alternate way of structuring teams based on features. In this case one team can work on developing the complete feature end to end. As an example, there can be a team working on processing the online orders from a website to the distribution centre of a retail organization.

The same team would work on the web site portion which will communicate to the service layer and process some data into the backend systems. Since only one team is working on the complete feature they will have the freedom to decide on the design on each layer and can implement the functionality much faster as compared to a component based team.

Having a single team implement the complete feature end to end also enables the organization to reduce technical debt. As all the teams will be well versed with all the technologies as well as design and architecture of the system. Knowledge will not be residing in silos. Any team can work any layer for future development which also helps in team building and better collaboration.

There might be problems in this approach as well. One potential problem could be that two features share a common database object or a service layer functionality. And in that case there is a chance that both teams might be stepping on each others feet.

Conclusion

Having experienced the pain of component based Agile development team I would like to try the feature based approach to see if it suits better to the distributed development model that we follow in our organization. The biggest advantage I see in feature based approach is the enhanced collective code ownership. It will also help all teams to understand the overall picture of how their work fits into the larger systems.

spacer

Windows 7 Desktop Background utility

Background

Back in the days of Windows XP I used to have a Windows XP power toy called Wallpaper changer to change my desktop images at periodic interval. Recently I moved to Windows 7 and found a useful utility built into the operating system to do the same.

Windows 7 Desktop Background

In Windows XP the wallpaper changer power toy offered features like picking up random images from a folder. You could set the time interval after which the next image should be set as the desktop background.
Windows 7 has a inbuilt feature which can do a similar job. Following are the steps to access this Desktop Background utility
1. Right click on desktop and select Personalize option
RightClick
2. Click on the Desktop Background link towards the bottom of the screen
Desktop Background
3. Desktop Background
Background
The Desktop Background has facility to
  • select the source of images
  • select all images or clear selection
  • Frequency of change of image
  • Shuffle option to randomize image selection
  • Picture position like Fill, Tit, Stretch, Tile and Center.
  • There is also an option to pause the slide show when running on battery power to save power consumption.

Conclusion

Its a simple utility but having it inbuilt into the operating system enhances the user experience. I am yet to discover all the new features of Windows 7 but as I said in my earlier post on Windows 7, I am impressed with its features. Keep up the good work Microsoft.
 

spacer

Impact of unknowns on Agile Project Timelines

Background

Many a times in an Agile project we start with unknowns when the business requirements are created at the Product Backlog level. We go with the agreement between the scrum master and the product owner that enough details will be available for the development team before the start of the sprint or iteration to carry on with their development work during the sprint.

What happens when clarity is not available

Quite often I have seen that due to various reasons we do not get enough clarity on the product backlog items. This results in changes to the release plans at a high level or at a lower level to the sprint plans. I have faced issues in past where my team has taken a risk of committing to work on a task where 100% clarity is not available thinking that the information will reach the team during the sprint. But when the required inputs were not available that resulted in delay in completing the tasks. This has a direct impact on the velocity of the team.

When enough information in not available upfront it also means the development, the business analyst and test teams can’t agree on the definition of ‘Done’. This can lead to ambiguity as to what looks like Done. From development teams perspective a particular task can be done but if the test team is not able to test it due to lack of clarity then it becomes an issue.

At times the development team might not be able to provide high level estimates for the product owner during estimation and planning session. If that is the case, product owner might be unable to get a clear idea as to how much time it will take to deliver the piece of functionality. Also it will be difficult for the product owner and scrum master to slot the stories in respective sprints. It might also mean that the scrum team might end up developing a low priority story as compared to a high priority one. This can also lead to underutilization of resources.

Software project management and specially the estimation is not everyone's cup of tea. If there is day today involvement from the product owner with the scrum team, it might be easier for him or her to make a decision on whether to reprioritize a story or de-scope it. But if the product owner is not involved in regular meeting with the scrum team it becomes really difficult to convince him and get an agreement on changes to the schedule or features. 

Conclusion

In my opinion, according to best Agile practices there should be constant involvement of product owner with the scrum team. Also the scrum team should have 100% clarity on the task that they are supposed to work on in a particular sprint or iteration before it starts. Without these two things it becomes a nightmare to manage the schedule and deliver the project within stipulated timelines. In an ideal scenario the product owner or the business analyst should work at least 2 sprint ahead of the development team. It should also be the responsibility of the scrum master to ensure that product owner is aware of the planned tasks in next 2 sprints. This should enable the product owner to do all the background work to clarify the doubts raised by development team during the estimation and planning meeting. On part of the scrum team, they should work only on stories which have enough clarity. Because the team is committed to deliver the stories during the sprint or iteration it becomes imperative that they have all the required inputs available before starting the sprint and committing to the amount of work.

 

spacer

YouTube downloader and free format convertor

Background

I am not really a big fan of YouTube. It might be a great site for sharing videos but I personally don’t like the quality of video on YouTube. Most of these are flash videos .flv files. I found one useful thing for my personal use though. For my nephew and my daughter I found some nice videos of nursery rhymes on YouTube.

YouTube Downloader and file convertor

You can watch all the content on YouTube. But many a times its a painful experience if the broadband connection speed is low and due to buffering there might be delay in playing the whole video in one go. By default there is no option to download the video from YouTube. There are many programs which allow you to download this content.

One such program is Internet Download Manager which integrates into browser and adds a button everytime a video is played from YouTube.

Another option that I prefer to use is the YouTube downloader. This small utility has an option to paste the YouTube URL and save the content locally. It can also convert from one format to another a previously downloaded file. Here is a screenshot of this utility

YouTube downloader

The YouTube downloader utility does not have an option to convert the flv files into AVI file. It converts the flv files into MP4 format. Many of the media players support MP4 format but by LG LCD TV does not recognize it. As a result I cannot play these on my LCD TV.

As a result I needed to look for another utility which could convert the flv or mp4 to AVI format. A bit of Google search and I found a useful free utility.Pazera Free FLV to AVI convertor - http://download.cnet.com/Pazera-Free-FLV-to-AVI-Converter/3000-2194_4-10786669.html. There were one two other utilities I found but there were limitations like they could not convert from flv files to other formats if the video length was more than 3 minutes. Pazera convertor does not have such limitation. Compared to others I thought it was bit slow but then as long as it sufficed my requirement of converting the whole file I am not going to complain too much about the speed. Here is a screenshot of this utility

Free flv to avi convertor

One more thing I like about the YouTube downloader is its ability to pick the URL from clipboard when you hover over the textbox where the URL needs to be pasted. All you have to do is copy the URL and hover over this textbox. YouTube downloader will pick it up immediately. These are small little things but they really help in enhancing the user experience.

Conclusion

Both these utilities are lightweight and helpful ones. We can use them not just with YouTube videos but with any other compatible formats as well. If there are better utilities than these I would like to know them.

spacer

I am on Windows 7

I wish all the readers of my blog a very Happy and a prosperous new year 2010. During the long weekend I ended up revamping my personal laptop with both hardware and software changes. I have a Lenovo 3000 N100 series laptop. Its been more than 3 years I have been using this. I assume that's a good amount of time for the battery life. My battery went off last week and had to be replaced. I was running this laptop with Windows XP Professional version and 1 GB RAM. Over the last 3 years many software's have been installed and the system had become really slow. Also my 20 GB C drive was almost full and I was continuously getting the low disk space warning from Windows.

I decided to upgrade the RAM and replaced one of the 512 MB chip with a 2 GB RAM. That boosted my memory to 2.5 GB from 1 GB. The battery was also replaced. I thought of reinstalling the operating system by formatting the hard disk. Off late I have been reading the blogs from Scott Hanselman and was influenced by his posts on Windows 7 operating system. I spent a day reading about the performance of Windows 7 compared to XP, the minimum hardware requirements, issues people had while installing fresh copy as against an upgrade etc etc. Most of the posts were encouraging and suggesting to try Windows 7.

Finally on Saturday morning I started the installation. I did not format the C drive as I had some useful software's on my XP OS. Instead I backed up the data from my other two drives and formatted both D and E drive. Installed the Windows 7 OS on D drive. It was a breeze. Took less than an half an hour and was a smooth install. There were very little choices to be made. Some of the settings like internet connection settings were automatically detected from Windows XP during installation and carried forward without any user intervention.

The performance also seems to be good. The UI looks similar to Vista in some regards but has many good features. I personally like the jump lists on the taskbar which show the preview of each window before switching over to it. 

The only problem I faced was with the sound drivers. Windows 7 could not identify the correct sound drivers for my laptop. But it took not more than 15-20 minutes to find the right drivers on the net and get the sound working.

So far the overall experience has been EXCELLENT and I would recommend people to mover over to Windows 7 from XP or Vista operating system.

 

spacer