プログラミング

Gitの内部をPythonで覗いてみた

この記事はCCS †裏† Advent Calendar 2020の20日目の記事です。 adventar.org 前日の記事はスルメちゃんのダイエット記事。楽してダイエットはできないんですね(知ってた)。 castleofkraken.hatenablog.com わたしの記事ではPythonを使ってGitの中身を覗いて…

and演算子の短絡評価にはまった話

以下のコードで論理演算でなぜか右の関数funcが呼び出されてない>< return a && func(); ってことになやまされ、とりあえず問題を分解するために auto f = func(); return a && f; としたら正常に動いた。 なんで?って思ってTwitterでつぶやいたら一瞬で反…

Kuinでlistに対するremoveとremove_ifを実装してみた

こんな感じ。 list操作と関数オブジェクトを受け取る関数の良いサンプルになってるんじゃないかと。 func remove(List : &list<int>, val : int) do List.Head() while ( List .ChkEnd() <> true) if (List.Get() = val) do List.Del() else do List.Next() end i</int>…

Kuinでポリモーフィズムできるか実験

昨日Kuin1.00がリリースされましたね。 ということで早速使ってみました。と、その前にKuinってなんぞや?という人もいると思うので軽く説明。 ってか抜粋。 プログラミング言語Kuinは、「HSP並みに作りやすく、C++並みに実用的な言語」というコンセプト で制…

Oauth認証で非常につまらないところで躓いた話(Oauthとタイムスタンプ)

昨日からふと思いたちPythonのtweepyを使ってtwitterで色々と遊んでる。そのときStreamingAPI使うと常に401が帰ってきてしまった。どうやら認証で弾かれているらしいということなのだが...tweepyのソース読んだり、色々と調べてみたが解決しない。いっそのこ…

TideSDKをdebianに導入してみた

PythonでGUIを手軽に扱えるものないかな?と探していてTideSDK(前Titanium Desktop)を見つけました。wxPythonとかPyQtとかも考えたんですが、なんかなーってのがあり。TideSDKはhtml5+css+jsとあとPython,PHP,Rubyあたりを組み合わせてマルチプラットフォーム…

C++での継承とオーバーロードの名前解決の問題

以下の様なプログラムを書いたのだがなぜかオーバーロードがうまくいかない... #include<iostream> class Hoge{ public: void func(){ std::cout <<"パラメータなし"<</iostream>

Pythonでの代入について(変更不可能なTupleに代入できる?)

以下のコードでなにが出力されるだろうか? a = (1, 2) a = (3, 4) print a そもそもTupleは変更できないのでエラーを吐くのでは?とかおもってしまうが、ちゃんと代入できるし(3, 4)のほうが出力される。一方 a = (1, 2) a[1] = 3 print a のようなコードを書…

matplotlibを使ってみた

matplotlibというのはscipyに入っているグラフ描写用のライブラリです。普通は計算結果を適当なファイルに出力してそれでgnuplotなりで描写させるとおもうのですが、matplotlibを使えればPython一つでデータの解析から出力までできちゃいます。またPythonは…

暗黙の型変換を禁止するテンプレートクラス

暗黙の型変換はときおり悩まされる。しかも、コンパイラは警告すら出さない。 先日複数の引数がある関数をつくり、それでint型とbool型を受け取っていた。この場合型が異なるし独自の型を導入しなくてもいいだろうとか思っていたのが間違いだった。int型の変…

オブジェクトからテンプレートパラメータを取り出す

テンプレートクラスのインスタンスからテンプレートパラメータを取り出したいということが思う。そんなとき以下のようにすると取り出せる。 template<typename T,template<typename>class Target> T getType(Target<T>); template<typename T> class Hoge{}; int main(){ Hoge<int> hoge; decltype(getType(hoge</int></typename></t></typename>…

VS2010でテンプレートクラスの初期化子リストでメンバにラムダ式をわたす時の問題

結論から言うとコンパイルできなかった。問題のソースは以下。 class Hoge{ public: template<class T> Hoge(T func){func();} }; template<typename T> class Foo{ public: Foo(): hoge([](){return true;}) {} private: Hoge hoge; }; int main(){ return 0; } なぜだろうと思っ</typename></class>…

HSPのwaitとawaitの違い

waitとawaitなにが違うのという話をTLで見かけたので書いてみる。 ようするにwaitは常に指定秒数待つ、awaitは前のwaitから指定秒数待つということなのだが。 そうはいってもわかりにくいと思うのでまずはとりあえず検証プログラム。awaitとwaitを取り替えた…

std::unordered_mapやstd::mapの比較用のファンクタとしてラムダ式を渡す

やろうとして意外に面倒だった。が、だれも書いていないみたいなので書いておく。より面倒なのはstd::unordered_mapのほうなのでこちらについて主に書く。面倒なのは基本的にテンプレート引数としてファンクタを渡す仕様になっているということ。ラムダ式は…

「第2回 闇鍋プログラミング勉強会」に参加して発表してきました

ということで闇鍋プログラミング勉強会に参加させていただきました。 そして「関数型言語初心者がHaskellに挑戦してみた」という題でLTもさせていだたきました。いやー緊張しました。まずは全体の感想から。 闇鍋は名前のとおり色々な分野・興味の人が集まっ…

Pythonのデコレータとは何者か?

最近やっとPythonのデコレータがわかってきたのでなぜわからなかったのか、そして結局どういうものなのか書いておく。Pythonのデコレータのわかりにくい理由はまず挙げられているサンプルがよくないのだと思う。 def hoge(func): print "hoge" @hoge def bar…

HaskellでBrainf*ckを実装してみた

とりあえず、すごいH本がIO処理のところまでいったので 練習としてbrainf*ckの処理系作ってみました。 ソースコードはこちら→https://github.com/ikaro1192/brainfuck 括弧の処理とか一部の挙動が怪しいですが、なんとかうごきます。基本的にはイテレータが…

本格的にHaskellをはじめてみました

そういや積み本になっていた「すごいHaskell楽しく学ぼう!」、通称すごいH本。これは消化せねばとか思いつつなにもないとどうせやらないので「初心者がHaskellに挑戦してみた」的なのでLTやるって宣言してしまえばとか思い立ち、闇鍋勉強会(http://atnd.org/…

クラス内にあるtypedefが存在するか調べる

あるクラスにあるtypedefが存在するか否かを調べる方法はないかな? とか悩んでいてTwitterでつぶやいたらフォロワーさんがそれSFINAEでできるよと教えてくれた。SFINAEとは「Substitution Failure Is Not An Error」のことで「置き換えの失敗はエラーになら…

Fortranをはじめてみました

大学でそのうち使う(一応本業は地球物理やってる)よなーとか思いつつFortranを勉強してみることに。コンパイラはgcc系のやつです。本当は最新のFortran使いたかったのですが、学校ではFortran77らしく(過去の遺産の問題でしょうか?...)そっちを勉強すること…

当たり判定の数学(1)~動く矩形~

プログラミングをしているとこの手の当たり判定はよく出会います。 これは単純な矩形どうしの当たり判定でしてもいいのですが、 速度によっては、単純な矩形の当たり判定ではすり抜けるという現象が発生します。それを防ごうという試み。そこであたっている…

Haskellでエラトステネスの篩

先日Pythonで実装してみました。Haskellでもできたので書いておきます。 getPrimeList [] = [] getPrimeList (x:xs) = x : getPrimeList [y|y<-xs,mod y x /= 0] getPrimeListN n = getPrimeList [2..n] すごく短いですね。さすがHaskellです。まずgetPrimeL…

Pythonで関数型言語っぽくエラトステネスの篩

最近関数型言語始めようと「すごいH本」買ってHaskellはじめました。が、いかんせん文法なれない...そこで概念を理解しているというか多少は慣れてるPythonでいろいろ実装してみてます。その第一弾。エラトステネスの篩。なぜこれか?実はサークルのC++講座…

サークルでポインタを教えてきた

僕の所属しているサークルの新入生向けのC++講座(C++を教えるのが最適かという質問はなしの方向で)で先日ポインタを教えてきた。その時にどうやって教えたのかやどういう反応が返ってきたかをメモとして残しておく。 よくある「この教え方がいい」みたいなの…

HSPでユーザ定義関数の引数にほぼ何でも渡す

HSPは他は型があってないようなものなのになぜか関数や命令の定義のときだけ型を要求されて非常にやりにくいです。そこでなんでも渡せるようにしてみました。とはいってもまだ参照というか変数を渡す実装はできていないのですが... アイディアとしては単純で…

intとunsigned int のキャスト検証

サークルで以下のようなC++のコード(一部改変。)が話題になった int hoge=-1; if (hoge<=strlen("hoge")){ std::cout<<"Hoge"<

関数で複数の返り値(戻り値)を返すのをラムダ式でする

C++03までは関数で複数の返り値を表現する際は配列を利用するしかありませんでした。ただその場合は返り値専用の配列を利用するので返り値をわかりやすい名前の別の変数に代入するときやそのまま出力して終わりなどという時は若干無駄なことをしてる感じがあ…

C++でTDDを始めてみた。

最近よくユニットテストやらTDDやらの単語をよく聞くようになった。いままでだるいな(LLでは標準でサポートされていることも多いがC++の場合そうではないので)と思いつつしていなかったのだが、こないだ思い切って始めてみることにした。環境の導入やそのと…

hspinetでJSONをいじる

HSP3.3からhspinetにjsonを読み書きする機能が追加されました。解説があまりネット上で見つからなかったので調べて書いてみます。パースするJsonは以下のような形式です。 { "Data": { "value": 3, "str": "Hello", "info": [ {"id": 1, "name": "Alice"}, {…

Boost Property Tree LibraryでXMLをいじってみた

今作っているRPGのアイテムのデータをXMLで表現しているのですが、それを読み込む部分で何にしようかなと思いBoostを使ってみました。ということでメモも兼ねて記事を書いておきます。パースするXMLは以下のような形式(ある程度簡略化)です。 <ItemList> <Item name="hoge"> <Script>hogehoge.lua</Script></item></itemlist>…