The highly anticipated (and much hyped) iPhone 3G is finally here. Available starting July 11, 2008 and starts at $199 for 8GB. Check out Steve Jobs keynote address at Engadget.
And the WWDC 2008 Coverage roundup.
Tech notes and other thoughts that I can access easily. Only publicly viewable information will be posted. Everything here are solely my opinions and for educational purposes only. You are solely responsible for the usage of any information you've found here.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.InvocationTargetException;
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* <p>Utility class to access the OS environment variables.</p>
* @author Judah Lim (c)2007
* @copyright(disclaimer) USE AS-IS.
* NO WARRANTIES WHATSOEVER, EITHER EXPRESSED OR IMPLIED.
*/
public class EnvarsUtil {
private static Properties envars;
private static Log logger = LogFactory.getLog(EnvarsUtil.class);
public static void main(String[] args) {
System.out.println(EnvarsUtil.getEnvironmentVariable("deploy.env"));
}
/**
* <p>Retrieve an environment variable from current system environment.</p>
* @param envarName The name of the environment variable to retrieve.
* @return The String value of the environment variable, null if not found.
*/
public static String getEnvironmentVariable(String envarName) {
if(envars == null) {
initEnvironmentVars(false);
return envars.getProperty(envarName);
} else {
return envars.getProperty(envarName);
}
}
/**
* <p>Refresh the cached environment variables</p>
*/
public static void refreshEnvironmentVars() {
initEnvironmentVars(true);
}
/**
* <p>Read the environment variables and cahed them.</p>
* @param refresh set to true to refresh the cache, false otherwise.
* @return the environment variables as Properties.
*/
private static void initEnvironmentVars(boolean refresh) {
if (envars != null && !refresh) return;
Process process = null;
try {
process = osProcess();
} catch (InvocationTargetException e) {
logger.error("System environment values can't be retrieved.", e);
}
BufferedReader bufferedReader =
new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
envars = new Properties();
try {
while ((line = bufferedReader.readLine()) != null) {
int idx = line.indexOf('=');
String key = line.substring(0, idx);
String value = line.substring(idx + 1);
envars.setProperty(key, value);
}
} catch (IOException e) {
logger.error("System environment values can't be processed.", e);
}
// Clean up
process = null;
bufferedReader = null;
line = null;
}
/**
* <p>Run an OS process to get all environment variables.</p>
* @return Process the OS process executed containig the results of execution.
* @throws InvocationTargetException
*/
private static Process osProcess() throws InvocationTargetException {
Process process = null;
Runtime runtime = null;
String osName = null;
try {
runtime = Runtime.getRuntime();
osName = System.getProperty("os.name").toLowerCase();
if (osName.indexOf("windows 9") > -1) {
process = runtime.exec("command.com /c set");
} else if ((osName.indexOf("nt") > -1)
|| (osName.indexOf("windows 2000") > -1)
|| (osName.indexOf("windows xp") > -1)) {
process = runtime.exec("cmd.exe /c set");
} else {
process = runtime.exec("env");
}
runtime = null;
osName = null;
return process;
} catch (IOException e) {
// Clean up
process = null;
runtime = null;
osName = null;
// Convert to InvocationTargetException
throw new InvocationTargetException(e);
}
}
}