未熟学生エンジニアのブログ

TetsuFeの個人開発ブログ

TetsuFeはテツエフイー と読みます。FlutterやWeb周り全般、チーム開発について語るブログ

漫画雑誌用ブラウザを作成中② スクレイピングとカスタムセル

漫画雑誌用ブラウザを作成中です。

https://github.com/TetsuFe/WebBookBrowser

 

今回もスマホからの投稿なのでmarkdownが使えてません。

 

## 進捗

ここ2日で

- スクレイピングによるサムネイル画像の抽出

- サムネイル画像を表示するためのカスタムCellの作成

を行いました。

 

## スクレイピングについて

スクレイピングにはSwift4にも対応しているライブラリ、「Ji」を使いました。

 

## サムネイル取得に対応させたページ

今回はnhentai.netの

- /g/本のID/ページ数/
- /g/本のID

のリンクをお気に入り登録するときにサムネイル画像も保存されるようにしました。

あとは、どのサイトにしようか…

 

これでとりあえず、お気に入り登録したサイトのサムネイルを取得、Realmに保存するところまでできました。

 

## 今後

ただ、サムネイルが今は絶対ある前提で作成しているので、サムネイルを取得できない場合も対処できるように条件分岐を書く必要があります。

まずはそれを書いていきたいと思います。

 

また、

- お気に入り追加のボタンを画像にする

- ダウンロード中の待ち時間に「downloading...」などの表示をする

- 複数デバイス対応

 

なども行なっていきたいです。

漫画雑誌用ブラウザを作成中①

漫画雑誌用ブラウザを作成中です。

 

https://github.com/TetsuFe/WebBookBrowser

 

普通のブラウザに残したくないHな漫画をweb上で読む・お気に入り登録するときに使うためのものです。

売りとしては、

- 簡単・ワンタップのお気に入り登録

- すぐ見つけられる画像サムネイル表示

これを目標に作成します。

 

app storeに出しにくいのが残念ですが、なんとかストアに申請までを目標にします。

 

現在実装中の機能

- webビュー

- お気に入りサイト登録

    - Realm

- アドブロック

 

今後実装していきたい機能

- 複数タブを開く

- お気に入りサイトのサムネイル表示

- お気に入りの柔軟なタイトル設定

 

 

 

毎日GitHubにコミットする計画

経緯

iPhoneアプリ「Contributions for GitHub」をインストールしてみたら、毎日の自分のコミット量が見えるようになり、「コミットが少ない・・・」ということに気づきました。

f:id:swiftfe:20171114154101j:plain

github.com

そこで、「もっとコミットしなければ!」ということで、毎日GitHubにコミットすることにしました。

とりあえず11/14から毎日最低1コミットを目標にしていこうと思います!

目先のプロジェクト

  • WebBookBrowser

Web漫画のブラウジングやお気に入りリストを登録できる俺得アプリです。
エロ雑誌などのリンクをSafariのお気に入りに入れたくない場合などに使うのが主な用途です笑

github.com

自分のポートフォリオの作成+HTML・CSSの勉強として、ポートフォリオサイトを作成します。
冬のインターンに向けても使えるかな、という狙いもあります

github.com

  • 顔認識アプリ

顔認識していろいろしようというアプリです。
何をするかほとんど決まっていません

github.com

終わりに

「Contributions for GitHub」かなりいいアプリなので、iPhoneAndroidユーザはぜひ使ってみてください!

Qiitaの記事通りgit reset —hard して泣いた話

教訓

 

  • Gitのcommitを取り消したいときは、$ git reset —soft HEAD^ を使う。

  • むやみに$ rm -rf .gitは しない。

 

本題

Qiitaの記事で、

$ git commit を取り消したいときは、

$ git reset —hard HEAD^

すればいいよと書いてあったので、いいねも300件超えてたし、なんの気なしに実行した。

(ここで実は、前のcommitで追加した全てのファイルが消えていた・・・)

そして、フォルダ名を変更して(ここでファイル名を変更したのであれば、ファイルが消えたことに気づけていた…悪い偶然は重なるものです)

$ git add

$ git commit “改めてcommit”

すると、

nothing to commit

という文字が。なぜ?と思ったが、ここで自分は何が起きているか気づかずに「gitの不具合?」と思い、

$ rm -rf .git

をして、一からgit initし直せば直ると思って実行してしまった。

その結果、全てのファイルが完全に消えてしまった…(gitの記録が消えたので)

 

少ないファイル数だったが、戻すのに1時間かかった。

 

今度からは$ git reset —softを使おう。

 

そう強く心に決めると同時に、あのQiita記事を恨むのであった…

初心者は説明も読まず雰囲気でコピペを実行してしまうこともあるはず。おそらく他にも犠牲になった人がいるだろう…QiitaにBadボタンが追加されていれば、犠牲者たちは確実に押しただろう。(あまりいいことではないが)

Bad評価があれば、もう少し注意深く読むようになるのではないか。Qiitaの開発チームの方には、実装を強く願います。

 

でも—hardは注意が必要ということで、いい勉強になりました。

 

P.S. そもそも--hardがいる場面って結構少ないのでは、と思いました

UnityをHigh Sierraで使うとカーネルパニックになる場合の対処法(*必ず解決するとは限りません)

UnityがHigh Sierraカーネルパニックを起こす

最近、High Sierraにバージョンを上げたところ、Unityの調子が悪くなり、3Dのゲームになると、頻繁にカーネルパニックを起こして困っていました。 そこでUnityのフォーラムを見るととりあえずの経験則(英語)が書いてあったので、それを日本語で書いておきます。(訳ではないです)

解決法

  • Unityのバージョンを2017.1.1p3以降に変更する
  • Unityのレンダリング設定をOpenGLからMetalに変更する

この二つです。

Unityのバージョンを2017.1.1p3以降に変更する

まずは、Unityのバージョンを2017.1.1p3以降にしましょう。

  1. 現在のUnityをアンインストール(普通に「アプリケーション」にあるUnityのフォルダを削除すればOK)
  2. Unityのバージョンを2017.1.1p3以降をここからダウンロード・インストール

(私は2017.1.1p4にしました)

Unityのレンダリング設定をOpenGLからMetalに変更する

これは、プロジェクトごとに行う必要があります(多分)
なので、プロジェクトを開いてから設定を行います。プロジェクトを開いて設定を変更する前に落ちてしまう可能性もあります・・・

  1. プロジェクトを開く
  2. Edit > Project Settings > Playerを選択すると、Inspectorが開くので、Player Settings > Other Settings > Metal Editor Support にチェックを入れてください。

そのまま保存できればOKです。

これで私の環境では、とりあえず3Dゲームもうまく動くようになりました。
さらにいい方法があるよ!という方はぜひコメントで教えてください。

追記

https://forum.unity.com/threads/unity-and-macos-10-13-high-sierra.474527/page-5

ここにフォーラム原文があります。

  • disable MSAA in Quality Settings

これも有効かもしれないので、もしMetal Editor SupportをONにしてもエラーが出る場合は、これも設定すると良いと思います。

pythonでファイルパスからファイル名のみを取り出して新しいファイルパスを作成する

環境

python3

やりたいこと

例えば、globなどで複数のファイルのファイルパスを取得して、そのファイルに何らかの変更を加えたファイルをちょっとファイルパスを変えて保存したいとします。

例えば、HTMLファイルから、HTMLタグを除去し、そのファイル名を./eliminated_tags/example.txt という形で保存したい時を考えます。

このとき、以下のようなディレクトリ構成であるとします。

  • eliminate_html_tags.py
  • html
    • example1.html
  • eliminated_tags
    • ここにHTMLタグを削除したファイルを置きたい
import re
import glob

filenames = glob.glob("./html/*")
for filename in filenames:
    with open(filename, 'r') as html_f:
        html = html_f.read()
        text = re.sub(r'<[^>]*>','\n',html)
        text_filename = re.search(r"/[^/]*\.txt",filename).group().replace('/','').replace('.html','.txt')
        with open('./eliminated_tags/'+text_filename,'w') as text_f:
            text_f.write(text)

上のコードの中の以下の3行がポイントです。 re.searchで、'/example.html'の部分を取り出し、
str.replaceで、'example'の部分を取り出しています。

text_filename = re.search(r"/[^/]*\.txt",filename).group().replace('/','').replace('.html','.txt')
        with open('./eliminated_tags/'+text_filename,'w') as text_f:
            text_f.write(text)

このように書くと、

  • eliminate_html_tags.py
  • html
    • example1.html
    • example2.html
    • ...
  • eliminated_tags
    • example1.txt
    • example2.txt
    • ...

といったような形で保存できます!

Django で Could not parse the remainder エラー

Djangoを使っていたら、

Could not parse the remainder: '['user_talk']' from 'dump['user_talk']'

というエラーがでました。

どうやら、DjangoではtemplateでDictionaryを扱うときは、
dump['user_talk']のようにはかけないらしく、

dump.user_talk

のように書かないといけないということでした。

{% block content %}
<div>
    {% for dump in dump_list %}
        <p>{{ dump.user_talk }}</p>
        <p>{{ dump.ai_talk }}</p>
        {% empty %}
                <h2>Sorry, no historys</h2>
    {% endfor %}
</div>
{% endblock %}

のように書き換えたところ、エラーは出なくなりました。