[トップ][ノート][編集履歴][一覧][最近の更新][->English]

Programming

Category of Programming

プログラミング一般ねた。

OpenBSDの上でいろいろいじった痕跡のリスト。

Programming/Scheme/Chicken/udpmsg

Category of Programming
Category of Scheme
Category of Chicken

ここまできたら、やっぱりSchemeでudpmsgを書かないと。 これは今書いた。CheckenかわいいよChecken。

(use udp)

(define ipmsg-version      #x0001)
(define ipmsg-default-port #x0979)
(define ipmsg-sendmsg      #x0020)

(define (format-msg num host user cmd extra)
  (format "~a:~a:~a:~a:~a:~a" ipmsg-version num host user cmd extra))

(define (send-udpmsg host msg)
  (let ((sock (udp-open-socket)))
    (udp-bind! sock #f 0)
    (udp-connect! sock host 2425)
    (udp-send sock (format-msg (random 16777215) "myhost" "myname" ipmsg-sendmsg msg))
    (udp-close-socket sock)))

って、3つの中で一番読みやすいな。

Programming/Erlang/udpmsg

Category of Programming
Category of Erlang

せっかくだからErlang版も貼っとく。 じつはずっと昔に書いたコードだったりする。

-module(udpmsg).
-export([send/2]).

-include_lib("kernel/include/inet.hrl").

-define(IPMSG_VERSION,      16#0001).
-define(IPMSG_DEFAULT_PORT, 16#0979).
-define(IPMSG_SENDMSG,      16#020).

-define(DEFAULT_UDP_OPTS, [
                           {active, false},
%                          {broadcast, true},
                           {reuseaddr, true}
                          ]).

send_format(Num, Host, User, Cmd) ->
    lists:flatten(io_lib:format("~.10b:~.10b:~s:~s:~.10b:",   [?IPMSG_VERSION, Num, User, Host, Cmd])).
send_format(Num, Host, User, Cmd, Extra) ->
    lists:flatten(io_lib:format("~.10b:~.10b:~s:~s:~.10b:~s", [?IPMSG_VERSION, Num, User, Host, Cmd, Extra])).

send(Host, Msg) ->
    Num = erlang:phash(erlang:localtime(), 16777215),
    case gen_udp:open(0, ?DEFAULT_UDP_OPTS) of
        {ok, Socket} ->
            EntMsg = send_format(Num, "myhost", "myname", ?IPMSG_SENDMSG, Msg),
            gen_udp:send(Socket, Host, ?IPMSG_DEFAULT_PORT, EntMsg),
            gen_udp:close(Socket);
        Error ->
            Error
    end.

Programming/Onyx/udpmsg

Category of Programming

@quekさんがなにやらスタック型言語を作っていらっしゃるので、 ひさびさにスタック型脳を活性化させました。まる。

ipmsgにメッセージを送りつけるコード。 xipmsgのおまけに入っているudpmsgの機能のほんの一部を再現。

$ipmsg_version      16@0001 def
$ipmsg_default_port 16@0979 def
$ipmsg_sendmsg      16@020  def

$format_msg {
  $extra exch def $cmd exch def $host exch def $user exch def $num exch def
  ipmsg_version <$d 10> outputs `:' num <$d 10> outputs `:' user `:' host `:' cmd <$d 10> outputs `:' extra
  10 { cat } repeat
} def

$udpmsg {
  $msg exch def $host exch def
  $AF_INET $SOCK_DGRAM $udp socket
  dup host ipmsg_default_port connect
  dup msg send
  exch close
} def

realtime srand
`targethost' rand `myname' `myhost'  ipmsg_sendmsg `hello,world.' format_msg udpmsg

ってOnyxって知らない人が多いかも知れないけど、 threadやOOPが扱えるForth型言語。

   。
    〉
  ○ノ イヤッホォォ!
 <ヽ |
 i!i/, |i!ii ガタン
 ̄ ̄ ̄ ̄

これは流行らない。

Programmingに関するすべてのエントリ