はてなキーワード: コマンドラインとは
ふと疑問に思ったんだけど、ディレクトリ dir に 001 002 003 ていう3つのファイルがあるとして、
(そしてその他にはファイルは無いとして)、
cat dir/* > all.txt
ていうコマンドを打ったら、3つのファイルがつながったファイルができるけど、これって、
001 002 003 ていう順番で連結してもらえると期待していいんだろうか。
ええと、これってコマンドの問題じゃなく、使ってるシェルの問題かな。
Vim81 をインストールしようとして、大量のパッチをあててる時にちょっと疑問に思って。
順番狂ったらおかしくなるかも良くわかってないんだけどさ。
リモートレポジトリとかステージングエリアは、とりあえず使ってもらってから説明すればいいんだよ。
「ローカル・レポジトリ」「作業コピー」の2つの要素だけなら単純なのに、そこにリモートレポジトリと
ステージングエリアを加えたら初心者はもう理解しきれない。さらに言うなら実際はリモート追跡ブランチとか
Q.SourceTreeをおすすめされた
A.初手でツール使うほうが詰むと思うんだけど、どうなの
これは同意したい。
ツールはgitの概念を独自に整理したメタ概念を勝手に使うので、本来のgitの仕組みを理解する阻害になる。
つーてもツールが独自のメタ概念を使う理由は、コマンドラインgitのコマンドが意味不明すぎるからである。
同じresetサブコマンドでも、`git reset FILE` と `git reset --hard COMMIT_ID` が
全然違う目的に使われるなんて普通に考えるとありえない。revertがCVSから伝統的に使われている
revertとは違う意味なのもいただけない。
ハッカーと画家に影響され2週間ほどLisp語族にいろいろ触れてみた。
「なんかいまいちだな…他のLisp言語はどうだろう」「こっちもなんかアレだな…」と
調べてるうちに4つくらい試すことになってしまった。
結局、これ、というものがなく、どれもツラいという感想をもった。
・「〇〇 入門」で検索すると講座サイトが見つかるが、一つしかない。それも20年前に作られたサイト。
・5chのスレのシリーズ番号が一桁。1スレ消化に何年もかかっている。
・ライブラリがない。あっても手作り感あるの個人制作のしかない。何年も前に更新が止まっている。
それでもLispが素晴らしい力を私に授けてくれるなら我慢してやってみようとおもったが、
そもそも、今となっては大してすごくないんじゃないか?と不安になった。
すごいすごい言われてたの何十年も前だし。
私がいるところは、プログラマ/システムエンジニア、フロントエンドエンジニア/バックエンドエンジニアとかの区分がなくひとりでなんでもやるところです
一応フロントエンドが好きで得意だと自称はしているものの一般的なフロントエンドってどこまでするのでしょうか
デザイナがするような部分
ここは当然でしょう
最近では SPA のページも多いので単純な HTML と JS ではなくフレームワークを必要とされることもあります
SEOの都合などでJSレンダリングじゃなくサーバサイドレンダリングで、サーバから受け取るHTMLの時点で表示できる状態になってることを依頼される場合もあります
その場合はサーバサイド言語に応じたテンプレートエンジンも使います
PHP なら Blade、Python なら jinja、 Node.js なら ejs という感じ
JS のコードをテストしたり gulp などのタスクランナーや webpack などバンドルツールを使うので OS のコマンドラインのツールも使える必要があると思います
サーバサイドの言語は別の人が作るにしても自分の環境でそれを動かすためにサーバ構築は出来たほうがいいでしょう
VM に OS のインストールしてウェブサーバをインストールしたり
Vagrant, Ansible 等で管理されているなら、設定ファイルを書くことはないにしろ実行する方法やエラーが起きたときの簡単な対象方法くらいは知っていないと不便かと思います
ウチの場合は各自LinuxをVMにインストールして Ansible でという使い方なので気づきませんでしたが、考えてみたら全部設定済みの VM データを配布してくれるということもあるのかもしれません
データによって画面表示を変えるときに、それに応じたデータを作って画面を確認したいことがあるので、mysql や postgres などなどデータベースの知識も必要になることがあります
SQL 書けなくても pgadmin みたいな GUI ツールで表を書き換えればいいのですが最低限の仕組みは知っていないと苦労しそうです
完全にフロント/バックが切り離されてるところなら、フロントエンド開発者向けにデータベースは使わずテンプレートエンジンに渡ってくるデータを好きに設定できる機能が用意されてるのかも?とも思います
サーバサイドの処理は不要でクライアントサイドの動きのみを作るわけですから、決まった場所の JSON ファイルのデータがそのまま使われるならデータベースの存在を知らなくてもいいですし
ここまでできたらバックエンドよりフロントエンドのほうが何でも出来る人みたいに思えます
あとはサーバサイド言語を書ければもうサービスが作れてしまいます
でもこれぐらいできないとすごく不便で、すぐに他の人に頼らないといけなくなるように思います
サーバ冗長化とかそういった部分はかかわらなくてもいいと思いますけど、Linux やデータベースなんかは自分でどうにかできないと周り誰もいないときに動かなくなったら作業進められななんてことがありそうですし
前提として「簡単なHTML、Javascriptを扱えるレベルの方」というのとかたまに見るけど、そもそもスタートからして認識がズレているので、元教師から、現実を伝えますね。
クラス生徒30人いるとして、8割の24人は50分授業の間に課題を終えられる、という前提で書きます。
スマホ世代なので、画像をアップロードとかはわかるけれど、xxというフォルダからxxというファイルを開く、コピーする、そしてxxというサーバーのフォルダに提出、という作業から教えないといけません。さらにいうと、ダイアログが使えません。
スマホとか慣れてるだろーっていうオジサン世代に、わかりやすくいうと、デスクトップ環境とコマンドライン環境くらい、違います。そもそも、デスクトップにアイコンがないと、スタートメニューを押すことさえ気づきません。
これが現実です。残念ながら、大手ベンダーが大量導入した完成されたシステムを使って、パワポでプレゼン、ワァ─o(。´・∀・`。)o─ィ♪うまく出来たねー、ワードでプリント作り、ワァ─o(。´・∀・`。)o─ィ♪印刷できたね、が現状です。
管理する人が大変なので、「先生~パスワード忘れましたー!」という子供が出たら50分の授業がそれだけで終わってしまうので、つねにゲストログインでPCを使います。ですから、クラウドで何か作業させるとか、Googleほにゃらら使わせるとか、まず無理です。クロームブックなんて夢のまた夢です。アカウントという概念がないので、サーバーサイドのサービスを使う授業なんて出来ません。
ネットは子供が勝手にYouTubeみて、ヽ(゚∀゚)ノ うぇ────ぃ♪ってならないように、教育委員会や自治体のプロキシーでチェックする仕様が多いので、そこがコケると地域みんなこけるという環境が当たり前。かりにそうでないにしても、どこかでアップデート始まったらもう大変なことに。先生遅いですー!ちょ、ちょっと待ってなさい!キンコーンカーンコーン!・・・という環境でまともな授業なんて準備する気になりません。
ですから、アプリ的にタッチタッチタッチワァ──o(。´・∀・`。)o──ィ♪で終わる、そして最後に成績つけられるように、何かしらの成果物が「紙」で出せる、「プレゼンして終わる」という流れで、先生は、あーやっと1学期\(^o^)/オワタ。というのが日常です。
そしてそれを誰かが解決しても評価は上がらないし、それをやる予算もないし、そもそもそんな折衝面倒だし、誰も改善しようとは思いません。Windowsアップデートとかほんと怖いですよね。
ですから、ネット上に、多くの小中学生向けのプログラミング教材があったり、誠意で作ってくれたりするのですけども、ごめんなさい、現場はこんな感じなのです。
つまり、この環境でも教えられる教材にしてください、ということが言いたいわけです。せっかく作っていただくからには。
ダメな子で、本当にごめんなさい。
とにかく公立の小中学校でパソコンを教える、っていうことはこういうことなののを知ってもらえればと思います。今はみんな子供もスマホやってるでしょーって思うのは間違っていないのですが、とにかく「ファイル」って概念がありません。せめて、投稿とかアップロードとかまでです。スマホに強くても、PCには強くない、ということです。
クラス生徒30人いるとして、8割の24人は50分授業の間に課題を終えられる、そして、そこで成績をつけなくてはいけない、というミッションを先生はこなさないといけないのです。みなさんは好意で「xxを理解してもらう」というミッションで作られるかもしれませんけども、教師は「xx君の成績をつける」という目標で毎回毎回の授業をこなしていくので、そもそも目標が異なる、というところをスタートにしてもらえると幸いです。
はてぶコメントで、座学でアルゴリズムっていうのがありましたが、はい、そうです。座学が出来ればそれがベストですね。穴埋め問題とか試験も作りやすいですし。ただ、学習指導要領でとりあえずは実習のコマもやらなくちゃいけなくて、でも現場はそんな感じでこなすだけの実習です。
ブコメで「「××の概念がない」「○○を知らない」の連呼だが、教えればいいのでは」という指摘がありましたが、ご指摘はもっともですが、年間指導計画のそれぞれの時期でのそれぞれの到達度が設定されていますので、それらを教えるにもそのリソースをどう捻出するかという問題も当然出てきますね。
いろんな意見やブコメを見て思ったんだけど、皆さんどうやら40人以上の人間を同時に動かして同一ゴールを50分以内にさせる、という大変さの前提がわかってらっしゃらないのだと思った。そりゃそうだよね、人生でそういう経験はまず無いものな。セミナーやプレゼンはあったとしても、8割型アウトプットを時間内に出させる、というところがまあ想像しがたいよね。40人に講義やセミナーすることはあっても、同時に作業させる、というのはまずないものな。うーむ、そこですな。
まじな話をすると、N予備校のプログラミング入門コースやるのがオススメ。
一日8時間勉強時間があるなら、だいたい一ヶ月で終わる内容。
月額1000円だけどしっかり勉強すれば一ヶ月の無料期間中に終わると思う。
もともとN高等学校のノンプログラマーの生徒をWebエンジニアとして就職させるために作られたカリキュラムで講師曰く去年はこれで二人エンジニア就職を決めたらしい。
内容も相当親切に説明していて、プログラミングで何か作るだけじゃなくて、就職に必要な環境構築やセキュリティまでみっちりやる。
で講師が書いてる入門コースで習うことがまとめ。テキスト教材もあるけど授業も1項目を2時間で説明している。授業は週2の生放送とそのアーカイブがある。
↓みたいなことが学べる
----
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という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ファイル, ポートフォワーディング)
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)
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)
HerokuでWebサービスを公開 (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, 適切なエスケープ処理, リグレッション)
パスワードの脆弱性の対策(ハッシュ関数, メッセージダイジェスト, 不正アクセス禁止法, パスワードジェネレーター, 辞書攻撃)
セッション固定化攻撃脆弱性の対策 (セッション, セッション固定化攻撃, ハッシュ値による正当性チェック)
より強固なセッション管理 (推測しづらいセッション識別子, 秘密鍵)
安全なHerokuへの公開 (脆弱性に対する考え方, HTTPの廃止)
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, 子どもからデータを消す)
学習してから3日目ぐらいだけど連続3日でやったとは言っていない。
他のプログラミング言語と違ってチュートリアルの内容が足りないってこともなさそうだし、Golangのチュートリアルだけは繰り返しやったほうが良さそう。
今からGolangを学ぶならGoogleのリポジトリにあるパッケージ管理にdepを使うほうが安心する。
まだ公式ツールじゃないけど将来なるかもしれないしならないかもしれない。
Googleのことだからgxuiみたいに更新されなくなる危険もあるよな・・・・
でもプロジェクトを新規作成するときにrails new helloに相当するコマンドがないので不便。
スケルトン生成ツールが別途必要だけどフォルダ作るだけだからbatファイル用意するだけで良さそう。
あとGOPATHの設定もか。今のところは手動でやってるけどそのうちbatファイルにしたい。
でもやりたいことができないのがつらい。
cursesぐらいは標準で出来て欲しいよ。
だから他の言語ではいらないのにGolangではそんなことでもライブラリを探してきてインストールしないといけない。
Goglandだとそのままでも十分だけどVimの場合はvim-goを入れるのが良い。
勉強会に参加するときは軽量ノートを持っていくので動作が軽いVimがいい。
でもryzen搭載ノートが来たらIDEに乗り換えるかもしれない。
cliってライブラリもあるみたいだけど標準機能のflagだけで十分便利。
今の所もあんまりコマンドラインツールに興味ないので難しいことはしない。
やりたいことをぐぐってコピペしてる程度なのでdeferとかgo funcとかグローバル変数とか基礎的な部分はまだ知らない。
インストールが楽だけどWindows作ったらMacでも動くかは謎。
MacのハードウェアにしかMacのOSインストールできないライセンスだからWindows PCにMacインストールできないからapple嫌い。
Mac上でもWineを使えばプレイできたのでメモ。一応アダルトゲームなので、こちらに書いておく。
多分インストーラは動かないので、手動インストールになる。https://www.typemoon.com/users/faq/FHAT/#17 に従えば良い。要はsetup以下を適当な場所にコピーすればOK。
FateFD.exeが本体なので、"wine FateFD.exe"をコマンドラインで実行すれば起動する。起動に時間がかかることはあるが、待っていれば大丈夫。
初回起動時にディスクチェックがあるが、これはドライブにDVDを入れておきさえすれば、他に準備も要らず通った(MacBook Airで外付けBlurayドライブで確認)。
ADV部分のフォントはゲーム内の設定でMac側のフォントが使える(ヒラギノは表示されてないので無理そう)。フルスクリーンにするとおかしくなるので、これはできなさそう。「エンジン設定」でフルスクリーン切り替え方法を「ChangeDisplaySettings API」にすればフルスクリーンにもできる。最後までプレイできるかは確認していないが、今の所問題なし。