<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: service code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sat, 26 Jul 2008 16:10:22 GMT</pubDate>
    <description>DZone Snippets: service code</description>
    <item>
      <title>Creating a bucket in Amazon S3 through an irb session</title>
      <link>http://snippets.dzone.com/posts/show/5441</link>
      <description>1) Log into an irb session, and enter your S3 login details.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;require 'rubygems'&lt;br /&gt;require 'aws/s3'&lt;br /&gt;&lt;br /&gt;  AWS::S3::Base.establish_connection!(&lt;br /&gt;    :access_key_id     =&gt; 'REPLACE_ME',&lt;br /&gt;    :secret_access_key =&gt; 'REPLACE_ME'&lt;br /&gt;  )&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;output:&lt;br /&gt;=&gt; #&lt;AWS::S3::Connection:0xb75e0594 @http=#&lt;Net::HTTP s3.amazonaws.com:80 open=false&gt;, @secret_access_key="", @options={:server=&gt;"s3.amazonaws.com", :access_key_id=&gt;"", :port=&gt;80, :secret_access_key=&gt;"", :persistent=&gt;true}, @access_key_id="19S45GYAGWK8DC2B8VG2"&gt;&lt;br /&gt;&lt;br /&gt;2) Browse the existing buckets.&lt;br /&gt;&lt;code&gt;AWS::S3::Service.buckets&lt;/code&gt;&lt;br /&gt;output:&lt;br /&gt;=&gt; [#&lt;AWS::S3::Bucket:0xb75cc850 @object_cache=[], @attributes={"name"=&gt;"ogg.twitteraudio.com", "creation_date"=&gt;Sat Apr 26 10:40:16 UTC 2008}&gt;, #&lt;AWS::S3::Bucket:0xb75cc83c @object_cache=[], @attributes={"name"=&gt;"t1000", "creation_date"=&gt;Fri Apr 25 21:35:21 UTC 2008}&gt;, #&lt;AWS::S3::Bucket:0xb75cc814 @object_cache=[], @attributes={"name"=&gt;"t2000", "creation_date"=&gt;Fri Apr 25 21:53:15 UTC 2008}&gt;]&lt;br /&gt;&lt;br /&gt;3) Browse the buckets in a programmatical way.&lt;br /&gt;&lt;code&gt;AWS::S3::Service.buckets.each {|b| puts b.name}&lt;/code&gt;&lt;br /&gt;output:&lt;br /&gt;ogg.twitteraudio.com&lt;br /&gt;t1000&lt;br /&gt;t2000&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;4) Add a new bucket called t3000.&lt;br /&gt;&lt;code&gt;AWS::S3::Bucket.create('t3000')&lt;/code&gt;&lt;br /&gt;output:&lt;br /&gt;=&gt; true&lt;br /&gt;&lt;br /&gt;5) Observe adding the bucket again doesn't cause an error.&lt;br /&gt;&lt;code&gt;AWS::S3::Bucket.create('t3000')&lt;/code&gt;&lt;br /&gt;output:&lt;br /&gt;=&gt; true&lt;br /&gt;&lt;br /&gt;6) View the buckets again. &lt;br /&gt;&lt;code&gt;AWS::S3::Service.buckets&lt;/code&gt;&lt;br /&gt;output:&lt;br /&gt;=&gt; [#&lt;AWS::S3::Bucket:0xb75cc850 @object_cache=[], @attributes={"name"=&gt;"ogg.twitteraudio.com", "creation_date"=&gt;Sat Apr 26 10:40:16 UTC 2008}&gt;, #&lt;AWS::S3::Bucket:0xb75cc83c @object_cache=[], @attributes={"name"=&gt;"t1000", "creation_date"=&gt;Fri Apr 25 21:35:21 UTC 2008}&gt;, #&lt;AWS::S3::Bucket:0xb75cc814 @object_cache=[], @attributes={"name"=&gt;"t2000", "creation_date"=&gt;Fri Apr 25 21:53:15 UTC 2008}&gt;]&lt;br /&gt;&lt;br /&gt;Note: You would expect t3000 to be in there however it didn't appear possibly because of the bucket permissions.&lt;br /&gt;&lt;br /&gt;7) Let's then look for bucket t3000.&lt;br /&gt;&lt;code&gt;t3000 = AWS::S3::Bucket.find('t3000')&lt;/code&gt;&lt;br /&gt;output:&lt;br /&gt;=&gt; #&lt;AWS::S3::Bucket:0xb76df724 @object_cache=[], @attributes={"prefix"=&gt;nil, "name"=&gt;"t3000", "marker"=&gt;nil, "max_keys"=&gt;1000, "is_truncated"=&gt;false, "xmlns"=&gt;"http://s3.amazonaws.com/doc/2006-03-01/"}&gt;&lt;br /&gt;&lt;br /&gt;8) Now that we've found the bucket let's upload a text file called works.txt.&lt;br /&gt;&lt;code&gt;file = "works.txt"&lt;/code&gt;&lt;br /&gt;output:&lt;br /&gt;=&gt; "works.txt"&lt;br /&gt;&lt;code&gt;AWS::S3::S3Object.store(file, open(file), 't3000', :access =&gt; :public_read)&lt;/code&gt;&lt;br /&gt;output:&lt;br /&gt;=&gt; #&lt;AWS::S3::S3Object::Response:0x-608926458 200 OK&gt;&lt;br /&gt;&lt;br /&gt;9) Setting the file access to :public_read allows us to view the file from the http location http://t3000.s3.amazonaws.com/works.txt&lt;br /&gt;&lt;br /&gt;References: &lt;br /&gt;&lt;a href="http://amazon.rubyforge.org/"&gt;http://amazon.rubyforge.org/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://snippets.dzone.com/posts/show/4088"&gt;upload_to_s3 - Ruby S3 upload client&lt;/a&gt; [dzone.com]&lt;br /&gt;&lt;br /&gt;*update: 14:30 30 April 2008 *&lt;br /&gt;I didn't use Bucket.objects(:reload) which is the reason why the bucket t3000 didn't show up with the statement Service.buckets&lt;br /&gt;&lt;br /&gt;Reference: &lt;a href="http://spattendesign.com/2007/12/5/amazon-s3-ruby-and-rails-slides"&gt;spatten design - Amazon S3, Ruby and Rails slides&lt;/a&gt; [spattendesign.com]</description>
      <pubDate>Tue, 29 Apr 2008 17:20:25 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5441</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>jaiku.py</title>
      <link>http://snippets.dzone.com/posts/show/4223</link>
      <description>// Set and view Jaiku statuses&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;&lt;br /&gt;__author__="Andrew Pennebaker (andrew.pennebaker@gmail.com)"&lt;br /&gt;__date__="28 Jun 2007"&lt;br /&gt;__copyright__="Copyright 2007 Andrew Pennebaker"&lt;br /&gt;__license__="GPL"&lt;br /&gt;__version__="0.0.1"&lt;br /&gt;__URL__="http://snippets.dzone.com/posts/show/4223"&lt;br /&gt;&lt;br /&gt;import sys, getopt, urllib2, xmlrpclib&lt;br /&gt;&lt;br /&gt;import configreader&lt;br /&gt;&lt;br /&gt;STATUS_MODE="STATUS"&lt;br /&gt;VIEW_MODE="VIEW"&lt;br /&gt;&lt;br /&gt;def set_status(settings, status):&lt;br /&gt;	s=xmlrpclib.ServerProxy(settings["xmlrpcurl"])&lt;br /&gt;	&lt;br /&gt;	calldata={"user":settings["username"], "personal_key":settings["personalkey"], "message":status, "location":settings["location"]}&lt;br /&gt;	&lt;br /&gt;	try:&lt;br /&gt;		s.presence.send(calldata)&lt;br /&gt;	except:&lt;br /&gt;		raise "Could not connect."&lt;br /&gt;&lt;br /&gt;def view_status(settings):&lt;br /&gt;	item=settings["itemdelimeter"]&lt;br /&gt;	t1=settings["titledelimeter1"]&lt;br /&gt;	t2=settings["titledelimeter2"]&lt;br /&gt;&lt;br /&gt;	try:&lt;br /&gt;		instream=urllib2.urlopen(&lt;br /&gt;			settings["feedurlstart"]+settings["username"]+settings["feedurlend"]&lt;br /&gt;		)&lt;br /&gt;&lt;br /&gt;		for line in instream:&lt;br /&gt;			if item in line:&lt;br /&gt;				break&lt;br /&gt;&lt;br /&gt;		title=instream.readline()&lt;br /&gt;&lt;br /&gt;		instream.close()&lt;br /&gt;&lt;br /&gt;		status=title[title.index(t1)+len(t1):title.index(t2)]&lt;br /&gt;&lt;br /&gt;		return status&lt;br /&gt;&lt;br /&gt;	except IOError, e:&lt;br /&gt;		raise "Could not connect."&lt;br /&gt;&lt;br /&gt;def usage():&lt;br /&gt;	print "Usage: %s [options]" % (sys.argv[0])&lt;br /&gt;	print "\nWithout any options, uses status mode. Leftover args are concatenated to form message."&lt;br /&gt;	print "\n-u|--username &lt;username&gt; specified in jaiku.conf"&lt;br /&gt;	print "-p|--personal-key &lt;key&gt;"&lt;br /&gt;	print "-l|--location &lt;location&gt;"&lt;br /&gt;	print "-s|--status mode"&lt;br /&gt;	print "-v|--view status"&lt;br /&gt;	print "-c|--config &lt;configfile&gt;"&lt;br /&gt;	print "-h|--help"&lt;br /&gt;&lt;br /&gt;	sys.exit()&lt;br /&gt;&lt;br /&gt;def main():&lt;br /&gt;	global STATUS_MODE&lt;br /&gt;	global VIEW_MODE&lt;br /&gt;&lt;br /&gt;	systemArgs=sys.argv[1:]&lt;br /&gt;&lt;br /&gt;	mode=STATUS_MODE&lt;br /&gt;&lt;br /&gt;	settings={&lt;br /&gt;		"config":"jaiku.conf",&lt;br /&gt;		"xmlrpcurl":"http://api.jaiku.com/xmlrpc",&lt;br /&gt;		"feedurlstart":"http://",&lt;br /&gt;		"feedurlend":".jaiku.com/feed/atom",&lt;br /&gt;		"itemdelimeter":"&lt;entry&gt;",&lt;br /&gt;		"titledelimeter1":"&lt;title&gt;",&lt;br /&gt;		"titledelimeter2":"&lt;/title&gt;",&lt;br /&gt;		"username":"mcandre",&lt;br /&gt;		"personalkey":"",&lt;br /&gt;		"location":""&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	optlist, args=[], []&lt;br /&gt;&lt;br /&gt;	try:&lt;br /&gt;		optlist, args=getopt.getopt(systemArgs, "u:p:l:svc:h", ["username=", "personal-key=", "location=", "status", "view", "config=", "help"])&lt;br /&gt;	except e:&lt;br /&gt;		usage()&lt;br /&gt;&lt;br /&gt;	for option, value in optlist:&lt;br /&gt;		if option=="-c" or option=="--config":&lt;br /&gt;			settings["config"]=value&lt;br /&gt;&lt;br /&gt;	try:&lt;br /&gt;		configreader.load(open(settings["config"], "r"), settings)&lt;br /&gt;	except IOError, e:&lt;br /&gt;		pass&lt;br /&gt;&lt;br /&gt;	for option, value in optlist:&lt;br /&gt;		if option=="-h" or option=="--help":&lt;br /&gt;			usage()&lt;br /&gt;&lt;br /&gt;		elif option=="-u" or option=="--username":&lt;br /&gt;			settings["username"]=value&lt;br /&gt;		elif option=="-p" or option=="--personal-key":&lt;br /&gt;			settings["personalkey"]=value&lt;br /&gt;		elif option=="-l" or option=="--location":&lt;br /&gt;			settings["location"]=value&lt;br /&gt;		elif option=="-s" or option=="--status":&lt;br /&gt;			mode=STATUS_MODE&lt;br /&gt;		elif option=="-v" or option=="--view":&lt;br /&gt;			mode=VIEW_MODE&lt;br /&gt;&lt;br /&gt;	if mode==STATUS_MODE:&lt;br /&gt;		if len(args)&lt;1:&lt;br /&gt;			usage()&lt;br /&gt;&lt;br /&gt;		message=" ".join(args)&lt;br /&gt;&lt;br /&gt;		set_status(settings, message)&lt;br /&gt;	elif mode==VIEW_MODE:&lt;br /&gt;		print view_status(settings)&lt;br /&gt;&lt;br /&gt;if __name__=="__main__":&lt;br /&gt;	try:&lt;br /&gt;		main()&lt;br /&gt;	except KeyboardInterrupt, e:&lt;br /&gt;		pass&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 29 Jun 2007 02:31:33 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4223</guid>
      <author>mcandre (Andrew Pennebaker)</author>
    </item>
    <item>
      <title>tiny.py</title>
      <link>http://snippets.dzone.com/posts/show/4195</link>
      <description>&lt;code&gt;&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;&lt;br /&gt;"""Converts long URLs to tiny URLs, with either tinyurl, urltea, or a custom url."""&lt;br /&gt;&lt;br /&gt;__author__="Andrew Pennebaker (andrew.pennebaker@gmail.com)"&lt;br /&gt;__date__="22 Jun 2007 - 24 Jun 2007"&lt;br /&gt;__copyright__="Copyright 2007 Andrew Pennebaker"&lt;br /&gt;__license__="GPL"&lt;br /&gt;__version__="0.0.1"&lt;br /&gt;__URL__="http://snippets.dzone.com/posts/show/4195"&lt;br /&gt;__credits__="http://lateral.netmanagers.com.ar/weblog/2007/04/08.html#BB548"&lt;br /&gt;&lt;br /&gt;import sys, getopt, urllib&lt;br /&gt;&lt;br /&gt;import configreader&lt;br /&gt;&lt;br /&gt;def tiny(url, settings):&lt;br /&gt;	try:&lt;br /&gt;		encodedurl=settings["posting url"]+urllib.urlencode({"url":url})&lt;br /&gt;		instream=urllib.urlopen(encodedurl)&lt;br /&gt;		tinyurl=instream.read()&lt;br /&gt;		instream.close()&lt;br /&gt;&lt;br /&gt;		if len(tinyurl)==0:&lt;br /&gt;			return url&lt;br /&gt;&lt;br /&gt;		if settings["service"]=="urltea" and len(settings["description"])&gt;0:&lt;br /&gt;				tinyurl+=settings["description delimeter"]+settings["description"]&lt;br /&gt;&lt;br /&gt;		return tinyurl&lt;br /&gt;	except IOError, e:&lt;br /&gt;		raise "Could not connect."&lt;br /&gt;&lt;br /&gt;def usage():&lt;br /&gt;	print "Usage: %s [options] &lt;url1&gt; &lt;url2&gt; &lt;url3&gt; ..." % (sys.argv[0])&lt;br /&gt;	print "\nDefaults to urlTea unless specified in options or a config file."&lt;br /&gt;	print "\n-s|--service [tinyurl|urltea]"&lt;br /&gt;	print "-u|--custom-url &lt;posting url&gt;"&lt;br /&gt;	print "-d|--description &lt;comment&gt; May only be used with urltea."&lt;br /&gt;	print "-c|--config &lt;configfile&gt;"&lt;br /&gt;	print "-h|--help (usage)"&lt;br /&gt;&lt;br /&gt;	sys.exit()&lt;br /&gt;&lt;br /&gt;def main():&lt;br /&gt;	systemArgs=sys.argv[1:]&lt;br /&gt;	oplist, args=[], []&lt;br /&gt;&lt;br /&gt;	settings={&lt;br /&gt;		"config":"tiny.conf",&lt;br /&gt;		"service":"urltea",&lt;br /&gt;		"urltea url":"http://urltea.com/api/text/?url=",&lt;br /&gt;		"tinyurl url":"http://tinyurl.com/api-create.php?",&lt;br /&gt;		"description delimeter":"?",&lt;br /&gt;		"description":""&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	try:&lt;br /&gt;		optlist, args=getopt.getopt(systemArgs, "s:u:d:c:h", ["service=", "custom-url=", "description=", "config=", "help"])&lt;br /&gt;	except:&lt;br /&gt;		usage()&lt;br /&gt;&lt;br /&gt;	for option, value in optlist:&lt;br /&gt;		if option=="-c" or option=="--config":&lt;br /&gt;			settings["config"]=value&lt;br /&gt;&lt;br /&gt;	try:&lt;br /&gt;		configreader.load(open(settings["config"], "r"), settings)&lt;br /&gt;	except IOError, e:&lt;br /&gt;		pass&lt;br /&gt;&lt;br /&gt;	for option, value in optlist:&lt;br /&gt;		if option=="-h" or option=="--help":&lt;br /&gt;			usage()&lt;br /&gt;		elif option=="-s" or option=="--service":&lt;br /&gt;			settings["service"]=value&lt;br /&gt;		elif option=="-d" or option=="--description":&lt;br /&gt;			settings["description"]=value&lt;br /&gt;&lt;br /&gt;	if settings["service"]!="urltea" and len(settings["description"])&gt;0:&lt;br /&gt;		usage()&lt;br /&gt;&lt;br /&gt;	try:&lt;br /&gt;		settings["posting url"]=settings[settings["service"]+" url"]&lt;br /&gt;	except:&lt;br /&gt;		usage()&lt;br /&gt;&lt;br /&gt;	for option, value in optlist:&lt;br /&gt;		if option=="-u" or option=="--custom-url":&lt;br /&gt;			settings["posting url"]=value&lt;br /&gt;&lt;br /&gt;	if len(args)&lt;1:&lt;br /&gt;		usage()&lt;br /&gt;&lt;br /&gt;	for u in args:&lt;br /&gt;		print tiny(u, settings)&lt;br /&gt;&lt;br /&gt;if __name__=="__main__":&lt;br /&gt;	try:&lt;br /&gt;		main()&lt;br /&gt;	except KeyboardInterrupt, e:&lt;br /&gt;		pass&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 22 Jun 2007 18:32:06 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4195</guid>
      <author>mcandre (Andrew Pennebaker)</author>
    </item>
    <item>
      <title>J2ME - Create Service Bluetooth</title>
      <link>http://snippets.dzone.com/posts/show/3573</link>
      <description>// Create Service Bluetooth&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import javax.bluetooth.DiscoveryAgent;&lt;br /&gt;import javax.bluetooth.LocalDevice;&lt;br /&gt;import javax.microedition.io.Connector;&lt;br /&gt;import javax.microedition.io.StreamConnection;&lt;br /&gt;import javax.microedition.io.StreamConnectionNotifier;&lt;br /&gt;&lt;br /&gt;public class ServerChat&lt;br /&gt;{&lt;br /&gt;	private static final String CHATTANDO_UUID = "A1A2A3A4A5A6A7A8A9A0B1B2B3B4B5B6";&lt;br /&gt;	private static final String CHATTANDO_SERVICE = "Chattando";&lt;br /&gt;	&lt;br /&gt;	private boolean isReady = false;&lt;br /&gt;	&lt;br /&gt;	private StreamConnection stream_connection;&lt;br /&gt;	private StreamConnectionNotifier stream_connection_notifier;&lt;br /&gt;	&lt;br /&gt;	public ServerChat()&lt;br /&gt;	{&lt;br /&gt;		startServerChatBluetooth();&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	// Apre il servizio per la Chat&lt;br /&gt;	public void startServerChatBluetooth()&lt;br /&gt;	{&lt;br /&gt;		new Thread()&lt;br /&gt;		{&lt;br /&gt;			public void run()&lt;br /&gt;			{&lt;br /&gt;				try&lt;br /&gt;				{&lt;br /&gt;					LocalDevice.getLocalDevice().setDiscoverable(DiscoveryAgent.GIAC);&lt;br /&gt;				}&lt;br /&gt;				catch(Exception error)&lt;br /&gt;				{&lt;br /&gt;					error.printStackTrace();&lt;br /&gt;				}&lt;br /&gt;				&lt;br /&gt;				try&lt;br /&gt;				{&lt;br /&gt;					stream_connection_notifier = (StreamConnectionNotifier) Connector.open("btspp://localhost:" + CHATTANDO_UUID + ";name=" + CHATTANDO_SERVICE);&lt;br /&gt;				}&lt;br /&gt;				catch(Exception error)&lt;br /&gt;				{&lt;br /&gt;					error.printStackTrace();&lt;br /&gt;				}&lt;br /&gt;				&lt;br /&gt;				stopServerChatBluetooth();&lt;br /&gt;				&lt;br /&gt;				// Mette in ascolto il Server della Chat&lt;br /&gt;				isReady = true;&lt;br /&gt;				&lt;br /&gt;				try&lt;br /&gt;				{&lt;br /&gt;					while(isReady)&lt;br /&gt;					{&lt;br /&gt;						System.out.println("Sono in ascolto...");&lt;br /&gt;						&lt;br /&gt;						stream_connection = stream_connection_notifier.acceptAndOpen();&lt;br /&gt;						&lt;br /&gt;						System.out.println("Client Connected");&lt;br /&gt;					}&lt;br /&gt;				}&lt;br /&gt;				catch(Exception error)&lt;br /&gt;				{&lt;br /&gt;					error.printStackTrace();&lt;br /&gt;				}&lt;br /&gt;			}&lt;br /&gt;			&lt;br /&gt;		}.start();&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	// Chiude il servizio per la Chat&lt;br /&gt;	public void stopServerChatBluetooth()&lt;br /&gt;	{&lt;br /&gt;		if(isReady)&lt;br /&gt;		{&lt;br /&gt;			isReady = false;&lt;br /&gt;			&lt;br /&gt;			try&lt;br /&gt;			{&lt;br /&gt;				stream_connection_notifier.close();&lt;br /&gt;			}&lt;br /&gt;			catch(Exception error)&lt;br /&gt;			{&lt;br /&gt;				error.printStackTrace();&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 23 Feb 2007 14:22:23 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3573</guid>
      <author>whitetiger ()</author>
    </item>
    <item>
      <title>J2ME - Search Service Bluetooth</title>
      <link>http://snippets.dzone.com/posts/show/3572</link>
      <description>// Example Search Service Bluetooth&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import java.util.Vector;&lt;br /&gt;&lt;br /&gt;import javax.bluetooth.DeviceClass;&lt;br /&gt;import javax.bluetooth.DiscoveryAgent;&lt;br /&gt;import javax.bluetooth.DiscoveryListener;&lt;br /&gt;import javax.bluetooth.LocalDevice;&lt;br /&gt;import javax.bluetooth.RemoteDevice;&lt;br /&gt;import javax.bluetooth.ServiceRecord;&lt;br /&gt;import javax.bluetooth.UUID;&lt;br /&gt;&lt;br /&gt;public class ClientChat implements DiscoveryListener&lt;br /&gt;{&lt;br /&gt;	private static final String CHATTANDO_UUID = "A1A2A3A4A5A6A7A8A9A0B1B2B3B4B5B6";&lt;br /&gt;	private static final String CHATTANDO_SERVICE = "Chattando";&lt;br /&gt;&lt;br /&gt;	protected Chattando midlet;&lt;br /&gt;	&lt;br /&gt;	private boolean searchDone = false;&lt;br /&gt;	&lt;br /&gt;	private DiscoveryAgent discovery_agent;&lt;br /&gt;	&lt;br /&gt;	private Vector remote_device;&lt;br /&gt;	private Vector device_found;&lt;br /&gt;	&lt;br /&gt;	public ClientChat(Chattando midlet)&lt;br /&gt;	{&lt;br /&gt;		this.midlet = midlet;&lt;br /&gt;		&lt;br /&gt;		startScanBluetoothDevices();&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	// Avvia la ricerca dei dispositivi Bluetooth&lt;br /&gt;	public void startScanBluetoothDevices()&lt;br /&gt;	{&lt;br /&gt;		try&lt;br /&gt;		{&lt;br /&gt;			remote_device = new Vector();&lt;br /&gt;			device_found = new Vector();&lt;br /&gt;			&lt;br /&gt;			discovery_agent = LocalDevice.getLocalDevice().getDiscoveryAgent();&lt;br /&gt;			discovery_agent.startInquiry(DiscoveryAgent.GIAC, this);&lt;br /&gt;		}&lt;br /&gt;		catch(Exception error)&lt;br /&gt;		{&lt;br /&gt;			error.printStackTrace();&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	// Stoppa la ricerca dei dispositivi Bluetooth&lt;br /&gt;	public void stopScanBluetoothDevices()&lt;br /&gt;	{&lt;br /&gt;		discovery_agent.cancelInquiry(this);&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) &lt;br /&gt;	{&lt;br /&gt;		// Aggiungo il dispositivo solo se e' un computer (0x0100) o un cellulare (0x0200)&lt;br /&gt;		if(cod.getMajorDeviceClass() == 0x0100 || cod.getMajorDeviceClass() == 0x0200)&lt;br /&gt;			remote_device.addElement(btDevice);&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public void inquiryCompleted(int discType)&lt;br /&gt;	{&lt;br /&gt;		switch(discType)&lt;br /&gt;		{&lt;br /&gt;			case DiscoveryListener.INQUIRY_COMPLETED:&lt;br /&gt;														System.out.println("Device Search Completed");&lt;br /&gt;														&lt;br /&gt;														break;&lt;br /&gt;				&lt;br /&gt;			case DiscoveryListener.INQUIRY_ERROR:&lt;br /&gt;														System.out.println("Device Search Error");&lt;br /&gt;														&lt;br /&gt;														break;&lt;br /&gt;				&lt;br /&gt;			case DiscoveryListener.INQUIRY_TERMINATED:&lt;br /&gt;														System.out.println("Device Search Terminated");&lt;br /&gt;														&lt;br /&gt;														break;&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;		try&lt;br /&gt;		{&lt;br /&gt;			for(int i=0, cnt=remote_device.size(); i&lt;cnt; i++)&lt;br /&gt;			{&lt;br /&gt;				discovery_agent.searchServices(new int[]{ 0x0100, 0x0200 }, new UUID[]{ new UUID(0x0003), new UUID(CHATTANDO_UUID, false) }, (RemoteDevice) remote_device.elementAt(i), this);&lt;br /&gt;				waitForSearchDone();&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;		catch(Exception error)&lt;br /&gt;		{&lt;br /&gt;			error.printStackTrace();&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	// Aspetta che la ricerca dei servizi per il dispositivo sia terminata&lt;br /&gt;	private void waitForSearchDone()&lt;br /&gt;	{&lt;br /&gt;		searchDone = false;&lt;br /&gt;		&lt;br /&gt;		try&lt;br /&gt;		{&lt;br /&gt;			while(!searchDone)&lt;br /&gt;			{&lt;br /&gt;				synchronized(this)&lt;br /&gt;				{&lt;br /&gt;					this.wait();&lt;br /&gt;				}&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;		catch(Exception error)&lt;br /&gt;		{&lt;br /&gt;			&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	public void serviceSearchCompleted(int transID, int respCode)&lt;br /&gt;	{&lt;br /&gt;		switch(respCode)&lt;br /&gt;		{&lt;br /&gt;			case DiscoveryListener.SERVICE_SEARCH_COMPLETED:&lt;br /&gt;																		System.out.println("Service Search Completed");&lt;br /&gt;																		&lt;br /&gt;																		break;&lt;br /&gt;				&lt;br /&gt;			case DiscoveryListener.SERVICE_SEARCH_DEVICE_NOT_REACHABLE:&lt;br /&gt;																		System.out.println("Service Search Device not Reachable");&lt;br /&gt;																		&lt;br /&gt;																		break;&lt;br /&gt;				&lt;br /&gt;			case DiscoveryListener.SERVICE_SEARCH_ERROR:&lt;br /&gt;																		System.out.println("Service Search Error");&lt;br /&gt;																		&lt;br /&gt;																		break;&lt;br /&gt;				&lt;br /&gt;			case DiscoveryListener.SERVICE_SEARCH_NO_RECORDS:&lt;br /&gt;																		System.out.println("Service Search No Records");&lt;br /&gt;																		&lt;br /&gt;																		break;&lt;br /&gt;				&lt;br /&gt;			case DiscoveryListener.SERVICE_SEARCH_TERMINATED:&lt;br /&gt;																		System.out.println("Service Search Terminated");&lt;br /&gt;																		&lt;br /&gt;																		break;&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;		searchDone = true;&lt;br /&gt;		&lt;br /&gt;		// Risveglia il processo in attesa del completamento della ricerca dei servizi per un dispositivo&lt;br /&gt;		synchronized(this)&lt;br /&gt;		{&lt;br /&gt;			this.notifyAll();&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public void servicesDiscovered(int transID, ServiceRecord[] servRecord)&lt;br /&gt;	{&lt;br /&gt;		for(int i=0, cnt=servRecord.length; i&lt;cnt; i++)&lt;br /&gt;		{&lt;br /&gt;			if(((String) servRecord[i].getAttributeValue(0x0100).getValue()).equalsIgnoreCase(CHATTANDO_SERVICE))&lt;br /&gt;			{&lt;br /&gt;				device_found.addElement(servRecord[i].getHostDevice());&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 23 Feb 2007 14:21:30 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3572</guid>
      <author>whitetiger ()</author>
    </item>
    <item>
      <title>Mongrel on Win32 as Service</title>
      <link>http://snippets.dzone.com/posts/show/1846</link>
      <description>Mongrel now has support for running as a Win32 service right out of the box. The support is still rough but works well enough that we decided to release it. You can thank Luis Lavena for working on this and making it so nice.&lt;br /&gt;&lt;br /&gt;After you do the gem install, find a Rails application you want to run and do:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ mongrel_rails_service install -n myapp -r c:\my\path\to\myapp -p 4000 -e production&lt;br /&gt;$ mongrel_rails_service start -n myapp&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Now hit the port and poof, works. Stopping the app is just done with:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ mongrel_rails_service stop -n myapp&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;And, you can even set the CPU processor affinity for the service when yourun the install command. Can&#8217;t even do that on POSIX yet. Now that&#8217;s hot.&lt;br /&gt;&lt;br /&gt;If you run into an app that&#8217;s not running right, my suggestion is to run it with the regular mongrel_rails runner:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ cd c:\my\path\to\myapp&lt;br /&gt;$ mongrel_rails start -p 4500&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Since that will spit out error messages and stuff to the console. Use CTRL-Pause/Break to stop.&lt;br /&gt;</description>
      <pubDate>Wed, 05 Apr 2006 09:44:32 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/1846</guid>
      <author>MattScilipoti (Matt Scilipoti)</author>
    </item>
  </channel>
</rss>
