雑感」カテゴリーアーカイブ

Macでドキュメントアプリを作ってみてハマった事

XcodeでMac用のドキュメントアプリを作ったのですが原因不明の不具合に遭遇。

動画ファイルを再生するアプリを作り、動画ファイルをアプリにドラッグ&ドロップして再生テストをしていたのですが小さなファイルだと問題なし。でもギガを超えるファイルをドロップしたらアプリがフリーズしたような状態に。

アクティビティモニターで確認してみたらメモリーがどんどん増えているw
どうみてもファイルの中身をメモリに展開しているとしか思えない。
そこでアクティビティモニターにある「サンプルを収集」で情報を確認。
そしてはたと気がついた。
[NSDocument readFromURL:ofType:error:]
これの後にNSDataでファイルを読み込んでいる。

あれ?
アプリの雛形にこれは無くてこっちが…
[NSDocument readFromData:ofType:error:]
どうやら雛形のままだとファイル全体を読み込んでからデータを引き取る仕組みになっている。

なのでファイルURLを受け取るファンクションをオーバーライド。
無事問題なく動くアプリになりましたw

ちなみにテキストエディタなどのアプリを作るのならデータを受け取ったほうが簡単だと思います。

mac drag and drop large file failed

動画再生アプリを作ってみた

個人的に使いたい機能を追加した動画再生アプリを作ってみました。

といっても大した機能ではありません。
1分、10分、1時間先、あるいは前に再生を移動する機能。
再生速度を2倍、4倍、8倍と早くする機能。
機能ボタン

作り方は簡単。
AVKitにあるAVPlayerViewを組み込んでアプリを作成。
seekとplayImmediatelyという命令で時間を進めたり再生速度を変更する機能を追加しただけ。
探せばこういったアプリもあるかもしれませんがとりあえず私には十分な機能です。

サムネールを自動保存する仕組みを考える(2)

(1)の方法だと一覧が保存されるだけなので特定の人を選んで見るのには向きません。配信者ごとに分けて保存するためには全体ではなく、それぞれを分割して保存する必要があります。しかし表示される位置は毎回変わるし、いわゆる画面コピー機能ではほぼ無理です。

そこでアプリの出番です。
とはいえそんな都合の良いアプリは多分ないので何とかするしかありません。
ということでやり方の一つを提案します。

方法はわりと簡単。
サイトのhtml(Webページを表示するための言語)を読み込んで解析、欲しい情報を引き出します。

例えばこんな感じで表示されている一覧があるとします。

このページを開いた状態で開発メニューから「ページのソースを表示」を選び、出てきたソース表示の上にあるタブから「要素」を選びます。
左側に「三角形」のマークが出ている英字の文字列が出てきますからとりあえず
▶️<body と出ている所の三角形をクリック。

実際にはその行にカーソルを持っていくと一覧が出ている画面に薄青い四角形が表示されると思いますので配信者サムネールの一人分だけ四角が出るまでどんどん三角を開いていきます。

こんな感じ

この時の「要素」画面側の表示はこんな感じ
source
この部分がサムネール画像を表示しているhtml文です。
この場合はbackground-image(背景画像)がサムネール画像のようです。

ここまでが理解できたなら後はプログラムを作るだけ。
htmlを読み込む命令を書き(macならURLSession.shared,dataTaskなど)文字列を分割する命令を使って必要となる配信者名、サムネール画像のURLを人数分取り出します。
(例だと “lady-pic__image” がサムネールを識別するのに使えそうです)
そしてそれをパソコンに保存する命令を書き、何分か待って同じ作業を繰り返すループを組み込みます。

これが一つのヒントになれば幸いです。

サムネールを自動保存する仕組みを考える(1)

ライブ配信をしているサイトを見ている時に思った事はないですか。
何時も見る時間帯以外にはどんな人がいるのかなと。

サイトによってはオンライン(配信中)じゃない人も検索できますが配信中の状況はわかりません。それを見て見たいと思ったら何らかの自動保存アプリを作って一覧画面を保存してみる方法が一番簡単です。

方法は以下の感じ
パソコンがスリープしないように設定
ブラウザーでサイトの配信者一覧を出し、自動更新を設定
何らかのスクリプトで画面(ブラウザーウィンドウ)を定期的にファイル保存

これで配信している時の雰囲気ぐらいは掴めると思います。
その後どうするかは人それぞれですが。

Webに表示されている画像が保存できない

たまに思いますよね。この壁紙欲しいな、とかこの写真が欲しいとか。
良い悪いについては話しません。
もしかしたら保存できるかもしれない方法をご紹介。
できなかったらごめんなさい。
Safariでの話ですが他のブラウザーでも同様の事ができるかもしれません。

まずはSafariの設定を変更。
設定にある「詳細」を選び下の方にある「Webデベロッパ用の機能を表示」にチェックを入れます。設定するとメニューバーに「開発」が出ていると思います。

欲しい画像のあるページを開き「開発」メニューから「ページのリソースを表示」を選びます。アルファベットのテキストが表示されますがとりあえず無視。

欲しい画像のあるページに戻って「リロード」(URLの後ろにある丸い矢印)
さっき出たWebインスペクタに戻って左に出ている「画像」を開いて出ている名前を順番に押してみると右に画像が出るはずです(出ないものもあります)

うまく見つかったら名前を右クリックすると保存ができます(できない場合もあります)

もちろんサイトによっては何らかの対策がなされていて保存できないこともあります。
残念ですがこの方法では無理と諦めてください。

ちなみに短い動画もこの方法で保存できるサイトもありますが最近は少ないです。
(見つかるのは広告ぐらいかもしれません)