<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: search code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sat, 17 May 2008 05:40:13 GMT</pubDate>
    <description>DZone Snippets: search code</description>
    <item>
      <title>Searching through your Twitter archive</title>
      <link>http://snippets.dzone.com/posts/show/5158</link>
      <description>This Ruby code downloads previous twitter entries as html files to a local file directory.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;(1..5).each {|i| `wget --user=jrobertson --password=secret http://twitter.com/account/archive?page=#{i}`}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;then using grep -i &lt;keyword&gt; * you can search for anything you've twittered in the past.&lt;br /&gt;&lt;br /&gt;Note: Use Wget sparingly.</description>
      <pubDate>Wed, 20 Feb 2008 12:55:59 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5158</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>Disjoint Set Class in Ruby</title>
      <link>http://snippets.dzone.com/posts/show/5124</link>
      <description>A disjoint Set can be used for creating minimal spanning trees.&lt;br /&gt;The union-find algorithm is fast, faster than linked lists for some uses. &lt;br /&gt;See: &lt;a href = "http://en.wikipedia.org/wiki/Disjoint-set_data_structure"&gt;Wikipedia Disjoint Set&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's fast and simple. Just add a DisjointSetNode object to the &lt;br /&gt;objects that you want to create a tree of. &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# This is a disjoint set implementing union-find&lt;br /&gt;# It can be used for generating a minimal spanning&lt;br /&gt;# tree using Kruskal's algorithm.&lt;br /&gt;# http://en.wikipedia.org/wiki/Kruskal's_algorithm&lt;br /&gt;&lt;br /&gt;class DisjointSetNode&lt;br /&gt;  attr_accessor :parent, :rank&lt;br /&gt;&lt;br /&gt;  def initialize&lt;br /&gt;    @parent = self&lt;br /&gt;    @rank = 0&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  # An optimised union by rank. Attaches smaller tree to larger.&lt;br /&gt;  def union(other)&lt;br /&gt;    self_root = self.find&lt;br /&gt;    other_root = other.find&lt;br /&gt;    if self_root.rank &gt; other_root.rank&lt;br /&gt;      other_root.parent = self_root&lt;br /&gt;    elsif self_root.rank &lt; other_root.rank&lt;br /&gt;      self_root.parent = other_root&lt;br /&gt;    elsif self_root != other_root&lt;br /&gt;      other_root.parent = self_root&lt;br /&gt;      self_root.rank += 1&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def find&lt;br /&gt;    if self.parent === self&lt;br /&gt;      self&lt;br /&gt;    else&lt;br /&gt;      self.parent = self.parent.find&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;end   # class DisjointSetNode&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Some simple test code:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;require 'disjointsetnode'&lt;br /&gt;require 'test/unit'&lt;br /&gt;require 'test/unit/ui/console/testrunner'&lt;br /&gt;&lt;br /&gt;    class DisjointSetTest &lt; Test::Unit::TestCase&lt;br /&gt;      N_Nodes = 1000&lt;br /&gt;&lt;br /&gt;      def setup&lt;br /&gt;        @nodes = Array.new&lt;br /&gt;        (1..N_Nodes).each do |node|&lt;br /&gt;        @nodes &lt;&lt; DisjointSetNode.new&lt;br /&gt;        end&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;      # def teardown&lt;br /&gt;      # end&lt;br /&gt;&lt;br /&gt;      def test_creation&lt;br /&gt;        @nodes.each do |node|&lt;br /&gt;          assert !node.nil?, "A Node is nil!"&lt;br /&gt;        end&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;      def test_initial_values&lt;br /&gt;        @nodes.each do |node|&lt;br /&gt;          assert node.parent === node, "self #{node}, parent #{node.parent} not equal."&lt;br /&gt;          assert node.rank == 0, " A node's rtank is not 0."&lt;br /&gt;        end&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;      def test_union&lt;br /&gt;        # Join all nodes in sequence&lt;br /&gt;        @nodes.each do |node|&lt;br /&gt;          if !@lastnode.nil?&lt;br /&gt;            node.union(@lastnode)&lt;br /&gt;            node_f = node.find&lt;br /&gt;            lnode_f = @lastnode.find&lt;br /&gt;            assert node_f == lnode_f, "Join not completed: node_f: #{node_f}, lnode_f: #{lnode_f}"&lt;br /&gt;          end&lt;br /&gt;          @lastnode = node&lt;br /&gt;        end&lt;br /&gt;      end&lt;br /&gt;&lt;br /&gt;      def test_random_union&lt;br /&gt;        (1..N_Nodes-1).each do |n|&lt;br /&gt;          node = @nodes[n]&lt;br /&gt;          other = @nodes[rand(N_Nodes-1)]&lt;br /&gt;          node.union(other)&lt;br /&gt;          node_f = node.find&lt;br /&gt;          onode_f = other.find&lt;br /&gt;          assert node_f == onode_f, "Join not completed: node_f: #{node_f}, onode_f: #{onode_f}"&lt;br /&gt;        end&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;# This runs the tests for ya! &lt;br /&gt;Test::Unit::UI::Console::TestRunner.run(DisjointSetTest)&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 10 Feb 2008 02:49:59 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5124</guid>
      <author>dr_saturn (Stuart Coyle)</author>
    </item>
    <item>
      <title>Add a Google custom search facility to your website</title>
      <link>http://snippets.dzone.com/posts/show/4951</link>
      <description>This HTML page displays a basic search page similar to http://www.google.com/ however this search page will only search for results from http://snippets.dzone.com.  &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"&lt;br /&gt;    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;&lt;br /&gt;&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;&lt;head&gt;&lt;br /&gt;&lt;title&gt;abc&lt;/title&gt;&lt;br /&gt;&lt;meta http-equiv="Content-Type" content="text/html; charset: UTF-8" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/head&gt;&lt;br /&gt;&lt;body&gt;&lt;br /&gt;&lt;br /&gt;    &lt;form action="http://www.google.com/search"&gt;&lt;br /&gt;      &lt;div&gt;&lt;input name="query" type="hidden" value="site:snippets.dzone.com"&gt;&lt;/input&gt;&lt;/div&gt;&lt;br /&gt;      &lt;div&gt;&lt;input maxlength="2048" name="q" size="55" title="Google Search" value="" &gt;&lt;/input&gt;&lt;/div&gt;&lt;br /&gt;      &lt;div&gt;&lt;input name="btnG" type="submit" value="Google Search"&gt;&lt;/input&gt;&lt;/div&gt;&lt;br /&gt;    &lt;/form&gt;&lt;br /&gt;&lt;/body&gt;&lt;br /&gt;&lt;/html&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;I stumbled across the hidden query field while I was looking for ways to perform custom search without the need for JavaScript. If you are interested in Google's official custom search engine on your site go to http://www.google.com/cse&lt;br /&gt;&lt;br /&gt;* update 8-Jan-08 2:01pm *&lt;br /&gt;Here's a more advanced example from someone's blog titled 'Fine-tuning Custom Google Search' http://snipr.com/1wppb [blogs.salon.com]&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;FORM method=GET action=http://www.google.com/custom&gt;;&lt;br /&gt;&lt;A HREF=http://www.google.com/search&gt;;&lt;br /&gt;&lt;IMG SRC=http://www.google.com/logos/Logo_40wht.gif border=0 ALT=Google align=middle&gt;&lt;/A&gt; &lt;INPUT TYPE=text name=q size="10" maxlength=255 value=""&gt;&lt;br /&gt;&lt;INPUT type=submit name=sa VALUE="Just Goog It!"&gt;&lt;br /&gt;&lt;INPUT type=hidden name=cof VALUE="GIMP:darkblue;LW:380;ALC:red;L:http://blogs.salon.com/0001111/images/rfbanner.jpg;GFNT:lightblue;LC:red;LH:100;AH:left;VLC:gray;S:http://blogs.salon.com/0001111/;GALT:blue;AWFID:ba6ecf243ae3d16f;"&gt;&lt;br /&gt;&lt;br /&gt;&gt;span class="small"&gt;&lt;br /&gt;&lt;input type=radio name=sitesearch value="blogs.salon.com" checked&gt;Search blogs.salon.com&lt;br /&gt;&lt;input type=radio name=sitesearch value=""&gt;Search the Web&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/FORM&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 06 Jan 2008 13:48:50 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4951</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>Tutor search</title>
      <link>http://snippets.dzone.com/posts/show/4845</link>
      <description>// Search results page - formatting html has been omited.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;?php include 'db.inc.php';&lt;br /&gt;&lt;br /&gt;		// The basic SELECT statement&lt;br /&gt;		$select = 'SELECT id, title, forename, surname, userlevel';&lt;br /&gt;		$from = ' FROM users';&lt;br /&gt;		$where = " WHERE userlevel='2'";&lt;br /&gt;&lt;br /&gt;		$forename = $_POST['forename'];&lt;br /&gt;		if ($forename !='') { //Forename was specified&lt;br /&gt;		$where .= " AND forename LIKE '%$forename%'";&lt;br /&gt;&lt;br /&gt;		$surname = $_POST['surname'];&lt;br /&gt;		if ($surname !='') { //Surnamename was specified&lt;br /&gt;		$where .= " AND surname LIKE '%$surname%'";&lt;br /&gt;		}&lt;br /&gt;		?&gt;&lt;br /&gt;&lt;br /&gt;	&lt;?php&lt;br /&gt;	$users = @mysql_query($select . $from . $where);&lt;br /&gt;	if (!$users) {&lt;br /&gt;	exit ('&lt;p&gt;Unable to abtain user list from the database');&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	?&gt;&lt;br /&gt;	&lt;table&gt;&lt;br /&gt;	&lt;tr&gt;&lt;th&gt;Username&lt;/th&gt;&lt;th&gt;Title&lt;/th&gt;&lt;th&gt;Forename&lt;/th&gt;&lt;th&gt;Surname&lt;/th&gt;&lt;th&gt;Options&lt;/th&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;	&lt;?php&lt;br /&gt;	while ($user = mysql_fetch_array($users)) {&lt;br /&gt;	echo "&lt;tr vlaign='top'&gt;\n";&lt;br /&gt;	$id = $user['id'];&lt;br /&gt;	$username = htmlspecialchars($user['username']);&lt;br /&gt;	$title = htmlspecialchars($user['title']);&lt;br /&gt;	$forename = htmlspecialchars($user['forename']);&lt;br /&gt;	$surname = htmlspecialchars($user['surname']);&lt;br /&gt;&lt;br /&gt;	echo "&lt;td&gt;$username&lt;/td&gt;&lt;td&gt;$title&lt;/td&gt;&lt;td&gt;$forename&lt;/td&gt;&lt;td&gt;$surname&lt;/td&gt;\n";&lt;br /&gt;	echo "&lt;td&gt;&lt;a href='edituser.php?id=$id'&gt;Edit&lt;/a&gt; | &lt;a href='deleteuser.php?id=$id' onClick=\"return confirm('WARNING: Deleted users cannot be retrieved. All files associated with that user will be deleted. Continue?');\"&gt;Delete&lt;/a&gt;&lt;/td&gt;\n";&lt;br /&gt;	echo "&lt;/tr&gt;\n";&lt;br /&gt;	}&lt;br /&gt;	?&gt;&lt;br /&gt;	&lt;/table&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 05 Dec 2007 16:20:24 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4845</guid>
      <author>grahamgilbert (Graham Gilbert)</author>
    </item>
    <item>
      <title>Babelfish translate</title>
      <link>http://snippets.dzone.com/posts/show/4265</link>
      <description>Ok, so maybe some of you might think that Babelfish's the best translator out there. I don't know about that , but I do know where my towel is ;)&lt;br /&gt;So, boys and girls, here's the bookmarklet that allows to translate your current web-page using the babelfish translation engine.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;javascript:location.href='http://babelfish.altavista.com/babelfish/tr?trurl='+encodeURIComponent(location.href)+'&amp;lp=%s&amp;btnTrUrl=Translate'&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;To make it useful, save it as a bookmark in FF (or as a new search engine in Opera) and give it a keyword/shortcut by editing the bookmark's properties in FF (or the search properties in Opera). Let's call him, say 'bf', that should do it.&lt;br /&gt;&lt;br /&gt;Here are some examples:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;bf en_fr&lt;br /&gt;bf fr_en&lt;br /&gt;bf en_ja&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;br /&gt;G.R.</description>
      <pubDate>Thu, 05 Jul 2007 20:48:59 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4265</guid>
      <author>griflet (guillaume riflet)</author>
    </item>
    <item>
      <title>Fast stop word detection in Ruby</title>
      <link>http://snippets.dzone.com/posts/show/4236</link>
      <description>Requires &lt;a href="http://snippets.dzone.com/posts/show/4235"&gt;BloominSimple&lt;/a&gt; (a pure Ruby Bloom filter class).&lt;br /&gt;&lt;br /&gt;List of stop words obtained from &lt;a href="http://www.dcs.gla.ac.uk/idom/ir_resources/linguistic_utils/stop_words"&gt;http://www.dcs.gla.ac.uk/idom/ir_resources/linguistic_utils/stop_words&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;# Detect stop words QUICKLY&lt;br /&gt;# Uses a bloom filter instead of searching literally through a list of stopwords&lt;br /&gt;# for &gt; 3x speed increase&lt;br /&gt;# &lt;br /&gt;#    using bloom filter: 2.580000   0.030000   2.610000 (  2.698829)&lt;br /&gt;#  using literal search: 7.850000   0.120000   7.970000 (  8.181684)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;require 'bloominsimple'&lt;br /&gt;require 'digest/sha1'&lt;br /&gt;require 'pp'&lt;br /&gt;&lt;br /&gt;# Create a simple bloom filter that uses a SHA1 hash (more effective than BloominSimple's default hashing)&lt;br /&gt;b = BloominSimple.new(50000) do |word|&lt;br /&gt;  Digest::SHA1.digest(word.downcase.strip).unpack("VVV")&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# Add stopwords to the bloom filter!&lt;br /&gt;stopwords = []&lt;br /&gt;File.open('stopwords').each { |a| b.add(a); stopwords &lt;&lt; a.downcase.strip }&lt;br /&gt;&lt;br /&gt;# Read in a whole dictionary of regular words&lt;br /&gt;words = File.open('/usr/share/dict/words').read.split.collect{|a| a.downcase.strip }&lt;br /&gt;&lt;br /&gt;# Define two ways to detect stopwords for comparison..&lt;br /&gt;using_filter = lambda { |word| b.includes?(word) }&lt;br /&gt;using_array = lambda { |word| stopwords.include?(word.downcase.strip) }&lt;br /&gt;techniques = [using_filter, using_array]&lt;br /&gt;&lt;br /&gt;# Run stopword comparisons with both techniques&lt;br /&gt;t = techniques.collect { |l| words.collect { |a| l[a] } }&lt;br /&gt;&lt;br /&gt;# See how effective the bloom filter has been compared to the literal search&lt;br /&gt;if t[0] == t[1]&lt;br /&gt;  puts "GOOD"&lt;br /&gt;else&lt;br /&gt;  words.zip(t[0],t[1]).each do |x|&lt;br /&gt;    puts x.first if x[1] != x[2]&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# Now do speed benchmarks..&lt;br /&gt;techniques.each { |l| puts Benchmark.measure { words.each { |a| l[a] } } }&lt;/code&gt;</description>
      <pubDate>Mon, 02 Jul 2007 03:10:16 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4236</guid>
      <author>peter (Peter Cooperx)</author>
    </item>
    <item>
      <title>Array Search Prototype</title>
      <link>http://snippets.dzone.com/posts/show/3631</link>
      <description>This prototype extends the Array object to allow for searches&lt;br /&gt;within the Array.   It will return false if nothing is found.  If&lt;br /&gt;item(s) are found you'll get an array of indexes back which matched&lt;br /&gt;your search request. It accepts strings, numbers, and regular expressions as search&lt;br /&gt;criteria.  35 is different than '35' and vice-versa.   &lt;br /&gt;&lt;code&gt;&lt;br /&gt;// Examples&lt;br /&gt;var test=[1,58,'blue','baby','boy','cat',35,'35',18,18,104]&lt;br /&gt;result1=test.find(35);    //returns 6&lt;br /&gt;result2=test.find(/^b/i); //returns 2,3,4&lt;br /&gt;result3=test.find('35');  //returns 7&lt;br /&gt;result4=test.find(18);    // returns 8,9&lt;br /&gt;result5=test.find('zebra'); //returns false&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Array.prototype.find = function(searchStr) {&lt;br /&gt;  var returnArray = false;&lt;br /&gt;  for (i=0; i&lt;this.length; i++) {&lt;br /&gt;    if (typeof(searchStr) == 'function') {&lt;br /&gt;      if (searchStr.test(this[i])) {&lt;br /&gt;        if (!returnArray) { returnArray = [] }&lt;br /&gt;        returnArray.push(i);&lt;br /&gt;      }&lt;br /&gt;    } else {&lt;br /&gt;      if (this[i]===searchStr) {&lt;br /&gt;        if (!returnArray) { returnArray = [] }&lt;br /&gt;        returnArray.push(i);&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  return returnArray;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 05 Mar 2007 18:39:38 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3631</guid>
      <author>pcx99 (Patrick)</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>binarysearch.scm</title>
      <link>http://snippets.dzone.com/posts/show/3535</link>
      <description>// Binary Search&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;; Andrew Pennebaker&lt;br /&gt;; 18 Feb 2007&lt;br /&gt;; License: GPL&lt;br /&gt;; URL: http://snippets.dzone.com/posts/show/3535&lt;br /&gt;&lt;br /&gt;(define binary-search&lt;br /&gt;	(lambda (ls value low high)&lt;br /&gt;		(let ((mid (floor (/ (+ low high) 2))))&lt;br /&gt;			(cond&lt;br /&gt;				((&gt; low high) -1)&lt;br /&gt;				((= (list-ref ls mid) value) mid)&lt;br /&gt;				((&gt; (list-ref ls mid) value) (binary-search ls value low (- mid 1)))&lt;br /&gt;				((&lt; (list-ref ls mid) value) (binary-search ls value (+ mid 1) high))))))&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 19 Feb 2007 00:38:41 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3535</guid>
      <author>mcandre (Andrew Pennebaker)</author>
    </item>
  </channel>
</rss>
