20190405のMacに関する記事は7件です。

WindowsでCSVファイルアップロードうまくいかない。。。

導入

先日、とあるWebアプリケーションのCSVファイルアップロード機能を追加開発した時にMacではうまくいっていたファイルの中身のバリデートチェックがWindowsでは全然機能しなかった問題が発生したので備忘録として。

アプリケーション環境

  • Ubuntu(バージョンは忘れた)
  • PHP-7.2fpm
  • CakePHP 2系
  • nginx

動作確認環境

不具合が発生した環境

  • WindowsのChrome、InternetExplorer11、FireFox

問題がなかった環境

  • MacのChrome、FireFox

原因調査内容

MacとWindowでは同じChromeでも仕様がちがう?

→検索していろいろ調べてみたが原因解明できず、一旦保留

MacとWindowsではブラウザの初期のセキュリティ設定が違う??

→JavaScriptやCookieの設定等いろいろいじってみたが挙動変わらず。

nginxかPHPの設定がおかしい???

→nginxはそもそも関係なかった。。。
→PHPはphp.confにuploadファイルの設定があったので、一時保存先や最大ファイルサイズ等変更するが変わらず(そもそもサーバの設定ならWindowsとMacで挙動変わらないはず。)

ctpファイル(View)の実装がおかしい????

→こちらもformタグに「multipart/form-data」が設定されているから問題ない気がする?

MacとWindowsでrequestの中身が違うんじゃ?????

→とりあえず、アップロードファイルが格納される変数をCotrollerで画面に出力するコードを記載
 MacとWindowsのそれぞれで出力結果を確認してみる。

 // ファイルの中身を出力
 echo "<pre>";
 var_dump($_FILE);
 echo "</pre>";
 exit();

出力結果が以下、、、ん??

#Windows

array(1) {
  ["data"]=>
  array(5) {
    ["name"]=>
    array(1) {
      ["XXXXXXXX"]=>
      array(1) {
        ["upfile"]=>
        string(12) "TEST.csv"
      }
    }
    ["type"]=>
    array(1) {
      ["XXXXXXXX"]=>
      array(1) {
        ["upfile"]=>
        string(24) "application/vnd.ms-excel"
      }
    }
    ["tmp_name"]=>
    array(1) {
      ["XXXXXXXX"]=>
      array(1) {
        ["upfile"]=>
        string(14) "/tmp/phpQYwrAs"
      }
    }
    ["error"]=>
    array(1) {
      ["XXXXXXXX"]=>
      array(1) {
        ["upfile"]=>
        int(0)
      }
    }
    ["size"]=>
    array(1) {
      ["XXXXXXXX"]=>
      array(1) {
        ["upfile"]=>
        int(56)
      }
    }
  }
}

#Mac
array(1) {
  ["data"]=>
  array(5) {
    ["name"]=>
    array(1) {
      ["XXXXXXXX"]=>
      array(1) {
        ["upfile"]=>
        string(12) "TEST.csv"
      }
    }
    ["type"]=>
    array(1) {
      ["XXXXXXXX"]=>
      array(1) {
        ["upfile"]=>
        string(8) "text/csv"
      }
    }
    ["tmp_name"]=>
    array(1) {
      ["XXXXXXXX"]=>
      array(1) {
        ["upfile"]=>
        string(14) "/tmp/phpICM53a"
      }
    }
    ["error"]=>
    array(1) {
      ["XXXXXXXX"]=>
      array(1) {
        ["upfile"]=>
        int(0)
      }
    }
    ["size"]=>
    array(1) {
      ["XXXXXXXX"]=>
      array(1) {
        ["upfile"]=>
        int(18)
      }
    }
  }
}


MIMEtypeが違うな?

結論

ファイルの型のチェックの際、MIMEtypeのチェックをしていたが、
"text/csv"のみ許容する実装になっていたため、Windowsから送信されるMIMEtypeが"application/vnd.ms-excel"になっていたのでCSVファイルと判定されていませんでしたね。。。

現在はファイル名の後ろが「.csv」かどうかで判定するように変更して落ち着きました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

忘れた時のファイルタイムスタンプ書き換え

忘れた時のファイルタイムスタンプ書き換え

自分用に書いているのが他人にもやくにたてばというようなスタンスで書いています.

大学のゼミのファイル提出期限に関して厳しかったのでどうにかしたいと思っていた.
これに対して, 提出後にファイルの作成と更新時間を更新できれば誤魔化すことができると考え調べた結果, 以下のコマンドで実行が可能だと判明した.

環境

OS : Mac
必要なアプリケーション : Xcode Command Line Tools

作成日更新 : SetFileコマンド

SetFile -d "<変更したい時間>" <ファイル名>
例) SetFile -d "01/10/2019 10:00" test.txt

編集日更新 : touchコマンド

touch -t <変更したい時間> <ファイル名>
例) touch -t 201901010100 test.txt
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[GitHub]コマンドでPRを作成する。

はじめに

この記事ではmac&bash向けに説明します。

Hubコマンドを導入

hubコマンドをインストール

$ brew install hub

確認のため以下のコマンドを入力してみましょう。
正しくgitとhubのバージョンが表示されていればインストールは完了です。

$ hub version
git version 2.10.0
hub version 2.2.9

hubコマンドを $ git ooo で使えるようにするため ~/.bash_profile に以下の1行を追記

eval "$(hub alias -s)"

設定を反映

$ source ~/.bashrc

これで導入は終わりです。

PRを出してみる

hubコマンドの導入ができたので、実際にPRを出してみましょう。
普段通り、変更をadd, commit, pushまで行ったあとに以下のコマンドを叩きます。

$ hub pull-request
# $ git pull-requestでも可

このままだとGitHubの設定によっては、PRのbaseがmasterブランチになってしまう場合があるので、baseブランチを指定してあげます。

$ hub pull-request -b dev
# baseブランチ名がdevの場合

コマンドを実行するとviエディタが開きます。

1  コマンドでPRを作成する
2 
3  # Requesting a pull to Hoge:dev from Hoge:introduction_hub_command
4  #
5  # Write a message for this pull request. The first block
6  # of text is the title and the rest is the description.

このうち1行目がPRのタイトルとなる箇所です。空だとエラーになります。
1行目にはデフォルトで最終commitメッセージが入力されています。

PRの説明や、issueとの紐付けをする際は2行目以降に追記します。なくてもいいです。
※コメントアウト部分はメッセージとして認識されません。

ここまで終わったら :wqでエディタを抜けます。

対象のリポジトリに行くとPRが出ています∩(´∀`)∩ワァイ♪

でもまだ面倒くさい

PRをコマンドで出せても、そのあとGitHubで対象のPRまで行くのに画面遷移2回くらいしなきゃいけない。
面倒くさい。
時間は有限。

$ hub pull-request -b dev --browse

これで、PRが正常に出せたら対象のページが開きます。

さらに

~/.git_config

[alias]
    pr = pull-request -b dev --browse

と追記する事で $ git prでPRを送信する事ができます。

終わり

毎日数回、多い時には十数回する作業を効率化できました。
手間を減らせるのは時間的にもストレス的にも良いですねヽ(⌒∇⌒)ノ

hubコマンドは他にも便利な機能があるので気になった方はぜひggって見てください。

良かったら[いいね]、悪かったらコメントにて指摘お願いします:bow:

参考

https://github.com/github/hub#installation

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ターミナルと Slack を Mojave ダークテーマに合わせよう

ターミナルが Mojave ダークテーマにしっくりこないのでテーマを作った

Dracula Theme を気に入って使っていたのですが、Mojave のダークテーマにしてから、周りの色合いとしっくりこなくなりました。
Mojave で使われているカラースキームでテーマを作った結果、数ヶ月間、テコ入れしながらも違和感なく気に入って使っているので公開します。
以下、Terminal.app + tmux + vim を走らせている例です。
DtAK27iVYAEENSB.jpg
ついでに Slack のテーマも作ったので、ここで公開しています。

Terminal.app 用

https://github.com/onose004/mojave-terminal
から mojave-dark.terminal をダウンロードして開いてインストール。

Vim 用

https://github.com/onose004/mojave-vim
README の内容に沿ってインストール。
Lightline プラグインにもテーマが適用されます。
なお、記事執筆時点で GUI 版 Vim のカラースキームには対応していません。

Tmux 用

記事執筆時点で対応していません。

Slack 用

以下を Slack のカスタムテーマ欄にコピペして適用。
手前味噌ですが、これ以外使う気になれません。

#232427,#363739,#515254,#ffffff,#363739,#FFFFFF,#65B84D,#E95459
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[備忘録] Mac PC がまた入院した時のために

愛用の Macbook Pro:computer: が Apple Store に修理入院:hospital: = 初期化...
ということで、元気になって戻ってきた時に困らないように諸々の設定情報:gear:をメモしておきます。

メモリスト:pencil:

この辺りが重要と聞いたので、メモです。

  • 環境変数とPath
  • テキストエディタ
  • ブラウザ
  • アプリケーション
  • npm パッケージ
  • SourceTree のリポジトリブックマーク
  • その他

環境変数 と Path:wrench:

Terminal 環境内における変数である「環境変数」とコマンドの格納先である「Path」。

環境変数

[設定の確認]
  • printenv コマンドで設定している環境変数を表示 (一部のみ抜粋)
$ printenv

TERM_PROGRAM=Apple_Terminal
SHELL=/bin/bash
USER=***
PWD=/Users/***
LANG=ja_JP.UTF-8
HOME=/Users/***
LOGNAME=***
  • 設定情報をファイルに出力
$ printenv > EnvironmentVariable.txt
[新規設定]
  • 旧環境の設定を新環境に設定
$ export {VARIABLE NAME}={value}
  • 永続的に設定が保存されるように source コマンドを実行 (上記のみだと Terminal を開くたびに設定が必要)
$ source ~/.bash_profile

Path

Path は環境変数のうちの一つ。
コマンドが格納されている先を登録しておくと、都度パスを指定してコマンドを実行する必要がなくなる。
例えば、/bin という PATH が通っていると、以下のように /bin/pwdpwd で実行できる。

$ pwd
$ /bin/pwd
[設定の確認]
  • echo コマンドで現在の設定を表示 (一部のみ抜粋)
$ echo $PATH

PATH=/Users/***/.pyenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Users/***/cli-kintone
  • 設定情報をファイルに出力
$ echo $PATH > path.txt
[新規設定]
  • 旧環境の設定を新環境に設定
$ export PATH={Path}:$PATH

※ 以下のように記述すると Path の設定がすべて上書きされるので注意。

$ export PATH={Path}
[おまけ]
  • Path の優先順位は左から (: で区切って複数追加)
$ echo $PATH

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
  • コマンドの格納パスを探す際は、which コマンド
$ which pwd

/bin/pwd

テキストエディタ:page_facing_up:

ユーザー設定 と 拡張機能設定 は 一からやり直すの大変なので、メモ必須。
(※ VSCode Ver.)

ユーザー設定

  • インデントや拡大縮小レベルなどの初期設定を表示 (歯車マーク > User Settings > 右上の {} マーク)
    VSCode_userSetting.png

  • settings.json を保存
    VSCode_settingsJson.png

  • 新規環境でも保存しておいた settings.json を設定し直すだけで OK!

拡張機能設定

  • code コマンドでプラグインの設定を表示 (一部のみ抜粋)

※ code コマンドが入っていない場合は、 Command Palette を開き Shell Command と検索して、Shell Command: Install 'code' command in PATH command. を選択する。

$ code --list-extensions

RoscoP.activefileinstatusbar-1.0.3
akamud.vscode-theme-onedark-2.1.0
anseki.vscode-color-0.4.5
arcticicestudio.nord-visual-studio-code-0.7.1
azemoh.one-monokai-0.3.7
christian-kohler.path-intellisense-1.4.2
dbaeumer.vscode-eslint-1.8.2
donjayamanne.githistory-0.4.6
dracula-theme.theme-dracula-2.17.0
  • 拡張機能リストのファイルを作成
$ code --list-extensions > extensions
  • インストール用のシェルスクリプトを作成
install_extensions.sh
#!/bin/sh

cat ./extensions | while read line
do
  code --install-extension $line
done
  • extensions ファイルがあるディレクトリでシェルスクリプトを実行
$ sh install_extensions.sh

これでエディタの設定は元通り( ー`дー´)キリッ

ブラウザ:bookmark:

ブックマークや拡張機能の設定も重要。

ブックマーク

[設定の保存]
  • ブックマークの設定を表示 (ブラウザの右上の > ブックマーク > ブックマークマネージャ)
  • ブックマークの設定をエクスポート (右上の > ブックマークをエクスポート)
  • HTMLファイルが出力されるので、保存
[新規設定]
  • ブックマークの設定をインポート (右上の > ブックマークと設定をインポート)

拡張機能

インストール済みの拡張機能は Chrome の標準機能ではエクスポートすることはできないので、新規にそれ用の拡張機能を入れてエクスポートする。

[設定の保存]
[新規設定]
  • 保存した extensions.html を Chrome ブラウザで開く
  • Enabled 内のリストのリンクをクリックして、拡張機能をインストール extensions.png

これでブラウザもバッチリ(≧∇≦)b

アプリケーション:mag_right:

アプリケーションは1つずつインストールのし直しが必要だが、リストはあって損ないので Application ディレクトリから調べておく。

  • Application ディレクトリを表示してファイルに出力
$ cd /Applications
$ ls > ApplicationList.txt

npm パッケージ:package:

npm インストールしているパッケージのリスト化。

  • npm list コマンドでリストを表示してファイルに出力
$ npm list > npmList.txt

SourceTree のリポジトリブックマーク:books:

Git クライアントの SourceTree のリポジトリブックマーク管理。

[設定の保存]
  • SourceTree ディレクトリ内の browser.plist を保存
$ cd $HOME/Library/Application Support/SourceTree
$ browser.plist > SourceTree_browser.plist
[新規設定]
  • browser.plist を元の場所に戻して、ブックマークの復元
$ cd {SourceTree_browser.plistのバックアップ先パス}
$ cp SourceTree_browser.plist > "$HOME/Library/Application Support/SourceTree/browser.plist"

その他:keyboard:

必要に応じて以下の設定もメモしておく。

  • プリンタ設定
  • キーバインド

これ以外は必要になったタイミングで新環境で設定するようにすれば無駄もなさそう(・∀・)

参考リンク:link:

以下の記事を参照・一部文面で使わせていただきました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

macで標準shellをzshにする方法

この度、shellをzshにして、作業効率アップアップ(?)したので、備忘録

bash
# zshの場所を確認
$ which zsh
>> /bin/zsh

# 以下のコマンドを実行
$ chsh -s /bin/zsh 
$ export SHELL=/bin/zsh
$ exec $SHELL -l

変えたら、標準がpython2になったり、pipでインストールしたパッケージ類が使えなくなるので、以下を実行.
zshにも同じpathを指定すれば使えます。

zsh
# .zsh_profileを作成して編集
$ vi ~/.zsh_profile
.zsh_profile
# 以下を追加
if [ -d $HOME/.anyenv ] ; then
    export PATH="$HOME/.anyenv/bin:$PATH"
    eval "$(anyenv init -)"
fi
export PATH="$HOME/.pyenv/shims:$PATH"
zsh
# 更新する
$ source ~/.zsh_profile
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

BoostnoteにAdd(再リンク)できない時にどうすればいいか

はじまり

Dropbox上でBoostnoteを管理していたら、データが消えました…

正確にはアプリから参照できなくなったですね。
boostnoteでdropboxデータの復元を試みるに記載されている内容と類似した以下のような現象が起きました。

  • データはDropbox上に存在
  • Boostnote mobileからは確認可能
  • 再リンクが不可

環境

  • MacOS Sierra 10.12.6
  • Boostnote 10.11.15
  • Boostnote mobileとDropbox連携(ios 12.1.4)
  • python3.6

原因

Boostnoteアップデート後CSONファイルが存在するにも関わらずストレージ設定が消えてフォルダとドキュメントが表示されない障害原因と解消法がわかりやすくて助かりました。

結論的には、既存のcsonファイルにおいてcontentが空だと、読み込みがエラーになるようです。
同様の問題かどうかは、View > Toggle Developer Toolsを参照するとわかります。

解消方法

やるべきことはcontentが空のファイルを見つけて、削除することです。

順番にノートの中身を確認するにはいかんせんノートの数が多かったので、以下のpythonスクリプトをBoostnote/notesディレクトリにて行うことで探索しました。

import cson
from pathlib import Path
p = Path.cwd()
for path in p.iterdir():
    with open(path) as f:
        c = cson.load(f)
        if len(c['content']) < 1:
            print(path.name)

内容はカレントディレクトリにおけるcsonファイルのcontentが1文字より小さいものを探して、ファイル名を標準出力です。
一応、中身を確認してから表示されたファイルを削除することをお勧めします。

これで再リンクできない問題は解決されるはずです。

同時に起きていた、別の問題について

Boostnoteを再起動するたびにリンクが解除され、再リンクが必要となる問題も発生していたのですが、そちらは$HOME/Library/Application Support/Boostnoteを削除して、Boostnoteをインストールし直して強引に解決しました。
もっといい解決法がありそうですが、サボってしまいましたね…

参照元

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む