PeaceJetのブログ

金融系の社内エンジニアをやりながら、マーケティングやプランナーなども

【Raspberry Pi】 VNCの画面解像度を変更する方法

VNCを利用して、リモートホストからRaspberryPiのデスクトップを閲覧する場合、
画面の解像度が低くくて操作が困難だったなんてことありませんか?

自分は、これ結構悩まされて、でもReal VNCには設定画面がないようだし・・・どうしたらいいの?と思っていたら、解決策がありました。

デフォルトでは、画面解像度が「720×480」に設定されているようです。

① ターミナルから、以下のように打ち込んでコンフィグ画面を出します。
sudo raspi-config
② 7番目の「Advanced Options」を選択します。

f:id:PeaceJet:20170707232641p:plain

③ 「A5 Resolution」を選択肢します。

f:id:PeaceJet:20170707233132p:plain

④ 解像度を変更します。

f:id:PeaceJet:20170707233205p:plain

⑤ 再起動します。
sudo reboot

以上の手順で、VNCする時にビューワーの解像度が低すぎて、作業できない問題が解消されるはずです。

「720×480」で作業するのは、辛すぎですTT

【jQuery】$(this)とthisの違い

$(this)とthisの違い

TypeError: x.attr is not a function [詳細]

このような形で、怒られたことありませんか?

チェックボックスでチェックされた直近の親要素のIDを取得しようと思ったときに、こんなトラブル・・・。

$("input[name='checkbox']").change(function () {
    var s = this.closest('div');
    var t = s.attr("id");
    console.log(t);
});

f:id:PeaceJet:20170614112924p:plain

とりあえず、typeofで型をチェックしてみるもobjectだった。
調べてみると・・・。

オブジェクトのメソッドを扱う場合には、$(this)としないといけないようです。

$("input[name='checkbox']").change(function () {
    var s = $(this).closest('div');
    var t = s.attr("id");
    console.log(t);
});

参考にさせて頂きました。
jQueryの$(this)とthisの違い : ずっと工事中

【Javascript】クエリパラメータを取得してhiddenに入れる方法

JavaScriptで、URLのクエリパラメータを取得して、hiddenに値を格納したいというニーズがあったので紹介します。

たとえば、以下のようなURLがあり「hoge」と「huga」の値を取得したいと考えているとします。

http://www.example.com/index.htm?hoge=5454&huga=4545

自然に取ってくることが出来ないものなので、以下の関数を使用します。

var getUrlVars = function (){
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
	for(var i = 0; i < hashes.length; i++) {
		hash = hashes[i].split('=');
		vars.push(hash[0]);
		vars[hash[0]] = hash[1];
	}
	return vars;
}

//戻り値は配列です。

準備が出来たので、まず、値を取得してみましょう!

//JavaScriptで取得する場合
var val_hoge = getUrlVars()['hoge'];
var val_huga = getUrlVars()['huga'];

//値を確認
console.log(val_hoge);
console.log(val_huga);

上記の操作で、値が取得できることが分かりましたので、これをhidden属性のinputにセットしてあげます。

<form name="form">
    <input type="hidden" name="elem1" value="" /> //hoge
    <input type="hidden" name="elem2" value="" /> //huga
</form>

上記のようなHTML文になっていた場合、以下のようにしてセットします。

document.form.elem1.value = val_hoge;
document.form.elem2.value = val_huga;

$("input[name='elem1']").val("hoge");
$("input[name='elem2']").val("huga");

これで、送信してあげればセットされた値が取れるはずです。
どの広告からの流入なのかとか、どのフォームが使用されたのかといった判定に使えるかもしれないですね。

【YouTube】Bash on Ubuntu on WindowsでYouTube動画をダウンロードする方法

はじめに

※この記事は、違法なダウンロードを推奨するものではありません。
※この記事を読んで実行したことで発生したいなかる事象に関して、著者は責任を負いません。
YouTubeはそもそもダウンロード行為を禁止しています。
www.youtube.com

Bash on Ubuntu on Windowsに「youtube-dl」をインストー

pipをインストールする。
$ sudo install python-pip

pipとは、Pythonのパッケージ管理ツールのこと。

以下の操作はrootでは作業していない設定になっていますが、
自分の場合、rootで作業しないとエラーしてインストールできませんでした。

もしも、エラーしてしまった場合にはrootで作業すると解決する可能性ありそうですね。

youtube-dl」をインストールする
$ sudo apt install youtube_dl

youtube-dl

libav-toolsをインストールする
$ sudo apt-get install -y libav-tools

これで、準備が完了しました。
コマンドに関しては、参考となるブログ樣を掲載しておりますので、
そちらを参考にしてみてください。

たとえば、m4a形式で、かつ、情報を合わせてダウンロードする場合には、
以下のようなコマンドを使用すると良さそうです。

$ youtube-dl -f 140 [URL] --add-metadata -x

※参考サイト
qiita.com
cartman0.hatenablog.com

【VBA】データが入力されている範囲を選択する方法

データが入力されている範囲を選択する方法

メモ的に書いていきますので、読みにくいかもしれません。

まず、シートを指定して呼び出せるFunctionプロシージャを作成します。

'こちらで、データが入力されいている最終行と最終列を取得します。
Public Function LastRowNumber(ByVal Ws As Worksheet) As Long
    
    Dim X As Long: X = Ws.Cells.SpecialCells(xlCellTypeLastCell).Row
    
    LastRowNumber = X
   
End Function
Public Function LastColumnNumber(ByVal Ws As Worksheet) As Long
    
    Dim Y As Long: Y = Ws.Cells.SpecialCells(xlCellTypeLastCell).Column
    
    LastColumnNumber = Y
   
End Function
.
'呼び出し方
Public Sub GetLastNumber()

    Dim Ws As Worksheet: Set Ws = ThisWorkbook.Sheets("Sheet1")

    MsgBox LastRowNumber(Ws)
    MsgBox LastColumnNumber(Ws)

End Sub

RangeオブジェクトをFunctionの戻り値にする方法

Public Function GetActiveRange(ByVal xWs As Worksheet) As Range

    Dim sRn As Range: Set sRn = xWs.Cells(1, 1)
    Dim eRn As Range: Set eRn = xWs.Cells(LastRowNumber(xWs), LastColumnNumber(xWs))
    Dim rRn As Range: Set rRn = xWs.Range(sRn, eRn)
    
'    ここで、注意なのが戻り値がオブジェクトの場合には、Setしてあげないとエラーになります。
    Set GetActiveRange = rRn
    
End Function

こんなエラーです。
f:id:PeaceJet:20170606155913p:plain

最後に以下のSubプロシージャを使用して、アクティブなRangeを得ることができます。

Public Sub getRange()

    Call GetActiveRange(ThisWorkbook.Sheets("Sheet1")).Select

End Sub

【Pythonista3】iPhoneをサーバーにする方法【StaSh】

最近は、あまり触っていなかったPythonista3ですが、ビルトインサーバーの件があって、色々考えているうちに、「そう言えば、Pythonista3ってサーバー立てられるの?」ってことになりまして…Stashを使ってサーバー立ててみました。

Stashをインストー

Stashとは、早い話がBashの機能制限版って感じに思います。この表現があっているか、否かは分かりません。自分が思いついた中で、以下のコマンドは出来ませんでした。

$ date
#出来ません。

インストールなどは、ひとりぶろぐ様の記事を参考にさせていただきました。
Pythonista 3にシェル、Dropbox同期・ダウンロード機能などAppleが許さない機能を追加する

このStashってのが、また、いい感じにバケモンで…ひとりぶろぐ様の言葉をお借りすると。

Pythonista 3は別に仕様をオープンしているわけでもAPIを公開しているわけでもありません。Pythonista 3をリバースエンジニアリングして作られています。

Pythonista 3には、Pythonista 3の合法ドラッグのような危険な魅力を嗅ぎ付けてきた、このような黒魔術を使うユーザーが集っていてなかなか楽しいのです。

StaShは、Pythonista 3のタブ内でターミナルエミュレータとして動作する部分と、その中で動作するコマンドから成る、一つのCUI作業環境です。Windows 10における「Windows Subsystem for Linux」のようなものというと言い過ぎかもしれませんが、StaShをPythonistaにインストールすると、pip、git、ls、rm、cd、pwdwgetcurltelnetssh、scpなどなど、普段我々がPC/Mac上で使っているおなじみのコマンドがPythonista 3上で使えるようになります。

引用元 : ひとりぶろぐ様
Pythonista 3にシェル、Dropbox同期・ダウンロード機能などAppleが許さない機能を追加する

ここら辺で、自分も「そう言えば、Pythonista3を買う時に、この記事読んだけど…あの時は、凄さがイマイチ分からなかった。てか、Siriまでいじれるの?!」…という独り言をいってました。

Stashからサーバーを立てる

お決まりのコマンドを叩いてみます。

$ python -m SimpleHTTPServer 8080

すると…。
無事、立ち上がりました!
ブラウザからローカル・ループバック・アドレス「127.0.0.1」とポート番号「:8080」を続けて入力して実行してみます。

127.0.0.1--[27/May/2017 07:23:39] "GET / HTTP/1.1"200 -」という、アクセスログがちゃんと出ています。


「index.html」などを置いておけば、普通にWebページが開いちゃいます。
ポートフォワーディングすれば、外部からのアクセスもいけると思います。

ただ、ひとつ注意なのですが・・・。
サーバーが起動している状態で終了してしまうと、プロセスが終了せず、次回以降エラーになる可能性があるので。

以下の様にプロセスをキルしておきましょう!

$ jobs
# 動いているプロセスを確認

$ kill [プロセス番号]

【Python】ビルトインサーバーに繋がらない場合【PHP】

ポートの設定を見直そう

最近、ビルトインサーバーを立てて制作物の内容を、他のホストから確認してもらっています。

そんなときに、確認できないホストが出てきてハマった部分がありました。

まずは、サーバーの建て方

Python
# Python2
$ python2 -m SimpleHTTPServer 8080

# Python3
$ python -m http.server 8080

# Serving HTTP on 0.0.0.0 port 8080 ....
PHP
$ php -S 0.0.0.0:8080

# Listening on http://0.0.0.0:8080

# 他のホストからの通信を受ける場合には、上記のように書いて下さい。

このようにすると、それぞれ「0.0.0.0:8080でListenする」というメッセージが出てきて待受状態になります。

ホストからの応答がありません

この状態で、他のホストからアクセスしてもらったのですが・・・。

「ページを表示できません」と出て、上手く行きません。

通常、アクセスが成功した場合はサーバーのログが表示され、

10.10.40.44 - - [25/May/2017 23:00:09] "GET / HTTP/1.1" 200 -

# 上記のようにログが残される。

このとき、IEに備わっている接続診断をしたところ・・・。

f:id:PeaceJet:20170526030808p:plain

上記のようなメッセージが表示されました。

解決策

サーバーを立てたホストに原因がありました。

ファイアウォールによるブロックを解除する。

ファイアウォールによってTCP通信がブロックされていました。

ブロックを解除にしてあげると、素直に動きました。

あまりないと思いますが、お役に立てれば嬉しいです。