Setting private property without setter in Java

Not really a new trick but I had to look for the syntax today to use reflection to set a private property on an object to use it in a junit test.

Class clazz = someFooObject.getClass();
Field f = clazz.getDeclaredField("somePrivateField");
f.setAccessible(true);
f.set(someFooObject, new Integer(50));

writing an ajax app for Sequence

Yesterday I attended Ted Neward‘s game design session at nofluff. It inspired me to begin to implement the game sequence in an ajax app. It will be a private app since I only plan to play it with some friends. But it will be hosted somewhere on my website so it can be accessed from anywhere.

Sequence is a board game my husband and I often played with two of our friends. It’s their favorite game. When I started thinking last night about potentially creating a web version so we don’t need to be physically at their house to play, I became very excited. I believe I may create something that will work with the help of php, mysql + jQuery (ajax).

Why this idea excites me

  • Before I started as a professional Java developer, I always coded in php & mysql (somewhat a LAMP developer on the side). However most of my old applications and sites are down. I no longer have the desire to maintain them. Now this is a great opportunity and incentive for me to go back to php & mysql and write something I enjoy.
  • PHP has a special place in my heart. Just a while ago, a coworker asked for my help to create him something to help with the manual text file processing he has to do every month. It only needs to be quick & dirty app. I threw together a php app in half an hour for him. It was super cool. He loved it.
  • jQuery is my favorite javascript library. You don’t have to look far in my blog to find that out. So the more I get to work with it, the happier I am.
  • I can also involve my husband on this project. Even though he’s not a programmer but he knows this game as well as I do. Normally he doesn’t have much of stake in my apps but this time he can be my lab rat :)
  • With this project, I also get to play with UI. I started as a web designer. So CSS & HTML have been my passion. There will be quite a bit of UI involved in the designing of this game.
  • It’s fun because it will be very useful. I very much look forward to the day that I can have our friends joining the game.
  • I can blog about it! I may not share my final product with the public but I will definitely share my progress & experience. Hopefully there will be challenges where I can learn some new stuff.

Last night I started brainstorming with my hushand as how I want the game to work. I started table designing and UI designing. This morning I put together a very prototype version of the UI.
sequence phase 001
I leveraged jQuery’s “redmond” theme. This way I can use all of the cool jQuery UI widgets and benefit from reusing its css for elements I want to style and create a semi prof looking app in no time.

Simple PHP URL rewrite

One thing I did for dmb is making dodosmb.com/profile/username work with my profile.php script. Normally without the help of .htaccess, you can use the value of the path info from the global variable

$_SERVER['PATH_INFO']

For example, create a php file named profile.php and in there put:

<?php echo $_SERVER['PATH_INFO']; ?>

Then upload the file and load it with yourServerPath/profile.php/dodo. The script will print out

/dodo

In my profile.php, I get the user by doing a simple sub string command like:

$user = substr($_SERVER['PATH_INFO'], 1); // this will get rid of the leading slash

This allows me to feed users to my profile.php by using the url dodosmb.com/profile.php/username

That’s still not pretty enough; it’s better if I can do dodosmb.com/profile/username. This is where .htaccess rewrite comes in. Here’s a great tutorial for .htaccess rewrite rules. To accomplish my goal, I used the following rewrite rules in my .htaccess:

RewriteEngine on
RewriteRule ^profile/([A-Za-z0-9]+)/$ /profile.php/$1
RewriteRule ^profile/([A-Za-z0-9]+)$ /profile.php/$1

A new way of array checking in PHP

i just saw the funniest thing in PHP yet! below is taken from here.

This code is lifted from a socket handling class that I’ve been asked to work on today. Prepare to cringe:

if (eregi('Invalid argument supplied for foreach() in /usr/cvs/projects/13xx/1371/Classes/XML/XML_inc.php on line 392',$v[0])) { return false; }

It’s worth noting that the foreach() statement will move from line 392 with so much as a return key (as it did today?). It’s also worth noting that the path information is gloriously hard-coded. This was deemed dailywtf worthy in the office, and as such I present it to you now.

Happy Wednesday :)

disable wordpress smiley for a certain post/page

okie, i thought someone has figured it out by now. but when i asked on the wordpress board, i got no response. so i digged around and figured a hack for it.

i noticed sometimes esp. on some pages, the smiley conversion does a poor job and converts the wrong text into smilies. it really mars my content. personally i want to be able to just turn the smiley off for a certain post or page.

the best way i can think of to do it is via a hack.

open your wp-includes/functions-formatting.php file, try find the function (possibly line 576):

function convert_smilies($text) {

then under it, replace:

global $wp_smiliessearch, $wp_smiliesreplace; $output = ''; if (get_settings('use_smilies')) {

with:

global $wp_smiliessearch, $wp_smiliesreplace, $post; $output = ''; $smileykey = get_post_meta($post->ID, "disable_smiley", TRUE); if (get_settings('use_smilies') && $smileykey != 'true') {

that’s all i needed to do.

now next time you write a new post/post, simply create a custom field with the key disable_smiley and value true to disable smiley conversion for just that post/page. isn’t that neat? :)

php alphabet output

aw thanks to miki for the tip. i was wondering if there was a smarter way to print out the alphabet in php than just typing them out LOL

Every letter of the English alphabet corresponds to an ASCII code, so rather than manually typing everything out, you can achieve the same result with a simple PHP loop.

The code below will output all uppercase letter from A to Z by running through ASCII codes 65-90 (the values for uppercase letters) and converting each code to its corresponding letter using the in-built PHP function chr().

<?php 
for ($i=65; $i< =90; $i++) { 
$x = chr($i); print $x; 
} 
?>

For lowercase letters, use the numbers 97-122 instead.

dodoupload 1.3

worked most of today on releasing dodoupload version 1.3. if you never had problem with previous versions, you probably don’t need to upgrade. there is not much change from version 1.2. I rewrote the script mostly because some people have problems with http auth and i couldn’t figure out why. so now it’s cookie based login. i also got an email requesting to allow no login. so that’s an option now too.

amy from e-starr.com is now hosting regretless.com. i plan to reopen the registration for dodocounter :) stay tune!

quickly fill an array

i’ve been wondering what’s the quickest way to fill an array with a constant value? sometimes the code is necessary. for example, i have X number of items in an array and i wish to put them evenly into an table. to call another function, i need to pass in an array of values and an array of table width. well in my case, i just need to fill an array for table width with something like

$table_width = array('50%', '50%');

here’s my code to fill an array assuming $num_cols contains the number X.

$dummy = range(0, $num_cols - 1); 
foreach($dummy as $val) { 
  $width_per[$val] = round(100/$num_cols)."%"; 
}

Is there a faster way to do this?

time left php function

just a simple function that returns how many days, hours, minutes and seconds are left given a timestamp i put together. kinda bored so sharing some code XP

give either $time_left (time left in timestamp) or $endtime (an ending timestamp)

/* returns an array of [days],[hours],[minutes],[seconds] time left from now to timestamp given */ 
function timeleft($time_left=0, $endtime=null) { 
	if($endtime != null) 
		$time_left = $endtime - time(); 
	if($time_left > 0) { 
		$days = floor($time_left / 86400); 
		$time_left = $time_left - $days * 86400; 
		$hours = floor($time_left / 3600); 
		$time_left = $time_left - $hours * 3600; 
		$minutes = floor($time_left / 60); 
		$seconds = $time_left - $minutes * 60; 
	} else { 
		return array(0, 0, 0, 0); 
	} 
	return array($days, $hours, $minutes, $seconds); 
}