ローカルに保存してある論文(PDF)のタイトルをまとめてググる方法

概要

文献のリストを作らにゃならんという事になったんだが, 今までまともな文献管理ソフトを使ってなかったので非常に困った. ということでローカルに保存してあるPDFのタイトルをえいやっとググってあとは人力でどうにかしたろうという目論見.

環境

一応 OS: Ubuntu 21.04
Bash: 5.1.4

ワンライナーで書く

こんだけ. もっと賢い方法あったら教えてクレメンス

$PRE_IFS=$IFS; IFS=$'\n'; ls |while read; do sed 's/\.[^\.]*$//'; sed 's/_/ /g';done | (while read;do filename=`sed -e 's/_/ /g' -e 's/^/https:\/\/www.google.com\/search?q=/' `;firefox --newtab $filename ;done)

reCAPTCHAが

reCAPTCHAがここぞとばかりに起動したりしなかったりする. 小分けにするとしなかったりするけど結構したりもする. ここは気合で乗り切る(地獄)

NETGEARのJGS524PEでパケロスが頻発してた話

概要

研究室のLANに置いてあるJGS524PEでパケロスが頻発してた話. 初歩的すぎて恥ずかしいが備忘録として書いておく.

環境・構成

f:id:cd_sioremon:20210830135436j:plain
見づらいけど許して

こんな感じ RTX1200でポートVLANを切ってそのままスイッチに食わせていた.

状況

どのVLANでもパケロスが頻発していた. 良い時で20%程度, 酷い時は96%くらい損失していた. 特にAPはあまりの使えなさに誰も使う人がいなくなっていたという状況.

どうなったの

RTXのポートに直挿ししてデフォゲまでpingを叩くとどのポートでも損失0%. スイッチを通した後に損失してるとして, VLANの設定だろうと踏んだ.

元々VLAN -> Port-based -> Advancedからスイッチ側のVLANを設定していたがこれがあかんかった模様. 802.1Qで設定し直したらパケロスしなくなりました.

感想

初心者すぎて何で直ったか理解してない. ちゃんと勉強します.

Ubuntu20.10でRの環境構築をやる

概要

Pop!_OS 20.10を使ってるが, Rのインストールにちょっとハマったのでメモ.

インストール

普通にaptでインストールしようとするとdependencyを解決出来なくてコケる. どうしようもないので自分でビルドする.

sudo apt-get install -y gfortran libreadline6-dev libx11-dev libxt-dev libpng-dev libjpeg-dev libcairo2-dev xvfb libzstd-dev texinfo texlive texlive-fonts-extra screen wget zlib1g-dev libbz2-dev liblzma-dev libpcre2-dev libcurl4-openssl-dev openjdk-11-jdk
cd /usr/local/src
sudo wget https://cran.rstudio.com/src/base/R-4/R-4.0.3.tar.gz
sudo su
tar zxvf R-4.0.3.tar.gz
cd R-4.0.3
./configure --enable-R-shlib
make
make install
cd ..
rm -rf R-4.0.3*
exit
cd

これでビルド出来る. RとRscriptのインストールはこれでおk.

その他

  • RstudioのインストールはRのインストールが終わってからやる. RstudioはバックエンドにRを使ってるのでRがインストールされてないと動かない.
  • VSCode上でRを書きたい人はjsonliteをインストールした方が良い.
    • $R
    • > install.packages('jsonlite') これでおk

latexで現在のページ/総ページ表記をさせたい

概要

院の研究計画書(14ページ参照)現在のページ数/総ページ数てな感じのフォーマットを指定されてた.
苦労したのでメモ.

環境

  • Pop!_OS 20.10
  • texlive 2020

texファイルの編集

プリアンブルに \usepackage{myfancyhdr}\usepackage{lastpage}, \pagestyle{fancy}, \cfoot{\thepage{}/{}\pageref{LastPage}}を追加する.
こんな感じ.

\documentclass[a4j,10pt, twocolumn]{jarticle}
\usepackage[dvipdfmx]{graphicx}
\usepackage{myfancyhdr}
\usepackage{amssymb}
% \usepackage{amsmath}
\usepackage{float}
\usepackage{usebib}
\bibinput{refs}
\usepackage{lastpage}
% \usepackage{slashbox}
%---------------------------------------------------
% ページの設定
%---------------------------------------------------
\setlength{\textwidth}{170truemm}
\setlength{\textheight}{250truemm}
\setlength{\topmargin}{-14.5truemm}
\setlength{\oddsidemargin}{-5.5truemm}
\pagestyle{fancy}
\cfoot{\thepage{}/{}\pageref{LastPage}}
\setlength{\headheight}{0truemm}
\setlength{\parindent}{1zw}

ちなみに使ったテンプレートはこれです.

styファイルを用意する

自分の環境だと

/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty

に目的のstyファイルがあった.

$kpsewhich fancyhdr.sty

でインストールされてるパスが分かる. こいつをcatしてコピペするなりcpするなりして作業ディレクトリに持っていきmyfancyhdr.styとして保存.

公式リポジトリから落としてきてもいいがバージョンが変わってるはずので適宜読み替えるか, 下に貼ったやつを丸コピしてください.

23行目を

\ProvidesPackage{fancyhdr}%

から

\ProvidesPackage{myfancyhdr}%

に変更する.

次に146-152行目と181行目をコメントアウトする. 181行目はコメントアウトしなくても大丈夫だけど, しなかったらページの上部に謎の横線が入る. 説明ダルいからどんな風になるかはコンパイルして確認してみてください. とりあえずここを消すと単にページ番号の表記が目的通りになる.

以下編集後のファイル全文

%%
%% This is file `fancyhdr.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% fancyhdr.dtx  (with options: `fancyhdr')
%% 
%% This is a generated file.
%% 
%% This file may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License, either version 1.3 of this license
%% or (at your option) any later version.  The latest version of this
%% license is in:
%% 
%%    http://www.latex-project.org/lppl.txt
%% 
%% and version 1.3 or later is part of all distributions of LaTeX version
%% 2005/12/01 or later.
%% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{myfancyhdr}%
           [2019/01/31 v3.10
                  Extensive control of page headers and footers]%
% Copyright (C) 1994-2019 by Piet van Oostrum <piet@vanoostrum.org>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\if@nch@mpty#1{\def\temp@a{#1}\ifx\temp@a\@empty}
\def\f@nch@def#1#2{\if@nch@mpty{#2}\f@nch@gbl\def#1{\leavevmode}\else
                                   \f@nch@gbl\def#1{#2\strut}\fi}
\let\f@nch@gbl\global
\newcommand{\f@nch@ifundefined}[1]{%
  \begingroup\expandafter\expandafter\expandafter\endgroup
  \expandafter\ifx\csname #1\endcsname\relax
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
    \fi}
\newcommand\f@nch@errmsg[1]{%
  \f@nch@ifundefined{PackageError}{\errmessage{#1}}{\PackageError{Fancyhdr}{#1}{}}}
\newcommand\f@nch@warning[1]{%
  \f@nch@ifundefined{PackageWarning}{\errmessage{#1}}{\PackageWarning{Fancyhdr}{#1}{}}}
\newcommand{\f@nch@forc}[3]{\expandafter\f@rc\expandafter#1\expandafter{#2}{#3}}
\newcommand{\f@rc}[3]{\def\temp@ty{#2}\ifx\@empty\temp@ty\else
                                    \f@nch@rc#1#2\f@nch@rc{#3}\fi}
\def\f@nch@rc#1#2#3\f@nch@rc#4{\def#1{#2}#4\f@rc#1{#3}{#4}}
\newcommand{\f@nch@for}[3]{\edef\@fortmp{#2}%
  \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}}
\newcommand\f@nch@default[3]{%
  \edef\temp@a{\lowercase{\edef\noexpand\temp@a{#3}}}\temp@a \def#1{}%
  \f@nch@forc\tmpf@ra{#2}%
  {\expandafter\f@nch@ifin\tmpf@ra\temp@a{\edef#1{#1\tmpf@ra}}{}}%
  \ifx\@empty#1\def#1{#2}\fi}
\newcommand{\f@nch@ifin}[4]{%
  \edef\temp@a{#2}\def\temp@b##1#1##2\temp@b{\def\temp@b{##1}}%
  \expandafter\temp@b#2#1\temp@b\ifx\temp@a\temp@b #4\else #3\fi}
\newcommand{\fancyhead}[2][]{\f@nch@fancyhf\fancyhead h[#1]{#2}}%
\newcommand{\fancyfoot}[2][]{\f@nch@fancyhf\fancyfoot f[#1]{#2}}%
\newcommand{\fancyhf}[2][]{\f@nch@fancyhf\fancyhf {}[#1]{#2}}%
\newcommand{\fancyheadoffset}[2][]{\f@nch@fancyhfoffs\fancyheadoffset h[#1]{#2}}%
\newcommand{\fancyfootoffset}[2][]{\f@nch@fancyhfoffs\fancyfootoffset f[#1]{#2}}%
\newcommand{\fancyhfoffset}[2][]{\f@nch@fancyhfoffs\fancyhfoffset {}[#1]{#2}}%
\def\f@nch@fancyhf#1#2[#3]#4{%
  \def\temp@c{}%
  \f@nch@forc\tmpf@ra{#3}%
  {\expandafter\f@nch@ifin\tmpf@ra{eolcrhf,EOLCRHF}%
    {}{\edef\temp@c{\temp@c\tmpf@ra}}}%
  \ifx\@empty\temp@c\else \f@nch@errmsg{Illegal char `\temp@c' in
    \string#1 argument: [#3]}%
  \fi \f@nch@for\temp@c{#3}%
  {\f@nch@default\f@nch@@eo{eo}\temp@c \if@twoside\else \if\f@nch@@eo
    e\f@nch@warning {\string#1's `E' option without twoside option is
      useless}\fi\fi \f@nch@default\f@nch@@lcr{lcr}\temp@c
    \f@nch@default\f@nch@@hf{hf}{#2\temp@c}%
    \f@nch@forc\f@nch@eo\f@nch@@eo
        {\f@nch@forc\f@nch@lcr\f@nch@@lcr
          {\f@nch@forc\f@nch@hf\f@nch@@hf
            {\expandafter\f@nch@def\csname
              f@nch@\f@nch@eo\f@nch@lcr\f@nch@hf\endcsname {#4}}}}}}
\def\f@nch@fancyhfoffs#1#2[#3]#4{%
  \def\temp@c{}%
  \f@nch@forc\tmpf@ra{#3}%
  {\expandafter\f@nch@ifin\tmpf@ra{eolrhf,EOLRHF}%
    {}{\edef\temp@c{\temp@c\tmpf@ra}}}%
  \ifx\@empty\temp@c\else \f@nch@errmsg{Illegal char `\temp@c' in
    \string#1 argument: [#3]}%
  \fi \f@nch@for\temp@c{#3}%
  {\f@nch@default\f@nch@@eo{eo}\temp@c \if@twoside\else \if\f@nch@@eo
    e\f@nch@warning {\string#1's `E' option without twoside option is
      useless}\fi\fi \f@nch@default\f@nch@@lcr{lr}\temp@c
    \f@nch@default\f@nch@@hf{hf}{#2\temp@c}%
    \f@nch@forc\f@nch@eo\f@nch@@eo
        {\f@nch@forc\f@nch@lcr\f@nch@@lcr
          {\f@nch@forc\f@nch@hf\f@nch@@hf
            {\expandafter\setlength\csname
              f@nch@O@\f@nch@eo\f@nch@lcr\f@nch@hf\endcsname {#4}}}}}%
  \f@nch@setoffs}
\newcommand{\lhead}[2][\f@nch@olh]%
                     {\f@nch@def\f@nch@olh{#2}\f@nch@def\f@nch@elh{#1}}
\newcommand{\chead}[2][\f@nch@och]%
                     {\f@nch@def\f@nch@och{#2}\f@nch@def\f@nch@ech{#1}}
\newcommand{\rhead}[2][\f@nch@orh]%
                     {\f@nch@def\f@nch@orh{#2}\f@nch@def\f@nch@erh{#1}}
\newcommand{\lfoot}[2][\f@nch@olf]%
                     {\f@nch@def\f@nch@olf{#2}\f@nch@def\f@nch@elf{#1}}
\newcommand{\cfoot}[2][\f@nch@ocf]%
                     {\f@nch@def\f@nch@ocf{#2}\f@nch@def\f@nch@ecf{#1}}
\newcommand{\rfoot}[2][\f@nch@orf]%
                     {\f@nch@def\f@nch@orf{#2}\f@nch@def\f@nch@erf{#1}}
\newlength{\f@nch@headwidth} \let\headwidth\f@nch@headwidth
\newlength{\f@nch@O@elh}
\newlength{\f@nch@O@erh}
\newlength{\f@nch@O@olh}
\newlength{\f@nch@O@orh}
\newlength{\f@nch@O@elf}
\newlength{\f@nch@O@erf}
\newlength{\f@nch@O@olf}
\newlength{\f@nch@O@orf}
\newcommand{\headrulewidth}{0.4pt}
\newcommand{\footrulewidth}{0pt}
\f@nch@ifundefined{footruleskip}%
      {\newcommand{\footruleskip}{.3\normalbaselineskip}}{}
\newcommand{\plainheadrulewidth}{0pt}
\newcommand{\plainfootrulewidth}{0pt}
\newif\if@fancyplain \@fancyplainfalse
\def\fancyplain#1#2{\if@fancyplain#1\else#2\fi}
\headwidth=-123456789sp
\let\f@nch@raggedleft\raggedleft
\let\f@nch@raggedright\raggedright
\let\f@nch@centering\centering
\let\f@nch@everypar\everypar
\def\f@nch@reset{\f@nch@everypar{}\restorecr\endlinechar=13
  \let\\\@normalcr \let\raggedleft\f@nch@raggedleft
  \let\raggedright\f@nch@raggedright \let\centering\f@nch@centering
  \def\baselinestretch{1}%
  \hsize=\headwidth
  \def\nouppercase##1{{\let\uppercase\relax\let\MakeUppercase\relax
      \expandafter\let\csname MakeUppercase \endcsname\relax##1}}%
  \f@nch@ifundefined{@newbaseline} % NFSS not present; 2.09 or 2e
  {\f@nch@ifundefined{@normalsize} {\normalsize} % for ucthesis.cls
   {\@normalsize}}%
  {\@newbaseline}% NFSS (2.09) present
  }
\fancyhf{}
% Lines 146-152 were commented out by sioremon on May 14, 2021
% \if@twoside
%   \fancyhead[el,or]{\fancyplain{}{\slshape\rightmark}}
%   \fancyhead[er,ol]{\fancyplain{}{\slshape\leftmark}}
% \else
%   \fancyhead[l]{\fancyplain{}{\slshape\rightmark}}
%   \fancyhead[r]{\fancyplain{}{\slshape\leftmark}}
% \fi
\fancyfoot[c]{\rmfamily\thepage} % page number
\newcommand\f@nch@vbox[2]{%
  \setbox0\vbox{#2}%
  \ifdim\ht0>#1\relax
    \f@nch@warning{%
      \string#1 is too small (\the#1): ^^J%
      Make it at least \the\ht0.^^J%
      We now make it that large for the rest of the document.^^J%
      This may cause the page layout to be inconsistent, however\@gobble
    }%
    \dimen0=#1\relax
    \global#1=\ht0\relax
    \ht0=\dimen0 %
  \fi
  \box0}
\newcommand\f@nch@head[5]{%
  #1%
  \hbox to\headwidth{%
    \f@nch@reset
    \f@nch@vbox\headheight{%
      \hbox{%
        \rlap{\parbox[b]{\headwidth}{\raggedright#2}}%
        \hfill
        \parbox[b]{\headwidth}{\centering#3}%
        \hfill
        \llap{\parbox[b]{\headwidth}{\raggedleft#4}}%
      }%
      % Lines 181 were commented out by sioremon on May 14, 2021
      % \headrule
    }%
  }%
  #5%
}
\newcommand\f@nch@foot[5]{%
  #1%
  \hbox to\headwidth{%
    \f@nch@reset
    \f@nch@vbox\footskip{%
      \setbox0=\vbox{\footrule}\unvbox0
      \vskip\footruleskip
      \hbox{%
        \rlap{\parbox[t]{\headwidth}{\raggedright#2}}%
        \hfill
        \parbox[t]{\headwidth}{\centering#3}%
        \hfill
        \llap{\parbox[t]{\headwidth}{\raggedleft#4}}%
      }%
    }%
  }%
  #5%
}
\def\headrule{{\if@fancyplain\let\headrulewidth\plainheadrulewidth\fi
    \hrule\@height\headrulewidth\@width\headwidth
    \vskip-\headrulewidth}}
\def\footrule{{\if@fancyplain\let\footrulewidth\plainfootrulewidth\fi
    \hrule\@width\headwidth\@height\footrulewidth}}
\def\ps@fancy{%
  \f@nch@ifundefined{@chapapp}{\let\@chapapp\chaptername}{}% for amsbook
\f@nch@ifundefined{MakeUppercase}{\def\MakeUppercase{\uppercase}}{}%
\f@nch@ifundefined{chapter}%
 {\def\sectionmark##1{\markboth{\MakeUppercase{\ifnum \c@secnumdepth>\z@
        \thesection\hskip 1em\relax
      \fi ##1}}{}}%
  \def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne
    \thesubsection\hskip 1em\relax \fi ##1}}}%
 {\def\chaptermark##1{\markboth {\MakeUppercase{\ifnum
      \c@secnumdepth>\m@ne \@chapapp\ \thechapter. \ \fi ##1}}{}}%
\def\sectionmark##1{\markright{\MakeUppercase{\ifnum \c@secnumdepth >\z@
      \thesection. \ \fi ##1}}}%
}
\ps@@fancy
\gdef\ps@fancy{\@fancyplainfalse\ps@@fancy}%
\ifdim\headwidth<0sp
    \global\advance\headwidth123456789sp\global\advance\headwidth\textwidth
\fi}
\def\ps@fancyplain{\ps@fancy \let\ps@plain\ps@plain@fancy}
\def\ps@plain@fancy{\@fancyplaintrue\ps@@fancy}
\let\ps@@empty\ps@empty
\def\ps@@fancy{%
  \ps@@empty
  \def\@mkboth{\protect\markboth}%
  \def\@oddhead{\f@nch@head\f@nch@Oolh\f@nch@olh\f@nch@och\f@nch@orh\f@nch@Oorh}%
  \def\@oddfoot{\f@nch@foot\f@nch@Oolf\f@nch@olf\f@nch@ocf\f@nch@orf\f@nch@Oorf}%
  \def\@evenhead{\f@nch@head\f@nch@Oelh\f@nch@elh\f@nch@ech\f@nch@erh\f@nch@Oerh}%
  \def\@evenfoot{\f@nch@foot\f@nch@Oelf\f@nch@elf\f@nch@ecf\f@nch@erf\f@nch@Oerf}%
}
\def\f@nch@Oolh{\if@reversemargin\hss\else\relax\fi}
\def\f@nch@Oorh{\if@reversemargin\relax\else\hss\fi}
\let\f@nch@Oelh\f@nch@Oorh
\let\f@nch@Oerh\f@nch@Oolh
\let\f@nch@Oolf\f@nch@Oolh
\let\f@nch@Oorf\f@nch@Oorh
\let\f@nch@Oelf\f@nch@Oelh
\let\f@nch@Oerf\f@nch@Oerh
\def\f@nch@offsolh{\headwidth=\textwidth\advance\headwidth\f@nch@O@olh
                   \advance\headwidth\f@nch@O@orh\hskip-\f@nch@O@olh}
\def\f@nch@offselh{\headwidth=\textwidth\advance\headwidth\f@nch@O@elh
                   \advance\headwidth\f@nch@O@erh\hskip-\f@nch@O@elh}
\def\f@nch@offsolf{\headwidth=\textwidth\advance\headwidth\f@nch@O@olf
                   \advance\headwidth\f@nch@O@orf\hskip-\f@nch@O@olf}
\def\f@nch@offself{\headwidth=\textwidth\advance\headwidth\f@nch@O@elf
                   \advance\headwidth\f@nch@O@erf\hskip-\f@nch@O@elf}
\def\f@nch@setoffs{%
  \f@nch@gbl\let\headwidth\f@nch@headwidth
  \f@nch@gbl\let\f@nch@Oolh\f@nch@offsolh
  \f@nch@gbl\let\f@nch@Oelh\f@nch@offselh \f@nch@gbl\let\f@nch@Oorh\hss
  \f@nch@gbl\let\f@nch@Oerh\hss \f@nch@gbl\let\f@nch@Oolf\f@nch@offsolf
  \f@nch@gbl\let\f@nch@Oelf\f@nch@offself \f@nch@gbl\let\f@nch@Oorf\hss
  \f@nch@gbl\let\f@nch@Oerf\hss
}
\newif\iff@nch@footnote
\AtBeginDocument{%
  \let\latex@makecol\@makecol
  \def\@makecol{\ifvoid\footins\f@nch@footnotefalse\else\f@nch@footnotetrue\fi
    \let\topfloat\@toplist\let\botfloat\@botlist\latex@makecol}%
}
\newcommand\iftopfloat[2]{\ifx\topfloat\empty #2\else #1\fi}%
\newcommand\ifbotfloat[2]{\ifx\botfloat\empty #2\else #1\fi}%
\newcommand\iffloatpage[2]{\if@fcolmade #1\else #2\fi}%
\newcommand\iffootnote[2]{\iff@nch@footnote #1\else #2\fi}%
\newcommand{\fancypagestyle}[2]{%
  \@namedef{ps@#1}{\let\f@nch@gbl\relax#2\relax\ps@fancy}}
\endinput
%%
%% End of file `fancyhdr.sty'.

雰囲気でlatexを触っているのでstyファイルだのclsファイルってのが何のファイルかイマイチ分かっとらん. なんか間違いがあればコメントで教えてください.

参考文献

zenn.dev

osksn2.hep.sci.osaka-u.ac.jp

tex.stackexchange.com

https://www.y-misc.org/tex/template/twocolumn.tex

JCOM回線で自宅サーバ(Ubuntu)を建ててsshするまで(初心者向け)

現在マンションに住んでいるんですが, 家の構造上光回線が引けないらしく, やむなくJCOM回線を契約しています. JCOMは固定IPオプションが無いのでよくある自宅サーバを建てて外部に公開, みたいなことが出来ません.

以前から自宅サーバなるものをやってみたかったので今回はJCOM回線の人(に限らず固定IPが持てない人)向けのお手軽サーバ構築をやってみたいと思います.

ちなみに私はサーバやネットワークに関して完全素人なので多々間違っている記述がある可能性があります. 指摘があればコメントで教えてください.

対象読者

  • 固定IP持ってないけど自宅サーバをやってみたい人
  • Linuxコマンドが一通り分かる人

Linuxコマンドはググればいくらでも情報出てくるので, 分からなかったらググってください.

プラン

固定IPがないので他のやり方を探さないといけません. 選択肢は2つです.

  1. VPSからVPNを張って疑似固定IPゲット
    さくらやlightsailと言った適当なVPSを借りてVPNを張り, サーバを公開する方法です. しかしVPNサーバ建てるのはめんどくさそうだし, 第一余計に金が掛かるので却下(今非常に金欠). 今回は何か目的があってサーバを建てる訳でもないのでそこまでしたくはないです.

  2. DDNSを使う
    Dynamic DNSというやつです. 通常の家庭はプロバイダから動的にグローバルIPを振られている為, サーバを公開することが出来ない訳ですが, そのグローバルIPが変わるごとにDNSに通知をしてやればドメイン名でアクセスすることが可能になる訳です.
    DDNSの提供者は様々ありますが, 今回は老舗で有名所のmydns.jpを選択. 一定期間IPアドレスの通知が無いと接続出来なくなってしまいますが, DNSドメインも無料で使わせてくれます. ありがてぇ... (お金に余裕が出来たら寄付したい)

設定

サーバ側

方針が決まったのでさっそくサーバを建てていきます. 今回のサーバのスペックはこちら

化石みたいなマシンですが, 大したことしないのでこのスペックでも十分でしょう. ちなみにジャンク5000円で買いました. Win10のライセンスも付いてたのでとてもお得.

DDNSを使うやり方ではルータにポートフォワードの機能が付いている必要があります. だいたい本体裏に設定用のIPアドレスが書いてあるのでブラウザからアクセスして確認してください(ちなみにうちの機種では192.168.0.1でした)

まずUSBメモリUbuntu Serverを焼いていきます. ここは各自ググってください.

そしてインストールします. ここもググりましょう(は?). インストール時に「OpenSSHサーバを入れますか?」みたいな事を聞かれるのでそっちもインストールしておいてください.

インストールが終わったらまずLAN内でのIPを固定します. Ubuntu Serverの16.10以降は/etc/netplan以下にyamlを置くことで設定出来ます. 初期状態では00-installer-config.yamlとか/etc/netplan/50-cloud-init.yamlとか言うファイルが置いてあるようですが, これらは触らない方がいいらしい. 参考↓ qiita.com

この記事書くまで気づいてなかったけどこれうちの大学のAdvent Calendarじゃん...(ちなみに私は村井研とは無関係)

99_config.yamlを作製して設定内容を記述します.
設定例:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s25:
      dhcp4: false
      dhcp6: false
      addresses: [192.168.0.24/24]
      gateway4: 192.168.0.1
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]

yamlなのでインデントはタブ文字だとアウトらしい. スペースでインデントしてください. あとファイルの最後に改行を入れとかないとエラーを吐きます.

magazine.rubyist.net

編集し終わったらsudo netplan applyで設定を反映させます.

DDNS

今度はDDNSの設定をやっていきます. まずmydns.jpを開いてユーザ登録をします. しばらくするとメールが届くのでそこに書いてあるIDとパスワードでログイン.

ドメインの設定

ログイン出来たら左側のメニューからDOMAIN INFOを選択.
Domainの欄に hogefuga.mydns.jp みたいな感じで使いたいドメイン名を入力します. mydnsでは無料で使えるドメインを発行していますが, 自分で用意することも出来ます. めんどくさいので今回は割愛.

MXの欄はメールサーバを建てる時に入力します. 今回はやらないのでスルー. 最後にHostname, レコードのタイプを入力します. 今回はHostnameに*, レコードはAを選択します. IPv4だけでいい人はAを, v6も使いたい人はAAAAを選択します.
一行下の欄ではHostnameにwww, レコードにCNAMEを設定します. こうすることで

hogefuga.mydns.jp

でも

www.hogefuga.mydns.jp

でもアクセス出来るようになります.

IPアドレスの設定

ドメインの設定が終わったら, 次はドメインIPアドレスの紐づけを行う必要があります. mydnsのサイト内でも出来ますが, 今回は手元のサーバから通知をしてみます. まずは自分のIPアドレスを確認します. ルータの裏側に書いてあるIPアドレスからルータの設定画面にログインします. IPアドレスが書かれてない場合は取説を読むかメーカーに問い合わせてください.

ルータの設定画面
こんな感じ, 諸々のアドレスはむちゃくちゃに書き換えてあります
WAN側のIPv4アドレスってやつが今回mydnsに通知するアドレスです.

あとは

qiita.com

この記事を参考にIPアドレスの通知と定期実行の設定をします(他力本願).

ルータの設定

最後にポートフォワードの設定をします. 先程のルータの設定画面からポートフォワードの設定画面を探します.
うちのルータではこんな感じでした.

ポートフォワードの設定画面
ポートフォワードの設定画面
開始ポートはルータのポート, 終了ポートはサーバ側のポートを指します. sshは基本的には22番ポートを使うので, ルータの22番に入ってきたやつをサーバの22番に流します.
ここまでやったらあとは

$ssh サーバのユーザ名@hogefuga.mydns.jp

ssh接続が出来るようになります. 出来ない場合はmydnsの設定の反映が追いついてない場合があるので, 15分程待ってから再度sshしてみてください.

ここでは最低限の設定しか紹介していないので, そのまま使うとセキュリティ的にヤバいと思います. 「ssh セキュリティ」とかでググれば死ぬほど情報出てくるので後は頑張ってください.

あとがき

固定IPをくれ(切実)

VSCode on Ubuntuがターミナルから起動出来ない時の対処法

以前は

$code hoge.txt

でターミナルからVScodeを起動出来てたが, どっかのアップデートでコマンドが変わってしまった模様.

以下は問題が起きたVSCodeの情報

Version: 1.53.2
Commit: 622cb03f7e070a9670c94bae1a45d78d7181fbd4
Date: 2021-02-11T11:48:44.518Z
Electron: 11.2.1
Chrome: 87.0.4280.141
Node.js: 12.18.3
V8: 8.7.220.31-electron.0
OS: Linux x64 5.8.0-7642-generic

ディストリはPop!_OS 20.10.

探してみると/usr/share/code/bin/以下にcodeというシェルスクリプトを発見. こいつを叩くとVSCodeが呼ばれるらしい.
/usr/share/code/codeという同名のバイナリがあるが, そいつを直接叩くとelectronがこんな感じのエラーを吐く.

 sioremon@Pop!_OS : ~ $ cd /usr/share/code/
 sioremon@Pop!_OS : code $ ./code
(electron) Sending uncompressed crash reports is deprecated and will be removed in a future version of Electron. Set { compress: true } to opt-in to the new behavior. Crash reports will be uploaded gzipped, which most crash reporting servers support.
[main 2021-02-18T10:53:55.241Z] update#setState idle
bash: 端末プロセスグループを設定できません (-1): デバイスに対する不適切なioctlです
bash: このシェルではジョブ制御が無効になっています
(node:15187) electron: The default of contextIsolation is deprecated and will be changing from false to true in a future release of Electron.  See https://github.com/electron/electron/issues/23506 for more information
(node:15187) electron: The default of contextIsolation is deprecated and will be changing from false to true in a future release of Electron.  See https://github.com/electron/electron/issues/23506 for more information
^C sioremon@Pop!_OS : code $ 

$which codeしても何も出てこないので内部でどんな風に呼ばれているかは分からんが, とりあえず

alias code='/usr/share/code/bin/code'

を.bashrcに追記した(アップデートでまた問題が起こりそうな予感).

texのコンパイルが参考文献のURLでコケる時の対処法

概要

タイトル通り, 備忘録なので雑です

こんな感じのソースがある時,

\begin{thebibliography}
\bibitem{shinyouju}
生物多様性センター:第2回自然環境保全基礎調査(植生調査) 現存植生図,
\urlj{https://www.biodic.go.jp/vg_map/one-to-fifty-thousand/332.jpg}%
\refdatej{2020-12-15}.
\end{thebibliography}

コンパイルがこんな感じでコケる.

<inserted text> 
                $
l.263 ....jp/vg_map/one-to-fifty-thousand/332.jpg}
                                                  %
? 

原因

URLに_が含まれているのが原因.

対処法

エスケープ文字である\を_の前に挿入すればおk. こんな感じ.

\begin{thebibliography}
\bibitem{shinyouju}
生物多様性センター:第2回自然環境保全基礎調査(植生調査) 現存植生図,
\urlj{https://www.biodic.go.jp/vg\_map/one-to-fifty-thousand/332.jpg}%
\refdatej{2020-12-15}.
\end{thebibliography}

これでコンパイルが通る.