[#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-21 06:39:30 UTC
List: ruby-talk #398489
On Tue, Aug 21, 2012 at 4:17 AM, tammy roberts2 <lists@ruby-forum.com> wrote:
> Robert Klemme wrote in post #1072878:
>> On Mon, Aug 20, 2012 at 11:57 AM, tammy roberts2 <lists@ruby-forum.com>
>> wrote:

>> This is a completely different approach: you do not use a termination
>> byte any more but transmit the message length beforehand.
>>>         data_received = []
>>>           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?
>
> So that it can be passed to the get_reply method if the client expects a
> reply from the server, or closed by the calling method if it does not.

Aha.  The issue with that is that you can read only with one thread at
a time from the socket.  Since you created a thread after socket
accept and that thread loops reading this should be the only thread
fetching data from the socket.  Sending is a different story (but btw.
you should also properly synchronize to make sure only one thread
writes at a time).

>>>     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.
>
> So am I correct in thinking that if I use read I do not need to put it
> in a loop because it will always wait until that many bytes have
> arrived?

Yes, #read will block.  But I confused method pairs: it should be
#read and #write and not #read and #send.

>> 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.):
>
> The listen method currently yields to the caller an array with the parts
> of the data that has been transmitted to it, and the calling method then
> knows how to process this array depending on what it is (the message
> type).

No.  Method #listen does not yield.  It's the reader thread which you
start in #listen.  And note that this can be a problem if the block
you pass in is not prepared to be executed concurrently.

> Thanks for your advice I will be seriously considering the way you
> presented this :).

You're welcome!

Kind regards

robert


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

In This Thread