Vasteras - Sweden, Belgrade, Nis - Serbia

November 20, 2008

Troxo - Software Development Company

A small thing we did for our client

September 18th, 2007

This is one of the posts from the how-we-do-it series.

A while ago we had a part of a project where our client NSN ASA wanted to have:

  • Custom reporting with an advanced mail merge function (to create invoices, order lists, etc.)
  • Easy-to-create report templates, so they can be created by non-programmers
  • Simple, simple, simple
  • PHP API

Our first thought of course was to find an appropriate component and use it for this project. However, we were amazed to realize there isn’t any out-of-box solution for easy report creation from PHP. There surely are a lot of ready solutions like CrystalReports, Birt, Jasper reports with iReport, but we felt none of them met the above requirements (especially simplicity).

So, here is our approach to solving this problem:

  • Report data should be sent via a standardized XML. There will be no more than hands full types of XML tags in the report data.
  • Report template will be created with MS Word (after all, anyone can use it, right?)
  • Template will have the simplest possible tagging system, implemented as MS WORD fields. (Example: <<tablestart>><<data1>><<data2>><<data3>><<tableend>>
  • There are no good Unix components for handling Word files – therefore we will implement this on windows platform and expose SOAP interface for accessing it from PHP.

Now that this is up and running here is the small illustration of our “baby” in action:

 

We would like to thank NSN ASA for giving us the green light to share this with you.

 

We are hiring!

August 31st, 2007
Tags:, , ,

We are staffing up for 2008 after a raft of new deals in 2007. It’s been one of those periods where there’s been a lot of work in progress and we’re looking forward to getting new team members on board skilled in PHP and .NET.

We’ve just welcomed two more PHP developers, yet we have no doubt there are even more exceptional individuals willing to join us.

We are particularly keen to hear from .NET developers as we’re always working on interesting, highly interactive applications. Feel free to send us your resume at job at troxo.com.

 

On .NET Remoting

August 13th, 2007

Recently we had a .NET based project where we had to enable simple client to server communication. We needed a fast solution, totally embedded into applications (meaning - no IIS web services were allowed, unfortunately).

Basically, the challenge was: the main application has to provide remote access to its dynamically created objects, like in the image bellow:

Remoting Project Challenge

We found some really good articles on the net like Remoting in C# and Remoting and Distributed Computing in C#, but none explaining everything we needed - so after some digging into the MSDN, here is the solution.

"Single call" remoting creates a new remoting object for every call by the client. "Singleton" reuses the same object for every client’s call.

"Single call" remoting was not fitting our problem because we needed just one proxy object which will forward calls to internal objects.

In our project there was a small catch with the use of "Singleton". Basically, if you do not create an object before the first call from the client, the object will be created automatically (with the first client’s call), leaving it unbound to our server objects (in the image above that would mean that "remoting facade" does not have references to internal objects - Object 1, Object 2, etc.).

The solution is to create a remoting object, initialize it with references to local objects and use RemotingServices.Marshal method to bind the remoting object instance with the remoting service (like in the following example from the attached project):

Logics.Counter counter = new Logics.Counter();
Logics.RemoteCounter remotingCounter = new Logics.RemoteCounter();
//initialize remoting object with the reference to local object
remotingCounter.SetLocalCounter(counter);
//select channel to communicate
TcpChannel channel = new TcpChannel(8085);
ChannelServices.RegisterChannel(channel, false); //register channel
//register remoting service
RemotingConfiguration.RegisterWellKnownServiceType(typeof(Logics.RemoteCounter), “RemoteCounter”, WellKnownObjectMode.Singleton);
//bind remoting object with remoting service
RemotingServices.Marshal(remotingCounter, “RemoteCounter”);

The complete sample: troxosamplesremoting.zip

 

A Smurfette on the team

June 25th, 2007
Tags:, , ,

We welcomed one more developer to the team. This time a fresh out of the Faculty of Computer Science with loads of talent and the first female in our dev to help us work on a variety of projects.

Last week, another developer also joined our team. He’s an old hand at programming, with experience of .NET development and we’re stoked to have the once best student in class working with us.

We’ve got one more joining soon and will keep you updated on this one.

Before we retreat, in a week or so we’ll have some interesting news for you. We can’t really tell at this stage. It’s all a big secret now but we know you’re going to love it.

 

We need developers to join our team

June 11th, 2007
Tags:, , ,

We are quite busy. Things are hectic here at Troxo but exciting too.

We are on the lookout for developers to work with us full-time in central Serbia. You know your way around PHP and .NET and can’t wait to get a running start?

Get in touch with us and show us some recent work you’ve done. We look forward to getting you onboard.

If you’re willing to relocate, have a look at where our development office is:

Serbia, 18000 Nis, Dusanov bazar 106:

googlemapsnisserbia20060611.png