Laptop Internet Connetivity via SE T610 and Bluetooth

I have successfully configured my SE T610 via a Bluetooth USB adapter to connect my PC to the internet using T-Mobile GPRS.

Here’s my setup.

  • Laptop PC (Windows 2003 Enterprise Server)
  • Sabrent 2.4 GHz USB Dongle USB Adapter (I bought from AxionTech for $16.95 this afternoon)
  • Sony Ericsson T610
  • T-Mobile T-Zones Unlimited Plan ($4.99/month)

    Installation steps:

  • Install Bluetooth Software for the USB adapter
  • Pair the device (be sure to select a passkey to secure the connection, confgiure the services for the cell phone as bluetooth device, select Dial-up Networking)
  • Configure the Dial-up Networking (select PPP connection and set the phone number to *99***2#; no need to set up user id and password)
  • Add a new data account in SE T61o Connectivity/Data Comm (APN: wap.voicestream.com, CID will be 2. if not, change the dial up phone number according. The digit before the # is the CID number)
  • Click on T610 Dial-up Networking on PC. It should show connection up quickly if everything is configured OK

    I am getting 38 kbps through Road Runner Speed Test. Compared to 2655 kbps over a broadband connection. It’s very slow, but it’s fast enough for usage on-the-go.

    And it’s so hard to believe that I can use HTTPS on the PC while T-Mobile blocks HTTPS on the cell phone. It’s very hard to comprehend what T-Mobile is going after.

  • Sony Ericsson T610 and T-Mobile T-Zones Email Setup

    With the $4.99 Unlimited T-Zones plan, I’m able to set up email access to corporate email and personal email via POP3 and SMTP. However, RoadRunner’s SMTP does not work, so I can only read emails from RR.

    I have managed to login IB’s Mobile Trader, which requires SSL, with T-Zones GPRS security ON, but none of the links works after login.

    Interestingly, according to T-Mobile, we can only access corporate email with its $9.99 Unlimited T-Zones plan.

    why did i choose to use typed dataset in web service?

    pros

  • vs.net support on xsd and class generation via xsd.exe (drag and drop from data model to dataset plus some final touch)
  • existing data access framework support on mapping xsd to relational data and vise versa using data adapter (minimum coding required)
  • updategram that works well with the mappings defined in 2 (works really well for applications and no much coding required)
  • vs.net generated proxy works!
  • cons

  • locked in on .net (mitigation – provide alternative interface based on xsd for j2ee if required; there’s a way to transform typed dataset into a similar xsd and generate corresponding wsdl; however, it works best for readonly data since there’s no simple way to map the returned data back to relational data w/o writing additional codes )
  • increased data traffic due to schema being serialized (limit dataset usage to minimum; typed dataset for updatable data only)
  • in some cases, typed dataset is too vague or loose specially when there’re more than one table defined (this point is counter balanced by the no 2 in pros. gain something then lose something else …)
  • i ditched the idea of separating schema from dataset since it would require both ends to deal with schema anyway.
    i ditched the idea of not using dataset since it would require us to write tons of mapping code for relational data and updategram.

    everything works if designed and used properly. besides, everying around us is galaxy apart from soa world anyway.

    COM+ like Transactions

    I’m implementing a component that offers COM+ like programming model on local transaction on a single database. You will be able to decorate a class using attribute like [Transactional(TransactionOption, TransactionIsolation)]. Inside each method, SetComplete or SetAbort will vote to commit or rollback the transactions. It will support nested transactions on a single thread.

    The motivation is to ease business component development that needs flexible transaction management when component reuse is important. Here’s a sample test case.

    [Transactional(TransactionOption.Required, TransactionIsolation.Standard)]
    public class Account : Transactional {
    	public Account() : base() {
    	}
    
    	public void Debt(string account, decimal amount) {
    		try {
    			// make database calls in adapter via ADO.NET
    			Auditor auditor = new Auditor();
    			DA.PostDebt(account, amount);
    			auditor.Log("post debt trx");
    
    			TransactionUtil.SetComplete();
    		}
    		catch (Exception ex) {
    			auditor.Log("error in posting debt trx");
    			TransactionUtil.SetAbort();
    		}
    	}
    
    	public void Credit(string account, decimal amount) {
    		try {
    			// make database calls in adapter via ADO.NET
    			DA.PostCredit(account, amount);
    			Auditor auditor = new Auditor();
    			auditor.Log("post credit trx");
    
    			TransactionUtil.SetComplete();
    		}
    		catch (Exception ex) {
    			auditor.Log("error in posting debt trx");
    			TransactionUtil.SetAbort();
    		}
    	}
    }
    
    [Transactional(TransactionOption.RequiresNew, TransactionIsolation.Standard)]
    public class TransferAgent : Transactional {
    	public TransferAgent() : base() {
    	}
    	public void Transfer(string from, string to, decimal amount) {
    		try {
    			Auditor auditor = new Auditor();
    			auditor.Log("validating balance in " + from);
    
    			Validator v = new Validator();
    			v.Validate(from, amount);
    			auditor.Log(from + " balance checked OK");
    
    			Account account = new Account();
    			account.Debt(from, amount);
    			account.Credit(to, amount);
    
    			TransactionUtil.SetComplete();
    			auditor.Log("transfer OK");
    		}
    		catch (Exception ex) {
    			auditor.Log("error in transfer");
    			TransactionUtil.SetAbort();
    		}
    	}
    }
    
    [Transactional(TransactionOption.RequiresNew, TransactionIsolation.Standard)]
    public class Auditor : Transactional {
    	public Auditor() : base() {
    	}
    
    	public void Log(string msg) {
    		try {
    			DA.Log(msg);
    			TransactionUtil.SetComplete();
    		}
    		catch (Exception ex) {
    			TransactionUtil.SetAbort();
    		}
    	}
    }
    
    [Transactional(TransactionOption.Supported, TransactionIsolation.Standard)]
    public class Validator : Transactional {
    	public Validator() : base() {
    	}
    
    	public void Validate(string account, decimal balance) {
    		try {
    			if (DA.CheckBalance(account, balance))
    				TransactionUtil.SetComplete();
    			else
    				TransactionUtil.SetAbort();
    		}
    		catch (Exception ex) {
    			TransactionUtil.SetAbort();
    		}
    	}
    }
    
    [TestFixture]
    public class UnitTest : UnitTestBase {
    
    	[Test]
    	public void Test01() {
    		Account account = new Account();
    		account.Credit("a", 1000.00);
    		account.Debt("a", 100);
    		account.Credit("b", 100.00);
    	}
    
    	[Test]
    	public void Test02() {
    		TransferAgent agent = new TransferAgent();
    		agent.Transfer("a", "b", 100.00);
    	}
    
    }
    

    Plugin Architecture

    Today is the last day of my five-week architecture project at AspenTech. We have completed a very flexible and extensible architecture design with a working prototype for highly integrated desktop application framework and runtime infrastructure used in the process control and online optimiation applications.

    At its core, it’s so-called Plugin concept that enables the runtime to be configured based on meta data. The runtime starts with an empty stack with some minimal bootstrap to discover and load the plugins. All the application functionalities are provided by the plugins. The plugins can work together based on the meta data instructions.

    We have provided a set of default plugins to interpret the meta data, support a sophiscated GUI interface that utilizes the Model-View-Control design pattern. There’s a default Undo/Redo stack. All operations can be undone/redone. The object persistence is available as well.

    The techniques used are XML seralization, object serialization, reflection, code generation, dynamic evaluation, etc. The prototype is implemented in C#. We have been using Extreme Programming and Pair Programming via Net Meeting all the time. The results are very good.