<?xml version="1.0" encoding="UTF-8" ?>
<rss version="0.91">
  <channel>
    <title>Sheeprograming</title>
    <description>ひつじのひよこがプログラミングします。
お仕事や趣味で困ったこととか、何度も「あれ？どうだったかしら」と調べたりしたこととか、作ったものとか、こどものこととかを書きます
★前は定期更新してましたが今は不定期更新です</description>
    <link>http://sheeprogramming.iku4.com/</link>
    <language>ja</language>
    <copyright>Copyright (C) NINJATOOLS ALL RIGHTS RESERVED.</copyright>

    <item>
      <title>Discord のテキストチャットのログをスラッシュコマンドだけで DL する</title>
      <description>&lt;blockquote class=&quot;twitter-tweet&quot;&gt;
&lt;p lang=&quot;ja&quot; dir=&quot;ltr&quot;&gt;（雛&amp;acute;-`）.｡ｏＯ（今のところ MAX 2000 ポストまでだけど Discord のテキストチャンネルのログを Discord 上の操作だけで DL できるようにした） &lt;a href=&quot;https://t.co/vd82Fw9Pqm&quot;&gt;pic.twitter.com/vd82Fw9Pqm&lt;/a&gt;&lt;/p&gt;
&amp;mdash; しゅんしゅんひよこ (@Shunshun94) &lt;a href=&quot;https://twitter.com/Shunshun94/status/1781531636276052137?ref_src=twsrc%5Etfw&quot;&gt;April 20, 2024&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/Shunshun94/discord-textChatLogger/tree/master/python&quot; title=&quot;&quot; target=&quot;_blank&quot;&gt;こちらにソースコードと説明&lt;/a&gt;。各々設置したければ設置してください式。CGI サーバがあれば動くのでゆとシートとか運用している人なら簡単に使えるんじゃないかな&lt;/p&gt;</description> 
      <link>http://sheeprogramming.iku4.com/Entry/672/</link> 
    </item>
    <item>
      <title>Discord はサーバに入ってない人も BAN できる</title>
      <description>&lt;p&gt;他のサーバで見た「アッ、この人がうちのサーバに来たら困るなぁ」はままある。そんなときに未然に BAN しておく、なんてテクニックが使える。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;コマンドプロンプトで次のようにすると対象ユーザがサーバにいようがいまいが BAN できてしまう。無論、コマンドプロンプトでなくても BAN はできるが他のツールをわざわざ導入しなくてもできるのは旨味だろう。わかる人向けに書くと curl で Discord の API を叩いているだけなので コマンドプロンプトでなくてもやれる。&lt;/p&gt;
&lt;pre&gt;curl -X PUT -H &quot;Authorization:Bot &lt;span style=&quot;color: red;&quot;&gt;${BOTの Token}&lt;/span&gt;&quot; -d &quot;{}&quot; https://discordapp.com/api/guilds/&lt;span style=&quot;color: red;&quot;&gt;${サーバの ID}&lt;/span&gt;/bans/&lt;span style=&quot;color: red;&quot;&gt;${BAN したいユーザの ID}&lt;/span&gt;

echo 以下は実行例
curl -X PUT -H &quot;Authorization:Bot &lt;span style=&quot;color: red;&quot;&gt;MzAyNDU1MTg4MzQ4NzNzNzk0.WPPhWV.M4cqMTmBNIjJpg-7s1Gd9QtyRbQ&lt;/span&gt;&quot; -d &quot;{}&quot; https://discordapp.com/api/guilds/&lt;span style=&quot;color: red;&quot;&gt;302452071993442307&lt;/span&gt;/bans/&lt;span style=&quot;color: red;&quot;&gt;258118613125300224765463&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;bot に適切な権限があることを実行前に確認すること。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;そんなことをせずとも GUI から BAN すればいいじゃないかというコメントもあると思う。だが、GUI からは今サーバにいるメンバーしか BAN できない。だが、この方法ならば対象ユーザが入ってくる前に予防的に BAN することができる。「アッ、この人がうちのサーバに来たら困るなぁ」に対して威力を発揮するわけだ。&lt;/p&gt;</description> 
      <link>http://sheeprogramming.iku4.com/Entry/671/</link> 
    </item>
    <item>
      <title>ゆとシートの画像圧縮</title>
      <description>&lt;p&gt;アップロード可能なサイズ（初期設定は 1MB）を超えた場合、以下で画像を圧縮している。&lt;br /&gt;
&lt;a href=&quot;https://github.com/yutorize/ytsheet2/blob/444d0685463fa735b9264b7f31c1d7816aefdcfd/_core/lib/edit.js#L173-L204&quot; title=&quot;&quot; target=&quot;_blank&quot;&gt;_core/lib/edit.js function imageCompressor&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;再帰的に圧縮を試み、&lt;strong&gt;10回試みて失敗したら諦めている&lt;/strong&gt;。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;圧縮してアップロードするため「&lt;a href=&quot;https://github.com/yutorize/ytsheet2/blob/444d0685463fa735b9264b7f31c1d7816aefdcfd/sw2.5/config.cgi.default#L19-L21&quot; title=&quot;&quot; target=&quot;_blank&quot;&gt;config.cgi で $image_maxsize&lt;/a&gt; の値を0にしても画像をアップロードできちゃうのかな」と思ったがそんなことはなかった。ここの値を0にすれば問題なくアップロードを禁止できる。&lt;/p&gt;</description> 
      <link>http://sheeprogramming.iku4.com/Entry/670/</link> 
    </item>
    <item>
      <title>Qiita でやることにした</title>
      <description>&lt;p&gt;結構長いこと毎週末更新をやっていたが、仕事上 Qiita に投げたほうが何かと得なので一般的な記事は Qiit に投げつつ、趣味によりがちな記事をここに投げる方向に切り替えるとした。もふもふ&amp;hellip;&amp;hellip;&lt;/p&gt;</description> 
      <link>http://sheeprogramming.iku4.com/Entry/669/</link> 
    </item>
    <item>
      <title>あんよが上手月間</title>
      <description>&lt;p&gt;会社がウォーキング月間なので最近散歩するようにしている。&lt;/p&gt;
&lt;p&gt;普段いかないような遠くのお店にあるきでいくと楽しい&amp;hellip;&amp;hellip;だが、これは自分が運転免許がないからこその楽しみかもしれない。ないしは車や電車だとアクセスしにくい場所に歩いていくのもいいかもしれない。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;しかし、こういうキャンペーンを会社が張るとういことは運動不足傾向がまずいことになっているのだろうな。&lt;/p&gt;</description> 
      <link>http://sheeprogramming.iku4.com/Entry/667/</link> 
    </item>
    <item>
      <title>GAS で環境変数を使う</title>
      <description>&lt;pre&gt;const url = PropertiesService.getScriptProperties().getProperty('EXTERNAL_URL') || 'https://sheeprogramming.iku4.com/';
&lt;/pre&gt;
&lt;p&gt;こうすると環境変数に値が入っていればそれを使うし、入ってなければデフォルト値を使う、というのができる。テスト環境限定の挙動とかしたい場合に使えるかも。&lt;/p&gt;</description> 
      <link>http://sheeprogramming.iku4.com/Entry/666/</link> 
    </item>
    <item>
      <title>録画とか</title>
      <description>&lt;p&gt;私は仕事で PC の画面を録画する際には Google Meets を使っていることが多い。Google Meet の適当な部屋に入り、画面共有した上でミーティングの録画を行うのである。Meet に誰かと一緒に入室しておく必要もない。これで趣味でも録画が簡単だなと思ったのだが、Google Meet の録画は有料プランじゃないとできないらしい（&lt;a href=&quot;https://support.google.com/meet/answer/9308681?hl=ja&quot; title=&quot;&quot; target=&quot;_blank&quot;&gt;Google Meet ヘルプ&lt;/a&gt;）。&lt;/p&gt;
&lt;p&gt;なので、趣味においては&lt;a href=&quot;https://chrome.google.com/webstore/detail/screen-recorder-for-googl/eclbecdgdoahkliaijlpkigldlkojjdn?hl=ja&quot; title=&quot;&quot; target=&quot;_blank&quot;&gt;Google Chrome 用スクリーンレコーダー&lt;/a&gt;を単純な画面録画では使用している。これだとアプリの音や音声は入らないのがネックだが操作解説などであれば十分ではある。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Windows のゲームバーが追加のアプリインストールなども要らずに最も簡単なのだと思うが、私の手元だとどうも思い通りに動いてくれない。もう少し試行錯誤してみる必要があるのかもしれない&amp;hellip;&amp;hellip;？&lt;/p&gt;</description> 
      <link>http://sheeprogramming.iku4.com/Entry/668/</link> 
    </item>
    <item>
      <title>次男がひとりでねんねするようになった</title>
      <description>&lt;p&gt;年長さんの次男が11月から1人で寝るようになった。ベッドで1週間寝ているが、落ちたり夜泣いたりすることもない。&lt;/p&gt;
&lt;p&gt;感慨深いような、寂しいような。大人の階段のぼっている。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;なお、最近は急に「10dL は 1L なんだー」とか言い出したのでちょっとビビっている。&lt;/p&gt;</description> 
      <link>http://sheeprogramming.iku4.com/Entry/665/</link> 
    </item>
    <item>
      <title>Google Spreadsheet の装飾を HTML 化する</title>
      <description>&lt;p&gt;GAS で書いた。&lt;/p&gt;
&lt;pre&gt;function myFunction() {
  const styles = [
    {
      name: 'getFontSize',
      func: (val)=&amp;gt;{if(val) {return `font-size:${val}px;`}}
    }, {
      name: 'getForegroundColor',
      func: (val)=&amp;gt;{if(val) {return `color:${val};`}}
    }, {
      name: 'isBold',
      func: (val)=&amp;gt;{if(val) {return `font-weight:bold;`}}
    }, {
      name: 'isItalic',
      func: (val)=&amp;gt;{if(val) {return 'font-style: italic;';}}
    }, {
      name: 'isStrikethrough',
      func: (val)=&amp;gt;{if(val) {return 'text-decoration: line-through ';} else {return 'text-decoration: ';}}
    }, {
      name: 'isUnderline',
      func: (val)=&amp;gt;{if(val) {return 'underline;';} else {return ';';}}
    }
  ];

  const sheet = SpreadsheetApp.getActiveSheet();
  const cell = sheet.getRange(1, 1);
  const elements = cell.getRichTextValue().getRuns();
  const html = elements.map((element)=&amp;gt;{
    const style = styles.map((style)=&amp;gt;{
      return style.func(element.getTextStyle()[style.name]()) || '';
    }).join('');
    return `&amp;lt;span style=&quot;${style}&quot;&amp;gt;${element.getText().replaceAll('\n', '&amp;lt;br/&amp;gt;')}&amp;lt;/span&amp;gt;`;
  }).join('');
  console.log(html);
}
&lt;/pre&gt;</description> 
      <link>http://sheeprogramming.iku4.com/Entry/664/</link> 
    </item>
    <item>
      <title>ゲーミング文字列する CSS を書いた</title>
      <description>&lt;p&gt;&lt;a href=&quot;https://shunshun94.github.io/shared/other/io/github/shunshun94/util/decoration/index.html&quot; title=&quot;&quot; target=&quot;_blank&quot;&gt;こちら&lt;/a&gt;。HTML を書くのが少し面倒なのでそこだけ JS で書かせているが、一応 CSS だけで動く。&lt;/p&gt;</description> 
      <link>http://sheeprogramming.iku4.com/Entry/663/</link> 
    </item>

  </channel>
</rss>