Resipi Nasi Goreng Tomyam

Long due to update blog on recipe and cookery. Sebenarnya i can say my cooking dah upgraded sket from before disebabkan pandemik COVID-19 lama sangat bertapa kat rumah macam-macam buat dari mengemas, make over, repainting sampai laa exploring resipi-resipi baru.

Slowly i will update mana-mana menu yang best and my family suka. Bila dah bosan dengan masakan bibik atau beli makanan luar mula akan google apa yang mudah dan sedap untuk di makan. Tomyam sup memang la common sangat kalau dah tak tau nak masak apa – match dengan telur dadar dan sayur pun dah cukup.

resipi nasi goreng tomyam
resipi nasi goreng tomyam

Hari ni i buat kelainan iaitu Nasi Goreng Tomyam

Pertama sekali masak nasi supaya bila nak campur dengan rencah nanti nasi tak superhot dan lembik.

Bahan – bahan;

  1. bawang merah + bawang putih + halia + cili api (kisar untuk dijadikan bahan tumisan)
  2. paste tomyam
  3. sos ikan
  4. ayam potong kecil atau ikut suka (utk siapa yang suka seafood boleh tukar accordingly)
  5. daun limau purut (hiris halus)
  6. carrot (potong mancis)
  7. sawi
  8. hirisan halus serai
  9. telur
  10. garam
  11. lada sulah
paste tomyam
ready made paste tomyam

Cara memasak;

  1. Masukkan minyak dan tumis bahan tumisan (bawang merah, bawang putih, halia dan cili api) sehingga kuning keemasan.
  2. Masukkan paste tomyam dalam 3-4 sudu besar dan hirisan serai (agak mengikut banyak  nasi yang akan dicampurkan kemudian)
  3. Apabila paste dah sebati dengan bahan tumisan barulah masukkan ayam dan carrot kacau sehingga masak. Pada masa yang sama boleh masukkan sos ikan, daun limau purutdan garam.
  4. Bila ayam sudah masak baru masukkan telur – kacau (2) teknik i guna biasanya dalam kuali sama just split side untuk stir telur tanpa mix dengan rencah tadi.
  5. Kemudian campurkan sayur sawi dan nasi – gaul rata sampai perencah sebati dengan nasi.
  6. Hidangan Nasi Goreng Tomyam selesai. Boleh add on keropok, telur mata atau ayam goreng untuk dimakan bersama. Tak nak add apa pun takpe. Selamat mencuba ya!

Programmers Quadrant or Software Developers Quadrant

I created the Programmers Quadrant to make my software developers team aware of their current skills position.

With the quadrant,  a programmer can easily visualize where are they now in term of skills.

The quadrant has Data Structure and Algorithm as its vertical axis. While Reusable Codes as it horizontal axis.

This programmers quadrant is only for someone who knows to code already. If he is still learning, he won’t be categorized under this quadrant.

Data Structure and Algorithm Vertical Axis

This axis represents how good a programmer regarding data structure or algorithm.

The better he is the higher he can go into the axis.

Given a set of requirements, a programmer must be able to identify the best data structure and algorithm to solve the requirements.

Reusable Codes Horizontal Axis

This axis how good a programmer in making a reusable codes instead of hard coded to a specific application.

A person who has good knowledge on object oriented programming, design pattern, best coding practice and follows naming convention standard.

4 Programmers Quadrants

#1 – Einstein Coder

A programmer who is very good in data structure and algorithm but at same time can produce reusable codes.

#2 – Genius Code

A programmer who can create or know what is the best data structure or algorithm to be used but his code is hard coded.

#3 – Engineer Coder

A programmer who most of the time uses third party library or technology to make its application and the code produced is reusable and easily readable.

#4 – Frankenstein Coder

A programmer who use third party library, can make an application works but he produces hard coded application and not reusable for other application and not easily readable.

Kangaroo Math Year 2020 Result

I encouraged Aliesha and Hadeef joined Kangaroo Math Competition (KMC). I want to give them exposure on problem solving and develop their interest in Math.

Based on Kangaroo Math website the result is categorized as below:

Aliesha’s Kangaroo Math Result:

Y2020 (Benjamin) – Honorable Mention
Y2019 (Ecolier) – Honorable Mention
Y2018 (Ecolier) – Honorable Mention

kangaroo math result Y2020 honorable mention aliesha
kangaroo math result Y2020 honorable mention aliesha

Hadeef’s Kangaroo Math Result:

Y2020 (Ecolier) – Honorable Mention
Y2019 (Ecolier) – Certificate of Participation
Y2018 (Ecolier) – Didn’t join

kangaroo math result Y2020 honorable mention hadeef
kangaroo math result Y2020 honorable mention hadeef

Full Results of KMC 2020

Majlis Perbandaran Bentong Submit General Complaint

I was looking to submit my road complaint from Majlis Perbandaran Bentong, Pahang website. I just found its email but after sending email, no reply from them.

Fortunately someone informed me that all local council use SISPAA (Sistem Pengurusan Aduan Awam) to submit any complaint to local council.

For Majlis Perbandaran Bentong, you can submit your complaint here:

Majlis Perbandaran Bentong SISPAA – Submit General Complaint

majlis perbandaran bentong submit general complaint
majlis perbandaran bentong submit general complaint

To check your complaint status:

Majlis Perbandaran Bentong SISPAA – Check Complain Status

majlis perbandaran bentong check complaint status
majlis perbandaran bentong check complaint status

The good thing is, MPB does update the complaint status.

majlis perbandaran bentong update complaint status
majlis perbandaran bentong update complaint status

MCO & Property Auctions

I posted this article because I think it is very useful for my consideration to buy property auction during MCO.

———————————————————-

IN light of the Covid-19-triggered movement control order (MCO) imposed on March 18 and still continuing, numerous transactions were affected. I am writing in particular about the sale of auctioned properties that was due to be completed during the MCO period.

Land offices and law firms were not allowed to operate during the earlier phases of the MCO. This meant private caveats could not be lodged, and balance purchase prices could not be paid.

In an Ipoh High Court case, a successful bidder from a public auction sought an extension of time to complete the sale. The last date to pay the balance purchase price fell during the MCO period, on May 6. The bidder argued that he would be greatly prejudiced if held responsible for the non-performance of the obligation given that the MCO was beyond the control of the parties, making the performance of obligations impossible.

Further, the 10% reserve price he paid would be forfeited if the balance purchase price was not paid within the stipulated 120 days, as per 257(1)(g) of the National Land Code 1965. He argued that the MCO had the effect of robbing him of 50 days from the 120 days allowed to complete the purchase.

In dealing with this, the High Court examined the intent of Parliament behind 257(1)(g). The court held that the said section was enacted to protect the interest of the chargor and to prevent any non-

serious bidder from participating in auctions. Simply put, both the interest of the chargor and the chargee must be safeguarded. Both parties must be afforded the right to be heard.

In the Ipoh case, the court recognised that it is indeed unfortunate that the successful bidder was placed in this predicament through no fault of his own, i.e. the imposition of the MCO. Additionally, there are no legislative provisions to deal with situations caused solely by the restrictions of the MCO.

However, the application for extension of time was not allowed. The court ultimately found that the bank and chargor’s interests were not safeguarded.

Why? Here are some of the key takeaway points that others in the same position should note.

As a successful bidder, you must show the following:

1. That you are willing and able to pay the balance purchase price, in that you obtained a bank loan before the expiry date. This has to be apparent in your affidavit in support. This was shown in the Ipoh case.

2. That the cause papers are served on the chargor. This is important because the chargor has the right to be heard in a request for extension of time, and for the chargor to be heard in court, he must be given notice of the proceedings. As such, the cause papers must be served on the chargor and an affidavit of service must be filed to show this is done. This was not done in the Ipoh case.

3. That you are prepared to pay the interest imposed on the chargor’s account during the period of extension sought. This was not done in the Ipoh case.

Basically, you must show that the interests of the bank and the chargor have been safeguarded.

From the bank’s point of view, in the event a successful bidder seeks an extension of time to complete the sale, it would be prudent to consider imposing these conditions before agreeing to the extension:

1. The successful bidder must have the chargor’s consent for the extension of time sought.

2. Interest must be imposed on the chargor’s account after the completion date, to be paid by the successful bidder.

3. The successful bidder must undertake to indemnify the bank

if any legal action is taken against the bank if the sale is set aside due to the time extension sought.

However, do note that these are considerations applied before the Temporary Measures for Reducing the Impact of Coronavirus Disease 2019 Bill 2020 was passed by Parliament on Aug 25. The courts’ approach to a similar circumstance may change once the Bill comes into force. We anticipate that this Bill will reconcile the gap between dealing with circumstances caused solely by the MCO and compliance with mandatory legislative provisions, like s.257(1)(g) of the National Land Code 1956.

VIVIAN KUAN

Kuala Lumpur

Source: The Star

How To Do Prepayment of AIA Housing Loan

I hava a housing loan with AIA which carries 4.99% fixed interest rate. At current OPR of 1.75%, this interest rate is quite high.

So to reduce the interest, I decided to do extra payment or prepayment to my housing loan.

I contacted AIA and they shared me the method using Maybank2u. I think  it will be similar with other internet banking.

Maybank2u Payee Method

  1. After login to Maybank2u, select Pay.
  2. Add as favorite. Select AIA Bhd as Payee. Put your policy number without letter M.
  3. Request TAC after add as favorite, you can pay any amount you want. There is no minimum amount.
aia prepayment - m2u select pay
aia prepayment – m2u select pay
aia prepayment add new favorite AIA Bhd
aia prepayment add new favorite AIA Bhd
aia prepayment - policy number without M
aia prepayment – policy number without M

AIA Mortgage Contact Details

Telephone: 03 2056 3359 / 03 2056 3374
Email: my.loan@aia.com
Document from AIA regarding prepayment

Selenium Webdriver How To Increase Time Out for Page Load, Script Load or Element Locator

I couldn’t find at Stackoverflow on how to increase the timeout and the Selenium API not that easy to find on how to use it.

For Selenium WebDriver using NodeJS below is how to increase its time outs. The number is in milliseconds.

From Selenium Documentation

The following timeouts are supported (all timeouts are specified in milliseconds):

  • implicit specifies the maximum amount of time to wait for an element locator to succeed when locating elements on the page. Defaults to 0 milliseconds.
  • pageLoad specifies the maximum amount of time to wait for a page to finishing loading. Defaults to 300000 milliseconds.
  • script specifies the maximum amount of time to wait for an evaluated script to run. If set to null, the script timeout will be indefinite. Defaults to 30000 milliseconds.

Reference:
https://www.selenium.dev/selenium/docs/api/javascript/module/selenium-webdriver/lib/webdriver_exports_Options.html

Selenium User Agent vs Normal Browser User Agent

I noticed lots of websites now implement anti robot from website scraping. Most of them using fingerprintjs.com technology where it uses browser users agent as part to detect whether it is a robot or human.

I use Selenium Webdriver to scrap few websites. When I browse the website, it shows the content but if using Selenium it shows empty content.

You can test the fingerprintjs here to check whether it detects human or robot.

If using Selenium for Chrome and Firefox , fingerprintjs will detect it as robots. However if using Selenium Safari, it detects Selenium as human.

fingerprint detect selenium for safari as human
fingerprint detect selenium for safari as human

Safari when launch by default is in incognito mode so maybe harder for fingerprintjs.com detect it.

Below are comparison between Selenium for Chrome, Firefox and Safari browsers user agent.

Legend:

Yellow colored rows means there are differences between Selenium and normal browsers user agent.

Chrome Browser

NoChrome - Normal Browser User AgentChrome - Selenium User Agent
1Host: localhostHost: localhost
2Connection: keep-aliveConnection: keep-alive
3Cache-Control: max-age=0
4Upgrade-Insecure-Requests: 1Upgrade-Insecure-Requests: 1
5User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36
6Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
7Sec-Fetch-Site: noneSec-Fetch-Site: none
8Sec-Fetch-Mode: navigateSec-Fetch-Mode: navigate
9Sec-Fetch-User: ?1Sec-Fetch-User: ?1
10Sec-Fetch-Dest: documentSec-Fetch-Dest: document
11Accept-Encoding: gzip, deflate, brAccept-Encoding: gzip, deflate, br
12Accept-Language: en-US,en;q=0.9,id;q=0.8,ms;q=0.7,fr;q=0.6Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
13Cookie: chat_uuid=1458159213.1598025760; gr_session=17411c1fd31-2125f7fe5bbd95cd; gr_reco=17411c1fd70-baa36285123101b1; utag_main=v_id:017411c1fb650017fec4094270bb03079001a07100942$_sn:4$_ss:1$_st:1598096705870$_pn:1%3Bexp-session$ses_id:1598094905870%3Bexp-session

Firefox Browser

NoFirefox - Normal Browser User AgentFirefox - Selenium User Agent
1Host: localhostHost: localhost
2User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:79.0) Gecko/20100101 Firefox/79.0User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:79.0) Gecko/20100101 Firefox/79.0
3Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
4Accept-Language: en-US,en;q=0.5Accept-Language: en-US,en;q=0.5
5Accept-Encoding: gzip, deflateAccept-Encoding: gzip, deflate
6Connection: keep-aliveConnection: keep-alive
7Cookie: _ga=GA1.1.1739912853.1548032065; gr_reco=1688e9dab95-b5d644815084ad40; utag_main=v_id:01688e9dad18001ff21f0bc7b4a800052009100f0093c$_sn:7$_ss:1$_st:1594889778490$_pn:1%3Bexp-session$ses_id:1594887978490%3Bexp-session; uuid=092deff09bc14cec8f32915260380536; cto_lwid=3ff13ed0-ccf0-46a0-b3d7-8a2e1cadcb3f; cto_idcpy=752176f4-9133-4eb6-a23d-8aacb880eaee; __gads=ID=258eba7044613b5a-22a30c3f84c20074:T=1594886702:S=ALNI_MYCzBeDMjB7doBDh_F5BZztWvpLvw; chat_uuid=407415995.1568209940; cto_bundle=aJ5M6V9JZCUyRjlLVVRRMG5ucUg0RUMlMkJtYk53UXpDJTJGY0Z3b09EU1RTZHpyY0xER1o0ektySUZZdU9iQ3d5UWJsOXFqUFZ4UDlZaGF4WmR4eThta2Q2S2o1NTVFd2Ruc1lBcVNJVW1IQ1ZlN1hYWTZ1VGpCZXJIZjRnRnhnZ0lEc3VuTkg3dCUyQmtTc0ZkajQ2WnJ6JTJGR0w5T3ElMkJEa1NlbjNCZlZzc2k0eVJYVU5oOEtPTjAlM0Q; _ga_SDQJRXDGN4=GS1.1.1596669834.9.0.1596669837.0; __atuvc=0%7C28%2C1%7C29%2C0%7C30%2C0%7C31%2C1%7C32; _fbp=fb.0.1586054074356.121762323; mudahHash=ec9f3f6655e4ccc0814a616dd3ee38f75d7ce494; cto_bidid=wxF3T19jb2hMYzJ1V0dITEZHRjRxMURWMWZrSTNmaDIlMkZ3RzBxTllBczB0amZMMWFOTDg2JTJGdU8xMTQzWDNzMm9TRzh0cmJHUEZFRTR0aUJWWDZQbHA1ZFhUd042cDMlMkIxdkdpOEt6S3ZqWlZ6YUNySSUzRA; _gcl_au=1.1.919768330.1594886698; gr_session=17356a7b66b-a9389a87a3e2a370
8Upgrade-Insecure-Requests: 1 Upgrade-Insecure-Requests: 1

Safari Browser

NoSafari - Normal Browser User AgentSafari - Selenium User Agent
1Host: localhost Host: localhost
2Upgrade-Insecure-Requests: 1 Upgrade-Insecure-Requests: 1
3Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
4User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15
5Accept-Language: en-us Accept-Language: en-us
6Accept-Encoding: gzip, deflate Accept-Encoding: gzip, deflate
7Connection: keep-alive Connection: keep-alive

Conclusion

Most number of differences found in Chrome and followed by Firefox. Safari doesn’t show difference between Selenium and normal browser user agent.

Does it means, it is much easier to trick anti robot using Safari?

ChromeFirefoxSafari
310

Mobile Data Coverage & Speed at Genting Permai Maxis, Celcom, Digi, Unifi Mobile & Yes

I go to Genting Permai quite often. For all Malaysians, we are addicted to fast internet access. Based on my experience and feedback from friends below are the perceptive speed.

Mobile Data Coverage & Speed

As of June 2020

Maxis: Fast
Yes: Fast
Celcom: Medium (620Kbps as of 06/08/2020)

celcom speed 620kbps genting permai 20200806
celcom speed 620kbps genting permai 20200806

Digi: Don’t have feedback yet
Unifi Mobile: Don’t have feedback yet

Genting Permai Location

genting permai mobile coverage speed
genting permai mobile coverage speed