Made in USA: Enterprise Application Services

.NET Archives • Ayoka - Made in USA Enterprise Application Services

.net core – open source implications

April 9, 2015

Microsoft recently released .NET Core as open source in an effort to encourage sharing of documentation, libraries, and bug fixes, which Microsoft’s CTO of the Azure cloud platform, Mark Russinovich endorses since it, “is an enabling technology that really can get people started on other Microsoft solutions.” Since then, Microsoft has expressed plans to release a fully-operational Windows 10 ROM for Android smartphone users to upload and enjoy, and just last week, Russinovich speculated on whether or not an open source Windows Operating System was a possibility!

Possibility of Windows Open Source and Software Development ImpactWith an increasingly unique array of enterprise and consumer needs, custom software has taken precedence over out-of-the-box solutions since they just don’t address individual needs while maintaining scalability without a big price tag. New technologies offer the promise of improved productivity and increased competitiveness-but also present logistical challenges. In the interim, it will likely not meet your enterprise goals. If Windows OS were open source, we could tailor the native Windows environment for desktop or mobile to meet your unique needs-and essentially become a part of the Windows team by enhancing their existing features while fixing bugs, maintaining security, and adding new functionalities that are in demand.

As an experienced .NET software development company, Ayoka focuses on earning the highest level of customer satisfaction for business initiatives involving .NET Software Development and .NET consulting services for a wide range of web, enterprise, and mobile software applications. We provide a full complement of consulting, design, build and management services to help your company achieve modernization and our University relations keep us on the cutting edge of evolving technologies. Ayoka’s holistic design-build-manage approach ensures that your critical business applications are fully integrated, aligned with current market demands and poised to handle future changes seamlessly, cost-effectively and across your entire enterprise. Together we can perform application integration services to and from your legacy systems, .NET to PLC (Programmable Logic Control) device integration, fix or upgrade existing applications, or add mobility to your web application with .NET’s popularized motto “write once, run anywhere.”

Ayoka is a .net software development company, located here in Texas, and we keep track of this sort of news, so please give us a call at 817-210-4042if we can answer any questions!

.NET Core is Open Source!

December 9, 2014

At Microsoft’s Connect(); event last month, their theme was centric to a cloud-first, mobile-first, and developer-first movement. They announced the .NET Core will be open source with the ability to build for and support all development platforms.

.NET has created a set of verticals that include a runtime, framework, and an application model all together. .NET Core explains the commonality of applications that span multiple devices and platforms. Before portable class libraries there was no sharing of code or projects but .NET Core’s use of contract assemblies, designed for proper factoring, to model API sets across verticals will help developers choose what contracts they want to support. Although the development environment is currently running on Windows, it will soon be available on other platforms.

You can think of portable class libraries as an experience that unifies the different .NET verticals based on their API shape. This addressed the most pressing need, which is the ability to create libraries that run on different .NET verticals. It also served as a design tool to drive convergence between verticals, for instance, between Windows 8.1 and Windows Phone 8.1. Unifying separate, well-factored, implementations of the .NET platform allows verticals to share the same implementation.

Since .NET Core will be on GitHub, code reviews and discussions will be open and encouraging sharing of documentation, libraries, and bug fixes! Open sourcing of the runtime will be coming soon!

Real Time Web with SignalR and Comet

April 17, 2014

SignalR provides API for building real time web functionality in the ASP.NET applications. Real Time web functionality is the ability to have server side code push content to the connected clients as it happens in real time.

The most common examples of real time web applications are Facebook’s news feed and Twitter, or features like chat and search, where the user gets the notification in the browser’s document window as the event happens in the form of a message, alert, update, or link to an article with decreased server load time.

signalr, websocket

To do this, SignalR must take advantage of HTML5s API that includes WebSocket, which takes an advantage of several packet transports by automatically selecting the best available transport given the client and server’s best available transport. When the technology isn’t available, it will gracefully fall back to other techniques, making sure the application code remains the same. SignalR will use HTML5 to transport WebSockets, utilizing its bi-directional communication line between the client and the server with server-to-client RPC (Remote Procedure Call). The RPC allows an inter-process communication line to be opened and lets the code call a subroutine to be executed from a different client remotely without the developer having to execute the subroutine from a specific location or compromise load time. Unfortunately for the outdated client, WebSocket is only available in later versions of Internet Explorer, Google Chrome, and Firefox, with partial implementation ability on Safari and Opera. SignalR provides this RPC that call the JavaScript functions from .NET code on the client side. It also provides an API for connection management for grouping connections or connect and disconnect events. It starts out first as an HTTP, and is then promoted to a WebSocket if the bandwidth is available. WebSocket is the best use of (the small amount of) memory that will be allocated.

In comparison, the Comet web application model will support an HTTP request that is held open for a long period of time during which time the server can send data to the client without the client knowing it may need to request it. For Internet Explorer, the Forever Frame, which creates a hidden iFrame that opens a connection that acts as a one-way connection from the server to the client. To get back the other way, from client back to server, a standard HTML request is posted and a new connection must be created per data packet to be sent. For other browsers, Ajax is implemented to poll the server with a request that stays open until the server responds and closes the connection, instantiating a request to open another connection.

Monitoring how your packets are transported can positively or negatively impact your code reception by users accessing and using your real-time web environments through browsers. The most successful real-time web environments were able to adeptly anticipate and implement their users’ propensities and seamlessly integrate those practices to create a true real-time web environment that can be accessed from anywhere with any device.

.NET vs PHP – Is Pop Culture On Board?

November 19, 2013

We already know the popularity of the .Net framework in the enterprise application space, but does .Net have any cache in the world of pop culture?

I decided to do a quick study to see if the .Net framework was penetrating our favorite media outlets like Miley Cyrus, Bethenny, Wendy Williams, Fox News, NPR, NBC etc. And yes, Miley Cyrus has become her own media outlet! Let’s be clear, I may be the Development Diva, but I like my pop culture and I love the gossip! BTW, I hear plenty of internal gossip about MVC, .Net, Java, etc., what a bug kill! For this very scientific endeavor, I started with my BFF Stack Overflow. This is where I found the lovely tool Builtwith. This is an awesome Website dedicated to detecting specific frameworks, email services, analytics, tracking tools, and literally a host (Amazon) of other information – Check it out!

Back to my crude research project. Some of this I had to guess at because all of the information was not provided, so bare with me. If you see a question mark, know that I might be talking out of my a**. Feel free to chime in because these URLs are giving me NOTHING!!!! Some of these folks must be hiding something because I got a lot of NOTHING in the weirdest places. Others, I know from reading articles in these same publications…so, let’s do this!

I decided to look at the server, framework, hosting, and name server. Why you might ask? So I can give you guys clues to help me uncover the mystery, duh!! So here is what I came up with:

Server Framework(s) Hosting Name server
ABC Apache, Varnish NOTHING Amazon? NOTHING
Bethenny Apache PHP and Flash Amazon GoDaddy
Bloomberg Apache, Sun ONE, Sun Java .Net NOTHING Verisign, UltraDNS neustar
Builwith Amazon Route 53 PHP and .Net Amazon? Amazon
Cspan IIS and IIS7 .Net and Flash NOTHING NOTHING
Fox News Apache NOTHING nLayer, NTT America, Akamai Akamai DNS
Amazon Symantec PHP Self 😉 UltraDNS neustar, Dyn DNS
Huffington Post Apache NOTHING NOTHING AOL DNS and UltraDNS
Miley Cyrus Ruby on Rails, PHP CenturyLink UltraDNS neustar, GE DNS
NBC Varnish Java Amazon? GoDaddy
NPR Apache PHP and .Net NOTHING Savvis DNS
TechCrunch nginx PHP and Shockwave Flash Embeded WordPress, ServerBeach, Layered Tech WordPress DNS

As expected the clear winner is PHP, however there were some surprises. .Net is clearly getting some traction in the pop culture world! Flash is not the hotty it used to be and I was happy to see at least one Ruby on Rails site. I expected Amazon to dominate the hosting market and also was surprised that GoDaddy with all those commercials was not a strong contender. Overall looks like most of the newbies and the good ole boys are using Apache servers, aaaahhhh peace has been restored! So help me with the NOTHINGs and correct my mistakes. Remember all scientific endeavors need testing!!!

CSV Integration into .Net Application

October 3, 2013

My brother and I had a sure fire way of getting out of things as children.

Whenever our dad would assigned us a task, we would simply do it the “wrong way”. He would take over and we could continue playing HeMan or Inspector Gadget or whatever game we wanted to play instead of mowing the lawn.

As I’ve gotten older, I realized that there was a reason my father wanted us to do things his way. It got the work done in a timely manner. If we had just stopped screwing around, we could’ve helped out our dad and still had time to reenact awesome 80s/90s cartoons.

CSV Integration...or watch Darkwing Duck?
Now, whenever I’m given a task to complete, I realize that there is already someone, somewhere who has come across a similar problem and created an eloquent solution that I can adapt to my situation.

I was recently given the task of taking a client’s CSV (comma separated value) file and importing it into a database through a .NET application. I had done this before and knew that I could do it based on the index of the column (i.e. column 1 matched up with the property Name).

But this seemed really inefficient to me, what happened if the columns changed, or the order was rearranged… the whole method would have to be rewritten and retested.

So, I set out in an effort to find a way to import a CSV file with column recognition.

And there I found CsvHelper. This is a C# library from developer Josh Close on github that allows a simple way for you to take a CSV file, read it and map it to column headings to import it into a pre-defined class in your project and subsequently your database.

It’s not perfect (nothing in programming ever is).

If a column doesn’t exist or if the column header is capitalized in an odd way, or not at all, the mapping won’t work.

But for the most part it is a unique and innovative tool. And reduced my time spent from a full day (including documentation so future developers could tell what column mapped to what property) to a couple of hours.

Now, I have time to watch Care Bears and Darkwing Duck with my kids instead of working late into the night.

Speech Synthesizer Class for .NET Framework 4.5

September 17, 2013

One of the coolest parts about any futuristic movies is always the computers that the writers and producers come up with.

They have cool things like touch screens and 3D displays and interactive voices that will talk to you… Wait… wait just a second… we have all that. We have all that right now with our smart phones, we are living in a time that was created through science fiction.
.net speech synthesizer - from MSDN
One of my favorite ideas was a computer that you could talk to and it would talk back, it fascinated me. When Siri came out for the iPhone, I knew we were one step closer to Majel Barrett (the actress who played most of the computer voices in Star Trek).

But the fact is that programmers have had this kind of capability for many years.

In the .NET framework there is a feature called Speech Synthesizer.

Options are limited but you can select any of three (David, Hazel or Zira) default voices and have it read off strings of text to your user for basic instructions. There are a bevy of web sites that will allow you to install new voices and even ways to create your own, which is a time and labor intensive option, but possible.

Right now, these types of applications are used mostly for visually impaired users to help them get the same use out of applications. And recently they are used more and more for things like GPS navigation and in cars to try and help drivers prevent texting while behind the wheel.

Microsoft hasn’t advanced the Speech Synthesizer much in the last three release versions of .NET but the potential is there.

Think about it: A fully automated, voice activated home.

Need to wake up in the morning? Easy, set an alarm and let your speakers wake you up in the morning with a friendly message. Dark in the house? Easy, simply say the phrase “Computer, lights”. A quick question about the current population of a city, a state, the country… all within voice range, anywhere in your house.

Of course, this is probably still years if not decades away from being a viable large scale idea. A fully integrated computer into a home will take years of programming and testing (no one wants their home CPU to fail and not be able to turn on a light or the A/C), but it’s coming.

Top Differences in Code Behind and Reporting Services RDL

September 10, 2013

Ok, so I’ll try to keep this brief. For one our long-term projects (read: older!), we are using ASP.NET v3.5 WebForms, which is a precursor to the MVC design model of building applications. Currently in our .NET applications we are using MVC v.4 with Entity Framework v.5. So, in our project, each webpage is written and saved as an aspx file. In the aspx you will have all your traditional html elements – JavaScript, jQuery and CSS declarations. With each aspx file you have a tightly coupled aspx.cs file. This is known as the code behind file. The code behind acts, if you will, as the page’s personal controller file. In MVC you will have one controller file that will handle all the interactions for a complete directory, whereas mentioned above the code behind handles all the interactions of the individual page that it is associated with. Through the code behind we can access the service / data layer. This allows us to call stored procedures using table adapters that are data sets which represent the database tables. These table adapters also store information about the stored procedures and defines which variables are passed into the SQL stored procedure and how the tabular data returned from the procedure is to be received. Once the data is passed back to us, we can utilize the C# .NET coding libraries to further manipulate the incoming data, format it and perform calculations as needed.

For our manufacturing plants, we have a plant performance summary report, which is one of eight reports that are run directly from the MS SQL reporting services. The Report Viewer being used is v.9 and is specific to SQL Server 2005. It is in a separate project within the overall project. A set of global (corporate) reports run from RDL files. These files are nothing more than a definition of how the output should be shown on the page (or the report itself). The Reporting Viewer takes in, if applicable, input values that are sent to the SQL Stored Procedure that gathers the requested data and returns it to the RDL file for final output. There is no further manipulation done to the data, save for formatting issues like date formatting, two / three decimal points and the like.

ASP.NET v3.5 WebForms versus MVC

So for our plant performance report, we want certain utilization and equipment availability calculations. In all previous occurrences that we perform these calculations we have the luxury to retrieve data from the database and perform loops and other various tricks to get the correct ordering of equipment statuses and durations to perform the calculations needed. Since there is no code behind being utilized we have to create a way to perform those same types of tricks to output the correct data within the Stored Procedure by using temporary tables and SQL custom functions.

In either process (stored procedure or aspx code behind), this is a cumbersome proposition, but handling it in a .NET C# environment is a lot easier than in a stored procedure environment.

Interoperability Made Easier

August 18, 2009

Interoperability is becoming a quality of greater importance for software or IT products in today’s market. Interoperability is the ability of systems or products to exchange services so as to operate effectively together. There are many scenarios that could require an application written in specific language to call a module or component developed in another language. Irrespective of the scenario, you need to solve the problem of interoperability.

In this blog I would like to introduce you developers to few tools that exist in the market which would help you achieve your goal, which is solving the interoperability issue. Interoperability can be achieved in two ways:

  • Web Services
  • Bridging

You might have heard a lot about web service and terms like remote procedure call (RPC), Simple Object Access Protocol (SOAP), Web Service Definition Language (WSDL) etc. I am not going to go over that here today but rather the second one which is bridging.

.NET/Java Interoperability

JNBridge is a Java and .NET interoperability tool that allows you to access your entire object-oriented API from the other side, in the same process or across a network. JNBridge creates Interoperability Bridge by generating a set of proxies that expose the classes API. When deployed the .NET classes communicate with the Java classes via the generated proxy classes or vice-versa. The .NET code runs on a .NET CLR and Java code runs on any conformant JVM. JNBridge offers a quick solution to Java/.NET divide and good integration with Visual Studio environment.

Adobe Air/Java Interoperability

Merapi, a messaging bridge, is a Adobe Air and Java interoperability tool that enables Adobe Air applications to communicate with other Java applications that the user has installed on their computer by passing objects between the applications. Developers can write Java application for their Air applications using a light weight and straightforward API. Java programs treat Merapi as a bridge to run AIR applications and vice-versa.
Another interesting tool that provides a developer with a toolkit of commands to extend system capabilities of your AIR application is Shu. By wrapping your AIR application, Shu player solves some of the problems faced by AIR applications such as opening files in native applications, executing other applications. As of now they support only Windows and MAC systems.

Java/COM Interoperability

ComfyJ is Java-COM interoperability tool which allows developers to integrate their Java applications with COM/OLE/ActiveX libraries. ComfyJ is a communication bridge between Java and COM, based on JNIWrapper technology, enabling bidirectional communication between the Java platform and COM technologies. It allows the Java objects to be implemented as COM objects. ComfyJ allows registering of created Java COM servers that can then be used by other COM applications.

Debug and Trace in C#

August 4, 2009

.NET offers some very useful classes that allow you to monitor the workings of your program without having to constantly pop up message boxes or handle file output yourself.  Both of these classes have listener objects (the list is shared; adding a listener to Trace also adds it to Debug) which can be text files or streams you assign.

By default, the Debug class is not compiled in release mode, while the – Trace class is functional in both modes.

Some of the more useful functions and properties in these classes are described below.  These are rough descriptions and more details are available on the MSDN (links are provided).

Function Description Assert Checks for a condition. If the condition fails, it presents a message box. Flush Flushes the output buffer for the class and for all listeners. Indent Indents the output by one unit. Affects all following messages. – Unindent Removes one unit from the output. Affects all following messages. Write – WriteLine
Writes to the output panel in Visual Studio and to the trace listener objects. WriteIf – WriteLineIf
Writes only if the condition is met.


Property Description – AutoFlush Whether Flush() should be called on the listeners after every write. – IndentLevel The number of indent units currently in place. – IndentSize The number of spaces used per indent unit. Listeners The list of – TraceListener assigned to Debug and Trace.


Trace and Debug can be very powerful development tools that can help kill hard to find bugs by making them glaringly obvious. The Write and Assert functions can provide great detail as to what is happening inside your program. Your client is not running a debugger for you, but it’s easy for them to email you the error.txt file that is in thier program directory.

Write and the conditional Write function can be very useful for outputting exceptions, even the ones you are able to recover from.  It helps to find bugs that may not show up right away. Doing little things like making sure nothing added to a list is null can go a long way towards tracking down hard to find errors.

The Assert function is more useful during development than during release. Using Debug.Assert() instead of Trace.Assert() makes it easy to leave your assertions in during development, but make sure the users never have trouble with them. When something should never happen, toss an assert there to make sure. It’s amazing how often your software will try to divide by zero or convert null to a string.

Continuous Integration with Hudson Continuous Integration Engine

June 9, 2009

So recently I’ve embarked on a mission to find an easy to use, well developed, feature laden, and extensible Continuous Integration server. Of course, one of the first Continuous Integration servers that popped into my mind was ThoughtWorks’ Cruise Control.

I started test driving the .NET version, CruiseControl.NET (CCNet). I was really impressed by all its features, so I took a shot at the original Cruise Control built for Java. Surprisingly, this version was not as easy to use or as powerful as CCNet.

Don’t get me wrong. The Java version has a lot more built-in support for different software configuration management systems (SCMs), publishers, etc. But it does not do the things I wanted it to do, things that CCNet did do. For example, if there were changes detected in the repository, I had to manually add a separate task to update the working copy. Also, there was no tagging option on successful builds or advanced schedule timing.

So it was time for me to turn to an alternative choice for Java … and I started looking at Hudson, an extensible continuous integration engine. Boy, did I hit a gold mine!

First of all, deploying and running Hudson could not be easier. You simply need to deploy a war file to a servlet container. I popped it in Tomcat and I was up and running. No databases, no nothing! Naturally, the web configuration interface is much easier to use than setting up the tedious Cruise Control xml file:

Hudson Continuous Integration server

The smooth interface is a bonus as it makes it really easy to monitor projects. Although I did like Cruise Control’s build reports a little better, the ones available with Hudson are not too shabby.

But here is the best part. Look at all the default plugins available:

Hudson Continuous Integration engine for Java

The list goes on and on as you can probably tell from the scroll bar. Not only are these plugins easy to install (check-click-restart) and provide great add-on features, custom plugins are also very easy to develop.

I have yet to try using Hudson with .NET projects. Judging by how well it is going so far, I am tempted to port the .NET projects over from CCNet in order to maintain one Continuous Integration environment.