「標準出力」を含む日記 RSS

はてなキーワード: 標準出力とは

2023-08-15

契約書の袋綴じと和綴じが別のものになったのは結構最近コンピュータプリンタ進化のため

契約書袋綴じを指示されて和書の袋綴じをして怒られたって棘がバズってるけど

https://b.hatena.ne.jp/entry/s/togetter.com/li/2205369

いや、元々契約書の綴じ方も和綴じの袋綴じをしていて今でもやる場合があるのだ。そして昭和契約書やら判決文、戸籍謄本などの法的文書は和綴じの方の袋綴じがされている。

そもそも現代契約書の綴じ方には「袋」になっているところがない。なのに袋綴じと言われるのは和綴じから変わったかなのだ

なんで平成中期というか1990年代前半に替ったかというと、コンピュータの出力法が変わったせいなのだ

 

和綴じ式法的文書の袋綴じ

契約書などには割り印をする。ページの差し替えをされない為だ。そして契約時点で書面の内容に異存なしという意味で双方のハンコをページにまたがる形で押す。また背表紙の封紙と表紙にも割り印をする。

ページの割り印の仕方は、上の余白で折って隣のページとまたがる様に押印する。

でもこれちょっと無理やりだと思わない?

実は1990年代までは今のように両面印刷して製本するのではなく、原稿用紙のような升目用紙(内容証明用紙のようなの)に手書きで書き、それを半分に折って重ね袋綴じしていた。綴じるのに使うのは布の「こより」で、千枚通しで穴を開けてから紐を通す。河野太郎廃止させたやつだね。だから千枚通しはオフィス用品だったのだ。

そして袋綴じされた紙を膨らませて片側のページを山型に折ってそこに割り印をしていた。

ワープロ」を使うようになっても同じ。片面印刷して袋綴じにして割り印をする。

なんでパソコンじゃなくてワープロなのか?これは後で説明する。

 

戸籍謄本などはやはり手書きで同じように袋綴じされて割り印され渡された。

そもそも謄本」と云う言い方をするのは、昔はコピーが無かった(青焼きはあるがコストが高くナンセンス)ので手写しであり、書面の中身を全部写したのが謄本で、労力が大変なので必要な部分だけ写したのが「抄本」だった為だ。今でも閉鎖謄本/抄本請求するとこの形式で出てくる(流石にコピーを使うが)。そして和綴じ式の袋綴じで割り印されている場合がある。

 

こより綴じの方は昭和後期には省略されてホチキスになり、これは市役所弁護士が先行したようだ。だが契約書類はこよりorこより+封紙+割り印が使用されていた。

 

ラインプリンタとページプリンタ

コンピュータ印刷するというのは今では当たり前で、印刷するのは白いオフィス用紙で、一枚ずつ印刷される。

この印刷が出来るプリンタはページプリンタという。

だが嘗てはコンピュータで使われるプリンタラインプリンタが主流だった。ページプリンタDTPなど特殊分野でのみ使用され、一般的OA機器メーカーラインプリンタしか製造していなかった。

ラインプリンタの用紙というのは、両側に穴が沢山開いてて薄緑などで罫線が引かれていて、ミシン目が入ってて切り取りが出来る連続用紙の事である

ラインプリンタ場合印刷区切りが一行づつになっていて、プリンタ印刷指示が送られるとそのテキスト印刷して改行の必要がある場合は改行しそこで終了する。ミシン目まで行送りするという事は無い。

から票として一枚ずつ切り離す場合は、ミシン目が来るところまで行送りを行って停止するという印刷指示を組んでおく。

また、嘗ての標準出力の延長でもあるのでコマンドラインとの相性も良く、リダイレクトパイプ(|)でデバイスファイルlp、PRN)にテキストを流すとそれが印刷されるという簡単さであった。

 

ラインプリンタはページプリンタに押されて無くなったかに見えるが、実はPC POS印刷されるレシートラインプリンタの生き残りだ。

 

プリンタ印刷方法インクをしみ込ませたインクリボンを活字で叩くというのが主流で、日本語圏だと沢山のピンを弾いて打つ、ドットマトリックス方式が主流だった。これだと一字のドット数が16*16くらいが限界なので、細かい漢字は打てない。

からカタカナ+数字しか出力されない伝票などの使用が主で、ページプリンタは普及しなかった。

 

一方、ワープロ専用機は最初からサーマルプリンタを備えていてページプリントが前提であった。だから普段オフィス業務コンピュータドットマトリクス文書の清書はワープロというのが一般的だった。

これで法的文書ワープロ作成し、縦書きで出力して手書きと同じ袋綴じにするというのが増えてきた。

今でも弁護士文書表題倍角文字が使われたりするのもこの名残だ。

 

これがWindows95が普及するとページプリンタの普及も進み、イントラネット接続される複合機が普及するなどで印刷=ページプリントとなったのだ。そしてやがて法的書類も両面印刷して製本するという形になった。

その時に本来の袋が出来る袋綴じは過去のものとなって袋が無いのに袋綴じと言われるようになった。故に今の袋綴じ方が当たり前になったのは20年位かと思われる。

 

和文タイプライター

因みにワープロより早くから、またワープロと平行する形で和文タイプというのがあり、これで升目用紙に、または白紙に升目用紙と同じ字の間隔で印刷するという方法もあったのだが、和文タイプというのはとても時間が掛かった。

https://youtu.be/JHJhah1c-K0

この人は流石に遅過ぎなのだが、タイプするのが超絶大変な代物で、行政書士弁護士など気合が入った士業と法務局裁判所など気合が入った役所気合が入った大企業契約書など、兎に角気合が相当入ってないと使われない清書用アイテムだった。ある意味、100kgぐらいの巨大複合機より気合がある。

 

オフィスプリンタ歴史

というわけで袋の部分が無いのに袋綴じという謎かけみたいな名前の背景にはオフィス史とコンピュータプリンター史が隠れていたのであります

 

 

ついでなのでオフィスと紙に関するトリビアを置いておくよ

A4が当たり前になったのは1990年代前半

昭和日本ではオフィス用紙も法的文書原稿用紙も、B5だった。ずっとA4より小さい。会社でも役所でも裁判所判決文でも全てB5だ。

だが1990年頃に役所関係書類をA4にするというお触れが出た。これは国際化の一環で、ISOに定めれているのはA列だけでB列は日本独自規格。困ったことに当時一番の貿易相手国だったアメリカアメリカレターサイズをN倍したANSIという独自規格なのだが(またですか)、まぁレターサイズはA4に近いしA4を標準化すれば万事うまくいくでしょとの見込みだ。

これに数年遅れで企業も倣ったのでB5というのはパージされることになった。

今、昔の裁判書類契約書、権利書を見ると実に小さい。

世の中全部B5からA4に変わったのに、大学ノートだけはB5が主流のままだ。あれは何でなんでしょね?小さいと使いにくいのに。

 

紙質の変遷

今はオフィス用紙として白くてある程度の厚みがあるものが使われているが、これはコンピュータ印刷一般化するまではとても薄いペラペラでテカテカつるつるしている紙が使われ、これが「公的場所で使う」紙だった。

先述の手書きワープロの升目用紙も全てこの極薄+つるつるの紙である。両面印刷して製本されなかったのもこれが理由の一つだろう。

これは「カレンダー紙」で、紙を押しつぶす鉄製のカレンダーロールの間を極圧で通して押しつぶし、薄くする。

トレーシングペーパークッキングペーパーと同じだ。

また、請求書類封筒は中の請求書の名前住所が見えてあて名書きを省略してあるが、あの透けた部分が透明ビニルじゃなくて透けた紙である場合もある。この透ける紙もカレンダー紙だ。

 

公的書類カレンダー紙が使わるようになった理由だが、増田羊皮紙代替ではないかと考えている。羊皮紙中世欧州から使われていた「紙」で、羊やその他の皮膚の薄い動物の皮を剥ぎ、石灰水で皮下脂肪を除去して薄く削いで引っ張り、紙のようにした。 https://w.wiki/7FnV

鞣しをしないのがポイント。これは高額なので貴族手紙や証文、聖書の写本など「公的」な書面に使われた。

これの代替の紙としてカレンダー紙が使われ、それが「高級紙」として日本に輸入されて、ペラペラカレンダー紙を契約書や判決文に使うようになったのではないか?と推測している。

 

こういう訳で、昔の契約書やら公的書類などはやたら薄いのが特徴だ。破れそうで怖いのだが、そっとめくるだけなら破れない。

なお、トレーシングペーパークッキングシートは長期間放置するとバラバラ崩壊してしまう。これは硫酸晒しをする為に酸性になっているからで、昔のペラペラ重要書類はそうはならないので、硫酸晒しをやってないのではないかと考えられる。

2022-12-24

しったかぶりする同僚について

口癖は「あーそういうこと!」

普通の人なら脳みそ理解が追いついて初めて使う言葉だろ。聞いたことを脳みそ理解する前に「あーそういうこと!」って言っている。

適当なはったりかましても同じように言うし、「そういうこと」なんだろうなあ。

ヤツができもしない仕事をできると言って受けて3週間進捗0だった状況から結局ワイがやることになって着手から1日未満で終わった。

スクリプト書けないなら書けないって言えよ。

標準出力無加工でリダイレクトする1行書いただけで仕事した気になってるんじゃねえよ。

あーそうよな。知らないことを知ってるって言うやつはできないことをできるって言うんだよな。

しんどい

ヤツが「あーそういうこと!」って言う度に心が荒む。一挙手一投足にイライラする。ムカつく。

そしてしったかぶりする同僚は、自分より更に仕事できない人間に偉そうにしている。

「分からないことは分からないって言ってもらっていいですか?」

とかどの口が言ってるんだ。お前の口縫うぞ。

あー嫌い。

仕事できなくて叱られている人間より嫌い。

2022-12-15

anond:20221215142626

それ table タグの類じゃねえか?

まるっと必要タグを元HTML差し込むスクリプトか、標準出力タグ吐き出すスクリプトでないとアレじゃね

2022-12-13

anond:20221213193100

かにそれでもコンソールにtanakaを出力してログにもtanakaを上書きすることはできると思いますありがとうございます

これは最初に書いてなかったので申し訳ないのですが、このtanakaスクリプトあくまテスト用で、

最終的にはシェルの全ての標準出力コンソールに出力しつつログにも上書きするスクリプトを書きたいので、execを使用してました。

2022-12-12

ロリコンオタクのせいで日本人ネットから排除されていた

はてな村村長の語りに便乗して昔話しちゃおうかな

結構多くのWEBサーバアクセス制限で.co.jp .ne.jp .jpがdeny設定されていたって話である

https://b.hatena.ne.jp/entry/s/twitter.com/kanose/status/1601270223386324992

 

2005年までの個人サイト自宅サーバブーム

個人ネット利用で大きな転換点は2005年くらいで、例えばブログのはしりはてなダイアリーサービス開始は2003年アルファブロガー選考開始は2004年youtubeサービスインが2005年だが、これらの特徴は「アカウントをとって企業WEBサービスを利用する」という、今では当たり前の方法だ。

だがこの以前にはそういう方式のものは少なく、ISPや借りたレンタルサーバ自分コンテンツアップロードして構築するというのが主流だった。

これは内部的にはLINUXサーバ制限アカウントを貰ってユーザーディレクトリの/WWWファイルを置くという事やね。

から最初のうちは個人サイトURLは「http://www.yourisp.co.jp/~aybabtu」って感じだった。~はUNIXユーザーホームディレクトリを示すのね。やがてバーチャルドメイン対応するサーバ会社が増えてhttp://www.aybabtu.rentarusabaa.comみたいな今では当たり前のURLになったんだが、最初バーチャルドメイン設定は有料だった。

MS Officeには「パブリッシュ」ボタンがあってそれを押すと編集してるファイル群の構造のまま指定したサーバFTPファイル送るみたいな機能もあった。(だがこれはShift-JISでUpするというクソ仕様で後に読めなくなるのだった)

httpの頭のHTはハイパーテキストで、参照箇所にはリンクが設定できて参照元ジャンプ(これも死語だ)できる電子文書なわけで、まさに公開はパブシュッシュ=出版なわけだ。今もサブスクリプション新聞雑誌定期購読というのはこの建付けが残ってるからだ。

 

ISPWEBレンサバにはユーザー権限多寡で違いがあって、ユーザに実行権限付与してperlなどのインタープリタを構築しておくと、テキストであってもファイル先頭にインタープリタへのパスを書いておくとそれが実行され、標準出力httpで返す。これがCGIで、ISP供与で多いHTMLファイルの公開だけの権限制限されたサーバに不満な層は「CGI実行可」のレンサバ屋に移っていった。

但しプログラムであるから、いい加減に書いてループ参照とか起こすとサーバCPUメモリを喰いつくしサーバダウンを惹き起こす。だからISP供与のでは実行権限を与えなかったわけだ。逆に言えばISPが必ずホームページ公開スぺースを供与するのに個人向けレンサバが成り立ったのは何故?と言えばCGIの実行が出来たからだ。

故にWindowsしか使わない人には難しい上級者向けだったのだが、これを優しいチュートリアル簡単設定出来るようにしてユーザーを増やして会社を大きくしたのがpaperboy&co.の家入一真氏なわけだ。はてな創業者近藤淳也氏と並ぶ個性的アントレプレナーと謂われた。その後堀江などと共にインターネッ党を作って都知事選に出て箸にも棒にもな結果になったのは黒歴史なので触れないで上げてください。特に堀江野菜でいじられるよりも傷つくので偉そうに政治の話してる時に「インターネッ党」とボソっというのは残酷な事なので止めてあげて欲しい。お願いします。

また、CGIでの使用言語perlが圧倒的で、perlで書いた掲示板スクリプトを配布するサイト趣味プログラマが星の数ほどいた。

こういう訳で初期のWEBで動的ページ=perlであってJcode.pmを開発した小飼弾氏は魔術師扱いされて崇拝されており、ブログブームが来ると圧倒的な人気を誇った。

今では多言語普通に扱えるのが当たり前だが、マルチバイト文字の扱いというのは難しく、文字コードがそれぞれ違うのがそれに輪をかけていた。例えば今でも日本語Windows上でフランス語中国語ファイル名は作れないだろう。また、最初からかなりの期間、Twitterでは日本語検索が出来なかった。youtubeでも日本語投稿できなかった期間は長い。

子飼氏はperl日本語使用できるようにするライブラリUNICODE対応にしてWEB普遍的日本語が使えるようにしたものだ。

ただ、HTLMと実行文を混ぜ書きできるPHPがver.4になるとデータベース連携が強化されていてデフォルトSQL文発行関数実装されており、perlCGIは廃れていってしまう。

 

またISPより高い自由度を求めて自宅にサーバを立ててそれを公開するという者も現れた。

はてなサーバデータセンターに置いてはいものの、筐体は町工場設計図を持ち込んでステンレスの1U筐体を自前で作っていたし、Pixivギガバイトシステムボードを使って自作した多数のサーバエレクター上に置いてむき出し運用してしていたので、自宅サーバ組の延長にあったのだな、実は。

アップローダ

 

こういう中で画像を公開する、動画を公開するというのはなかなか大変だった。

間内で見るという分にはファイルを置けばいいだけだが、問題になったのが「2ch晒し」であった。これは悪意を持って2chURLを貼るのだけじゃなくて、単にURLを書くというのも含まれた。

というのも2chURLが書かれるとアクセスが集中して大抵はサーバダウンしてしまう。すると他の契約者のサイトもページも見れなくなってしまう。

例えばヒーロー戦記主題歌みたいな社歌buzzった日本ブレイク工業サイトは重すぎて何週間も閲覧出来なくなった。社歌動画ファイルを置いていたためだ。

こういうサーバダウンは契約者の責任ではないがホスティング会社も許してはくれない。契約解除、つまり出ていけか、法人契約への変更かを迫られる。転送制限なしと言っていても実際に転送過多になると干すティングになるわけだ。

から2chは悪意の塊の他にサーバーダウンとサーバからの追い出しを惹き起こすので蛇蝎のように嫌われていた。2ch晒し→その時点でサイトを閉じてしまう人も多く居た。

 

するとこれを逆手に取ってアップローダあぷろだ)を自作サーバ運用してアフィリエイト収入を上げる者が現れてくる。

ただこれは著作権違反ファイルが上げられて訴えられる事もあるからそのリスク低減のためと転送制限の為にファイル容量に制限が設けられていた。

 

すると大きなファイルを共有したい連中はこれでは満足できない。

そこで目を付けたのが海外アップローダ運用しているサーバだ。運用動機日本アップローダと変わらない。だがファイルの大きさの制限が緩かった。

そこでそういう海外アップローダ違法性が高いファイルの共有に使われるようになった。やってたのは2chダウンロード板と半角板がメインだ。

 

ようやくロリの話

だがこれは運営には迷惑な話で、日本人は英語広告なんてクリックしない。しか商品販路が無いので日本からアクセス報酬は支払われない。つまり金を落とさず転送量だけ上がるのだ。しか海外では転送量従量課金は多かった。

 

更に問題なのがロリ画像アップロードされることだ。2次元ロリでも規制があるのに実写ロリは完全アウトだ。実写ロリが発覚した場合サーバ管理者は必ず逮捕される。マグショット新聞掲載されTVで晒され、釈放後も幼児被害者性犯罪者なのでGPSロガ装着が義務付けられ住所は共有される。二度と部屋を借りる事は出来ずに一生トレーラーハウスキャンピングカーを買って橋の下生活となる。

こんな実写ロリ画像動画アップロードする奴が居たのである

 

そこで管理者としては日本からアクセスが増えたのを確認した時点で遮断するしかない。一生を棒に振る可能性を回避するためだ。

圧倒的によく使われるWEBサーバapacheでは.htaccessというシステムファイル記述してアクセス制限を掛ける事が出来る。ここで国別IPアドレス指定するのはちょっと難しいのでdeny from co.jp deny from ne.jpという風に書くとドメインco.jpne.jpからアクセスを全部弾くことができる。

この時にディレクトリ指定を「/」にするとそのサーバの全てが弾かれて403エラーが出てしまう。しかバーチャルドメインも同じなので思わぬところで403エラーが出る事もある。

そういう訳であちこち海外サーバ日本からアクセス拒否されていた。全て2chダウンロード板と半角板のやつらのせいである。

自分アメリカ田舎新聞社のトップページ403を食らったことがあるから嫌われ方は相当なものだと思う。「やるべき.htaccessの基本設定」みたいなのに書かれて共有されたのかも知れない。

 

因みにダウンロード板と半角板は2ch名物厨房板だったのに、今見たら無くなってるのな。諸行無常だ。

 

AYBABTU

2005年サービスインしたYoutubeだが、翌年にGoogleに買収されたもの最初は元paypal社員らが作ったベンチャーだった。

だが最初著作権違反コンテンツばかりであって、自作ビデオというのは少なかった。

特に酷かったのがまた日本人で、最初10制限がなかったのをいいことにアニメの全話丸上げみたいなのが大量にされており、当事者アニオタ達も「ここまでやったら閉鎖されるだろ!」と諫めるほどだった。

そんな中で2006年6月Youtubeが数日間の大メンテナンス突入し、画面には「All your video are belong to us」というブロークン英語が書かれていて騒ぎになった事があった。

これの元ネタは「All your base are belong to us」で、古いセガゲーム英語版で出てきたセリフだ。深刻な場面で突然めちゃくちゃな英語をいう。このおかしさでFLASHが作られたりとミーム化していたものだ。

しか日本ゲーム結構あちこちバカ英語を作ってて、engrishとかjanglishとか言われてネタにされていた。日本で言えばアヤシイ中国製品の日本語を愛でるような感じだ。

そこでYoutubeあんメッセージを出したので、日本ネット民は身に覚えがありすぎて「アニオタのせいだろ!また排除されるだろ」と責任なすり合いと相なったのだった。

因みにその後も日本人の利用が制限とかは無かったので誤解だったのだが、海外アップローダ見つけては403の焼き畑とかロリ画像問題とかがあって、その後のアニメフル全話という流れだったので過剰反応をしたのであった。

 

以上、ロリ403の話でありました。

2022-05-22

はてブコメント標準出力に流すやーつ

普段から俺様が使っているスクリプトあるから、公開してほめちぎってもらうぞー!

出力はただの文字列から音声読み上げアプリでも何でも、突っ込んで遊んでくれ。

jq必須です。

ログインせず使うので当然アカウント固有の非表示設定とかは動きません。

あれなIDコメントも全部所得することになるのでご注意ください。

まあそこらへんはsedでも使って気に入らないidの行を勝手に削除してくれ

hatebu_comment.sh

#!/bin/bash

if [[ "$1" =~ ^http ]];then
	: # Success
else
	echo "Error: 引数指定したURLブックマークコメント一覧を取得するやーつ"
	echo "例: ./hatebu_comment.sh 'https://www3.nhk.or.jp/news/html/20200405/k10012369381000.html' | less"
	exit;
fi

if [[ "$1" =~ b.hatena.ne.jp/entry/s ]];then
	# はてブページのURLでも動作するように
	url="https://$(echo $1 | sed -e 's@.*/entry/s/@@')"
else
	url=$1
fi

if ! jq --version > /dev/null ;then
	echo "Error: jqがインストールされていません"
	exit;
fi

curl -s "https://b.hatena.ne.jp/entry/jsonlite/?url=$url" |
	jq '.bookmarks[] | if .comment != "" then ("「" + .user + "」 " + .comment) else empty end' |
	sed 's@^"@@g' | sed 's@"$@@g'

2022-01-02

anond:20220102193853

そらそうよ

パイプ標準出力もなんのそのよ

なんなら大学で習ったが既に知ってたくらいの勢いよ

2021-03-29

anond:20210328214727

標準出力できれば何でもできるよ。 awk 製のこともあるよ。ほんとだよ

2020-05-22

anond:20200522100433

例えば絵を描くとかは程度の差はあれみんな描ける。下手であっても、「全くできません」という人はいない。音楽を作るのも、適当作曲くらい誰にでもできる。料理もそう。サッカーとか野球もそう。最低限ボールを蹴るくらいならできる。

プログラミングだって別にそこらでhello world標準出力とかコピペしたら誰でもできる。

絵のときにいう「出来る」とプログラミングときにいう「出来る」が同じ字面だけど

言葉の強度?みたいなのが違うだけ。

同じ強度で比べたらどちらも同じように出来たり出来なかったりする。

2019-10-05

anond:20191003131545

まぁねぇ…今の子なんてHD3Dゲームが生まれときからあるんだから標準出力で感動なんてまず無理あるし飽きるのは当然よな

からこそ「プログラミング勉強する時は作りたいもの作るのが一番」と言われるわけで

しかし手動かさないのに歳だけ食ってる奴の「これ動いてる背景を考えられない奴は云々」みたいな説教マジでから変わんねーな

2019-05-17

この本、クラスの話が10章まで出てこない

いわゆるmain関数自作プライベート関数を呼ぶだけのコード構造がなんか200ページ近くある

初心者向けに写経公開しまブログみたいなの作って「ここは実はテストを作ると楽です」みたいなTips書いてアフィで10億円くらいゲットして不労所得で暮らそうと思ってたんだが

プライベート関数戻り値標準出力するmain関数しかないんじゃ初心者向けの記述ではどうにもならんなコレ

えっ単に可視性変えてユニットテスト書くよう仕向ければいいんじゃないかって? 何言ってるんですかプライベート関数ユニットテストしないんですよ

2018-05-24

anond:20180524150719

ダメだ! まだ細かくできるだろう!

ちゃん文字列を1ビットずつ取り込んで標準出力バッファリングして一文字ずつ出力する関数を書きなさい!

2017-10-13

anond:20171013100220

puts警察だ! Rubyにおいて単純な文字列を特段厳密な制御なしに改行つきで標準出力に出したい場合printではなくputsを使え!

print msg + "\n" # back-slash
puts msg

ちなみに文字列nilだったり空文字列だったりする場合は改行が出ちゃうので注意だ!

あと文字列が改行で終わっている場合はその改行を流用してputsはなにもしないのでこれも注意だ!

それと引数文字列でも配列でもない場合はまずto_aryが試され(てそのあとto_sす)るのでものによってはprint+"\n"とは違う表示になるぞ!

うん、この例外挙動覚えて慎重に運用するくらいなら最初からprintでいいな!

2017-09-11

https://anond.hatelabo.jp/20170910205249

まじな話をすると、N予備校プログラミング入門コースやるのがオススメ

https://www.nnn.ed.nico

一日8時間勉強時間があるなら、だいたい一ヶ月で終わる内容。

月額1000円だけどしっかり勉強すれば一ヶ月の無料間中に終わると思う。

もともとN高等学校のノンプログラマーの生徒をWebエンジニアとして就職させるために作られたカリキュラム講師曰く去年はこれで二人エンジニア就職を決めたらしい。

内容も相当親切に説明していて、プログラミングで何か作るだけじゃなくて、就職必要な環境構築やセキュリティまでみっちりやる。

http://qiita.com/sifue/items/7e7c7867b64ce9742aee#%E3%82%B3%E3%83%B3%E3%82%BB%E3%83%97%E3%83%88%E3%82%92%E3%82%82%E3%81%A8%E3%81%AB%E6%A7%8B%E6%88%90%E3%81%95%E3%82%8C%E3%81%9F%E3%82%B3%E3%83%BC%E3%82%B9%E3%81%A8%E5%86%85%E5%AE%B9

講師が書いてる入門コースで習うことがまとめ。テキスト教材もあるけど授業も1項目を2時間で説明している。授業は週2の生放送とそのアーカイブがある。

↓みたいなことが学べる

----

Webプログラミング入門コース

Web ブラウザとは (Chrome, デベロッパーコンソール, alert)

はじめてのHTML (VSCode, HTML, Emmet)

さまざまなHTMLタグ (h, p, a, img, ul, tableタグ)

HTMLで作る自己紹介ページ (HTMLタグ組み合わせ, コンテンツ埋め込み)

はじめてのJavaScript (JS, ES6, エラー)

JavaScriptでの計算 (値, 算術演算子, 変数, 代入)

JavaScript論理を扱う (論理値, 論理積, 論理和, 否定, 比較演算子, if)

JavaScriptループ (ループ, for)

JavaScriptコレクション (コレクション, 配列, 添字, undefined)

JavaScript関数 (関数, 関数宣言, 引数, 戻り値, 関数呼び出し, 再帰)

JavaScriptオブジェクト (オブジェクト, モデリング, プロパティ, 要件定義)

はじめてのCSS (CSS, セレクタ, background-color, border)

CSSを使ったプログラミング (transform, id, class)

Webページの企画とデザイン (企画, 要件定義, モックアップ, 16進数カラーコード)

診断機能の開発 (const, let, JSDoc, インタフェース, 正規表現, テストコード)

診断機能組込み (div, 無名関数, アロー関数, ガード句, truthy, falsy)

ツイート機能の開発 (リバースエンジニアリング, URI, URL, URIエンコード)

Linux開発環境構築コース

LinuxというOS (VirtualBox, Vagrant, Ubuntuインストール, OS, CUIの大切さ)

コンピューター構成要素 (ノイマンコンピューター, プロセス, lshw, man, ps, dfの使い方)

ファイル操作 (pwd, ls, cd, mkdir, rm, cp, mv, find, ホストマシンとの共有ディレクトリ)

標準出力 (標準入力標準出力標準エラー出力パイプgrep)

vi (vimtutor)

シェルプログラミング (シバン, echo, read, 変数, if)

通信ネットワーク (パケット, tcpdump, IPアドレス, TCP, ルーター, ping)

サーバークライアント (tmux, nc, telnet)

HTTP通信 (http, https, DNS, hostsファイル, ポートフォワーディング)

通信をするボットの開発 (cron, ログ収集)

GitHubウェブサイトの公開 (GitHub, リポジトリ, fork, commit, 情報モラル)

イシュー管理とWikiによるドキュメント作成 (Issues, Wiki)

GitとGitHub連携 (git, ssh, clone, pull)

GitHubへのpush (init, add, status, インデックス, commit, push, tag)

Gitのブランチ (branch, checkout, merge, gh-pages)

ソーシャルコーディング (コンフリクト、プルリクエスト)

Webアプリ基礎コース

Node.js (Node.js, nodebrew, Linux, REPL, コマンドライン引数, プルリク課題)

集計処理を行うプログラム (集計, 人口動態CSV, Stream, for-of, 連想配列Map, map関数)

アルゴリズムの改善 (アルゴリズム, フィボナッチ数列, 再帰, time, プロファイル, nodegrind, O記法, メモ化)

ライブラリ (ライブラリ, パッケージマネージャー, npm)

Slackボット開発 (slack, mention, bot)

HubotとSlackアダプタ (hubot, yo)

モジュール化された処理 CRUD, オブジェクトライフサイクル, filter)

ボットインタフェースとの連携 (モジュールのつなぎ込み, trim, join)

同期I/Oと非同期I/O (同期I/O, 非同期I/O, ブロッキング)

例外処理 (try, catch, finally, throw)

HTTPサーバー (Web, TCPとUDP, Webサーバーの仕組み, Node.jsイベントループ, リスナー)

ログ (ログ, ログレベル)

HTTPのメソッド (メソッド, GET, POST, PUT, DELETE, CRUDとの対応)

HTMLフォーム (フォームの仕組み, form, input)

テンプレートエンジン (テンプレートエンジン, jade)

HerokuWebサービスを公開 (Webサービスの公開, heroku, dyno, toolbelt, login, create, logs)

認証利用者を制限する (認証, Basic認証, Authorizationヘッダ, ステータスコード)

Cookie を使った秘密匿名掲示板 (Cookie, Set-Cookie, expire)

UI、URI、モジュール設計 (モジュール設計, フォームメソッド制限, リダイレクト, 302)

フォームによる投稿機能の実装 (モジュール性, textarea, 303)

認証された投稿の一覧表示機能 (パスワードの平文管理の問題, 404, テンプレートのeach-in)

データベースへの保存機能の実装 (データベース, PostgreSQL, 主キー)

トラッキングCookieの実装 (トラッキング Cookie, IDの偽装, Cookie の削除)

削除機能の実装 (データベースを利用した削除処理, 認可, サーバーサイドでの認可)

管理者機能の実装 (Web サービス管理責任, 管理者機能の重要性)

デザインの改善 (Bootstrap, レスポンシブデザイン, セキュリティの問題があるサイトを公開しない)

脆弱性 (脆弱性, 脆弱性で生まれる損失, 個人情報保護法, OS コマンド・インジェクション)

XSS脆弱性対策 (XSS, 適切なエスケープ処理, リグレッション)

パスワード脆弱性対策(ハッシュ関数, メッセージダイジェスト, 不正アクセス禁止法, パスワードジェネレーター, 辞書攻撃)

セッション固定化攻撃脆弱性対策 (セッション, セッション固定化攻撃, ハッシュ値による正当性チェック)

より強固なセッション管理 (推測しづらいセッション識別子, 秘密鍵)

CSRF脆弱性対策 (CSRF, ワンタイムトークン)

安全なHerokuへの公開 (脆弱性に対する考え方, HTTPの廃止)

Webアプリ応用コース

Webフレームワーク (Express.js, フレームワーク導入, 簡単なAPI, セキュリティアップデート, Cookie パーサー, ミドルウェア, 外部認証, ロガー)

ExpressのAPI (app, Properties, Request, Response, Router)

GitHubを使った外部認証 (Passport, OAuth)

スティングフレームワーク (Mocha, レッド, グリーン, リファクタリング)

継続的インテグレーション (CircleCI)

クライアントフレームワーク (Webpack, Chrome 以外のブラウザでもES6)

DOM操作フレームワーク (jQuery, jQueryアニメーション, this)

AJAX (jQuery.ajax, クロスドメイン, 同一生成元ポリシー, x-requested-by, CORS)

WebSocket (WebSocket, WebSocketの状態遷移, Socket.io)

RDBとSQL (DDL, DCL, CREATE, DROP, INSERT, DELETE, UPDATE, WHERE)

データモデリング (リレーショナルモデル, 正規化)

テーブルの結合 (外部結合, 内部結合, 片側外部結合, JOIN ON)

インデックス (インデックス, 複合インデックス, Bツリー)

集計とソート (SUM, COUNT, ORDER BY, GROUP BY)

「予定調整くん」の設計 (要件定義、用語集、データモデル、URL設計モジュール設計、MVC)

認証とRouterモジュールの実装 (Mocha, supertest, passport-stub, モックテスト)

予定とユーザーの保存 (セキュリティ要件, UUID, 複合主キー)

予定とユーザーの一覧の表示 (非同期処理, Promise, then)

出欠とコメントの表示 (入れ子の連想配列, Promise.all, 子どもからデータを消す)

出欠とコメント更新 (Promiseチェイン, リファクタリング)

予定の編集と削除 (要件の衝突, 関数再利用)

デザインの改善 (this, グローバルオブジェクト)

セキュリティ対策と公開 (X-Frame-Options, Heroku環境変数)

2017-08-14

医者って大変だな

アダンプとメトリックVIEWから判断して原因特定するしかない職人技だ

細胞ログ吐いてくれれば少しは楽になりそうだが、それはそれで集約が面倒そうだ

2017-08-14 08:30:23 胃 処理し切れない油もの標準エラー出力します
2017-08-14 15:11:56 腸 乳糖過多のため柔らかめのを標準出力します
2017-12-24 17:00:01 NK がん細胞を殺し切れませんでした、すみません

2016-08-02

http://anond.hatelabo.jp/20160727175016

どのように調べたのか。デバッガが使えない環境だとしても、標準出力ファイル出力、ウィンドウ表示など、いくらでも方法はあるだろう。他トラバでも指摘されているように、コードのものに不備がないのなら依存関係を含めて環境を疑うのが定石。

  • 見比べても違いがわからない

何と、何を、どのように見比べたのか。コードドキュメント目視diffコマンド?これもまた、他トラバでも指摘されているが、ドキュメント英文でも読むのは基本。それと、パンチャーなんていう時代ではないのだから現代プログラマーであれば、人間の力など信じてはいけない。

汎用的な解決方法試行錯誤できなくなったのであれば、

この 何か とは 解決力 だから、Fatal

2014-07-01

php 画像表示で文字化けというか文字の羅列が表示されるとき readfile 使

readfile:

説明「ファイルを読んで標準出力に書き出します」

返り値「ファイルから読み込んだバイト数を返します」

header('Content-Type: image/jpeg') とか header("Content-Length: ???"); とか、ちゃんと書いているのに、ブラウザでなんで画像で表示されないんだろ...もしくは " headers already sent by ... "とエラー表示されてる... readfile のあと、データ出力前にソッコーで header 出力させているのになぁ。。

こんなとき、そのPHPコード、readfile の戻り値が読みこまれたデータである勘違いしてつくられてていませんか?

この件に限りませんが、サンプルコードとか勘違いが多いので要注意です。「脳内でうまく動いた」ものを、検証せずにそのままWEBに載せている人って結構ますから

ほかには php.ini の output_bufferingを On にしたら直った、phpファイルBOM 付き <?php や ?> の前後に空白や改行などがある、などが原因の場合もありますね。

2013-03-13

サーバ初心者Webサービスを公開するうえで考えたこと

だって自作Webサービス公開しました

http://www.radiosonde.net/

これまで他の人に用意してもらったサーバ自分プログラムを動かしたことはありましたが

自分自身で一からサーバをセットアップしたことはほとんどなかったので、いろいろとハマりました。

作業を進める上で困ったり考えたりしたことを書いていきます

ちなみにサーバ自体はさくらのクラウドOSにはCentOSを使用しているので、それ前提のお話になります

SSHファイヤーウォールの設定

最初サーバを起動してから速やかにSSHファイヤーウォールの設定を変更しました。

はてブなんかでも定期的に話題になっているのでおなじみですね。

SSHポートを22以外の別のポートに変更する

rootによるリモートログインを禁止する

パスワードログインを禁止し、鍵認証有効にする

・念のためrootパスワードを潰しておく

SSHHTTP(S)など、どうしても公開しなければならないポート以外は遮断する

SSHポートについてIP制限が行えるならば尚良い

さらっと書きましたが、設定をミスって自分自身もログインできなくなり、何度かOSの再インストールを繰り返しています

から気付いた事ですが、さくらのクラウドではクラウド管理画面のリモートスクリーン経由でローカルログインできるので

別にOSインストールしなくてもiptablesの設定を変更できたんですよね...

逆に言うといくらファイヤーウォールとSSHを設定しても管理画面にパスワードログイン環境が残ってしまうので

パスワード管理には引き続きしっかり気を使う必要がある。ということでもあります


Webアプリの動作が重い

httpd,php,mySQL,memcachedなど必要サービスインストール、設定し

作成したWebアプリプログラムを乗せて動かしてみました。が、動作が重いような...

開発環境ではさくさく動いていたのに、本番環境ではどのページ遷移ももっさりしています

abで計測してみたところ、開発環境のおよそ2分の1のスコアとなってしまいました。

開発環境が仮想2コアのメモリ1Gだったのに対し、本番環境が仮想1コアのメモリ2G

CPUの性能について半減しているのでそのせいかな、と思いつつ設定を見なおしていたところ

特に使っていないと思われたipv6を停止した途端にパフォーマンス改善されました。

ページ遷移に伴うもっさり感が解消され、abの計測結果も開発環境と遜色ない結果が出ています

デフォルト有効になっていたipv6の影響により余計な処理が走っていたのかもしれません。


サーバから送信したメール迷惑メールと判定される

パフォーマンス改善に喜んだのも束の間、会員登録などの処理でWebアプリからメールを送信したところ、Gmail宛のメールがことごとく迷惑メールと判定されるという事案が発生。

spfの設定を行なうメールの内容について吟味するなどの回避策を試してみましたが一向に改善されません。

試しにHotMailexciteメールアカウントに送信したところ、そちらではそもそもメールを受け付けてもらえずエラーコードが返って来る始末。

困り果てていたところ、エラーの内容からサーバIPがspamhousにスパム送信元として登録されていることが判明しました。

postfixホスト名の設定がデフォルトで「localhost.localdomain」などとなっており、それをそのまま使っていたためにGmailスパム送信元として通報してしまったようです。

設定を修正し、spamhousに解除依頼を提出。事なきを得ました。


KVSの変更

クラウドを利用すれば、サーバを停止することなく簡単な設定でスケールできるようになる。

と、自分勝手に思い込んでいたせいなのですが、消えては困るデータの一部をmemcachedに保存する実装を行なっていました。

実際のところさくらのクラウドではサーバを完全に停止しなければプラン変更を実施できないし

そもそもサーバが落ちたらどうするんだよ。ということで、急遽KVSを変更する必要に迫られました。

速度の低下が気にかかったため、いくつかの候補を実際に動かし

phpスクリプトから1万件のデータ読み書きを行うという形でmemcached比較してみたところ次のような結果に。

サービス1万件書込1万件読込
memcached 2.55秒 2.30秒
handlersocket 21.23 2.71秒
InnoDB20.23 5.10
kyotoTycoon 8.22秒 7.72秒

さすがに読み書きそれぞれmemcachedが最速ですが、読み出しについてはhandlersocketも負けていません。mySQLから普通にSELECTしてもmemcachedの2倍程度の時間しかからないという結果が意外でした。

しかしながら書き込みのほうではhandlersocketもmemcached10倍近くの時間がかかっており、少々速度的な影響が気になってきますmemcachedの倍のパフォーマンスを記録したという記事を見たことがあるので、設定、チューニングについて生かしきれていない部分があるのかもしれないとも思いましたが、知識が不足しているところで無理をすると問題が発生した時に対処できないと考え、候補から除外することとしました。

結局、今回の用途では読み込み処理より書き込み処理のほうが圧倒的に多いことも考慮し、kyotoTycoonを採用しました。実際の利用箇所に組み込んでabで計測してみたところ、だいたい30%程度のパフォーマンス低下にとどまっており、これなら許容範囲かと考えています

mySQLレプリケーションが止まる

実行系と参照系に分ける形でmySQLレプリケーションを行なっていたのですが、度々レプリケーションが停止する現象が発生しました。

一部のテーブルについて肥大する可能性が考えられたため、参照系に接続するプログラムで使わないテーブルをレプリケーションから除外していたのが原因です。

例えばtabelAをレプリケーションし、tableXをレプリケーションしないという設定にしたうえで

実行系でINSERT INTO `tableA` SELECT `value` FROM `tableX`などといったクエリを発行すると、参照系にtableXが無いためエラーが発生して止まってしまます

レプリケーションするテーブルを限定する場合プログラム側でも注意を払わないと危険です。当たり前ですが。

サーバ監視にmonitを使用

監視といえばcactinagios定番なのかもしれませんが、設定が複雑そうで尻込みし、monitを使用することにしました。

簡単な設定でloadaverageやメモリHDDの使用量をチェックできるほか

httpdmysqldなどといったサービスプロセス監視し、もし落ちていたら自動で起動してくれるので助かります

Webアプリの秘匿

パスワード保護を行うとしても、サイト全体の管理画面など自分しか使わないプログラムWeb晒しておきたくない。

というわけで、一部のWebアプリを秘匿する設定を行いました。

管理画面のWebアプリを9999番など閉じているポートに設置した上で、SSHを利用したトンネルを掘ります。といっても

ssh -t -L 9999:localhost:9999 user@xxx.xxx.xxx.xxx

上記のようなコマンド管理画面のWebアプリを置いたサーバログインするだけです。

ブラウザアドレス欄にhttp://localhost:9999/と打ち込めば、接続が開いている間のみアクセス可能になる感じですね。

サーバログインできる人でなければ実行できないことなので、気分的にある程度安心します。

SSHログバックアップ

自動ログバックアップを行いたいと考えたのですが、パスワード無しの鍵でログインして転送する形には抵抗がありました。

調べてみたところ、authorized_keysに公開鍵を記入する際の設定で、その鍵でできることを制限するという手段があるようでした。

具体的には、authorized_keysに

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="some commands" ssh-rsa AAAAB3NzaC1yc2EAAA...

などとして公開鍵を追加しておくと、その鍵でログインした直後にcommand=""の部分で設定したコマンドを実行して接続を終了する挙動となり

接続フォワードもできなくなるため、パスワード無しでも鍵の流出に関するリスクを最低限に留めることができるというわけです。

commandの実行結果は標準出力から受け取ることができるので、例えばcommand=""の部分にファイルの内容を表示する処理を設定していたとすれば

ssh -i .ssh/no_password_key user@xxx.xxx.xxx.xxx > /path/to/file

などとしてログインの結果をファイルに書き込むだけで、簡単にファイル転送が実現できます


まとめ

他にも大小さまざまな問題に行きあたりましたが、忘れてしまったor書ききれないのでここまでとします。

たった1つのサイトを公開するにしても問題というのは尽きないものだと実感させられました。

今は基本的な情報だけでなく、ちょっと突っ込んだ内容でも検索で解決していけるので嬉しいですね。手がかりを残してくれた先達に感謝することしきりです。

現状ではひとまずの見切りを付けて公開していますが、より堅牢で負荷に強いサーバとなるよう、随時チューニングを行なっていこうと考えています

最後

作ったWebサービスについて少し書きます

サイト名は「Radiosonde」

個人サイトや小規模な商業サイトなどプロモーションにあまりお金をかけられないサイトを主な対象とした、無料で出稿できる広告ネットワークサービスです。

既存サービスで近いのは「あわせて読みたい」や「zenback」、各社提供RSS相互リンクサービスなどになるでしょうか。

広告としての体裁がある分、それらより若干積極的な性質になるのではと考えています

現時点ではサービス本体のプロモーションに苦心するという本末転倒のものの状況でありますが、もしよろしければ見ていただけると嬉しいです。

2013-02-21

めも

STDIN 標準入力キーボードから入力など。

STDOUT 標準出力。画面への出力など。

STDERR 標準エラーエラーとしての出力。

2011-03-30

http://anond.hatelabo.jp/20110330122305

ここを読めば、PHPPHPコードの実行が遅くて、JavaI/Oが遅い事が分かると思う。

特にJava標準出力に出したときは、内部文字コードシステムコードが異なるので、文字コード変換を毎回行っているはず。

なお、PHPはメソッド・コールが他のスクリプト言語と比較しても遅いPHPコード量が増えると、他のプログラミング言語よりも、速度の低下が激しくなる傾向がある。

利用目的が違うので、JavaPHPの速度比較なんて不毛だが、特性としては以上のような違いがある。

2010-01-14

http://anond.hatelabo.jp/20100113192313

これで40分。

タイムアタックってことでアルゴリズムは全幅探索で書き上げました。

エラーチェック皆無。

A*ならもう5分ほど延びるかな?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace Maze
{
    class Program
    {
        // 探索用地図
        static int[,] maze;

        // 始点終点
        static Position Start = new Position(0, 0), Goal = new Position(0, 0);

        static void Main(string[] args)
        {
            //////////////////////////// まずは各行のリストとして読み込み
            string[] inMaze;

            using (var fp = new FileStream(args[0], FileMode.Open, FileAccess.Read))
            using (var iStream = new StreamReader(fp))
                inMaze = iStream.ReadToEnd().Split('\n');

            // 迷路幅
            int height = inMaze.Length;

            // 迷路高さ
            int width = inMaze[0].Length;

            /////////////////////////// 読み込んだ迷路を作業用地図に展開
            maze = new int[width, height];
            for (int y = 0; y < height; ++y)
            {
                string line = inMaze[y];
                for (int x = 0; x < line.Length; ++x)
                {
                    maze[x, y] = line[x] == '*'
                        ? -1
                        : 0;
                    if (line[x] == 'S') Start = new Position(x, y);
                    if (line[x] == 'G') Goal = new Position(x, y);
                }
            }

            // 探索実行
            int dist = Search(maze, Start);

            // 探索結果から最短経路を再現
            Position backTracer = Goal;
            while (dist&gt;1){
                --dist;
                backTracer = backTracer.Nearbys.First(pos =&gt; maze[pos.X,pos.Y] == dist);
                maze[backTracer.X, backTracer.Y] = -2;
            }

            //////////////////// 最短経路こみのアスキー地図に変換
            char[,] outMaze = new char[width, height];

            for (int y = 0; y < height; ++y)
            {
                for (int x = 0; x < width; ++x)
                {
                    outMaze[x, y] = maze[x, y] == -2
                        ? '$'
                        : maze[x, y] == -1
                            ? '*'
                            : ' ';
                }
            }
            outMaze[Start.X, Start.Y] = 'S';
            outMaze[Goal.X, Goal.Y] = 'G';


            ////////////////////// 結果は標準出力に。
            for (int y = 0; y < height; ++y)
            {
                for (int x = 0; x < width; ++x)
                    Console.Write(outMaze[x, y]);
                Console.WriteLine();
            }
            Console.ReadLine();
        }

        /// <summary&gt;
        /// 探索する。SG間の道のりを返す(道のり=SGが隣接しているなら1)
        /// </summary&gt;
        private static int Search(int[,] maze, Position Start)
        {
            List<Position&gt; FrontLine = new List<Position&gt;();
            FrontLine.Add(Start);
            int dist = 1;
            for (; ; )
            {
                List<Position&gt; NextFrontLine = new List<Position&gt;();
                foreach (var pos in FrontLine)
                {
                    foreach (var nextPos in pos.Nearbys)
                    {
                        if (nextPos == Goal) return dist;
                        if (maze[nextPos.X, nextPos.Y] == 0)
                        {
                            maze[nextPos.X, nextPos.Y] = dist;
                            NextFrontLine.Add(nextPos);
                        }
                    }
                }
                FrontLine = NextFrontLine;
                ++dist;
            }
        }
    }

    struct Position
    {
        public readonly int X, Y;
        public Position(int x, int y) { X = x; Y = y; }

        public IEnumerable<Position&gt; Nearbys
        {
            get
            {
                return new[]{
                    new Position(X-1,Y),
                    new Position(X,Y-1),
                    new Position(X+1,Y),
                    new Position(X,Y+1),
                };
            }
        }

        public static bool operator==(Position p1, Position p2){
            return p1.X == p2.X &amp;&amp; p1.Y == p2.Y;
        }

        public static bool operator!=(Position p1, Position p2){
            return p1.X != p2.X || p1.Y != p2.Y;
        }
    }
}
ログイン ユーザー登録
ようこそ ゲスト さん