スキップしてメイン コンテンツに移動

投稿

Secure BootのDebianで、Nvidia kernel モジュールを使えるようにする。

まだしばらく先のことですが、Windows10のサポート終了は確実にやってきます。こちらのマシンはWindows11に対応したものがほとんどないので、早いうちからDebian/mate desktopに移行しようと考えています。そこで1台、NvidiaのGraphicsカードを刺したマシンがあるので、それからDebian/mate desktopをインストールしたので、そのメモです。 まず、Debian/mate desktopのLive USBを作成します。ダウンロードは こちら からおこないました。 これをWindowsではrufusをつかってUSBにイメージを書き込みます。rufusの場合、自動でパーティションを作成してくれます。ddを使う場合は、ddした後に、fdiskで残りのエリアをlinuxのパーティションにします。追加したパーティションが例えば/dev/sdb2だったとすると、今度は、mkfs.ext4 /dev/sdb2 -L persistenceとします。 live usbが出来上がったら、live usbのインストール項目をブートさせますが、ブート後、正常に画面が出てこない場合があります。この場合、grub2のブート項目を矢印キーで選択し、enterではなく、"e"を入力し、ブート詳細を編集します。編集は、linux行のquiteを削除し代わりに、nomodesetとします。編集がすんだら、ctrl+xでブートしますので、インストールをつづけてください。 インストールがすんだら、内臓ディスクからブートさせますが、この時もブート項目を矢印キーで選択し、live usbで起動するときと同様にすることで、取り敢えずGUI画面が出てくるはずです。 つづいて、Nvidia カーネルモジュールをインストールします。インストール手順はおよそ以下の通りです。 # edit /etc/apt/sources.list deb http://deb.debian.org/debian/ bullseye main contrib non-free # apt-get update # apt-get install nvidia-driver firmware-misc-nonfree ## ここでパッケージのインストールに加え...

Django: settings.pyを変更せずにuser agnetによってテンプレートを切り替える・テンプレートで参照する

Django + semantic UI で作成しているサイトにPCで接続するとうまくいくのですが、モバイルデバイスから接続すると期待通りの表示ができていませんでした。そこで、モバイルデバイスからのアクセスの場合、テンプレートを切り替えるという方針にすることにしました。そこで、なるべくmiddlewareを使わずにしたいとおもい、しらべたところ、pythonそのものにuser_agentを識別できるパッケージ user_agents があったので、これをインストールしたところ、テンプレートを切り替えたので、その時のメモです。 まず、最初にユーザーエージェントを切り替えるためのpython パッケージ user_agentsをインストールします。 # pip の場合 pip install user_agents # deb パッケージの場合 apt-get install python3-user-agents つづいて、viewを編集します。要点だけですが、以下のようにしました。 from user_agents import parse (中略) def get_template_names(self): ua_str = self.request.META["HTTP_USER_AGENT"] ua_res = user_agents.parse(ua_str) if ua_res.is_mobile: return ['motherboard/top.m.html'] else: return ['motherboard/top.html'] 上述の場合、表題通りdjangoのsettings.pyを編集する必要はありませんでした。簡単ですが今回は以上です。それでは。 追記2011/01/23:contextとしてuser_agentを渡した場合、template側でもis_mobileの参照ができました。 # views.py ... def get_context_data(self, **kwargs): context = sup...

Django: extra_viewsのInlineFormSetFactoryにてdatalistをサブフォーム側で表示

前回はInlineFormSetFactoryにてサブフォーム側にchoicesをつかって、静的に入力補助できるようにした のですが、さらに動的に入力補助できないものかと思い、datalistを使えないかとやってみたところ動いたので、備忘録として挙げてみることにしました。 なお、html5のdatalist自体の説明は割愛します。 まず、サブフォーム側です。以下のようにしました。 class art_imageForm(InlineFormSetFactory): model = art_image fields = ['art_image_title', 'original_img', ] factory_kwargs = { 'widgets' : {\ 'art_image_title':\ forms.TextInput( attrs={'list': 'art_image_titles', 'placeholder': 'enter image title'}, ), }, } ここでは、datalistをid="art_image_titles"のものから参照するということと、placeholderをここで指定しています。つづいて、テンプレート側です。フィールドを表示する部分だけですが、以下のようにしました。 {% for form in formset %} {% for field in form %} <tr> <th class="bg-light"> {% if field.field.widget.is_hidden %} {% else %} ...

Django extra_views の InlineFormSetFactoryをつかい、dropdown listboxを表示させる

複数の子テーブルが紐づいた詳細編集フォームに、python3-django-extra-views をつかうことで非常に簡単にサブフォームとの連携ができます。しかし、データベースのテーブルを使いまわすため、models.pyでchoicesを指定すると、とある編集場面では問題はないが、ほかの編集場面では異なったchoicesを表示させたい場合がありました。 そこで、いろいろと探してみたのですが、extra_viewsを使ってインラインサブフォーム側でchoicesを指定するのに、これだという記事はみあたりません。ただ、ヒントになる記事はあり、factory_kwargsを指定してフィールドウィジットに細工をすればよさそうだったので、いろいろと試したところできたので、忘備録として挙げてみることにしました。 具体的にいうと、PCパーツのデータベースを作成しようとしているのですが、list表示は無論、たとえばマザーボードの詳細編集フォームとメモリーの詳細編集フォームを分ける必要があります。(マザーボードとメモリーでは属性が異なるためです。たとえば、マザーボードとメモリーには、ベンダー名はあっても、拡張スロットやUSBはメモリーにはありませんし、逆にメモリーの一枚、二枚組の属性はマザーボードにはありません。) そこで、表題のように、InlineFomrSetFactoryを使いつつも、モデル側ではなく、form側でdropdown listboxのchoicesを個別に指定する必要がある、ということです。前置きが長くなりましたが、コード自体は非常にシンプルです。以下はマザーボードの詳細を入力するためのインラインサブフォームの例です。 class art_propForm(InlineFormSetFactory): model = art_prop fields = ('prop_cat', 'prop_name', 'prop_dsc1', 'prop_dsc2', 'prop_dsc3', 'prop_dsc4', 'prop_dsc5', ) PROP_CAT_CHOICES = ( ("...

MariaDBでSelect Distinctした結果の各行に連番を振る

今回も備忘録としてあげますが、表題の通りにしたいが以下の様にすると、連番を含めてselect distinctするため、期待通りに動いてくれません。 SELECT prop_dsc1, row_number() OVER (PARTITION BY prop_dsc1 ORDER BY prop_dsc1) venodr_no FROM art_prop WHERE prop_name="vendor"; +-----------+-----------+ | prop_dsc1 | venodr_no | +-----------+-----------+ | ASRock | 1 | | ASRock | 2 | | ASRock | 3 | | ASRock | 4 | | ASRock | 5 | | MSI | 1 | +-----------+-----------+ 6 rows in set (0.000 sec) つまり、select distinctした後に連番をふればいいので、以下の様にします。 SELECT t_vendor.vendor, row_number() OVER (ORDER BY t_vendor.vendor) vendor_no FROM ( SELECT distinct prop_dsc1 AS vendor FROM art_prop WHERE prop_name="vendor" ) as t_vendor; +--------+-----------+ | vendor | vendor_no | +--------+-----------+ | ASRock | 1 | | MSI | 2 | +--------+-----------+ ところで、PARTITION BYですが、PARTITION BY t_vendor.vendorを入れると、これも期待通りにならないので注意が必要です。 SELECT t_vendor.vendor, ...

Djangoで多段かつ複数チェックボックスにて絞り込みをおこなう

今回もタイトル通りですが、ネットで検索しても多段・複数チェックボックスを用いての例がほとんどみつかりませんでした。チェックボックスについては一段の例はあったのですが、やってみたところ、簡易的に多段かつ複数の絞り込みができたので、備忘録として挙げてみました。 早速ですが以下models.pyです。 class mb_basic_spec(models.Model): class Meta: managed = False db_table = 'mb_basic_spec' art_id = models.BigIntegerField(primary_key=True, db_column='art_id') art_name = models.TextField() chipset_vendor = models.CharField(max_length=128) chipset = models.CharField(max_length=128) vendor = models.CharField(max_length=128) cpu_socket = models.CharField(max_length=128) form_factor = models.CharField(max_length=128) memory_form = models.CharField(max_length=128) memory_type = models.CharField(max_length=128) class v_vendor(models.Model): class Meta: managed = False db_table = 'view_vendor' vendor_id = models.IntegerField(primary_key=True, db_column='vendor_id') vendor = models.CharField(max_length=128) class v_chipset...

項目可変長の縦持ち属性テーブルを属性毎にviewを作成し横持ちにして扱う

ほぼタイトルの通りですが、メインテーブルのマスターレコードに対し、複数の属性レコードで項目が可変長の属性テーブルがあり、これを、横持ちのデータとして取り扱う必要がありました。最初はPivotを使おうかと思いましたが、項目が可変長なので、うまくいきません。そこで、属性種別ごとにviewを用いてマスターレコード単位でに横持ちにし、さらにマスターレコードidを頼りに、複数のviewをinnerjoinで複数結合させたところ、ほぼ目的通りに動作したので、備忘録代わりに挙げてみることにしました。 属性テーブルは一例として以下の様になっています。 select * from art_prop where art_id=1; +-------------+------------------+--------------+---------------+------------------+----------------+-----------+-----------+--------+ | art_prop_id | prop_cat | prop_name | prop_dsc1 | prop_dsc2 | prop_dsc3 | prop_dsc4 | prop_dsc5 | art_id | +-------------+------------------+--------------+---------------+------------------+----------------+-----------+-----------+--------+ | 1 | Basic spec | vendor | ASRock | | | | | 1 | | 2 | Basic spec | form factor | Micro ATX | | | | | 1 | | ...