3 aspects about software

In the last few months i’ve been reading lots of forums and articles discussing about software development techniques, technologies, process, economy envolved and so on, as well as talking with some CIOs, CEOs, and people that work on the IT area. The main idea of this post is talk about important aspects of software, these aspects are easily forgotten at the time we’re developing software, that’s the reason to cover these topics again.

One thing i’ve learned during all these years came from a quotation i’ve read: “The things you own, end up owning you”. You’ll see, in the next few lines, that this quotation can be applied to software. This post is divided by 3 major aspects, that is: The Software, The Customer and finally, Economics. Let’s explain how they’re important to the software development nowadays.

THE SOFTWARE

It’s hard to most part of the developers to undestand the real concept of software, basically they see software as a way to get some money, at least for part of them (just kidding), or they see software as a bunch of lines of code, frameworks and development techniques. It’s not wrong to think like that, but this is not everything. To understand software it’s necessary that you understand the entire concept behind it. Most of the readers are now thinking: “what the hell? I understand, i undestand use case documents, UML diagrams, Architectural documents, requirements…”. Well, i’m sorry folks but that’s not undestand software at all. Did you any time asked yourself why you’re developing the project, why you’re using some determined framework and why you discuss with others that this is better than the other one?  First of all, i want to say that SOFTWARE IS NOT RELIGION, and when you remember this you’ll start comprehend software.

You develop software for some purpose, and most of the time the purpose is: resolve some kind of problem. Software is developed to meet some kind of requirement and to achieve concrete objectives. When developing software, is important to remember that it will be used by someone that really need this to work, and this is a sequence because probably other person will need the information generated from the first people work. The quotation i talked about in the first lines of this post, can be applied here in a reasonable way. If you develop software thinking about the end user, and of course, putting yourself on the end user position, your way to develop software will change a lot. Remember, if you write a bad code and develop a poor software, all the work you did will return to you as soon as the customer starts to use your software, but that’s not the case here. My main idea is to give you some thoughts such: “Did my software meet the requirements?”, “Did my software meet the customer expectation?”, “Did i used what is the best for this project, for this customer?”. To undestand what software is, it’s basically understand your customer’s needs, understand how can improve their business, and then write software that can fit properly your customer’s expectations. The next section i will talk about the customer itself, but i’ll keep references to the software development. For now the main ideai is: software is a product that should be considered as an important piece of a major concept, for some times it will be the gear that moves the things, and as a developer you’re responsible for this. The customer will not care about how you developed the software, if you used the framework A or framework B, and so on. He will care about if the software is running properly if it fits his needs and of course, if it’s secure and easy to use.

THE CUSTOMER

There is no software if there is no customer. As i wrote before, your software should have some purpose, even if you’re writing a software that will be used by other software, probably it will still being for a customer. Software itself has no value wihtout a customer and thats true. Imagine if Facebook doesn’t have customers, i don’t think they would be worth billions of dollars. Some readers may say that is because it’s Facebook, and that’s why they’re famous. You’re wrong, they’re famous because its main concern are customers. They’re still writing  good software because customers want a product that meet its expectations.

When you start to think that your customer is part of what you’re writing, you’ll change the way the things are being made. Of course that it’s necessary a balance between the software you’re writing, the customer expectation and the capability of your team to delivery that. It’s important to be clear enough when dealing with customers, once you do that, it becomes easy to work and understand what is the real need of your customer.

For some development teams, customer is the one who pays the bill at the end of the month. It’s not right to think like that, you cannot confuse sponsor and customer. Most part of the scenarios we find nowadays, the customer is the one who effectively uses the software, while the sponsor is the one who’s paying for the software. If your software meet the customer’s criteria, you’re doing this right.

It’s important to remember that customer is investing on a solution for its problem and the results of the software you’re writing will have direct impact on your customer life. I don’t agree with processes, tools, people that can be an impediment to the progress of a project or don’t allow the software do whats intended to do. At the same level i don’t agree with developers and project teams that chooses a technology only because it’s easy to develop with or because it’s the latest technology available in the market and you should use it, or any reason they can show up.

Now i’ll cover up the last basic aspect of software, and of course one of the most important: The Economy of software.

ECONOMICS

The last aspect i’ll talk now is the economics of software and how it affects the industry. Most part of the generational shifts that happens today or happened in the last decades are combinations of a technological change,  an economic change and a business change. Economics are a powerful force in shaping industry shifts. Historically, the underlying economics have much stronger impact on the shape of generational shifts and the speed at which they take place than is given credit. During the mainframe era, CIOs saw client-server as a consumer technology that was not viable as a mainframe replacement. Yet, client-server rose quickly to dominance over the course of the early 90s. Similarly, CIOs cited security concerns, performance issues and compatibility concerns as barriers when adoption virtualization technologies. Yet, underlying economics of 20 to 25% savings compelled CIOs to overcome their concerns and adoption quickly accelerated¹.

To undestand the economics of software, we have first to undestand the little history  i’m gonna tlak about now.

When cars emerged in the early 20th century, they were initially called “Horseless Carriages”. Undstandably, people were skeptical at first, and they viwed the invention through the lens of the paradigm that had been dominant for centuries: the horse and carriage. The fista cars also looked very similar to the horse and carriage (just without the horse), as engineers initially failed to understand the new possibilities of the new paradigm, such as building for higher speeds, or greater safety. Increadibly, engineers kept designing the whip holder into the early models before realizing that wans’t necessary anymore.

Initially there was a broad failure to fully comprehend the new paradigm. Banks claimed that, “The horse is here to stay but the automobile is only a novelty, a fad”. Even the early pioneers of the car didn’t fully grasp the potential impact their work could have ont he world. When Daimler, aguably the inventor of the automobile, attempted to estimate the long-term auto market opportunity, he concluded there could never be more than 1 million cars, because of their high cost and shortage of capable chauffeurs.

By the 1920s the number of cars had already reached 8 million, and today there are over 600 million cars – proving Daimler wrong hundred of times over. What the early pioneers failed to realize was that profound reductions in both cost and complexity of operating cars and a dramatic increase in its importance in daily life would overwhelm prior constraints and bring cars to the masses².

Today we’re passing through similar generational shift with the brand new Cloud Computing Model. But what i wanna talk about is not about cloud computing, it’s about the impact of the changes that software brings to our customers in daily life. For them, the impact of the software is bigger than for us that work with it. Most of the times is difficult to our customer to adapt with the new model of business that software imposes, sometimes we have impact on distriution, sales and marketing and operations area. To reduce this impact we should create systems that fits the customer needs without having to change their daily activities too much. But at the same time we know that once the customer applies the software to manage the daily or manual activities, we’ll have a beneficial impact.

For some companies, the impact of the software economics changes the company’s business or someteimes the way they operate its business. That’s why important to understand your customer’s business and finally create software that with a closer analysis, becomes feasible to the business.

We can talk more about Generational shifts, innovation and impact of technology but this will be part of another post. Hope you enjoy these ideas.

¹ Text taken from the presenation Cloud Business Scenarios for ISVs – Microsoft, 2010

² Text taken from the white paper The Economics of the cloud – Microsoft, 2010

Categories: Não categorizado

Workstation components

01/25/2011 1 comment

Responding to the article of my friend Felipe Benevides i’ve started to think and took the idea to create the same article too.

To start and clarify some questions that you may have, here’s the tip:

  • That’s my personal workstation
  • No, you do not need all this stuff to work with Microsoft Technologies

Topic 1: The devices

For many, many years i’ve been working with Microsoft Technologies. Since i’ve started my career my workstation components didn’t changed too much (of course that hardware and devices upgrades happens all the time), what i mean is: it is the same base of components that i should have/install to work. Starting from my desktop, sometime ago i used the regular desktop (CPU, Monitor…) but the time goes by and i switched all this stuff for a simple laptop (not that simple). The configuration i choose at the time i bought this laptop was: Sony Vaio w/ Core 2 Duo, 4GB RAM, 500GB HD, 15.4 screen.

Of course that, if we want the productivity burst we should use a second monitor (dual monitor), and that’s the reason i use a 22 inch LCD monitor with my laptop.  This increases productivity because you can open 2 or more instances of your IDE, or one instance of your IDE and the use case document at the same time without having to use the old Alt+Tab.

                    

Of course that as a .NET developer i always use Windows as OS (for now Windows 7 Ultimate) with all features configured such as IIS (Internet Information Services). But at the same time i use other windows versions on VMs  (such as Windows Server 2008 R2, Windows Server 2003). This kind of configuration helps me to test my applications.

Topic 2: IDE 

I’ve already tested other IDEs to program with .NET, but i have to be honest with you guys: i love Microsoft Visual Studio since the 2003 version, and for this reason thats my main IDE. The version that i’m using nowadays is the Microsoft Visual Stidio 2010 Ultimate, i can say that it is a powerful IDE and works for any purpose (you can create solutions for mobile devices, cloud, web, Office and so on).

If you’re intend to work with Windows Azure Platform, be aware that you must use VS2010 as your main IDE.

Topic 3: Source Code + Continuous Integration

This is an interesting topic and i can write lots about it, but today i’ll talk about the TFS 2010 (Microsoft Team Foundation Server 2010), thats the tool i use as source control and continuous integration. TFS allows you to control your entire project, this technique is better known as Application Lifecycle Management (ALM). Yes, iknow that today there’s a lot of interesting tools such as Hudson, Git and so on, but think about the power of the Visual Studio integrated with Team Foundation, it is really awesome what this tools can do together.

Topic 4: Browsers

Today if you want to create powerful web apps, you should develop and test your application for all browsers (unless if you’re using Silverlight). Of course that under development phase, i always use Internet Explorer but, when i start the staging phase, the application is tested with different browsers, even mobile browsers.

Topic 5: Virtualization + Cloud Computing

 This is another interesting topic, but you should know that it is a basic concept for me: if i’m developing on-premises applications i use all the power that Microsoft Hyper-V can bring me with Windows Server 2008, this way i can build real scenarios and develop more responsive applications. But if i intend to develop a cloud based application, probably i’ll integrate my infrastructure with Windows Azure (unless i’m creating a SaaS). The Windows Azure platform is a powerful tool that let us develop applications as well as manage and integrate on-premise apps with the cloud. But Windows Azure will be topic for the next posts, so keep the blog.

Of course i cannot forget to apologize all my reader for the long time i didn’t post here.

See ya.

OpenXML SDK 2.0 August 2009 CTP

09/01/2009 16 comments
Hey everyone,
 
It a pleasure to announce the release of August 2009 CTP for the OpenXML SDK 2.0, here’s the improvements of the CTP:
 
  • Markup compatibility / extensibility support
  • Semantic Level Validation Support

You can see a very interesting post authored by Zeyad Rajabi on the Brian Jones blog. For now lets see the picture of the SDK roadmap

 

For now it’s all, see you soon.

Categories: Não categorizado

Presenting Microsoft Innovation Center Fortaleza – Brazil

07/12/2009 1 comment

 

Hey guys,

Its a pleasure to present you the video created by MIC (Microsoft Innovation Center) Fortaleza, in this video we present the MIC | Fortaleza, how we work here, our numbers and so on… Hope you like it. I Know i didn’t posted here last month(s) but theres a lot of new articles and tipd coming soon. 

MIC Fortaleza – Brazil

 http://images.video.msn.com/flash/soapbox1_1.swf
Video: MIC Fortaleza – Brazil

See ya.

Categories: Não categorizado

Office Contest Winner 2009

Hey friends,
 
I`m very proud to say that i won (1st place) the Microsoft Office Contest here at Brazil with the Images 2 OpenXML solution. The competitors should create an application that generates OpenXML files and uses Office as the base of the application (APIs, Front-Ends…). The Images 2 OpenXML project shows how to integrate the Office 2007 OCR engine with custom applications and use OpenXML and Speech Recognition as application features. The main proposal of the tool is to convert scanned documents to Office 2007 new format (OpenXML). The speech recognition improves the application user experience. The application uses the Office 2007 OCR API called MODI (Microsoft Office Document Imaging) that really helps to work with simple document translations. This project was based on the article that i wrote some months ago, the tool now is upgraded and more features will come. Hope you like the application.
 
You can check the results of the contest and the description of project of the winners at http://www.microsoft.com/brasil/office/resultadoconcurso/home.aspx (Portuguese).
 
See ya.
 
 
Categories: Não categorizado

A little bit busy

 

Hey friends,

Here i am again, first i want to whish you all happy new year (delayed). The things here at MIC goes a little bit busy, for now i’m working on lots of projects that soon will be released here, there’s a lot of new things comming up next few days (months =P). For now i post here the last news about Office Development, OpenXML, and some other cool stuff that i found over the web.

If you’re trying to find some good read about OpenXML, here some tips that might help:

Zeyad Rajabi keep posting some interesting articles about OpenXML, the last one is Traversing in the OpenXML DOM. Its basically a sequence of what Ali begins, they talk a little bit about OpenXML basics.

Doug Mahugh bring us the news about the stabilization of the IS 29500 standard (a.k.a OpenXML format ;-)) , there’s a very interesting article about the implementation notes for Office 2007 SP2, tou can check out here.

Mary Lee from VSTO Team give us an explanation about how to deploy Office solutions using Windows Installer, you can see the article here. (I Know it’s not new, but its very usefull).

You can check out one interesting video about how to customize a Office Ribbon Bar within custom applications using MFC and a free software called Axialis. here’s the video.

Ther a cool post on Code Project explaining how to create iPhone UI for Windows Mobile, int his article you’ll be intrduced to concepts like AlphaBlend, imaging load and transparency and so on. Here’s the link http://www.codeproject.com/KB/mobile/IPhoneUI.aspx. If you want to see this code with some additions (to work with PocketPC 2003 and so on) send me an e-mail.

December i spoke at MAD (Microsoft Academy Day) presenting the OpenXML SDK 2.0, and the development with VSTO 3.0, there’s some pictures here: (if you want the demosa and the presentation send me an email too)

daniel 003   daniel 002 daniel 005

 

Finally here’s a awesome picture of my vacations 😉

image

By the way, this is where i live.

 

See ya soon guys

Categories: Não categorizado

Microsoft Student to Business Program

 

Hey guys,

Last friday 9/03/2008 we started the 4th edition of Microsoft Student to Business program here at Brazil. We had 36K + registered people throughout the country.

The Students to Business (S2B) program is a Microsoft® Community Initiative designed to connect Microsoft partners and customers with qualified students for entry-level and internship positions.
The objective of the S2B program is to inspire local businesses to communicate the competency requirements for new talent, to evaluate the skills of students ready for an entry-level job or internship and collaborate with Microsoft and local education institutions to provide the curriculum and training needed to ensure students are prepared to meet the innovation needs of company’s around the globe.
Students engaged in S2B benefit from unique mentoring, training and certification opportunities. Various offerings are available to students at each stage of S2B – when profiling, in application and after their job connection.
The S2B program was first piloted in Italy and has since been rolled out 28 countries, aiming to connect 100,000 students with new career skills, leading to 15,000 students with jobs and internships as part of the Microsoft community.

The program is composed of three stages, the first one is a big class where we explain the local market, job positions and so on (related to the IT area), the second stage consist of 36+ hours of traning in two different tracks: System Development (using .NET) and Network Administration (Windows Server Technologies), the third stage consist of development of an Application using the technologies learned during the second stage (.NET, VSTS, WinForms, ASP.NET)… or solving an speified problem with Microsoft Network Administration technologies.

The attendees will have the totally 80+ hours of training with the most specialized professionals (the guys of Microsft Innovation Centers, MVPs and so on). 

Congrats to everyone who passed to the second stage!!!

Students-to-Biz_3_bl

 

See ya!!!

Categories: Não categorizado

Converting images to text using Office 2007 OCR, OpenXML and Speech Recognition

09/19/2008 1 comment

 

Hey folks,

Last week i’ve posted an article on the code project portal and i’ll reproduce it here:

Introduction

Sometimes at the development of an application we face situations where we have a scanned document (image) and we want to convert it to text (Word 2007 document). Some scanners provide applications that automatically perform this kind of convertion, but in the most times the generated document format is a .pdf or .odt and so on. If you want to convert directly to .docx (OpenXML) documents, you’ll have to use third-party applications or develop it from scratch.

OpenXML became a ISO standard (IS29500) and its adoption is growing up day after day driven by its performance, scalability and security. The format is the default format of Microsoft Office 2007 documents (.pptx, .docx, .xlsx). It’s 75 percent smaller than compared binary documents and based in two major technologies: ZIP and XML.
The Speech recognition is a feature included with .NET Framework 3.5. Developers can use this API and provide better User-Experience, easy access to specific informations and so on. The API is available since the .NET Framework 3.0 and it’s a default feature of Windows Vista.

Scenario

To facilitate the work of developers and avoid the integration with third-party applications, Microsoft release with Office 2007 one OCR (Optical Character Recognition) API that’s called MODI (Microsoft Office Document Imaging). It’s important to remember that the API used in this sample is exclusive of Office 2007 (Office 2003 has its own OCR API).

In this article we’ll create an windows application that uses the Office 2007 OCR API to generate OpenXML documents. In Addition we’ll use the Speech Recognition API to improve the application User-Experience.

Before we start it’s necessary that you already have the followinr requirements installed:

  • Visual Studio 2008
  • .NET Framework 3.5
  • OpenXML SDK 1.0
  • Office 2007

It’s necessary that you have installed the Microsoft Office Document Imaging 12.0 Type Library. The Office 2007 installation setup doens’t install this component by default, being necessary to install it later. To do this:

  • Run the Office 2007 installation setup
  • Click on the button Add or Remove Features
  • Make shure that the component is installed

Using the MODI

To use the Office 2007 OCR API, you have to add a reference to Microsoft Office Document Imaging 12.0 Type Library, to do this:

  • At Solution Explorer select Add Reference
  • At the COM tab select Microsoft Office Document Imaging 12.0 Type Library

Create a MODI object:

image

At the Form class constructor instantiate the MODI object:

image

After that you just have to implement the conversion method, let see how to do this:

image

The method OCRImplementation will convert image files (.tif, .jpg, .gif, .bmp, in this case we’re using a TIFF file). The method Create of the md object receives the path of the file to be converted. The OCR method receives three parameters, the first on represents the language of the document, the second parameter specifies whether the OCR engine attempts to determine the orientation of the page and the third parameter specifies whether the OCR engine attempts to fix small angles of misalignment from the vertical.

To retrieve the text, it’s necessary add references to the properties of the objects Image and Layout. The object Layout allow the text retrieval. The property Words of this object contains the property Count that allows the iteration through the list of words. You can retrieve the words using indexers, instead we’re adding blank spaces between the words.

The method Close of the md object takes a boolean argument indicating whether to save changes to the image file.

 

Using OpenXML SDK

In the Solution Explorer add reference to the DocumentFormat.OpenXML library. This library allows the converted text becomes a word document. There’s a constant object that will handle the structure and relationships of the document (It’ll define the markup, in this case WordprocessingML).

image

The method CreateDocument is responsible for insert the text inside the document structure.

image

Speech Recognition

image

Add a reference to System.Speech at the .NET tab. After that you just have to adjust the Volume and Rate properties and use the method Speak to speak a string.

image

Conclusion

It is an interesting idea to combine these powerful APIs, the OCR implemented code is very short if compared with third-party APIs. It is a tool that can be explored in many ways and if integrated with the benefits of OpenXML and Speech Recognition improves your applications.

You can download the code here

 

See ya.

Categories: Não categorizado

Creating OpenXML Documents with SDK 1.0

 

Hey folks,

Recently some guys asked me how to create word 2007 documents (.docx) without use Microsoft Office Word 2007. Thats a reason to do this post. It’s basically an idea about how to create word documents with a custom application, you can improve this application adding new features such as bold, italics, colors, size configurations and so on.

Well lets begin our work:

First you need the OpenXML SDK 1.0 installed, if you don’t have it you can download it here.

Let’s assume that you already have the SDK installed, so lets begin.

At Visual Studio, create an Windows Forms application and name it as CustomTextEditor.

At Solution Explorer add a refence to DocumentFormat.OpenXML namespace (It’s located at .NET tab).

Add a TextBox control on the windows forms. Set the Multiline property to True and the ScrollBars property  to Vertical.

Add a label and change the Text propety to Save Path.

At the right side of the label add a text box, and at the right side os this text box add a button. Set the button property Name to btn_Path and the Text property to ‘ … ‘

Add three more button to the form:

  • Button1 -> Name Property: btn_Save / Text Property: &Save
  • Button2 -> Name Property: btn_Clear / Text Property: &Clear
  • Button3 -> Name Property: btn_Close / Text Property: &Close

Add a saveFileDialog to the the form.

You should have something like this:

image

Two clicks at each button to generate the events.

At the code window add the following code:

image

This constant is responsible for the definition of the document body (Relationships and markup).

Now we’ll create a method that will create the document, this method receives a string as a paramenter, this string is basically the text written on the TextBox1.

First we have to do is to create an object to define the package. For this task we have the class WorprocessingDocument that’s responsible for define the package that represents a Word document.

image 

As you can see, this class have a Create method, this method receives to parameters. The first parameter is the path that your document will be saved, the second parameter is a enum that will define the type of the document (Document, MacroEnabledDocument, MacroEnabledTemplate or Template).

After this we’ll define the Main document part:

image

The property MainDocumentPart gets the ma in part of the WordprocessingDocument, The method AddMainDocumentPart will create the main document part and adds it to the document.

After this we’ll create a string that will replace the tag #OLD_TEXT#. It will insert the text from the text box in the structure (It’ll be formated within a WordprocessingML structure). To replace the text we’ll use the method Replace of the String class.

image

After this we’ll have to get the Stream of the document part, encoding it and insert the string that contains the structured text and save it.

image

The method Close is responsible for save and close the OpenXML Package.

Let’s implement the button events:

The first event that we have to implement is the btn_Path event, this event is responsible for defines the name and the path of the file.

image

Implement the btn_Save event. This event will call the method CreateDocument.

image

Implement the other two events as the following code:

image

 

 

Well guys this is all. This is a simple application but it demonstrate a little bit of the OpenXML SDK power, you can extend your custom applications using this SDK.

 

See ya

Categories: Não categorizado

Excel Services – Problems with Authentication/Authorization

 

Hey folks,

Here i am again, last few weeks i was a little bit busy, but today i’ll post the solution to an issue envolving the access to Excel Web Services. Let me first explain the scenario: Imagine that you have an application that wants to load an workbook stored in the SharePoint document library, you want to perform some tasks using Excel Web services. So, first you have to add a reference to the Excel Web Service "http://<server_name>/_vti_bin/ExcelService.asmx?wsdl", now you have to retrieve the workbook and perform some taks on it:

image

In this case i’m just retrieving the workbook and presenting the SessionId on the screen.

Ok, now we’ve reached the point:

Look to this line of code:

image

Basically this line of code is getting the Windows credentials (Your Windows User and Login) and trying to Authenticate within the Server (MOSS). If you don’t set the correct permissions it will probably fail. So you have to integrate your windows credentials with the Server AD (Active Directory), so when the program executes this line of code it’ll pass the correct credentials. The second thing is that you have to set Full Permission to this user inside the SharePoint.

To do this: At the SharePoint portal page click on Site Actions ->Site Settings -> User and Permissions -> Advanced Permissions

image

Add or create new user credentials.

image

remember to retrieve the accout that you created inside the AD, and set full permission to it.

 

I think for now it’s all, See ya friends.

Categories: Não categorizado