pixelflut 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/pxf +10 -8
- data/lib/pixelflut.rb +2 -2
- data/lib/pixelflut/convert.rb +10 -20
- data/lib/pixelflut/sender.rb +14 -34
- data/lib/pixelflut/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 289cd742f8feabae71182b94738bf9b21246bf1f3afae4a4b2bc1c5b1be87d4c
         | 
| 4 | 
            +
              data.tar.gz: 2ba98d609131de67a2be99f55681087b45eeaf4deb6bf488b393894c1b31c6c9
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 9a8b53a0309a0c52a8898bab91f9c1ba95bb1622f733fee1236914b036dabae5ad2b375a55b6bb5c5cb3d1d9ba33f9d200cde650d014232e193f598ce8d3de8f
         | 
| 7 | 
            +
              data.tar.gz: ba1480300f12b1fae6dba2fcec945537b519dd04fabffd345288a5b3c2c1f1c8e5ae6d9115314663772feeaa6d74c8b8198c8d905f6c8c8e0fab51c27a8594e2
         | 
    
        data/bin/pxf
    CHANGED
    
    | @@ -12,7 +12,8 @@ def err(msg, code = 1) | |
| 12 12 | 
             
              exit(code)
         | 
| 13 13 | 
             
            end
         | 
| 14 14 |  | 
| 15 | 
            -
            OPTS = | 
| 15 | 
            +
            OPTS =
         | 
| 16 | 
            +
              Struct
         | 
| 16 17 | 
             
              .new(:host, :port, :count, :x, :y, :mode, :scale, :image)
         | 
| 17 18 | 
             
              .new('127.0.0.1', 1234, 4, 0, 0, :rgbx)
         | 
| 18 19 |  | 
| @@ -62,8 +63,8 @@ end | |
| 62 63 |  | 
| 63 64 | 
             
            begin
         | 
| 64 65 | 
             
              parse(ARGV)
         | 
| 65 | 
            -
               | 
| 66 | 
            -
               | 
| 66 | 
            +
              address = Pixelflut::Sender.address(OPTS.host, OPTS.port)
         | 
| 67 | 
            +
              data = Pixelflut.sliced(
         | 
| 67 68 | 
             
                source: OPTS.image,
         | 
| 68 69 | 
             
                count: OPTS.count,
         | 
| 69 70 | 
             
                x: OPTS.x,
         | 
| @@ -71,18 +72,19 @@ begin | |
| 71 72 | 
             
                scale: OPTS.scale,
         | 
| 72 73 | 
             
                mode: OPTS.mode
         | 
| 73 74 | 
             
              )
         | 
| 74 | 
            -
               | 
| 75 | 
            +
              data.size.times do |i|
         | 
| 75 76 | 
             
                next unless fork
         | 
| 76 77 | 
             
                Process.setproctitle($name = format('pxf-%02d', i + 1))
         | 
| 77 | 
            -
                 | 
| 78 | 
            -
                 | 
| 79 | 
            -
                 | 
| 80 | 
            -
                sender.run{ puts("#{$name}: sent partly") }
         | 
| 78 | 
            +
                data = data[i].join
         | 
| 79 | 
            +
                puts("#{$name}: run - #{data.bytesize} bytes")
         | 
| 80 | 
            +
                Pixelflut::Sender.send(address, data)
         | 
| 81 81 | 
             
              end
         | 
| 82 82 | 
             
            rescue SocketError => e
         | 
| 83 83 | 
             
              err(e, 3)
         | 
| 84 84 | 
             
            rescue LoadError => e
         | 
| 85 85 | 
             
              err(e, 4)
         | 
| 86 | 
            +
            rescue Errno::ECONNREFUSED
         | 
| 87 | 
            +
              err('unable to connect', 2)
         | 
| 86 88 | 
             
            rescue Errno::EPIPE
         | 
| 87 89 | 
             
              err('connection lost', 2)
         | 
| 88 90 | 
             
            rescue Interrupt
         | 
    
        data/lib/pixelflut.rb
    CHANGED
    
    | @@ -11,9 +11,9 @@ module Pixelflut | |
| 11 11 | 
             
                Convert.each_line(image, x, y)
         | 
| 12 12 | 
             
              end
         | 
| 13 13 |  | 
| 14 | 
            -
              def self. | 
| 14 | 
            +
              def self.sliced(source:, count: 4, x: 0, y: 0, scale: nil, mode: :rgbx)
         | 
| 15 15 | 
             
                image = Image.new(source)
         | 
| 16 16 | 
             
                image.scale(scale) if scale
         | 
| 17 | 
            -
                Convert. | 
| 17 | 
            +
                Convert.random_slices(image, x, y, mode, count)
         | 
| 18 18 | 
             
              end
         | 
| 19 19 | 
             
            end
         | 
    
        data/lib/pixelflut/convert.rb
    CHANGED
    
    | @@ -2,6 +2,16 @@ require 'rmagick' | |
| 2 2 |  | 
| 3 3 | 
             
            module Pixelflut
         | 
| 4 4 | 
             
              module Convert
         | 
| 5 | 
            +
                def self.random_slices(image, dx, dy, mode, count)
         | 
| 6 | 
            +
                  mode = MODE.fetch(mode) if Symbol === mode
         | 
| 7 | 
            +
                  ret, idx = Array.new(count){ [] }, 0
         | 
| 8 | 
            +
                  image.each_pixel.to_a.shuffle!.each do |x, y, px|
         | 
| 9 | 
            +
                    ret[idx % count] << "PX #{x + dx} #{y + dy} #{mode.call(px)}\n"
         | 
| 10 | 
            +
                    idx += 1
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
                  ret
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
             | 
| 5 15 | 
             
                MODE = {
         | 
| 6 16 | 
             
                  rgb: lambda do |pixel|
         | 
| 7 17 | 
             
                    pixel.to_color(Magick::AllCompliance, false, 8, true)[1, 6]
         | 
| @@ -17,25 +27,5 @@ module Pixelflut | |
| 17 27 | 
             
                    end
         | 
| 18 28 | 
             
                  end
         | 
| 19 29 | 
             
                }.freeze
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                def self.each_line(image, dx, dy, mode)
         | 
| 22 | 
            -
                  return to_enum(__method__, image, dx, dy, mode) unless block_given?
         | 
| 23 | 
            -
                  mode = MODE.fetch(mode) if Symbol === mode
         | 
| 24 | 
            -
                  image.each_pixel do |x, y, px|
         | 
| 25 | 
            -
                    yield("PX #{x + dx} #{y + dy} #{mode.call(px)}\n")
         | 
| 26 | 
            -
                  end
         | 
| 27 | 
            -
                end
         | 
| 28 | 
            -
             | 
| 29 | 
            -
                def self.as_slices(image, dx, dy, mode, count)
         | 
| 30 | 
            -
                  ret = each_line(image, dx, dy, mode).to_a.shuffle!
         | 
| 31 | 
            -
                  ret = ret.each_slice(ret.size / (count + 1)).to_a
         | 
| 32 | 
            -
                  rest = ret.pop
         | 
| 33 | 
            -
                  i = 0
         | 
| 34 | 
            -
                  rest.each do |line|
         | 
| 35 | 
            -
                    ret[i] << line
         | 
| 36 | 
            -
                    i = 0 if (i+= 1) == ret.size
         | 
| 37 | 
            -
                  end
         | 
| 38 | 
            -
                  ret
         | 
| 39 | 
            -
                end
         | 
| 40 30 | 
             
              end
         | 
| 41 31 | 
             
            end
         | 
    
        data/lib/pixelflut/sender.rb
    CHANGED
    
    | @@ -1,47 +1,27 @@ | |
| 1 1 | 
             
            require 'socket'
         | 
| 2 2 |  | 
| 3 3 | 
             
            module Pixelflut
         | 
| 4 | 
            -
               | 
| 5 | 
            -
                 | 
| 6 | 
            -
                  Addrinfo.tcp(host, port)
         | 
| 7 | 
            -
                end
         | 
| 8 | 
            -
             | 
| 9 | 
            -
                def initialize(address, data)
         | 
| 10 | 
            -
                  @data = data.freeze
         | 
| 11 | 
            -
                  @addr = Socket.pack_sockaddr_in(address.ip_port, address.ip_address)
         | 
| 12 | 
            -
                  @socket = configure(Socket.new(address.ipv6? ? :INET6 : :INET, :STREAM))
         | 
| 13 | 
            -
                end
         | 
| 4 | 
            +
              module Sender
         | 
| 5 | 
            +
                module_function
         | 
| 14 6 |  | 
| 15 | 
            -
                def  | 
| 16 | 
            -
                   | 
| 17 | 
            -
                end
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                def run(&block)
         | 
| 20 | 
            -
                  @socket.connect(@addr)
         | 
| 21 | 
            -
                  send(@socket, @data, @data.bytesize, &block)
         | 
| 22 | 
            -
                  @socket.close
         | 
| 7 | 
            +
                def address(host, port)
         | 
| 8 | 
            +
                  Addrinfo.tcp(host, port)
         | 
| 23 9 | 
             
                end
         | 
| 24 10 |  | 
| 25 | 
            -
                 | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
                  index, curr, size = 0, data, bytesize
         | 
| 29 | 
            -
                  loop do
         | 
| 30 | 
            -
                    written = socket.write(curr)
         | 
| 31 | 
            -
                    if (size -= written) > 0
         | 
| 32 | 
            -
                      yield(self) if block_given?
         | 
| 33 | 
            -
                      curr = data.byteslice(index += written, size)
         | 
| 34 | 
            -
                    else
         | 
| 35 | 
            -
                      index, curr, size = 0, data, bytesize
         | 
| 36 | 
            -
                    end
         | 
| 37 | 
            -
                  end
         | 
| 11 | 
            +
                def send(address, data)
         | 
| 12 | 
            +
                  socket = create_socket(address)
         | 
| 13 | 
            +
                  loop{ socket.write(data) }
         | 
| 38 14 | 
             
                end
         | 
| 39 15 |  | 
| 40 | 
            -
                def  | 
| 41 | 
            -
                  socket | 
| 42 | 
            -
                  socket. | 
| 16 | 
            +
                def create_socket(address)
         | 
| 17 | 
            +
                  socket = Socket.new(address.ipv6? ? :INET6 : :INET, :STREAM)
         | 
| 18 | 
            +
                  # socket.sync = true
         | 
| 19 | 
            +
                  # socket.setsockopt(:TCP, :NODELAY, 1)
         | 
| 43 20 | 
             
                  socket.setsockopt(:SOCKET, :KEEPALIVE, 0)
         | 
| 44 21 | 
             
                  socket.do_not_reverse_lookup = true
         | 
| 22 | 
            +
                  socket.connect(
         | 
| 23 | 
            +
                    Socket.pack_sockaddr_in(address.ip_port, address.ip_address)
         | 
| 24 | 
            +
                  )
         | 
| 45 25 | 
             
                  socket
         | 
| 46 26 | 
             
                end
         | 
| 47 27 | 
             
              end
         | 
    
        data/lib/pixelflut/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: pixelflut
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.5
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Mike Blumtritt
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2019-11- | 
| 11 | 
            +
            date: 2019-11-28 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rmagick
         |