万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

MastodonでのVagrant起動

vagrant up

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'ubuntu/trusty64' is up to date...
==> default: [vagrant-hostsupdater] Checking for host entries
==> default: [vagrant-hostsupdater]   found entry for: 192.168.42.42 mastodon.dev
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.
==> default: Running provisioner: shell...
    default: Running: inline script
==> default: /tmp/vagrant-shell: line 4: rails: command not found
The SSH command responded with a non-zero exit status. Vagrant
assumes that this means the command failed. The output for this command
should be in the log above. Please read the output to determine what
went wrong.

Railsがない?手動で入れたw

vagrant ssh

で入り、

vagrant@mastodon:~$ gem install rails
The SSH command responded with a non-zero exit status. Vagrant

このヘンテコなメッセージは、vagrantsshで入った状態で

vagrant@mastodon:~$ rm -rf /etc/udev/rules.d/70-persistent-net.rules
vagrant@mastodon:~$ rm -rf /etc/udev/rules.d/70-persistent-cd.rules

してexitして抜けてvagrant reloadする。

==> default: /home/vagrant/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/spec_set.rb:87:in `block in materialize'
==> default: :
==> default: Could not find actionview-5.0.2 in any of the sources
==> default:  (
==> default: Bundler::GemNotFound
==> default: )

って・・・

vagrant@mastodon:~$ gem install actionview

してもだめ。

仕方ないのでvagrant sshで入って、

mastodon/Vagrantfile at master · tootsuite/mastodon · GitHub

ここにあるVagrantfileにある以下のコマンドを行った。

# Install gems and node modules
gem install bundler
bundle install
yarn install

このあとホストマシンで、vagrant upした。

以下でエラー出る・・。

/vagrant/app/views/about/show.html.haml

f:id:shinriyo:20170430171339p:plain

Django 1.11でのタグ使用時に勝手にエスケープされてしまう

今までこのように買いていた。

@register.simple_tag
def calc_rate(star):
    """
    星を計算する(評価者一覧の方)
    :param star: 星の数の数字
    """
    html = """
        <p>
    """
    star = '<span class="glyphicon glyphicon-star"></span>' * star
    html += star
    html += """
        </p>
    """
    return html

しかし、いざtemplateで

                <div class="ratings">
                    {% calc_rate item.star %}
                </div>

のように使用するときにHTMLのタグ自体がそのまま表示されてしまう。

https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/

おそらくエスケープを勝手にされていた?ので。 from django.utils.safestring import mark_safeをインポートし、 最後のreturnにて

    return mark_safe(html)

したら大丈夫になった。

CommonLisp Mac初める WebサーバWoo

Lispはいろんなのがあるけど、sbclにした。 Common LispのWebサーバ「Woo」がだから。

依存系のインストール(面倒なのでbrew

brew install libev
brew install sbcl

パッケージ管理?QuickLispのインストール

quicklisp.lisp がDLされ、それがあるフォルダで行う

curl -O http://beta.quicklisp.org/quicklisp.lisp 
sbcl --load quicklisp.lisp

そのあとで、SBCLを起動

sbcl

その起動内したターミナルで初期化 ※~/quicklisp/setup.lisp"にはすでに入ってるっぽい。

(load "~/quicklisp/setup.lisp")
(ql:add-to-init-file)

これで晴れてqlコマンドが実行できる。

Wooのインストール

(ql:quickload :woo)
[package woo.ev.event-loop].......................
[package woo.ev.condition]........................
[package woo.ev.util].............................
[package woo.ev.socket]...........................
[package woo.ev.tcp]..............................
[package woo.ev]..................................
[package woo.response]............................
[package woo.queue]...............................
[package woo.specials]............................
[package woo.worker]..............................
[package woo.signal]..............................
[package woo]....
(:WOO)

となればインストールされたっぽい。

一旦SBCKから抜けて、

hello_world.lispのファイルに書く

(ql:quickload :woo)

(woo:run
  (lambda (env)
    (declare (ignore env))
    '(200 (:content-type "text/plain") ("Hello, World"))))

起動

sbcl --load hello_world.lisp

起動できる。

5000がデフォルトのポートらしいので、

http://localhost:5000 にアクセスすると、"Hello World"と表示される。

Django 1.11で動かない

`from django.shortcuts import render`

## 略
            return render_to_response('mysite/home_u.html',
                                      my_context,
                                      context_instance=RequestContext(request
                                                                      ))

これが動かなくなってた。

stackoverflow.com

render_to_responseとかcontext_instanceとかいらなくなった。

from django.shortcuts import renderに置き換える。 render_to_responserenderにする。 context_instance=RequestContext( )を外す。

あとは、引数の順が変わることに注意!!!

ログインのも関数からクラスベースに

url(r'^account/login/$', 'django.contrib.auth.views.login', だったので、

https://docs.djangoproject.com/en/1.11/topics/auth/default/#django.contrib.auth.views.LoginView

Deprecated since version 1.11:
The login function-based view should be replaced by the class-based LoginView.

from django.contrib.auth import views as auth_views とインポートして

    url(r'^account/login/$', auth_views.LoginView.as_view(template_name='account/login.html'),
        name='login'),

にした。

UnityのAnimatorのControllerを拡張

普段無いが、

using UnityEditor;
using UnityEditor.Animations;
using UnityEngine;

[CustomEditor(typeof(AnimatorController))]
public class AnimatorControllerInspector : Editor
{
    public override void OnInspectorGUI()
    {
    }
}

これでいける。