This is pretty impressive. Using a metal frame and some magic, they grew a fellow a new jawbone: article. I don’t usually post this type of stuff, but wow.
Monthly Archives: August 2004
AsteriskiChat
I will eventually keep a cross-reference of related content here.
Adding Wiki Functionality
As I mentioned here, I am attempting to add CamelCase Wiki functionality to this blog.
For example, I could have a AsteriskiChat page!
Update: I see that posts created as Wiki pages are still treated as normal by the front page. It would be nice if they could be ignored, no?
Upgrades
I went on a binge hack session on this blog!
- Converted from Textile 2 to Markdown and setup GeSHi
Discovered per-category feeds and added myself to java.blogs
To use this, simply ask fo
/archives/category/$CATEGORY/$FEED, where$CATEGORYis the category path amd$FEEDis the type of feed you want: rss2, atom, etc. For example/archives/category/software/j2ee/rss2.Setup search URLs
This is cool! Want to monitor what garbage I have to say about “elephants”? Easy as pie! Simply point to
/search/elephantslike so, it even works with feeds:/search/elephants/atom. (Don’t send me bug reports about the previous search link sending you back to this post!)Setup a custom 404 handler here
I want to setup a Wiki style linking system as well, from here and I guess I should learn to write plugins eventually.
A.
Hacking iChat for Generic SIP Support
The Setting
At this week’s OJUG meeting, I mentioned to Patrick Linskey that I would really like to see iChat as a client to generic SIP servers. He said that it may be possible given Cocoa’s design, so I’ve been looking into it. Here is a set of related links:
- Apple iChat Technology Brief,
- Blog entry on the subject, gives some protocol details
- Another entry discussing the protocols
I also took a look around to see what iChat is doing under the covers. First, when iChat is running, it uses 2 pieces:
/Applications/iChat.app/Contents/MacOS/iChat/System/Library/PrivateFrameworks/InstantMessage.framework /iChatAgent.app/Contents/MacOS/iChatAgent
When you are doing audio or video communications, you will notice access another shared library:
/System/Library/PrivateFrameworks/VideoConference.framework
The above is where it gets interesting. I ran class-dump on it, output available here. Of particular interest is an interface called SIPManager. There is also a lot of RTP and SDP related things in there, but I’m now over my head in regards to grokking Objective-C.
Where Do We Go From Here?
I believe it is very important to have a general SIP client that has iChat’s audio quality and integration into the operating system. Can we hack it?
Converting from Textile 2 to Markdown
I just ran a hack to convert all of my markup to Markdown from Textile 2 in order to improve my text and be compatible with GeSHi.
[php] < ?php $query = sprintf(“SELECT ID,post_content FROM %s”, POST_TABLE);
$db = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); mysql_select_db(DB_NAME, $db);
$rows = mysql_query($query, $db); while($row = mysql_fetch_row($rows)) { $post = $row[1]; $post = preg_replace(‘/^bq./m’, ‘>’, $post); $post = preg_replace(‘/^#/m’, ’1.’, $post); $post = preg_replace(‘/ ([s[{(]|[[:punct:]])? # $pre ” # start (‘.$textile_c.’) # $atts ([^"]+) # $text s? (?:(([^)]+))(?=”))? # $title “: (S+b) # $url (/)? # $slash ([^w/;]*) # $post (?=s|$) /Ux’,’ $3‘, $post); $output[] = array(0 => $row[0], 1 => $post); }
foreach($output as $row) { $update = sprintf(“UPDATE %s SET post_content = ‘%s’ WHERE ID = %u”, POST_TABLE, mysql_real_escape_string($row[1]), $row[0]); $result = mysql_query($update, $db); } } ?> [/php]
(And if anyone knows why the above code is not monospaced, please yell!)
If anything is amiss, please let me know. I doubt I will be fixing all the issues with punctuation after links…
Thanks,
A.
OJUG on August 26th, 2004
I attended this past week’s OJUG meeting in Ottawa, which was very useful. Patrick Linskey, CTO of SolarMetric (developers of Kodo JDO) and co-author of Bitter EJB. He discussed JDO 2.0 JSR 243.
I am very interested in the next version of JDO as I’ve used Hibernate with great success and am looking for something similar, but standards based.
Some implementations of JDO 1.0 and 2.0 are listed at JDO Central. Kodo JDO 3.2 Beta has many of the JDO 2.0 features.
Some of my notes from the presentation:
- The big problem in the OR/M world is not the M, but rather the remoteness of data being manipulated
- JDO is an Abstract API for Object Persistence
- OR/M is an old, well understood problem. It has been solved many times and there is probably little room for real innovation. This is the counter for those that believe that a specification stifles innovation. Isn’t there room for innovation at the API level?
- Provides portability between relational and non-relational datastores
- Can support J2ME if you provide a Java Collections implementation since J2ME does not provide one
- You shouldn’t see the JDO API very often. Most of your data access happens through your object model. You will only see the API for queries & deletions. (Supposing your container is handling transactions.)
- Very much tries to do things the Java Way
- There is no such thing as POJO persistence
- Regarding some Java OR/M implementations that use object proxies: proxies are not the real objects. This will bite you in unusual places. The example is that EmployeeProxy does not extend PersonProxy.
- The current problem with bytecode manipulation is that there is no standard to prevent multiple tools from stepping on each other
- Gavin King is no longer on the JDO 2.0 committee
- No more “autocommit” support!
- Uses named queries. You can override a named query with a custom piece of SQL for each targeted database, if necessary
- Kodo has a cool workbench
- We all should watch TSS
- Primary key support: transparent (implementation specific), application identity or simple identity and non-durable
- SolarMetric has a disconnected operation and synchronization product
- No criteria API, but third party tools can provide this by generating JDOQL. Neither is there find-by-example, but this can also be implemented externally
We all went over to the Mayflower II for beer and conversation after the meeting. A good time was had by all.
Cheers,
A.
babyTEL and Asterisk
Jonathon Moody contacted me to ask how I had setup babyTEL to work with Asterisk, so here’s a quick note:
- babyTEL requires use of their outbound proxy;
- Asterisk’s chan_sip.o module does not support using an outbound proxy;
There are two known solutions:
- Use chan_sip2 by Olle E. Johansson;
- Use the hack originaly proposed to me by one of babyTEL’s technicians;
The hack is to put the IP address for nat.babytel.ca into your /etc/hosts file as sip.babytel.ca. This will force your system to resolve sip.babytel.ca to babyTEL’s outbound proxy. The second step is to put “port=5065″ in your sip.conf entry for babyTEL (You may also need “insecure=very”, although I don’t completely understand that.)
Hope this helps someone!
A.
Update: Page on the VoIP-Info Wiki about babyTEL is here.
Looking for Enterprise Java Developers
We are looking for two Java developers for a project starting shortly. Please do not bother to apply if you do not meet the following criteria:
Portfolio of code; or
Demonstratable involvement in an Open Source Java project; and
Experience with tools such as Ant Subversion and XDoclet; and
Experience with UNIX integration and development;
Update: This is for a consulting firm that is waiting to hear whether they have been selected for a medium sized project. They want to have potential team members selected in advance.
Update: This project has not been given funding.
Thanks.
A.
ENUM Lookups Work
I just got ENUM lookups working with a client’s Asterisk setup. Very cool.
This is how it works:
- My Asterisk takes the number you input “NNNNNNN”,
- fully qualifies it to “1613NNNNNNN”,
- a DNS lookup in e164.org and e164.arpa which returns sip:general@domain.ca,
- an SRV query on domain.ca returns server.domain.ca,
- the call is put through IP-to-IP without hitting any provider.
That is a beautiful thing.
A.
babyTEL
I’ve just signed up for a babyTEL account in the Ottawa dialing area (613). Their pricing structure is very good and it works with Asterisk and various SIP softphones. (I’m using SJPhone and X-Lite under Mac OS X at the moment.)
I will be testing the service over the next few days, as they provide a 14 day guarantee, and reporting back my experiences. One of the key questions for me is how multiple incoming and outgoing calls are handled. This is also important for my clients.
I’m heading to a client’s site this morning to hook-up their Asterisk to a Broadvoice account in Chicago. Looking forward to it!
Nova Scotia
I’ve was in Nova Scotia for the past few days, enjoying the friendly people, the Tall Ships and the beach
Notably, we enjoyed some Mexican hospitality on their Tall Ship, the Cuauhtemoc