Atsuo Ishimoto's bloghttps://aish.dev/2026-01-17T00:00:00+09:00UoPeople顛末記2026-01-17T00:00:00+09:002026-01-17T00:00:00+09:00tag:aish.dev,2026-01-17 00:00:00.000000:/misc/20260117-uopeople-grad.html<div class="cell border-box-sizing text_cell rendered" id="cell-id=4be3d80b-193e-458d-b460-ae953506eac5"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <p>さて、2022年の9月に入学したアメリカのオンライン大学 <a href="proxy.php?url=https://www.uopeople.edu/">University of the People("UoPeople")</a> の<a href="proxy.php?url=https://catalog.uopeople.edu/ug_term1_item/computer-science/bachelor-of-science-in-computer-science-bs-cs">Bachelor of Science in Computer Science</a>、だらだらと続けてきましたが2026年1月に必要な単位を取得してしまい、還暦目前にしてついに卒業となりました。良い機会なので振り返ってみます。</p> <h2 class="md_header_block" id="%E3%81%8D%E3%81%A3%E3%81%8B%E3%81%91">きっかけ<a class="anchor-link" href="proxy.php?url=#%E3%81%8D%E3%81%A3%E3%81%8B%E3%81%91">¶</a></h2><p>この年になってわざわざ大学で学ぶ必要は別にないのですが、次のような理由でUoPeopleに入学しました。</p> <h3 class="md_header_block" id="%E3%82%B3%E3%83%AD%E3%83%8A%E3%81%A7%E6%9A%87%E3%81%A0%E3%81%A3%E3%81%9F">コロナで暇だった<a class="anchor-link" href="proxy.php?url=#%E3%82%B3%E3%83%AD%E3%83%8A%E3%81%A7%E6%9A%87%E3%81%A0%E3%81%A3%E3%81%9F">¶</a></h3><p>暇でした。</p> <h3 class="md_header_block" id="%E8%8B%B1%E8%AA%9E%E3%81%AE%E5%8B%89%E5%BC%B7%E3%82%92%E3%81%97%E3%81%9F%E3%81%8B%E3%81%A3%E3%81%9F">英語の勉強をしたかった<a class="anchor-link" href="proxy.php?url=#%E8%8B%B1%E8%AA%9E%E3%81%AE%E5%8B%89%E5%BC%B7%E3%82%92%E3%81%97%E3%81%9F%E3%81%8B%E3%81%A3%E3%81%9F">¶</a></h3><p>普段からプロ</p></div></div></div>nomanコマンド2025-05-07T00:00:00+09:002025-05-07T00:00:00+09:00tag:aish.dev,2025-05-07 00:00:00.000000:/misc/noman.html<div class="cell border-box-sizing text_cell rendered" id="cell-id=8577be3c-c1b4-4b3d-ab87-be488f04c28a"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <p>私はあまり記憶力が良いほうではない。長年にわたってUnixを使ってきたが、いまだに <code>ln -s</code> コマンドで リンク元が第一引数だったか第二引数だったかあやふやなときがある。</p> <p>こういうとき、ターミナルでは <code>man</code> か <code>ln --help</code> で確認することになるが、こういったドキュメントは正確性や網羅性を重視していて、あまり読みやすくはない。先日、<code>ripgrep</code> コマンドの使い方を調べようと <code>rg --help</code> を実行したが、 表示されるヘルプメッセージは1500行もあり、こんなのはとても読んでいられない。</p> <p>かといってブラウザを起動して検索する</p></div></div></div>UoPeople ENGL 0008 顛末記2022-11-05T00:00:00+09:002022-11-05T00:00:00+09:00tag:aish.dev,2022-11-05 00:00:00.000000:/misc/20221105-engl0008-2.html<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> </div> </div> </div> <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <p><a href="proxy.php?url=https://aish.dev/misc/20220928-engl0008-1.html">UoPeople ENGL 0008 中間報告</a> の続きです。</p> <p><a href="proxy.php?url=https://www.uopeople.edu/">University of the People</a>の英語力検定コース<a href="proxy.php?url=https://www.uopeople.edu/programs/certificate/esl-program/">ENGL 0008</a>がはじまって2ヶ月が経過し、コースが終了しました。記憶が新しいうちに印象を残しておきます。</p> <h2 class="md_header_block" id="ENGL-0008-%E5%BE%8C%E5%8D%8A%E3%81%AE%E5%86%85%E5%AE%B9">ENGL 0008 後半の内容<a class="anchor-link" href="proxy.php?url=#ENGL-0008-%E5%BE%8C%E5%8D%8A%E3%81%AE%E5%86%85%E5%AE%B9">¶</a></h2><p>後半のコース内容も、<a href="proxy.php?url=https://aish.dev/misc/20220928-engl0008-1.html#%E3%82%B3%E3%83%BC%E3%82%B9%E3%81%AE%E5%86%85%E5%AE%B9">前半のコース内容</a> と比べて大きな変化はありません。ただ、要求される英文の長さが長くなったり、エッセイを書くだけではなく喋っている <strong>動画</strong> をアップロードすることを要求されたりします。</p> <h2 class="md_header_block" id="Final-Exam">Final Exam<a class="anchor-link" href="proxy.php?url=#Final-Exam">¶</a></h2><p>黙々と課題をこなしていくと、最後にFinal Exam</p></div></div></div>UoPeople ENGL 0008 中間報告2022-09-28T00:00:00+09:002022-09-28T00:00:00+09:00tag:aish.dev,2022-09-28 00:00:00.000000:/misc/20220928-engl0008-1.html<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> </div> </div> </div> <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <p>ふとした思いつきで <a href="proxy.php?url=https://www.uopeople.edu/">University of the People("UoPeople")</a> に入学を申し込み、まずは必要な英語力をそなえているか確認するコース ENGL 0008がはじまりました。</p> <p>UoPeopleは入学者に一定以上の英語力を要求していて、入学時にTOEFLの点数や英検の資格などを提出する必要があります。手っ取り早く <a href="proxy.php?url=https://englishtest.duolingo.com/applicants">duolingo english test</a> というオンラインで受験できるテストでも良いようです。詳しくは、<a href="proxy.php?url=https://www.uopeople.edu/become-student/admissions/english-proficiency/">English Proficiency (For Non-Native English Speaker</a></p></div></div></div>Pythonのパターンマッチ2021-08-13T00:00:00+09:002021-08-13T00:00:00+09:00tag:aish.dev,2021-08-13 00:00:00.000000:/python/match-case.html<div class="cell border-box-sizing text_cell rendered" id="cell-id=cfb10e4d-661f-41cb-bcb4-83654e17effb"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <p>Python.jpで <a href="proxy.php?url=https://www.python.jp/news/wnpython310/index.html">Python 3.10の新機能(その1) パターンマッチ</a> を紹介したけど、流行るだろうかね?便利っちゃ便利だから、Python3.9がEOLを迎えれば結構使われるんじゃないかと思う。</p> <p>これはmatch-caseを使ってRustとかのResultっぽい使い方をしてみた例。</p> <div class="highlight"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">Result</span><span class="p">:</span> <span class="n">_inspected</span> <span class="o">=</span> <span class="kc">False</span> <span class="k">def</span><span class="w"> </span><span class="fm">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_inspected</span><span class="p">:</span> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="si">}</span><span class="s2"> は確認されませんでした"</span><span class="p">)</span> <span class="k">class</span><span class="w"> </span><span class="nc">Ok</span><span class="p">(</span><span class="n">Result</span><span class="p">):</span> <span class="n">__matc</span></pre></div></div></div></div>Python で Google Analytics Reporting APIを使う2021-04-08T00:00:00+09:002021-04-08T00:00:00+09:00tag:aish.dev,2021-04-08 00:00:00.000000:/python/20210408-google-analytics-adsenseRevenue.html<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <h1 class="md_header_block" id="Python-%E3%81%A7-Google-Analytics-Reporting-API%E3%82%92%E4%BD%BF%E3%81%86">Python で Google Analytics Reporting APIを使う<a class="anchor-link" href="proxy.php?url=#Python-%E3%81%A7-Google-Analytics-Reporting-API%E3%82%92%E4%BD%BF%E3%81%86">¶</a></h1><h2 class="md_header_block" id="Adsense%E3%81%AE%E5%A3%B2%E4%B8%8A%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B">Adsenseの売上を取得する<a class="anchor-link" href="proxy.php?url=#Adsense%E3%81%AE%E5%A3%B2%E4%B8%8A%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B">¶</a></h2><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">apiclient.discovery</span><span class="w"> </span><span class="kn">import</span> <span class="n">build</span> <span class="kn">from</span><span class="w"> </span><span class="nn">oauth2client.service_account</span><span class="w"> </span><span class="kn">import</span> <span class="n">ServiceAccountCredentials</span> <span class="n">SCOPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"https://www.googleapis.com/auth/analytics.readonly"</span><span class="p">]</span> <span class="n">KEY_FILE_LOCATION</span> <span class="o">=</span> <span class="s2">"xxxxxxxx.json"</span> <span class="n">VIEW_ID</span> <span class="o">=</span> <span class="s2">"99</span></pre></div></div></div></div>Django Rest Frameworkの処理メモ2021-04-02T00:00:00+09:002021-04-02T00:00:00+09:00tag:aish.dev,2021-04-02 00:00:00.000000:/python/djangorestframework-impl-memo.html<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <p>Django Rest Framework、使うたびに中を開けて同じことを調べているので、内部の主要なメソッドのメモを残す。</p> <h2 class="md_header_block" id="ViewSetMixin">ViewSetMixin<a class="anchor-link" href="proxy.php?url=#ViewSetMixin">¶</a></h2><div class="highlight"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">ViewSetMixin</span><span class="p">:</span> <span class="n">request</span><span class="p">:</span> <span class="n">args</span> <span class="o">=</span> <span class="n">args</span> <span class="n">kwargs</span> <span class="o">=</span> <span class="n">kwargs</span> <span class="n">action</span><span class="p">:</span><span class="n">Literal</span><span class="p">[</span><span class="s2">"list"</span><span class="p">,</span> <span class="s2">"create"</span><span class="p">,</span> <span class="s2">"get"</span><span class="p">,</span> <span class="s2">"update"</span><span class="p">,</span> <span class="s2">"partial_update"</span><span class="p">,</span> <span class="s2">"destroy"</span><span class="p">]</span> </pre></div> <h2 class="md_header_block" id="List%E3%81%AE%E5%87%A6%E7%90%86">Listの処理<a class="anchor-link" href="proxy.php?url=#List%E3%81%AE%E5%87%A6%E7%90%86">¶</a></h2><div class="highlight"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">ModelViewSet</span><span class="p">:</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_serializer_context</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">retu</span></pre></div></div></div></div>Google Analyticsの「今日」を開くブックマークレット2021-02-25T00:00:00+09:002021-02-25T00:00:00+09:00tag:aish.dev,2021-02-25 00:00:00.000000:/misc/20210225-bookmarklet-analytics-today.html<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <h1 class="md_header_block" id="Google-Analytics%E3%81%AE%E3%80%8C%E4%BB%8A%E6%97%A5%E3%80%8D%E3%82%92%E9%96%8B%E3%81%8F%E3%83%96%E3%83%83%E3%82%AF%E3%83%9E%E3%83%BC%E3%82%AF%E3%83%AC%E3%83%83%E3%83%88">Google Analyticsの「今日」を開くブックマークレット<a class="anchor-link" href="proxy.php?url=#Google-Analytics%E3%81%AE%E3%80%8C%E4%BB%8A%E6%97%A5%E3%80%8D%E3%82%92%E9%96%8B%E3%81%8F%E3%83%96%E3%83%83%E3%82%AF%E3%83%9E%E3%83%BC%E3%82%AF%E3%83%AC%E3%83%83%E3%83%88">¶</a></h1><pre><code>data:text/html,&lt;script&gt;f=(d)=&gt;`${d.getFullYear()}${('0'+(d.getMonth()+1)).slice(-2)}${('0'+(d.getDate())).slice(-2)}`;d=new Date();y=new Date();y.setDate(d.getDate() - 1);location.href=`https://analytics.google.com/analytics/we</code></pre></div></div></div>tse サンプル2021-01-28T00:00:00+09:002021-01-28T00:00:00+09:00tag:aish.dev,2021-01-28 00:00:00.000000:/python/tsesample.html<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <p><a href="proxy.php?url=https://github.com/atsuoishimoto/tse">tse(Python Stream Scripting)</a> サンプル集</p> <h2 class="md_header_block" id="ImageMagik%E3%81%A7png%E7%94%BB%E5%83%8F%E3%82%92jpeg%E3%81%AB%E5%A4%89%E6%8F%9B">ImageMagikでpng画像をjpegに変換<a class="anchor-link" href="proxy.php?url=#ImageMagik%E3%81%A7png%E7%94%BB%E5%83%8F%E3%82%92jpeg%E3%81%AB%E5%A4%89%E6%8F%9B">¶</a></h2><p>png画像を検索し、jpegに変換する。このとき、横幅が1500px以上なら1500pxに縮小する。</p> <div class="highlight"><pre><span></span>find<span class="w"> </span>.<span class="w"> </span>-name<span class="w"> </span><span class="s1">'*.png'</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>tse<span class="w"> </span>-s<span class="w"> </span><span class="s2">""</span><span class="w"> </span><span class="s1">'p=Path(L);j=p.with_suffix(".jpeg");P(fr`convert {p} -resize "1500x&gt;" {j}`)'</span> </pre></div> <h2 class="md_header_block" id="%E6%8B%A1%E5%BC%B5%E5%AD%90%E5%88%A5%E3%81%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E4%BB%B6%E6%95%B0%E3%81%A8%E5%90%88%E8%A8%88%E3%82%B5%E3%82%A4%E3%82%BA%E3%82%92%E5%87%BA%E5%8A%9B">拡張子別にファイルの件数と合計サイズを出力<a class="anchor-link" href="proxy.php?url=#%E6%8B%A1%E5%BC%B5%E5%AD%90%E5%88%A5%E3%81%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E4%BB%B6%E6%95%B0%E3%81%A8%E5%90%88%E8%A8%88%E3%82%B5%E3%82%A4%E3%82%BA%E3%82%92%E5%87%BA%E5%8A%9B">¶</a></h2><div class="highlight"><pre><span></span>find<span class="w"> </span>.<span class="w"> </span><span class="p">|</span><span class="w"> </span>tse<span class="w"> </span>-ms<span class="w"> </span>collections,pprint<span class="w"> </span>-</pre></div></div></div></div>Pythonのhasattr()は遅い?2021-01-07T00:00:00+09:002021-01-07T00:00:00+09:00tag:aish.dev,2021-01-07 00:00:00.000000:/python/ishasattrslow.html<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <p>Pythonには、オブジェクトにある名前の属性が存在するかどうかをチェックする <a href="proxy.php?url=https://docs.python.org/ja/3/library/functions.html#hasattr">hasattr</a> という組み込み関数があります。</p> <p>例えば、リストオブジェクトに <code>append</code> という属性が存在するかどうか確認するときは、次のようにかきます。</p> </div> </div> </div> <div class="cell border-box-sizing code_cell rendered"> <div class="input"> <div class="prompt input_prompt">In [57]:</div> <div class="inner_cell"> <div class="input_area"> <div class="highlight hl-ipython3"><pre><span></span><span class="n">L</span> <span class="o">=</span> <span class="p">[]</span> <span class="nb">print</span><span class="p">(</span><span class="nb">hasattr</span><span class="p">(</span><span class="n">L</span><span class="p">,</span> <span class="s1">'append'</span><span class="p">))</span> <span class="nb">print</span><span class="p">(</span><span class="n">L</span><span class="o">.</span><span class="n">append</span><span class="p">)</span> </pre></div> </div> </div> </div> <div class="output_wrapper"> <div class="output"> <div class="output_area"> <div class="prompt"></div> <div class="output_subarea output_stream output_stdout output_text"> <pre>True &lt;built-in method append of list object at 0x7fbc80542d80&gt; </pre> </div> </div> </div> </div> </div> <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <p>リストオブジェクトには <code>append</code> という属性が存在し、メソッドだということ</p></div></div></div>