2016年4月20日水曜日

Webサーバー&UI


import java.io.*;

import java.awt.*;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.awt.event.InputEvent;

import javax.swing.*;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.*;
import java.awt.Color;
import java.awt.BasicStroke;

public class CountReadPacket{
public static void main(String args[]) {

WindowTest windowTest=new WindowTest();
int viewcounter=0;
//windowTest.labelChange(viewcounter);
int i = 1, PORT = 8080;
ServerSocket server = null;
try {
server = new ServerSocket(PORT);
System.out.println("Web Server is listening on port "+ server.getLocalPort());

while (true) {
Socket client = server.accept();

ConnectionThread ct = new ConnectionThread(client, i,windowTest);
ct.start();
viewcounter++;
//windowTest.labelChange(viewcounter);
i++;
}
} catch (Exception e) {
System.out.println(e);
}
}

static class ConnectionThread extends Thread {
Socket client;
int counter;
WindowTest windowTest;

public ConnectionThread(Socket cl, int c,WindowTest _windowTest) {
client = cl;
counter = c;
windowTest=_windowTest;

}

public void run() {
try {
String destIP = client.getInetAddress().toString();
int destport = client.getPort();
System.out.println("Connection " + counter + " connected from "+ destIP + " with port " + destport + ".");
PrintStream outstream = new PrintStream(client.getOutputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));

String inline = reader.readLine();
String target = null;
while (reader.ready() && inline != null) {
if(target == null){
target = inline;
}
//System.out.println(inline);
inline = reader.readLine();
}
System.out.println(target);

String responseFile = "test.html";
File file = new File(responseFile);

sendfile(outstream, file);

String[] str1Ary = target.split(";",-1);
if (str1Ary.length > 3){
System.out.println(str1Ary[1]);
System.out.println(str1Ary[2]);
System.out.println(str1Ary[3]);
windowTest.labelChange(Double.parseDouble(str1Ary[1]),Double.parseDouble(str1Ary[2]),Double.parseDouble(str1Ary[3]));
}

outstream.println("HTTP/1.0 200 OK");
outstream.println("MIME_version:1.0");
outstream.println("Content_Type:text/html");
int len = (int) file.length();
outstream.println("Content_Length"+len);
outstream.println("");

outstream.flush();
outstream.close();
System.out.println("---------------------------------------------");
} catch (Exception e) {
// TODO: handle exception
}

return;
}
void sendfile(PrintStream outs, File file) {
try {
DataInputStream in = new DataInputStream(new FileInputStream(file));
int len = (int) file.length();
byte buf[] = new byte[len];
in.readFully(buf);
outs.write(buf, 0, len);
outs.flush();
in.close();
} catch (Exception e) {
System.out.println("Error sending file.");
System.exit(1);
}
}

}
}

class WindowTest{
String regA="";
Label label;//表示用の部品(ここではラベル)を宣言
ShapeTest1 app;
  //コンストラクタ
  WindowTest(){

    //Windowを作る
    JFrame frame;//Frame 型変数を宣言
    frame=new JFrame("Window Test");//Frame型変数に初期値をセット
    //frame.setSize(600, 600);//サイズを指定す
    //frame.setVisible(true);//可視化する

    //WIndowに表示する。
    /*label=new Label(regA);//表示用部品に初期値をセット
    label.setFont(new Font("MS ゴシック", Font.BOLD, 240));
    label.setPreferredSize(new Dimension(400,400));
    label.setAlignment(Label.CENTER);
    frame.add(label);*///表示用の部品をWindowに追加
   
    app = new ShapeTest1();
    frame.getContentPane().add(app);
   
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(10, 10, 300, 200);
    frame.setTitle("タイトル");
    frame.setVisible(true);
   
    regA = "hoge";
  }
  void labelChange(double _xg,double _yg,double _zg){
   //regA = String.valueOf(i);
   //label.setText(regA);
   app.setValue(_xg,_yg,_zg);
   app.repaint();
  }
}

class ShapeTest1 extends JPanel{
int count = 0;
double xg;
double yg;
double zg;

public void setValue(double _xg,double _yg,double _zg){
xg = _xg;
yg = _yg;
zg = _zg;
}

  public void paintComponent(Graphics g){
   count++;
    Graphics2D g2 = (Graphics2D)g;
   
    Dimension size = getSize();
        int d = Math.min(size.width, size.height);
        int x = (size.width - d*3)/2;
        int y = (size.height - d*3)/2;

        // 円を描く(色は前景色にすでにセットされている)
       
        g.setColor(Color.white);
        g.fillOval(x, y, d*3, d*3);
        g.setColor(Color.black);

    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_ON);
    g2.draw(new Line2D.Double(30.0, 10.0, 30.0+10.0*xg, 10.0-10.0*yg));

    g2.setPaint(Color.PINK);
    BasicStroke wideStroke = new BasicStroke(4.0f);
    g2.setStroke(wideStroke);
    g2.draw(new Line2D.Double(30.0d, 120.0d, 250.0d, 70.0d));
  }
}

2016年2月13日土曜日

Scale Aviation 2016年 03 月号 [雑誌] | 本 | Amazon.co.jp

2016年2月4日木曜日

モデルグラフィックス 2016年 04 月号 [雑誌] | 本 | Amazon.co.jp

2016年1月30日土曜日

Amazon.co.jp: リバーライト 極ROOTS 厚板フライパン 24cm: ホーム&キッチン

2016年1月15日金曜日

javascriptを試してみる

chrome拡張機能開発ちっぷす11「開いているタブの情報を取得する」

chrome.tabs.getSelected(null, function(tb) {
});

chrome拡張機能開発ちっぷす10「backgroundファイルと、他のjsファイルでお話しする」

○backgroundファイル:ほかのファイルから話しかけられるのを待つ
chrome.extension.onMessage.addListener(
function(request, sender, sendResponse) {
    if (request.sksmode == "Hello") {
            sendResponse({
                output: "Hello"
            });
    }
});
○ほかのファイル:backgroundファイルに話しかけ、返事を聞く
chrome.extension.sendMessage({
   sksmode: "Hello"
}, function(response) {
alert(response.output);
}
);

chrome拡張機能開発ちっぷす9「アイコンをクリックしたときのbackgroundファイルのイベント」

chrome.browserAction.onClicked.addListener(
function(connectionInfo) {

);

chrome拡張機能開発ちっぷす8「指定のアドレスを新しいタブで開く」

chrome.tabs.create({
url: "http://www.google.com/"
selected: true
}, function(tb) {});

chrome拡張機能開発ちっぷす7「js内でのプログラムの分岐」

var v_loc = document.location.href;
if(v_loc.indexOf("https://www.blogger.com/") > -1){
}

chrome拡張機能開発ちっぷす6「content_scriptsの定義」

manifest.jsonにて
"content_scripts": [ {
      "js": [ "jquery-1.7.2.min.js", "login.js" ],
      "matches": [ "https://www.google.com/*", "https://accounts.google.com/*" ,"https://www.blogger.com/*381303978530012776*"],
      "run_at": "document_end"
    }]
・matchesの書き方に癖がある。詳細不明
・複数のcontent_scriptsは設定できなかった。。。⇒一つのjsファイルの中で分岐

chrome拡張機能開発ちっぷす5「content_scriptsの役割・動き」

・指定のアドレスの裏にいるときに「だけ」動作する
・複数のスクリプトの指定の仕方は不明

chrome拡張機能開発ちっぷす4「background.jsの定義」

manifest.jsonにて
"background": {
      "scripts": [ "background.js" ]
}

chrome拡張機能開発ちっぷす3「background.jsの役割・動き」

・chromeが起動したときからずっと動いている
・どんなページの後ろでも動作してハックできる
・名前は買えてもOK

chrome拡張機能開発ちっぷす2「必要なファイルは・・・」

○icon19.png:pngじゃないといけない。クロムのアドレスの脇にでるアイコンになる
○manifest.json:プロジェクトの設定が記載されている

chrome拡張機能開発ちっぷす1「既存の拡張機能のソースコードを見る」

chrome-extension://cbgngpehipfmfmpjmhonhacgbkjpdidp/options.html
で、既存の拡張機能のソースコードが見れます
cbgngpehipfmfmpjmhonhacgbkjpdidpは
chrome://extensions/で閲覧できる各拡張機能のID

2016年1月14日木曜日

購入候補

エスノグラフィー入門 <現場>を質的研究する | 小田博志 | 本 | Amazon.co.jp

購入鍋候補④

Amazon.co.jp: ジオ ポトフ鍋 20cm GEO-20PF)「オブジェ スチームプレート」付き Amazon.co.jp特別セット: ホーム&キッチン

購入鍋候補③

Amazon.co.jp: 【turk】 ターク クラシックフライパン 2号 20cm ドイツ製 並行輸入品: ホーム&キッチン

購入鍋候補②

Amazon.co.jp: ジオ 片手鍋16cm GEO-16N: ホーム&キッチン

購入候補:563ピース

Amazon.co.jp | レゴ クラシック アイデアパーツ<エクストラセット> 10702 | おもちゃ 通販

購入希望

Amazon | パイロット フリクションボール 多色タイプ専用替芯 ブラック 0.5mm 3本入 1セット LFBTRF30EF3B | 詰め替えインク

2016年1月6日水曜日

アマゾンギフト券!

アマゾンの商品リンクを掲載できるよーになりましたー。
これから、どんどん紹介していきたいと思います♪
先だって、ギフト券などいかがでしょうか。

食料の世界地図 第2版 単行本 – 2009/8/22

農業のお勉強に欲しい本