Nativescript Found peer TypeScript 2.2.2 Cannot find module ‘@angular/upgrade/static’.

Nativescriptの開発を進めていたら、タイトルのエラーが出てきました

状況としてはAndroidのplatformを削除してもう一度生成しようとしたところエラーに見舞われた、という形です

結論としては app/tns_modules を削除することで解決することができます

※なぜtns_modulesが作られたかは調べておりませんので、もし調べてわかった方がいらっしゃいましたら、コメントいただけると幸いです

参考にした記事

multiple errors when building for android and ios #916

golang始めました!

最近新しいこと始めて無いなーと思ってなんとなくでgolangを選んでみました

goといえば、並列処理だったりC系言語の代替言語などと謳われていて
以前から興味はあったんですけど、時間の関係でなかなか手が出せずにいました::

とりあえず、今日インストールをしてみましたが超簡単でした!
まずはこちらでインストール
Go のダウンロードページ
以下のページに飛ぶのでどれかを選択(私は3つ目にしました)

インストールが完了したら bash_profileにこちらを追加

export GOPATH="$HOME/go"
export PATH="$PATH:$GOPATH/bin"

その後ディレクトリとファイルを作成してコードを加えます

$ mkdir go
$ touch hello.go
package main

import "fmt"

func main(){
	fmt.Printf("hello world!!!!")
}

実行!

$ go run go/hello.go
 hello world!!!!

できました!

パス設定なども問題なくびっくりするくらい簡単にできたので、ちょこっと時間を作れば環境はすぐにできます

今後はechoという軽量フレームワークを試していこうかなと思ってるんで、またシェアします〜

参考にした記事

golang.jp

Nativescript iosだと更新されない時の対処方法

私の使っている携帯はAndroidなので、Nativescriptで開発している時もついついAndroidが先で
iosは後になってしまいます

それで今日久しぶりにiosでrunしてみたら昔のバージョンのままで思うような動きを見せてくれませんでした

とりあえず、platformを以下の2通りの方法のどちらかで対処できます

# platformを更新することで最新の状態のコードを適用させる
$  tns platform update ios 

# 一旦削除してもう一度platformを生成する
$  tns platform remove ios

Nativescriptでlocal storage的な機能を使う

最近よくNativescriptを使うのですが、ブラウザで使用するlocal storage的なものはないかと探してみたら
application settingsというものがありました

こちらを使用すると

// まずはインポート
import {
    getBoolean,
    setBoolean,
    getNumber,
    setNumber,
    getString,
    setString,
    hasKey,
    remove,
    clear
} from "application-settings";

// access_tokenをlocalstorageではなく、application settingsに入れておく場合
localStorage.setItem(‘access_token’, response[‘access_token’]);
setString(“access_token”, response[‘access_token’]);

// access_tokenを削除する場合
localStorage.removeItem(‘access_token’); 
remove(‘access_token’);

こんな感じでとても簡単に入れることができます
ちなみにnativescript-couchbaseなどもありますが、SQL的な側面が強いので
簡単に使う場合はapplication settingsが一番楽で軽いと思われます

参考にした記事

Application settings
nativescript-couchbase

curlコマンドをpythonスクリプトに変換するサイトの紹介

仕事でcurlコマンドを目にする機会がよくあるんですけど、正直私は得意ではないので自動で変換してくれるところはないか?と思って探してみましたらこんなサイトがありました

Convert curl syntax to Python, Node.js, PHP

こんな感じでとても簡単に変換できます!
選択できる言語はphpとnode.js、pyhonのみですが、みたら大体わかると思うんで、
他の言語に変換させたい時も結構重宝できそうな気がします

# curl コマンド
curl https://api.stripe.com/v1/customers \
   -u testtesttest \
   -d source=tok_1B8UMOE1YcFVetB7hq9sbbgS \
   -d description="Jacob Harris" \
   -d email="jacob.harris.20@example.com"

# python のコード(変換ご)
import requests

data = [
  ('source', 'tok_1B8UMOE1YcFVetB7hq9sbbgS'),
  ('description', 'Jacob Harris'),
  ('email', 'jacob.harris.20@example.com'),
]

requests.post('https://api.stripe.com/v1/customers', data=data, auth=('testtesttest', ''))

Angular4 でchart.js を使う方法

使ってみようかと思ったら、一発目でできなかったので一応シェアします

今回の問題もanglarのロードタイムの問題で、setTimeoutを使用することでエラーを回避しました

コードはこちらです
全部まとめてあるのでちょっと見にくいかもしれませんが、ご了承ください

肝はchartを表示させるコードの実行時間を送らせてやることです
chartに限らずjQueryでも使ったりするんで、頭の片隅に入れとくと割といい確率で当てはまることがあります

// index.html
// chart.jsを使うことができるようにCDNをネットから引っ張ってきます

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.0/Chart.min.js"></script>

// app.component.html
<canvas id="myChart" width="400" height="400"></canvas>

//app.component.ts
import {Component, OnInit} from "@angular/core";

declare const Chart: any;

@Component({
    selector: 'app-root',
    templateUrl: './app.component.html',
    styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
    constructor() {    }

  // setitimeがないとロード時間の問題が起きて表示されない
    ngOnInit() {
        setTimeout(()=>{
            this.chart();
        }, 500)
    }

    chart() {
        let canvas = <HTMLCanvasElement> document.getElementById('myChart');
        let ctx = canvas.getContext("2d");
        let myChart = new Chart(ctx, {
            type: 'bar',
            data: {
                labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
                datasets: [{
                    label: '# of Votes',
                    data: [12, 19, 3, 5, 2, 3],
                    backgroundColor: [
                        'rgba(255, 99, 132, 0.2)',
                        'rgba(54, 162, 235, 0.2)',
                        'rgba(255, 206, 86, 0.2)',
                        'rgba(75, 192, 192, 0.2)',
                        'rgba(153, 102, 255, 0.2)',
                        'rgba(255, 159, 64, 0.2)'
                    ],
                    borderColor: [
                        'rgba(255,99,132,1)',
                        'rgba(54, 162, 235, 1)',
                        'rgba(255, 206, 86, 1)',
                        'rgba(75, 192, 192, 1)',
                        'rgba(153, 102, 255, 1)',
                        'rgba(255, 159, 64, 1)'
                    ],
                    borderWidth: 1
                }]
            },
            options: {
                scales: {
                    yAxes: [{
                        ticks: {
                            beginAtZero: true
                        }
                    }]
                }
            }
        });
    }

}

参考にした記事

Chart.js CDN
Chart.js

Nativescript radio ボタンの作り方

ライブラリを使う方法もあるようですが、radio buttonだけだったらとりあえず生コードの方がいいと思います

コードはかなりシンプルで、メソッドなしだと以下のコードとなります

<ActionBar title="test" class="action-bar">
</ActionBar>

<StackLayout>

  <Label text="test radio button"></Label>
  <Switch    class="switch">  </Switch>
</StackLayout>

実際に動かすとこんな感じ
※あんまり綺麗じゃないですけど、ご容赦ください;;

参考にした記事

NativeScript Workshop

違うポートの画像の表示方法

違うポートの画像を表示するためにものすごい時間を使ってしまったので、シェアさせていただきます

とりあえず結論

<img src="http://localhost:5000+パスの詳細" >

よくよく考えてみれば当たり前ですが、http://のあとにlocalhostをつけてやればうまくいきます

参考にした記事

How do I view file:// images from http://localhost served pages in Firefox 11?

dockerが起動できない (port is already allocated)

dockerを起動させようとしたところ、 port is already allocated, つまりポートはもう割り振っちゃってます的なエラーが発生

ERROR: for mysql  Cannot start service mysql: driver failed programming external connectivity on endpoint test-mysql (b2c5bfe3339ba18ad0892ba8fc5a1f427a89b3915035bc12b0c4c1207e016f75): Error starting userland proxy: Bind for 0.0.0.0:3306 failed: port is already allocated
ERROR: Encountered errors while bringing up the project.

とりあえず解決策が以下のやり方
悩んだ割には結構簡単でした

# まずはポートを占領している奴を特定する
# 私の場合はポート3306をしているので3306で実行しました
$ sudo lsof -i:3306
Password:
COMMAND  PID   USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
mysqld  9447 _mysql   13u  IPv6 0x6973239584594d63      0t0  TCP *:mysql (LISTEN)

# 占領箇所を特定したら、そいつをkillすることで使えるようにします
$ sudo kill 9447

#kill し終わったら、次は起動です!
$ docker-compose up
Starting test-mysql ... 
Starting test-mysql ... done
Creating test-flask ... 
Creating test-flask ... done
Attaching to test-mysql, test-flask
test-mysql | 2017-08-24 02:12:21 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
test-mysql | 2017-08-24 02:12:21 0 [Note] mysqld (mysqld 5.6.37) starting as process 1 ...
test-flask |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
test-flask |  * Restarting with stat
test-flask |  * Debugger is active!
test-flask |  * Debugger PIN: 303-793-981

ちなみに色々試しましたが、以下のコードでは解決することができませんでした

$ screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
# docker rm `docker ps -qa`
# rm /var/lib/docker/network/files/local-kv.db

参考にした記事

Docker for Mac でコンテナが起動しなくなった時の対処
素人がMastodonインスタンスをアップデートできた話とお世話になったコマンドたち (2/2)