2016年6月29日

javascriptにあるcall,applyについて

なんでこんなものが用意されているか意味不明なんですけど、これってcommon lispのfuncall,applyと似ているのだけど、だとしたらjavascriptにcall,applyは不要って言うかそんな気がするのだけど
common lispになぜfuncall,applyが必要なのかと言うと名前空間が変数用と関数用で分かれているからで、名前空間の扱いがscheme系のjavascriptではfuncall,applyが不要なんじゃないかなと

そもそもjavascriptって言語仕様がschemeっぽいけど、schemeにもfuncall,applyってあるんですかね
少し調べてみましたがやっぱりschemeではfuncall,applyが不要なのでそもそも存在しないっぽいのだけど

しかし、call,applyとは直接関係ないけど、この件でjavascriptのことを検索してたけど、出てくるもの、酷いものが多いな
クラス的と言うかオブジェクト指向の使い方の勘違い方も酷い例が多くて、これら記事を見てjavascriptで一歩進んだプログラムを書いてみたいな、なんて思ってる人達が混乱すると思うのだけど
混乱するって言うか、故意に不用意にプログラムが複雑化するだけで、ややこしくなるだけで、良いことなんてないのだけど、こういう複雑で理解しにくいプログラムが書けるって一歩上達したとか思っちゃうのかな
実際は全然上達してなくて迷惑なだけなんだけどな

2016年6月22日

Pythonでハマった件

変数のスコープでハマった

例えばこんな感じのコードで
row = #データベースから一行取得したもの---1
entrants = #データベースから複数行取得したもの
entrantnames = [row.name for row in entrants]
#とすると1のrowが上書きされてしまう

rowがリスト内包表記内のみで有効な変数だと思ったら、リスト内包表記のその側の変数を上書すると考えもしずハマってしまった
Lispのようにブロック毎に変数のテーブルが生成されるのかと勝手に勘違いしてしまった
まあ後から冷静に考えたら1のrowはもっと後で利用するんで、1の文自体をもっと後に、今回は上書きされてしまったリスト内包表記の後に記述するべきで、そうすれば変な上書き問題も発生しなかったのかなと思います
やっぱり変数は利用する直前で記述するべきですね

2016年6月2日

HyperDev

fog creekからHyperDevと言うWebアプリが発表されています

https://hyperdev.com/about/

内容はほぼGoogle App Engine、Windows AzurでPaaSって言うんですかね、ウェブサーバーとかOSとかまったく意識しなくてもいいって言うやつね
って言うか内容はほぼApp Engineなんだが
オンラインでソースコードが記述できるんで、App Engineとの違いはデプロイしなくてもいいっていうところかな
そんでもデプロイしてでもローカルで開発したいような気もしないでもないけど
あと、サンプルを少しだけみただけなんだけど、永続化がいまいちわかんなかったって言うかグローバルオブジェクトがそのまま残るみたいでして、これがうまい事クエリとかできるんだったら結構面白いかも
データベースとか意識しないでORマッパーとかもイチイチ意識しなくてデータベースがオブジェクトとして扱えるみたいで、LINQみたいなものがあればなおいいんじゃないかなと思った
データベースを激しく利用しないけど、少しだけ永続化は必要って言う場合には最適だと思うけど、データ量が多くなってきた時にどうなるかはちょっとわからないかな、未知数
まあ、なんかデータベースの途中から切り出すような操作は絶対用意されていると思うんだけど

あとこういうのを「full-stack web apps」と言うんだと言うことが分かった