19 Dec 2013 @ 7:33 AM 

First of all, I would like to thank HP and IvyWorldwide for sending my this micro server for my review, as part of HP-tech blogger continuation engagement.

HP Proliant Micro Server Gen8

It is the HP Proliant Micro Server Gen8. This micro server looks very cute in its cube size!


The server comes with Intel Pentium CPU G2020T @2.5 GHz two cores CPU and 16 GB RAM. Although it’s not a high end server, I would say it’s great of for home or small business uses.

I installed Windows Server 2012 as my host OS. Running couples of Virtual Machine on the Hyper-V. Great performance.


Placing it beside my 42” LG Smart TV as the monitor make a great experience with the big wide screen.


Five things I like most on this micro-server

  1. Compact and cute cube size, make it easy to be placed.
  2. Moderate performance but good enough for home and SMB.
  3. Silent. This is one of my favorite aspect. Unlike some server which making a lot of noise. This micro-server is very silent.
  4. Affordable price. Starting from $ 449, this micro-server is really affordable and competitive if you were to compare with other similar ones.
  5. Customizable with pre-defined specs as shown here.


All in all, I find this is nice and interesting micro-server, very suitable for SMB and IT professional like me who like to experiment stuff.

Posted By: admin
Last Edit: 19 Dec 2013 @ 07:33 AM

EmailPermalinkComments (0)
Categories: Uncategorized

 05 Nov 2013 @ 2:11 AM 

This post is to provide customer who are considering / has decided Windows Azure for Dev / Test environment.

Windows Azure’s Values for Different Stakeholders in Dev / Test Scenario



Application sponsor

BUIT/ Developers

Central IT/ Infrastructure Ops

Faster time to market

Faster infrastructure provisioning and rollout times on Windows Azure enable your application teams to make changes faster

Instantly provision any amount of test/development resources, when you need them

Allow your users to self-provision based on a set of policies and rules that you set upfront

Lower cost

Minimize your investment and pay only for what you use on Windows Azure for testing and development

Only pay for what you use with metered charge-back for all resources on the public cloud

Free up on-premises DC capacity by moving test/development to Windows Azure

Less risk

Minimize your upfront investment using Windows Azure, with the option to expand rapidly as required

Moving test/dev to Windows Azure gives you access to capacity when you need it, while complying with governance policies set by central IT

Get back control over your IT environment, while giving your end-users the same benefits as public cloud / infrastructure ownership


The Solution

How’s the solution going to look like for Dev Test? Well, it could be as simple as spinning up a VM and manage it from on-premise by the developer, like you can see in below Solution 1. Or it might be more advanced as shown in Solution 2, which involving Virtual Network: Site to Site VPN.

Solution 1 – Simple


Solution 2 – Advanced


Get Started Resources

Here’re are some of the on-boarding guide for you go get started dev / test in Windows Azure:

Creating and preparing Infrastructure Services

Managing Infrastructure Services via Scripting


A recording session that’s worth to be checked out: Building Your Lab, Dev, and Test Scenarios in Windows Azure Infrastucture Services (IaaS)

channel9 Hope this helps.

Posted By: admin
Last Edit: 05 Nov 2013 @ 02:15 AM

EmailPermalinkComments (0)
Categories: Uncategorized

 06 Aug 2013 @ 3:21 AM 

Recently, I found an analysis paper about cloud server performance conducted by an independent cloud performance metrics company, Cloud Spectator.

This post is to summarize the paper and I definitely encourage you to read the full report over here: http://www.iqcloud.net/wp-content/uploads/2013/07/Cloud-Computing-Performance-A-Comparative-Analysis-of-5-Large-Cloud-IaaS….pdf

Objective of analysis study

The objective of the paper is determine the price-performance value of the cloud providers. Providing some valuable insight for customer when selecting their prefer cloud vendor.


Figure 1 – Principle of value proposition [figure from the paper]

Who are being compared

The study (done in June 2013) compared five large IaaS providers in the industry:



The tests were run for 3 times in 5 consecutive days: May 25, 2013 – May 29, 2013.

VM Size

The most common size for cloud server, Medium Size (or equivalent / similar setup) was chosen from the 5 cloud vendors:


Figure 2 – Medium VM Spec [figure from the paper]


The tests used Unixbench 5.1.3 as benchmarking the performance of Linux OPS running on virtualized infrastructure, producing rating out of 10 stars. Details of Unixbench can be found here: https://code.google.com/p/byte-unixbench/


Two important pieces of info are collected:

  • Performance: how well the provider scores on Unixbench, and how consistent the scores are.
  • Price-Performance: after performance scores are established, we factor in cost to understand how much performance a user can expect on return for every amount of money spent, i.e., the value.

The Results

Performance Only

The performance result shows that Windows Azure provides the best performance and notably 3 times higher than AWS EC2 on average!


Figure 3 – Performance Only Result [figure from the paper]


Figure 4 – Average Unixbench Score, derived from Figure 3 [figure from the paper]


Retail hourly price of the cloud providers are captured (pay-as-you-go) basis on date of experiment.


Figure 5 – Pay-per-hour price [figure from the paper]

By taking each score and dividing by the price, we can get a relative price-to-performance score for each provider. And here are the score (The higher the score, the better):


Figure 6 – Price-Performance Result [figure from the paper]

CloudSpecs Score

CloudSpecs score is a further normalized value from Figure 6, taking the highest value to 100. And here’re the scores:


With the cloudspecs score, the ratio of each of the providers are formed as following



While acknowledging that Unixbench is just one test, customers may always consider other factors when selecting their cloud vendor.

To conclude, Amazon EC2 and Windows Azure offers the lowest price at $0.12 per hour. However, Windows Azure performs much better than EC2 in this experiment (approximately 3 times). The experiment also shows that Rackspace scores worst in term of price-performance.

Posted By: admin
Last Edit: 06 Aug 2013 @ 06:11 AM

EmailPermalinkComments (1)
Categories: Windows Azure

 02 Aug 2013 @ 1:50 AM 

SQL Database and its three replicas

You might have heard that SQL Database (formally SQL Azure) is a scalable and highly durable database service on the cloud and there’re multiple replicas automatically provisioned when we create a database. It’s true that there will be three replicas store for each database. This is in fact purely for HA purpose in case one of the machine hosting the SQL Database service goes down.

Customers are transparent and inaccessible to these three replicas. In another word, if we accidentally delete one of the table (or entire database), it’s really gone Sad smile! (Luckily it’s only a demo database)

I had experienced that before and tried to contact the Azure Support. There’s no way to revive our deleted database anymore.

Design and archive it our own

As a cloud architect, we should really be aware of this. In fact, for many projects I’ve worked on of the last three years, the archival or backup mechanism has been always be part of my design. This is because at that time, there’s no built-in automated backup in SQL Database for customers.

How I did that?

V1. sqlcmd and bcp + Worker Role = Automated Backup

At earlier day, we used sqlcmd to backup the script and bcp to backup the data. This may sound a bit surprising for some of you and that’s really what we can do at that time. We created a worker role and ran in schedule (typically daily) to perform backup and push the data to Azure Blob Storage.

The output is 1 .tsql file and copies of .dat file per database table.

V2. bacpac + Worker Role = Automated Backup

Later, Microsoft introduced bacpac as part of import and export solution for both SQL Server and SQL Azure. The output of this technique is .bacpac file which is similar to .bak file as we familiar of.

There was also an UI in management portal that allow us to export and import the database to Azure Storage on-demand basis, but still lack of automated way.  Alternately, there’s exe (command line interface) that eventually calls WCF service to perform backup. We twisted our design from sqlcmd + bcp to just simply use the command line.

Now, it’s built-in supported!

Finally, I notice that it’s built-in provided in management portal. SQL Database – Configuration. And you can find it by choosing Export Status to Automatic.

You can further specify the frequency of the backup on every N days. You can also specify the retention to only keep the last N days (so that your storage account won’t grow too big over the time).


After the configuration, you can see that the bacpac is finally pushed to my storage account.


Posted By: admin
Last Edit: 02 Aug 2013 @ 01:51 AM

EmailPermalinkComments (0)
Categories: Uncategorized

 08 Jul 2013 @ 7:22 AM 

Community Technology Update (CTU) 2013 will be held on 27th July 2013, organised by the Community Leads from various Singapore based User Groups and MVPs. We’re putting together some of the best talents from the island (and our closest neighbour, Malaysia), in order to share our experiences across the series of Microsoft Technologies that we believe all of us truly care about.

Register now!

How do I sign up?

Follow the instructions in the URL to register – http://www.sgdotnet.org/Pages/Registration.aspx

How much does it cost?

For early bird registration, it’ll cost you $12.00.

For walk-ins on actual day, it’ll cost you $20.00. So we strongly encourage you to register beforehand so that we can cater sufficient food for everyone.

What is CTU?

CTU is in our 10th Iteration – We’re proud to be organised by the Community, for the Community. In true spirit of sharing, our speakers all purely volunteers from the field like anyone of you within the Microsoft ICT industry. CTU is held bi-annually, and is the biggest community event in Singapore.

Who should Attend?

Anyone who’s interested in the Microsoft technologies, we’ve a range of topics meant for

  • IT Professionals
  • Developers
  • Database administrators

And it’s reserved specially for user group members!

Session Information

0830 – 0900 Registration
0900 – 0930 Key Note
Level 22CF-15 Level 22CF-12 Level 22BR-01
0945 – 1100 WAV01Technical Overview of SVC video in Lync 2013 (Level 200)

Speaker: Brenon Kwok

ITP01Accelerate your Windows XP Deployment via Application Compatibility Testing with Citrix AppDNA (Level 200)

Speaker: Jay Paloma

DEV01Customizing SharePoint 2013 Search Experiences

Speaker: Mohd Faizal

1115 – 1230 WAV02Discover the new Exchange 2013 and benefit from it’s improvement (Level 200)

Speaker: Triston Woon

ITP02Windows 8.1

Speaker: Desmond Tan

DEV02What’s new, branding in SharePoint 2013

Speaker: Loke Kit Kai

1230 – 1330 Lunch Break
1330 – 1445 WAV03Microsoft IO (Infrastructure Optimization) and Microsoft Technologies. (Level 200)

Speaker: Sarbjit Singh

ITP03Secure, Centralised Administration Using PowerShell Web Access (Level 200)

Speaker: Matt Hitchcock

DEV03Building on the new SharePoint 2013 Apps Model? 10 things to look out for

Speaker: Patrick Yong

1500 – 1615 WAV04Microsoft Business Intelligence with Excel and SharePoint 2013 (Level 200)

Speaker: Tian Ann

ITP04Evaluating options for tiered storage in the enterprise – a look at the options, benefit, features and use cases (Level 200)

Speaker: Daniel Mar

DEV04Changes on SharePoint Workflow Authoring Tools

Speaker: Emerald Tabirao

1630 – 1700 Closing Address & Lucky DrawLevel 21 Auditorium

Useful Links

Track Information

Frequent Asked Question

Lucky Draw

Stand a chance to win a Microsoft Surface Pro (128GB w Type Cover) worth close to $1500 in the LUCKY DRAW!!!

Surface Pro

Posted By: admin
Last Edit: 08 Jul 2013 @ 07:22 AM

EmailPermalinkComments (0)
Categories: Uncategorized

 09 Jun 2013 @ 1:32 PM 

I’ve so far covered 15 bad practices in the past three posts and I truly hope that all ASP.NET developers be aware of them including the consequences of each.

Today, I’ll be covering another 5 as the part four.

16. Style Properties on Controls


  • The four thousand specific control style properties, e.g.
    • EditItemTemplate-AlternateItem-Font-ForeColor-Opacity-Level :S


  • Maintainability
  • Bigger page size resulting slower performance since it not being cached


  • CSS stylesheets


17. Filtering records on app level, not database level


  • Bringing whole list of records from database and filter them on the application level
using (NorthwindEntities ent = new NorthwindEntities())
    var productList = ent.Products.ToList();

    foreach (var product in productList)
        if (product.UnitPrice > 1000)


  • Unnecessary traffic
  • Unnecessary processing resource


  • Write proper query (or LINQ Query) to database
  • Get only what you need
using (NorthwindEntities ent = new NorthwindEntities())
    var productList = ent.Products.Where(x => x.UnitPrice > 1000).ToList();
    foreach (var product in productList)

18. Cookieless Form Auth & Session


  • Enable cookieless forms authentication or session


  • It could make your users being the victim to hijacking attacks


  • Enable “require cookies” for these features
  • Consider using only secure (SSL) cookies for sites serving sensitive information


19. Missing “!IsPostback” check


  • Forget the !IsPostBack check if you’re not expecting the execution on every postbacks.
  • You can say that, this is so fundamental.
  • Yes it is, but I’ve still seen quite couple of developers make this mistake!
protected void Page_Load(object sender, EventArgs e)
    //initialize the code here


  • Overhead on the unnecessary calls might occurs
  • Trigger incorrect / unexpected value


  • Understand what you’re really trying to achieve
  • Put !IsPostBack check if you’re to only set the value for one first time.
protected void Page_Load(object sender, EventArgs e)
    if (!IsPostBack)
        //initialize the code here

20. Putting Non-common scripts in MasterPages


  • Putting unnecessary / non-common scripts / codes in masterpages


  • All pages using the masterpages will be inherited the scripts
  • Inappropriate usage may cause inefficiency
  • Huge page size


  • Put only what really needed to be shared across child pages
  • Consider using NestedMasterPages while part of scripts need to be inherited


That’s all for today’s 5 bad practices. Hope that I can compile some more and share with you again in future posts.

See you!

Posted By: admin
Last Edit: 09 Jun 2013 @ 01:32 PM

EmailPermalinkComments (0)
Categories: ASP.NET

 02 Jun 2013 @ 2:41 PM 

Hello everyone! Hope the first and second articles are useful to you. This is third article of ASP.NET Bad Practices: What you shouldn’t do in ASP.NET. The next five bad practices are equally important as those discussed earlier.

Some of them are related to web.config. They are as following:

11. Turning “off” Custom Error in Production


  • Set Custom Error to OFF in Production


  • Source code, stack trace, others info will be exposed
  • Version of ASP.NET, Servers, etc. exposed


  • Of course, set it ON or RemoteOnly
  • Consider using “friendly” custom error page


12. Setting EnableViewStateMac=false in production


  • Set EnableViewStateMac = false
  • Do not set it to false even though you’re not using viewstate




  • Always set it to TRUE



13. Turning Off Request validation


  • Turning off the RequestValidation
  • RequestValidation will help to warn developer that there’s potential XSS (Cross Site Scripting) occur when it’s turned off.
  • Here’s the screenshot of the warning



  • You know what you’re doing
  • Make sure that everything are properly HTML-encoded


  • It creates opportunity for Cross Site Scripting


  • It’s actually on by default.
  • Use a rich editor with built-in-HTML-encoded feature


14. Too Much “inline” javascript / css


  • Writing too much inline javascript / css on the ASPX / HTML pages


  • Lack of caching
  • Code maintenance


  • Have it on the different files
  • The files will be cached on browsers
  • *Make use of CDN (Content Delivery Network) to improve performance further


15. Impersonation: do you really need to do so?


  • Overuses / improper usage of impersonation
  • Especially, impersonate to “admin” user


  • Posing security risk
  • Prevents the efficient use of connection pooling
  • When accessing downstream databases
  • Performance degradation


  • Clarify:
    • Do you really need to impersonate?
  • If you do, remember these:
    • Consider using programmatic instead of declarative impersonation
    • When impersonating programmatically, be sure to revert to the original context
  • Alternatives approaches are depending on scenarios

Some References On This Point:


I’ll continue to updating the post again in future, making this series of posts an awesome ones. Stay tuned.

Posted By: admin
Last Edit: 09 Jun 2013 @ 05:12 AM

EmailPermalinkComments (0)
Categories: ASP.NET

 19 May 2013 @ 5:55 AM 

This is the second article of ASP.NET Bad Practices: What you shouldn’t do in ASP.NET series of blog post. You may want to take a look at the first article here. Now let’s carry on to discuss the next 5 taboos in ASP.NET.

6. Leftover Debug Code



*in the production


  • Longer compilation time
  • Longer code execution
  • More memory usage at runtime
  • Images and scripts are not cached

You can read the post by Scott Gu and Scott Hanselman on how serious this bad practice is.


Always set debug=“false” in the production

*By default, web.config transformation will transform the debug to false during publishing. So don’t try to be naughty by turning it to true.


7. Improper usage of static Variable


Using static variable in ASP.NET improperly

UNLESS you know what you’re doing and the impact


  • Inconsistent value during concurrent access
  • It will be shared across other requests / users
  • Value might be overridden by one and another


  • Read only scenario => use const or readonly
  • Maintaining value when post back => use viewstate
  • Maintaining value across multiple page => use session
  • To cache the data => use cache


Static variable is useful when:

  • Locking object to avoid multi-write synchronization
  • Global-wide level object sharing (static VS application object)


8. Performing heavy tasks in databound event


  • Calling heavy tasks in each databound event
  • Heavy tasks:
    • SQL calls,
    • Web service calls
  • DataBound Event
    • RowDataBound in GridView
    • ItemDataBound in Repeater
  • *Especially NO PAGING


It will be called N times, while N denotes page sizes


If your page size is relatively small. But still be careful!


  • Using custom data source to enable server side paging
  • Generated from view (in you’re using EF)


9. Breaking the stack unnecessarily when you re-throw an exception


Breaking the stack trace unnecessarily when re-throwing exception with “throw ex”


  • Losing the original stack trace
  • It’s harder to trace back / debug which codes really causes error during production


You really expect the outcome


  • “throw”
  • Wrapping up the exception with another exception while retaining the original as the inner exception


10. Storing clear-text password in config files


Storing clear-text password in config files


  • Easy to get stolen
  • Unauthorized access


  • Encryption

aspnet_regiis -pe "connectionStrings" -app "/SampleApplication"

  • Combined with another mechanism such as certificate


Ok, I think we’re good to stop here today. Shall continue this again in the next post. See you!

Posted By: admin
Last Edit: 09 Jun 2013 @ 05:12 AM

EmailPermalinkComments (0)
Categories: ASP.NET

 11 May 2013 @ 1:18 AM 

I’ve been blogging for Windows Azure stuff for the past 3 years. Nonetheless, I’m still catching up .NET and its family pretty closely.

We’ve been listening to the best practices so far from anywhere (such as MSDN, conferences, blogs, etc.). But whether to follow the best practices or not could be another side of the story. Today, I’m gonna blog something special (at least to me). Not best practices, but bad practices. Aha! This serves as the warnings to you when developing ASP.NET application, things that you shouldn’t do in ASP.NET.

I’ve been gathered quite a few bad practices from various sources including personal experiences, feedback from colleagues, online articles and blogs, presentations, MSDN, and so many more. I’ll be discussing 5 of them first in this post will catch up more in upcoming posts.


Don’t get me wrong when you see the title. I’m not saying to use ASP.NET is a bad practice. Not even saying that ASP.NET is bad. To me, ASP.NET is awesome web development platform and I really love it. In fact, some of the web vulnerabilities or shortages has been answered and covered by ASP.NET by default.

Unfortunately, sometimes there’re always misuses, overuses, abuses, or deprecated features that we should really paying attention to. Coz they really can be timed-bomb in your house and make your days worst.

Most of them within the discussion here are ASP.NET related. However, you might see some of them are pretty generic web programming mistakes / bad practices, which also applicable in ASP.NET.

Additionally, you will also find some that are generic in .NET which applicable in others .NET app, not only applicable in ASP.NET. But I believe they’re significant enough to be in the discussion.

Alright, now let’s go for them now!

ASP.NET Bad Practices


1. Not Validating User Input

This is very fundamental yet frequently-made mistake. The impact might be pretty serious if it’s combined with others bad practices (discussed subsequently)


  • Forget to validating user input
    • Think all users are bad guys!
    • Especially Textboxes and FileUploaders


  • Potential of SQL Injection victim
  • Potential of Cross Site Scripting victim


  • Validate! Validate! Validate!
    • max length
    • type (int, string, etc.)
    • special character (with Regex)
  • Double Protection
    • Client Side + Server Side
    • ASP.NET Validation Controls


2. Connection to database with inline SQL


  • Executing database command with inline SQL query and concatenated string


string cmd = string.Format("SELECT ProductId, ProductName, QuantityPerUnit, UnitPrice FROM PRODUCTS WHERE ProductName like ‘%{0}%’", searchText);


  • Potential of SQL Injection victim


  • Cmd.Parameters.Add()
    • This is slightly better


sqlCmd.Parameters.Add(new SqlParameter("@ProductName", txtProductName.Text));


  • Stored Procedure
  • ORM (Entity Framework / NHibernate / etc.)


3. User accounts privilege on database access


  • Give more than sufficient permission database access


  • Unauthorized access
  • If it’s SQL Injected, you will be like this:



  • Find out what permission the app really needs
  • Give only what they need
    • Execute Store Proc only
    • Execute Table only


4. Paging in data controls


  • Using Default Paging on ASP.NET data controls
  • It’s actually depending on your data source


  • It’s bringing entire data in the table while just showing a fraction of it
  • Unnecessary round trip from web server to DB Server


  • When data is relatively small
  • Assess your trade-off
    • Dev effort VS performance


  • Using custom server side paging
  • Using effective data source:
    • ADO.NET EF Data Source
  • TIPS: Use SQL Profiler to see the generated T-SQL when performing paging


5. Storing big objects in viewstate and sessions


  • Storing big / plenty objects in ViewStates and Sessions


  • Performance
  • Big size page, due to viewstate, like this:


  • Memory leakage on web / app server


  • Know really what you need
  • Store only what you use
  • Disposing them away when no longer in used


Okay, that’s all for the part 1. Check out again the part 2 soon.

Posted By: admin
Last Edit: 09 Jun 2013 @ 05:12 AM

EmailPermalinkComments (2)
Categories: ASP.NET

 29 Apr 2013 @ 1:41 PM 

27th April 2013 was an awesome day! Why? On that day, we have events for more than 96 locations, 154 speakers, 194 sessions, and 7432 attendees. That’s what we called Global Windows Azure Bootcamp. Cool, isn’t it?


We also ran one in Singapore, participated by about 70 attendants. Although it was a rainy Saturday morning, the attendants are all very passionate. Deeply appreciate it guys!


Welcome by Wely & Faizal (AzureUG.SG Founders)

We started the event with welcome not from me and Faizal as the founders of the Windows Azure User Group Singapore. We talked briefly about how the UG was started, some statistic on Global Windows Azure Bootcamp, Sponsors, and Agendas of the day.

Windows Azure State of Union – Hammad Rajjoub

Right after the welcome note, Hammad started his session of Windows Azure – State of Union. Hammad did a great job to describe the overview of the entire Windows Azure core components and building block.

_N7K3639 _N7K3640

Windows Azure Web Sites – Faizal

The second session was delivered by Faizal about Windows Azure Web Site. The session was more demo-centric and covers many ways deploying website on Windows Azure Web Sites (code name Antares).

_N7K3657 _N7K3642

Windows Azure Mobile Service – Hammad Rajjoub

After lunch, Hammad continued his next topic about Azure Mobile Service. Regardless what mobile platform you’re using (iOS, Android, Windows Phone), Mobile Services takes care of the backend for you.

_N7K3643 _N7K3640

Designing Allocation Planning Engine with Windows Azure Cloud Services – Wely Lau

The subsequent one was my session that describe about Windows Azure Cloud Services. But I took a different approach of delivery.

The first part illustrated about the basic concept of Windows Azure Cloud Services including the roles, service model, SDK, and deployment. I believe people would love the second part more as I illustrated on of the project as the case study. How to design a cloud application with various component on Windows Azure.

 IMG_8272 IMG_8283

Windows Azure IaaS – Richard Qi

The last session was delivered by Richard Qi, the infra guy. Richard explained Windows Azure IaaS covering Virtual Machine and Virtual Network. He also covers a few possible scenario to deploy key server apps such as SQL Server and SharePoint on Azure VM.

IMG_8291 IMG_8295 IMG_8286

And here’re some of Microsoft & MVP folks, thanks for your assistance on the event as well.


Lucky Draws

After all sessions were done, we spent some time to have the lucky draw, sponsored by global sponsor. And here are some of the winners. Congratulations Smile 

IMG_8361 IMG_8357 IMG_8337 IMG_8374

We would like to thank a lots of people to make this happen successful:

  • Global Sponsors
  • Global Organizers
  • Microsoft (especially DPE team & MVP team)
  • Fellow MVPs and volunteers

And finally here’s our group photo!

Hope to see you again in the upcoming meet-ups and event.



Posted By: admin
Last Edit: 29 Apr 2013 @ 02:24 PM

EmailPermalinkComments (3)
Categories: Events

 Last 50 Posts
Change Theme...
  • Users » 123
  • Posts/Pages » 80
  • Comments » 108
Change Theme...
  • VoidVoid
  • LifeLife
  • EarthEarth
  • WindWind « Default
  • WaterWater
  • FireFire
  • LightLight

About Me

    No Child Pages.
 Papa Louie Italian Restaurants in Papas Games by Flipline. . beste forbrukslån . write my essay prompt essay