メモ帳

やったこととかちまちまと書く 需要のない記事を生成している

Meteorでログインシステム構築

数ページのWebアプリケーションを書くことになったのでMeteorでやってみることにした。環境構築の説明してるサイトはいっぱいありそうなのでログインシステムを構築してみる。(ログインシステムの構築もたくさんあったけど・・・)
Meteorのバージョンは1.4.1.2
下準備

meteor add accounts-password

ソースコード

main.js(client)

import { Meteor } from 'meteor/meteor'
import { Accounts } from 'meteor/accounts-base'

Template.Register.events({
  'submit .enter': function(event) {
    event.preventDefault();
    var target = event.target;
    if(target.name.value && target.email.value && target.password.value) {
      Accounts.createUser({
        username: target.name.value,
        email: target.email.value,
        password: target.password.value
      },function(err){
        if(err) {
          console.log(err);
        } else {
          console.log("submit");
        }
      });
    }
  },
  'submit .login': function(event) {
    event.preventDefault();
    var target = event.target;
    if(target.name.value && target.password.value) {
      Meteor.loginWithPassword(target.name.value,target.password.value,function(err){
        if(err) {
          console.log(err);
        } else {
          console.log("login");
        } 
      });
    }
  }
});

main.html

<head>
    <title>Login_System</title>
</head>
<body>
    <h1>Hello World</h1>
    {{#if currentUser}}
        <button type="button" onclick="Meteor.logout();">ログアウト</button>
    {{else}}
        {{> Register}}
    {{/if}}
</body>

<template name="Register">
    <h1>登録</h1>
    <form class="enter">
        <p>ユーザ名:<input type="text" name="name"></p>
        <p>メールアドレス:<input type="text" name="email"></p>
        <p>パスワード:<input type="password" name="password"></p>
        <input type="submit" value="登録"><input type="reset" value="リセット">
    </form>
    <h1>ログイン</h1>
    <form class="login">
        <p>チーム名:<input type="text" name="name"></p>
        <p>パスワード:<input type="password" name="password"></p>
        <input type="submit" value="ログイン"><input type="reset" value="リセット">
    </form>
</template>

メールアドレスって書いてあるけど実質どんなテキストでも保存ができる。
Meteorの公式ドキュメントはかなり親切だと思った。



JVM言語で正規表現してみた

レポートにC言語以外のプログラミング言語における正規表現の扱い方を調べてC言語と比較せよって項目があったのでJVM言語でやってみた

C言語 (今回実装する機能*1 )

#include <stdio.h>
#include <regex.h>

int main(int argv, char* args[]) {
    char str[] = "C言語で正規表現";
    char regex[] = "正規表現";
    regex_t preg;
    if (regcomp(&preg,regex, REG_EXTENDED | REG_NEWLINE ) != 0) {
        printf("Error");
        return 1;
    }

    if(!(regexec(&preg, str,0,NULL,0) != 0)) {
        printf("Match: %s\n",str);
    } else {
        printf("No Match: %s\n",str);
    }

    regfree(&preg);
    return 0;
}
参考

qiita.com

Java

import java.util.regex.Pattern;
import java.util.regex.Matcher;

class Regex{
    public static void main(String args[]){
        String str = "Javaで正規表現";
        String regex = "正規表現";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(str);
        
        if(m.find()) {
            System.out.println("Match: " + str);
        } else {
            System.out.println("No Match: " + str);
        }
    }
}
matches,findの違いについて

codezine.jp

Scala

val s = "Scalaで正規表現"
val r = "正規表現".r

if(r.findFirstIn(s).nonEmpty)
    println("Match: " + s)
else 
    println("No Match: " + s)

Groovy

def str = "Groovyで正規表現"
if(str =~ "正規表現") {
    println str
}
参考

正規表現

Kotlin

fun main(arge: Array<String>) {
    val str = "Kotlinで正規表現"
    val regex = Regex("正規表現")
    if(regex.containsMatchIn(str))
        println("Match: " + str)
    else 
        println("No Match: " + str)
}
参考

qiita.com

Clojure

(def text "Clojureで正規表現")
(print (if (re-find #"正規表現" text) "Match: " "No Match: " ) text "\n")

(print (if (re-seq #"正規表現" text) "Match: " "No Match: " ) text "\n")

雑感

Kotlinを除き若い言語ほど正規表現を使うのが手軽になってきていると思った。(小並感)
正規表現は取っ付きづらいイメージがあったけど実際に使ってみるとそうでも無かった。パターンは書くのめんどくさいけど・・・
Groovyの

=~ 

は初めてみるやり方だったので感心した。Haskellとか他の言語にも実装されているらしいけどね。(正規表現を全く使わないので分からず)

*1:本当はしっかりパターンを記述するべきだろうけど・・・

Minecraft ModをKotlinで書いてみた

Gradleが使えるので簡単にMinecraftも動かせると思ったのでやってみた
kotlinlang.org

まだ考えて書けるレベルまでできてないので今回はこれで変換したコードを動かした
try.kotlinlang.org

対象のコード(初期のコードを変換させただけ、名前空間のところは削ったけど)

package com
import net.minecraft.init.Blocks
import net.minecraftforge.fml.common.Mod
import net.minecraftforge.fml.common.Mod.EventHandler
import net.minecraftforge.fml.common.event.FMLInitializationEvent

@Mod(modid = ExampleMod.MODID, version = ExampleMod.VERSION)
class ExampleMod {
  @EventHandler
  fun init(event:FMLInitializationEvent) {
    System.out.println("DIRT BLOCK >> " + Blocks.dirt.getUnlocalizedName())
  }
  companion object {
    const val MODID = "examplemod"
    const val VERSION = "1.0"
  }
}

Gradle
gist.github.com

英語サイト見るまでランタイムがないってことがわからずとても苦労した。
まだGradleの使い方が理解できてない・・・