<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-33014026</id><updated>2011-04-22T10:19:07.786+07:00</updated><title type='text'>Programmer's Log</title><subtitle type='html'>... a day at work ...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-33014026.post-1930626520817508925</id><published>2006-12-01T20:22:00.000+07:00</published><updated>2006-12-01T20:23:04.677+07:00</updated><title type='text'></title><content type='html'>&lt;div style="font-family: Tahoma; font-size: 9pt;"&gt;&lt;br /&gt;&lt;div class="firstletter"&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33014026-1930626520817508925?l=yuksickening.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/1930626520817508925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33014026&amp;postID=1930626520817508925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/1930626520817508925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/1930626520817508925'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/2006/12/blog-post.html' title=''/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33014026.post-116170695643101465</id><published>2006-10-24T23:18:00.000+07:00</published><updated>2006-10-26T22:41:27.756+07:00</updated><title type='text'></title><content type='html'>&lt;div style="font-family: Tahoma; font-size: 9pt"&gt;&lt;br /&gt;&lt;div class="firstletter"&gt;It has been 14 days since I last updated my blogs. Time sure flies. My schedule was filling with huge amount works and lots of problems on the performance sides of the system. I stopped implementing new requests, passed my tasks to my juniors, and concentrated more on improving the performance of our previous implementation.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;We launched 3 sites of our .NET system. For the first week, everything went fine except for the odds information display trouble. The second week of launching, we started running into problems. Everything also started with the odds information display. Our odds cache wasn't stable. In order to relieve the load to the web server and the system  itself we implemented a middle layer with .NET Web Services to obtain the odds information. We implemented it in the way that there was a infinite polling mechanism to get the information from the database and kept that information always fresh in the cache of the Web Services. For our problems, our polling mechanism always stopped unexpectedly. Before launching the new 3 sites, I worked around this problem by stopping the IIS to recycle its worker process on IIS schedule. This idea worked fine when we had less sites and the more sites we had problem started showing.   The complains that we got from the customer more and more as my 3 sites stayed in the production. I listed down 3 things, I had to solve immediately.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Odds Cache -&gt; use .NET Cache Object because it has the automatically expiration parameters for each objects stored in there.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Improve the display speed of odds information.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Check up our server. It starts to respond really slow on some requests&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;I tried to improve the odds display first. The solution for this was so much easier than I thought, I just changed the way of calling a function which is used to create our betting slip. Something could surprise people that it had an impact on the rendering engine of Internet Explorer 6. &lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: white; border: solid 1px #555555;margin: auto;padding: 5px;"&gt;&amp;#60;span onclick="parent.frameA.buildSlip()"&amp;#62;0.98&amp;#60;/span&amp;#62;&lt;/div&gt;&lt;br /&gt;to&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: white; border: solid 1px #555555;margin: auto;padding: 5px;"&gt;&amp;#60;span onclick="a();"&amp;#62;0.98&amp;#60;/span&amp;#62;&lt;br&gt;&amp;#60;script type="text/javascript"&amp;#62;&lt;br&gt;function a() { parent.frameA.buildSlip();}&lt;br&gt;&amp;#60;/script&amp;#62;&lt;/div&gt;&lt;br /&gt; &lt;br /&gt;It was not just out of no where I made this changes. I went to read some articles about IE having some memory leak issues in its javascript engine. And the part of circular references of register &lt;i&gt;onclick&lt;/i&gt; event caught my attention. &lt;br /&gt;&lt;br /&gt;I changed the odds cache to the new way using the Cache Object, and did more tunning on our display scripts for my last chance before the management's orders to switch 2 of our sites back to the good old ASP version. My tests showed positive results, deployed new changes to the production was the last thing I did before leaving the office.&lt;br /&gt;&lt;br /&gt;On our critical night, our web server drive was filled up with logs files from IIS. I forgot to turn off the logs file. Next morning, my email was full of complains from the operators. :( They should've called me ... As promised with the management, we switched back 2 sites to our old versions.&lt;br /&gt;&lt;br /&gt;... and to be continued ... &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33014026-116170695643101465?l=yuksickening.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/116170695643101465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33014026&amp;postID=116170695643101465' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/116170695643101465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/116170695643101465'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/2006/10/it-has-been-14-days-since-i-last.html' title=''/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33014026.post-116045641518262193</id><published>2006-10-10T11:59:00.000+07:00</published><updated>2006-10-10T12:38:07.510+07:00</updated><title type='text'></title><content type='html'>&lt;div style="font-family: Tahoma; font-size: 9pt"&gt;&lt;br /&gt;&lt;div class="firstletter"&gt;Another week started with a lots of goals to achieve. Our first iteration of the new implementation of our Admin 1 system will conclude at the end of this week. My part hasn't done yet. I'm behind my own schedule.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Last week, our external consultant brought in a specialist who was from Taiwan to help us on improving our system. The specialist was introduced as Microsoft Product expert. However, the first impression we had for him was totally opposite. He introduced COM+ to us, a technology which Microsoft is replacing with .NET. The whole week, we spent our time in those COM+ meetings. The really good thing he tried to implement for us a COM+ server to try instead of telling us to implement what we didn't want to do. &lt;br /&gt;&lt;br /&gt;We tried the COM+ servers over the weekend. Coincidently, the last weekend all the major leagues were off for the EURO 2008 qualification rounds. The load of the system won't be so high. My supervisor took one of our largest sites to test how the COM+ performed. The site was slower than one without COM+. It was obvious that things's slow down because now a request from a web server had to go through COM+ server to get the objects and after than came back to the COM+ server to execute the request. COM+ server introduced an intermediate step to connect to the database. Personally, I think this is one of the reasons for Microsoft to drop the COM and COM+ technology by .NET. ADO.NET layers provides the same thing what the COM+ does in term of reducing the number of connections from the web servers to the database servers with a pool of SQL connections. I also think our specialist knows this, and I hope that too.&lt;br /&gt;&lt;br /&gt;Advanced Betting System from London came to our company in the middle of the week to introduce their betting software for bookies. First time, we got to attend these demo like this. It was a really well-organized system, and using service oriented software platform. They didn't use XML as the data transportation, but another Servlet thin layer instead to reduce the amount of data to transfer over the network. This is exactly what we want our software to be like in the future. My colleague was talking about this couple months ago and we are trying to design our Admin 1 system in the way that later on we could switch our system into services oriented software platform in the easiest way. My colleague is really good at visioning and look for the future development of our software. His Master degree in Computing Science shows its true values.&lt;br /&gt;&lt;br /&gt;Saturday night was really peaceful for us. The load to the database wasn't high. There were no major problems except some little bugs on the interface of our .NET member sites. We had launched 3 more small sites and the .NET system is increasing its portion in our system. &lt;br /&gt;&lt;br /&gt;... Sunday, our off day ... &lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33014026-116045641518262193?l=yuksickening.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/116045641518262193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33014026&amp;postID=116045641518262193' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/116045641518262193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/116045641518262193'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/2006/10/another-week-started-with-lots-of.html' title=''/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33014026.post-115972496602509507</id><published>2006-10-01T23:54:00.000+07:00</published><updated>2006-10-02T00:53:41.196+07:00</updated><title type='text'></title><content type='html'>&lt;div style="font-family: Tahoma; font-size: 9pt"&gt;&lt;br /&gt;&lt;div class="firstletter"&gt;Being too confident has become a bad characteristic for us. Our headaches - our DB performance problems - came back. Our database was jammed again this Saturday. &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Last week, we worked hard to get most the load of main database out to replication. Going to this Saturday, we were pretty confident that there would be a smooth night. 9PM peak time came with more than 40 live matches ranged from all the soccer leagues around the world. As usual, all the performance graphs and SQL Server profilers were turned on. This time I have learnt how to set up a profiler for myself. I also need to monitor the Admin 2, yesterday I continued to move out some pages to access the replication instead of the main Database. Everything was running smoothly. The main DB CPU usage was only around 10%. We started to relax a little. &lt;br /&gt;&lt;br /&gt;There were some couple problems with our ASP sites. My supervisor changed the way we stored our odds change time. His display odds javascript didn't run correctly anymore. Problems were soon gone away, since he is my supervisor ... hehe i'm good he must be better ... jeese starting to be cocky ... (I should look at my first sentence again *winks*)&lt;br /&gt;&lt;br /&gt;Since all the servers were running nicely. I went to fix bugs in our .NET member sites and ready for the launch of 9 more sites in the futures. All the sites must pass the acceptance tests. We failed 3 times already; however, the errors were not from our codes, it was just that we didn't have the correct data and enough data for the testing. The data we copied from the data warehouse into our development environment wasn't enough. I decided to deploy the rest of 9 sites into real production environment for a final testing. &lt;br /&gt;&lt;br /&gt;11PM, the peak time almost passed and the load became less. Everything was running smoothly. My colleague left work. I still had some deployment on the way, and I decided to stay a little late. At the time I looked at the performance graph for my usual check. Something unexpected happened. The performance graph showed unusual behaviours. Database was jammed again. I looked over to my supervisor, and we started  receiving complains.&lt;br /&gt;&lt;br /&gt;... SETTLEMENT again ...&lt;br /&gt;&lt;br /&gt;The operation did the calculation for the win/loss after the matches were over. This is called settlement process. And the database was jammed when the settlement code was executing. The problem was why it didn't happen when my supervisor executed the settlement himself. How to solve this? What could we do now? We are running out of options.&lt;br /&gt;&lt;br /&gt;... I was off on Sunday ... but still kept monitoring the system from my house ... next week, we will have to continue to look into this issue again. &lt;br /&gt;&lt;br /&gt;Database is not my specialty ... the only thing I know is to listen to my colleague and my supervisor ... well I will learn ... &lt;br /&gt;&lt;br /&gt;This Saturday, our external consultant also invited a SQL specialist who was from Taiwan to help us to improve the database performance. He introduced us to COM+ ... a technology which Microsoft is replacing with .NET Remoting and Web services. The first impression from us wasn't too good for him. Let's see what he will have for us. &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33014026-115972496602509507?l=yuksickening.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/115972496602509507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33014026&amp;postID=115972496602509507' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115972496602509507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115972496602509507'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/2006/10/being-too-confident-has-become-bad.html' title=''/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33014026.post-115946193333144884</id><published>2006-09-28T23:33:00.000+07:00</published><updated>2006-10-01T23:53:36.450+07:00</updated><title type='text'></title><content type='html'>&lt;div style="font-family: Tahoma; font-size: 9pt"&gt;&lt;br /&gt;&lt;div class="firstletter"&gt;Adapt to "constant" changes&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Technology is changing every day, we have to update ourselves constantly to keep up with the pace. In 2002, our software was implemented with ASP and SQL 2000 and now we are replacing the old software with ASP.NET 2.0 and SQL 2005. Next year, we may change to something else ... who knows ... It is not only just the technology changes but also customers' requirements also change day by day. Today the requirement will be a square; but tomorrow, the square may turn into an oval. The businesses are changing, the requirements must be changed as well. To cope with new demands, new technology will be  employed, and new ways of doing things will be used. Putting everything together creates a cirle. That cirle creates an indefinitely flow for those who choose to be in this technology industry. &lt;br /&gt;&lt;br /&gt;Last night, I brought up new features to our Admin 2 website as well. I also found couple of bugs, bugs in the new features and also bugs in one of the old features.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Special character in the team name, my javascript will return an error when this team name occurs&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Back functions of the live delete trace is not working&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;These were rare errors that's why our operators could not pick them up. &lt;br /&gt;&lt;br /&gt;Today we start implementing the Company Admin website after a series of delay due to something called "PROCESS". The management wanted "PROCESS" and "PROCESS" reduced the   productivities. "PROCESS" is necessary for any development firm; however, implementing it could not be done in a sort period of time. I have learnt a lots out of this process improvement period. For our company, heavy-weight process like CMMI is too much because our development team is pretty small. Light-weight process like Agile Development is more suitable to start with. &lt;br /&gt;&lt;br /&gt;... first iteration is on the way ...&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33014026-115946193333144884?l=yuksickening.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/115946193333144884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33014026&amp;postID=115946193333144884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115946193333144884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115946193333144884'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/2006/09/adapt-to-constant-changes-technology.html' title=''/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33014026.post-115917356136225154</id><published>2006-09-25T15:11:00.000+07:00</published><updated>2006-09-28T23:32:31.063+07:00</updated><title type='text'></title><content type='html'>&lt;div style="font-family: Tahoma; font-size: 9pt"&gt;&lt;br /&gt;&lt;div class="firstletter"&gt;Weekends has become our days for tuning and monitoring for the performance of the whole system. Our database performance issues is always on top our our lists. Last weekends wasn't an exception. We had done through a series of changes to improve our system. Costs and expensive lessons always accompanied with those changes. Expensive lessons were learnt, costs was paid under the expense of 3 hours downtime of our system on one of the most busy day of our business.&lt;/div&gt;&lt;br /&gt;&lt;h2 class="date-header"&gt;Saturday&lt;/h2&gt;&lt;br /&gt;Last week we implemented hardware load balancing. The load balancing worked like a charm. The hardware sent additional cookies in the URL and the response sent back to the firewall, based on the cookies it will send the requests to the correct server. Couple months back, we tried this method and we failed. Now with new hardware, it works so good. I won't have to do the software load balancing anymore for our Agent system.&lt;br /&gt;&lt;br /&gt;Our night started with unusual behaviours of our servers which were detected from the graph of Window Performance Tools. At the moment, we have 2 servers for the Agent System. We deployed our Admin 2 on our Agent Server #1. This enabled us to have an idea about how our main database performed. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4570/3619/1600/check2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/4570/3619/320/check2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;&lt;u&gt;Explanation&lt;/u&gt;&lt;/i&gt;: The top window in the picture was the monitoring graph of our Agent Server #1, the underneath window was the the monitoring graph of Agent Server #2. The second graph showed the normal activities of a server. &lt;b&gt;Red Line:&lt;/b&gt; CPU usage of the server; &lt;b&gt;Blue Line:&lt;/b&gt; request executing in the CPU; &lt;b&gt;Yellow Line:&lt;/b&gt; requests comming to the server per second. The first graph indicated that the database was being locked, and our website became slow on the customers' sides. The request executing ran high that meant there were request comming and some of them  had to wait for the database to timeout. Time to do something to the database to release all the locks. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4570/3619/1600/normal.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/4570/3619/320/normal.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;&lt;u&gt;Explanation:&lt;/u&gt;&lt;/i&gt; This picture showed the normal activities of both Agent Servers.&lt;br /&gt;&lt;br /&gt;The main CPU database remained at around 30%, but we still received complains from our operation that our web admin site was slow, and the Admin 2 as well. Database was jammed again? My supervisor then killed the physical connection which led to our main database. The situation became better. We learnt one more thing. When the database CPU is low, it doesn't mean that the system will perform normally. Even though the CPU is low, the database is still locked at somewhere. &lt;br /&gt;&lt;br /&gt;My colleague added more counters into the Window Performance Tools to monitor the "lock requests" and "lock waits" for the database. After a while of monitoring, we found what we wanted.  Before the database was jammed, the "lock waits" counter jumped higher, and so did the "lock request". At the same time, the performance tools on our Agent Web Servers also showed "Request Executing" Counter getting higher. My supervisor had to kill the physical network connection again in order for our database solved all the current locks. &lt;br /&gt;&lt;br /&gt;We continued to monitor some more again. There were still lots of reading in our main database&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;balance of our agency system&lt;/li&gt;&lt;br /&gt;&lt;li&gt;bet list of nearly 40,000 customers&lt;/li&gt;&lt;br /&gt;&lt;li&gt;reports of our admin 2&lt;/li&gt;&lt;br /&gt;&lt;li&gt;total bets, and forecast in our company admin&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;"We will move all those read out of our main database." That was the conclusion for that we had for the night. I was in charged of changing the code of the agent system, and we encountered a big issue. Our current source code inside the repository was the ongoing development code. I could not fix on that source code. I had to rip out the  production source, created a new project and made my amendments in there. Big room for errors was awaiting me. &lt;br /&gt;&lt;br /&gt;Hardware issues sometimes also had affects on the performance? Our external consultant thought the hyper thread functionalities might create the performance issue as well. The external consultant also decided to turn the hyper thread feature off on the next reboot time of the system. &lt;br /&gt;&lt;hr width="300"/&gt;&lt;br /&gt;&lt;h2 class="date-header"&gt;Sunday&lt;/h2&gt;&lt;br /&gt;Another weekend I had to come to work, and my supervisor has worked like this for the past 2 years to maintain the system up and running. I guess I'm starting following him. Well, it is the nature of our jobs as programmers. &lt;br /&gt;&lt;br /&gt;I had 2 jobs to finish&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;remove all report store procedures call from our admin 2 to replication database &lt;/li&gt;&lt;br /&gt;&lt;li&gt;bring master agent list to replication and put some delays for the customers to see the new updates from replication&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;I finished the first task weekly. I grabbed my colleague junior to test my new changes while I proceeded the next task. I guessed he was being unlucky when he let me see him online on his off day. The test was fast, and everything was working fine. I deployed new version for our admin 2 quickly. Everything proceeded so smooth, and I should be out of the office pretty soon I thought. &lt;br /&gt;&lt;br /&gt;Yesterday, before I left, I already set up the new project for our agent code in order to implement new codes without bringing our ongoing development into our development servers. I already tested the codes in our development environment. Everything rans smoothly. After getting signal from my supervisor, another version of  agent systems were deployed again in our servers. I made a test site to test our new codes. I got errors, totally could not log in. There were strange errors. &lt;i&gt;Parameter could not be null. Parameter value: value!&lt;/i&gt; What was the h*** going on? In the development system, everything was working fine. I had to revert on our old code back, and tried debugging the codes. After a while, I found out our new codes for new functionalities was causing problem. I passed in a null value into the String.IndexOf function of .NET . It was totally going off my mind when I saw the error message like that for that kind of mistake which was thrown out by the .NET Framework. &lt;br /&gt;&lt;br /&gt;Database was restarted. Anxiously to wait for the main DB to be up again, strange things happened. In the performance windows, the CPU of the main DB quickly raised up to 100%. Our supervisors killed the LAN connection to the main DB again. After he killed the connection, the power in his house went out and it was time for him to come to the airport to catch the plane to Manila. No one turned the LAN connection back on. I had to call our external consultant to turn the connection back on. There were no remote connection for me to go in anymore. When the DB was back on, the CPU raised up to 100% again. We thought that it'd be the hyper thread function turned off causing the problem. Main DB was shut down again and restarted. &lt;br /&gt;&lt;br /&gt;Our external consultant monitored the SQL profiler and told me everything single SP call from the agent system was going to the main DB instead of going replication servers. I moved the old codes back immediately and I grabbed my colleague to monitor for me and I went to figure out what went wrong. There were 2 things I picked up. &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;My junior changed my default setting inside one of the main components of our agent software packages. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;The default connection to the main DB wasn't changed, it must be changed.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;This was totally my mistake. I should've checked more carefully. Expensive lessons for me, I should've been more careful, and replaced the code one by one from the least access sites to the more access sites and always monitored the SQL profiler along the way. I underestimated the changes I did. The system I built and I still made mistakes. After fixing all the bugs, I learnt this time, and replaced the agents website one by one and monitored closely the profiler which my colleagues had set up for me. &lt;br /&gt;&lt;br /&gt;After 3 hours downtime and unstable performance, our system was back on again. At the same time, my supervisor was doing the peformance improving implementation as well, he moved all the report from our member sites to replication. I decided to stay at work through the peak time to monitor a bit more closely, and to make sure everything running normally. Our system performed extremely good, no more jams for the night. Our agent servers didn't show anything unsual anymore. The main DB CPU was under 15% for the whole time. Next week, we will have to monitor again. Hopefully everything solved. &lt;br /&gt;&lt;br /&gt;It was a long weekend ... going home and looking for my bed ... that was the only things left in my brain when I left work ... &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33014026-115917356136225154?l=yuksickening.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/115917356136225154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33014026&amp;postID=115917356136225154' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115917356136225154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115917356136225154'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/2006/09/weekends-has-become-our-days-for.html' title=''/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33014026.post-115865152133641200</id><published>2006-09-19T14:21:00.001+07:00</published><updated>2006-09-19T17:13:04.196+07:00</updated><title type='text'></title><content type='html'>&lt;div style="font-family: Tahoma; font-size: 9pt"&gt;&lt;br /&gt;&lt;div class="firstletter"&gt;We have solved a lots of requests last week. Today, I have free time again to update this blog with the actions of last weekend. It was totally a busy weekend.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I finished implementing the reducing bandwidth for our member sites. The implementation wasn't to the point that I wanted it to be but it was alright, simple version first and more complicated version will come later. In comparison to the ASP version, our version reduces probably 15% more of the data transfer to the clients' browsers.&lt;br /&gt;&lt;br /&gt;Last Saturday was a really chaotic day. We encountered with so many unknown problems. We kept receiving complains from our operations about the site being slows, and we experienced the lagness ourselves too. The network was really smooth, the ping plotter program didn't show any disruption. The CPU usage of the database was at 30%.  Everything seemed normal except the sites were slow. The situation continued getting worse, the trading general dispute director also came to our IT department to check what went wrong; our big bosses were all present. Eventually we pinpointed the problem which probably was the upgrade of 2 RAMSAN units. We did upgraded them to double the units capacity on Thursday. Our supervisor tried to change the log of SQL server to different RAMSAN unit. The situation seemed better a little bit; however, there were still complains. &lt;br /&gt;&lt;br /&gt;In technical term, our business is database-centric. Like an MMORPG game, the business relies extensively on the database performance with concurrently log in of more than 38000 users at peak time. Our database has problems; as a result, our business also suffers. &lt;br /&gt;&lt;br /&gt;A half an hour later, we used the window performance monitoring system to monitor the write and read disk queue of those RAMSAN units. Everything was normal again. Strange, there was no big changes. At the time of the problem, we did a serial of changes to the disk; it didn't help. Then how everything became normal ?. The load to   the database remained the same, even a bit more than half an hour ago. STRANGE !!! We had so many factors to consider in order to pinpoint the problem exactly. &lt;br /&gt;&lt;br /&gt;Our Agent web server got problem as well. It reached the its capacity limits. Its CPU usuage was always at 97-99% at peak time. "On Sunday, we will try hardware load balancing from the F5 for the Agent system" my supervisor said to me. I went to set up the server for him to prepare for Sunday. &lt;br /&gt;&lt;br /&gt;Saturday night became a long night for us. Database performance still remains our biggest issues. &lt;br /&gt;&lt;br /&gt;Sunday night, with just a bit less load than Saturday, the system performed smoothly.   Was it our external consultant's assumption correct? We didn't know, and could not claim what he found to be correct problems that we had on Saturday, too many factors to concern. He told me in the afternoon that he found the problems; the problems maybe came from those unused indecies which we left in the main table. He removed it out. &lt;br /&gt;&lt;br /&gt;When it came to the settlement part, we still have big problems even though we were using our new codes for the settlement; we did test it thoroughly and it was running much faster than the older versions.&lt;br /&gt;&lt;br /&gt;We succeeded with the load balancing from our F5 firewall with one of our site. That was the only good news for us for the whole weekend. &lt;br /&gt;&lt;br /&gt;... definitely have to monitor again on the coming weekend ... &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33014026-115865152133641200?l=yuksickening.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/115865152133641200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33014026&amp;postID=115865152133641200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115865152133641200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115865152133641200'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/2006/09/we-have-solved-lots-of-requests-last.html' title=''/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33014026.post-115816671885963551</id><published>2006-09-13T23:24:00.000+07:00</published><updated>2006-09-19T14:39:19.663+07:00</updated><title type='text'></title><content type='html'>&lt;div style="font-family: Tahoma; font-size: 9pt"&gt;&lt;br /&gt;&lt;div class="firstletter"&gt;"We will down the system for ..." is always the sentence that no one in the online business want to hear from their IT department; however, system upgrade always require downtime. Today, we delivered new functionalities to our  system, mainly in the AGENT system.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;To implement these auto/manual position taking functionalities, our DBAs had done lots of changes to our database. System down time were unavoidable and management allotted us two hours to deliver the software. 2 hours was supposed to be a lots of time for us. In the end, we just barely made it. All the replication servers had to be resynchronized, we had 7 replication servers. Of course, synchronization for all of these servers took some of our precious time. &lt;br /&gt;&lt;br /&gt;My supervisor, my colleage, and I started our schedule earlier than usual to make it to the time allotted for the system downtime. My supervisor took care of resynchronization of all the data and all the replications. My colleague was to update the database code and to prepare new database structure scripts. I was in charged of the application code. Eventhough we had tested thoroughly with test scripts and passed the user acceptance tests, I was still a bit nervous. The funny thing was that I had done these things so many times, and still feel a little sweaty. &lt;br /&gt;&lt;br /&gt;11:45 AM Vietnam time, the system was up again. It took us an hour to finish. &lt;br /&gt;&lt;br /&gt;BUGS ... ERRORS ... we found those words again for this update. After new realeases were deployed, one of our DBAs - my colleague junior - figured one critical bug. And this bugs will only appear when agents and masters interact together on the same functions. This one was the "must" fix one ... I dealt with the bugs myself, even though those codes were developed by juniors and they were all present. While fixing bugs, it was a chance for me to check back their codes. &lt;br /&gt;&lt;br /&gt;Even at the time of deploying, I also let my juniors to implement a small new request, I forgot this request somehow before the deploying. Last minutes implementation always still happens. Something called "PROCESS" isn't functioning well. I do know why and still observing. Precious experience.&lt;br /&gt;&lt;br /&gt;I was really impressed with my junior; she is really improved. Definitely she could replace me, I will train her in depth everything I know. &lt;br /&gt;&lt;br /&gt;I haven't finished improving odds display yet, so many "must" requests intervened. Anyways, I've gotta conclude it in the next 2 days...&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33014026-115816671885963551?l=yuksickening.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/115816671885963551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33014026&amp;postID=115816671885963551' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115816671885963551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115816671885963551'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/2006/09/we-will-down-system-for.html' title=''/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33014026.post-115802139943101753</id><published>2006-09-12T07:36:00.000+07:00</published><updated>2006-09-19T14:41:27.143+07:00</updated><title type='text'></title><content type='html'>&lt;div style="font-family: Tahoma; font-size: 9pt"&gt;&lt;br /&gt;&lt;div class="firstletter"&gt;Another week passed by so fast. I had not been so productive last week. Things must be changed this week. Everyday, we received more and more requests. I just cleaned my desk at work; but definitely, it will quickly be filled again with papers. There are so many things on our hands: implementing new requests, improving and optimizing the current code, and training our juniors. Well, I guess nothing is for free, then just live with it.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Starting day of this week wasn't so bad. I decided to stay a bit late to finish all the pending requests that the management marked as URGENT on the ASP.NET member&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Delay of 2 seconds between mix parlay bet was implemented. This one DBAs finished it. We don't show to the user that they are restricted to bet a new parlay within 2 seconds, we just tell them that they can't bet because of "Odds changed"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Provide Help section for the mix parlay&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Implemented the count number of current games on the menu.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Preparing all the codes for the splitting of the servers tomorrow&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Today, Boss comes back ... definitely more things to come ... *sigh* . We will have actions soon. &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33014026-115802139943101753?l=yuksickening.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/115802139943101753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33014026&amp;postID=115802139943101753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115802139943101753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115802139943101753'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/2006/09/another-week-passed-by-so-fast.html' title=''/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33014026.post-115776657053772051</id><published>2006-09-09T08:27:00.000+07:00</published><updated>2006-09-12T07:35:06.766+07:00</updated><title type='text'></title><content type='html'>&lt;div style="font-family: Tahoma; font-size: 9pt"&gt;&lt;br /&gt;&lt;h1&gt; Backlash &lt;/h1&gt;&lt;br /&gt;&lt;div class="firstletter"&gt;&lt;br /&gt;The past few days, I have been struggling with new odds display and reducing the bandwidth problems with my own code. Couple months ago, I implemented our Member website with only one purpose in mind "make it better than the ASP version, as much as possible". I did succeed, our ASP.NET version is better, faster, going back to the database much less on betting procedure. However, I want to improve it and face so many obstacles; they drive me to the point to reimplement everything. The inexperience in designing and coding now show its true shadow. &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In order to improve the bandwidth, I must detect all possible odds changes. &lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;In the ASP versions, store procedure returns all the bet type by rows, each odds will be on one row, detecting odds changes will be on one row only which is the odds change time&lt;/li&gt;&lt;br /&gt; &lt;li&gt;In ASP.NET version, for my convenience of coding, I requested to put all the odds type of a match in one rows in the record sets. Bettype 1,3,7,8 will be on 1 rows with 4 different change times. To detect odds changes, I will have to check all 4 values. It gains in performance because the cost of moving down a row in the dataset more than we check for 4 values. But the source code will be definitely more complicated.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;After detecting all odds changes, I must send out all these changes into a compact form; then populate the those datas into correct odds position which will be identified by the odds id. Everything sounds to be easy. ..BUT.. things are not easy as it should be; I will have to deal with my improvement of bet engine which I used to be proud of.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;In ASP version, each odds is just a link. Once the user click on the link, they will go to the database to get all the information about the choice that they want to bet; one more trip to the database to create the bet slip. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;My improvement in ASP.NET version was to store all the possible information when I built the display into something called Javascript "betstring". This "betstring" contained all the necessary information about the choice of the users. There is no need to go back to the database to collect all the information any more. &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Because of building the bet slip by "betstring", I need all the information about that user choice including the team names, league names and score. Those information usually contains most of the data sent to browser. If I continue to include these information into refresh data, then I won't save much the bandwidth. Previous improvement now has impacts&lt;br /&gt;&lt;br /&gt;Everything has a way to solve except my code will look UGLY. &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33014026-115776657053772051?l=yuksickening.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/115776657053772051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33014026&amp;postID=115776657053772051' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115776657053772051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115776657053772051'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/2006/09/backlash-past-few-days-i-have-been.html' title=''/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33014026.post-115736900886044917</id><published>2006-09-04T17:51:00.000+07:00</published><updated>2006-09-04T18:36:53.913+07:00</updated><title type='text'></title><content type='html'>&lt;div style="font-family: Tahoma; font-size: 9pt"&gt;&lt;br /&gt;&lt;div class="firstletter"&gt;Monday, another working week starts again. We were supposed to have long weekends this week because our national holiday was on Saturday. I didn't think that I'd have that luxury, and as usual I was right.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Problems arised. I got messages from our Customer Support Department at 1:30 AM in the morning. I was unlucky that being online at that time to check my email, and got caught. Anyways, problems had been detected; they had to be fixed. &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;   &lt;li&gt;777goal correct score, total goal didn't display --&gt; I pointed the cache server into different database, and the database store procedure on there were not up to date.&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;s33bet members could not bet parlay bets --&gt; Data conversion problem from the database. We just did some modifications on performance improvement for the database, some columns had been converted into different datatype. Bugs spotted.&lt;/li&gt;&lt;br /&gt;   &lt;li&gt;s33bet minimum bet displayed incorrectly --&gt; new minimum bet value had been introduced to our ASP version, we hadn't updated it into your .NET version&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SOLUTION:&lt;/b&gt; come to work on holidays. quick, simple but not dirty as it sounds ...&lt;br /&gt;&lt;br /&gt;In the evening, my mailbox received 2 more new requests. Just display requests for s33bet; geared on, I marked DONE status for those in 10 minutes. Anyways, I must update our requirement collector about these requests. He has the responsibility to document everything we did. That's called PROCESS. I'm being thinking on making a blog on PROCESS in our company soon. Hopefully it won't be called CHAOS ... j.k ...&lt;br /&gt;&lt;br /&gt;Continue bring new method of reducing the bandwidth into our .NET member now ... &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33014026-115736900886044917?l=yuksickening.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/115736900886044917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33014026&amp;postID=115736900886044917' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115736900886044917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115736900886044917'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/2006/09/monday-another-working-week-starts.html' title=''/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33014026.post-115708836535127818</id><published>2006-09-01T12:00:00.000+07:00</published><updated>2006-09-04T17:51:01.776+07:00</updated><title type='text'></title><content type='html'>&lt;div style="font-family: Tahoma; font-size: 9pt"&gt;&lt;br /&gt;&lt;div class="firstletter"&gt;It is time to implement new odds display functionality into our .NET member site. I created a different set of javascript and new set of code-behind files. I will start from scratch. Let's see what we have to do.&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Users navigate the odds display page for the first time, need to build the tables.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;When users refresh, the code-behind must send just enough informations to the browser, and the javascript will spot which odds are changed in order to update the display.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Deal with situations such as new live games, odds closed, live game ends, new games offered e.t.c&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;I broke everything down into small problems, and start sovling one by one.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Remove all the duplicate data in our old odds display engine first. &lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Team information of multiple handicap odds and the show time information will be removed first. Since we introduced double handicap for each match , this will reduce our bandwidth by quite a bit. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Implement code to detect all changes from the last refresh&lt;/b&gt;&lt;br /&gt;This one will be a challenge. So many possible cases have to be considered. The hardest cases would be a match or an odds being removed, or added. I will detect just odds value changes first. &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33014026-115708836535127818?l=yuksickening.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/115708836535127818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33014026&amp;postID=115708836535127818' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115708836535127818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115708836535127818'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/2006/09/it-is-time-to-implement-new-odds.html' title=''/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33014026.post-115695502158115087</id><published>2006-08-30T22:01:00.000+07:00</published><updated>2006-08-30T23:31:27.130+07:00</updated><title type='text'></title><content type='html'>&lt;div style="font-family: Tahoma; font-size: 9pt"&gt;&lt;br /&gt;&lt;div class="firstletter"&gt;Last weekend, our ASP Member were already updated new versions of odds display. The new version was implemented similar to what I did with the Forecast of Agent system. The javascript behind just updated new information from the database. The purpose of doing this is to reduce the bandwidth usage. Bandwidth issues are becoming a headache issue for us as our business keeps increasing. Our bandwidth usage is reaching our capacity day by day.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The display odds of ASP version is changed, our .NET member site display odds will have to be changed as well. New odds display engine must be reimplemented. This will be another challenge since I won't have any assistance from the database. The process of analyzing the odds data will be in the web servers. Everything must be planned out and designed thoroughly. I'm taking care of this functionality. Hopefully, tomorrow new ideas will come to me. &lt;br /&gt;&lt;br /&gt;Today our big boss came up to us and asked us to find a way to detect bot accounts which are programs. Those programs log into our website automatically and grab our prices from our sites, then update into their sites sothat they don't need to control the odds. It is extremely hard to check for these programs. We have user login logs. We could start from there to check the login patterns of all the accounts and spot those with irregular patterns. Bots usually log in and log out all the time. We could start from there. However, some smarter programmers will randomize their login patterns or mimic the browser behaviours; to trace down those accounts will be really difficult. We will give more thought on this.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33014026-115695502158115087?l=yuksickening.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/115695502158115087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33014026&amp;postID=115695502158115087' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115695502158115087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115695502158115087'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/2006/08/last-weekend-our-asp-member-were.html' title=''/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33014026.post-115663523941416740</id><published>2006-08-27T06:26:00.001+07:00</published><updated>2006-08-27T20:49:56.913+07:00</updated><title type='text'></title><content type='html'>&lt;div style="font-family: Tahoma; font-size: 9pt"&gt;&lt;br /&gt;&lt;div class="firstletter"&gt;Tonight we had encountered the database problem again. Main database CPU went up high again. This time, my supervisor intervened timely to kill off   the physical network connection and prevented the system jammed. Everything happened transparently to the users before they even noticed. Closely monitoring the system performance at peak hours shows its true importance. &lt;/div&gt;&lt;br /&gt;We narrowed down the problem that might cause the system to be jammed up. Our supervisor checked the user actions logs from database. At the time that windows performance monitor showed the signal of the jamming to be about to occur, the operators were doing settlement ( a process of calculating the win/lose of each tickets after a game is done ). We will monitor this problem again on Sunday night.&lt;br /&gt;&lt;br /&gt;Around 3AM in the morning, another problem arised. This time, it was the network. Agent website, and a .NET member site could not be accessed. Ping plotter showed red color at the our ends. SingTel line was having problem. It wasn't the problem from the ISP, it was our internal server issues. There is a problem at our firewall.&lt;br /&gt;&lt;br /&gt;In the ping plot we could see the route which a information packet is going around on the internet. It is like the &lt;b&gt;tracert&lt;/b&gt; command of window XP. We could see all hops visually. By tracking the ping ploter, we could know where the problem of the network to occur; international gateway or in our DNS. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4570/3619/1600/pingploter.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/4570/3619/320/pingploter.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33014026-115663523941416740?l=yuksickening.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/115663523941416740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33014026&amp;postID=115663523941416740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115663523941416740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115663523941416740'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/2006/08/tonight-we-had-encountered-database.html' title=''/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33014026.post-115652463499599141</id><published>2006-08-25T23:48:00.000+07:00</published><updated>2006-08-26T08:31:39.083+07:00</updated><title type='text'></title><content type='html'>&lt;div style="font-family: Tahoma; font-size: 9pt"&gt;&lt;br /&gt;&lt;div class="firstletter"&gt;This weekend, La Liga will start the 2006 - 2007 season joining England Premier League and Bundesliga. There major leagues have started; Series A will be the last one. A brand new soccer seasons is waiting for us. It is almost a year since we started with IBC - a sport betting system. We have owned more than 40% of the system which was developed by a Malaysian couple years back.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The system has grown quickly since last year from one database server, and around 20 web servers to 6 database servers and more than 50 web servers. The number of concurrent users has rised from approximately 10,000 to 37,000 users. Numbers of accounts has rised from 100,000 to 300,000 accounts. Within one year, the company business has been increased more than double.&lt;br /&gt;&lt;br /&gt;We call our business as a type of gaming. This gaming industry is getting bigger and bigger everyday with online casino, online community games, lottery and sport betting. We mainly operate gaming with sport events. You guys could call this kind of business Gambling; doesn't matter to us, we still consider it as gaming with money. &lt;br /&gt;&lt;br /&gt;Those are just a little brief introduction about our company and a little bit background of our software platform. &lt;br /&gt;&lt;br /&gt;... &lt;br /&gt;&lt;br /&gt;The 60% of our system is still in ASP. We are going to convert into .NET as well. Our architecture is already ready. My colleague and I have been designed it to contain lots of spaces for improvement later on. We must make everything planned out first as our system is constantly changing with the grow of the business. In our design, N-tier model is still in use, but we planned a way to quickly change from N-tier to services-oriented model. I will post a design eventually; and the design won't be in details, it will just be a rough idea design. &lt;br /&gt;&lt;br /&gt;In the past 2 day, new functionalities have been implemented to our system&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Mini betlist for member sites &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Improvements to the Odds Controller of the External Admin&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Next week, we will have a session on implementing Extreme Programming into our team. We start to follow Agile Development Methodology. Our work finally get paid off; we have convinced the management to apply Agile Development. My colleage and I will have to complete the process template as a proposal plan to them.&lt;br /&gt;&lt;br /&gt;Another task that must put in to-do list is to &lt;b&gt;back up our source code database&lt;/b&gt;. I want to back up the whole database frequently, but lots of suggestion were to just keep the release source not to keep the whole database. To me, keeping the whole development database will give us the benefits of getting all the metric of team development. We could figure out the team behaviours, real ownership of source code. These things are really important for team development improvement purposes.  &lt;br /&gt;&lt;br /&gt;Second weekends of the season, my colleage had applied new indecies into our database. How good it is? We will have the answer Saturday and Sunday night. &lt;br /&gt;&lt;br /&gt;... No more weekends for me ... :'( &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33014026-115652463499599141?l=yuksickening.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/115652463499599141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33014026&amp;postID=115652463499599141' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115652463499599141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115652463499599141'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/2006/08/this-weekend-la-liga-will-start-2006.html' title=''/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33014026.post-115637474404369087</id><published>2006-08-24T05:50:00.000+07:00</published><updated>2006-08-24T06:14:55.966+07:00</updated><title type='text'></title><content type='html'>&lt;div style="font-family: Tahoma; font-size: 9pt"&gt;&lt;br /&gt;&lt;div class="firstletter"&gt;Another day passed by. We are closing on our schedule. All the software have been prepared and waiting for approval to be in production; however, there is no signal from our trading department yet.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Testing more and more will give us benefit on the coming launching day and will reduce the chances of bugs which are always nemesis to programmers and businesses.&lt;br /&gt;&lt;br /&gt;We did lots of testing today, and we found more bugs on our position taking functionalities. Instead of giving the tasks to my programmers, I went to fix it. &lt;br /&gt;&lt;br /&gt;Our External Admin has been run for the second day now. No major problem were reported.  Except the admin 2 people kept complaining that the program was slow. 1AM this morning, I checked with them on live games. The program was slow and half an hour later everything was normal. The problem must come from the network; maybe we have experienced some lagness with the internet connection into KBT. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Tomorrow, first thing to check is the ping plot of KBT network from 10 PM to 3AM to see whether we have some disruption with network. Hopefully the problem will appear on at the international gateway, or KBT gateway; or else we must ping each single Admin 2 people to see where the lagness occurs. We could recommend them to change the ISP or we have to find a better route for them to go into our server in KBT. The problem belongs to the network engineer. Maybe I jump a bit far now.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;My to-do list gets longer and longer everyday. *sigh* &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33014026-115637474404369087?l=yuksickening.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/115637474404369087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33014026&amp;postID=115637474404369087' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115637474404369087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115637474404369087'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/2006/08/another-day-passed-by.html' title=''/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33014026.post-115628172827405685</id><published>2006-08-23T04:20:00.000+07:00</published><updated>2006-08-23T08:06:28.726+07:00</updated><title type='text'></title><content type='html'>&lt;div style="font-family: Tahoma; font-size: 9pt"&gt;&lt;br /&gt;&lt;div class="firstletter"&gt;Yesterday I got an email from my supervisor about patching our Member Website. I totally didn't understand what he meant. After arriving at work, I asked him on what was going on; then series of mixparlay bet were shown to me and my colleague. &lt;/div&gt;&lt;br /&gt;&lt;h4&gt;"Our System has holes"&lt;/h4&gt;&lt;br /&gt;That was the conclusion that we arrived. Some smart a**es figured out the way, we sent information to our server to process mixparlay bets and exploited that. &lt;br /&gt;&lt;br /&gt;A mix parlay bet is a combination of choices over many matches. In each match, a punter is only allowed to choose one product (one of handicap, over/under, 1x2, and total goal); at the moment we only offer that many products for mixparlay (&lt;a href="http://www.bodog.com/sportsbook/guide/wager-parlay.jsp"&gt;Parlay betting explanation&lt;/a&gt;). For our company, a parlay must consist of 3 soccer matches or over.&lt;br /&gt;&lt;br /&gt;In our ASP version, mix parlay information will be passed in the query string of an url; then send back to our servers for processing the bets (something thing like &lt;i&gt;http://linkA?a=betinfoA_betinfoB_betinfoC&lt;/i&gt;).&lt;br /&gt;&lt;br /&gt;In our ASP.NET version, mix parlay information is posted through a form then send back to the servers. &lt;br /&gt;&lt;br /&gt;For ASP version, it is pretty easy just to change the query string link. For ASP.NET version, the punter could interfere with the posting action by creating a dummy post form. If exploiting this, the punter will pass through all our checking on the interface and creating sure win parlay combinations. For example, they could choose 3 same choices for a parlay, and the next one choose 3 choices of the opposite; dispite   the results of the matches, the punter will win at least 1 combinations; and that win  is enough to cover all the expenses and with profit.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;... when it comes to money ... people are getting so smart at digging and finding holes ...&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;We immediately patched our systems for this vulnerability both in ASP and ASP.NET version. We implemented 2 more levels of checking the duplicate match in processing bet level and in database level, and of course, update immediately into production servers.&lt;br /&gt;&lt;br /&gt;Testing servers were set up for our CSD to test our new position taking functionality on our agent system as well. 2 web servers were deployed with newest code from the development, and database server with newest data from production servers. I wonder how CSD were doing at the moment. Once the test is done, 1h downtime of the system will follow in order for us to run an update on the database and on the interface code. &lt;br /&gt;&lt;br /&gt;External Admin was also updated; new functionalities launched. I'm checking how it runs at the moment. Better than the old version, there is no complain yet so far. From feedback of our operations, external people liked the new version. I cross my finger and wait for things to land on our to-do lists; when the customers like it, they will definitely throw at us a series of IMPROVEMENT requests ... "you can do that, now please do this for us" blah blah blah ... and I got 3 new requests already on my table for tomorrow. &lt;br /&gt;&lt;br /&gt;On our schedule, I have to continue launching 2 more member websites in the set of 10 sites that we are operating now. This will be to be determined tomorrow.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33014026-115628172827405685?l=yuksickening.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/115628172827405685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33014026&amp;postID=115628172827405685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115628172827405685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115628172827405685'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/2006/08/yesterday-i-got-email-from-my.html' title=''/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33014026.post-115613434701813702</id><published>2006-08-21T10:33:00.000+07:00</published><updated>2006-08-21T23:09:41.426+07:00</updated><title type='text'></title><content type='html'>&lt;div style="font-family: Tahoma; font-size: 9pt;"&gt;&lt;br /&gt;&lt;div class="firstletter"&gt;The first weekend of a new soccer season had passed ... All servers ran smoothly yesterday ... There were 2 big games yesterday &lt;b&gt;Chelsea -vs- Manchester City&lt;/b&gt; and &lt;b&gt;Manchester United -vs- Fulham&lt;/b&gt;. &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Agent server reached 320 requests/sec yesterday with at peak 2,010 members. On top of these members, External Admin and Internal Agent were also run on this server. A dual Xeon 3.2GHz has been served us well.&lt;br /&gt;&lt;br /&gt;With 8 applications is running on a single server using default setting of IIS6 will have an effect on the performance and response time. In Kaohsiung, we have 2 dedicated  servers for Agent System ... now back in Taipei, 1 single server handles all and on top of it External Admin, Internal Agent are now also deployed on that agent server. I guess my supervisor created challenge for me to improve the performance instead just issuing new servers for me. And his decision turned out to be good.&lt;br /&gt;&lt;br /&gt;After we moved back from Kaohsiung, I quickly noticed the executing time of a request increased dramatically from a few hundress milliseconds to 3-4 seconds on average. I discovered that running 6 or more web applications on a server with one IIS worker process only caused the executing time of a request to be longer. I must increase the number worker process for IIS but in which way?&lt;br /&gt;&lt;br /&gt;Our applications must write the their own logs into harddrive in order for us to trace errors and trace customer activities. Increasing number of worker process will increase the chances of I/O queues to occur since 2 or more threads will fight each other to grab the privileges to write the logs. When this happens, requests into the system will be failed. This problem will definitely occur, unavoidable when using 2 or more worker processes if we still want to keep the application logging. Logging has been trememdously helpful for us. I don't want to remove it.&lt;br /&gt;&lt;br /&gt;Compensating solution ... Yes, have one. I found out just using 2 worker processes; each worker process will handle specific applications. Why 2, not 4, or 8 ? tried ...  After a series of trial and errors, with our 2 CPUs server, 2 worker process works the best; increasing to 4 worker processes, number of request failed increased much more than the gain of executing time of a request.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4570/3619/1600/iissetting.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/4570/3619/320/iissetting.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This method works well for us in the past weekend. No major problem or any issues. Executing time of a request is being kept below 800 milliseconds on average. Number of requests failed is below 4000 requests/per busy night like this weekend. The statistical performance numbers are really convincing to me that this method works well.&lt;br /&gt;&lt;br /&gt;I could claim that our 2 dual Xeon 3.2Ghz server could support 2,500 users - 3000 users, but still need to try in practice.&lt;br /&gt;&lt;br /&gt;I improved External Admin Odds Controller. Lots of new functionalities were put in.&lt;br /&gt;- Hide odds, Open Odds were implemented. &lt;br /&gt;- Implementation of odds selections for the users to choose &lt;br /&gt;&lt;br /&gt;I think recently I overuse Web 2.0 technology. Really need documentation on security issues of this technology &lt;br /&gt;&lt;br /&gt;Time to go to back sleep now ...&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33014026-115613434701813702?l=yuksickening.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/115613434701813702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33014026&amp;postID=115613434701813702' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115613434701813702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115613434701813702'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/2006/08/first-weekend-of-new-soccer-season-had.html' title=''/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33014026.post-115603004061639857</id><published>2006-08-20T05:58:00.000+07:00</published><updated>2006-08-20T07:38:45.413+07:00</updated><title type='text'></title><content type='html'>&lt;div style="font-family: Tahoma; font-size: 9pt;"&gt;&lt;br /&gt;6AM, checking the system log for the last time before leaving the office ... &lt;br /&gt;&lt;br /&gt;Tonight we resumed our night shift to check on the system and to be stand by. The number of users was around 34,000 at peak time (10PM - 1 AM, Malaysia Time). System was running stable. &lt;br /&gt;&lt;br /&gt;My colleague discovered bugs in Member Program which I wrote mainly. The number of online users was counted. Problems discovered was that I made a typo in my login page. Correct ServerID wasn't passed into my on-user count functions. I had been passing the dummy variable which was from the testing phases. &lt;br /&gt;&lt;br /&gt;Our messaging system contained bugs as well; but no one noticed and we did passed users acceptance tests proudly. My collegue took care of it, mainly patches to the database. &lt;br /&gt;&lt;br /&gt;Problems fixed immediately, but I couldn't update to production servers ... There were many live games. Decision was made swiftly and update'd be postponed until the next morning when there were the least live games. &lt;br /&gt;&lt;br /&gt;The match between &lt;i&gt;Arsenal -vs- Aston Villa&lt;/i&gt; was on the way.&lt;br /&gt;&lt;br /&gt;DataBase CPU rised to 90%, our agent server CPU hit 100% and stayed there for a while . Operations experienced slowness and they couldn't change prices for the match, out there more than 34,000 users were effected ...  &lt;br /&gt;&lt;br /&gt;Unfortunately, we could not do much. From Profiler, live forecasting of the match Arsernal and Aston Villa ran excessively from main DB which is for just writing; forecasting of a game is to predicting the company win/loss of that game. Forecasting store procedures are always killers to the database, each SPs run at least 1 second on a &lt;i&gt;4 dual core 3.6Mhz Intel servers 16 Gigs of RAM with RAMSAN&lt;/i&gt;. We need to work on this if we want to reach 50,000 concurrent members by the end of this year.&lt;br /&gt;&lt;br /&gt;10 more minutes, DB CPU dropped. My supervisor must have done something. We guessed he killed off the connection from web server to CPU; however, number of online users never dropped. It was not likely that he had done that.&lt;br /&gt;&lt;br /&gt;For the next 2 hours, everything seemed to normal again.&lt;br /&gt;&lt;br /&gt;While monitoring our servers, I reviewed and did couple testing for double handicap functionality for our External Admin again; made the javascript behind it to run smarter; the auto refresh would stop automatically after 1 minute if the script detects that the operations already closed all the available odds. &lt;br /&gt;&lt;br /&gt;The launch of .NET member site for our IBC system considered successfully, not many major problems have occured for today - England Premier League started ... &lt;br /&gt;&lt;br /&gt;The database performance still remains a big concern. We will have to monitor more closely in the next coming days. &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33014026-115603004061639857?l=yuksickening.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/115603004061639857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33014026&amp;postID=115603004061639857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115603004061639857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115603004061639857'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/2006/08/6am-checking-system-log-for-last-time.html' title=''/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33014026.post-115600853519331180</id><published>2006-08-20T00:23:00.000+07:00</published><updated>2006-08-20T07:04:54.956+07:00</updated><title type='text'></title><content type='html'>Today, I have started reading &lt;b&gt;One Jump Ahead&lt;/b&gt; again - a great book about a life of a real programmer who was my respectful professor at U  ... The idea of start blogging my daily technical activities popped out in my head, it will definitely be good for me to start to review this after a while ... &lt;br /&gt;&lt;br /&gt; ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33014026-115600853519331180?l=yuksickening.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuksickening.blogspot.com/feeds/115600853519331180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33014026&amp;postID=115600853519331180' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115600853519331180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33014026/posts/default/115600853519331180'/><link rel='alternate' type='text/html' href='http://yuksickening.blogspot.com/2006/08/today-i-have-started-reading-one-jump.html' title=''/><author><name>yuksickening</name><uri>http://www.blogger.com/profile/06943993402027071240</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
