te-touのブログ

音楽制作・車・プログラミング・旅行・その他考えてる事など、備忘録的なことも含めて個人的なページです。

Rakuten UN-LIMITを契約(めっちゃWi-Fiがダメダメなので)

 

2020年4月以降、クラウドsimを使った容量無制限サービスの「めっちゃWi-Fi」が使い物にならないくらい速度が出なくなってしまいました。

www.te-tou.tokyo

なので、巷で話題の楽天アンリミットを契約しました。

東京にいるなら、23区内を拠点としている場合は現状かなり良い契約だと思います。楽天ポイントもたまるし。

Wi-Fiルーター的に使えれば良いと考えています。

折角なので、ちょっと興味があった楽天ミニも合わせて購入しました。

 

早速、Rakuten UN-LIMITの公式サイトから申し込み。

 

楽天ミニ到着

申し込みからちょうど2日で荷物が自宅に届きました。

f:id:te-tou:20200511004234j:plain

Rakuten MINI

アンドロイド端末のRakuten MINIはeSIMにのみ対応しているので、simカードはありません。

f:id:te-tou:20200511004945j:plain

内包物は至ってシンプルです。

コネクタはUSB~C。

f:id:te-tou:20200511004455j:plain

Rakuten MINI と iPhone11 大きさ比較

Rakuten MINIに新色としてクリムゾンレッドとかありましたが、手持ちの物と統一感があった方が洒落てるかと思い白を選択しました。

とりあえず箱から出して、iPhone11との大きさ比較。

Rakuten MINIかなり小さいです。あと、この白は高級感があって良いです。

逆に、iPhone11は大きい。私は手があまり大きくないので片手で使うのは結構しんどいです。

設定

眺め終わったら、電源を入れて設定してゆきます。

f:id:te-tou:20200511005617j:plain

Rakuten MINI 手順書

基本的に手順書に沿って操作してゆけば良いので簡単です。

いろんな人がこの設定方法を記事にしているので、迷ってもなんとかなります。

しかし、仕方ないことですが「〜アプリに〜を許可しますか」で必ず「はい」を選択しないといけないのはやや抵抗があります。しかし、仕方ない。

 

eSIMの設定も記憶に残らないくらい簡単に出来ました。楽天モバイルのアプリの最新版をダウンロードして、どこかのボタンを一つ押す程度の作業でした。

これで楽天モバイルのネットワークにつながります。

速度(世田谷区付近)

速度がどんなもんか見てみます。(20200510.世田谷区付近)

f:id:te-tou:20200511010247j:plain

Rakuten UN-LIMIT速度

結構良い方だと思います。

時によっては50Mbpsくらい出たりもします。

 

翻って、めっちゃWi-Fi。(20200510.世田谷区付近)

 f:id:te-tou:20200511010434p:plain

もはや死亡レベルです。yahooのトップ画面表示するのもやっとです。

これで毎月料金取られるのには不満です。改善するまで無料にしてくれないかな。

悪口を言わないことにはおさまりません。

まとめ

ともあれ、楽天アンリミットが開通しました。

ただ、立川周辺の都下を寝城にしているので対応エリアが早く広がって欲しいです。

 

Rakuten MINIの使用感については、小さいながらもそんなに不便では無いです。

おそらくqwerキーは相当使いづらいとは思いますが、フリック入力で日本語打つ分には全然問題ないです。

当面は「ポータブルプレイヤー兼、Wi-Fiルーター + α」みたいな感じで使えば良いと思ってます。電話機としては優秀ですが、これひとつメイン端末にするには勇気が必要です。

ついでに付与ポイント予定

オンラインから手続きすると楽天ポイントがジャンジャン貯まりますね。

SMSアクティベーションを正しく行うことがポイント付与の条件みたいです。

network.mobile.rakuten.co.jp

期間内にちゃんと手続きすると還元されるポイントはざっと下記の通りです。(多分間違っていないと思います。)

  • オンライン手続き→3000p
  • 申し込み事務手数料ポイントで返還→3300p
  • 楽天ミニ購入+プランセット→5000p
  • 紹介コード適応(楽天モバイルID)→2000p(紹介した人は3000p)

上記合計で13,300ポイントですね。端末買ったり事務手数料払ったりするんで現金は使いますが、これだけポイントバックされればかなりお得な気がします。

紹介コード適応は手続きの途中で入力する必要があるのですが、よく注意しないと見逃してしまいそうな場所にあるので事前にどこに入力するか調べてから手続きした方が良さそうです。

 

 

www.facebook.com

www.youtube.com

Django ListViewで2つ以上の小数点を持つフィールドの計算結果を求める。(テンプレートタグ)





Djangoのテンプレートで四則演算を行うときの方法です。
単純にテンプレート上でA+Bみたいなことが出来なかったので調べました。

整数の計算であれば、前回の記事で書いた「項目1|add:項目2」のように書けば足し算してくれます。
www.te-tou.tokyo
しかし、小数点の計算計算は出来ません。

まさか四則演算でハマるとは思ってもいませんでしたが、これを実現するために関数を使う必要があるようです。
なので、「テンプレートタグ」というものを使います。

テンプレートフィルタとテンプレートタグの違い

ざくっと受けられる引数に違いがあるようです。

  • テンプレートフィルタ(引数2つまで)
  • テンプレートタグ(引数2つ以上使用可能)

今回は引数を2つ以上使いたいので、テンプレートタグを使用します。

環境
  • python : 3系
  • Django : version 3.0.2
用例

scoreというアプリがあるとします。テスト点数を入力してゆくアプリです。
そしてその入力したテストの点数の合計値をListViewで表示させます。
英語とかの点数に小数点はなかなかないとは思いますが、細かいことは考えず。
modelsの「scoreテーブル」に以下のフィールドを持っている。

  • 名前
  • 英語得点
  • 国語得点
  • 数学得点
  • 理科得点
  • 社会得点

ListViewで「英・国・数・理・社」の合計点数を表示する。

関数を作る(テンプレートタグ)

まず、templatetagsというフォルダをtemplatesと同じ階層に作成します。
そのフォルダの中にテンプレートタグ(関数)ファイルを作成します。
名前はなんでも良いので、sum_points.pyとします。
省略
┗score
 ┗templates
 ┗templatetags ←フォルダを作る。
  ┗sum_points.py ←テンプレートタグファイルを作成する。

sum_points.pyの中身

from django import template
#テンプレートライブラリに登録する
register = template.Library()
@register.simple_tag

#関数名はpoints
#引数5つを受け取り、足し算した結果を返り値へ送る
def points(value1, value2, value3, value4, value5):
    return value1 + value2 + value3 + value4 + value5
ソース

models

from django.db import model

class Score(models.Model)
          name = models.CharField(
                 verbose_name = '名',    
                 max_length=10,
           )
           #得点はフロート型で小数点以下を入力可能とする。
           engPoint = models.FloatField(
                 verbose_name='英語',
                 default=0.0
           )
           natPoint = models.FloatField(
                 verbose_name='国語',
                 default=0.0
           )
           matPoint = models.FloatField(
                 verbose_name='数学',
                 default=0.0
           )
           sciPoint = models.FloatField(
                 verbose_name='理科',
                 default=0.0
           )
           socPoint = models.FloatField(
                 verbose_name='社会',
                 default=0.0
           )

views

from django.shortcuts import render

class ScoreListView(ListView):
          model = Score,
          template_name = 'score/score_list.html'  #使用するテンプレートを指定

urls

from django.contrib import admin
from django.urls import path

from name.views import ScoreListView

urlpatterns = [
          path('score', ScoreListView.as_view(), name="score"),
          path('admin/', admin.site.urls),

いつも通りパスを通して。

template (score_list.html)

<div>
    {% for score in object_list %}
    <tr>
        <!-- リストの一番左にNoをカウントアップして自動的につける -->
        <td>{{ forloop.counter }}</td>

        <td>{{ score.name }}</td>

        <!-- 英国数理社の得点を入力 -->
        <td>{{ score.engPoint }}</td>
        <td>{{ score.natPoint }}</td>
        <td>{{ score.matPoint }}</td>
        <td>{{ score.sciPoint }}</td>
        <td>{{ score.socPoint }}</td>

        <!--  合計得点を表示する -->
        {% points score.engPoint score.natPoint score.matPoint score.sciPoint score.socPoint %}
        <!--  関数名・引数1・引数2・引数3・引数4・引数5 を書くと、結果が返り値として表示される -->
    </tr>
    {%  endfor %}
</div>
まとめ

これで同一レコードの四則演算が出来ます。
querysetだとテーブルに対してフィルタとかかけるような感じなので、用途が違いますね。もしかしたら、querysetとかでもっと賢い方法があるかもしれませんが。




www.facebook.com
www.youtube.com

Django templateで変数を使う(with ~ as 変数名)ついでに文字連結




先日、Djangoでviewsからtemplateへcontextを使って変数を渡す方法を書きました。
www.te-tou.tokyo

検索の仕方が悪いのか、単に理解不足なのかDjangoでの変数の使い方が分かりづらかったので備忘です。
熟知している人が書いてる説明は要領がとてもよく書いてあり、痒いところに手が届かない感じです。

今回はtemplateだけで変数を使う方法です。

環境
  • python : 3系
  • Django : version 3.0.2
用例

前回の記事と同じ用例とします。

ex)use case
かなりどうでも良い思いつきの用例です。

細かいことは考えず、
今回nemeアプリというのを作ってテーブル項目(テーブル名:FullName)に氏名を持っているとします。
ついでだから、「つのだ☆ひろ」みたいに氏名の間に☆を入れようと思いつきました。
じゃあ、引数に☆を持たせて実装しよう。という流れです。

ソース

models

from django.db import model

class FullName(models.Model)
          firstName = models.CharField(
                 verbose_name = '名',    #太郎
                 max_length=10,
           )
           familyName = models.CharField(
                 verbose_name = '氏',    #テスト
                 max_length=10,
           )

views

from django.shortcuts import render

class FullNameListView(ListView):
          model = FullName,
          template_name = 'name/fullname_list.html'  #使用するテンプレートを指定

viwsで変数を書く場合は、ここにget_context~みたいのを書きました。

urls

from django.contrib import admin
from django.urls import path

from name.views import FullNameListView

urlpatterns = [
          path('fullname', FullNameListView.as_view(), name="fullname"),
          path('admin/', admin.site.urls),

いつも通りパスを通して。

template (fullname_list.html)

{% with  FullName.familyName|add:"☆"|add:FullName.firstName as NAMAE %}
    <div class="fullname">
         {{NAMAE}}
    </div>
{% endwith %}

これにより、変数「NAMAE」には「テスト☆太郎」が代入されます。
そして、templateに{{NAMAE}}と書けば「テスト☆太郎」が表示されます。

まとめ

{% with ~%} から {% endwith %} の間で指定した変数が有効になる模様。
上記例では、
{% with テーブル項目|add:"リテラル文字"|add:テーブル項目 as 変数名%}という記述で、「~|add:~」で文字連結をしています。

addは項目が数字項目の場合は、足し算となる。(ただし、整数として処理される。)
例えば、
X=1, Y=3 という項目の場合、「X|add:Y as ans」と書けば{{ ans }}には4という結果が代入されます。
しかし、
X=1.5, Y=3 という項目の場合、「X|add:Y as ans」と書くと{{ ans }}の結果は4となります。(あくまで整数)
小数点の計算をしたい場合は、カスタムタグを定義するようです。(数字を足し算ではなく文字連結したい場合も同様)
今の悩みは、2つ以上の引数を持つカスタムタグをどう作るかです。
→解決したので、下記の記事をどうぞ。
www.te-tou.tokyo




www.facebook.com
www.youtube.com

Django ListViewで引数を使う(context)




int i = 90
char x = "変数"  とか、多分プログラミングの「さしすせそ」。
ですが、Djangoでこれのやり方がよく分からなかったので色々調べました。
備忘です。

環境
  • python : 3系
  • Django : version 3.0.2
用例

ex)use case
かなりどうでも良い思いつきの用例です。

細かいことは考えず、
今回nemeアプリというのを作ってテーブル項目(テーブル名:FullName)に氏名を持っているとします。
ついでだから、「つのだ☆ひろ」みたいに氏名の間に☆を入れようと思いつきました。
じゃあ、引数に☆を持たせて実装しよう。という流れです。

contextというのをViewsに書いて引数を設定し、templateで引数を受け取って画面に表示させます。

ソース

models

from django.db import models

class FullName(models.Model)
          firstName = models.CharField(
                 verbose_name = '名',
                 max_length=10,
           )
           familyName = models.CharField(
                 verbose_name = '氏',
                 max_length=10,
           )

views

from django.shortcuts import render

class FullNameListView(ListView):
          model = FullName,
          template_name = 'name/fullname_list.html'  #使用するテンプレートを指定
          def get_context_data(self, **kwargs):
                context = super().get_context_data(**kwargs)
                context["star"] = "☆"
                return context

今回重要なのは、def get_context_data〜return contextのところですね。
context = super()でFullNameListViewクラスを上書き?オーバーライドしてる感じかと。
context["~"]で変数を作って、値を代入。
returnで変数を戻す(送る?)という感じかと思います。

urls

from django.contrib import admin
from django.urls import path

from name.views import FullNameListView

urlpatterns = [
          path('fullname', FullNameListView.as_view(), name="fullname"),
          path('admin/', admin.site.urls),

いつも通りパスを通します。

template (fullname_list.html)

<div class="fullname">
         {{firstName }} {{star}} {{familyName}}
</div>

テンプレートに{{~}}で挟んで項目名(引数)を書けば、「苗字☆名前」のように表示される。
この辺りの受け渡しがなかなかややこしいな。というのが実感です。




www.facebook.com
www.youtube.com

めっちゃWi-Fi 都下ではつながった

 

最近、めっちゃWi-Fiがつながらないことが多いです。

www.te-tou.tokyo

 

しかし、今日の立川近辺では調子良いです。

f:id:te-tou:20200425204638p:plain

めっちゃWi-Fi 都下部では調子良い

なんか、場所によってつながる・つながらない(速度)が極端に違うみたいです。

 

ちなみに、4月25日の15時頃の高井戸周辺ではYahooすら開くのが困難な速度でした。

f:id:te-tou:20200425205124j:plain

ダウンロードが遅すぎて、全然読み込めてません。

まあ、この時期に大事なメッセージだけはちゃんと表示されてます。

 

同時刻に都心部と都下部で速度を計測していないので正確には分かりませんが、立川周辺では調子良さそうです。

 

あー、おうちで過ごしたい。

 

 

www.facebook.com

www.youtube.com

めっちゃWi-Fi 全然つながらない(遅い)

 

最近めっちゃWi-Fiが全然つながらなくて、ただの文句です。

 

めっちゃWi-Fiがめっちゃつながらないです。

または、つながってもめっちゃWi-Fiがめっちゃ遅いです。

f:id:te-tou:20200424192010j:plain

めっちゃWi-Fi 遅い

2020年4月24日の15時ごろ世田谷区付近の速度です。

使い物にならないくらい遅い。

www.te-tou.tokyo

 3月に速度を計測したときはこんな事にはならなかったのですが、最近リモートワークする人が増えたのが原因か分かりませんがとにかくつながらない。

今日は移動する必要があったので、立川〜調布〜川崎〜世田谷あたりにいました。

車で移動中にAmazon musicで音楽をかけていたのですが、ストリーミング再生すらできませんでした。なんなら、最悪はAmazon musicのトップ画面すら読み込めませんでした。

 

最近こんなことが多く、深夜でも同様の事象が発生します。

f:id:te-tou:20200425004039p:plain

めっちゃWi-Fi 死ぬほど遅い

2020年4月22日・午前1時ごろです。

もはや奇跡的な数値です。

 

制限がかかるようなネットワークの占有なぞしてません。

本体の電波はバリバリ入っています。

本体の電源を入れ直しても効果なし。

 

おそらく、どんなときもWi-Fiとかも同じ仕組みなので同じような事になっているのかとは思います。が、どんなときもWi-Fiは障害情報をサイトやツイッターで公開しているみたいですが、めっちゃWi-Fiにその手の情報公開の仕組みがないのか何が起こってるのか分かりません。

ただつながらないだけ。

 

ほんとかどうか分かりませんが、このクラウドSIMは使用上限なしと言っていますが実はキャリア側との契約で上限値が決まっている。なので利用者が多いと上限に引っかかって速度制限がかかり、翌月初になると解決する。とどっかのネット情報に書いてありました。

これじゃ仕事にならんです。

 

快適通信という宣伝文句を履行できてないので、無料で解約させてくれないかな?

 

でも、以前ニューメキシコでWi-Fiがつながらなくなった時よりも心穏やかです。

www.te-tou.tokyo

この手のトラブルは日本ならイライラする程度で済みますが、知らない地では最悪命の危険すら感じます。 

命の危険はないから、どうなるか少し様子を見る必要ありです。

 

 

 

www.facebook.com

www.youtube.com

ウェブアプリを作る。8(No migrations to apply)




(ローカル環境で開発中。SQLite3での話です。)
Djangoでアプリを作成中に一度マイグレーションをした後、テーブル定義を変更したくなりました。
そのため、models.pyを書き換え(add column)再びmakemigrationsを行ったところ幾多の問題にぶち当たりました。
f:id:te-tou:20200405012127p:plain
その(かなり強引な)解決法のなぐり書き備忘です。

その1

テーブルにデータが入ったままマイグレーション

./manage.py makemigrations
./manage.py maigrate

上記のコマンドを打っていると、「追加したカラムに初期値を設定してください。」的なメッセージが出ます。

You are trying to add a non-nullable field '~追加したカラム~' to user without a default;
we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows with a null
value for this column)
 2) Quit, and let me add a default in models.py
Select an option:

1)を選択すると、初期値を設定する
2)を選択するとマイグレーションを一旦やめて、models.pyに初期値を設定する
みたいな感じだと思います。

そこで、1を選択して初期値を続けて入力します。
今回、初期値を入力した際に数値項目に文字列を入れてしまったようでおかしな事になりました。
とりあえず、migrateコマンドを打ってサーバーを起動して画面を確認しようとすると表示出来ません。

この対策としては、migrationsフォルダ内の「__init__.py」以外のファイルを削除します。
「__pycache__」フォルダは残して、その中のファイルも削除します。
とはいえ、いきなり削除は怖いので拡張子をリネーム(.pyXXXとか)しました。

これで再度makemigrationsコマンドを打って、createtableは成功しました。

その2
./manage.py maigrate

上記コマンドを打つと、ターミナルに

Running migrations:
No migrations to apply

マイグレーションを適用できません。的な。
多分、テーブルにデータが残ってたりするから更新がうまくできないのだろうと推測しました。
なので、db.sqlite3ファイルの中身を全削除して0バイトファイルにします。

その後、再びmaigrateコマンドを打って

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, ~~~

無事に適用できました。

まとめ

テーブル定義を更新してマイグレーションに失敗したら以下の通り。

  • migrationsフォルダ内の「__init__.py」以外のファイルを削除
  • migrationsフォルダ内、「__pycache__」フォルダは残して、その中のファイルも削除
  • db.sqlite3ファイルの中身を全削除して0バイトファイルにする

www.facebook.com