Goを使いはじめました。

 

仕事がひと段落しました。

 

案の定放置してしまいました!

 

PHP + Laravelの案件は1段落し、最近ではGoの案件に少しずつ関わっています。

Packageも少しづつ覚えていかねければならないので大変です・・・。

 

 

最近になって初めて静的型付けの正しい意味を知りました。

 

 

業務 + 本 + Udemyの講座でちまちまやってきます。

 

※ 色々と端折っているので動かないです


func
main() {
var addr = flag.String("addr", ":8080", "アプリケーションのアドレス")
flag.Parse() // フラグを解釈します
r := newRoom()
r.tracer = trace.New(os.Stdout)
http.Handle("/", &templateHandler{filename: "chat.html"})
http.Handle("/room", r)

go r.run()

log.Println("Webサーバーを開始します。ポート: ", *addr)
if err := http.ListenAndServe(*addr, nil); err != nil {
log.Fatal("ListenAndServe:", err)
}
}

http.Handle, http.HandleFuncに第1引数のpathで第2引数の処理をするという感じで書きます。

ルーティングみたいな感じですね

 

最終的にはhttp.ListenAndServeにhttp.HandleFuncと、

http.HandleFuncに変換されたhttp.Handleが登録されるみたいです。

 

Goを使いこなせるようになる日は果たしてくるんでしょうかね・・・。

 

まぁPHP + Laravelの時も案件やりながら、今振り返ると(自分的には)驚くぐらい成長しているので、気長にやっていきます。

 

Goの次はScalaがやりたいですね。ApachSparkを使ってみたいです。

 

実はもうUdemyの講座は購入済みなのですが、全部英語なので、終わるのはいつになることやら・・・。

 

Laravel でVue.jsを使ってみたかった

こんにちは

 

突然ですがLaravelでVue.jsを使ってみたいのです

javascriptフレームワークは初めての挑戦です

 

Vue.jsとは

Vue (発音は / v j u ː / 、 view と同様)はユーザーインターフェイスを構築するためのプログレッシブフレームワークです。他の一枚板(モノリシック: monolithic)なフレームワークとは異なり、Vue は少しずつ適用していけるように設計されています。中核となるライブラリは view 層だけに焦点を当てています。そのため、使い始めるのも、他のライブラリや既存のプロジェクトに統合するのも、とても簡単です。また、モダンなツールサポートライブラリと併用することで、洗練されたシングルページアプリケーションの開発も可能です。

 

jp.vuejs.org

 

さっそくnpm installを実行しますがエラーになってしましました

 

いつもならここでだいたい諦めてしまうんですが、

今回はCDNで読み込んでやってみます

 

参考:

scrimba.com

 

CDN 

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

 

main.blade.php

<div class="container">
<div id="vue_field">
<h3>@{{ message }}</h3>
<div id="response_view_field"></div>
<p v-if="seen"><b>click button!</b></p>
<input type="text" id="text" value="" name="text"><br>
<button type="button" id="button">Submit</button>
</div>
</div>
<hr>
<script type="text/javascript src="/js/index.js"></script>
<script>
(function(){
$('#button').click(function(){
const text = document.getElementById("text").value;
if(text !== ""){
$.ajax({
type: "POST",
url: "{{ url('/post') }}",
data: {text: text},
dataType: 'text',
timeout: 10000,
success: function(response){
app.seen = false;
$('#response_view_field').html(response).css({
"width": "500px",
"height": "40px",
});
}
});
}else{
alert("入力は必須です");
}
});

$('#text').change(function(){
let p = document.getElementById('response_view_field').innerHTML;
if(!p){
app.seen = true;
}
});

</script>

 

index.js

const app = new Vue({
el: '#vue_field',
data: {
message: "Hello Vue!!!",
seen: false,
},
});

 

Controller

/**
* @param Request $request
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function returnViewFile(Request $request)
{
$results = "入力されたのは{$request->text}です";
return view('responseView', ['results' => $results]);
}

 

responseView.blade.php

@if(isset($results))
<p>{{ $results }}</p>
@endif

 

 

f:id:blueberrydaisuki:20190112161516p:plain

テキストを入力してカーソルがボックスら外れると

app.seen = true;

となり、pタグが表示されます

<p v-if="seen"><b>click button!</b></p>

 

f:id:blueberrydaisuki:20190112161039p:plain

ボタンを押すと非同期通信がされ、

通信が成功したらコールバック関数で

app.seen = false;

となり、

<p v-if="seen"><b>click button!</b></p>

は表示されなくなります

 

そして{{ $results }}にControllerで定義した$results

入力されたのはhelloです

が入ったresponseView.blade.php

<p>入力されたのはhelloです</p>

$('#response_view_field').html(response).css({
"width": "500px",
"height": "40px",
});

<div id="response_view_field"></div>

に表示したら終了です

<div id="response_view_field"><p>入力されたのはhelloです</p></div>

 

f:id:blueberrydaisuki:20190112171010p:plain


 

とりあえずLaravelでVueを使ってみたくて、

しょうもないものを作ってしまいましたが私は満足です

 

Laravel ajax通信がしたい

 

ajax通信がしたいのです

長いやつを書いてみたいのです

 

blade


@extends(
'layout.master')
@section('content')
<div class="btn-group-lg">
<button type="button" id="button1"> 1 </button>
<button type="button" id="button2"> 2 </button>
</div>
@endsection


<html
lang="ja">
<head>
<meta charset="utf-8">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>hobby</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js">
</script>
<script type="text/javascript" src="/js/ajax.js"></script>
<link rel="stylesheet"href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css">
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
@yield('content')
</body>
</html>

 

ajax.js


(function(){
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});

const pi = 3.14;

$('#button1').click(function(){
$.post("{{ url('/post/ajax') }}", {pi: pi},
function(response){
alert("戻り値は" + response + "です");
});
});

$('#button2').click(function(){
$.ajax({
type: "POST",
url: "{{ url('/post/ajax') }}",
data: {pi: pi},
dataType: 'json',
timeout: 10000,
success: function(response){
alert("戻り値は" + response + "です");
}
});
});
})();

 

Controller

use Illuminate\Http\Request;

/**
* 3.14 × 1~100の間の乱数を返す
* @param Request $request
* @return float|int
*/
public function returnRandomNumber(Request $request)
{
return $request->pi * mt_rand(1, 100);
}

 

前々から思っていました

ajaxという響きがかっこいいです

 

javascriptフレームワークもそのうち挑戦してみたいです

Laravel validation 任意の記号をはじきたい

 

バリデーションで記号をはじきたいとき

 

本当はホワイトリストを指定できればいいのですが、

平仮名、片仮名、漢字を許可したいので、

 

はじきたい記号と空白を指定しました


$validationRules
= [
'pram' => ['required', 'regex:/^[^!"#$%&\'()\.,\/:;<=>?@\[\\\]^_`{|}~\s]+$/'],
];

うろ覚えでちゃんと動作確認してません・・・ 

 

記号の指定はこちらを参考にしました ↓ ↓ ↓

 

参考ページの記号否定をコピペしてregexに入れたものです

これはどうも動かないようです


$validationRules
= [
'pram' => ["regex:/[^!\"#$%&'()\*\+\-\.,\/:;<=>?@\[\\\]^_`{|}~]+/"],
];

 

行頭^と行末$(^[・・・・・]+$ )をつけないと、

許可する文字が含まれる時にすり抜けてしまいます

 

任意入力だけど、記号をはじきたいという場合は、

+から*に変えればいいかと思いきや普通に引っかかってしまいました

$validationRules = [
'pram' => ["regex:/[^!\"#$%&'()\*\+\-\.,\/:;<=>?@\[\\\]^_`{|}~]*/"],
];

 

とりあえずnullableにしておきました

これで引っかからずにすみます

$validationRules = [
'pram' => ['nullable', "regex:/[^!\"#$%&'()\*\+\-\.,\/:;<=>?@\[\\\]^_`{|}~]*/"],
];

 

ちゃんと動作確認したら、たぶん編集すると思います

 

ではでは

 

Laravel return viewのメモ

return viewするやり方

viewを返す

<?php

// ヘルパ
public function returnView()
{
    return view("viewFile");
}

// ファサード
public function returnView()
{
    return \View::make("viewFile");
}

viewに値を渡す

<?php

public function returnView($variable)
{
    return view("viewFile", compact($variable));
}

public function returnView($variable)
{
    return view("viewFile")->with('variable', $variable);
}

public function returnView($variable)
{
    return view("viewFile", ['variable' => $variable]);
}

viewに複数の値を渡す

<?php

public function returnView($variable1, $variable2)
{
    return view("viewFile", compact('variable1', 'variable2'));
}

public function returnView($variable1, $variable2)
{
    return view("viewFile")->with(["variable1" => $variable1,
                                   "variable2" => $variable2,
    ]);
}

public function returnView($variable1, $variable2)
{
    return view("viewFile", ["variable1" => $variable1,
                             "variable2" => $variable2,
    ]);
}

いろんなやり方がありますね

ではでは

初めてのはてなブログ

 

タイトルについて

こういうタイトルの記事を最初に書いているブログって、

大体1〜5記事ぐらいで途切れている印象なんですが、

気のせいでしょうか

 

私も何度かやってます

 

 

 

はてなに対する勘違い

 

はてなダイアリーが終了するようですが、

私ははてなブログが終了するものだと勘違いしておりました

 

終わっちゃうんじゃはじめてもしょうがないなーと思っていたのですが、

勘違いに気づけたのではじめます

 

  

記事内容について

見出しってとても便利ですね

話をぶった切っても違和感があまりないというか

文脈を考えなくていいのが楽です

 

ブログには主にプログラミングについて書いていくつもりです

qiitaとかに投稿するのはなんとなく気が乗らないのです

 

乗らないのですが、、、

 

学んだことをアウトプットする場が欲しかったのです

他には普通にプログラミングに関係ないことも書こうと思います

 

 ではでは