MySQLレプリケーションの動作確認と不具合時の復旧方法
【動作不具合時の確認方法】
スレーブサーバで、
mysql> show slave status\G; ・ ・ Read_Master_Log_Pos: 424597747 ・ Slave_IO_Running: Yes Slave_SQL_Running: Yes
〜RunningがNoになっていたらレプリケーションが止まっています。
マスターサーバで、
mysql> show master status\G; File: mysql-bin.000108 Position: 424597871
Positionの値とスレーブサーバのRead_Master_Log_Posの値が異なっていると×です。
【復旧方法】
スレーブサーバで、
mysql> stop slave; mysql> show slave status \G; ・ ・ Slave_IO_Running: No Slave_SQL_Running: No
となっていることを確認し、
mysql> reset slave;
を実行。
それからスレーブサーバで、
mysql> CHANGE MASTER TO -> MASTER_HOST='ホスト名', -> MASTER_USER='マスターユーザ名', -> MASTER_PASSWORD='マスターパスワード', -> MASTER_LOG_FILE='mysql-bin.000108', //マスターサーバの情報 -> MASTER_LOG_POS=424597871; //マスターサーバの情報 mysql> slave start; mysql> show slave status \G; ・ ・ Read_Master_Log_Pos:424597871 ・ Slave_IO_Running: Yes Slave_SQL_Running: Yes
となっていること確認
HTML5とは
勉強会に参加したので、簡単にメモ
【全般】
・広義の意味ではmarkup,css,js,websocketなどフレームワーク全体を指す
・現状ブラウザの対応状況としては、以下のような感じ
safari > chrome > firefox > opera >>>> ie
・xhtmlは凍結し、html5移行
・基本的に、markupはシンプルに、定型的な記述で省略可能なものは省略可に
【どんなことができるのか?】
・Flashのように文字がくるくる回るような動きが、cssのみで記述できる
・Flashにしか見えない、画像内で落ち葉が落ちてくるような動きが、cssと少しのjsだけで記述できる
・formタグの設定だけで、日付入力部分にカレンダーを出したり、URL/e-mail形式などのバリデーションが可能
【関連技術として】
・javascript canvas (描画ツール)
・web sockets
httpの拡張プロトコル。サーバからブラウザにデータを送れる、プッシュ型の通信が可能。 cometのような技術。※今後はcomet→web socketsに移行していくのではと予想される
・sqliteが組み込まれ、DB接続が可能となる
入力された行列の転置行列を求めよ
プログラミングスレまとめ in VIPの練習問題を解いてみた
練習問題 - プログラミングスレまとめ in VIP
import java.util.*; class Tenchi { private static int[][] getGyouretu() { Scanner scan = new Scanner(System.in); System.out.println("何行何列の行列を入力しますか?"); System.out.println("行:"); int gyou = scan.nextInt(); System.out.println("列:"); int retu = scan.nextInt(); // 返却する行列 int[][] gyouretu = new int[gyou][retu]; System.out.println("行列を入力して下さい。数字は,で区切って下さい"); // 1行づつ作成 for (int i = 0; i < gyou; i++) { // 入力列数が正しいか判定 boolean retusu_flag; do { retusu_flag = false; String input = scan.next(); String[] input_arr = input.split(","); if (retu != input_arr.length) { retusu_flag = true; System.out.println("列数が不正です。再度入力して下さい。"); } else { // string型をint型にキャストしてgyouretuに格納 for (int j = 0; j < input_arr.length; j++) { gyouretu[i][j] = Integer.parseInt(input_arr[j]); } } } while (retusu_flag); } return gyouretu; } public static void main(String[] args) { //入力行列 int[][] gyouretu = getGyouretu(); /* // test出力 System.out.println("\n入力行列は"); for (int[] hairetu : gyouretu) { for (int i : hairetu) { System.out.print(i); System.out.print(" "); } System.out.println(""); } */ //転置行列作成 int[][] tenchi = new int[gyouretu[0].length][gyouretu.length]; for (int j = 0; j < gyouretu[0].length; j++) { for (int i = 0; i < gyouretu.length; i++) { tenchi[j][i] = gyouretu[i][j]; } } System.out.println("\nこの転置行列は"); for (int[] hairetu : tenchi) { for (int i : hairetu) { System.out.print(i); System.out.print(" "); } System.out.println(""); } } }
妙に長くなってしまいました。結構面白かったです。
複雑系―科学革命の震源地・サンタフェ研究所の天才たち ★★★★
以前から気になっていたので読んでみました。内容は以下のキーワードから想像して下さい。
・収束逓増
・自己組織化
・人工生命
・創発
・進化
・相転移
って良く分かりませんよね(笑)
ただ実際にある意味非常に分かりにくい本です。経済学、物理学、生物学、コンピュータサイエンスなど既存の学問を、複雑性という観点から、切り込んでいく内容となっています。
いわゆる科学ドキュメンタリーの構成をとっており、ノーベル賞クラスの経済学者・物理学者から、ちょっと変わった大学院生まで複雑系に惹かれた優秀な研究者が、サンタフェ研究所に集い、互いに意見を交わし、どんどんアイデアを発展させていくといったものです。ただ、後半は似たような考えや概念が多くなり、ちょっと冗長な感じがします。そして専門的な話や観念的な話が多くなって難しい。。全体としてやや長かったので、後半1/3ぐらい削った方が良かったかなと思います。
とはいえ、前半はサイモン・シンの「フェルマーの最終定理」を思わす面白さです。登場する学者達は、秩序とカオスの中間地点(一見ランダムなようで実はある程度規則性がある)を「カオスの淵」と呼び、実世界はまさにカオスの淵にあると主張しています。
株価・生物の進化・生命の誕生・人間の心理などは均衡状態にあるきれいなものではなく、ダイナミックで単純な数式では表せないものであり、そもそもこの宇宙がそのように出来ている、と彼らは睨んでいます。後半は、少し哲学的な内容になっていきます。脱構造主義、エコロジーなどが好きな方もきっと楽しめると思います。
新潮社
売り上げランキング: 91759
Caesar暗号を解読するプログラムを作り,暗号を解読してください
プログラミングスレまとめ in VIPの練習問題を解いてみた
練習問題 - プログラミングスレまとめ in VIP
import java.util.*; class Caesar { private static final String ANGO = "qdq-gi.q-a ziatmxxitmdqibtqi-ustbi ri.qmoqrcxi.qbubu zir -ibtqi-qp-qaai ripmymsqkir -ibtqi-qy dmxi ri.cnxuoi rruoumxakir -ibtqiqzmobyqzbkii-q.qmxi -imyqzpyqzbi rixmeaki -puzmzoqai -i-qscxmbu zaimzpir -i btq-iymbbq-a;iz -iatmxximzgi.q-a zinqiuzimzgiemgipuao-uyuzmbqpimsmuzabir -ia. za -uzsiacotiimi.qbubu zj"; private static final String DICTIONARY = "abcdefghijklmnopqrstuvwxyz .,-"; private static final String SEARCH = "person"; private static String shiftChar(String ori_str, int index) { String new_str = ""; for (int i = 0; i < ori_str.length(); i++) { char c = ori_str.charAt(i); int match_index = DICTIONARY.indexOf(c); //ori_strをDICTIONARYを使いindex分だけシフトさせる(-の次はaになる) if (0 <= match_index) c = DICTIONARY.charAt((match_index + index) % DICTIONARY.length()); new_str += c; } return new_str; } public static void main(String[] args) { for (int i = 0; i < DICTIONARY.length(); i++) { String shift_char = shiftChar(ANGO, i); if (0 < shift_char.indexOf(SEARCH)) { System.out.println(shift_char + "\n*ずらした文字は " + i); break; } } } }
これは、結構時間がかかってしまいました。かなり面白かったです。
フィボナッチ数列の第n項を求めるプログラムを書いて下さい
プログラミングスレまとめ in VIPの練習問題を解いてみた
練習問題 - プログラミングスレまとめ in VIP
import java.util.*; class Fibo { //リストを与えるとその最後の2つの値を足したものをリストの最後に加えて返却する private static List<Integer> plus(List<Integer> ori) { int ori_size = ori.size(); ori.add(ori.get(ori_size - 1) + ori.get(ori_size - 2)); return ori; } public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); System.out.println(""); List<Integer> fibo = new ArrayList<Integer>(n); fibo.add(1); fibo.add(1); for (int i = 0; i < n-2; i++) { fibo = plus(fibo); } for (int i : fibo) { System.out.println(i); } } }
ソースコードはたまに公開するべきだと思う今日この頃です。横着な性格なので、誰にも見られないと思うと、すぐ汚いコードを書いてしまいます。それが癖になるのが怖いのでこのように公開しています。
数当てゲーム(適当な数を入力し、その桁と数字を予測していくゲーム)
これはn桁の数を探すゲームです。適当な数を入れると桁も数字もあっていれば「Hit」としその個数が、数字はあっているが桁が異なっていれば「Blow」としてその個数が出力されます。それを繰り返すことで答えを探すことができます。このゲームを作成しなさい。答えの数は乱数を使って毎回別の答えを用意しましょう。
練習問題 - プログラミングスレまとめ in VIP
//答え import java.util.*; class HitBlow { //正解の数をランダムで作成する private static char[] getSeikai() { Random rnd = new Random(); char[] seikai_char = new char[7]; boolean zoro_flag = true; //作成された数字の中にぞろ目があればtrue while (zoro_flag) { zoro_flag = false; String seikai = Integer.toString(rnd.nextInt(10000)); //System.out.println(seikai); seikai_char = seikai.toCharArray(); for (int i=0; i < seikai_char.length; i++) { for (int j=i+1; j < seikai_char.length; j++) { if (seikai_char[i] == seikai_char[j]) zoro_flag = true; } } } return seikai_char; } public static void main(String[] args) { char[] seikai_char = getSeikai(); while(true) { System.out.println("ぞろ目がない数を入力して下さい。"); Scanner scan = new Scanner(System.in); String input = scan.next(); char[] input_char = input.toCharArray(); // hitを探す //正解とインプットの短い方の長さまででhitを探す int search_length = input_char.length; if (search_length > seikai_char.length) search_length = seikai_char.length; for (int i = 0; i < search_length; i++) { if (input_char[i] == seikai_char[i]) { input_char[i] = 'h'; } } // hit以外からblowを探す for (int i = 0; i < input_char.length; i++) { if (input_char[i] != 'h') { for (int j = 0; j < seikai_char.length; j++) { if (input_char[i] == seikai_char[j]) { input_char[i] = 'b'; } } } } int hit_count = 0; int blow_count = 0; for (char c : input_char) { if (c == 'h') hit_count++; if (c == 'b') blow_count++; } System.out.println("hit: " + hit_count); System.out.println("blow: " + blow_count); if (hit_count == seikai_char.length) { System.out.println("正解です!"); break; } } } }
これは面白かったです。数当て難しいですね。おかげで動作確認に時間がかかりました。