[#397988] Help with sqlite3 please — Kaye Ng <lists@...>

I'm on Windows 7 Ultimate, 64-bit

18 messages 2012/08/03
[#397989] Re: Help with sqlite3 please — Chris Hulan <chris.hulan@...> 2012/08/03

sqlite is not ruby, so you should look for a sqlite group ;)

[#397990] Re: Help with sqlite3 please — Kaye Ng <lists@...> 2012/08/03

> However it looks like you have 'SQL' at the beginning of your CREATE

[#398031] Gem install or usage problem in shared environment — Tom Moulton <lists@...>

I am moving to a Westhost shared CPanel account and I am trying to set

17 messages 2012/08/04
[#398077] Re: Gem install or usage problem in shared environment — Tom Moulton <lists@...> 2012/08/06

I got a solution from WestHost and it may help others:

[#398086] Re: Gem install or usage problem in shared environment — Ryan Davis <ryand-ruby@...> 2012/08/07

[#398088] Re: Gem install or usage problem in shared environment — Tom Moulton <lists@...> 2012/08/07

Ryan Davis wrote in post #1071503:

[#398063] Join with ActiveRecord using non-standard schema — Tedi Roca <lists@...>

Hi,

13 messages 2012/08/06

[#398135] Help with database-related code pls — Kaye Ng <lists@...>

Hi guys! This is just a part of the code of a program that can load a

12 messages 2012/08/08

[#398190] How do you order your class methods? — masta Blasta <lists@...>

Just getting some layout ideas from other fellow devs.

11 messages 2012/08/10

[#398245] namespace instance methods? — John Doe <lists@...>

I have a large class with many instance methods that I want to

14 messages 2012/08/13

[#398287] Idea: def ... end returns the symbolized version of the newly-defined method, instead of nil — Peter <lumbergh@...>

This would allow useful syntax constructs such as this:

9 messages 2012/08/13

[#398362] case vs if-else — ajay paswan <lists@...>

Which one is faster?

20 messages 2012/08/16

[#398385] A Ruby class is never closed — Rubyist Rohit <lists@...>

Is it true that a Ruby class definition is never closed? Even after

18 messages 2012/08/16

[#398504] How to create an EXecutable file (Linux) — Fosiul Alam <lists@...>

Hi

13 messages 2012/08/22

[#398506] Save a file by clicking on a link — ajay paswan <lists@...>

I clicked a link to download a file using ruby, now I see the open-save

41 messages 2012/08/22

[#398641] force child threads run paralelly? — ajay paswan <lists@...>

I have created two child thread using main thread- child1 and child2.

19 messages 2012/08/28
[#398644] Re: force child threads run paralelly? — ajay paswan <lists@...> 2012/08/28

Ruby version:

[#398648] Re: force child threads run paralelly? — Tony Arcieri <tony.arcieri@...> 2012/08/28

On Tue, Aug 28, 2012 at 7:19 AM, ajay paswan <lists@ruby-forum.com> wrote:

[#398684] Can I do this with Ruby and sqlite alone? — Kaye Ng <lists@...>

Hi guys.

16 messages 2012/08/29

Re: TCPserver how to signal EOT

From: Robert Klemme <shortcutter@...>
Date: 2012-08-20 11:08:03 UTC
List: ruby-talk #398480
On Mon, Aug 20, 2012 at 11:57 AM, tammy roberts2 <lists@ruby-forum.com> wrote:
> Hi Robert, it is me again, my computer crashed and I lost my login
> information. Here is what I am using right now, it seems to be working
> fine, but maybe you see problems with it or a way to improve. Also maybe
> it will help someone else out who is struggling with the same problem I
> was.

This is a completely different approach: you do not use a termination
byte any more but transmit the message length beforehand.
>
> class Networking
>
>   def initialize
>     @settings = Settings.new
>   end
>
>   def listen(server)
>     loop do
>       Thread.start(server.accept) do |client|
>         data_received = []
>         total_received = 0
>         incoming_data_size = client.recvfrom( 4 )[0].unpack('N*')[0]
>
>         loop do
>           section_size = client.recvfrom( 4 )[0].unpack('N*')[0]
>           message_section = ""
>
>           loop do
>             message_section << client.recvfrom( section_size )[0]
>             break if message_section.bytesize == section_size
>           end
>
>           data_received << message_section
>           total_received += 4 + message_section.bytesize
>           break if total_received == incoming_data_size
>         end
>
>     yield(data_received, client)
>       end
>     end
>   end
>
>   def send_data(socket, message)
>     forward_message = [message.bytesize].pack('N*') + message
>     socket.send(forward_message, 0)
>     yield(socket)
>   end

Why do you yield the socket?

>   def get_reply(socket)
>     incoming_data_size = socket.recvfrom( 4 )[0].unpack('N*')[0]
>     section_size = socket.recvfrom( 4 )[0].unpack('N*')[0]
>     reply = ""
>
>     loop do
>       reply << socket.recvfrom( section_size )[0]
>       break if reply.bytesize == incoming_data_size - 4
>     end
>
>     yield(reply, socket)
>   end
> end

If you use #send then I'd also use #read for reading instead of
#recvfrom.  I'd only use that method if I needed the extra options.
Method #read will also block until as many bytes have arrived so you
do not take care of fragment messages yourself.

I'd probably choose a tad different approach by wrapping the
connection with something that does the message handling and creation
of a message type (for specific parsing etc.):

# could be more sophisticated
Message = Struct.new :bytes

Connection = Struct.new :socket do
  def send(msg)
    b = msg.bytes
    socket.write [b.bytesize].pack 'N'
    socket.write b
    self
  end

  def close
    socket.close
  end

  def each_msg
      until socket.eof?
        size = socket.read(4).unpack('N').first
        msg = socket.read(size)
        yield Message.new(msg)
      end
    end

    self
  end
end

loop do
  Thread.new(server.accept) do |client|
    conn = Connection.new client

    conn.each_msg do |msg|
      yield msg, conn
    end
  end
end


Kind regards

robert


-- 
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

In This Thread