ツタンラーメンの忘備録

プログラミングや精神疾患、ラーメンについて書いていきます。たぶん。

Windows10のパソコンが正しくシャットダウンされず、選択しても再起動される話

タイトルのとおりです(いつもこれだな)
結論から言うとShift押しながらシャットダウン選んでください

【Windows10】正常にシャットダウンできずに再起動を繰り返す場合の対処方法 | 棚からおはぎ
ここを参考にしました。高速スタートアップ設定が有効になっていることが原因らしいです。

ではでは~。

openframeworksでカレントディレクトリを取得しようとしたけど失敗した話

タイトルの通り(ちなみに最初、コードを記載する部分に>|c++|とかわけわからないこと書いて色分けされず焦った)

結論から言うと私の場合はofDirectoryとofFileを組み合わせれば実装できた。
今回の流れは

  1. なぜ取得しようと思ったか
  2. カレントディレクトリが取得できない
  3. ファイル数も取れない
  4. ofDirectoryを発見
  5. サンプルコード

の順である。


1. 目的
プレゼン資料をパワーポイントで作って、全スライド画像出力→openframeworksで実行すればoFで疑似スライドショーができるんじゃないか!?しかもインタクティブな要素加え放題じゃん!(画像化しているのでベースは動かせないのだけど…。)
正直全スライドをclass化して、文字表示すればいい気もするのだが…


2. カレントディレクト
こちらのサイトを見て(間違った内容が一点混じっているにも関わらず検索上位に出てくるからすごい)
C++のTips - カレントディレクトリを取得するには?:tech.ckme.co.jp

#include <Windows.h>
//略
char cdir[255];
GetCurrentDirectory(255,cdir);
cout<<"Current Directory : "<<cdir<<endl;

とまあ、いろいろ書いたけれどGetCurrentDirectoryは定義されていないと出る。
なにをやろうとしていたかというと単純にopenframeworksのbin/data内のpngファイル数を知りたかった。


3. ファイル数取得(カレントディレクトリを取得できない時点でモチベーションを失ったので、特に見つけただけで何もしていない)
下と上を組み合わせれば、できるんじゃない?と思ったけど
Win32API ディレクトリを走査しファイルを検索する FindFirstFile FindNextFile FindClose - s-kitaの日記

#include <windows.h>

int main()
{
	HANDLE hFind;
	WIN32_FIND_DATA win32fd;

	hFind = FindFirstFile("C:\\*.*", &win32fd);

	if (hFind == INVALID_HANDLE_VALUE) {
		return 1;
	}

	do {
		if (win32fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
			printf("%s (DIR)\n", win32fd.cFileName);
		} else {
			printf("%s\n", win32fd.cFileName);
		}
	} while (FindNextFile(hFind, &win32fd));

	FindClose(hFind);
	
	return 0;
}

下は下でエラー出るし、そもそもopenframeworksに実装されてるんじゃね?と思ったら案の定ありました。

4. oFにはofDirectoryというものがありました。
http://openframeworks.cc/documentation/utils/ofDirectory/openframeworks.cc
shingo sasahara — openFrameworks ファイル操作

上2つで大丈夫だと思うけど一応最後に私が何したかも記しておく。


5. 私が書いたコード(必要なところだけ)
そもそも画像を配列で持たないといけないので、画像配列を作ります。(画像とかいう重いものをvectorにしていいのだろうか…)
ofApp.h内

vector<ofImage> imgs;

ofApp.cpp内

void ofApp::setup(){
	string folderName = "Test/"; //ここが空白(""だとdataを参照できるそうです。)
	ofDirectory dir(folderName);
	dir.allowExt("png");
	dir.listDir();
	int lastSlideNumber = dir.numFiles();
	for (int i = 1; i <= lastSlideNumber; i++) {
		string imgPath = folderName + "スライド" + ofToString(i) + ".PNG";
		ofImage tmpImg;
		tmpImg.loadImage(imgPath);
		imgs.push_back(tmpImg);
	}
}

ちなみにpptxから「名前をつけて保存」で「.png」を選んだ場合に入力する名前は
単一スライドだと「入力名.png」になるんだけど複数スライドだと「入力名」フォルダができてその下に「スライド1」「スライド2」…が入る形になっている。
なんかちょっとややこしいし、個々の「スライド」ってところもまとめて編集できたらいいのにね。



あと一瞬詰まったのが、

ofImage tmpImg;
tmpImg.loadImage(imgPath);
imgs.push_back(tmpImg);

の部分。

imgs.push_back(imgs[0].loadImage(imgPath));

は許されなかった。そりゃそうだよね。

既存のフォルダに既存のgithubリポジトリを紐付ける。

これで何度も詰まっているので備忘録的に記載しておく。 ちなみに環境は

  • windows10 64bit
  • tortoiseGit使用(なぜかHerokuのデプロイはGit Bashを使っている)

openframeworksでprojectGeneratorを使ってフォルダを一式作ったあと、どうやってgithubリポジトリを紐付ける(コミット、プッシュ、プルできるようにする)のかわからなかった。初心者的過ぎるのか、どこにも載っていない(そもそも調べられない)ので、一応記載しておく。またニッチな話だが備忘録なので許してほしい。

慣れてしまえば簡単で

  1. projectGeneratorで生成する。今回は便宜上ofxSampleとする。

  2. gitHubで同名のリポジトリを作る。(gitignoreをvisualstudioと選択すれば便利なことを知った)。

  3. ofxSampleのフォルダ上で右クリックをする。

  4. 何らかの方法でcrate repositoryする。私はtortoiseGitを使っているので、それの「git create repository here」を選んだ。これってtortoiseGit入れてなくても出るんだっけ?

  5. 絶対にmake it bareにチェックを入れエンター

  6. ofxSampleでプル。

  7. とりあえずコミット。destinationがRemoteになっているのでarbitary urlにチェックを入れてリポジトリのURLを入力

  8. プッシュ

  9. やったー!

とりあえずこの方法でできているんですが、正直別のやり方ありそうなのでいろいろ探ります。これでハッカソン2時間くらい無駄にしたのはいい思い出。

こんなところでつまづく人いるんかな…。では!

node.jsでexpressから静的ファイルを取得したら勝手にindex.htmlに飛ぶようになった話

はてな記法にたどり着くまでにちょっと時間がかかった(はてな記法を選択していなかった)のでいくぶん省略気味で
使っているのは
node.js: ?.?.?
npm: ?.?.?
express: ?.?.?

ファイル構成はこんな感じ(ファイル名マジで汚い…)
f:id:hungrykirby:20161206014941p:plain

やりたかったことはまずページを開いたらログイン画面が出て、認証されたらタイムラインが見れるというもの
でそのタイムラインの表示にindex.htmlを使っている。コードをかいつまむとこんな感じ

var express = require('express');
var app = express();
app.use(express.static(path.join(__dirname, 'public')));
app.get('/', function(req, res) {
  var html;
  html = '/auth/twitterでログイン';
  return res.end(html);
});

途中かなり端折っています。
で、ログイン成功後のコールバックで、index.htmlに飛ばしたかった。
のだが
勝手にindex.htmlに飛びます。

これにしばらく苦しみました。結論として
index.htmlには勝手に飛ぶ
とStack overflowかなんかに書いてありました(既定みたいなもんらしい)。(リンクを忘れてしまった…)
解決策はindex.html→main.html(mainじゃなくてもなんでも)にすればよし。

こういう需要のないよくわからないことを記事にして意味があるのかは別として次にこれを見返すことのないようにしたい。

Windowsにおいて右クリックメニューからAtomが消えた話(+最小化から戻らなくなった話)

こんにちは。ツタンラーメンです。記念すべき初記事ですね。プログラミングやラーメンのことを書きたくてはじめました。Tumblrやっていたんですけど少し使いにくかったので思い切って乗り換えました。プログラミングのことをTumblrで書いている人見たことないです。あと精神疾患についても書くつもりです。それはおいおい。HatenaはAPIが使えるらしくて始めたんですけどね。Tumblrも続かなかったのにHatenaが続くわけないのでそのうち放置気味になると思います。

 

Atomはプログラミングする上で非常に役に立つエディタです。いろいろできるし(ほとんど使いこなせてないけど)。ちなみに私はWindows10なのでその前提で読んで下さい。その前はnotepad++

notepad-plus-plus.org

でプログラミングしていたんですけど、あれはAtom使っちゃうと戻れませんね。(MacはCotEditer?なるものがあるらしいですが、どうなんでしょう。)

ただたまにおかしくなるんですよね。私だけでしょうか?最初インストールしたときは、たとえばjavascriptのコードを書いても色分けされないので、見づらかったです。
クリーンインストールでもとに戻りました。ただアンインストール→インストールするだけだとだめでした。それについては下記記事が詳しいかと

sevenb.jp

これで詰まりましたね。

で、ずっと使っていたのですが、急に起動したとき最小化の状態から戻らなくなりました。焦りましたね。Win+↑やってもだめ。Win+Tab後に選択してもだめ。とりあえず完全にアンイストールしたのちインストールしたけどだめ。

死んだと思いました。でわらにでもすがる思いで「Alt+Space→x」やったら普通に出てきました…なんだったのだ…。

今でもたまに最小化の状態から出てこなくなるけど上の方法で出してます。不便…。

 

で、ここからが本題。何回かインストールとアンイストールを繰り返したせいなのか、右クリックメニューからAtomが消えました。これがまたむっちゃ不便。結論はWin+Rでrededitと入力してレジストリいじって解決です

レジストリいじるのは危険なのでエクスポートなりなんなりでちゃんと元の状態に戻せるようにしておいてください!!!!この記事による不具合は一切責任を取りません!!!

解決策から先に書いておきます。

  • レジストリエディタを開く(開き方はいろんなサイトにあるので割愛)
  • 下記6つが消えているので書き加える(右クリック→新規→キーの追加)

コンピューター¥HKEY_CLASSES_ROOT¥*¥shell¥Atom
コンピューター¥HKEY_CLASSES_ROOT¥*¥shell¥Atom ¥ command
コンピューター¥HKEY_CLASSES_ROOT¥Directory¥Background¥shell¥Atom
コンピューター¥HKEY_CLASSES_ROOT¥Directory¥Background¥shell¥Atom ¥ command
コンピューター¥HKEY_CLASSES_ROOT¥Directory¥shell¥Atom
コンピューター¥HKEY_CLASSES_ROOT¥Directory¥shell¥Atom ¥ command

  • コンピューター¥HKEY_CLASSES_ROOT¥*¥shell¥Atomの中身を書き換える
    • (既定)の行で右クリック→修正で表示させたい表示名を入力(例:Open with Atom)
    • 既定の下のなにもないところで右クリック→新規→文字列値
    • 新規キー名をIconとする。
    • 同じく右クリックで修正を選択し、アイコンのパスと数字を選択する(例:C:\Users\username\AppData\Local\atom\app.ico,0)。ここで注意はダブルクォテーションはつけない
    • メニュー上の場所もいじりたい場合はPositionという新規キーを作成してTop, Middle, Bottomから選択
  • コンピューター¥HKEY_CLASSES_ROOT¥*¥shell¥Atom ¥ commandの中身も書き換える
    • atom.exeファイルのパス” “%1”を既定に追加
  • 同様の手順で残り4つも編集する。
    • ただし コンピューター¥HKEY_CLASSES_ROOT¥Directory¥Background¥shell¥Atom ¥ commandの部分は”%1”ではなく”%V”とする。
  • 以上!

なんでこれを記事にするか。アイコンを戻す方法とリンクを右クリックメニューに表示させる両方のことを書いている記事が全然なかった(ように思えた)からです!!これにむっちゃ苦労しました!!!時間返せ!!!

参考にしたサイト(右クリックメニューに表示させる方法はわりとあるので割愛)

デスクトップのコンテキストメニューに項目を追加する | 8倍速対応

ではでは~。