Saturday, July 14, 2007

Conncting to Grameen Phone EDGE/GPRS in ubuntu linux using Nokia 6300 USB modem

This is the first time I am using ubuntu linux. I am writing this post from the newly installed ubuntu in my home PC. So, this is how I have connected to Grameen Phone EDGE using my Nokia 6300 USB modem.

Check the vendor and product id of your phone, To do this simply connect your phone in Nokia mode through the USB cable.

$ lsusb
Bus 004 Device 001: ID 0000:0000
Bus 005 Device 003: ID 0421:04f9 Nokia Mobile Phones
Bus 005 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Notice the ID 0421:04f9 Nokia Mobile Phones. Here 0421 is the vendor id and 04f9 is the product id.
$ sudo modprobe usbserial vendor=0x0421 product=0x04f9
$ wvdialconf create
Editing `create'.

Scanning your serial ports for a modem.

WvModem<*1>: Cannot set information for serial port.
ttyS0<*1>: ATQ0 V1 E1 -- failed with 2400 baud, next try: 9600 baud
ttyS0<*1>: ATQ0 V1 E1 -- failed with 9600 baud, next try: 115200 baud
ttyS0<*1>: ATQ0 V1 E1 -- and failed too at 115200, giving up.
Modem Port Scan<*1>: S1 S2 S3
WvModem<*1>: Cannot get information for serial port.
ttyACM0<*1>: ATQ0 V1 E1 -- OK
ttyACM0<*1>: ATQ0 V1 E1 Z -- OK
ttyACM0<*1>: ATQ0 V1 E1 S0=0 -- OK
ttyACM0<*1>: ATQ0 V1 E1 S0=0 &C1 -- OK
ttyACM0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK
ttyACM0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
ttyACM0<*1>: Modem Identifier: ATI -- Nokia
ttyACM0<*1>: Speed 4800: AT -- OK
ttyACM0<*1>: Speed 9600: AT -- OK
ttyACM0<*1>: Speed 19200: AT -- OK
ttyACM0<*1>: Speed 38400: AT -- OK
ttyACM0<*1>: Speed 57600: AT -- OK
ttyACM0<*1>: Speed 115200: AT -- OK
ttyACM0<*1>: Speed 230400: AT -- OK
ttyACM0<*1>: Speed 460800: AT -- OK
ttyACM0<*1>: Max speed is 460800; that should be safe.
ttyACM0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK

Found an USB modem on /dev/ttyACM0.
create: Can't open 'create' for reading: No such file or directory
create: ...starting with blank configuration.
Modem configuration written to create.
ttyACM0: Speed 460800; init "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0"
This shows that a modem is connected at /dev/ttyACM0
$ sudo cat > /etc/wvdial.conf
[Dialer Defaults]
Modem = /dev/ttyACM0
Baud = 460800
Init1 = AT&F
Init2 = AT E0 V1 &D2 &C1 &S0 S0=0 +dr=1
Init3 = AT+IFC=2,2;+CVHU=1
Init4 = ATS7=60+DS=3,0;&K3
Init5 = AT+CGDCONT=,,"gpinternet"
Init6 = ATS0=0
ISDN = 0
Modem Type = Nokia GSM Phone USB Modem
Phone = *99#
Username = any
Password = any
Stupid Mode = 1
Now just dial your connection.
$ sudo wvdial
--> WvDial: Internet dialer version 1.56
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: AT&F
OK
--> Sending: AT E0 V1 &D2 &C1 &S0 S0=0 +dr=1
AT E0 V1 &D2 &C1 &S0 S0=0 +dr=1
OK
--> Sending: AT+IFC=2,2;+CVHU=1
OK
--> Sending: ATS7=60+DS=3,0;&K3
OK
--> Sending: AT+CGDCONT=,,"gpinternet"
OK
--> Sending: ATS0=0
OK
--> Modem initialized.
--> Sending: ATDT*99#
--> Waiting for carrier.
CONNECT
~[7f]}#@!}!} } }2}#}$@#}!}$}%\}"}&} }*} } g}%~
--> Carrier detected. Starting PPP immediately.
--> Starting pppd at Sat Jul 14 10:37:55 2007
--> Pid of pppd: 8383
--> Using interface ppp0
--> pppd: H[18]
--> [06][08][10][12][06][08]
--> pppd: H[18]
--> [06][08][10][12][06][08]
--> pppd: H[18]
--> [06][08][10][12][06][08]
--> pppd: H[18]
--> [06][08][10][12][06][08]
--> local IP address 10.130.9.55
--> pppd: H[18]
--> [06][08][10][12][06][08]
--> remote IP address 10.6.6.6
--> pppd: H[18]
--> [06][08][10][12][06][08]
--> primary DNS address 202.56.4.120
--> pppd: H[18]
--> [06][08][10][12][06][08]
--> secondary DNS address 202.56.4.121
--> pppd: H[18]
--> [06][08][10][12][06][08]
To disconnect press Ctrl+C.

Enjoy

References:
http://warofwords.wordpress.com/2007/05/27/using-gprs-with-ubuntu-without-bluetooth-ankur-shrivastava-linux-usb-nokia-modem-internet/
http://gentoo-wiki.com/Nokia_N60_series
http://www.marzocca.net/linux/ubuntux31.html#gprs

Friday, June 8, 2007

adding all jar files of a directory to classpath

how do you add all the jar files of your application's lib directory to classpath? probably as follows:

set CLASSPATH=%CLASSPATH%;%LIB_DIR%/activation.jar
set CLASSPATH=%CLASSPATH%;%LIB_DIR%/FTPProtocol.jar
set CLASSPATH=%CLASSPATH%;%LIB_DIR%/jai.jar
set CLASSPATH=%CLASSPATH%;%LIB_DIR%/jakarta-oro.jar
set CLASSPATH=%CLASSPATH%;%LIB_DIR%/jaas.jar
set CLASSPATH=%CLASSPATH%;%LIB_DIR%/log4j.jar
set CLASSPATH=%CLASSPATH%;%LIB_DIR%/mail.jar
set CLASSPATH=%CLASSPATH%;%LIB_DIR%/rmicb.jar
set CLASSPATH=%CLASSPATH%;%LIB_DIR%/Tidy.jar
set CLASSPATH=%CLASSPATH%;%LIB_DIR%/trove.jar
set CLASSPATH=%CLASSPATH%;%LIB_DIR%/xalan.jar
set CLASSPATH=%CLASSPATH%;%LIB_DIR%/xerces.jar
set CLASSPATH=%CLASSPATH%;%LIB_DIR%/xml-apis.jar
but there is a easier way:
SETLOCAL ENABLEDELAYEDEXPANSION
for %%f in (%LIB_DIR%\*.jar) do set CLASSPATH=!CLASSPATH!;%%f
ENDLOCAL
note the ! sign around CLASSPATH and don't miss SETLOCAL/ENDLOCAL commands.

Saturday, May 19, 2007

jgoodies validation (very easy!!!)

for last couple of days i was looking into jgoodies validation. but i found that it doesn't have enough quick start guide or simple sample code. the sample code provided with jgoodies are too complex. i have searched the net but i failed.
then i asked hasan's help. he said, "give me the complex code, i will simplify it". then i think, why don't i do that. so here is my simple code.

first assume you have a domain object as follow:

public interface User {
public String getUserName();
public void setUserName(final String pUserName);
public String getPassword();
public void setPassword(final String pPassword);
}
and it's implementation UserImpl.

you also have a form with two text fields mUserNameTextField and mPasswordField

now first create a Validator class
public class UserValidator extends AbstractValueModel
implements Validator, User {
private User mUser = new UserImpl();
public Object getValue() {
return this;
}
public void setValue(Object pObject) {
// never used
}
public User getUser() {
return mUser;
}
public void setUser(final User pUser) {
mUser = pUser;
}
public ValidationResult validate() {
ValidationResult result = new ValidationResult();
if (ValidationUtils.isEmpty(mUser.getUserName())) {
result.addError("User name is required");
}
if (ValidationUtils.isEmpty(mUser.getPassword())) {
result.addError("Password is required");
}
return result;
}
public String getUserName() {
return mUser.getUserName();
}
public void setUserName(final String pUserName) {
mUser.setUserName(pUserName);
}
public String getPassword() {
return mUser.getPassword();
}
public void setPassword(final String pPassword) {
mUser.setPassword(pPassword);
}
}
in the form class create there fields
private ValidationResultModel mValidationResultModel =
new DefaultValidationResultModel();
private PresentationModel mPresentationModel =
new PresentationModel(new UserValidator());
private JLabel mMessageLabel = ValidationResultViewFactory.
createReportIconAndTextLabel(mValidationResultModel);
after initializing the form
Bindings.bind(userNameTextField,
mPresentationModel.getBufferedModel("userName"));
Bindings.bind(passwordTextField,
mPresentationModel.getBufferedModel("password"));
here "userName" and "password" are the properties of your domain class.

finally in the action handler for form submit
mPresentationModel.triggerCommit();
UserValidator validator =
(UserValidator) mPresentationModel.getBean();
ValidationResult result = validator.validate();
mValidationResultModel.setResult(result);
if (result.isEmpty()) {
// do your action handling here
}
isn't it very easy!!!