<< Prev Page Next Page >>

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


バッカソンに出場しました

3Dも物理演算もやったことないプログラマが、バッカソンに出場したら2日でできるようになりました


スポンサーサイト

PicPages2をリリースしました


PicPages2



自炊ブックビューアをApp Storeにリリースしました。設定項目が少なくて迷いがないのが売り!?

あと、UIPageViewを使ってめくりアニメーションしてます。UIPageView結構使うの面倒くさい。iPadでは2ページ見開きとかしたいんだけどそっちはまだ途中なのでiPad版のリリースはナシで。ていうかiPad持ってないのでモチベーションがなかなか維持しない…

ソースコード一揃いgithubに置いたよ。UIPageView使うとことか参考になれば。Swiftの試行錯誤しながらなのでOptionalの扱いがふらふらしてる。そのうち直すかなあ。

サードパーティのライブラリ関係は載せてないのでこのままではビルド通らないのであしからず。

FMDBのビルドがどうしても上手く行かなくてsqlite3のラッパーライブラリとか自分で作った直後にSwiftDataの存在を知った。まあ練習にはなったし自分で作ったライブラリのほうが自分で使いやすいからいいかーとか。

iOSってStringのメソッド名が長いからこういうextension作っておくと正規表現を簡単に扱うメソッド生やせたりして便利だったりとか。iOSの正規表現ほんとめちゃくちゃ面倒だからねー。

CocoaPodでハマりにハマって、結論として、SwiftのプロジェクトではまだCocoaPod使わないほうが楽ってことがわかったのでCocoaPod無し。


プログラマーになりたい学生さんに学んでおいてほしいTop7

僕は今39歳で、大学1年のときになんとなく学校のX-Window端末でWindows 95発売前のインターネット(Mosaicとかchimeraとかいうブラウザでなー)に出会って以降、なんやかんやでずっとコンピュータ触ってきて今もプログラマの仕事してます。めっちゃ楽でもないけど、それほどブラックじゃない感じで妻子を養って生活してますよ。

自分の経験と、会社に入ってくる若い人に色々教えたりする経験を総合的に考えて、プログラマになりたい中高生、大学生に学校でたっぷり時間使って学べるうちに学んでおいたらいいことがあるので書いてみます。

最初に:プログラマってピンからキリまですごい差があるんよね


本当によく言われることですが、プログラマの能力によって、生産性は10倍とも100倍とも言われます。これは一面では嘘ですが一面では本当です。

誰が書いても大して変わりないプログラムを作る場合、上等なプログラマでも下手なプログラマでも、出来上がる時間はそんなに変わりません。せいぜい1.5倍〜5倍ぐらい(!)の差です。

世の中のプログラマが書いてるプログラムの何%〜何十%は、そういうプログラムです。Webアプリでいったら所詮はRDBにデータ登録して表示するだけみたいなのがもう山ほどあって、そんなのは細かい出来の差はあれど、基本的には誰でも作れます。

しかし、下手なプログラマではいくら時間があっても出来ないが、上等なプログラマなら1週間とか数日で出来てしまうようなプログラムもあります。この場合の生産性の差は無限倍ということになります(数学的にアレな表現)。

たとえばiPhoneが登場してiOSアプリが求められるようになった直後は、上等なプログラマじゃないと複雑なアプリが作れませんでした。それからしばらく時間が経って、開発ツールがこなれてきて、Web上の情報が出揃ってくると、徐々に、下手なプログラマでもそこそこのアプリが作れるようになるため、「誰でも作れる」プログラムの割合が増えました。まだまだ過渡期ですが。

また、たとえば大量に存在するテキストファイルの中から任意の単語を含むものを高速に検索するという要件があって、そういうことをするプログラムを作るのは一握りの上等なプログラマにしかできませんでした。世の中にそれを求める人が多いことがわかったので、たくさんの上等なプログラマがアプリケーションやライブラリを用意してくれて、今では下手なプログラマでもそれを利用してなんとかかんとか仕事をこなせています。

この現実に対して、賢いつもりで「なるほど、要するにそんなに頑張って上等なプログラマにならなくても、少し待ってればなんとかなるんだから頑張る必要なんかないね」と考えてしまうのもある意味真実ですが、そっちの道はブラックとか、IT土方とか、そういうのに近づく可能性が高い方向性です。

一方、「頑張って上等なプログラマになれば時節にかかわらず常に必要とされて、クリエイティブな仕事ができるってことだね」と考えるのは、ある程度金銭的に恵まれる可能性が高い方向性です。

なぜなら、大きな傾向としては、高い報酬は希少な能力に対して支払われるからです。ぶっちゃけ、だれでも出来る仕事は安いのです。下手な(安い)プログラマの需要もそれなりにあるので、食いっぱぐれずにはいられるとは思いますが。

そんなわけで前置きが長くなりましたが、できたら上等なほうになりたい学生さんに、そこそこ上等なほうじゃないかと勝手に思い上がっている僕が勝手におすすめする「学生のうちにできること」Top7の発表です!

1位:英語


英語大事だわー。だいたいからして全てのプログラミング言語は英語ベースだし(ぴゅう太とかなでしことか言うなややこしいから)。ちょっとわけわからんエラー出た時は結局QiitaよりStack Overflowが頼りになるし。もっとわからんときでもソース読んだらなんとかなるし。

別にTOEIC800点必要とかそんな難しい話じゃないです。簡単な文章をスラスラ読める必要があるってことです。そんな難しい文法は出てこないし、ある程度慣れたら大体一定の単語しか出てこないし。中学から大学まで、学校で習う程度のことを真面目にこなしとけばいいってだけです。

おかしいなー、なんであんなにも英語読めないんだろう…。「なんかエラーになりました」じゃなくて、すぐ目の前の画面にエラーメッセージ書いてあるやん!英語見た瞬間に見なかったことにするみたいなのダメ、ゼッタイ。

2位:数学


プログラマに数学は必要ある、ないという議論がありますが、数学の点数取れてる人のほうがプログラマに向いてると思います。微分積分が常に必要ってわけじゃないです(機械学習を自分で実装とか言うときはガチで必要です)。でも文字をたくさん使ったような数式にアレルギーが出るようだと必要な勉強ができないです。
目的関数
f(x) = cTx,  c:n×1, x:n×1   (1)
を、制約条件
Ax ≦ b,  A:m×n,x:n×1,b:m×1   (2)
のもとで最大にする
とか言われて「うえぇぇ」ってなってるようだと線形計画法の教科書も読めない。

あと、数学の証明問題を解く手順は難しいプログラムを書く手順と似ています。抽象化、具象化の考え方もプログラミングに大いに関係があります。数列の一般解を求めるみたいな問題はプログラミングそのものです。また、ゲーム会社で「上等な」プログラマになりたいなら線形代数や幾何学なんかはそのまま必須でしょう。

結局数学は全部つながってるので、中学高校のうちから真面目に勉強しといて損はないです。

3位:国語


プログラミングは文章みたいなものだ、という人は多いです。文章を書くセンス、読み解くセンスは結構大事です。

長い文章を構成するときと、長いプログラムを書くときで、使う脳の部位は似ています。

あとどの職業でも同じですが、特にプログラマの場合、相手にとってわけのわからんものを何とかして説明するという機会が多いです。そのときに日本語の運用能力が高くないといたずらに時間ばかりかかります。

お客さんや上司が、誰にでもわかりやすい文章で求めるものを説明してくれるとは限りません。難解な文章を読み解く力もあったほうがいいです。

誰かに助けを求めるにも、まず自分の状況を説明するための論理的な文章を作らないといけません。文章大事。

4位:人づきあい


プログラマはコンピュータに言うことを聞かせる職業ですが、一人では仕事できません。プログラムは本質的に誰か人間のためのものである以上、お客さんなり、同僚なり、誰とも知らないユーザーなり、必ず他の人間と関わります。

他人と関わったときに不快感を与える人よりは、機嫌よくさせられる人のほうが必要とされるし、必要とされれば成長もするわけです。プログラマに限ったことではありませんが。

5位:プログラミング


プログラマになりたいならプログラムを書けばいい。当たり前ですね。ただ、授業で習う程度のことは会社の新人研修であっという間にカバーされてしまうので…。学校で習う以外で、興味の赴くままに、何かを作りまくるのはとても有効です。え、それほど興味ない?じゃあプログラマになろうと思わなければいいよね。

自分で作ったものを発表するというのをたくさんやるというのは、上等なプログラマに至る一つの大きな方法です。やっぱり人に見せるとなったら緊張感が違うので。また上手く行けば上に書いたようなことを全部すっ飛ばしてオンリーワンになれるかもしれない。

ただ「これはいいぞ!」と思って作っても世の中的にはそうでもない、となる可能性は高いわけで、それだけで一発当てるのを目標にしなくてもいいかなとは思います。

6位:美術、デザイン


プログラムは人間のためのものです。それも、非プログラマのためのものがほとんどです。ユーザーインターフェイスにはデザインが必要です。デザインは実はかなりの割合が理屈で構成されています。色の理屈、形の理屈。

今のところ、プログラマとデザイナは別の職業です。しかし、両者の組み合わせで一つの製品を作るという機会がとても多いので、とても綿密に協力しあわなければいけません。その時、デザイナの使う理屈がわからないとうまく協力できません。

社会に出てから独学するよりは、大学の自由選択科目とかで何単位かとっておくと、結構効きます。

7位:何らかの得意分野


最初に書いたとおり、だれでも出来る仕事は安いです。逆に、出来る人が少ない仕事は高くなる可能性があります(必ず高いとは限らないけど)。

スーパー難しいプログラムは確かに出来る人が少ないですが、それ以外にも出来る人が少ない仕事があります。それはコンピュータ以外の知識との組み合わせです。

たとえば大学の心理学の研究にコンピュータを使いたい先生がいた場合、できれば心理学がきちんとわかるプログラマに作って欲しいと思うわけです。

僕は大学時代に熱力学やら燃料電池やらの専門でしたが、熱力学がちゃんとわかるプログラマって少ないので、たまたまそういう仕事に当たった時はとても有難がられてその後もずっとご指名状態です。

真面目に専門分野に打ち込むことは無駄にならないと思います。


以上です。あー長かった。



テーマ:プログラミング - ジャンル:コンピュータ

ページ内リンクでスクロールする表現試案

ページ内リンクで「パッ」と切り替わった時何が起きたかわからない、という話はたしかにあるよね。

で、こちら様は「点滅させてみよう」というのを作っておられます。

「スクロール」 っていう動作以外で、画面が移動したことを視覚的にわからせる方法として、ページ内リンクをクリック (タップ) したときに、画面を一瞬点滅させたら、なんか切り替わったなって思わせられないかなと思って
ページ内リンクはスムーズスクロールしなくても一瞬点滅すればいいんじゃないかという実験 | WWW WATCH

僕も僕も作ってみるよ!僕はページ内で遷移したことがわかったほうがいいからスムーズスクロール派なんだけど、スムーズスクロールだと凄く長いページのときにどうしてもズルズルズルズルーっと長くスクロールするのがかっこ悪い。

というわけで、とても長い距離をスクロールするときは途中を飛ばしてみた。



ソースコード


jquery.countdownつくった

JavaScriptで画面上に数字を表示してカウントダウンするやつが見つからなかったのでぱぱーっとつくりました。
特筆すべき点は…まあ、ないです。
使うほうのコードはこんな感じ。

$.countdown({ count: 5, message: 'シャットダウンしてよろしいですか?', completed: function() { alert('BooBoo.'); }, canceled: function() { alert('キャンセルされました'); } });

デモ

Githubはこちら

[GitHub] jquery.countdown


UIScrollViewとAutoLayoutでハマった話

UIScrollViewの中にUIImageViewを一つだけ表示するっていうUIを作ってたんですがね。

表示する画像によって、UIImageViewの大きさをいろいろ変化させたいので、XCode上でConstraintsをあらかじめ設定しておけないので、コードのほうでなんとかしないといけないのです。

当初、

  1. XCode上でUIScrollViewにUIImageViewを貼り付け(自動的に、UIImageViewの大きさがニュニュっと大きくなるよね)
  2. UIImageViewにはConstraints設定なし
  3. UIViewControllerのviewDidLoadでUIImageViewのサイズ設定
    override func viewDidLoad() { (略) imageView.frame.size = CGFrame(x:0, y:0, width: imgWidth, height: imgHeight) (略) }

ってやってたわけです。(あ、気づいた?そう、Swiftです。いいよねSwift)

しかしどーうしてもUIImageViewの大きさが600x600になってしまう。

それはもういろいろ調べて試しました。UIScrollViewとAutoLayout | Professional Programmerとかほうぼうで、

scrollView.setTranslatesAutoresizingMaskIntoConstraints(false)

ってやるのがいいとか見て試してダメだったりとか。

調べる途中で、Visual Format Language for Autolayout - Command Shiftとか見つけて、Visual Formatがかけるようになっちゃったりとか。

しかし解決しない。

で、ふと気づきました。600x600のサイズってのは、これはあきらかにXCodeのStoryboardで設定されてる初期値なわけです。このサイズにするConstraintsが勝手にくっついてるのではないか?

そして、過去の経験から、UIScrollViewは複数のUIViewが重なって構成されているってことを知ってるので、調べるためのコードはこれだ!

for c in imageView.superview!.constraints() { println("constraints : \(c)") }

scrollViewのconstraints()ではなく、imageView.superviewを調べるのがミソです。

で、やっぱり付いてました。サイズを600x600にする制約。

となれば、あとは簡単。ついてる制約をごっそり削除しちゃえばいいのです。

var sv = imageView.superview! sv.removeConstraints(sv.constraints())

これで、あとは自前でVisual Format使ってConstraints設定するもよし、CGFrameで自由なレイアウトにするもよし。よかったよかった。


サーモグラフィーのカラーマップをC#で生成する方法

半年以上も更新してないのに、急に記事を書くこのとってつけた感はいったい。

さておき、こういう仕事をしてると、赤外線カメラからUSB経由でとったシグナルデータをサーモグラフィー画像として表示するアプリを作る機会も多いですよね。そういうのはWindowsでやるのが多いので、まあ言語はC#になります(断言)。

そんなとき、画像の横にさらっと、
カラーマップ
こういう画像が置いてあると、説得力が増しますよね。

でも、色の対応とかは設定で変化したりするので、あらかじめ画像を用意しておくわけにいかないので、動的に作る必要がありますよね。たいていそうです。

なので計算で作ります。


» Read More...

PHPでSFTPが遅い時の対処法

PHPで、よそのサーバにSFTPで接続して転送して…ということをやりたかった。SCPが使えない相手サーバなので、あくまでSFTP。

普通に書くとこうなる。(エラー処理は全部省略して)

// 接続してー
$connect = ssh2_connect($dstHost, 22);
// ログインしてー
ssh2_auth_password($connect, $username, $password);
// 謎の文字列にしてー
$sftp = ssh2_sftp($connect);
$sftpPath = 'ssh2.sftp://' . $sftp . '/' . $dstPath;
// copyで転送
copy($srcPath, $sftpPath);

簡単で助かるなあPHP。と思ってたら、これがびっくりするほど遅かった。100MB送信するのに2〜3分かかる始末。

「まーね、相手のSFTPサーバが遅いからしょうがないんですよこーいうのはー」とか言いつつ、ためしにLinuxシェルから普通にsftpコマンド叩いてputしてみたら、100MBの転送が5秒ぐらいで終わった。なんじゃそら!

そりゃああんまりだ。copyじゃなくてfreadとfwriteを使ったりしてみたけど変わらず。とにかくPHPのSFTPラッパーが遅いんだ多分。

しかたがないので、シェルスクリプトを作った。

#!/bin/sh

HOST=$1
USER=$2
PASS=$3
SRC=$4
DSTDIR=$5

expect -c "
set timeout 30
spawn sftp $USER@$HOST
expect \"password:\"
send \"${PASS}\r\"
expect \"sftp>\"
send \"cd ${DSTDIR}\r\"
expect \"sftp>\"
send \"put ${SRC}\r\"
expect \"sftp>\"
send \"bye\r\"
"

んで、PHPから呼ぶ。

exec("/path/to/script.sh {$host} {$user} {$password} {$srcPath} {$dstDir}");

すんごい速くなった。いや、ほんと、こんなことしてダメなのに、さすがに20倍の速度差となると、ダメなこともしなきゃいけなくなるという。


GMailのToDoリストの高さを変えるブックマークレット

GMailのToDoリスト便利ですよね。
でも大きい画面で見ると、ちょっと高さが足りなくてもったいない感じです。

そこでこのブックマークレット。
TallToDo
↑このリンクをブックマーク

中身はこんだけです。


javascript:(function(){
var i=document.getElementById('tasksiframe');
i.parentElement.style.height='732px';
i.contentDocument.getElementsByClassName('Ed')[0].style.height='700px';
})();


Have fun!


タグの閉じ忘れツールをバージョンアップ

HTML内タグの閉じ忘れをチェックするツール[ブックマークレット] - とっくりばーをサーバー引っ越しがてらバージョンアップですよ。scriptタグとHTMLコメントを無視できるようになりました。なったはず。

各種ブラウザで動作チェックをしてて、Chromeが超速くてびっくりした。体感でChrome>>Firefox>IE9って感じ。

Now computingを表示するひまもなく結果が表示されちゃうってすごい。

で、でも、Firefoxのほうが痒いところに手が届いて便利なんだからっ(震え声)



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。