node.jsを勉強中

このブログは、プログラマになりたい人間のクソース、ウンコード公開ブログです。ただプログラムが好きだからやってます。

技術記事というよりは自分がやったことの備忘録的なものです。

意味のわからないやり方や、古いやり方も多いと思いますので、参考にはしないでください。


Node.jsについてあまり触ったことがない状態ですが、 ドットインストール様のNode.js入門があるので、それをみて手を動かしていきます!₍₍ ◝(´•⌔•`)◟ ⁾⁾ 動画時代が2013年ぐらいのものなのですが、基本的な考え方は変わらないと思うので、まずはこの動画で勉強させていただきます。 f:id:okumuraa1:20171228181750p:plain


とりあえずサーバー作ってブラウザから見れるようになった! f:id:okumuraa1:20171228183536g:plain


settings.jsを作って、全く同じ動作にするまで、できた f:id:okumuraa1:20171228185449g:plain


req.urlで現在のurlが取れる! f:id:okumuraa1:20171228190841g:plain


html読み込み成功! f:id:okumuraa1:20171228191643g:plain


ejsこれでいいのか? f:id:okumuraa1:20171228194256p:plain


post送信も無事できましたと f:id:okumuraa1:20171228210151g:plain


最後にmongodbと接続しましたと。 f:id:okumuraa1:20171229015322g:plain


感想

mongodbをもっと触って見たいなと思いました。

せっかくサーバーの設定をjavascriptで書けるので、その辺をもっと勉強したいなと思いました。

今時のjavascriptを勉強させていただく

このブログは、プログラマになりたい人間のクソース、ウンコード公開ブログです。ただプログラムが好きだからやってます。

技術記事というよりは自分がやったことの備忘録的なものです。

意味のわからないやり方や、古いやり方も多いと思いますので、参考にはしないでください。


ありがたく勉強させていただきます。

f:id:okumuraa1:20171226201322p:plain


とりあえずparcelでjsの環境だけ作っておく

npm init -y
npm i parcel-bundler --save-dev
touch index.html && touch index.js

index.html

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>js2018</title>
</head>
<body>
    <script src=index.js></script>
</body>
</html>

index.js

document.write('a')

package.json

{
  "name": "05_2018",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "parcel index.html"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "parcel-bundler": "^1.3.1"
  }
}
npm start

f:id:okumuraa1:20171226203410p:plain

これで最近のesでも動くのかな?


なるほど、.babelrcも新しい、古いの見分けかたがあるのか とりあえず今回はこれでいいや

{
  "presets": ["env"]
}

let constは知ってるから飛ばす


変数のスコープがやっぱり違うんだよな

f:id:okumuraa1:20171226204948g:plain


変数展開はphpでも似たような書き方だし、まあ、わかる

f:id:okumuraa1:20171226210642p:plain


オブジェクトのコピー

できた、かな?

const srcObj = {
    agree: ()=>{
        return 'Hello';
    }
};

const destObj = {};
Object.assign(destObj, srcObj);
console.log(destObj.agree());

f:id:okumuraa1:20171226215319p:plain


クラス宣言

reactとかもコンポーネントがクラス単位っぽいからぜひ覚えたいですね

class SmallAnimal {
    constructor() {
        this.animalType = "ポメラニアン";
    }

    say() {
        console.log(this.animalType);
    }
}

(new SmallAnimal().say());

f:id:okumuraa1:20171226220943p:plain

まあ、こんな感じで、続きはまた今度やりますか

ブックマークレットを初めて作って見た

このブログは、プログラマになりたい人間のクソース、ウンコード公開ブログです。ただプログラムが好きだからやってます。

技術記事というよりは自分がやったことの備忘録的なものです。

意味のわからないやり方や、古いやり方も多いと思いますので、参考にはしないでください。


ブックマークレットでどういうものが作れるのかとりあえず見て見た f:id:okumuraa1:20171223131920p:plain

検索やSEOSNS連携やらいろいろできるのか、


とりあえず入門サイト見て、Hello Worldして見た f:id:okumuraa1:20171223134029g:plain


普通にchromeの機能で同じことできた記憶あるけど、自分で作ったということが大事なんで、 選択部分をgoogle翻訳するブックマークレットを作成

javascript:var%20d=document;var%20tx=d.selection?d.selection.createRange().text:d.getSelection();var%20subw=window.open('https://translate.google.com/?hl=ja#en/ja/'+tx).document;

できた!覚えたら便利でしょうなあ₍₍ ◝(´•⌔•`)◟ ⁾⁾ f:id:okumuraa1:20171223140054g:plain

PgAdmin4をインストールして見た

このブログは、プログラマになりたい人間のクソース、ウンコード公開ブログです。ただプログラムが好きだからやってます。

技術記事というよりは自分がやったことの備忘録的なものです。

意味のわからないやり方や、古いやり方も多いと思いますので、参考にはしないでください。

PgAdmin4をインストールして見た

3しかインストールしてなかったので4をインストールします f:id:okumuraa1:20171216200903p:plain

f:id:okumuraa1:20171216201424p:plain なんかこれアプリケーションの中に手動でコピーしないとダメなのかな?

f:id:okumuraa1:20171216201822p:plain とりあえず開いた、接続設定はどれだ?

f:id:okumuraa1:20171216202053p:plain pgadmin3の設定をそのまま記入

f:id:okumuraa1:20171216202240p:plain 無事接続した、やったね!

MySQLでデッドロック

クエリの実行順番変えれば解決するそうですが、自分は知らないとハマるだろうなと思い、どういう動きかだけ試させていただきました。

試すテーブル

CREATE TABLE `tests3` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `c1` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

INSERT INTO tests3 VALUES(null,'111'),(null,'222');

手順
①START TRANSACTION

②START TRANSACTION

①update tests3 set c1 = 'aaa' where id =1

②update tests3 set c1 = 'bbb' where id =2

①update tests3 set c1 = 'ccc' where id =2

f:id:okumuraa1:20171214230222g:plain

デッドロックしました またひとつ勉強になりました、これでいざという時にはまらんですむぞ

SQLのLEFT JOINで初心者の時に気をつけておいたほうがいいこと

sqlのleft joinの動きをあまり理解していない時に間違った結合してしまいがちでしたので、その時に解決した方法です。

MySQL使ってます。 以下のテーブルでみます。

CREATE TABLE `tiku` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `taisyo_flg` int DEFAULT 0 NOT NULL,
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8mb4;

insert into tiku values
(null,'北海道',1),
(null,'関東',1),
(null,'関西',0),
(null,'近畿',1),
(null,'九州',0);

CREATE TABLE `customer` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `tiku_id` int unsigned NOT NULL,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8mb4;

insert into customer values
(null,1,'田中'),
(null,1,'佐藤'),
(null,1,'佐々木'),
(null,2,'鈴木'),
(null,2,'村田'),
(null,3,'木村'),
(null,4,'前田'),
(null,5,'吉田'),
(null,5,'田村')

まず普通に顧客テーブル(customer)に、地区テーブル(tiku)を外部結合して、顧客に対する地区の情報を見る

f:id:okumuraa1:20171210185443p:plain


それに対して、顧客名は全て出力するが、 地区名は、taisyo_flgが1のものについては、地区名を表示し、 taisyo_flgが0のものについてはNULLで出力したい場合があるとする。


select *
from customer
left join tiku
on customer.tiku_id=tiku.id
where tiku.taisyo_flg = 1

上のようにwhereで絞る方法では、当然、taisyo_flgが1のものだけが選ばれてしまい、 顧客名を全て出力するという条件を満たせません

f:id:okumuraa1:20171210190104p:plain


とりあえず私の中では2つ方法があるかと思いました。

1. left joinのジョインキーの部分でやる

select *
from customer
left join tiku
on customer.tiku_id=tiku.id
and tiku.taisyo_flg = 1
order by customer.id

f:id:okumuraa1:20171210190520p:plain

ジョインキーはandで複数指定できるので、 andでtiku.taisyo_flg=1とすれば、顧客名を全て出しつつ、taissyo_flgが1のものだけ地区名を出す動きになってくれるようです。

2. サブクエリにする

select *
from customer
left join (
    select *
    from tiku
    where taisyo_flg = 1
) tiku
on customer.tiku_id=tiku.id
order by customer.id

f:id:okumuraa1:20171210190828p:plain

個人的には、こっちのやり方のほうが見た目どういう動きかわかりやすいと思います。 サブクエリでwhere taisyo_flg = 1と絞っているので、そこに外部結合してもtaisyo_flgが0のものは持って来ようがないという感じで。

SQLをちょっと勉強したという時は、この辺の動作がわかりにくかったのを思い出して書かせていただきました。 最後まで読んでいただきありがとうございました。