Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

Thunderbirdのデータがすべて消えたので復旧した

f:id:fa11enprince:20150727234208j:plain

問題発覚

WindwosでThunderbirdを使っています。 再起動とかかけてないのに、Thunderbirdをふと開くと、プロファイルから何から何まで全部消えてる… うーん何かしたか?と思い当たると、 普段使わないCClearを気まぐれで使ったのでこれが怪しい… そういえばマルウェア問題があったから更新しとこうとか思ってついつい使ってしまった。

http://note.lilish.com/digital_life/windows/ccleaner_thunderbird

ここのサイトの情報が全てでこの手順をやればOKです。

復旧手順

かならずしもこの方法で復旧できるとは限りません Explorerで%APPDATA%と打つ そうすると普通の環境であればC:\Users\[ユーザ名]\AppData\Roamingに移動します

とにもかくにも退避

Thunderbirdというフォルダがあると思うのでバックアップします。 デスクトップ等にコピーしましょう

Profileデータがあるか確認します

C:\Users\[ユーザ名]\AppData\Roaming\Thunderbird\Profiles の下にxxxxxxx.defaultのような名前でフォルダがあってその下にデータがあるか確認します

Invalidprefs.jsがあるか確認します

C:\Users\[ユーザ名]\Desktop\Thunderbird\Profiles\xxxxxxx.default Invalidprefs.jsとprefs.jsがあればだいたい復旧できる条件が整ってます。 WinMergeを使って念のため差分を見ます(※この作業は必須ではありません)

f:id:fa11enprince:20180610214813p:plain

そうすると文字化けしていて、かつ文字コードがUTF-8が正しいはずなのに、誤った認識をしていることがわかります。

Invalidprefs.jsをサクラエディタ等で開きます。

サクラエディタ等でUTF-8で開きなおします。 そうすると、日本語で書かれている部分がいくつか文字化けしているところがあるので、あきらめて消すか、 推測で適当な文字列に置換します。 私の場合 ・calendar.categories.namesは消しました ・profileの自分の名前らしきところは名前を正しく打ち直しました。

user_pref("mailnews.tags.$label1.color", "#FF0000");
user_pref("mailnews.tags.$label1.tag", "重要E);
user_pref("mailnews.tags.$label2.color", "#FF9900");
user_pref("mailnews.tags.$label2.tag", "仕亁E);
user_pref("mailnews.tags.$label3.color", "#009900");
user_pref("mailnews.tags.$label3.tag", "プライベ��EチE);

となってたところは、重要・仕事、プライベートだと思われるのでそのように書き換えました。

Invalidprefs.jsをprefs.jsにして上書き

上書きします。 そしてThunderbirdを起動します。

そうすると無事復旧できました。

その他参考にさせていただいたサイト

プロファイル消えた? と思ったら… - とりかごとなり。 CCleanerのアップデートに注意!Thunderbirdのデータが消えた原因とその対処法|くまらぼ Thunderbirdを起動したら初期化されててメールがすべて消えていました - Fioに言わせろ!

なお、本件については質問は受けません。

システム開発で最近やっていることのまとめ&感想

f:id:fa11enprince:20180420015702j:plain ここ3か月程度で取り組んでいることのまとめと感想
ほぼ殴り書きで自分向けに書いている内容となっています。
それぞれ細かく記事は書きたいのだけれど…
備忘録的な位置づけで書いてしまっています。
※Web系の人ではないので悪しからず…。

技術スタック

Java

  • ガリガリ書いてる。なぜこの言語かというと…察してください。
  • Spring Boot
    • 最近初めて触った。
    • JavaにしてはよくできたWebフレームワーク
      • 比較的手軽に何でもできてしまう。めんどくさいの代名詞Springのイメージを覆してる。
    • Hibernate
      • やはりJPAというかHibernateの学習コストが高すぎるOneToMany, ManyToOne, LAZY, EAGAR, FETCH結合が鬼門すぎる。
        • 何も考えずにN+1問題やだーでEAGARにすると死ぬ。
        • もはや1対多、多対1関連なんて使わずにJava側で自前で結合しまったりキーを抜き出してEntityごとにfindしたほうが余計な轍を踏まなくていいんじゃね…状態になりがち
        • Rails(ActiveRecord)のようにシンプルにならんのか
      • とはいえ複合PK(やむを得ず使う場合がある…)を扱えたりと何でもできる。
      • JPQLは便利
    • フロントエンドはAngularなのでThymeleafなにそれ?おいしいの?状態。ただのREST API作成用のアレですよ。
    • Scaffoldくらいさせてくれよ…という不満はある
    • Spring Batchはやりすぎ感がある。高機能だけど。
    • application.yml, application.propertiesはよく考えられてる。
    • Gradle 何それおいしいの?そもそもmavenで困ってない。gulpかwebpackにやらせたいことをやらせればいいんじゃね的な。どーなんだろ。

Angular5

  • 最近初めて触った。Spring Bootと組み合わせてる。
  • VSCodeと組み合わせると最強。Lint系ツールも素敵。
  • そこそこガリガリ書いてる。Vue.jsを選べばよかったかも…。と少し後悔。Reactでもよかったかも。いやでもよいところもありますよ。。。
  • なかなか良い感じ。しかし…、SPAですべて作ることを強要されるような気がする。SPAに浸食される。
    • もっと気軽に使いたいんだ
    • AngularJSのときのようにシンプルなテンプレートエンジンでサーバサイドで生成したページと混ぜることが容易ではない。

      • 混ぜたい場合はどうすればよいかいまいちわからない。Angular単位?でアプリを分けるしかない?
        • 詳しい方教えてください(´;ω;`)ウゥゥ
        • 別窓で開くページとかだと戻る必要がないのでそこは問題ないけどrouterがあるのでThymeleafのページとかと組み合わせずらいっすよね。
    • jQueryとかと組み合わせないと結局込み入ったものが作れない。が、jQueryと組み合わせるとちょっと面倒。

      • いや、まじめにコンポーネント作ればできるっちゃできるんですが、ほら、偉大な過去の資産がね…。
    • 学習コストはAngularJSより下がってる(個人的には)。つまり学習が楽だ(ngコマンドとTypeScriptのおかげ)。あんまりng、んぐ言わない。
  • AOTコンパイル通らない。うえー…が多々。
  • npmで依存モジュールとかでダメになる…おまえはアレか、bundlerと同じつらみ。バージョン合わせに四苦八苦。
  • ngx-bootstrapもうちょっと頑張ってくれ…頼む。
  • bootstrap4はいいけど…それにしてもbootstrap依存すぎる。まぁいいけど。
  • TypeScript
    • ほぼES6 + 型。素敵。初見はSwiftに似てると思った。
  • RxJS
    • 込み入った機能を使わなければ超便利なやつ。いいと思います。

JavaScript

  • 読んでるだけ。TypeScriptかES6じゃないと読むの苦痛…。プロトタイプ、テメーはダメだ。いやES5あたりだと思うんだけど旧来のJSが……。
  • Node.js
    • Express
      • Node.jsのWebフレームワーク
      • 自分は読んでるだけ

Python2

  • 読んでるだけ
  • Python2のサポートがRHELとかから外れるってのも知ってますよ…でもね…
  • 機械学習…逃げたいけどやつは追ってくる。嫌だ。機械学習嫌だ。
  • Jupyter
    • いやだから機械学習系は…くぁwせdrf
    • ジュパイターなのかジュピターなのかよくわからん…とおもったらアメリカではジュピターなのね…。セントオーエスVSセントス的な

Ansible

  • あらためて冪等性ってマジ素敵

docker

  • いや、ポータビリティいいんだけどさ…間に何か挟まった感じでダルい…いやきっとそれはまだ自分のスキルが低いのだ…。
    • ポータビリティはいいけどイメージのサイズが当然デカイので、どうにかならないのか…ならないね。
    • docker越しでコマンドをひたすらビシビシたたく!うん。便利。オーバーヘッドも全然なさそう。
    • ポートの指定をrun時に忘れたときの絶望感…docker rmしないとダメか…あぁ。
  • docker-compose
    • dockerの親分的な。便利。
  • kubernates
    • よくわからんけどdocker-composeの競合的な?

MongoDB

  • スキーマレス。テーブル定義的なのがないよ。
  • JSONぶち込み放題
  • MEANスタックってあるけど確かに相性いいよね。ただ、Expressってちょっと機能少なくないですか?
  • すすんで使いたいと思わない。用途に寄るが

Ubuntu

  • もうこれからLinuxはこれでいいんじゃね的な感じがとってもある。dockerと相性いいし。
  • Ubuntu Desktopはよく使っていたがUbuntu Server悪くないね。CentOSを窓から投げ捨てたくなった。
    • yumって間違えて打つことがなくなって逆にCentOSでapt-getしそうになる。
  • 海外ではCentOSよりUbuntuが主流
  • Ubuntuに限らずだけどsystemctl ... このコマンドとサービス名が長くなりがちなので打つのダルい。serviceとかinitdのときは楽だった。
  • おい、rootになれないんだけど…えっ?sudoが必要だって?とにかく宇文津さんは須藤さんが大好き。

AWS

  • EC2とRDSとS3とかそのあたりは大体つかってた。
    • lambda
      • 勉強したいがいまいちそそらない。lambdaというよりAWS全般にあまり興味がわかない。課金怖い。
      • RDSと相性悪い。

GitBucket

  • Scala製なんだ。へー。
  • しかしGitHubに比べると物足りない…。でも無料でこれなら素敵。メンションでメール飛ばしたい。

開発用Chatツール

  • SlackかHipChat使いたい…無料で代替のがないのか…。

Proxy

  • 技術スタックというか、こいつが邪魔……。squidとかそういう話ではないです。

Apache

  • ええ、今更語ることはないです。

もっといろいろなんか新たに学んだことややったことがある気がするけどこんなところかも… 管理系ってのもありますね。マネジメント あぁ、でもマネジメントしてるのに一番プログラミングしてるゆがんだ状態になってます。 管理したくない。されたい。ふー。 Djangoを触ってみたいなーと思いながらも、触れない日々を過ごしています。

Angular + TypeScript + Spring Bootをやってみた

f:id:fa11enprince:20180130152024j:plain 最近開発でAngular(2+) + TypeScript + Spring Bootを使っています。
それぞれのバージョンの詳細はこんな感じです。
Angular 5
TypeScript 2.6.1
Spring Boot 1.5
Java 8
Maven 3
Node.js 8.0.0
Angular-CLI 1.6.7

Node.jsのバージョンが微妙に古いのはnpm installしたときにうまくいかないものがあったためです。
ちなみにAngularもSpring Bootもかなり経験が浅いのでご指摘等あれば嬉しいです。

実際の構成例

GitHubに置きました。

github.com

AngularのチュートリアルとSpring Bootのチュートリアルを混ぜたものです。
ArpitSuthar (Arpit Suthar) · GitHub のをforkしました。

大まかな構成

TypeScriptをどう、SpringのTomcatと連携させるか考えていました。
あんまり複雑な構成にしたくなく、AngularJS(1系)の時のようにお手軽に使えるようにしたかったのです。
それでいろいろ調べたところ、下記の構成にしました。

src
 └ main
      └ client ... ここにAngularのソースを書く
      └ java
      └ resources
         └ static ... ここにAngularのTypeScriptのビルド結果が入る(Angular専用ディレクトリにする)
         └ public ... Spring bootのstaticのかわりにここを使う。Thymeleaf等で参照したいものがあればここに入れる

御覧の通りSpring Bootが中心の構成になっています。
フルでSPAにしたくなくって一部画面をThymeleafで使う場合も想定しています。
ただ、僕の少しAngular2+をかじったレベルの知識では、基本的にフルでAngularでSPAで作ったほうが楽そうです。
AngularJSは何も考えずに一部画面だけにAngularJS適用とかできましたが、
Angular2+の場合はちょっと考えないと一部画面だけAngular適用ってのは辛そうです。
ビルドはmavenにやらせてmaven経由でnpmをたたいてnpmのpackage.jsonからAngular-CLIのngコマンドをたたいて
TypeScript→JavaScript変換をしてビルドする感じです。

Angular2+について

AngularJSをちょっとだけ触ったことがあったのですが、
AngularJSに比べてかなり使いやすいです。学習コストは高いといわれますが、
Reactよりだいぶ学びやすいと思いました。
TypeScriptの恩恵もあってか、どう作ればいいかという道しるべを示してくれている分、
あんまり書き方に際は出ないような気がしました(コンポーネントの分割はどうするかとかはあるにしろ)。
TypeScript素敵です。ES6よりも当然、良いです。JavaScript全部TypeScriptにならないかな…と思える今日この頃です。

Spring Bootについて

Spring単体だと嫌なイメージしかなかったのですが、なかなか素敵なフレームワークです。
ただ、Ruby On Railsとかに比べるとだいぶ生産性は落ちる気がしますが、それでも素敵なフレームワークだと思います。
ただ、JPAというかHibernate、オメーはダメだ。
Hibernate、機能多すぎて、ハマりも多すぎて辛い…。RailsのActive Recordくらいシンプルになればいいのに。

ハマったところ

Angularがどう頑張っても更新されない…watchしてんのに…。
Angularのhtmlを更新してもなんで反映されないのよ…Springのdevtoolいれてんのに…と思っていました。
mvn spring-boot:runとeclipseのプロジェクトを右クリック→Run Spring Boot Appのstatic resourceの読む挙動の違いにハマりました。

解決策はeclipseからmvn spring-boot:runを叩けばよいです。
設定方法
Right click on project > Run As > Maven Build
Goal: spring-boot:run
Apply
f:id:fa11enprince:20180225055712p:plain IntelliJだとこのハマりはないっぽいです。

なんで更新されなかったかというと次の挙動の違いがあるからです。
EclipseからのSpring Boot App
target/classes/resources/static/
を見に行く

mvn spring-boot:runで動かしたときは
webapp/src/main/resources/static
を参照しに行き、そちらを見に行く

というのが原因です。

パソコン電源投入時にピーピーピーとビープ音が鳴り、起動しない

f:id:fa11enprince:20160328070422j:plain 私事ですが引越しました。 引っ越ししてしばらくたってからWindows PCを立ち上げようとすると、 ピーピーピーピーだかピーピーピーと音が鳴ってUEFIすら立ち上がりません。 3回かな?4回かな?よくわからない状態でした。冷静になって聞いたら3回かも…って感じでした。 軽くスマホでググるとどうも何らかのハードウェアの不良があって、 たいていの場合メモリ絡みの問題らしい。 メモリの接触不良が原因だそうな。

引越の時に、時間に余裕がなく多少乱暴に梱包したのがいけなかったかなーなんて思いました。 もしくは引越業者の人がPCだって忘れてて豪快に投げたのかもしれません(笑) 引越業者の名誉のために言っておきますが依頼した引っ越し業者はとても良い仕事をしていただきました。とても親切丁寧、迅速な引越業者さんでした。 起動中でないし、HDDでないしちょっと程度の衝撃じゃ大して影響ないなーとは思うんですが…

そんなこんなでひとまず、分解しました。 ドスパラのBTOパソコンなのでネジをはずして終わりなので楽ですね。 ……1年半くらいPCの掃除をさぼってたのでホコリがそこそこやばい。 1年半前に電源変えてきれいだったはずの配線がホコリまみれに。 エアブロワーで吹き飛ばしました。 他の部分も盛大にホコリがたまっていたので吹き飛ばしました。 メモリ部分もなんだかホコリが付着しているので飛ばしました。 メモリは完全に刺さっているような気がしたけど、 片方、若干浮いているような気がしました。 抜くと挿すとき割れそうで怖いので(臆病なんです…大昔に256MBのメモリを増設したときにお小遣いが吹き飛びそうでビビってました)、 そのままぐいぐいっと押しなおして念入りにホコリを吹き飛ばして電源投入すると 正常にWindowsが起動しました。

一応、グラフィックボードの接続を確認しましたが問題なし。 CPUはホコリまみれだったのでとっておきました。 全然関係ないと思うけどSSDとHDDのSATAがゆるゆるな感じだったので刺しなおしました。 あとは電源コードを見直しましたが、たぶんどれも関係がない。 電源を入れると一瞬で起動しました。 最近HDDのiMac使っているので起動が異様に早くてビビりました。

ちなみにですが、エラー時のビープ音は下記のようになっているそうです

AWORD BIOSの場合

(短音×1)正常起動
(短音×2)CMOS設定エラー
(長音×1、短音×1)メモリーエラー
(長音×1、短音×2)グラフィックボード、またはモニター接続エラー
(長音×1、短音×3)グラフィックメモリーエラー
(長音の連続)メモリー接続エラー、装着エラー
(短音の連続)電源供給エラー

AMI BIOSの場合

(短音×1)メモリーリフレッシュエラー
(短音×2)メモリーバリティーエラー
(短音×3)メモリーエラー
(短音×5)CPUエラー
(短音×6)キーボードエラー
(短音×7)CPU、マザーボードエラー
(短音×8)グラフィックメモリーエラー

起動時にビープ音が発生する|ドスパラ より引用

ちなみに私の場合は最初にこの音を聞いたとき ピーピーピー(しばらく間隔)ピーピーピー 3回に聞こえるときもあるし4回に聞こえるときもあるし…で焦りました。 たぶんメモリエラーだろうなとあたりを付けて… ちなみに引っ越し作業でマザーボードが何か書いてあるマニュアルどこかに消えてしまいました(笑) 探せばあるんだけど… と思ったら、PC内にドキュメント残しておいてた。

ASRock > B75M R2.0 これですね。 GUI でサポートされた 64Mb AMI UEFI Legal BIOS と書いてあるのでBIOSはAMIのほうですね。 4回に聞こえたのは聞き間違いのようだった…。

教訓。ホコリは大敵。1年に1回は掃除しよう…。

Git 備忘録

f:id:fa11enprince:20170818063154j:plain

Gitでcommitを分割したいとき

次のコマンドでコミット番号を見る

$ git log --oneline --graph  

リベースする

$ git rebase -i 59b146c  

※上記コミット番号はあくまで例

エディットするコミットを選ぶ

下記のようなコミットメッセージが表示されるので、pickをedit(e)に変更

pick 310154e 部分的な修正1とその他ほげほげ

e 310154e 部分的な修正1とその他ほげほげ

ひとつ前のコミットでリセットする(※ここがポイント)

$ git reset HEAD^

※mixedモードでリセットするのでcommitとaddがひとつ前のコミットに戻る

git add前の状態になるので、必要な単位でgit addcommitを繰り返す

全部終わったらcontinueする

$ git rebase --continue

毎回ssh-addが消える問題

現象

$ git pull
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
$ ssh-add -l
Could not open a connection to your authentication agent.

※そもそもGitHubの公開鍵設定をしていない場合は
http://ryoichi0102.hatenablog.com/entry/2017/02/03/232920
とかを参照して下さい

とりあえずその場しのぎの処置

$ eval `ssh-agent`
$ ssh-add ~/.ssh/github_id_rsa
$ ssh-add -l

github_id_rsaのところはお使いの公開鍵に変えてください

面倒なんで.bashrcに書く方法

この辺とかあるが…うーんなんだか… 毎回手でたたくでいいかなって感じもする http://d.hatena.ne.jp/himadatanode/20160823/p14

でもイライラしてきたので.bashrcに書く

eval `ssh-agent`
ssh-add ~/.ssh/github_id_rsa

私の環境の場合はgithub_id_rsaです。適宜変えてください。

もしくはid_rsaにしておくとデフォルトでそこに読みに行くのでこのような問題は生じない…はずです。

Filename too long

これが出る場合、下記をたたく git config --system core.longpaths true ただし、管理者権限が必要な模様 なので ~/.gitconfigに

[core]
    longhpaths = true

を記述する