Profile

Click to view full profile
Hi, I'm Veerapat Sriarunrungrueang, an expert in technology field, especially full stack web development and performance testing.This is my coding diary. I usually develop and keep code snippets or some tricks, and update to this diary when I have time. Nowadays, I've been giving counsel to many well-known firms in Thailand.
view more...

Monday, February 14, 2022

Sunday, January 13, 2019

My to-read for Microservice


For me, the term Microservice in conceptual level is not new. I think it not much different from SOA. The different is just about how the term define how deep to decoupling/separate in programming level. Recently, with many development teams working on different features. Without causing and impact when changes, they have to be separate to each other which is not new. But now with the technogy improved, and tools are much more powerful. they help a lot to develop with Microservice architecture from start to finish a feature without worry in impact to other features.

Recently, I started to read and research more in details because of facing this problems. There are many sub features/modules in 1 product. Each have to work with different teams. In order to reduce an impact when deploy. I started to think about Microservice.

Concepts:

Before, I was thinking how they dealing with transactions because in monolithic software, it is usually connect to 1 or few data systems. So, they need to work around to cover and make it work by creating a rollback request.

Moreover, with many Microservices, I started to think about how they can working together. Because if many services working together and we have 1 service to Orchestrate them. I think this part will be tightly couple as same as monolithic software did. The link below is not solve the issues. It just talking about how many services can connect in easiest way, less impact and effort by using Kubernetes.

Programming:

Wednesday, May 2, 2018

Convert Microsoft Word (Thai language) to PDF without format or layout changed

There are many libraries out there to convert text into PDF or docx into PDF file. However, recently, I found the problem in Thai language which they usually use "Justify" alignment for their document. But for most of the libraries I found even paid the money one, they have problem in word segmentation. It will result in they can not do Justify alignment properly which very look like to align on the left.

In order to resolve this issue, I had tried to search many possible way to do it which are:
  • Use Microsoft Office Interop
  • Use Word Automation Services in SharePoint 2013
For the first solution, it is quite to easy to implement it. For example, follow the link below:

However, to use Interop, it won't work well on Server-Client architecture e.g. Web Server. It will similar to open Microsoft Word window for each request, which consume a lot of memory as described here: 

The first solution, I tried to implement it once on Web Server but fail due to it has an unknown formatting problem during convert on Web Server (this issue was not found when I try it as Console Application). The PDF file spacing was different from the master docx file for unknown reason.

Later on I found that if we have SharePoint 2013. We can use Word Automation Services which is available from SharePoint 2010 (but as job conversion). To do on demand conversion, it is available on SharePoint 2013. It is very suitable in Web Server solution, and found no issue during convert Thai docx into PDF file.

By the way, in order to run Word Automation Services. It is very important that the machine that run this service must not be the same machine that installed Active Directory, it will result in service does not work (sorry, I can't remember the error message, but it will stuck for awhile before throwing an error). It can be converted from many formats e.g. stream, file location, and byte array.

To use Word Automation Services in C#:
Below is the example cut from the reference link above as snippet. Replace "WORD_AUTOMATION_SERVICE" with your registered service name.
using (MemoryStream destinationStream = new MemoryStream())
{
     //Call the syncConverter class, passing in the name of the Word Automation Service for your Farm.
     SyncConverter sc = new SyncConverter(WORD_AUTOMATION_SERVICE);
     //Pass in your User Token or credentials under which this conversion job is executed.
     sc.UserToken = SPContext.Current.Site.UserToken;
     sc.Settings.UpdateFields = true;
 
     //Save format
     sc.Settings.OutputFormat = SaveFormat.PDF; 
 
     //Convert to PDF by opening the file stream, and then converting to the destination memory stream.
     ConversionItemInfo info = sc.Convert(li.File.OpenBinaryStream(), destinationStream);
 
     var filename = Path.GetFileNameWithoutExtension(li.File.Name) + ".pdf";
     if (info.Succeeded)
     {
          //File conversion successful, then add the memory stream to the SharePoint list.
          SPFile newfile = library.RootFolder.Files.Add(filename, destinationStream, true);
     }
     else if (info.Failed)
     {
          throw new Exception(info.ErrorMessage);
     }
}
In the end, I would like to share my research for this issue because it used quite some time before I found the solution. Hope it can help ^^.

Wednesday, March 28, 2018

ICT Hakathon 2018

Hi, it is such a long time that I didn't update the blog. I have been very busy lately due to my jobs and it caused many of my snippets/topics still kept in my OneNote.

Last week, I had a chance to be able to be a committee in ICT Hackathon 2018 hosting by Mahidol University. The event was held during 24-25 Mar 2018. It is an joint event which sponsored by Atos (my current place), and Innotech. It was very good chance to see what is the current state of academic, and very proud to know that it is still in good shape. Maybe, it is even better than during my studied time here.

For this Hackathon event, it was asked to create a platform to solve specific business issues. In this time, I had been a secondary judge to help verifying their works and provide technical score (one of the judges from my company is not from technical area). So, it was a good experience for me to a judge for a first time (first row seat LOL). It is also good opportunities to let me learn new things from students, because most of time when I doing my work, technology being used in the project is locked. So, sometimes this limit my experience for try implementing new technology into real project.

At the end, it was fun and feel like to be a student again. If I have more chance to participate this kind of event, I hope I am be able to do it again :D.


Links:
Main web site
Organizing Committees
Judges

Thursday, August 17, 2017

"This feature has been disabled by your administrator" error in Office 2013

"This feature has been disabled by your administrator" error in Office product is really annoying due to maybe from company policy or something else. Some people, like me, use OneNote a lot to keep important stuffs for work but it was blocked!! To trying to solve this problem follow the steps in the following link:
https://support.microsoft.com/en-us/help/3039000/-this-feature-has-been-disabled-by-your-administrator-error-in-office

The newer version of Microsoft Office may be fixed by follow the steps in this link.

Friday, September 9, 2016

Useful CMD tips

SSRS - By pass specific user to Reporting Server

When we browse to Reporting Server, it usually ask a username and password to access. However, sometime we want to avoid that by using specific account (treat like webapp that know db password). To do that we have to implement a custom web application that host a web page which can load ReportViewer. Then that page have to specifically implement parameter specification before by pass its parameters to ReportViewer control. The steps are shown below:

By pass anonymous access for reports using custom web app as a proxy
  1. Create ReportViewer in custom web app

Create self WCF Windows Service

SSIS - Parameter things

In SQL Server Integration Services, sometime we have to use the values that can be varied on circumstances e.g. parameter. For my frequent cases, there are 2 cases listed below:
  1. SSIS Variables Object - read from DB
These links explain how to load parameter which values are from database, and how to use parater into SQL query task.