絞り込み

最新の投稿

ガジェット/ハードウェア Polygon
ガジェット/ハードウェア

~史上最高のWindows~それは...2

こんにちは.この記事には宗教的な要素や攻撃的な表現が含まれます.苦手な方はブラウザバックを推奨します.本当の史上最高のWindowsとは前回はWindows 10が「史上最悪のWindows」であることに関して取り上げました.この記事では本当の史上最高のWindowsとは何なのかについて取り上げます. デスクトップ向けWindowsの決定版「Windows 7」デスクトップOSとして史上最高のWindowsに成り上がったのはWindows 7でした.Windows 7は2020年1月14日にサポートが終了し,現在は有償サポート(ESU)のみが継続されています.有償サポート継続は過去の中でも異例で,それだけWindows 7が世の中に普及していたことが伺えます.2021年1月時点で未だに全世界で1億台以上が稼働しているとかいないとか.Windows 7はIntel Coreシリーズの登場に合わせた2010年のリリースです.内部バージョンはWindows NT6.1.Windows Vista(NT 6.0)の子に当たります.Windows Vistaは先進的なUIや機能を取り入れていましたが,機能が過剰すぎたり,当時のPCのスペックが良くなかったりしたため,出来損ないOSとして扱われてきました.ただOSのバグに起因するトラブルはなく(ここがWindows 10との違い),システムがビジー状態になってしまうフリーズがほとんどでした.Windows 7はそんなWindows Vistaから余分な部分を削ぎ落とし,Windows 7の売り文句である「あなたとPCにシンプルな毎日を」にふさわしいOSとして仕上がりました.タスクバーにプログラムアイコンが並ぶようになったのもWindows 7からです.スタートメニューはWindows Vistaのものをより使いやすくしたものが採用されました.ファイルやプログラムの検索は,ローカル上で実行され非常に高速です.特に驚いたのは,ファイルの中身の文字列まで検索をかけてくれていることです.やりすぎです(褒め言葉).Windows 10はWeb検索を行う関係上,処理が遅いですね.あとBing検索やめろ. Windows 7は万人が使う上で,使いにくい部分や分かりにくい部分が少なく,ユーザフレンドリーなデザインになっています.一体なぜなのでしょうか? それはWindows 7のデザインの基となっているWindows ユーザーエクスペリエンスガイドラインから分かります.この約1000ページに渡るUI/UXに関する記述がWindows 7の使いやすいデザインを支えていると言えます.大変参考になります. 特に注目して欲しいポイントは「Windows ユーザーエクスペリエンスのデザインの原則」,Windows 7のデザインに使用された原則です. (以下抜粋)コンセプトを減らして、信頼を高めるどんなに小さなことも重要である"外観"と"内容"を重視する見つけやすく、かつ目障りでないようにする開始前のUXと質問カスタマイズではなく、個人設定にするエクスペリエンスのライフサイクルを評価する時間が貴重な、移動の多いユーザー向けに作成する(以上抜粋) このデザイン原則,なんとWindows 10にはすべてブーメランする,とてもおもしろい原則です. つまり,Windows 10のデザインがゴミってことなんですけど(笑). まず「コンセプトを減らして、信頼性を高める」.新機能を追い求め続けるWindows 10にコンセプトを減らすなんて発想はないですね. 次に「どんなに小さなことも重要である」.Windows 10では従来機能が削除されており,過去のWindowsユーザには優しくありません.ユーザに配慮しない勝手な仕様変更が行われているので,これには反しています. ・・・ とあれこれ続いていくのですが,この各項目にはさらに小さな問いがあります.その小さな問いとWindows 10を比較すると,自ずとそれに反していることが分かるので,ここではもう触れません(書くのがだるくなった). そんなWindows 7ですが,触ったことがないとその素晴らしさも全く分かりません.ですが,今やWindows 7 PCを触るのは容易なことではありません. 部室にはWindows 7 PCを一台設置しています.興味がある方はぜひ.次回はタブレットOS「Windows 8.1」を取り上げようと思います.

> 内容を見る

NoImage Polygon
電子工作

DAISOのLEDライトをパワーアップさせる

DAISOで売っているこのライト。 何か新歓のネタになるかなと思い、とりあえず一つ買ってきた。 見た感じ、砲弾型LEDが3つだけの構成。 パワーが足りないですよね????? そこで、早速ばらしてみた。リフレクタが有るからそのままでも十分明るいけどね~~。 少し悩んだけど、結局正面カバーを破砕して回路を取り出した。 一応、回路を上に押し上げると外せそうでは有るんだけども、面倒なので・・・。   見た感じ、チップ抵抗で電流を制限したLEDが3並列って構成? LEDの並列接続はあまり良くないと思うけど、パワーLEDじゃないからいいのかな。チップ抵抗は何Ωだったのか不明。6R8に見えるけど、6.8Ωなわけないよな・・・。  ・・・  さて、早速改造していく。今回は裸の1WLEDを取り付ける予定。   まずはチップ抵抗と全てのLEDを取り外す。ハンダゴテで適当にやれば外れる。 次に電流制限抵抗を用意する。今回は順方向電圧3.2VくらいのLEDを使うので、電源を4.5Vとして残りの1.3Vで300mAくらい流れるようにすればいい。容量は1Wを最低とする(余裕を見て)ので、今回は10Ω0.5Wの3並列とした。これで等価的に3.3Ω1.5W。  ピークで390mAくらい流れてしまうけど、まぁいいや。そもそも、スペースが殆どない状況での改造だから無理があるのはご愛嬌。スペースがあれば定電流回路とか発振回路を入れたいところだけども。   早速用意した3.3Ω抵抗器をチップ抵抗の代わりに取り付ける。ショートしないように背面は絶縁しておくと安心。私は絶縁テープを敷いたけど、ぶっちゃけ何でも良いと思う。   あとは表面に1WLEDを取り付けて配線すれば完成。一応、LEDに熱伝導性の両面テープを貼り付けて基板にくっつけているけど意味はないと思う。放熱は考えない。   電気的な改造はこれで終わりなので、最初に破砕したパーツを3Dプリンタで印刷して組み上げ。 最後に、損失とか考えておこう。 抵抗では3.3Ωに1.3Vがかかるから、損失は約500mW。定格的にも大丈夫。 LEDは3.2Vで390mAだからピークで1.2W?・・・放熱がまずいなあ。                      ・・・   そこで、更に改造。 道具箱を漁ったら星型放熱板に取り付いたLEDを見つけたのでこれに換装する。電気的特性はほとんど同じ(電源で確かめた)だから、単に交換するだけでOK。 適度にハンダの煙を吸いつつ、うまいことはんだ付けして換装する。 ここで問題発生。なんと、放熱板の厚みが悪さをして正面カバーがはまらない。 そこで、リフレクターを廃棄して新しくスペーサ(直径23.4mmの円筒)を自前の3Dプリンタで印刷した。厚みは1mmだけど、力のかからない部分なので大丈夫。   これでパーツが揃ったので、さっと組み立てて今度こそ完成。 これにて終了。夜道を照らすくらいなら十分すぎる明るさになったと思う。 製作費用は本体代¥100円を含めて¥250くらいでした。

> 内容を見る

ガジェット/ハードウェア Polygon
ガジェット/ハードウェア

Windows 10を最低限使えるOSにする方法~うるさい通知編~

*この記事に書いてあることを実施した結果,生じた損害などに関して一切責任を負いかねます.自己責任で実施してください.通知うるせ~!!!(憤慨)Windows 10は広告OSだという話を「~史上最高のWindows~それは...1」の記事で話しました. 今回は,Windows 10の広告を表示しないようにする設定を行っていきます. まずは「設定」アプリを開きます.システム>通知とアクションの項目を開き,新機能とおすすめを確認するために(以下略)Windowsを使う上でのヒントやお勧めの方法を取得するのチェックを外します. 次に,システム>マルチタスクで「タイムラインにおすすめを表示する」のチェックを外します.Windows 10における「おすすめ」は広告機能のことです. 続いて,個人用設定>ロック画面で「ロック画面にトリビアやヒントなどの情報を表示する」をオフにします.これはしなくてもそこまで実害はありません.広告がうざく感じる人や,PCをできるだけ高速に使いたい人はオフにしてください. そして最後が個人用設定>スタートにある「ときどきスタートメニューにおすすめのアプリを表示する」をオフにしておきます.Candy Crushとかが表示されるあれです.知ってる人は知ってますよね. おめでとうございます!これで晴れてWindows 10の広告地獄から開放されます.ちなみにバージョン「20H2」だと, システム>通知とアクションの項目に「Windowsを最大限に活用するためのデバイス設定の完了方法を提案する」という項目があるので,これもチェックを外しておいてください. ちなみに,この画像では勝手に広告機能が無効化されていますが,これはWindows 10 Educationのデフォルト設定みたいです.子どもが使うから広告が出ないようにしてるんでしょうね~.他のエディションもそうしろよ. ではでは,ありがとうございました~.

> 内容を見る

ガジェット/ハードウェア Polygon
ガジェット/ハードウェア

~Windows 10を最低限使えるOSにする方法~Windows Update編

*この記事に書いてあることを実施した結果,生じた損害などに関して一切責任を負いかねます.自己責任で実施してください.Windows Updateを管理してバグに遭遇しないようにするWindows 10のWindows Updateは,ユーザが管理できる範囲が非常に絞られていて,強制的に更新が行われるようになっています.毎月のセキュリティ更新プログラムは,毎月の第2火曜日(アメリカ時間)に配信されます.しかしながら,このセキュリティ更新には毎回バグがあります(断定口調).2021年3月9日に公開されたセキュリティ更新プログラムには,プリンタ周りの不具合があり,印刷をしようとするとブルースクリーンを吐く場合があるとのことです(https://gigazine.net/news/20210312-windows-update-cause-printer-crash/より). こんな何が起こるか分からないバグと毎月付き合うのは骨が折れますね?(僕は折れました) 岡大では,PCサポートデスクなどでヘルプしてもらえますが,このご時世大学に出向かない人もいると思うので,トラブルを未然に防ぐためにWindows Updateを管理しましょう! この記事では,Windowsに搭載されている「グループポリシー」というものを用いてデバイスを管理します.「グループポリシー」は主に企業のPCで使用されている,施設全体のデバイスの設定を統括管理するための機能です.WindowsのProエディション以上で使用できます(Homeエディションではできませんが,情報統括センターからWindows 10 Educationのライセンスを取得できますので,それでアップグレードすれば使用できます.大学構内に行けるようになってから試してみてください.生協からSurfaceを購入した人は元からProエディションなのでその必要はありません). 実際に設定をしていく前に,Windows 10の更新プログラムについて触れておきます.Windows 10の更新プログラムは2種類あるWindows 10の更新プログラムには「セキュリティ更新プログラム」と「機能更新プログラム」の2種類があります.セキュリティ更新プログラムその名の通り,セキュリティの問題が解消される更新プログラムで,毎月第2火曜日(アメリカ時間)に配信されます.昔のWindowsでは,バグが無いのが当たり前だったのですが,Windows 10では毎回バグがあります(断定口調). 機能更新プログラムすべての悪の元凶です.Windows 10のバージョンが変わる,比較的大きな更新に分類されます.更新後には多くのトラブルが発生し,データ消失などの危険な問題を招く危険があります(絶対許さない).現在実行中のWindows 10のバージョンは,「設定」アプリのシステム>バージョン情報から確認できます(バージョンにより表記が異なることがあります). このデバイスのWindowsエディションは「Pro」,バージョンは「1909」であることが分かります.ちなみに「1909」は2019年11月に公開されたバージョンで,一般向けで現状利用可能なバージョンで最も古いWindows 10です.参考までに言っておくと,大学生協からSurfaceを購入した場合は恐らく,バージョンが「20H2」,エディションは「Pro」でしょう. 更新を延期するそれでは,「Windows Update for Business」グループポリシーによる更新延期設定を行ってみましょう. セキュリティ更新プログラムは最大30日. 機能更新プログラムは最大365日延期可能です(正確には設定日数+2ヶ月の延期になります). Microsoftは,セキュリティ更新の延期「14日」,機能更新の延期「180」日を推奨しているようです.どこかのページで見ました.お好みで設定してください.ちなみに僕はどちらも最大の延期日数にしています. まずWindowsキーとRキーを同時押しします.すると ファイル名を指定して実行という項目が表示されるので,「gpedit.msc」と入力して実行します. この「グループポリシーエディター」が表示されます.コンピューターの構成>管理用テンプレート>Windowsコンポーネント>Windows Update>Windows Update for Businessを開きます. この内,プレビュービルドや機能更新プログラムをいつ受信するか品質更新プログラム(セキュリティ更新のこと)をいつ受信するかを設定します. 上のやつは,有効半期チャネル任意の日数で設定してください. 下のやつは 有効 任意の日数 で設定してください. 設定できたらグループポリシーエディターを閉じます. 先程と同様にWindowsキーとRキーを同時押しして,ファイル名を指定して実行を呼び出し,「gpupdate」を実行します.黒い画面が表示され,少ししたら消えます.これで適用完了です. きちんと適用されていれば,「*一部の設定は組織によって管理されています」と表示されるようになります. これで延期完了です. 初心者にはおすすめできないですが,グループポリシーにより自動更新自体を停止することも可能です.しかし,更新されていない状態ではセキュリティの問題が発生するので,自動更新を無効にはしないことをおすすめします. 以上,無能OSをなんとか使えるようにするための対処法でした~.

> 内容を見る

プログラミング Polygon
プログラミング

競プロ環境構築#1 共通編

これから競プロを始めるWindows10ユーザーのための、快適な競プロ環境構築の方法をまとめます。LinuxでもOKです。多分Macも大丈夫。 以下に解説する方法はWindows10以外の非UNIX系OSには対応しませんが、仮想マシンを利用するか、ネイティブの対応するアプリケーションを利用すれば問題なく環境構築はできます。 記事情報記事作成日:2021-03-10最終更新日:2021-04-17 シリーズツリーここC/C++編Python編(予定)ご希望あれば他の言語やAtCoderの始め方など紹介します。筆者TwitterにDMかメンションをお願いします。 Windows10にWSL2を導入するWindows10にはWindows Subsystem for Linux(WSL)という便利な機能が備わっています。WSL2は本物のLinuxカーネルを使用することにより、ネイティブのLinuxと高い互換性を持ちます。 AtCoderのジャッジ環境も恐らくLinuxなので、なるべく環境を寄せるためにも導入します (2019/7からの言語アップデートの資料から、Ubuntu 18を使っているらしい。 GCCも10に更新されていないあたり、恐らく執筆時点では環境は変わっていない)。コンパイラなどの環境が既存の環境と競合すると面倒なので利用するという理由もあります。 具体的な導入方法はこのリンク先を見てもらったほうが早いです。 執筆中に初めて知ったんですが、Windows Insider Programに参加していればコマンド一つでインストールが完了するらしく驚き。 Windows10の不安定さにはイライラしているので、私は絶対参加したくないんですけど。今日もネットに繋がらなくてWindows Updateしたし導入手順以下の導入手順は前述のリンク先のx64マシン向けの要約です。詳細はリンク先を確認してください。また、この手順に従いいかなる損害等が発生しても、筆者は一切の責任を負いません。 WSL1をインストール済みの方も、WSL2にアップデートすることをおすすめします。「Linux 用 Windows サブシステム」機能を有効化する管理者としてPowerShellを起動し、次のコマンドを実行します。dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart作業が完了したら、再起動します。Windows10を更新するWin+Rキーを押して出てくるウィンドウにwinverと入力し、バージョンが1903より古ければアップデートします。「仮想マシン プラットフォーム」機能を有効化するPowerShellで次のコマンドを実行します。dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart作業が完了したら、再起動します。WSL2 Linuxカーネルを更新するここから最新の更新パッケージをダウンロードし、インストールします。WSLの標準バージョンを2に設定するPowerShellで次のコマンドを実行します。wsl --set-default-version 2LinuxディストリビューションをインストールするMicrosoft Storeから好きなディストリビューションを選びインストールします。今回は情報も多く、比較的新しいUbuntu 20.04 LTSをインストール。起動するスタートメニューから起動します。UNIXユーザー名とパスワードの設定が求められるので、設定します。 とりあえずこれでインストール完了です。Windows Terminalの導入は必須ではないので飛ばします(どうせVSCodeから叩くし)。テキストエディタを導入する競プロでは原則、すべてのプログラムはシングルファイルです。その都合上、「プロジェクトを管理する」スタイルのIDEとは相性が悪いです(勝手に連結してコンパイルしてしまったり、main関数が複数あって怒られたり)。 もちろんお好きなものを使っていただいて構わないんですが、おすすめはMicrosoftのVisual Studio Codeです。 拡張機能が充実していて、これ一つで大抵の言語に対応できます。私が普段使いしているのもこれです(「競プロ エディタ」でGoogle検索すると上位はVSCodeがほとんど)。余談ですが記事もこれで執筆しています。 これはWindows側にインストールすればOKです(むしろWSLはX Window Systemを自分でインストールしないと使えないのでWSL側にインストールして使うのは割と手間)。VSCodeを日本語化するVSCodeを起動して、Ctrl+Shift+Xを押して拡張機能の管理ペインを開きます。 「Japanese」で検索してJapanese Language Pack for Visual Studio Codeをインストールします。 ウィンドウ右下にメッセージが出るのでRestartをクリックして再起動します。VSCodeのターミナルからWSLを開くまず好きな場所に競プロのプロジェクト用のディレクトリを作ります。ここではWindows側のC:\kyoproにします。 これをVSCodeでワークスペースとして開きます(右クリックすると「Code で開く」というのがあると思うのでそれをクリック)。 Ctrl+Shift+@で統合ターミナルを開き、wslと入力してWSLを起動します。online-judge-toolsとatcoder-cliを導入するテストケースの一括取得、一括テスト、提出などができるようになります。それぞれPython/pipとNode.js/npmが必要。 WSLで次のコマンドを実行します。online-judge-toolsのインストールここに書いてあることを要約した。# パッケージリストをアップデート sudo apt update # Pythonを使う予定があればなるべくAtCoderのバージョンと同じものを # なければ最新でよい sudo apt install python3.8 python3-pip # Pythonとpipのインストールをチェック python3 -V pip3 -V pip3 install --upgrade pip pip3 install online-judge-tools # ojのインストールをチェック oj --versiononline-judge-toolsのバージョンが出れば成功。 パスが通っていないと怒られた場合は、find / -name oj 2> /dev/nullを実行してojの置かれている場所(実行ファイルの親ディレクトリのパス。筆者が試すと/home/[USERNAME]/.local/binであった)を確認した後、echo 'export PATH="/home/[USERNAME]/.local/bin:$PATH"' >> ~/.bashrcで~/.bashrcファイルに追記する。source ~/.bashrcで~/.bashrcを読み込み、再びojのバージョンを確認する(次回以降のWSL起動時はsourceを叩く必要はない)。atcoder-cliのインストール詳細はここ。WSLを利用する場合はLinux向けのガイドを読んでください。あちらではapt-getを使っていますが、aptのほうがいいらしいのでDebian/Ubuntu系ではaptに読み替えましょう。 npmチーム非推奨の方法 !!!以下にある方法は非推奨なので更に下にあるほうを使ってください!!!sudo apt update # Node.jsとnpmをインストール sudo apt install nodejs npm # Node.jsとnpmのインストールをチェック node -v npm -v npm install -g npm npm install -g atcoder-cli # accのインストールをチェック acc -v2021-03-12追追記: この方法(apt)でnpmをインストールした場合、npm install -gにはやはりsudoが必要なようです(ちゃんと検証してから情報を世に出しなさい)。 そこで、npmチームはnvmのようなNodeバージョン管理ツールを利用することを推奨しています。[1] そんなわけで改めてNode.jsとnpmの導入方法を説明します。# 公式スクリプトでnvmをインストールする # 環境によってはwgetもインストールが必要 # curlを使ってもよい wget 'https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh' -O - | bash # nvmを環境変数に登録する # 上記スクリプトによって実はできているので # ~/.bashrcを再読込すればOK # シェルの再起動でもよい source ~/.bashrc # インストールのチェック nvm -v # nodeとnpmをインストールする nvm install node # インストールのチェック nvm ls node -v npm -vこれでそれぞれバージョンが出ればnvm、Node.js、npmのインストールは成功です。 [1] Downloading and installing Node.js and npm | npm Docs https://docs.npmjs.com/downloading-and-installing-node-js-and-npmWe strongly recommend using a Node version manager like nvm to install Node.js and npm.そしてatcoder-cliのインストールnpm install -g atcoder-cli acc -vatcoder-cliのバージョンが出れば成功。 2021-03-12追記: npmにsudoをつけていましたがどうもPowerShellの改行コードの問題だったらしく、LFならばsudoをつけなくても正しく実行できるようです。 色々と不便なのでGit for Windowsを導入して、"terminal.integrated.shell.windows": "C:/Program Files/Git/bin/bash.exe",と設定に書き加え、Git Bashを使えば良いかなと思います。 2021-03-12追追記: nvmでインストールすればなぜか解決されました。やったぜ。atcoder-cliの設定atcoder-cliを使えば自動でコンテストごとにディレクトリを生成して、テストケースをダウンロードしてくれるんですが、このディレクトリにテンプレートファイルを配置することもできます。ojと連携してコードテストしたり、書いたコードをAtCoderに提出できたりします。至れり尽くせりやでほんま。ojのパスを設定acc check-ojonline-judge-tools is available. と出力されればこの項は終了です。 online-judge-tools is not available.と出力された場合、find / -path "/mnt/c/*" -prune -o -name oj -print 2> /dev/nullでojの場所を探し(筆者の場合/home/[USERNAME]/.local/bin)、acc config oj-path /home/[USERNAME]/.local/bin/ojで登録します。再びacc check-ojでチェックして出れば成功です。テストケースの配置されるディレクトリ名を変更するojは指定がなければtest/ディレクトリに配置されたテストケースを認識しますが、なぜかaccはtests/ディレクトリにテストケースをダウンロードするので、このディレクトリ名を変更します。cd `acc config-dir`でconfig.jsonが配置されたディレクトリに移動します。 VimやEmacsなどの適当なテキストエディタでconfig.jsonを開き、該当行を次のように編集します。"default-test-dirname-format": "test"テンプレートを配置するcd `acc config-dir`でconfig.jsonが配置されたディレクトリに移動します。 ここにディレクトリを作成します。ディレクトリ名は言語名にすれば良いと思います。以下はC++の場合の例です。mkdir cpp移動して、テンプレートファイルを配置します。cd cpp touch main.cpp # main.cppを編集するaccに対してこれがテンプレートであることを伝えるため、template.jsonファイルを作成しますtouch template.json # template.jsonを編集する次のように書きます。当然ですが作成したファイル名に応じて適宜変えてください。{ "task": { "program": ["main.cpp"], "submit": "main.cpp" } }config.jsonが配置されたディレクトリにcd ..で戻り、該当行を作成したディレクトリ名に変更します。"default-template": "cpp"使ってみる言語に関係ない部分のインストール作業は大体終わりです。それではaccを実際に使ってみましょう。ディレクトリの生成とテストケースのダウンロード例えばABC088のD問題のテストケースをダウンロードするとします。acc new abc088上記のコマンドを入力するとログインが求められるので、AtCoderのユーザー情報を入力します。 次に上下キーとスペースキーを使って問題を選びます。選んだらEnterを押して待ちます。 完了したら、ディレクトリを開きます。ディレクトリ./abc088/dができているはずです。テンプレートを設定した場合、その中にテンプレートファイルがコピーされています。コードテストコードを書き終えたら、コードテストします。コンパイラ言語の場合コンパイラ言語の場合はコンパイルしてa.outファイルに書き出します。そして、oj tを実行すればコードテストが行われます。インタプリタ言語の場合a.outファイルを作れない場合、-cオプションをつけて実行します。ただし、標準入出力に対応している環境(Node.js等の場合は/dev/stdinを読み込める環境)でなければなりません。 例えばPython3でmain.pyをテストしたい場合はoj t -c 'python3 main.py'を実行します。その他のオプション問題によっては、絶対誤差または相対誤差が $10^{-6}$ 未満であれば正解とするといった場合があります。このような場合は-eオプションを指定します。上記の場合は、oj t -e 1E-6のようにします。もちろん-cオプションと組み合わせることも可能です。 他にもいくつかオプションがありますが、oj -hで確認できます。提出ojを使えばブラウザを使わずに問題を提出できます。さらに、accを経由すればURLの指定も不要です。ojへのログインojもAtCoderの認証を通す必要があります。oj login https://atcoder.jpを実行し、ユーザー名とパスワードを入力します。Seleniumをインストールしろと警告が出ますが無視しても構いません。accで提出accで生成された問題のディレクトリ(今回はabc088/d)に移動し、acc s main.pyのように提出するファイルを指定します。しばらく待つとAre you sure? Please type "abcd"のように表示されるので、提出してよければそのとおりに(abcdと入力して)、提出したくない場合はそのまま何も入力せずにReturnキーを押します。 本来はここでブラウザが起動して、ジャッジ結果を見られるのですが、私の環境はイカれてるらしく提出から7分も経ってやっとChromeに結果が出ました。アホか? 2021-03-12追記: Ubuntuごとここに書いてる方法でインストールし直したら 割とすぐにブラウザが出るようになったので、気にしないでください。 まあ提出結果のページのURLはターミナルに出るので、 あまりに長いようならCtrl+Cで強制停止して、 URLをAlt+Clickで参照すればそれでよいと思います。エイリアスの設定(2021-03-14追記)コンテスト中にもoj tやacc sを使うわけですが、 acc sは3秒の待機と提出時の確認があり、 更に言語指定などが含まれてくると(Python3, Python2, PyPyなど)打つ時間だけ損してしまいます。 そこでエイリアスを設定して素早く打てるようにしておきます (昨日はその分時間ロスしてRated1000位を逃しました(半ギレ)。 あと9秒だけ早ければよかったのですが)oj test省略形がoj t。コードテストをします。 私が使っているのは以下。ただしエイリアスはあくまで文字列置換なので、ファイル名の指定は最後でないとできません。 故に、ファイル名も変数化したければ関数として実装する必要があります。alias oj-t-pypy="oj t -c 'pypy3 main.py'"acc submit省略形がacc s。AtCoderにコードを提出します。 私が使っているのは以下。ただしエイリアスはあくまで(ry ハイフン2個--で区切ると、それより左はacc sのオプション、右はoj sのオプションになります。 詳細はacc s --help及びoj s --helpで確認できます。alias acc-s-pypy='acc s main.py -- -l 4047 -w 0 -y'次回予告次回はC/C++の競プロ向け環境構築について説明します。乞うご期待。

> 内容を見る

Unity Polygon
Unity

MyCrane製作記1

こんにちは.しげです. 今回から,現在製作中のゲームである「MyCrane」の製作について少しずつ紹介していきます.多分長くなると思うのですが,よろしければお付き合いください.クレーンゲームは...クレーンゲームと言えば,誰もが遊んだことがあるのではないでしょうか? 僕は,小学生のときによく遊んでいたのが懐かしいです.下手くそで全然景品獲れなかったですけどね(). ムキになってお金を入れまくるとお小遣いも一瞬でなくなるものです.悲しきかな. そんなクレーンゲームですが,遊ぶとお金がかかってしまいます.そこでお店ではなく,ネットのゲームで遊べば無料で遊んだ感を得られるゲームはないのかと思って,ネットの海を探しました.2Dのクレーンゲームとかは見つけられましたが,3Dとなるとそんなに多くないし,現実には2本ヅメの筐体や3本ヅメの筐体など,特徴ある筐体が無数にあります. そのすべてを網羅するのは簡単ではないですし,リアリティがあるものも少なく感じます. そこで「MyCrane」というリアリティを求めたクレーンゲームの製作をすることになりました.モチーフにした筐体MyCrane Type1のモチーフになったのは,ナムコ社から出ている「CLENA 2K」という筐体です.CLENA 2Kの写真は持っていないので,ここでは代わりにCLENA 2の写真を貼っています. CLENA2シリーズの操作パネルは,MyCraneの操作UIにも導入されているデザインです. 柔軟なフィールド設定が可能な2本ヅメの筐体です. MyCrane Type2のモチーフになったのは,北日本通信工業社から出ている「DecaCre α Ver1.5」という筐体です. ソレノイドコイルを使用した大型の3本ヅメが特徴の機種です. ボタン操作式とレバー操作式の筐体があり,レバー操作式の筐体には制限時間設定があります. MyCrane Type3のモチーフになったのは,エスプラン社から出ている「CARINO Ⅲ」という筐体です(写真はCARINO Ⅱです). 3本ヅメの小さなクレーンゲーム機です.カプセル型の景品が入っていることが多い機種です. 確率設定があるため,毎回獲れるとは限りません. 以上3機種を製作中です.今後機種を加えていく予定もあります. プロジェクトサイトはhttps://sites.google.com/view/mycraneになります.よければ訪ねてやってください.テスト用のプレイファイルにもアクセスできますよ! それでは初回はこのへんで.

> 内容を見る

電子工作 Polygon
電子工作

スピーカー直したり直せなかったり

ふぉです。おはようございます。電子工作って言ってますが技術的な話はほぼありません。ごめん。 あーし、電子工作とかそーゆームズいことわかんないんだわ(ギャル)。部室のスピーカー壊れてるやつばっかだよなという話になったのは、部室のスピーカーの電源ボタンがめり込んだ事件がきっかけだったと思います。正確には覚えてない、もしかしたら記憶改変が起きてるかもしれません。 とにかく、ボタンがめり込んじゃったとの報告を受けたので実際に部室に行って見てみると、そこそこ長さがあって出っ張っているはずの、到底内側に陥没するとは思えないサイズのボタンが見事に内部に落ちて取れなくなってたので笑いました。 このパーツ普通に使ってて内側に落ち込むことある??? とりあえず分解して元の位置に戻して、再発しないように固定だか接着だかの処置をしておこうと思います。 ボタンを救出しに行く背面のネジ穴にドライバーをぶち込みます。 と思ったら穴がメチャクチャ深かったのでネジの種類がわかりません。スマホのライトで中を確認したところたぶんプラスドライバーで行けそうです。サイズがわかりませんが。 適当に色々突っ込んでみますが、奥のネジまで届く長さのドライバーがこいつしかなかったのでこれでいきます。 回して開けます。 開けたらボタンくんが無事に見つかりました。マジでどうやって落ちたん?これ。 確かにLEDにグルーガンで接着されていた部分は剥がれていましたが、ボタンの裏についている四角い穴がスイッチ部分に数mmほど差し込んであるはずです。なんで? と思いましたが、たぶんONにしてスイッチが引っ込んでいるときにボタンだけ引き抜いて斜めにグリグリ回したら外れて落ちますね。 スイッチから抜けないようにLEDだけでなく四角い穴のほうにも接着剤を盛っておきましょう。 ……これ見てる部員の方はくれぐれも試さないでね?接着グルーガンで接着剤を盛り盛りします。幸いグルーガンもスティックも部室にありました。 とはいえ段ボール箱に電気工具がまとめてぶち込んであったので探すのが手間でした。物品管理アプリを完成させるまでに整理したいと思います。 LEDとスイッチ穴の部分に盛り盛りしてくっつけます。 あとは筐体を元通りにねじ止めして終了です。 このスピーカー片方音出ないんだよね「だいぶ前から。」「…マジ?」 VR用のマシンに繋がっているスピーカーですが、左から音が出てなかったみたいです。VR中はスピーカーが向かって右側に置かれている関係でマジで全く気付いてませんでした。 どうせ断線とかだと思うので原因特定だけして、直せそうだったら直してって感じになると思います。 では分解。 早速音が出ない左スピーカーの抵抗値を測ってみますが抵抗値はほぼ0。 線が断線してるんじゃないかなぁということで、反対側の筐体内にある基板を出してみます。画像左の黒い線が左スピーカーに続く線なので、根元のはんだ付けされている部分を使って抵抗値を測ってみたら結構デカい数字が出ました。 回路的には線の有無以外に差異はないはずなので、線が断線していなければこの2つの測定結果はほぼ変わらないはずです。 しかし実際は大きく抵抗値に差が出ているので、線が断線しているものとみて間違いないでしょう。 なお部室に替えの線になりそうなものはなかったので、原因の特定だけしましたよということで元に戻して終了です。2Dさんお手伝いありがとうございました。 それはそうと、結局直ってないので誰か修理やってほしい。 というか線買って直すかスピーカー新しく買うかしないとやばいですね。ハードオフあたりで電子工作のオモチャも兼ねて何か良さげなスピーカーを見繕ってくることにしましょう。それでは、また。

> 内容を見る

プログラミング Polygon
プログラミング

GitHub PagesとHugoを使ってブログを作ってみた

ふぉです。最近はジャンクフードがマイブームです。 最近『縁側ごろごろ』っていう個人サイトを作りました。そちらに投稿したものと記事の内容としては被るのですが、GitHub PagesとHugoで割と簡単に作れたので作り方をまとめておきます。GitHub Pagesでブログが作れるらしい何となしにネットの海をサーフィンしていると、ふと立ち寄ったブログのURLが~.github.ioでした。 へぇ~GitHub Pagesでブログが作れるんだ~。わたしもやりたい。 ググってみると、静的サイトジェネレータを使うとMarkdownで書いたファイルを元にWebページを生成できるみたいです。『GitHub Pages ブログ』と検索したところ静的サイトジェネレータの名前がいくつか出てきたのですが、なんとなくおもしろそうだったのでHugoを使ってみることにします。Hugoを使って実際に作ってみるHugoの導入まずHugo Extendedをインストールするのですが、Windowsでは例えばChocolateyなどのパッケージマネージャを使うので、まずはそちらをインストールしておきます。 chocoコマンドが使えるようになったら、Hugo Extendedをインストールします。GitHubの準備とThemeの導入続いてブログ作成のための環境構築をします。以下の記事を参考にさせて頂きました。 3分で GitHub にブログを作る (Hugo + GitHub Pages) - Qiita HugoではThemeと呼ばれるページレイアウトのテンプレートのようなものがHugo Themesで色々公開されていて、 『Hugo Future Imperfect』というテーマが個人的にとても好きなので導入します。 先ほどの環境構築の記事ではconfig.tomlを編集するようになっています。 themes/hugo-future-imperfect/exampleSiteにあるconfig.tomlをコピーして、ブログ本体のディレクトリに元々あるconfig.tomlに上書きしておきます。 以降、themesディレクトリ以下のファイルを変更する際は全てブログ本体の同名ディレクトリにコピーしたものを使用しています。config.tomlをカスタマイズする自分のブログに合わせてconfig.tomlを編集していきます。ここではブログのタイトルや説明、 自分のSNSアカウントへのリンクや記事の共有ボタンの有効化などブログの基本的な要素を編集できるようになっているので、好きなようにカスタマイズします。 特に変わったことはしていませんが、1つあるとすればアイコンは私がGitHubで使っているものをURLで参照して持ってくるようにしています。 https://github.com/<USERNAME>.pngとするとアイコン画像を取得できます。 画像が思ったよりでかかったのでサイズは100pxとしておきます。ここまでの設定でconfig.tomlは以下のようになります。 [params.intro.pic]以下をいじることで左上当たりのプロフィール部分のレイアウトをいじることができます。 フォントを変更するページ中で使用されるフォントを指定します。Google Fontsで使いたいフォントをインポートして使用する感じになるので、便利すぎてありがとうございますの気持ちになります。記事のフォントNoto Sans JPが好きなので、使えるようにします。 hugo server -Dでサイトのテスト実行をし、ブラウザで文字部分について検証をします。Vivaldiだと日本語の文字の上で右クリック→[検証]でした。 Stylesに表示されている項目のうちfont-familyの部分がフォントの指定になっているようなので、場所として示されているmain.css:117付近を見に行きます。 \themes\hugo-future-imperfect\static\css\にmain.cssがありました。117行目あたりからがフォントの設定となっていたので、以下のように変更しています。@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700&display=swap'); body, input, select, textarea { color: #333333; font-family: 'Noto Sans JP', sans-serif; font-size: 14pt; font-weight: 400; line-height: 1.75; }インラインコードのフォント続いてインラインコードの文字を検証すると、main.css:259付近でフォントが指定されていたので、ここも変更します。コードのフォントにはSource Sans Proを使うことにします。@import url('https://fonts.googleapis.com/css2?family=Source+Code+Pro:wght@400;700&display=swap'); code { background: rgba(160, 160, 160, 0.075); border: solid 1px rgba(160, 160, 160, 0.3); font-family: "Source Code Pro", monospace; font-size: 0.9em; margin: 0 0.25em; padding: 0.25em 0.65em; }見出しの調整見出しをより目立たせるためにデザインの調整をします。デフォルトではh3以降見出しのフォントサイズが本文より小さくなってしまうのと、見出しに何も装飾がないのは記事本文と判別がつきにくいのとで、デザインをちょっとだけ変えてみます。 デザインを変更する見出しに関してですが、デフォルトの状態ではアルファベットは全て大文字で字間がやや広いです。私の好みに合わせてmain.css:197付近を以下のように変更しています。h1, h2, h3, h4, h5, h6 { color: #3c3b3b; font-family: "Raleway", Helvetica, sans-serif; font-weight: 800; letter-spacing: 0.10em; line-height: 1.65; margin: 0 0 1em 0; text-transform: none; }このコードのすぐ後のあたりで見出しのデザインを変更できるのでやってみます。 CSSのコピペだけ!おしゃれな見出しのデザイン例まとめ68選 こちらのサイトのCSSをお借りしまして、見出しの文字の左に灰色のマーカーを付けています。 h4、h5、h6は共通なので端折っています。h1 { font-size: 1.4em; border-left: solid 5px #C0C0C0; padding: 0.1em 0.5em; } h2 { font-size: 1.2em; border-left: solid 5px #D0D0D0; padding: 0.1em 0.5em; } h3 { font-size: 1.1em; border-left: solid 5px #E0E0E0; padding: 0.1em 0.5em; } h4 { font-size: 1.0em; border-left: solid 5px #F0F0F0; padding: 0.1em 0.5em; }こんな感じになりました。わかりやすくなったかも? デザイン変更の弊害を直す見出しのデザインを変更したところサイドバーでも見出しが使われているために、サイトタイトルのあたりが特に違和感マシマシになります。 タイトルの左のほうに刻み海苔が貼り付いているのとか正直めっちゃ変なので直します。 sidebar.htmlがサイドバーにあたるので見てみると、18行目に<h2>{{ .header }}</h2>というのがあります。5行目で<section id="intro">というようにIDが与えられているので、main.css内の先ほど変更したh2よりも下の行で#intro header h2に海苔を消すCSSを書けば良さそうです。 幸いmain.cssの2600行付近に見つかるので、こんな感じで海苔用の余白を作っているpaddingと海苔そのものであるborder-leftを共に0pxとか0emとかにする記述を加えて完了です。#intro header h2 { font-size: 1.5em; font-weight: 900; border-left: solid 0px #FFFFFF; /* 見出しに線入れたらタイトルにも出ちゃったので隠す */ padding: 0em 0em; /* 余白も0にしておく */ }同様のことをその他の見出し部分にも適用して、あとはちょこちょこナビゲーションバー(上に出てるサイトのタイトルとかHOMEとかABOUTとか書いてるとこ)とかをいじっておわりです。 あとは適当に記事を書いてhugoとコマンドを打てばpublicというフォルダに必要なものが全部出力されるので、このディレクトリをGitHubにプッシュしておきます。 簡単にオシャレなサイトが作れてめちゃくちゃ感動した。すごい。あとHugoはガチで生成が爆速です。びっくりした。

> 内容を見る

プログラミング Polygon
プログラミング

2. 一からアンドロイド開発をして思った、知っておくべきこと~ViewBinding編~

こんにちは、オキリョウと申します! このシリーズでは私が初めてAndroidアプリ(下のURLのやつ)を作成した時に「最初から知っておきたかったな・・・」と感じたことを書いていきたいと思います。   是非見ていってください↓↓↓ https://play.google.com/store/apps/details?id=com.wsr.shopping_friend 今回紹介するのは「ViewBinding」です。  どういう内容?Androidのコードを書いていると、Viewを操作したり、Event発生時の処理を書いたりしたくなる時が多々あります。 例えば、画面上にあるボタンを押したらメッセージが出てくる、といった実装をするときです。そのような時、どういう風に書くのかというのが今回の議題です。  1.findViewByIdまず、古い記事などでよくみられるのがfindViewByIdです。val button = findViewById<Button>(R.id.button) button.setOnClickListener {     //処理を書く }このように書くことで自分の指定したid(この場合だとbutton)のボタンが押されたときの処理を書くことが出来るようになります。 ただ、このfindViewByIdはいくつか問題を抱えていました。コードが複雑になったり、返り値がnullableだったり… 幸いにも私はfindViewByIdを利用するのはあまりよろしくないという記事を発見したので無事回避することが出来ました。  2.Kotlin Android Extensions次に考えられるのがKotlin Android Extensionsを使った方法です。 こちらはGradleファイルに記述を加える事で使えるようになるものです。これを使うことで、先ほどのコードは以下のように書くことが出来ます。button.setOnClickListener {    //処理を書く }findViewByIdというのが無くなってますね。 これは、プログラム側が勝手にfindViewByIdをしてくれ、id名と同じ名前の変数に代入してくれているからです。 これによりfindViewByIdよりも簡潔に書けるようになりました。ついでにfindViewByIdが持っていた「型安全ではない」という問題も解決してくれています。 これだけ聞くとかなり優秀そうです。実際にKotlin Android Extensionsを使っていたり、称賛している記事も多くありました。 そこで私のアプリにも導入して、コーディングしていました。   しかし、この2020年11月24日にサポートが終了してしまいました。 というのも、Kotlin Android Extensions自体もまた問題をいくつか抱えていたからです。 まずKotlinでしか動かないことです。そりゃあ、KotlinのExtensionsなんだから当たり前の話です。しかし、古くからあったアプリとかがJavaで組まれていることを考えると無視できない問題であることが分かります。 次にnullableであることです。つまり、findViewByIdが抱えていた問題が解決できていないということです。 そして、コードが汚くなるということです。 Kotlin Android ExtensionsではXMLで定義されたidと全く同じ名前の変数にいろいろ準備してくれます。 しかし、そもそもXMLはスネークケース(kotlin_is_best)、Kotlinではキャメルケース(kotlinIsBest)と命名規則が違います。したがってKotlinのコードに本来あるべきではないスネークケースが紛れ込むことになります。 これらの理由からサポートが終了してしまったとのことです。  3.ViewBindingそしてこれらの問題をほぼ全部解決するのがViewBindingとなります。 このViewBindingがどういうものなのかを書くと長くなってしまうので省略しますが、導入することにデメリットはないという人もいるくらいのものです。必ず導入してあげましょう。 参考URL: https://developer.android.com/topic/libraries/view-binding?hl=ja   ちなみに私のアプリは現在懸命にKotlin Android Extensionsから移行している最中です…皆さんも気を付けましょう。

> 内容を見る