はてなキーワード: STLとは
買え。2,3万の廉価な中華機じゃなく、6,7万~10万ぐらいの名の知れたFDM機を買え。光造形は最初は避けろ
んで、thingiverse.comで面白そうなSTLをダウンロードしてプリントしまくって部屋をガラクタで埋めろ
1kgリール2本ぐらい使ってコツがつかめたら、他社フィラメントに手を出すのもいいかもしれない
ただ、フィラメント変える度にプリンタ調整する必要がある。造形第一に考えるなら、メーカー推奨フィラメントを使い続けるのをおすすめする
いきなりマシン買うのに躊躇いがあるなら、まずは3D CADツールで、自作モデルを作れ
とりあえずのおすすめはFusion360だが、慣れてるツールがあればblenderとかでもよい。最近は3Dモデリングツールにもプリンタ向け機能やプラグインが出ている
で、STLファイルを吐け。STLが吐ければそれはもう3Dプリンタで出力できる。プリンタを買うだけだ
自分はFDMの3Dプリンタを買って10年ぐらいになるが、ずっと使っている
光造形は3年前に試したが、こちらは埃を被っている。液体の運用が気を使うからな
プリンタの用途だが、日用便利品を作るのがいいと思う。が、これが一番難しい
正直言って100均に行けばだいたいの便利アイテムはある。それをあえて無視し、あるいは「100均のあのアイテムを真似しよう」と、そこそこの価格のプリンタとフィラメントを使い、誰もテストしてない不良品かもしれない自作アイテムを使うのだ
しかし、これを自宅で生産改良できるのがプリンタメリットなので、ガンガンCADを書き、ガンガンプリントし、ガンガンテストして、ガンガン試作品をゴミ箱へ投げ、その結果としてマイベスト自作アイテムを作り出す
1時間ぐらいCAD描いたら、プリンタに出力を投げて、1時間ぐらいゲームなりネットなりして待つ。そうすると、CADで画面内に描いた絵が現実の立体物となってプリンタの造形ベッドに乗っている
それをいじってテストし、思っていたよりパーツが細くて華奢だの、結束バンド通して固定する予定の穴が小さいだの、ハマるパーツがハマらないだの問題を見つけてまたCAD描きに戻る
これを繰り返す。2時間ぐらいで1サイクル回せれば、半日使うと3,4サイクル回せて、どんどん完成品として洗練されていく
これは楽しいよ。買おう
C++は全然詳しくないので、それこそSTLがどうこうみたいなのは正直分からない。
あくまでCとの比較なんだけど、一般的に難しい方の言語と言われるRustでも、Cのソースに比べたら全然読みやすいことにびっくりした。
特にポインタ周りの記述は、&とか*の書き方がCから少し変わっただけなのに、ぐっと読みやすくなってる件。
これならCやRustを使う上で絶対的に必要な、メモリの話も理解しやすいだろう。
なので先にRustを学んでおけば、後でCに取り掛かる際のハードルはだいぶ低くなりそう。
そうなると、今だと全くのゼロからプログラミングを学ぶなら順番としてはPython→Go→Rustになるのかな。
正直JavaやC#やSwiftは必要になってから学んでも遅くはないし、Goを知っていれば多分そこまで難しくない。
この程度でも600万は稼げるという夢を持つか、こんなのでもちょっと何かが違うだけで600万稼げるか否かが分かれてしまう業界に闇を感じるか、600万程度で何ドヤってるの?と思うかはご自由にどうぞ(外資系ってもっと稼げるの?)。
歳は30台前半。学部卒。BtoB向けのパッケージ製品の開発プロジェクトで、設計、コーディング、テストあたりを担当している。仕様について発注元との折衝もやっている。
業務で使う技術のうち、自分自身がそれなりに習得しているものだけを書く。プライベートでしか習得・使用していない技術は別。
以上。
PythonもgitもDockerもkubernetesもAnsibleもCIツールもAWSもGCPもRuby on Railsも知らなくてもなんとかなってしまっている。業務でこれらのスキルを要求されることは(今のところは)ないから。
楽でいいと思う一方、このままだと将来ヤバいとも思っている。いざ転職となったときに詰みそう。
でもいざとなったらググっていくらでも独学できるだろうとたかをくくっているので焦ってはいない。
というか「その他」のところに書いた能力が高ければ世の中大体はなんとかなるんじゃないの。知らんけど。
ちなみに自分は構築できないというだけで、プロジェクトではJenkinsとかgradleとかbabelだかwebpackだかでビルド環境は整えられている。
あとプライベートで、単純な仕様の独自言語のコンパイラフロントエンドをC++とLLVMで作っている(これで金が稼げるとは微塵も思っておらず、完全にただの趣味)。
素直に称賛するわ。偉いよ。それこそ君は5年前の本に載ってたようなMakerじゃないか。
おれは書いてる通り高いとか大変そうとか色々理由をつけてやって来なかった側だわ。パソコン触っててこのデータをSTLでファイル出力して何かすれば3D プリントして何かできるんだろうけどなってたまに思ってるくらい。なんもやってない。
でも君に触発されていつかAmazonのセールでこれはと思えるものが出てくるようになった頃には必ず買おうと思う沼に入りたいよ。
でも、3Dプリンターがなかった時代はその金型までが大変だったんだと思う
3Dプリンターは…、みたいにダラダラ書いたけど、自分なりの結論としては、3Dプリンターは試作用途には断然アリだと思う
精度が多少悪かろうが、ときどき大失敗しようが、基本CAD通りの物体がとりあえず手に入るというメリットは大きい
だからCADと3Dプリンターを行ったり来たりして試作を詰めていって、
これ以上ないところまで行ったらDMMに頼むとか金型作るとかが3Dプリンターの使い方としていいと思う
最終完成品を3Dプリンターで作って一般消費者に売ろう、とか考えると失敗すると思う
Togetterのまとめのどこだったか失念したんだが、3Dプリンターでミニチュアのライフルとか作ろうとしてたと思う
それをワンフェス?だったかその手のイベントで売りたいみたいなんだけど、そのライフルが曲がって出力されてしまい、
かなり一喜一憂しているのを読んで、あー、光造形でも理想通りにはならんのだなー、と思ったり
うろ覚えだけど、光造形だとたしか印刷する位置によって、真ん中なのか端っこなのかで精度が変わるとかあったと思う
FDMでもあるw普通にあるw
同じ部品を一度に多く欲しいときに、コピーして並べて出力するわけだけど、その出力結果が配置した位置によって精度が異なってしまう
ネジみたいなものだと致命的
まあネジを出力するのは3Dプリンターのパフォーマンス自慢的な意味合いもあるので、規格にあるネジなら3Dプリンター出力はオススメできない
ネジ以外の部品も同様で、規格にある部品はホームセンターに行ったほうが無難
でも、3Dプリンターがない時代だったら、樹脂材ならプラ板とかエポキシパテとかプラモのフルスクラッチまがいのことをしなければならなかったけど、
それに比べれば3Dプリンターの方が断然楽ではある
だから、3Dプリンターは無駄な代物ではないのだけど、夢を見すぎて買うと痛い目に遭うと思う
買う前にThingiverseとか見て、こういう使い方だったらできるのかなあ、と購入後の使い道を想像してみるといいと思う
GitHubにもロボット作ったり人工知能の車とか作ってる人がCADデータやSTLがあるので探してみるといいかも
Thingiverseの注意点は、絶対投稿者本人が出力してないだろ、と思えるような精巧すぎるものとかはスルーした方が無難
あと、いいね!みたいな評価が高くても、評価者も作らずにいいね!を押してるので、
作品ごとに、自分も出力してみた、みたいな箇所があるので、それを見て色んな人がそれぞれのプリンターでどう出力されたかを見るといい気がする
まあ「沼」だね
3Dプリンターは沼
でもArdinoのケース作ったり、Arduino組み込んだロボットみたいなの作ったり、やろうと思えばRC飛行機とか作れるし、
ときどき夢見すぎる人がいて、これがあれば市販のプラモみたいなのコピーし放題じゃん、みたいに思うと痛い目に遭うと思うけど
あと、自分の家の洗濯機と排水口の接続部に問題が会ったので、3Dプリンターで部品を設計して出力して自分で直したw
賃貸の管理人に問い合わせたら、修理業者と一緒に部屋に行くんで都合が良い日を教えろだの、壊したんかーおまえはーみいたいな剣幕で対応されて、
いや、壊してないから、どっちかというと排水口より自分の古い洗濯機の問題だから、と思って、どうしよーかー、と思ってたんだけど、
と思って、排水口と洗濯機の結合部を定規で簡単に測って、簡単な部品を設計して、まずはPLAで出力
水が流れすぎることが原因だと思われたので、流量を制限する部品を設計した
2回目の出力で設計に問題なさそうなことが分かったのでABSで出力し直した、で数年間問題なく使えてるw
PLAは水に弱いしお湯で変形したり溶けてしまうので
public virtual class DataInfo { public Integer p; public Integer c; public Integer r; public Integer v; public String name; public DateTime time; // ... } public class CellInfo extends DataInfo { public String stl; public Integer cntl; public String[] lines; // ... } public class FormInfo extends CellInfo { public Integer err; public String org; public String mod; public String type; public Integer size; public Integer step; // .... }
YES,New generation Optimizer STL/C++ Level Code Optimizer.I think too. you can!
X86以前のコードレベルで自動的にコード最適化をかけた後にX86最適化を行う。このさいに文法的な最適化ではなくX86が最速になるようにCのコードを並び替える。
これはたしかに新時代のオプティマイザーなんだろう。だれが発案したの?
みんなx86で最適化を考えるがCのレベルで等価なコードであれば並び替えたほうが、さらにX86が最適化されるケースはあり得る。
たとえば、ライナーサーチだと判定できたら、さらに最速なアルゴリズムにCを置き換えることは不可能ではない。
コンパイラがアルゴリズムの最適化まで許可された場合 Pythonなどで培われた技術を使ってアルゴリズムコード最適化をしてCのコードをアルゴリズムごと改変してもよく、その後X86最適化を行うことは、次の時代にはふさわしいと私は思う。
例:ライナーサーチをもっとはやいサーチアルゴリズムに、このC言語のコードはライナーサーチだと判別して、コンパイラが自分で関数化した後に、もっとはやいサーチに関数ごと置換する。
その考え方はすごい。
プログラミング言語を印象批評している記事に触発されて、自分も印象批評してみようと思う。
JavaScript以外にもブラウザ上でぐりぐりするのにはJava AppletとかFlashとかSilverlightとかいろいろあったけれど、結局標準化を成し遂げたHTML5に淘汰されちゃった感じがする。LiveScriptからJavaScriptに改名されたり、規格を話すときはECMA Scriptだったりといろんな別名を持つ。一応、プロトタイプベースのオブジェクト指向言語なんだけれど、それを意識してコードを書く人がどれくらいいるかは謎。
Pythonは小さいコードを書くのには楽だけど、これで大きなコードを書くと思わぬ変更で思わぬことが起きるのでつらい。しばらく使うとPythonイヤイヤ病にり患し、goを使うようになるらしいとか、ならないとか。pythonで大規模なコードを万一書こうと思うなら、カバレッジが高いテストを書いてくれと思う。
Javaは初期のころオートボクシング / アンボクシングもなく、ストイックなオブジェクト指向言語だった記憶がある。ただ、staticを多用してオブジェクト指向とは程遠いコードも簡単に書けるので、Javaで書いているからと言ってオブジェクト指向だと思うのは禁物である。
PHPはWebネイティブな言語で、初期のころHTTP POST/GETなどで渡された変数がそのままプログラム中に出てくる機能や初期化していない変数を最初に使うと空文字列あるいは0で初期化するという機能があった。また、文字列と数字を臨機応変に切り替える機能もあり(今もそうかは知らん)、数字と文字の比較を比較演算子(==)でシームレスにできる。パスワードチェックみたいなコードで===ではなく、==を使っているとPHPを知らないバカ扱いされる。
C#はHello Worldくらいしか書いたことないから知らん。monoのような互換環境があるのは知っているけれど、わざわざPC Unix上でmonoを使う気分にはなれなかった。
C++は黎明期に使った感じと、C++11以降に使った感じが驚くほど違う言語。今はかゆいところには大抵STLで手が届くし、autoを使えばイテレーションで腱鞘炎になることもない。PC Unixにも最初から環境がインストールされているか、簡単にインストールできるので毛嫌いせず使うとよいと思う。
Rubyはぎょっとする変更をよくやるというイメージ。これで書かれたプログラムを長年愛用してきたが、ぎょっとした変更を入れられて動かなくなったのでgoで書き直した。その点ではpythonも3でおいていかれたので嫌い。
TypeScriptは書いたことないから知らない。JavaScriptだと大規模コードを書くとつらいのでTypeScriptを使おうという人がいるのは知っている。大規模なコードを書くとしたら、インタフェースに合った呼び出しかコンパイル時にチェックしてくれるような強く片付けされた言語のほうがよくなってくるというのはわかる。
Cは片付けし、構造化したプログラムを書きやすくしたアセンブラ...というイメージだったんだけど、C99くらいから便利機能がいろいろ入ってそうでもない感じになった印象。昔はCのコードを見たら最適化した後のx86アセンブリが見えていたんだけれど、最近は見えなくなってしまった。子供のころ、本屋で秘伝C言語問答 ポインタ編に出会ったのがこの業界に入るきっかけだったのかもしれない。ほかの言語でいろいろ楽に書けるから、カーネルをいじるか、システムコールをたたくかするときくらいしか自分の中では出番がなくなってしまった。
これ以下のランキングのもその気になったら書こうかな。
・STL標準講座
・Effective C++
・Modern Effective C++
・Effective STL
15年かけC++を独学した。
ずっと一人で努力し、風呂、トイレ、布団の中でも勉強し、プログラムを書いた。
基本情報処理、ソフトウェア開発者試験、ネットワークスペシャリストとデータベーススペシャリストを取得した。
しかし、正社員はもとより、時給2000円の派遣プログラマも時給1200円のアルバイトもスキル不足で何十社受けても一社も採用されない。
とはいえ、面接官のレベルは「STLなんて初めて聞いた」「gccて何かの会社?」
「C++の企画書(誤字ではない)を書いてる人なんてのがいるの?」
「じょーほーしょりしけんてのがあるの?外国の話?」
独身で、一切を我慢して娯楽を全く体験しないまま40歳になってしまった。IT業界の人間すべてが恨めしい。
貯金100万もなく、素人が書いたプログラムに対して手順書のとおりにマウスを操作してエクセルにテスト結果を書くだけの仕事ばかりしている。
class mystring { public: char *buffer; mystring() { buffer = (char*)""; } void operator = (const char*t) { int len = strlen(t); buffer = new char[len + 47]; strcpy(buffer, t); } void operator = (const mystring&src) { int len = strlen(src.buffer); buffer = new char[len + 47]; strcpy(buffer, src.buffer); } mystring& operator + (const char*t) { int len = strlen(buffer); int len2 = strlen(t); char *buffer2 = new char[len + len2 + 47]; strcpy(buffer2, buffer); strcpy(buffer2+len, t); buffer = buffer2; return *this; } mystring& operator + (const mystring&src) { return ((*this) + src.buffer); } };
class mystringV { public: std::vector<char> buffer; mystringV() { buffer.resize(2); buffer[0] = ' '; buffer[1] = NULL; } void operator = (const char*t) { int len = strlen(t); buffer.resize(len+1); strcpy(&buffer.at(0), t); } void operator = (const mystringV&src) { buffer = src.buffer; } mystringV& operator + (const char*t) { int len = strlen(&buffer.at(0)); int len2 = strlen(t); buffer.resize(len + len2 + 47); strcpy(&buffer.at(0) + len, t); return *this; } mystringV& operator + (const mystringV&src) { return ((*this) + &src.buffer.at(0)); } };
いろんな事をプログラマにかわってライブラリがやってしまうということ
どうなんだろうね。
この辺は あまりしっかり おしえてもらえないところではある。
でも プロならみんな 知っている
少子化でなんか論評書く奴は北欧が福井がわめく前にこれぐらいは見ておいてほしい。
http://www.gapminder.org/world/#$majorMode=chart$is;shi=t;ly=2003;lb=f;il=t;fs=11;al=30;stl=t;st=t;nsl=t;se=t$wst;tts=C$ts;sp=10;ti=1807$zpv;v=0$inc_x;mmid=XCOORDS;iid=phAwcNAVuyj2tPLxKvvnNPA;by=ind$inc_y;mmid=YCOORDS;iid=phAwcNAVuyj0TAlJeCEzcGQ;by=ind$inc_s;uniValue=8.21;iid=phAwcNAVuyj0XOoBL_n5tAQ;by=ind$inc_c;uniValue=255;gid=CATID0;iid=thlR4hyNMEnaVyV_uxRzjfQ;by=grp$map_x;scale=lin;dataMin=12;dataMax=83$map_y;scale=lin;dataMin=0.855;dataMax=8.7$map_s;sma=49;smi=2.65$cd;bd=0$inds=
そりゃあ、それが分からないからこそそういう恥ずかしいことを恥ずかしげも無く言っちゃうわけだからなあ。
具体的にっつっても、突っ込みどころしかなくて突っ込みきれないレベルなわけで、さすがにめんどくさくてやってらんないわけだ。
強いて言うなら、BS側だのPL側だのなんて1冊ファイナンスの本でも読んだ奴なら誰でも言える話なわけ。
(実際増田も新人研修かなんかでやったことをそのまま言ってるだけでしょ?)
「我々はプログラミングに強みを持っています。C++のSTLなどです」とか言ってる奴がいたら「は?」ってなって終わるのと同じ。俺プログラマじゃないけど。
専門性や実績の裏づけがあって言ってるならまだしも、地頭()とやらだけで入ったような新卒が言ってたら完全に失笑なわけです。
自分は研修医に舐められるくらいの恥ずかしい存在である、ということをまず認識した上でじゃあどうするのかを考えた方がいいと思うよ。
プログラム:定義づけられた物事を進めていく妥当な手順・方法の決定、および物事・手順・方法の記述書
(コンピューター)プログラミング:コンピューターが進めていく物事を定義し、妥当な手順・方法を決定し、記述すること。
プログラミング = デザイニング union コーディング;
デザイニング:進めていく物事を定義し、妥当な手順・方法を決定すること。
コーディング:コンピューターが進めていく定義づけられた物事の決定された妥当な手順・方法を、記述すること。
CD(コーダー):コーディングする人。プログラマーとは限らない。
SE(システムス エンジニア):進めていくべき物事を定義する人。プログラマーとは限らない。
PM(プロジェクト マネージャー):(プログラマー)プログラマー。(コンピューター)プログラマーとは限らない。
※日本のソフトウェア業界ではSEが定義した物事を、何の工夫も無くそのまま記述するCDという体制となっている。
つまり「物事を進めていく手順・方法」が余りにも稚拙で、PGと呼べるSEやCDが居ない。
※「物事を進めていく手順・方法」の巧拙の例としては、
PG: (初項 + 最終項) x 項数 /2
というように、例えば巧拙の差は「上手い・エレガントな方法・アルゴリズム」だったりします。
・継続的に勉強できない(1週間で最低10時間は、何があっても勉強しましょう)
・論文・学術書が読めない。(コードはお堅い理論的に筋道立った文章の極致の一つです)
・100ページくらいなら一晩で修得してやろうという気合いが無い(一晩で仕様書読み込んで次の日から活かす必要があったりします)
・仕事のやり方に疑問を抱かない(楽するためにはどんな苦労も厭わず、常に最善を考えましょう)
・いつかはマネジメントをしたい(人を使うよりも、プログラム組んで仕事させた方が、安くて速くて正確ですよ)
※(笑)なマネジメント:下僕に進捗という数字を報告させて、自分の握っている進捗管理という方眼紙のマス目を埋める作業。
自身の雇い主にマス目の埋まり具合を報告する作業。
※ここで以下の1~4を6ヶ月がんばっても挫折する方は、「一山いくらのコーダー」にしかなれない可能性が高いため、
しがみついてしまうと、真っ当な技術者の足を引っ張ることになります。
・逐次実行、条件分岐、反復実行
・ポインタ ※最近、情報学科のくせに学部でポインタを教えない大学があり、そういうところは真っ当な大学ではございません。
1)O'REILLYの[amazon:C++実践プログラミング]を最初の「ポインタ」まで読んでください。
2)C++の実行環境をC99で整えてください。(環境の準備は自分で面倒を見てください)
3)ポインタを用いて、文字のLinkedListクラスを実装してください。
※LinkedListとは以下の仕様を満たすクラスとします。(C++でJavaのLinkedListを実装)
http://docs.oracle.com/javase/jp/6/api/java/util/LinkedList.html
4)LinkedListの入れ子でTree構造をつくり、再帰を用いて、全要素をコンソール出力するプログラムを作ってください。
5)4)をクリア出来た人は、この本を1年以内に全部読んでください。
ただし、C++は複雑怪奇な言語のため、これ以降は知識レベルの修得で構いません。
私は中3の時、STLやBoostどころかbooleanの無い時にこの本を9ヶ月で読んでおります。
※私が面接に出る場合は、当該内容のLinkedListやQuickSortの概要を直ぐさま説明できる人は、可能性有りと○を出します。
面接で「LinkedListを勉強してきました、直ぐさま説明できます」といって、「そんなの出来て当たり前だ」と言ってくれる会社は殆どございません。
大抵はポカーンとして意味不明という顔をする文系人事だったり、「そんな技能必要ない」というところが殆どです。
逆に「できて当然」と言ってくれる会社は、技術をしっかり学べる可能性大です。
★ここまでクリアした方は、「入門者」と呼んで差し支えございません。次は「初級者」への挑戦です。
※初級者になるためからは、べらぼうに学ぶべきことが広がります。
燎原の火のごとく。
※筆者の立場
STLを使うことによる オーバーヘッドは 数~数百バイトオーダーだろ。どんなに見積もってもキロ単位。
いくらなんでも、キロ単位を 詰めることは稀 というのがメモリの見解。
メモリを最も使うのが、画像。画像1枚で数百Kで こっちを何とかしたほうがよほどはやい。
ここで言ってるのはあくまでも、STLを使うことによるオーバーヘッドは メモリが潤沢にあるものと想定してもいいって話で
ここで行ってるCPUは モバイルだな。 電池の持ちにも直結するし、持ってるメモリを0クリアとか、やらなくてもいいと分かり切ってる時でかつ
最近はもう STLもあるしBoostもあるから ポインタを使うという事自体がレアケースなんじゃねーか?正直もうデフォルトでは教えない。でもいいと思うよ。
ぶっちゃけ、ポインタを理解できない奴にポインタを触らせるな。というのが現場での共通見解。
むしろ、constとexplicit と 参照を厳密に使えるようになれって方がよほど重要。
引数でconst char * とか const vector<T>&とかくところを それぞれ char * とか vector<T>とかかかれると
お前待て って話 の方がよほど重要。
あと ポインタっていつ使うの?って 正直 高速化とかのチューニング以外ではもう使わないと思う。
listとかvectorとかを再発明するぐらいなら、大抵の場合はSTL使えよと。 逆にSTLじゃだめ Boostじゃだめとなったら、ポインタの必要性を知ってからポインタ学ぶからいんじゃね?