-
Jan Alonzo: jan
I recently had a first-hand experience of thrashing while in the middle of a product’s release cycle. As much as I’d like to talk about circumstances, it’s best if I’ll just point out ways on how to get out of it.
- Focus, focus, and focus on shipping the product.
- Do not listen to goals^dreams that doesn’t help with the product shipping on the target release date.
- Wake up and face reality.
Focus, focus, and focus
I could’ve done a lot of things to get out my demotivated state, but I thought that the best thing that I can do is to keep on focusing on shipping the product on the release date. Focus by pushing myself to do emotional work and not worry about other things but to ship the product. Focusing on shipping the product is the only way to actually ship the product.
Be deaf to pipe dreams
There were times when I felt that some of my team members are getting way too ahead of themselves. Don’t listen. Don’t even take note of those futuristic (and sometimes, non-realistic) ideas. Those ideas are not 1.0 material so there’s no point bothering myself, or the team, with them. If those ideas are really awesome, or important, they will come back to remind us after we ship 1.0. Until then, we needed to focus on those 1.0 release goals.
Reality
Lastly, it’s difficult to be perfect when you have tight deadlines and a release date looming. There were times when I thought we could’ve written parts of the code a bit better, refactored a bit better, and tested a bit better. I was demotivated for a while that we had hacks here and there and all I could was to add FIXMEs. Shame. But we’re not going to ship it on the date if we kept it pure, if we kept it clean. We had to ship, and unfortunately, we had to live with those technical debts. And that’s just reality.
Filed under: Uncategorized
-
Calen Legaspi: Hate is a Drug
Hate is a drug. It's addictive - it gives you a rush that you don't want to let go. It's a social drug - enjoying it with friends amplifies the rush and prolongs it. And like many drugs, it will alter your thinking, ruin your health, and damage relationships.
Hate is not anger. One can be angry with someone, and yet still love that person. Anger is fine, and often healthy and productive. Hate is borne of contempt, and contempt is borne of pride. One cannot hate someone if one does not feel that that someone is inferior, and one does not feel that someone is inferior without being proud.
When you're angry, let it out, express it. Make it emphasize your words and put energy to your actions. But once it subsides, let it go. Do not let anger open the door for contempt, and fan contempt into hate. Block the entry of contempt by filling the space with love. Again, you can be angry with a person and love a person at the same time. But you cannot love a person and have contempt for a person at the same time. They are mutually exclusive.
(Why am I writing about anger and hate in a blog about technopreneurship? It's because entrepreneurship will probably be the most stressful thing you'll ever do in your life, and if you go into business with your friends or family, it will take its toll on your relationships. All of you will make tough decisions where there are no clear answers, only huge consequences, and someone will inevitably feel wronged.
But decisions need to be made and made quickly, and only time will tell if these decisions were right or wrong. It's fine to be angry at these decisions and it's fine to argue passionately about them in the proper forum, but one must respect another's right to make those decisions, especially in the areas for which they are accountable.
At the end of the day, if you're angry with a coworker or business partner, let it all out in the conference room. Then leave the conference room, shut the door, and leave your anger behind.)
-
Calen Legaspi: Cloud Computing, a Simple Definition
Thousands of companies, from Fortune 500s to SMEs, are now rapidly moving to Cloud Computing services, platforms and infrastructure. Also, it's hard to find a major software vendor nowadays that's not positioning at least some of its products as a Cloud Computing technology. What is Cloud Computing and why is it so important?
Could computing is really just a fancy term for utility computing. In other words, applications, platforms or infrastructure are made available from a central service provider, similar to our utility companies for electricity, water and telecommunication. This simple concept has immense implications.
First, cost goes dramatically down since resources and operating costs are shared across more applications and users. Second, reliability and uptime go up since most cloud computing services provide fail-over and redundancy across thousands of servers and even multiple data-centers. Thirdly, cloud computing can provide better performance since calculations can be spread across the resources of multiple servers, and content can be placed on edge severs that are positioned close to the consumers of the content.
Companies, though, are concerned about security, control and vendor-lock-in issues that come with Cloud Computing. Each Cloud Computing provider needs to address these issues in order to reassure clients of reliable service.
-
Jan Alonzo: jan
Publishing a ClickOnce installer in Visual Studio 2008 is a hit-and-miss, and most of the time it’s a miss. It’s either you get build errors due to missing intermediate files, or if it’s successful, the application won’t launch due to a missing application.xaml file. This shouldn’t happen, and there’s not much you, the developer, can do unless you know how VS 2008’s ClickOnce publishing works.
But, there’s a workaround and that is to use MSBuild to generate your installer. On a single project solution, this should be as easy as typing msbuild.exe /target:publish in the top-level solution folder. If you have other projects within the solution that you want to generate a ClickOnce installer of, just go to that folder and use MSBuild to publish.
Filed under: Uncategorized
-
Paul Labis: Fix upside-down or inverted webcam on Ubuntu linux
I am running Lucid Lynx 64 bit OS version on my Asus i3 K52J Series laptop. Like everyone else, I like using Skype video/chat as well as Cheese camera for taking pictures and videos. Not until then when I had a problem using it.
I was so disappointed that my camera display was inverted! I tried reading several blogs and posting comments on Ubuntu forum threads online for days and but none of their solutions helped solved my problem. It could have been easily solved if only there was an option to invert my camera on Video4Linux Device Preference. Sadly, there was not! So, I decided to find a way to flip the camera by looking into export options on gtk-v4l(Video4Linux).
Below are the 2 things I did to solve my problem.
1. Add software source where libv4l-0 can be downloaded and install it by running the commands below on your terminal.- echo -e "\n# libv4l PPA\ndeb http://ppa.launchpad.net/libv4l/ppa/ubuntu `lsb_release -c | awk '{print $2}'` main" | sudo tee -a /etc/apt/sources.list
- sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com C3FFB4AA
- sudo apt-get update
- sudo apt-get install libv4l-0
2. Start cheese or skype from your terminal. (Note: The value of 3 on LIBV4LCONTROL_FLAGS flips the image both vertically and horizontally.) - export LIBV4LCONTROL_FLAGS=3 && cheese
- export LIBV4LCONTROL_FLAGS=3 && LD_PRELOAD=/usr/lib32/libv4l/v4l1compat.so skype
Alternatively, you can create a shortcut(custom application launcher) on your menu or on one of your panels. - Download skype and cheese scripts.
- Add custom application launcher on panel and point command to respective bash scripts.
- Click icon and start using the applications normally!
If your having problem on your sound device on Skype, take a look on my previous article on fixing sound device. Alright then, thats all I did folks! Hope this helps. Have a good one.
-
Paul Labis: Fix Asus K52J Sound or Speaker Problem
I just got a new replacement company laptop for my 2 year acer dual core laptop. I now have Asus i3 K52J Series Laptop. Like everyone else using Lucid Lynx on their Asus. I had a problem with my sound and audio device and drivers.
Some of my problems were: - Speakers do not mute when headphones are plugged in.
- HDMI sound out not working.
- External microphone not working.
Thanks to this Ubuntu Forums Thread where a fix is posted though incomplete in my case. So, I decided to create one of my own and hope to help someone else looking for a solution online. The steps below are the things I did fixing this problem. - Download linuxtant alsa driver at www.linuxant.com. The file you need is alsa-driver-linuxant_1.0.23.0_all.deb.zip.
- After downloading, extract the file and install by using gdebi-gtk(eg. gdebi-gtk alsa-driver-linuxant_1.0.23.0_all.deb).
- Open a terminal and run command "$alsamixer"
- Unmute S/PDIF (you can do that pressing "m")
- Below is a screenshot of my alsamixer with a headset attached to audio jacks.
Alright then, your set and ready... Hope this article helps! Have a good one...
-
Jan Alonzo: jan
There were a few times when I wanted to follow a specific tweet in Twitter because I’m interested in what other people will say. For example, if Brad asks if there are restaurants nearby that serve Laksa, I would be interested in what his followers will recommend as well because, I too, like Laksa[0].
This feature has more value to me. It’s like Quora but for tweets.
[0] Yes, you can use geolocation services but I hope you get my point.
Filed under: Uncategorized
-
Dean Berris: deanberris


So one of the cool news items that came about in the Boost mailing list is the news that Boost.Phoenix’s version 3 ported to use Boost.Proto. Just quickly, Boost.Proto is a compile-time expression templates compilation/evaluation engine written in C++ to allow for creating domain-specific embedded languages within C++. Don’t worry if you don’t understand what that means. Boost.Phoenix on the other hand is a functional programming domain-specific embedded language that allows for creating function objects using as-close-to-C++ syntax to represent them. Don’t worry if you didn’t understand what that means either. Now if you think about it a little, the implications of being able to create function objects (in C++ code) on the fly and a compiler infrastructure for these on the fly structures during the compile phase (a meta-compiler?) means you can then manipulate code like data. Lisp macros much?
What is important though are the following tidbits:
- With Boost.Phoenix you can create lazy function objects on the fly in C++ (popularly known as lambda’s and/or closures). This means you can then treat Boost.Phoenix-generated function objects as, well, first class citizens in C++ because they are, well, objects.
- With Boost.Proto you have a compiler infrastructure that allows you to convert expression templates into actual executable objects, enforce your DSEL’s grammar/semantics while you’re at it, and then have them evaluated at run-time. The run-time part isn’t very exciting, but the fact that you can actually perform transformations on expression template trees at compile time to, well, transform these trees into different trees or wire up different objects together, is really interesting.
- One of the big things that Lisp boasts of is a way to deal with Lisp CODE as DATA and then perform transformations on the code at compile-time using Lisp macros. This means now that Boost.Phoenix is a C++ function object-building DSEL in C++ and Boost.Proto allows you to transform the expression templates into whatever form you like (much like how macros work in Lisp), then C++ has effectively implemented an infrastructure that allows programmers to gain the power of Lisp macros in C++ without having to write a Lisp interpreter — all enforced by the C++ compiler to boot.
This didn’t seem like great news to me until I actually thought about it a little and found that indeed it would really be possible to deal with C++ expression templates in Boost.Proto much like how Lisp programmers would deal with Lisp code in Lisp using macros.
When I get the time I will definitely try to squeeze in an example. But for now let your imagination run wild with the implications of these possibilities.
Filed under: boost, cool stuff, functional, library, templates 
-
Jan Alonzo: jan
Filed under: Uncategorized
-
Paul Labis: Combine Jetty and Spring Application Context XML Configuration
The goal is to use one xml configuration file which is Spring's applicationContext.xml and load it only once for the duration of the application. Using Embedded jetty as my lightweight server to run my Spring MVC application, I must tell my dispatcher servlets to use spring applicationContext.xml which already been loaded as its parent context. That way, dispatcher servlet will be able to referenced bean configured on springs application context.
To do that, create a class that extends org.mortbay.jetty.Server and implement org.springframework.context.ApplicationContextAware. This is pretty straight forward, we extend jetty server so we can configure its parent context. We implemented spring application context aware so whenever spring successfully loaded applicatContext.xml bean configuration, it gets the current application context. We then configure it as parent context of servlets. Code on ServerConfigurer.java: package com.sample.config;
import org.mortbay.jetty.Server; import org.mortbay.jetty.servlet.ServletHandler; import org.mortbay.jetty.webapp.WebAppContext; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.GenericWebApplicationContext;
public class ServerConfigurer extends Server implements ApplicationContextAware { private String _webAppDir = null; private String _contextPath = null; private ServletHandler _servletHandler = null; private static ApplicationContext _applicationContext = null;
public String getContextPath() { return _contextPath; } public ServletHandler getServletHandler() { return _servletHandler; } public String getWebAppDir() { return _webAppDir; } /** * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext) */ @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { _applicationContext = applicationContext; } public void setContextPath(String contextPath) { _contextPath = contextPath; } public void setServletHandler(ServletHandler servletHandler) { _servletHandler = servletHandler; } public void setWebAppDir(String webAppDir) { _webAppDir = webAppDir; }
@Override protected void doStart() throws Exception { final WebAppContext webAppContext = new WebAppContext(getServer(), _webAppDir, _contextPath); final GenericWebApplicationContext webApplicationContext = new GenericWebApplicationContext(); webApplicationContext.setServletContext(webAppContext.getServletContext()); webApplicationContext.setParent(_applicationContext); webAppContext.getServletContext().setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, webApplicationContext); webApplicationContext.refresh(); webAppContext.setServletHandler(_servletHandler); addHandler(webAppContext); super.doStart(); } }
Text on bold note: Those are the pieces of code that basically are the most important in the server configurer. The setApplicationContext() method is the one that configures that gets the application context loaded by spring. The method doStart() is the one that does the story telling to web app that a current context has been loaded and it is the context should be used.
Code on applicationContext.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" >
<!-- more beans configured --> <bean name="webServer" init-method="start"> <property name="connectors"> <list> <bean> <property name="host" value="${jetty.host}"/> <property name="port" value="${jetty.port}"/> </bean> </list> </property>
<property name="webAppDir" value="${jetty.webApp.dir}"/> <property name="contextPath" value="${jetty.context.Path}"/> <property name="servletHandler"> <bean> <property name="servlets"> <list> <bean> <property name="name" value="dispatcher" /> <property name="servlet"> <bean /> </property> </bean> </list> </property> <property name="servletMappings"> <list> <bean> <property name="servletName" value="dispatcher" /> <property name="pathSpec" value="*.htm" /> </bean> </list> </property> </bean> </property>
<property name="handlers"> <list> <!-- log handler --> <bean> <property name="requestLog"> <bean> <property name="append" value="true"/> <property name="filename" value="${http.log.dir}/access.log.yyyy_mm_dd"/> <property name="extended" value="true"/> <property name="retainDays" value="999"/> <property name="filenameDateFormat" value="yyyy-MM-dd"/> </bean> </property> </bean> </list> </property> </bean> </beans>
That xml file comprise server configuration of your jetty server pointing dispatcher servlet use Spring's application context. Your next step is run your application the way you want. example: _applicationContext = new ClassPathXmlApplicationContext(_resourceLocations); _applicationContext.start();I also did another article related to Spring MVC/IOC-DI and Embedded Jetty utilizing applicationContext .xml of Spring. You might be interested running and configuring jetty through java code and not from applicationContext.xml.
Hope this helps! For suggestion, please feel free to leave your comments.
|