I have been doing a lot of virtualization in the past 2 months or so. The engine of choice so far is VM Ware. Microsoft also has a virtualization engine called Virtual PC - I have never used it, but a lot of people that I know use VM Ware, so basically I just follow suit. Maybe when I have a chance to play around with Virtual PC, I will write a blog post comparing them against each other.
What I want to highlight in this post is some of the tips and tricks that got mine to work as I needed. Your needs may differ, but hopefully some of these are generic enough that they can still be helpful.
VM Ware Server site: http://www.vmware.com/products/server/
When you click download, you will need to fill in a form to get your key. It is free, so go ahead and fill in the form and the instruction to get the key will be emailed to you. Once you get the downloaded file, run it to execute the installation procedure.
Installation is pretty straight forward - just follow the instruction provided by the installer. At some point, you will be required to enter a license key - this is the key you got from the registration process.
Once the installation is done, usually it will create a shortcut on your desktop called "VMWare Server Home Page". This is the main executable that will launch the interface for VMWare Infrastructure interface. When you run it (by double clicking it), it will open a browser (whatever browser set to be the default) and there are 3 things that you will typically see.
1. There is a problem with this website's security certificate. If you get this screen/page, all you need to do is to click on the second link on the page that says "Continue to this website (not recommended). "
Then on the next screen you will get a login screen. This is a login to the VMWare Infrastructure interface - you can login using the username and password that you use to login to the computer. So if you login to the computer using "myname" and with password "mypassword", then you use the same username & password to login to this VMWare web interface.
If your machine is in the domain, you do not need to include your domain name in the login process. So instead of login with DOMAIN\username, just use "username".
2. Internet Explorer cannot display the webpage. If you get this screen when you open the VMWare Server Home Page, I will check several things: a) Is the URL correct? b) Is the port number correct? c) Is VMWare Host Agent service running? You can check this in "Services", located in Administrator Tools under Control Panel. If this service does not exist, you will need to reinstall VMWare Server. If it is there and not running, you need to start it. Once it is started, close all browser with VMWare stuff in it, and try again.
Also keep in mind, in FireFox or other browsers, it may look different.
3. VM Ware also has this tool that's called VM Ware Converter 3.0. This is a very useful tool to convert your physical PC into a VM or vice versa. It also allows you tp change the configuration of your VM by cloning it. The free version has limited functionality, but it should be able to do the things I mentioned above. The paid version has more robust functionality.
Related Posts:
How to Increase HD Space in a VM
Win XP 64 bit and VMWare Server
-- read more and comment ...
Monday, December 29, 2008
VM Ware Server 2.0 Experience
By
Johannes Setiabudi
@
9:19 AM
3
comments! add yours!
Tuesday, December 16, 2008
CSLA & ASP.NET MVC (part 3: Adding)
As I have mentioned previously in the last post, editing and adding is not that much different - one pulls an existing one and modify it with incoming data, the other is just creating a new instance and filling it up with incoming data. We discussed "editing" in my last post, and now we are going elaborate on "adding".
First, let's take a look on the displaying of the empty form. This one is pretty easy, just get a new customer and bind it into the model as CurrentCustomer.
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult New()
{
viewData.CurrentCustomer = Customer.NewCustomer();
viewData.CustomerList = CustomerInfoList.GetCustomerInfoList();
viewData.Titles = TitleInfoList.GetTitleInfoList();
return View("New", viewData);
}
We also want to bind the list of titles to be able to populate the drop down for title selection.
in handling the post, we are doing essentially the same thing as in edit, except this time we are mapping it to en empty object since it is a new one. [ActionName("New"), AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create()
{
try
{
Customer customer = Customer.NewCustomer();
UpdateModel(customer, new[]
{
"TitleId",
"FirstName",
"MiddleName",
"LastName",
"DOB"
});
customer.DateEntered = DateTime.Now;
customer.DateUpdated = DateTime.Now;
if (!customer.IsValid)
{
foreach (Csla.Validation.BrokenRule brokenRule in customer.BrokenRulesCollection)
{
ModelState.SetAttemptedValue(brokenRule.Property, brokenRule.Property);
ModelState.AddModelError(brokenRule.Property, brokenRule.Description);
}
viewData.Titles = TitleInfoList.GetTitleInfoList();
viewData.CurrentCustomer = customer;
return View(viewData);
}
else {
customer.Save();
TempData["Message"] = "I saved " + customer.LastName + " to the database";
return RedirectToAction("List", "Customer");
}
catch (Exception ex)
{
TempData["ErrorMessage"] = ex.Message;
return RedirectToAction("New");
}
}
So upon save, we want to display the confirmation message whether there is an error or the record is saved successfully. In the code above we also utilize CSLA rules validation - this is really useful in a way that we have a central place to put our format rules, business rules, validation at. If there is an error, we want to redisplay the new customer screen and if save is successful, we want to update the list with the current data.
Related Posts:
ASP.NET MVC, AJAX, jQuery
CSLA & ASP.NET MVC (part 1)
CSLA & ASP.NET MVC (part 2)
-- read more and comment ...
By
Johannes Setiabudi
@
4:36 PM
0
comments! add yours!
Saturday, December 13, 2008
CSLA & ASP.NET MVC (part 2: Editing)
In the last post, we discussed about listing viewing detail for objects built with CSLA framework via ASP.NET MVC. Now in this post, I will show the editing and adding of the object - in our example here, using "Customer".
In essence, editing and adding is not that much different - one pulls an existing one and modify it with incoming data, the other is just creating a new instance and filling it up with incoming data. In our code, we try to leverage CSLA as much as possible, where the "Save" method is called only when the object is "dirty". Another thing is that we also want to get as much as data validation within the CSLA object as possible rather than manual/custom checking in our controller.
First, editing. [AcceptVerbs(HttpVerbs.Get)]
public ActionResult Edit(int id)
{
viewData.CurrentCustomer = Customer.GetCustomer(id);
viewData.Titles = TitleInfoList.GetTitleInfoList();
return View("~/Views/Customer/Controls/CustomerEdit.ascx", viewData);
}
The method Edit is tagged with "AcceptVerbs" attribute and scoped to only accept "Get" request. What this means is that this method can and will only be executed during a GET. Scott Guthrie has an excellent post regarding this attributes in his blog - I suggest for you to check it out.
The rest of the code is pretty simple, get the Customer record that is selected (passed in as a Id parameter in the method), put the customer instance into my viewData, get the list of titles to populate my Titles drop down, and then pass the view data into the viewer - pretty straight forward.
Now, let's take a look at the handler code for edit submission/post - for when somebody hit submit on our edit form. [ActionName("Edit"), AcceptVerbs(HttpVerbs.Post)]
public ActionResult Update(int id)
{
try
{
Customer customer = Customer.GetCustomer(id);
UpdateModel(customer, Request.Form.AllKeys);
if (!customer.IsValid)
{
foreach (Csla.Validation.BrokenRule brokenRule in customer.BrokenRulesCollection)
{
ModelState.SetAttemptedValue(brokenRule.Property, customer.GetType().GetProperty(brokenRule.Property).GetValue(customer, null).ToString());
ModelState.AddModelError(brokenRule.Property, brokenRule.Description);
}
viewData.CustomerList = CustomerInfoList.GetCustomerInfoList();
viewData.Titles = TitleInfoList.GetTitleInfoList();
viewData.CurrentCustomer = customer;
viewData.ValidationErrorFlag = true;
return View("~/Views/Customer/Controls/CustomerEdit.ascx",viewData);
}
else
{
if (customer.IsDirty)
{
customer.DateUpdated = DateTime.Now;
customer.Save();
TempData["Message"] = "I saved " + customer.LastName + " to the database";
}
else
{
TempData["Message"] = "There were no changes to be made";
}
return null;
}
}
catch (Exception ex)
{
TempData["ErrorMessage"] = ex.Message;
return RedirectToAction("Edit", new { id = id });
}
}
OK, that seems long - so let's examine the code bit by bit so we can fully understand what is going on. If you notice, above the method name, there is also an "AcceptVerb" attribute, but this time it is set to "POST". Another thing is that it has ActionName("Edit") - which when combined with the AcceptVerb attribute, it will have the meaning that if there is an action "Edit" called on the controller with a POST, it will then get redirected into this method "Update".
try
{
Customer customer = Customer.GetCustomer(id);
UpdateModel(customer, Request.Form.AllKeys);
...
The 2 lines of code above, it is basically getting the Customer record being edited, and then call "UpdateModel" method, where it tries to match the instance of Customer called "customer" with the data submitted into the Request.Form. if (!customer.IsValid)
{
foreach (Csla.Validation.BrokenRule brokenRule in customer.BrokenRulesCollection)
{
ModelState.SetAttemptedValue(brokenRule.Property, customer.GetType().GetProperty(brokenRule.Property).GetValue(customer, null).ToString());
ModelState.AddModelError(brokenRule.Property, brokenRule.Description);
}
viewData.Titles = TitleInfoList.GetTitleInfoList();
viewData.CurrentCustomer = customer;
viewData.ValidationErrorFlag = true;
return View("~/Views/Customer/Controls/CustomerEdit.ascx",viewData);
}
...
Here we check whether the instance filled with data from the form is valid based on the rules specified in the CSLA rules. If it is not valid then iterate the broken rules collection and set the model marked with error messages appropriately. Now after the model is marked with the error, we want to display back the form with the model so the error messages can be displayed accordingly field by field. To do this, we then populate the Titles field in our viewdata back with list of available titles, and also populating our CurrentCustomer property with the edited customer, set the error flag and return the viewer for "Edit". else
{
if (customer.IsDirty)
{
customer.DateUpdated = DateTime.Now;
customer.Save();
TempData["Message"] = "I saved " + customer.LastName + " to the database";
}
else
{
TempData["Message"] = "There were no changes to be made";
}
return null;
}
...
If the instance does not violate any rules, then we can save if necessary. Even though CSLA will detect automatically whether the instance is dirty or not before saving to the database, but we chose to check in our controller so we then can display whether there are data being saved or not. Since there is nothing else needed to be done after the saving, we then return null value.
Related Posts:
ASP.NET MVC, AJAX, jQuery
CSLA & ASP.NET MVC (part 1)
CSLA & ASP.NET MVC (part 3)
-- read more and comment ...
By
Johannes Setiabudi
@
10:22 PM
0
comments! add yours!
Thursday, December 11, 2008
Jonathan is 3 years old - time flies!
Three years ago, early December was nervous time for me. Helen, my wife, was pregnant and the baby is due anytime. Jonathan was born Dec 10th 2005, 7am, @ Riverside hospital - 51cm, 7lbs 8oz. There were no complications, the delivery was smooth, and we went home being proud parents.
The first couple of months were rough. Helen sister stayed with us for the rest of the year and went home end of December. My mom came after that and stayed for 2 months to help us along. Jonathan loves his milk and he had no problem with food or milk. He had eczema on his cheeks which worried us for a bit, but after the 1st year and a half it pretty much went away. He started eating solid food at 4 months, and by that time, Jon could hold his own bottle. He was huge fir his age at the time - I believed he was in the 70-90 percentile back then.
Another thing we worried about back then was that Jon threw up a lot, especially when he was crying. This led us to eventually not allowing him to sleep by himself in the crib until he was almost 2 years old. Putting a humidifier in his room helps a lot too.
Jon started walking on his own when he was 11 months. I remembered that his first attempt to walk across the room in our living room was during a OSU-Michigan game (OSU won 42-39 - GO BUCKS!!). He was a fast walker and he was the type that cannot stay still - so we installed gates in our house to prevent him from going too far or going into unsafe rooms. Grandma and grandpa came during Jon's 1st birthday and we threw a party. Since the Buckeyes were going to National Championship that year, the theme for the party was "Buckeyes". Everybody came wearing scarlet or grey apparels. Even though Jon has not understand football yet at the time, but he was able to respond to "O-H" with an "I-O"! I was soo proud ...
Jon 1st birthday party!
Jon and his first snow ...
Jon's first haircut - done by mommy and daddy!
Halloween!
By the time Jon was 2 years old, he was talking Indonesian and English, sleeping on his own bed, ate all kinds of food, understand that OSU is the best, what an email is, how to chat to daddy, etc etc.
Jon's 2nd birthday party - can't wait to eat cake!
Yesterday was Jon's 3rd birthday - o how time flies. He is wearing bigger clothes now, brushes hi own teeth, talks in full sentences, ask the most difficult question I can ever imagined ("Why daddy has to go to work?"), loves staying in a cabin, etc. Jon loves his train set (me too) and looking forward to have it expanded. Taking pictures of Jon regularly also pays off big time.
BTW, Jon now has his own blog, written by mommy - http://jonathansetiabudi.blogspot.com, check it out.
-- read more and comment ...
By
Johannes Setiabudi
@
9:36 PM
0
comments! add yours!
Wednesday, December 10, 2008
CSLA & ASP.NET MVC (part 1: listing & viewing detail)
The easiest implementation for ASP.NET MVC is usually via LINQ to SQL. Now, for larger projects that must be scalable, one will need object development framework that is also scalable and more robust. My framework of choice CSLA.NET. Assuming you have built your CSLA classes, wiring it in with MVC is a piece of cake.
I recommend to make your view to be strongly typed to the object of your controller. So in my example, I have a CSLA class for "Customer" and also its corresponding read-only list, read-only item, editable, etc. Hence, I name my controller to be "CustomerController". In it, I created a class to carry around stuff as a single object, instead of stuffing everything in ViewData and cast when needed. public class CustomerControllerViewData
{
// list of read-only customer available to me
public CustomerInfoList CustomerList { get; set; }
// current editable customer seleted
public Customer CurrentCustomer { get; set; }
// list read-only Title available to the Customer
public TitleInfoList Titles { get; set;}
}
Then in the controller class, I declared a global variable to hold the instance of the CustomerControllerViewData class. I initialized it right away. public class CustomerController : Controller
{
CustomerControllerViewData viewData = new CustomerControllerViewData();
public ActionResult Index()
{
return RedirectToAction("FullList");
}
...
}
During list, I put all the necessary data into CustomerControllerViewData class, rest the validation, and then I pass that instance into the viewer as a strongly typed model. I do not fill in the CurrentCustomer property nor the Titles - since I won't be needing those to display my list of customers. public ActionResult List()
{
viewData.CustomerList = CustomerInfoList.GetCustomerInfoList();
viewData.ValidationErrorFlag = false;
return View("~/Views/Customer/Controls/CustomerListing.ascx", viewData);
}
The viewer looks like this - it should be pretty simple with the exception that it is strongly typed. So in the code behind, I have to add the type in the generic constructor of the viewer: public partial class CustomerListing : System.Web.Mvc.ViewUserControl
{
...
}
Now for viewing detail if a customer, we also do not need to fill out CustomerList property, since at this point we only care about a specific customer. Titles is needed since to populate a look up/drop down field. public ActionResult Detail(int id)
{
viewData.CurrentCustomer = Customer.GetCustomer(id);
viewData.Titles = TitleInfoList.GetTitleInfoList();
viewData.ValidationErrorFlag = false;
return View("~/Views/Customer/Controls/CustomerDetail.ascx", viewData);
}
Do the same thing for the code behind of the viewer to make it strongly typed: public partial class CustomerDetail : System.Web.Mvc.ViewUserControl
{
...
}
Related Posts:
ASP.NET MVC, AJAX, jQuery
CSLA & ASP.NET MVC (part 2)
CSLA & ASP.NET MVC (part 3)
-- read more and comment ...
By
Johannes Setiabudi
@
10:18 PM
4
comments! add yours!
Wednesday, December 3, 2008
New Nikkor!
By getting Nikkor AF-S 24-70mm f/2.8G, I have completed my Nikkor lenses line up that covers 17-200mm for FX (full frame) and 10-200 for DX (crop format). So now, my lens line up is consisting of these lenses:
- Nikkor AF-S 17-35 f/2.8
- Nikkor AF-S 24-70 f/2.8G
- Nikkor AF-S 70-200 f/2.8G
Nikon has come up with Nikkor AF-S 14-24 f/2.8G and some people say that this lens is suppose to replace AF-S 17-35. I am not sure whether that is true or not, but since I bought my 17-35 before 14-24 came out and it still performs its job exceptionally well - then I am keeping it. I also have not tried 14-24 in person other than reading some reviews and seeing sample photos. Most people agree that 14-24 is one of Nikon's best - to the point even Canon people are looking for converted to be able to use with Canon cameras.
This is not a full spec detail review, but rather an experience based narrative. So I am going to write about my experience in using 24-70 for the last 1 month or so (I had it since early November). For the last month, I can say I use this lens almost exclusively - not because all my other lenses are bad - but because I have done mostly indoor shooting/photography. I took a lot of pictures of my son, thanksgiving parties, etc - and I can say that 24-70 is perfect for indoors.
Previously I usually use my 50mm f/1.4 AF-D or AF-S 18-200. If I use my 50mm, I can set it to f/4 and set my camera to A mode and be happy. If I am using multiple flashes, I set my camera to M mode and adjust exposure accordingly. My gripe with the 50mm is that it is not a zoom and also the speed of focusing is rather slow - so as a result I often missed some critical shot of my son acting funny.
I was not expecting that this lens will be so much faster in focusing - but apparently it is faster enough that I have more keeper than before. This lens is also very very sharp - even with normal sharpening setting in my camera, it produce a very sharp image - I would say that it is comparable to 50mm prime.
Compared to 18-200 is like night and day. Although 18-200 has its place as a travel lens, compared to 24-70, its flaws and compromised got exposed. The 24-70 is sharp wide open and stay sharp throughout the aperture range. The 18-200 is soft wide open and sharpest at f/6.3 - but even its sharpest is not comparable to 24-70 wide open.
The zoom ring of the 24-70 is also consistent and balanced, making it easy to zoom and compose - where 18-200 has zoom creep and imbalance zoom ring stiffness.
All in all, I am extremely satisfied with this new lens, AF-S 24-70 f/2.8G - worth every penny that I put into it.
-- read more and comment ...
By
Johannes Setiabudi
@
7:11 PM
0
comments! add yours!
Monday, November 10, 2008
The Deli Boys
I have been working from a downtown location for more than a year. Located on High St., nearby the arena, I have plenty of lunch option everyday. When I started working here, my supervisor hooked me up to this sandwich place called "The Deli Boys". Ever since then, just like a sandwich addict, I keep coming back - at least once or twice a week.
The Deli Boys have been there since early 2006 - located @ 2 E Long St., Columbus, OH - 43215. Their phone number is 614-621-1444. You can call ahead for carry out order or for catering order.
The price is pretty good - ranging from $3.75 for an Italian sausage on a hoagie to $5.50 "Heavy-weight" - a big all meat hoagie sandwich. They also have some basic salad menu, thin pizzas, and soups/chili. You can get a combo with chips and soda - which they serve Pepsi products. There is a daily special everyday - and so far the best special for me is the portabella chicken sandwich.
After a while, they will get you know you (they take your name on every order) - which shows an honorable degree of hospitality. Overall, combined with their charming hospitality - their sandwich is also great, toasted perfectly every time and hand delivered to your table as soon as they are ready!
My favorite menu item is the "Chicken Philly" sandwich. It got a good amount of jalapeno peppers, delicious grilled chicken breast, bell peppers, cheese, and mayo. Combined with a side of Jalapeno chips - it gives you plenty of heat to keep you awake for the rest of the afternoon. The bun is toasted perfectly every time, fresh lettuce, peppers, and melting cheese - yuuuummmmyyy! Their thin pizza is also good - if you are into thin pizzas.
If I am not mistaken, now they also have cup cakes everyday. It used to be on some special days - but it is everyday now. Good cupcakes with nice icing! Also available is frozen yogurt - the lemonade flavor is awesome.
I have tried every single sandwich menu available @ The Deli Boys as well as their pizza menu - and I like all of them (I like some better than others - like the chicken philly) - but the point is that I have never had a bad lunch there. Well, if you are in the area, check them out - they are open @ 7am, M-F.
The Deli Boys
Monday - Friday @ 7am
2 E Long St.
Columbus, OH - 43215
614-621-1444
-- read more and comment ...
By
Johannes Setiabudi
@
5:17 PM
0
comments! add yours!
Open Source Family Tree Software: Family.Show
I stumbled on a free open-source software written on MS .Net (C#, WPF) that is really intriguing and cool. This software is a "family tree" software. It is a simple one - but for my use - it is more than sufficient.
The software itself is called Family.Show. It was mad by a company called "Vertigo". It is very user-friendly and easy to use. It came with a sample family; the Windsor (English Royal family).
Did I mention that it is also open source? Yes, so you can go to codeplex and download the source code for the app. You will need Visual Studio 2008 to be able to open the solution fully, but you can use any text editor to view the code in C#.So OK, I downloaded it and started my family tree. I happen to keep most of my family members data in my Outlook, so I can enter them right away. After you enter a person, you can add related person to the existing one. So you cannot add somebody who is not related to anybody in the system. For example: once I added myself, I can only add person who is directly related to me: spouse; brother/sister; mom/dad; son/daughter. If I want to add my cousin then I have to add my mom, then add her sister, then add my cousin as my mom's sister's daughter.
The software is pretty intuitive to use and quite simple. You can drag photo to the edit pane to assign a photo to a person in the system. You can add "story" to a person - a free text format where you can have some kind of a biography for the person.
Another feature is that you can filter the family data to find certain family members easier. Clicking "Expand" button will expand the list of family members into a big table, where you can filter, sort, search, etc - as well as displaying stats about age distribution, birthdays, etc. Clicking on the age distribution chart will filter the list automatically by age.
A super cool feature is the time slider. You can slide the time slider to see people's age on certain year. For example: if you want to know the age of your dad when you were born, you can slide the age slider until your age reaches 0 (zero) and see your dad's age displayed appropriately under his name. When you slide the age slider closer to current year, you can see his age is increasing.
The data is saved in an XML format - so you can send it to your families and ask them to install the software and complete/add missing data and send the xml file back to you. You can also export it into a GEDCOM format - which is the "family tree" standard format for most "family tree" software.
Check it out!
-- read more and comment ...
By
Johannes Setiabudi
@
4:39 PM
4
comments! add yours!
Thursday, November 6, 2008
Using PageMethods & JSON to provide auto population
One of the problem that I have to solve in my recent project was to provide a look up for city, county, state based on a zip code. There are multiple ways of doing this - but in this exercise, I want to demonstrate using javascript (client-side) to call PageMethods (server-side) and then populate my fields.
1. Set EnablePageMethod to true in your script manager
2. Create your PageMethod
When the PageMethod returns its value, it will get serialized into JSON object. In my example above, I an returning a IEnumerable
3. Create your javascript to call the PageMethod and callback handler
When you call a PageMethod, the result from the PageMethod is directly transfered into your callback function. In my example below - it is transfered into "result". You can also specify success path callback and failure path callback if you want.function GetZip(zipBox) {
var zip = zipBox.value;
if (zip.toString().length >= 5) {
var x = PageMethods.GetCityCountyState(zip, GetCityCountyState_Callback);
}
function GetCityCountyState_Callback(result) {
cityDDL = document.getElementById("cityDDL");
cityDDL.options.length = 0;
var oldValue = "";
for (i = 0; i < result.length; i++) {
if (oldValue != result[i][1]) {
var newValue = result[i][1];
var newText = result[i][2];
var objOption = new Option(newText, newValue);
cityDDL.options.add(objOption);
oldValue = newValue;
}
}
countyDDL = document.getElementById("countyDDL");
countyDDL.options.length = 0;
oldValue = "";
for (i = 0; i < result.length; i++) {
if (oldValue != result[i][3]) {
var newValue = result[i][3];
var newText = result[i][4];
var objOption = new Option(newText, newValue);
countyDDL.options.add(objOption);
oldValue = newValue;
}
}
stateDDL = document.getElementById("stateDDL");
stateDDL.options.length = 0;
oldValue = "";
for (i = 0; i < result.length; i++) {
if (oldValue != result[i][5]) {
var newValue = result[i][5];
var newText = result[i][6];
var objOption = new Option(newText, newValue);
stateDDL.options.add(objOption);
oldValue = newValue;
}
}
}
So in my javascript above, I basically waiting until the textbox for zipcode is filled with 5 numbers before calling the PageMethod. Once I get the result back as JSON object, my callback function will take over and populate my drop down list for City, County, and State.
Additional readings:
1. ASP.net: Exposing WebServices To AJAX Tutorial
2. AJAX PageMethods, JSON Serialization, and a little bit of LINQ databinding
3. Passing JSON param
Related Posts:
ASP.NET MVC, AJAX, jQuery
By
Johannes Setiabudi
@
1:21 PM
1 comments! add yours!
Wednesday, November 5, 2008
SLANK CONCERT!
SLANK concert @ Columbus was awesome. It was a part of INDIGO - an annual celebration for Indonesian students in Columbus, OH. Ticket price was decent, $20 (or $25 at the door), you get plenty of Indonesian food, tons of drinks, a performance by Columbus band and of course, SLANK!
I was in charge of setting up the sound system. We rented our house and monitor equipment as well as some backline equipments. SLANK & crew brought their own guitar amp head - a Marshall JCM 2000 and their own Bass head - AMPEG. Bimbim is endorsed by PREMIER drum - but since we could not find a PREMIER kit locally, we compromised and use another brand - and instead of renting, we borrowed one - from ME! So YES, it was my drum kit that was used during the concert by SLANK! One of their guitarist, Ridho could not make it - somehow he could not get a visa by US embassy.
Between 1pm until 4pm, there was a lot going on. The food came in and there were several people arranging them, putting them into boxes, putting all the drinks in cooler to chill, etc. We prepared around 400 boxes of Indonesian meal - that is a lot of boxing! Our food is sponsored by an Indonesian restaurant in Columbus called TASTE OF BALI. They are located @ Carriage Place on Bethel Rd, next to the dollar theater. I tasted the food - it was awesome!
Preparing ourfood:
We picked up our drum kit from my house around 10am and went straight to SLANK's hotel. We met with SLANK's crews - Dado & Wahyu as well as Sonny - their sound engineer. We arrived at the concert hall @ Ohio Expo Center - Rhodes Hall by 11am and the FoH & monitor equipments are already arriving and being setup by our rental company. SLANK at this point stayed behind @ hotel and they were going to meet several friends in the soccer tournament.
We proceeded in setting up our equipment and by noon-ish, we are all set. We went to lunch, stopped by a guitar shop to get several guitar stands, and went back to the concert hall to do sound check. After an hour or so sound check - we are ready to ROCK!!!
SLANK's crews:
At 4pm-ish, our opening band showed up for sound check. They are doing 4 songs. SLANK was kind enough to let the opening band borrowed their equipment (guitar head & bass head & snare drum). These guy never sounded that good before - primarily because of the quality of the sound system equipment and the sound engineer we hired.
All of our crews are on location right now, arranging furniture, preparing tickets, finalizing food preps, etc. The door opens @ 5:30pm and opening band to get on the stage @ 7pm.
Our MCs - Bebe & Aree:
Openning band - Columbus band:
SLANK in the waiting room:
Jon & Helen:
After the concert, SLANK's crews and I cleaned up the stage, as well as the backline and FoH & monitor rental crews. SLANK was in their waiting room with fans taking pictures, singing autograph, etc. At around 10:30pm, everything was done, and we drove back to SLANK's hotel. I helped SLANK's crews packed their equipments for their next flight to NY. Sonny gave me a used snare and I got SLANK's autographs on it. We went to Raising Cane's for late late supper, had a great talk with Ivan outside, and rolled home @ around midnight.
Long live SLANK & SLANKERS!
-- read more and comment ...
Wednesday, October 29, 2008
Backlighting & Overpowering Ambient
The shot above was taken on a sunny day light in my living room - how did I do it? Check out the rest of the post.
First of all - I backlit the leaf
What does that mean? It means I use a light source (a Nikon SB-600 flash) and that light source is located behind the object (the leaf). This means that the object is sandwiched between me (and the camera) and the light source. Your light source could be anything: the sun, desk lamp, flash light, TV, etc. I just happen to use my Nikon flash - plus it provides a strong enough light to overpower the ambient light - which brings us to the second point.
Secondly - overpowering the ambient
What is "ambient light"? It is the light that is around you in your current condition. So in this case, my ambient light was sun-light coming through from some windows in my house as well as the kitchen light from my left.
What does "over-powering" the ambient mean? It means that I use an external light source (my Nikon flash) to be the primary light source and rendering the ambient light to be secondary light source or to be non-existent. In this case - I want the light coming out of my flash to be the ONLY light captured by my camera in lighting the leaf and I want the background to be dark (black or close to it). So my flash needs to be my primary light source and I need to render the ambient light into close to non-existent in the final picture - thus "overpowering the ambient".
OK then - how do you overpower the ambient? It is actually quite simple: I close down the exposure enough so that when I take a picture without flash it becomes dark/black. There are a lot of combinations you can use to accomplish this among shutter speed, aperture, and ISO setting. I picked ISO 100, 1/320 and f/11. I want to close down the aperture enough to capture the detail of the leaf and since I am handholding a 200mm lens, I want high enough shutter speed (more than 1/200s) . So that means low ISO, high speed, and closed down aperture - hence I selection.
After that, I position my flash behind the leaf, put it into High-FP mode (which enable the flash to work with shutter speed higher than normal sync-speed) and put it in 1/4 power and do a test fire. Adjust the position of the flash and adjust power to 1/2 and VOILA!
I did some post-processing with the image produced: cropping (I actually captured the whole leaf), sharpening (to strengthen the detail), and manipulate the color of the leaf a little bit (it was originally yellow/orange).
I use Nikon D80 camera, Nikkor AF-S 70-200 f/2.8 VR lens, and SB-600 flash.
-- read more and comment ...
By
Johannes Setiabudi
@
5:39 PM
4
comments! add yours!
Tuesday, October 21, 2008
Pumpkin Patch!
Jon, Helen, and I went to the pumpkin patch last Saturday. It was fun - a bit cold and windy - but fun overall. Sky was gorgeously blue in the morning. The patch that we went to was at Dublin (take 33 west, exist @ Post) - so it was not that bad of a drive from our house. We went with a bunch of friends (and their kids) - so we have a big group.
Once we got there, we got several options ... we can walk on our own to the area (which is about 10 minutes walk - not bad at all) - OR we can take a hay-ride. Since Jon has never been on a hay-ride, so we opt for the hay-ride.
Here is Jon sitting on an unused tractor while waiting for our hay-ride:
This is inside the wagon - there were about 20-something people inside the wagon, so it was packed. I sat across Helen and Jon and able to get this shot.
Once we got to the area, it was a free for all ... we can pick any pumpkin we can find. Most of them are bad though or too big. After searching for about 45 minutes or so, we finally found one that is big but not too big and one that is small enough for Jon to hold.
On our walk back to the weighing area - there was an area where it was filled with small size pumpkins. So we played around a little bit there and try to find some small pumpkins for Jon - or he was trying to find for his own.
It was fun and we enjoyed it - although warmer weather is more desirable for next trip. We ended up going home with 4 pumpkins (1 large one and 3 small ones).
-- read more and comment ...
By
Johannes Setiabudi
@
8:36 PM
1 comments! add yours!
Monday, October 6, 2008
INDIGO featuring: SLANK!
By
Johannes Setiabudi
@
9:22 AM
0
comments! add yours!
Monday, September 29, 2008
New Appliances
My electric range needs replacing ... Two of the ranges (the bigger ones) don't even work now and the rest are only working half the time. Oven still works great, but not the range. It is an old GE range and it is screaming for replacement.
My dishwasher is also broken. The water outlet is broken so sometimes there will be a "pool" of water on the bottom. If the water is left there, it will become a bacteria sweet spot - so we have to keep using the dishwasher periodically or cleaning the bottom and removing the water - which is a pain. We try to have it fixed but the parts are hard to find and expensive - almost as much as buying a new one.
So when the company I work for announce that we will be getting our bonuses, we are off to our search for new appliances: dishwasher, electric range, and a matching hood/vent.
Electric Range
For one reason and another, we decided to go with Whirlpool as our chosen brand of appliance. For our electric range, we wanted to go with "coil" instead of the ceramic glass cooktop - because we found that the coil "heats" better. Since we cook on regular basis, coil seems to be a better option. Plus, the ceramic glass is expensive to replace if it is damaged (could be $250 or more) - even though it is really really easy to clean and certainly looks better. The model that we went for is Whirlpool RF263LXS. We also got the vent/hood for it: RH3730XL
Dishwasher
For the dishwasher, we also went stainless to match with the range and the hood: DU1055XTS.
So what kind of "heavy duty" cooking are we doing on our range? Well, my wife cook almost everyday and about once a week we host a bible study group at our house on Saturday. So more often than not, the heaviest use of our range is on the weekend, where our friends and us must cook for our bible study group (abour 20 people).
We do not use the oven as much - which is why probably the oven is still in good shape. As Asians, most of our food are deep fried, stir-fry based or soup based - which means that almost all the cooking is happening on the cooktop instead of in the oven.
We ordered these last weekend and they will be shipped within this week. I hope they work as long as my old appliances are, for years and years and years.
-- read more and comment ...
By
Johannes Setiabudi
@
11:02 AM
2
comments! add yours!
Tuesday, September 23, 2008
Twitter Clients
Do you know what "twitter" is? If not, go check it out at http://www.twitter.com. It is basically a "micro-blogging" tool; where you can post 140 characters at a time about anything (from what you are doing now to anything you can think of). You can follow other people - meaning that everytime they "tweet" or post in their twitter account, you will get their post. People can also follow you - so anytime you post something, they will get it.
There are new outlets, engineers, gadgets reviewers, etc (including Barack Obama) that are in twitter - and you can follow them and get their posts.
Twitter.com provides a web interface where you can interact with your post (post new post, reply, direct message, etc). But, there are also several twitter clients out there that allow you to be twittering without opening up a web browser. I will review 2 of them in this post - which are ones I used the most.
1. Twhirl: http://www.twhirl.org
Twhirl has a nice UI, slim, almost YM/AIM/MSN like. It provides the basic Twitter functions such as: posting, replying, direct message, viewing particular people's tweet, fave-ing a tweet, shorten URL, etc.
It also has several things that are very appealing: changing colors, multiple twitter accounts, automatic checking for new version and upgrade, MSN like notifications for new tweets.
There are also several things that I wish were better in twhirl, such as: not limiting displayed tweets to 20 tweets, truncate/not display replies and direct messages from the past, and add functionality for "grouping" people.
2. TweetDeck: http://www.tweetdeck.com
Tweetdeck is not as pretty as Twhirl, but for what it can do, it does them well. Tweetdeck has this feature that allows you to create "groups" - so you can group people together. For example, you can group tweets from your work friends together in its own column and tweets from your family is a different column altogether.
Its notification system is only telling you how many tweet it got and belong to what group, so it is not as nice as Twhirl (which tells you the actual tweet). Tweetdeck is also capable to display more than your last 20 tweets and clean up past replies/directs nicely.
There you have it, the 2 client apps that I use for twittering and there are many more out there. If you do not know what Twitter is, I urge you to check it out and give it a try - and urge your friends to join as well. The more friends you have, the better and more fun it is.
-- read more and comment ...
By
Johannes Setiabudi
@
9:22 PM
0
comments! add yours!