Showing newest 11 of 20 posts from June 2009. Show older posts
Showing newest 11 of 20 posts from June 2009. Show older posts

Session sharing in Apache Tomcat 6

Sometimes when you want to create large portal-like application which consists of a few smaller applications, or you want to create your own SSO (Single Sign On) domain, you must share session and session data between all interested applications.

This article will show you how you can share session and data across applications in Apache Tomcat 6.

Enabling session sharing

Open $CATALINA_HOME/conf/server.xml, find the 8080 connector definition:

<connector port="8080" protocol="HTTP/1.1" connectiontimeout="20000" redirectport="8443" />

and simply add emptySessionPath="true" attribute to it so that it looks something like this:

<Connector port="8080" protocol="HTTP/1.1" emptySessionPath="true" connectionTimeout="20000" redirectPort="8443" />

Test projects

There are two simple applications called session1 and session2.

session1 increments the counter:


<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>++</title>
</head>
<body>
<h1>I'm incrementing the counter!</h1>
<c:set var="counter" value="${sessionScope.counter + 1}" scope="session" />
<h1>Current counter value is ${sessionScope.counter}</h1>
</body>
</html>

session2 decrements the counter:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>--</title>
</head>
<body>
<h1>I'm decrementing the counter!</h1>
<c:set var="counter" value="${sessionScope.counter - 1}" scope="session" />
<h1>Current counter value is ${sessionScope.counter}</h1>
</body>
</html>
Deploying

Deploy both applications and refreshed a few times their index pages:

http://localhost:8080/session1/
http://localhost:8080/session2/

although the JSESSIONID cookie was the same:

http://img39.imageshack.us/img39/7107/aftercomparison.png
counters were independent. The first one showed +4, the second one showed -4.

The problem and the solution

Problem: even though the session id is the same in both applications you cannot share data directly using HttpSession object.

Solution: you have to use session-aware cross contexts in order to share data between applications.

Cross contexts in Apache Tomcat

First you have to allow applications to access each others' contexts.

Open $CATALINA_HOME/conf/context.xml and add crossContext="true" attribute to the root element:
<?xml version='1.0' encoding='utf-8'?>
<Context crossContext="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Manager pathname="" />
</Context>
Re-start the server.

Resources: jee-bpel-soa

Funny Technology

Free funny images on hilarious and funny technologies and much more images on the technology fun in this post. Watch out the funniest cartoon images and pics of fun technology:

1. How technology changed us in just 18 years

anhvui

2. What's your address?


[3_address_maulik_dave.gif]


3. The coffee machine is broken ...

Fun Technology

4. Nokia Unleashes new Hands

5. Technology for country Folk

http://www.tips4pc.com/images/image001.jpg

Have a nice day!

Top 10 Apps that Boosts Ubuntu’s User Experience

1. Ubuntu Tweak

Ubuntu Tweak allows changing all the itsy-bitsy pieces of Ubuntu desktop OS. It is the equivalent of TweakUI for Windows. You can achieve the same results by using the gconf-editor tool in Ubuntu. Ubuntu Tweak also helps install third-party upgrades in a simpler fashion so it definitely gives a new boost to your clumsy Ubuntu desktop and increases UserExperience.

image

image

2. Screenlets

The Screenlets application provides access to hundreds of Google Gadgets and other open source widgets, like Remember the Milk or Google Calendar. Ubuntu can also hide the Screenlets until a key is pressed – to get it done you will also need to install the compizconfig-settings-manager package.

This is what they say:

Screenlets are small owner-drawn applications (written in Python) that can be described as “the virtual representation of things lying/standing around on your desk”. Sticknotes, clocks, rulers, … the possibilities are endless.

imageimage

3. Handbrake

Handbrake works with the VLC media player to rip a DVD into a video format file.

This is what they say:

HandBrake is an open-source, GPL-licensed, multiplatform, multithreaded video transcoder

image

image

4. Yakuake

Yakuake is a terminal application with tabbing features that is fast with custom coloring and shading and offers an integrated experience. It has been coded for KDE-based systems but it will run on Ubuntu. You may want to make this program start up with system startup.

image
image

UPDATE: They are updating their website which currently says:

The website is under heavy construction. Please be patient! The version 3.0 of YaKuake is on its way with great new features.

5. UNetbootin

UNetbootin turns any Linux operating system distribution into something that boots from a USB stick. You can custom-make your own operating system with a chosen kernel and UNetbootin makes the process very easy.

image

image

6. Songbird

Songbird is an attractive and adaptable music app for Ubuntu. It can manage your iPod, grab album art, play streaming web tracks and has a host of add-ons that are able to mash up web data and you may also customize how this app looks and feels.

image

image

7. Conky

This application is controlled by text files and you can mix and match the features and data you want displayed. Conky can make available any data you want on the desktop and can keep it updated.

image

8. VirtualBox

VirtualBox is much like VMWare but the only difference is that it’s OpenSource. Its primarily for the enterprise users but could be used on any machine for virtualizing. So if you are not yet ready for migration to Ubuntu then you can get a taste of it by installing it on top on VirtualBox i.e. your virtualized Ubuntu experience.

image

image

9. DropBox

DropBox integrates as a folder in your home directory and synchronizes the files with a 2 GB free account and offers access and notifications from system tray.

image

image

10. GNOME Do

GNOME Do is a productivity tool and application launcher for Ubuntu. You can assign keyboard shortcuts to open applications, use terminal commands, update Twitter, etc. GNOME Do also includes a desktop clock.

image

image

Resources: Programmer Fish

4 Steps To a Professional Database Design

Just as you require a blueprint to build a house, you will need a database blueprint in order to implement a database successfully .The process of the construction of the latter is called the ‘Designing Phase’ which includes a number of heavy steps for the end-product to be flexible. This phase actually defines the information (+ its structure) that will go into the database, the assumptions made related to the type or values of the data items and the relationship between the data items within the database. All professional companies use this procedure design their database and its the most efficient way.

It includes four steps :

1. Requirement Analysis

The database requirements are determined. The exact requirement of the user from the system is captured.All the relevant information related to the system is gathered. The six most common techniques are:

  • Sampling of existing documentation, forms, databases
  • Research and site visits
  • Observation of the work environment
  • Questionnaires
  • Prototyping -build a small model of the user’s requirement to verify before hand
  • Joint Requirements Planning (JRP)- group meetings are conducted to analyze existing problems

2. Entity Relationship Diagram (ERD)

ERD is a high level notation for expressing database designs. It graphically defines the structure of the database in a very simple and understandable manner through the use of symbols.

The information gathered during the ‘Requirement Analysis’ step is transformed into an ERD(Entity Relationship Diagram) that is the data is organized into entities and relationships between them. So instead of going through a lengthy piece of material, we have a pictorial representation of the same piece of information which is easier to read.

A sample ER Diagram is this:

673px-ER_Diagram_MMORPG

(image courtesy Wikipedia)

Various data modeling languages can be used to create an ERD like crow’s foot notation, Chen notation, IDEFIX (Integration Definition For Information Modeling), Shading notation, Bachman notation, UML (Unified Modeling Language) standard etc. Wikipedia has a good page about ER diagrams here

3. Relational Model

It is very easy to understand the scenario from an ERD, but the latter is very weak from the implementation point of view. Concepts of subclasses (IS -A structures) and relationships, for example, cannot be implemented in the database directly .At this point relational model comes into play.

A relational model employs a single concept of tables (also called relations).The entity sets and the relationships depicted in the ERD are converted into tables –a relational model.

There are five steps for the conversion:

  • Turn each non-weak entity set into its corresponding table with the same set of attributes
  • Replace a relationship by a relation whose attributes are the keys of the connecting entity sets
  • Some relations can do well if combined or excluded. For example the supporting relationships (for weak entity sets) need not to be converted to relation at all.
  • Replace a weak entity set by a relation whose attributes are its own attributes (if any) plus the borrowed attributes that help to make its primary key.
  • Convert the subclass structures using the object oriented approach, E/R style conversion or null values.

Explanation of converting ER diagram to relationship model has vast concepts that will not be covered in this post. There are many good books and online resources available that makes it easy to understand. For an overview consider this example that I have taken from Wikipedia:

An idealized, very simple example of a description of some relvars and their attributes:

  • Customer(Customer ID, Tax ID, Name, Address, City, State, Zip, Phone)
  • Order(Order No, Customer ID, Invoice No, Date Placed, Date Promised, Terms, Status)
  • Order Line(Order No, Order Line No, Product Code, Qty)
  • Invoice(Invoice No, Customer ID, Order No, Date, Status)
  • Invoice Line(Invoice No, Invoice Line No, Product Code, Qty Shipped)
  • Product(Product Code, Product Description)

In this design we have six relvars: Customer, Order, Order Line, Invoice, Invoice Line and Product. The bold, underlined attributes are candidate keys. The non-bold, underlined attributes are foreign keys.

4. Normalization

Normalization is a process of increasing the normal form rating .It primarily eliminates the following dependencies in order to avoid redundancies and data anomalies:

  • Partial dependency : based on part of the primary key
  • Transitive dependence : based on an attribute that is not part of the primary key

The first three forms of normalization are:

  1. 1NF
    • Lowest implementable normal form
    • Primary key entity integrity requirements are met
    • Each cell contains a single value
    • Non-Primary key values are dependent on the primary key
  2. 2NF
    • All 1NF conditions are met
    • Partial dependencies are removed
  3. 3NF
    • All 2Nf conditions are met
    • Transitive dependencies removed

Higher forms up to 5NF and BCNF (Boyce-Codd Normal Form) also exist.

Normalization can be applied in two ways:

  • Normal forms applied after the relational model is created
  • The third step is skipped and the creation of tables is done with the normalization in consideration directly
Resources: Programmer Fish

Top Latest Bugs in Java

This is a list of the top these bugs with the most votes. This list is compiled on a daily basis, on sun bug database

1. Semantics of external process is not defined in JLS

Description: By default, the child process's stdout and stderr are redirected to parent process. If parent process does not read the pipe, the child process will block when pipe is full.

2. Java2D incorrectly renders objects with large coordinates

Description: Java2D behaves incorrectly (and very unpredictably) when rendering objects with large coordinates.

3. ClassLoader.loadClass() throws java.lang.ClassNotFoundException: [Ljava.lang.String; in JDK 6.0

Consider this simple test program:

public class Test {

public static void main(String[] args) throws Exception {
String[] s = new String[] { "123" };
String clName = s.getClass().getName();
test.class.getClassLoader().loadClass(clName);
}
}

This runs fine on JDK 1.5, but throws this exception on JDK 6.0.

4. Method.invoke access control does not understand inner class scoping

Running the following program, which should succeed, results in an IllegalAccessException.

import java.lang.reflect.*;

public class TestPrivateAccess extends Object {
TPAInnerClass inner = new TPAInnerClass();

private void privateMethod() {
System.out.println("private method.");
}

class TPAInnerClass extends Object {
void dynamicInvoke() {
try {
Method method = TestPrivateAccess.class.getDeclaredMethod("privateMethod", new Class[] {});
method.invoke(TestPrivateAccess.this, new Object[] {});
}
catch (Exception e) {
e.printStackTrace();
}
}
}

public static void main(String[] argv) {
TestPrivateAccess tpa = new TestPrivateAccess();
tpa.inner.dynamicInvoke();
}
}

5. PermHeap bloat in and only in server VM

Description: With updating ClassLoader several times, jdk1.4.1_05 server VM will be down with an error java.lang.OutOfMemoryError.

Environment:
OS : Solaris8
MPU: sparcv9 processor 450 MHz * 2
Mem: 2048 Megabytes

Reproduction:
1. To unzip the attached tp.zip.
2. To change the direcotory to tp.
3. Set the JAVA_HOME variable viable in the script client.sh.
4. To type "sh client.sh" to launch the test program.
5. You will see the test program stop there and java.lang.OutOfMemoryError shown.
...

6. Lost newly entered data in the cell when resizing column width

JDK 1.6 java swing data in the cellis lost when column width is resized.


Benchmarking Browsers with Real Websites: Chrome, Firefox, Opera, Safari, IE

When it comes to a browser benchmark people act like this:

The problem with browser benchmarks today is that they are extremely synthetic. A majority of them are Javascript only because its easier to test.

Why Do We Need a Better Benchmark?

  • Sunspider – Javascript only.
  • V8 - Javascript only.
  • Dromaeo – Mostly Javascript, some CSS.
  • Acid Test – Random web standards. No one really cares unless you get close to 100 or 0.
  • Peacekeeper – It runs Java and then allows itself to download and run an EXE. It spends most of the time doing a 3D benchmark on your browser as though you were running 3dMark.

As you can see, Javascript benchmarks dominate the landscape. There is a complete lack of benchmarks with anything remotely applying to real life situations.

Thus there are many who completely dismiss these benchmarks, stating that they don’t really measure the “true speed” of a browser. Maybe they are right.

How to Make a Better Benchmark?

According to Microsoft:

Knowing the top speed of a car doesn’t tell you how fast you can drive in rush hour. To actually see the difference in page loads between all three browsers, you need slow-motion video. This one’s also a tie.

Using slow-motion video? What a great idea. Maybe we can benchmark operating systems like that.

However there is a built-in timer which can let us know when the browser finishes loading a page. The hard part is getting it to load in a new page while using websites that people actually use in real life. Details explained later.

Setup

Core 2 Duo 1.8 GHZ 2GB Mem
Vista 32bit

Chrome 3.0.189.0
Firefox 3.5 RC 2
Internet Explorer 8.0.6001.18702
Opera 10.00 Beta Build 1551
Safari 4.0 (530.17)

0 Extensions.

Websites

Here are the websites used in this test.

  • Baidu.com – Chinese Google
  • Blogger.com – Popular blogsite
  • Facebook.com – Popular social site
  • Google.com – Popular search Engine
  • Havenworks.com – A poorly designed site weighing 820 kb with over 280 images
  • Live.com – Microsoft search engine
  • Myspace.com/tom – Typical Myspace profile
  • Reddit.com – Link aggregator
  • Wikipedia.org – Online encyclopedia

All websites were saved to disk and opened beforehand into the browser to minimize the impact of the few remaining external links and hard drive seek times.

Results: Average Time to Load 1 Page – 10 Repetitions (in ms)

Chrome

  • Baidu – 229
  • Blogger – 38.6
  • Facebook – 146.1
  • Google – 11
  • Havenworks – 482.2
  • Live – 42.3
  • Myspace – 536.5
  • Reddit – 141.4
  • Wikipedia – 222.8
  • Total Average – 205.5

Firefox

  • Baidu – 37.3
  • Blogger – 93.9
  • Facebook – 263.9
  • Google – 56.4
  • Havenworks – 1377.8
  • Live – 76.9
  • Myspace – 1386.4
  • Reddit – 337.3
  • Wikipedia – 114.1
  • Total Average – 416

Internet Explorer

  • Baidu – 32.6
  • Blogger – 92.2
  • Facebook – 238.7
  • Google – 34.4
  • Havenworks – 2722.2
  • Live – 107.7
  • Myspace – 922.6
  • Reddit – 451
  • Wikipedia – 410.2
  • Total Average – 556.8

Opera

  • Baidu – 24
  • Blogger – 77.5
  • Facebook – 214
  • Google – 27.5
  • Havenworks – 584
  • Live – 47
  • Myspace – 500
  • Reddit – 279
  • Wikipedia – 83
  • Total Average – 204

Safari

  • Baidu – 238.3
  • Blogger – 58.9
  • Facebook – 203.4
  • Google – 22.4
  • Havenworks – 438.3
  • Live – 47
  • Myspace – 442.8
  • Reddit – 161.8
  • Wikipedia – 233.6
  • Total Average – 205.2

loading

Conclusion

Average Loading Times (in ms)

Opera             204
Safari 205.2
Chrome 205.5
Firefox 416
Internet Explorer 556.8

Opera is the winner, but not by far. Interestingly, the browsers all perform differently on different websites.

Before You Complain

Download the benchmark here and use your own websites if you like. Follow the instructions in the source code.

Frequently Asked Questions

Q: According to some outdated website, webkit fires onload way too early. Therefore your benchmark is flawed.
A: It was fixed 2 years ago.

Q: Your statistics suck. You should have used a geometric mean with n degrees of freedom and 95th percentile measurements with a chi-squared test to calculate the deviation from a Weibull distribution … etc…
A: I have yet to hear a convincing reason why a simple average is not good enough. The only complaints I have so far is from people saying that the Havenworks bench is unfair. Why should I weigh it any differently than the other sites? Run your own tests.

Q: Can you include my favorite X browser and X platform so your benchmark doesn’t suck?
A: I don’t have infinite time, money, computers, and incentives. If you can offer any of those, maybe I will oblige.

Q: Why save websites to disk? Why not just load them online?
A: Because we’re testing loading speed, not your connection and how slow the website is.

Q: But what about all the super duper network code that my browser has?
A: The only feature that would make any appreciable difference would be concurrent connections (which I believe all modern browsers have). Other features like DNS look-ahead (likely cached) or different networking engines probably costs microseconds compared to the milliseconds it takes for a page to load.

Q: Why isn’t my favorite website there?
A: Because I couldn’t find a way to reliably download and adapt them. Wget refuses to work correctly, and some websites have some Javascript that messes with the script. So I just used Firefox to download. (Yahoo, Slashdot, and Digg don’t play nicely)

Q: Some of your test sites still have external links.
A: I tried HTTrack, wget, and the browsers for saving pages, and none of them work 100%. You can fix it by hand editing, but I don’t have the time, money, and incentive to do so completely. I have removed some by hand, but websites nowadays like to obfuscate their javascript making it a hassle.

Q: Why didn’t you use DOMContentLoaded etc..?
A: This was what I wanted to use. But it doesn’t work on IE8, and 90% of the time, the browser is stuck and useless in that stage (especially when loading from hard drive instead of online).

Q: You have to paste that tiny script into every webpage you want to benchmark. That’s lame.
A: My first version did not require that. Blame IE8 for being the only browser to break it.

Q: My browser is still the best.
A: Ok

Q: Your benchmark is worthless because it doesn’t show the benefit of extensions or how it matches the color of my eyes, I will never consider using another browser.
A: Ok

Resources: Codexon

Công nghiệp phần mềm Việt Nam: Thừa thách thức, thiếu triển vọng


Không sở hữu công nghệ nguồn và công nghệ cốt lõi - chủ yếu chỉ tận dụng nhân công rẻ để gia công phần mềm - đầu tư nhiều hơn nhưng kết quả kém hơn - liên tục trong nhiều năm không đạt mục tiêu... Thực trạng trên đang cho thấy ngành công nghiệp phần mềm (CNPM) của VN đang tụt dốc.

Trong khi đó, VN lại vẫn đang đặt mục tiêu xa vời là trở thành "cường quốc về CNTT".

Thực trạng đáng buồn

Ngay từ năm 2000, Bộ Chính trị đã có Chỉ thị số 58-CT/TW về đẩy mạnh ứng dụng và phát triển CNTT phục vụ sự nghiệp CNH-HĐH đất nước. Có thể nói, đây chính là "kim chỉ nam" cho việc phát triển CNTT nước nhà, trong đó có CNPM của VN. Chỉ thị này đặt mục tiêu: Sau 5 năm CNPM phát triển, hình thành định hướng xuất khẩu PM; nguồn nhân lực CNTT phát triển nhanh, đa dạng trong đào tạo...

Tuy nhiên đến năm 2007 khi thực hiện tổng kết 5 năm, điều "đau lòng" mà chính giới CNTT VN phải thừa nhận, nói ra và chấp nhận là: Mục tiêu "Trình độ và hiệu quả ứng dụng CNTT đạt mức trung bình các nước trong khu vực đã không đạt. Thậm chí, trình độ CNTT của VN đã bị xếp vào hàng tụt hậu xa so với một số nước ASEAN và mức trung bình của thế giới".

Riêng đối với ngành CNPM, mục tiêu "500 triệu USD sản lượng PM, trong đó có 200 triệu USD xuất khẩu" cũng thất bại thảm hại. Cụ thể đến thời hạn như kế hoạch, CNPM của VN chỉ đạt tương ứng là 45% của số tiền 500 triệu USD. Còn đối với xuất khẩu, CNPM của VN chỉ đạt được tỉ lệ là 35% trong số 200 triệu USD như đề ra.

Tuy nhiên, sự "lạc quan tếu" của ngành CNPM vẫn diễn ra trong hầu hết các năm tiếp theo. Năm 2006, "cột mốc" 500 triệu USD tiếp tục thất bại khi hệ thống DN và toàn ngành CNPM của VN chỉ chinh phục được con số 300 triệu USD, trong đó xuất khẩu PM đạt được 90 triệu USD. Một lần nữa, Hiệp hội DNPM VN (VINASA) lại phải thừa nhận rằng: CNPM của VN chưa đạt mục tiêu đề ra, chưa xứng với kỳ vọng và... phải chờ đợi sự đột phá.

Tiếp đó đến năm 2007, trong khi nền kinh tế thế giới khởi sắc, thậm chí và phát triển nóng; CNPM của VN trong năm này được hứa hẹn bởi hàng loạt các gói đầu tư lớn từ các tập đoàn lớn vào VN. Thế nhưng, dù đã hết sức cố gắng, mức độ tăng trưởng 30% đã thực sự trở thành con số ấn tượng. Tuy nhiên, CNPM của VN một lần nữa lại phải ngậm ngùi với con số 498 triệu USD. Như vậy tức là sau 3 năm, mục tiêu 500 triệu USD doanh thu từ CNPM vẫn chưa đạt được.

GSC - VN-ict.jpg


Tổng kết giai đoạn này, ông Phạm Thúc Trương Lương - TGĐ Cty công nghệ tin học Tinh Vân, ông Trần Lương Sơn - Tổng Giám đốc VietSoftware và nhiều DN khác cho rằng: CNPM của VN vẫn chưa tạo ra được một cuộc cách mạng hay là ấn tượng. Nhiều DN đã hy vọng, kỳ vọng, nhưng thực sự đã bị thất vọng.

Báo động tụt dốc

Năm 2008, CNPM của VN đã bắt đầu có dấu hiệu rơi vào sự suy thoái và tụt dốc. Theo nhiều chuyên gia CNTT thì thực sự ngành CNTT cũng như giới CNPM của VN đã rơi vào chủ quan, lơ là và thậm chí là vẫn duy ý chí và "lạc quan tếu". Trên thực tế, trước những đánh giá rất cao về VN như "Con rồng", "Con hổ", "Tốp đầu"... của các tổ chức, DN nước ngoài đã khiến cho VN "ngủ quên" mà không biết rằng các thị trường như Indonesia, Thái Lan, Philippines đang lớn dậy.

Đặc biệt, Trung Quốc và Ấn Độ mới thực sự là những "Con rồng", "Con hổ" khi các quốc gia này vừa có nhân lực dồi dào, vừa có chiến lược đầu tư và phát triển đúng hướng. Đây cũng chính là những quốc gia đông dân đang cạnh tranh trực tiếp với VN cả về số lượng nhân lực CNTT, cả về giá cả gia công PM và cả về trình độ CNTT cũng như trình độ ngoại ngữ...

CNPM VN đang khủng hoảng thừa nhân lực.
Chính vì thế mà trong năm 2008, thay vì mức độ tăng trưởng hơn 30% từ các năm trước; CNPM của VN tụt dốc và chỉ còn là dưới 20% - tương ứng với doanh thu 600 triệu USD. Thế nhưng, giai đoạn "ngủ quên" này đã di hoạ lâu dài hơn. Tháng 5.2009, ngành CNPM VN thực sự "giật mình" và bắt đầu nhìn nhận, đánh giá lại.

Tại cuộc hội thảo "Thách thức và triển vọng của CNPM VN năm 2009", một "sự thực phũ phàng" là tất cả các DN, nhà quản lý, nhà khoa học, nhà kinh tế chìn nhìn thấy thách thức, sự sa sút nghiêm trọng mà không hề thấy được một triển vọng nào.

Theo nhận định của VINASA, năm 2009 này CNPM của VN sẽ chỉ có thể tăng trưởng tối đa 10%. Thậm chí nhiều DN còn bi quan hơn khi cho rằng con số này cũng đã là "lý tưởng". Thế nhưng, điều lo ngại hơn không chỉ ở con số tăng trưởng "bé tí" đó, mà là ở những báo động đỏ.

Cụ thể, hàng loạt dự án CNTT cũng như liên quan đến CNPM bị huỷ bỏ; hàng loạt DN khách hàng và thị trường xuất khẩu.... biến mất; DN thu hẹp sản xuất, buộc phải sa thải nguồn nhân lực thuộc lĩnh vực sản xuất và kinh doanh "cao cấp", trong khi trước đó dày công đào tạo.

Đặc biệt hơn thế, những đánh giá cao của các các tập đoàn, DN nước ngoài sớm trở thành "đãi bôi" khi mà họ chuyển hướng sang các thị trường như Trung Quốc, Ấn Độ khi các quốc gia này giảm giá thành sản xuất, nâng cao chất lượng dịch vụ và sản phẩm. Đồng thời, đây là các quốc gia có nguồn nhân lực đạt trình độ cao hơn hẳn VN.

Tại hội thảo, nhiều DN và nhà quản lý đã phải thốt lên rằng: Thực sự nghiệt ngã. Trong khi các DNVN phải thay đổi giảm mục tiêu tăng trưởng 2-3 lần thì Trung Quốc lại tăng trưởng mạnh với gần 30%, đạt doanh số hơn 110 tỉ USD, Ấn Độ cũng tăng gần 25% với doanh thu hơn 52 tỉ USD. Các quốc gia láng giềng như Thái Lan, Philippines và Indonesia vẫn giữ được đà tăng trưởng ổn định. Các chuyên gia CNTT và DN cho rằng: CNPM của VN đang thực sự tụt dốc và suy thoái.

Chủ yếu là gia công

Tại Hội thảo "Thách thức và triển vọng 2009 đối với ngành công nghiệp phần mềm VN" (Hiệp hội Doanh nghiệp phần mềm Việt Nam - VINASA - tổ chức), hầu hết các ý kiến cho rằng, những thành công ở các năm trước của công nghiệp phần mềm VN cũng chỉ dừng lại ở những con số báo cáo, chưa có thực chất và có sự tăng trưởng vững chắc về nội lực. Sự thành công đó chủ yếu về mặt gia công sản phẩm từ các đơn hàng nước ngoài.


Trong khi đó những công nghệ nguồn, tăng trưởng nhân lực và nghiên cứu - những vấn đề cốt lõi cho sự tăng trưởng bền vững - thì hầu như không có gì. Thay cho kỳ vọng tăng trưởng 30%-40%, năm 2008, con số này chỉ đạt dưới 20% (với tổng doanh thu xấp xỉ đạt 600 triệu USD, thấp hơn khoảng 100 triệu USD so với mục tiêu đề ra).

(theo Lao động)

20 Must-Read Blogs For Freelance Writers

The idea of this post comes from Steven’s recent post on freelance blogging. Freelance writing certainly has many advantages and can be rewarding too.

It goes without saying that in order to become a freelance writer, you gotta love writing. But you should also consistently work on sharpening your skills. And how do you do that? Reading well-written articles and blogs is a very good start! This can help you write innovative and appealing content.

Reading blogs with good writing is a must if you want to improve your skills as a writer/blogger. Keeping this in mind, I decided to list 20 blogs which should be on every freelance blogger’s RSS feed reading list. This is not a definitive list as there are many more good blogs and I can’t possibly name all of them. But still it’s a useful list which I hope you will enjoy.

Note: these blogs are not all about freelance writing or writing for the web. What they have in common is they’re all really well-written.

Here’s the list in no specific order (It’s not a top 20 list!)

  • 1. Zen Habits & Write To Done Zen Habits and Write To Done are written by Leo Babauta, an experienced writer and a prolific blogger. Not only does he write great content he has an amazing writing style which is simple yet captivating.
  • 2. Problogger I’d be very surprised if you haven’t heard of this blog. Problogger is written by Darren Rowse and teaches the art of blogging and making money through it. In spite of being one of the most famous blogs on the planet, Darren still maintains the same old way of writing articles which are useful, impressive and easily understandable.
  • 3. Dumb Little Man One of the best productivity blogs around, Dumb Little Man is edited by Jay White and written by an impressive group of writers who produce useful articles on how to increase your everyday productivity and manage time in a better manner.
  • 4. Copyblogger Brian Clark is an authority when it comes to blog writing and you cannot afford to miss any of his articles if you want to become a good writer. Seriously.
  • 5. Freelance Switch Written by the best freelance writers and edited by Skellie, this blog presents insightful articles which include tips and tricks for freelancers and web workers. Thanks to it’s great content, the blog has achieved huge growth in the past one year and should be on your reading list too.
  • 6. Dosh Dosh Maki’s writing style and his in-depth analysis of topics has gained him admiration and respect in the blogosphere, not to mention a huge reader base. One of the most well-written blogs around and certainly a writer’s paradise.
  • 7. Seth Godin Seth’s unique and candid style of writing makes his blog a must read for all writers and bloggers.
  • 8. 43 Folders Although Merlin doesn’t write much these days, his blog still remains one of the most useful productivity blogs with some very nicely written articles.
  • 9. Skelliewag Skellie’s proficiency as a writer and blogger is well known and she has been producing great web content for years. Skelliewag is her flagship blog which boasts of some brilliant articles which are quite useful for bloggers.
  • 10. Men With Pens This blog is written by James and Harry, both of them being professional and without a doubt, amazing writers. A must read blog if you aim to improve your writing skills and write impressive content.
  • 11. Chris Pearson For those who don’t know, Chris is probably the best and the most sought after freelance WordPress designer (am not sure if he is doing freelance work any more). He doesn’t write much but when he does, the articles are too good to miss. He also created an immensely popular WordPress called Cutline.
  • 12. Daily Blog Tips One of the top blogs in the blogging niche, Daily Blog Tips is written by Daniel and has some great advice for bloggers and writers who aim to make it big in the blogosphere.
  • 13. Life Hacker Unmissable and a must-read everyday, no matter who you are and what you do.
  • 14. Entrepreneurs Journey Yaro Starak aims to help bloggers and online entrepreneurs through his candid and thought provoking articles, which make his blog one of the most important in it’s niche.
  • 15. Chris Garrett Chris is an internet marketing consultant and an experienced writer. He has also co-authored the Problogger book with Darren. Hence, it goes without saying that his blog is an important one, especially from a writer or freelance blogger’s perspective.
  • 16. The Simple Dollar One of the best finance blogs around, Trent writes top quality articles which have made his site a huge success.
  • 17. Steve Pavlina Steve’s 4000 word essays are quite well known and apart from including impressive content, they also feature an impeccable writing style.
  • 18. Life Hack Like Dumb Little Man, this blog focuses on personal development and productivity and employs guest writers who consistently produce excellent content.
  • 19. Chris Brogan Chris is a social media marketing consultant who writes some direct-from-heart articles on his blog which are nicely written and well presented.
  • 20. Freelance Folder It’s not that I am biased towards this blog because I write for it but I believe it’s certainly a must-read blog for all the freelance bloggers out there and I have been enjoying the well written articles on this blog by influential writers, long before I started writing for it. :)

Some other blogs which feature impressive writing are A List Apart, The Writers Manifesto and Success Soul.

Resources: FreelanceFolder

43 Must Read PHP Articles and Resources

MySQL
PHP is a scripting language that enables people to create dynamic web pages and applications. It is a server side language that is one of the most popular used by developers today. Like any language there is always something new to learn and master.

With a large number of web developers on Twitter, it’s with no surprise that PHP was chosen as this week’s Theme Thursday theme.

Whether it be a new tip to better organise your code or a way to speed up your scripts, this list hopes to be essential reading for both the PHP newbie and the the experienced developer.

For Beginners

——————–

Code Organisation

——————–

Advanced

——————–

Applications

——————–

Tips and Best Practices

——————–

Tutorials

——————–

Security

——————–

Frameworks

——————–

PHP Toolbox

Resources: Grace Smith

All about Kaizen

1. Introduction

Welcome to KAIZEN! One of the most hotly debated topics recently is that of party construction and the role of Jobs. In the spirit of promoting KAIZEN, I am pleased to present to you the last guide you will ever need for creating the ultimate XP-generating machine. These simple and easy-to-use guidelines will help you to maximize your potential, accelerate your characters towards success!

2. What is Kaizen?

KaizenKaizen was created in Japan following World War II. The word Kaizen means "continuous improvement". It comes from the Japanese words 改 ("kai") which means "change" or "to correct" and 善 ("zen") which means "good".

Kaizen is a system that involves every employee - from upper management to the cleaning crew. Everyone is encouraged to come up with small improvement suggestions on a regular basis. This is not a once a month or once a year activity. It is continuous. Japanese companies, such as Toyota and Canon, a total of 60 to 70 suggestions per employee per year are written down, shared and implemented.

In most cases these are not ideas for major changes. Kaizen is based on making little changes on a regular basis: always improving productivity, safety and effectiveness while reducing waste.

Suggestions are not limited to a specific area such as production or marketing. Kaizen is based on making changes anywhere that improvements can be made. Western philosophy may be summarized as, "if it ain't broke, don't fix it." The Kaizen philosophy is to "do it better, make it better, improve it even if it isn't broken, because if we don't, we can't compete with those who do."

Kaizen in Japan is a system of improvement that includes both home and business life. Kaizen even includes social activities. It is a concept that is applied in every aspect of a person's life.

In business Kaizen encompasses many of the components of Japanese businesses that have been seen as a part of their success. Quality circles, automation, suggestion systems, just-in-time delivery, Kanban and 5S are all included within the Kaizen system of running a business.

Kaizen involves setting standards and then continually improving those standards. To support the higher standards Kaizen also involves providing the training, materials and supervision that is needed for employees to achieve the higher standards and maintain their ability to meet those standards on an on-going basis.

=> Kaizen is a system of continuous improvement in quality, technology, processes, company culture, productivity, safety and leadership.

3. Benefits of Kaizen

Kaizen involves every employee in making change--in most cases small, incremental changes. It focuses on identifying problems at their source, solving them at their source, and changing standards to ensure the problem stays solved. It's not unusual for Kaizen to result in 25 to 30 suggestions per employee, per year, and to have over 90% of those implemented.

For example, Toyota is well-known as one of the leaders in using Kaizen. In 1999 at one U.S. plant, 7,000 Toyota employees submitted over 75,000 suggestions, of which 99% were implemented.

These continual small improvements add up to major benefits. They result in improved productivity, improved quality, better safety, faster delivery, lower costs, and greater customer satisfaction. On top of these benefits to the company, employees working in Kaizen-based companies generally find work to be easier and more enjoyable--resulting in higher employee moral and job satisfaction, and lower turn-over.

With every employee looking for ways to make improvements, you can expect results such as:

Kaizen Reduces Waste in areas such as inventory, waiting times, transportation, worker motion, employee skills, over production, excess quality and in processes.

Kaizen Improves space utilization, product quality, use of capital, communications, production capacity and employee retention.

Kaizen Provides immediate results. Instead of focusing on large, capital intensive improvements, Kaizen focuses on creative investments that continually solve large numbers of small problems. Large, capital projects and major changes will still be needed, and Kaizen will also improve the capital projects process, but the real power of Kaizen is in the on-going process of continually making small improvements that improve processes and reduce waste.

More information about Kaizen:
- Getting Started With Kaizen
- 5S (A 5S Program is often associated with Kaizen)
- Lean Manufacturing (A case study at Mathers Controls)
- KAIZEN! the Art of Efficient Leveling
- Kaizen by VietNamese

BlackBerry Java Application Development Using Visual Studio

I have been using BlackBerry JDE for a while now since I started BlackBerry development. After becoming familiarized with the 4.2.2 API that I am using, I decided to use Visual Studio because of its capabilities and find it very handy. I still use BlackBerry JDE for debugging & signing purposes when required.

Here are the cons and pros before you decide if you want to use Visual Studio:

Cons

  • Debugging
  • Signing
  • RIM BlackBerry API intellisense
  • Error navigation (Cannot navigate to the error line from the output window but could navigate to the file)

Pros (over RIM JDE)

  • Better syntax highlighting, code outlining (CTRL + M, O - collapses everything)
  • Intellisense
  • Code snippets (code snippet name - if, for, and tab + tab)
  • Commenting and uncommenting (CTRL + K, C)
  • Better formatting (CTRL + K, D), better navigation (for functions and classes using the top dropdowns), line numbers - easier to read.
  • Source gear vault integration
  • Better search, replace, and bookmarking capabilities (CTRL + K, K to bookmark, CTRL + K, N to move next etc.)
  • Get to use my customized Dark theme (the best of it)
  • And all other features VS2005 provides

I use VS2005 as J# support is removed in VS2008. Let's consider a Hello World project. You could see this line in the output window when you build the project in the BlackBerry JDE.

Collapse
C:\Program Files\Research In Motion\BlackBerry JDE 4.2.1\bin\rapc.exe
-quiet import="..\..\Program Files\Research In Motion\BlackBerry JDE
4.2.1\lib\net_rim_api.jar" codename=com_rim_helloworld com_rim_helloworld.rapc
warnkey=0x52424200;0x52435200;0x52525400 C:\BBProjects\helloworld\HelloWorld.java
C:\BBProjects\helloworld\img\helloworld_jde.png
C:\BBProjects\helloworld\resource\HelloWorldRes.rrc
C:\BBProjects\helloworld\resource\HelloWorldRes.rrh
C:\BBProjects\helloworld\resource\HelloWorldRes_de.rrc
C:\BBProjects\helloworld\resource\HelloWorldRes_en.rrc
C:\BBProjects\helloworld\resource\HelloWorldRes_es.rrc
C:\BBProjects\helloworld\resource\HelloWorldRes_fr.rrc
C:\BBProjects\helloworld\resource\HelloWorldRes_it.rrc

If your project contains too many files, then the above line would be something like this:

Collapse
C:\Program Files\Research In Motion\BlackBerry JDE 4.2.1\bin\rapc.exe
-quiet import="..\..\Program Files\Research In Motion\
BlackBerry JDE 4.2.1\lib\net_rim_api.jar"
codename=com_rim_helloworld com_rim_helloworld.rapc
warnkey=0x52424200;0x52435200;0x52525400 @com_rim_helloworld_build.files

@com_rim_helloworld_build.files contains all the files included in your project. RIM JDE will automatically create this for you when required.

This is important to build in Visual Studio to check if there are any errors in code. Now, let's open Visual Studio and create a new J# class library project (C# or J# project does not matter, as the file extension is what that matters):

Create the J# project in a different directory, delete the default class1 file, close VS, and move the J# project contents to your existing BlackBerry project so that everything is in one place. Now, open the project in VS and include the necessary files. This will look something like this at this point:

Now that you have included the files, you can code in Visual Studio and would require to build the project to check for the errors. Let's create a batch file to build the Java project from within the Visual Studio. Here is the code for building and showing if succeeded or not:

Collapse
"C:\Program Files\Research In Motion\BlackBerry JDE 4.2.1\bin\rapc.exe"
-quiet import="..\..\Program Files\Research In Motion\
BlackBerry JDE 4.2.1\lib\net_rim_api.jar"
codename=com_rim_helloworld com_rim_helloworld.rapc
warnkey=0x52424200;0x52435200;0x52525400
C:\BBProjects\helloworld\HelloWorld.java
C:\BBProjects\helloworld\img\helloworld_jde.png
C:\BBProjects\helloworld\resource\HelloWorldRes.rrc
C:\BBProjects\helloworld\resource\HelloWorldRes.rrh
C:\BBProjects\helloworld\resource\HelloWorldRes_de.rrc
C:\BBProjects\helloworld\resource\HelloWorldRes_en.rrc
C:\BBProjects\helloworld\resource\HelloWorldRes_es.rrc
C:\BBProjects\helloworld\resource\HelloWorldRes_fr.rrc
C:\BBProjects\helloworld\resource\HelloWorldRes_it.rrc

@echo off
if not exist "com_rim_helloworld.err" goto 20
@ECHO "Build Failed."
goto end
:20
@ECHO "Build Succeeded."
del com_rim_helloworld.cod
:end

Create a batch file using the above code in the project directory and add this into External Tools to run within VS. You could do the same using the menu bar: Tools-->External Tools. Add one and setup the batch file, initial directory etc., as shown below:

You could set a keyboard shortcut like SHIFT + CTRL + F7 and execute it, and you will see the results in output window:

Just change something in the code and build again (using the shortcut or an external tool), and you will see the error details. You could then navigate to the appropriate file from clicking in the output window:

That's it, you are all set up for BlackBerry Java application development in Visual Studio. I use both Visual Studio (for development) and BlackBerry JDE (for debugging and signing) to get the best of both worlds. I have included the J# project with all the files in it.

Also, the BlackBerry build and signing process could be automated using BB Ant Tools, if required.

Hope you find this article useful, happy coding and have fun!

Resources: CodeProject