tag:blogger.com,1999:blog-10963130466571202082024-03-15T02:24:40.421+09:00letterYoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.comBlogger624125tag:blogger.com,1999:blog-1096313046657120208.post-18945782296282030252021-08-21T14:33:00.002+09:002021-08-21T14:33:43.530+09:00Sharp AQUOS sense4 SH-M15<p> 今使っている SH-M05 のバッテリーがだめになったので Sharp AQUOS sense4 SH-M15 を購入。</p><p>最近固定電話も解約したし電話もういらない気がするのだけど、2段階認証でスマホは必要だからしかたないね。バッテリーが理由で機種交換せざるを得ないのはだめだめだけど。</p><p>LastPass のアプリが LastPass Password Manager と LastPass Authenticator の2つあるのに気づかなくて2段階認証の移行につまずいたこと以外は、すんなりと機種変更できた。</p><p><br /></p><p><br /></p>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-3142326557780676322021-08-18T23:20:00.001+09:002021-08-18T23:20:34.882+09:00新しい PC<a href="https://www.sycom.co.jp">Sycom</a> さんで新しい PC を購入した。 <div>コンパイルすごく速くなった。 </div><div>それでいてかなり静か。</div><div>満足</div><div><br /></div><div><span style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">CPU : AMD Ryzen 9 5950X Vermeer[3.4GHz/16Core/TDP105W] 搭載モデル</span><br style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;" /><span style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">CPUグリス: Arctic Silver AS-05A [高密度微粒子、高熱伝導率タイプ]</span><br style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;" /><span style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">水冷UNIT : Fractal Design FD-WCU-CELSIUS-S36-BK [水冷ユニット]</span><br style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;" /><span style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">MOTHER : ASRock X570 Taichi [AMD X570chipset]</span><br style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;" /><span style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">MEMORY : 64GB[16GB*4枚] G.SKILL Trident Z RGB DDR4-3200 RGB内蔵ヒートスプレッダー搭載 Dual Channel</span><br style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;" /><span style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">HDD/SSD : Western Digital WD Black SN850 WDS200T1X0E [M.2 PCI-E GEN4 SSD 2TB]★PCI-E4.0対応 超高速次世代SSD</span><br style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;" /><span style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">VGA : サイコムオリジナル水冷静音仕様 GeForce RTX3070 8GB LHR+Asetek 740GN水冷+EnermaxUCTB12+サイコムオリジナ</span><wbr style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;"></wbr><span style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">ルVGAサポートステイ [HDMI*1/DisplayPort*3]</span><br style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;" /><span style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">CASE : 【黒】Fractal Design Define S2 Black TG [ガラスパネル]</span><br style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;" /><span style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">POWER : Fractal Design ION+ 860P (FD-PSU-IONP-860P-BK ) [860W/80PLUS Platinum]※高品質セミファンレス電源</span><br style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;" /></div>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-41953877571951589502021-08-18T07:51:00.001+09:002021-08-18T07:51:02.269+09:00固定電話解約した固定電話解約したYoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-73089988485363012512021-01-09T16:49:00.001+09:002021-01-09T16:49:35.246+09:00タオ<article class="markdown-body entry-content" itemprop="text" id="grip-content"> <h1> <a id="user-content-タオ" class="anchor" href="#%E3%82%BF%E3%82%AA" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>タオ</h1><p>ラグドールのタオが今日他界した。 9月末に心筋症・動脈血栓症で突然両後脚が動かなくなったけど、なんとかもちなおし少しずつ脚も動くようになってきていた。</p><p>今日急変してそのまま。</p><p>ねこまい</p><p>たお</p> </article>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-74029984801567652182019-07-23T15:37:00.001+09:002019-07-23T15:37:53.343+09:00python<article class="markdown-body entry-content" itemprop="text" id="grip-content"> <h1> <a id="user-content-python" class="anchor" href="#python" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>python</h1> <h1> <a id="user-content-開発環境" class="anchor" href="#%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>開発環境</h1> <h2> <a id="user-content-プロジェクトの作成" class="anchor" href="#%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>プロジェクトの作成</h2> <div class="highlight highlight-source-shell"><pre>mkdir project
<span class="pl-c1">cd</span> project
git init
python3 -m venv venv
<span class="pl-c1">source</span> venv/bin/activate
pip install jedi rope flake8 autopep8 yapf black</pre></div><h2> <a id="user-content-emacs" class="anchor" href="#emacs" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>emacs</h2><p><code>auto-virtualenvwrapper</code>, <code>elpy</code> をインストール</p><div class="highlight highlight-source-emacs-lisp"><pre>(<span class="pl-c1">require</span> <span class="pl-c1">'auto-virtualenvwrapper</span>)
(<span class="pl-c1">add-hook</span> <span class="pl-c1">'python-mode-hook</span> <span class="pl-c1">#<span class="pl-c1">'auto-virtualenvwrapper-activate</span></span>)
(<span class="pl-c1">add-hook</span> <span class="pl-c1">'projectile-after-switch-project-hook</span> <span class="pl-c1">#<span class="pl-c1">'auto-virtualenvwrapper-activate</span></span>)
(<span class="pl-c1">advice-add</span> <span class="pl-c1">'python-mode</span> <span class="pl-c1">:before</span> <span class="pl-c1">'elpy-enable</span>)</pre></div> </article>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com1tag:blogger.com,1999:blog-1096313046657120208.post-1330439218808297542019-07-08T14:14:00.001+09:002019-07-08T14:14:23.898+09:00Makefile から PostgreSQL の全テーブルを削除する<article class="markdown-body entry-content" itemprop="text" id="grip-content"> <h1> <a id="user-content-makefile-から-postgresql-の全テーブルを削除する" class="anchor" href="#makefile-%E3%81%8B%E3%82%89-postgresql-%E3%81%AE%E5%85%A8%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Makefile から PostgreSQL の全テーブルを削除する</h1><p><a href="https://stackoverflow.com/questions/3327312/how-can-i-drop-all-the-tables-in-a-postgresql-database" rel="nofollow">https://stackoverflow.com/questions/3327312/how-can-i-drop-all-the-tables-in-a-postgresql-database</a> <a href="https://stackoverflow.com/questions/649246/is-it-possible-to-create-a-multi-line-string-variable-in-a-makefile" rel="nofollow">https://stackoverflow.com/questions/649246/is-it-possible-to-create-a-multi-line-string-variable-in-a-makefile</a></p><div class="highlight highlight-source-makefile"><pre><span class="pl-k">define</span> <span class="pl-smi">DROP_ALL_TABLES</span>
DO $$$$ DECLARE
r RECORD;
BEGIN
-- if the schema you operate on is not "current", you will want to
-- replace current_schema() in query with 'schematodeletetablesfrom'
-- *and* update the generate 'DROP...' accordingly.
FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = current_schema()) LOOP
EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(r.tablename) || ' CASCADE';
END LOOP;
END $$$$;
<span class="pl-k">endef</span>
<span class="pl-k">export</span> <span class="pl-smi">DROP_ALL_TABLES</span>
<span class="pl-en">drop_all_tables</span>:
<span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">"</span><span class="pl-smi">$$</span>DROP_ALL_TABLES<span class="pl-pds">"</span></span> <span class="pl-k">|</span> sudo -u postgres psql target_database</pre></div> </article>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-77905971707315720682019-07-05T16:22:00.003+09:002019-07-05T16:27:25.992+09:00PureScript + Halogen + Firebase で簡単なものを作った<article class="markdown-body entry-content" itemprop="text" id="grip-content"> <h1> <a id="user-content-purescript--halogen--firebase-で簡単なものを作った" class="anchor" href="#purescript--halogen--firebase-%E3%81%A7%E7%B0%A1%E5%8D%98%E3%81%AA%E3%82%82%E3%81%AE%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%9F" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>PureScript + Halogen + Firebase で簡単なものを作った</h1><p><a href="https://github.com/quek/cocsan-purescript">https://github.com/quek/cocsan-purescript</a></p><h1> <a id="user-content-version" class="anchor" href="#version" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>version</h1> <ul> <li>PureScritp 0.12.5</li> <li>Halogen v5.0.0-rc.4</li> </ul><p>Halogen はぜひ v5 系を使いたい。 Child component addressing (H.slot) がきれいになっている。</p><h1> <a id="user-content-参考にすべきもの" class="anchor" href="#%E5%8F%82%E8%80%83%E3%81%AB%E3%81%99%E3%81%B9%E3%81%8D%E3%82%82%E3%81%AE" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>参考にすべきもの</h1> <ul> <li><a href="https://github.com/thomashoneyman/purescript-halogen-realworld/tree/halogen-5">purescript-halogen-realworld の halogen-5 ブランチ</a></li> <li><a href="https://github.com/slamdata/purescript-halogen/tree/master/examples">purescript-halogen の examples</a></li> </ul> <h1> <a id="user-content-build" class="anchor" href="#build" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>build</h1><p>purescript-halogen-realworld を持って来て Webpack 化した。</p><ul> <li>パッケージ管理は <a href="https://github.com/spacchetti/spago">spago</a> </li> <li>コンパイルは webpack + purs-loader</li> </ul> <h1> <a id="user-content-firebase" class="anchor" href="#firebase" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Firebase</h1> <h2> <a id="user-content-初期化" class="anchor" href="#%E5%88%9D%E6%9C%9F%E5%8C%96" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>初期化</h2><p>js でログイン処理と一緒にやっちゃう。ログインできたら PureScript の main を呼ぶ。</p><p><code>/__/firebase/init.json</code> を使うコードあまり見かけないけど環境ごとの設定ファイルが不要になるので便利。</p><div class="highlight highlight-source-js"><pre><span class="pl-en">fetch</span>(<span class="pl-s"><span class="pl-pds">'</span>/__/firebase/init.json<span class="pl-pds">'</span></span>)
.<span class="pl-c1">then</span>(<span class="pl-smi">response</span> <span class="pl-k">=></span> {
<span class="pl-k">return</span> <span class="pl-smi">response</span>.<span class="pl-en">json</span>();
})
.<span class="pl-c1">then</span>(<span class="pl-smi">config</span> <span class="pl-k">=></span> {
<span class="pl-smi">firebase</span>.<span class="pl-en">initializeApp</span>(config);
<span class="pl-smi">firebase</span>.<span class="pl-en">auth</span>().<span class="pl-en">onAuthStateChanged</span>(<span class="pl-k">function</span>(<span class="pl-smi">user</span>) {
<span class="pl-k">if</span> (user) {
<span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>./Main<span class="pl-pds">'</span></span>).<span class="pl-en">main</span>();
} <span class="pl-k">else</span> {
<span class="pl-k">const</span> <span class="pl-c1">provider</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-en">firebase.auth.GoogleAuthProvider</span>();
<span class="pl-smi">firebase</span>.<span class="pl-en">auth</span>().<span class="pl-en">signInWithRedirect</span>(provider);
}
});
});</pre></div><h2> <a id="user-content-ffi" class="anchor" href="#ffi" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>ffi</h2><p><a href="https://github.com/quek/cocsan-purescript/blob/master/src/Firebase/Firestore.purs">Firestore.purs</a> 必要最低限なものだけ。</p><p>js のクラス毎にモジュールを分けた方がいいだろうか? id, get など名前がかぶるから。</p><h1> <a id="user-content-ルーティング" class="anchor" href="#%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>ルーティング</h1><p>purescript-halogen-realworld は Hash ベースだったけど History API ベースで実装した。</p><p>purescript-halogen-realworld がやっているようにモナドを作る(?) <a href="https://github.com/quek/cocsan-purescript/blob/master/src/AppM.purs">AppM.purs</a></p><div class="highlight highlight-source-purescript"><pre><span class="pl-k">class</span> <span class="pl-en">Monad</span> <span class="pl-smi">m</span> <span class="pl-k"><=</span> <span class="pl-en">Navigate</span> <span class="pl-smi">m</span> <span class="pl-k">where</span>
<span class="pl-en">navigate</span> <span class="pl-k">::</span> <span class="pl-en">MyRoute</span> <span class="pl-k">-></span> <span class="pl-smi">m</span> <span class="pl-en">Unit</span>
<span class="pl-k">instance</span> <span class="pl-smi">navigateHalogenM</span> :: <span class="pl-en">Navigate</span> <span class="pl-smi">m</span> <span class="pl-k">=></span> <span class="pl-en">Navigate</span> (<span class="pl-en">H.HalogenM</span> <span class="pl-smi">st</span> <span class="pl-smi">act</span> <span class="pl-smi">slots</span> <span class="pl-smi">msg</span> <span class="pl-smi">m</span>) <span class="pl-k">where</span>
navigate = lift <<< navigate
<span class="pl-k">instance</span> <span class="pl-smi">navigateAppM</span> :: <span class="pl-en">Navigate</span> <span class="pl-en">AppM</span> <span class="pl-k">where</span>
navigate route = <span class="pl-k">do</span>
globalMessage <span class="pl-k"><-</span> asks _.globalMessage
liftAff $ put (<span class="pl-ent">NavigateG</span> route) globalMessage</pre></div><p><a href="https://dev.to/rinn7e/global-message-passing-inside-purescript-halogen-30ol" rel="nofollow">Global Message passing inside Purescript Halogen - DEV Community <g-emoji class="g-emoji" alias="woman_technologist" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f4bb.png">👩💻</g-emoji><g-emoji class="g-emoji" alias="man_technologist" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f4bb.png">👨💻</g-emoji></a> を参考にルーティングを担当するコンポーネントでグローバルメッセージ(AVar GlobalMessage)を監視して処理する。</p><div class="highlight highlight-source-purescript"><pre> <span class="pl-en">handleAction</span> <span class="pl-k">::</span> <span class="pl-en">Action</span> <span class="pl-k">-></span> <span class="pl-en">H.HalogenM</span> <span class="pl-en">State</span> <span class="pl-en">Action</span> <span class="pl-en">ChildSlots</span> <span class="pl-smi">o</span> <span class="pl-smi">m</span> <span class="pl-en">Unit</span>
handleAction = <span class="pl-k">case</span> _ <span class="pl-k">of</span>
<span class="pl-ent">Initialize</span> <span class="pl-k">-></span> <span class="pl-k">do</span>
logMessage <span class="pl-s"><span class="pl-pds">"</span>初期化 Routing.purs<span class="pl-pds">"</span></span>
path <span class="pl-k"><-</span> <span class="pl-ent">H</span>.liftEffect $ window >>= location >>= pathname
updateRoute path
void $ <span class="pl-ent">H</span>.fork globalMessageLoop
globalMessageLoop = <span class="pl-k">do</span>
globalMessage <span class="pl-k"><-</span> asks _.globalMessage
query <span class="pl-k"><-</span> <span class="pl-ent">H</span>.liftAff $ <span class="pl-ent">AVar</span>.take globalMessage
<span class="pl-k">case</span> query <span class="pl-k">of</span>
<span class="pl-ent">NavigateG</span> route <span class="pl-k">-></span> <span class="pl-k">do</span>
pushState route
<span class="pl-ent">H</span>.modify_ \st <span class="pl-k">-></span> st { route = route }
pure unit
globalMessageLoop
pushState route = <span class="pl-k">do</span>
pushStateInterface <span class="pl-k"><-</span> asks _.pushStateInterface
<span class="pl-ent">H</span>.liftEffect $ pushStateInterface.pushState (unsafeToForeign {}) $ routeToPath route
updateRoute path = <span class="pl-k">do</span>
<span class="pl-k">case</span> match myRoute path <span class="pl-k">of</span>
<span class="pl-ent">Right</span> newRoute <span class="pl-k">-></span> <span class="pl-k">do</span>
<span class="pl-ent">H</span>.modify_ \st <span class="pl-k">-></span> st { route = newRoute }
<span class="pl-ent">Left</span> e <span class="pl-k">-></span> <span class="pl-ent">H</span>.liftEffect $ log e</pre></div><p>あと Main で PopStateEvent を監視する。</p><div class="highlight highlight-source-purescript"><pre><span class="pl-c"><span class="pl-c">--</span> A producer coroutine that emits messages whenever the window emits a</span>
<span class="pl-c"><span class="pl-c">--</span> `hashchange` event.</span>
<span class="pl-en">popStateProducer</span> <span class="pl-k">::</span> <span class="pl-en">Coroutine.Producer</span> <span class="pl-en">HCE.PopStateEvent</span> <span class="pl-en">Aff</span> <span class="pl-en">Unit</span>
popStateProducer = <span class="pl-ent">CoroutineAff</span>.produce \emitter <span class="pl-k">-></span> <span class="pl-k">do</span>
listener <span class="pl-k"><-</span> eventListener (traverse_ (emit emitter) <<< <span class="pl-ent">HCE</span>.fromEvent)
liftEffect $
window
>>= <span class="pl-ent">Window</span>.toEventTarget
>>> addEventListener <span class="pl-ent">HCET</span>.popstate listener <span class="pl-c1">false</span>
<span class="pl-c"><span class="pl-c">--</span> A consumer coroutine that takes the `query` function from our component IO</span>
<span class="pl-c"><span class="pl-c">--</span> record and sends `ChangeRoute` queries in when it receives inputs from the</span>
<span class="pl-c"><span class="pl-c">--</span> producer.</span>
popStateConsumer
<span class="pl-k">::</span> (<span class="pl-k">forall</span> <span class="pl-smi">a</span>. <span class="pl-en">Routing.Query</span> <span class="pl-smi">a</span> <span class="pl-k">-></span> <span class="pl-en">Aff</span> (<span class="pl-en">Maybe</span> <span class="pl-smi">a</span>))
<span class="pl-k">-></span> <span class="pl-en">Coroutine.Consumer</span> <span class="pl-en">HCE.PopStateEvent</span> <span class="pl-en">Aff</span> <span class="pl-en">Unit</span>
popStateConsumer query = <span class="pl-ent">CR</span>.consumer \event <span class="pl-k">-></span> <span class="pl-k">do</span>
path <span class="pl-k"><-</span> liftEffect $ window >>= location >>= pathname
<span class="pl-ent">H</span>.liftEffect $ log path
void $ query $ <span class="pl-ent">H</span>.tell $ <span class="pl-ent">Routing.ChangeRoute</span> path
pure <span class="pl-ent">Nothing</span>
<span class="pl-en">main</span> <span class="pl-k">::</span> <span class="pl-en">Effect</span> <span class="pl-en">Unit</span>
main = <span class="pl-ent">HA</span>.runHalogenAff <span class="pl-k">do</span>
globalMessage <span class="pl-k"><-</span> <span class="pl-ent">AVar</span>.empty
pushStateInterface <span class="pl-k"><-</span> <span class="pl-ent">H</span>.liftEffect $ makeInterface
<span class="pl-k">let</span>
environment = { globalMessage, pushStateInterface }
component = <span class="pl-ent">H</span>.hoist (runAppM environment) <span class="pl-ent">Routing</span>.component
body <span class="pl-k"><-</span> <span class="pl-ent">HA</span>.awaitBody
io <span class="pl-k"><-</span> runUI component unit body
<span class="pl-ent">Coroutine</span>.runProcess (popStateProducer <span class="pl-ent">Coroutine</span>.$$ popStateConsumer io.query)</pre></div><h1> <a id="user-content-画像ファイル" class="anchor" href="#%E7%94%BB%E5%83%8F%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>画像ファイル</h1><p>file-loader が処理した画像ファイル名を使いたいのでこんなふうにした。ちょっとめんどい。もっといい方法ないかな。</p><p>Assets.js</p><div class="highlight highlight-source-js"><pre><span class="pl-k">const</span> <span class="pl-c1">ASSETS</span> <span class="pl-k">=</span> {
<span class="pl-s"><span class="pl-pds">'</span>1.png<span class="pl-pds">'</span></span><span class="pl-k">:</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>./assets/1.png<span class="pl-pds">'</span></span>)
};
<span class="pl-c1">exports</span>.<span class="pl-en">assets</span> <span class="pl-k">=</span> <span class="pl-k">function</span>(<span class="pl-smi">name</span>) {
<span class="pl-k">return</span> <span class="pl-c1">ASSETS</span>[name];
};</pre></div><p>Assets.purs</p><div class="highlight highlight-source-purescript"><pre><span class="pl-k">module</span> <span class="pl-c1">Assets</span> <span class="pl-k">where</span>
<span class="pl-k">foreign</span> <span class="pl-k">import</span> <span class="pl-en">assets</span> <span class="pl-k">::</span> <span class="pl-en">String</span> <span class="pl-k">-></span> <span class="pl-en">String</span></pre></div><div class="highlight highlight-source-purescript"><pre><span class="pl-k">import</span> <span class="pl-c1">Assets</span> (<span class="pl-en">assets</span>)
render _ = <span class="pl-ent">HH</span>.img [ <span class="pl-ent">HP</span>.src $ assets <span class="pl-s"><span class="pl-pds">"</span>1.png<span class="pl-pds">"</span></span> ]</pre></div> </article>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-33481969329864868942019-07-05T15:58:00.001+09:002019-07-05T15:58:48.352+09:00Markdown で書いて Common Lisp 経由で Blogger に投稿する<article class="markdown-body entry-content" itemprop="text" id="grip-content"> <h1> <a id="user-content-markdown-で書いて-common-lisp-経由で-blogger-に投稿する" class="anchor" href="#markdown-%E3%81%A7%E6%9B%B8%E3%81%84%E3%81%A6-common-lisp-%E7%B5%8C%E7%94%B1%E3%81%A7-blogger-%E3%81%AB%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Markdown で書いて Common Lisp 経由で Blogger に投稿する</h1><p><a href="https://read-eval-print.blogspot.com/2008/04/common-lisp-emacs-muse-common-lisp.html" rel="nofollow">Emacs Muse で書いて、Common Lisp 経由で Blogger に投稿する</a></p><p>↑ を書き直した。</p><ul> <li>Muse -> Markdown</li> <li>htmlize -> <a href="https://github.com/joeyespo/grip">Grip</a> </li> </ul><p>Markdown を HTML にするのに Grip を使う。そのインストールとセットアップ。</p><pre><code>pip3 install grip
~/.local/bin/grip --version
</code></pre><p>~/.emacs</p><div class="highlight highlight-source-emacs-lisp"><pre>(<span class="pl-k">setq</span> markdown-command <span class="pl-s"><span class="pl-pds">"</span>~/.local/bin/grip --export - -<span class="pl-pds">"</span></span>)</pre></div>
<p>Grip で出力される HTML の css を Blogger のテンプレに入れておく。</p>
<p>こんな感じ以前のように動くようになった。
ドキュメントは修正してない。</p>
<p><a href="https://github.com/quek/blogger">https://github.com/quek/blogger</a></p>
</article>
Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-84043548194773355572015-09-27T13:22:00.000+09:002015-09-27T13:25:00.462+09:00Common Lisp で css を書く時<p>Common Lisp で css を書く時に <code>#000</code> などどう書けばいいか悩んでいたけど、バックスラッシュでエスケープすればいい、という結論にたどりついた。</p><p>そんなわけでやっと書けた。 <a href="https://github.com/quek/info.read-eval-print.css">https://github.com/quek/info.read-eval-print.css</a></p> <pre class="src">(<span style="color: #00ffff;">in-package</span> <span style="color: #b0c4de;">:info.read-eval-print.css</span>)
(<span style="color: #00ffff;">with-output-to-string</span> (*css-output*)
(css
`((\#foo <span style="color: #b0c4de;">:color</span> \#ccc
(.bar <span style="color: #b0c4de;">:margin</span> 1px 2px 0 0 <span style="color: #b0c4de;">:font-size</span> 12px))
(a\<span style="color: #b0c4de;">:hover</span> <span style="color: #b0c4de;">:color</span> yellow))))
<span style="color: #ff7f24;">;;</span><span style="color: #ff7f24;">⇒ "#foo{color:#ccc;}
</span><span style="color: #ff7f24;">;; </span><span style="color: #ff7f24;">#foo .bar{margin:1px 2px 0 0;font-size:12px;}
</span><span style="color: #ff7f24;">;; </span><span style="color: #ff7f24;">a:hover{color:yellow;}"
</span></pre>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-33336756768977324042015-06-20T21:30:00.001+09:002018-10-23T07:34:44.421+09:00今日から二人暮らし<p>女房に逃げられた。</p><p>今日から娘と二人暮らし。ネコもいるけど。</p><p>料理の腕をみがきたい。</p>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-37874285148169251352015-04-19T12:04:00.001+09:002015-04-19T12:04:17.984+09:00デスクトップ PC 買った<p>先日、新しいおもちゃ買った。</p> <ul> <li>GALLERIA ZG Windows 8.1 モデル</li> <li>Windows 8.1 Update 64bit</li> <li>i7-4790K</li> <li>メモリ 32GB DDR3 SDRAM(PC3-12800/8GBx4/デュアルチャネル</li> <li>SSD Crucial 250GB(BX100シリーズ)</li> <li>SATA3 2TB HDD (SATA6Gb/s対応)</li> <li>マザーボード インテル Z97 チップセット ATXマザーボード</li> <li>NVIDIA GeForce GTX980 4GB JetStreamFAN</li> </ul>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-83074923313477541742015-04-04T23:29:00.001+09:002015-04-04T23:33:11.044+09:00icomplete-mode<p>Emacs に "Package iswitchb is obsolete!" と言われたので icomplete-mode にかえた。</p> <pre class="src"><span style="color: #ff7f24;">;; </span><span style="color: #ff7f24;">バッファの切り替え<br /></span><span style="color: #ff7f24;">;;</span><span style="color: #ff7f24;">(iswitchb-mode 1)<br /></span>(icomplete-mode 1)<br />(define-key icomplete-minibuffer-map [?\C-i] 'minibuffer-force-complete)<br /><span style="color: #ff7f24;">;</span><span style="color: #ff7f24;">(define-key icomplete-minibuffer-map [?\C-m] 'minibuffer-force-complete-and-exit)<br /></span>(define-key icomplete-minibuffer-map [?\C-s] 'icomplete-forward-completions)<br />(define-key icomplete-minibuffer-map [?\C-r] 'icomplete-backward-completions)<br /></pre><p>この設定であまり違和感なく使えるようになった。</p><p>Slime みたいにもって適当に入力しても補完してくれるといいんだけどね。</p>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-79626334429818922762014-09-28T03:02:00.001+09:002014-09-28T03:02:59.365+09:00Stumpwm の contrib がなくなっと思ったら<p>Stumpwm の contrib がなくなっと思ったら、<a href='https://github.com/stumpwm/stumpwm-contrib'>別リポジトリ</a>になってたのね。</p><p>quicklisp には入ってないようなので、自分で git clone する。</p> <pre class='src'>cd ~/quicklisp/local-projects<br />git clone https://github.com/stumpwm/stumpwm-contrib.git<br /></pre><p>~/.stumpwmrm に次を追加。</p> <pre class='src'>(setf stumpwm::*contrib-dir* (pathname <span style='color: #ffa07a;'>"~/quicklisp/local-projects/stumpwm-contrib/"</span>))<br />(init-load-path stumpwm::*contrib-dir*)<br /></pre>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-19660313060758828332014-09-23T15:12:00.001+09:002014-09-23T15:39:51.533+09:00AngularJS のコントラーロを CoffeeScript の class で書く<p><a href="http://www.devign.me/angular-dot-js-coffeescript-controller-base-class">Angular.js CoffeeScript Controller Base Class - Devign</a> に書いてあるとおり。</p><p>inject や initialize のとこをちょこっと変えて、こんな感じになった。</p><p>AuthedCtrl を継承していれば $scope にログインユーザが自動的にセットされる。本番は mixin 自にやりたいけどそれはまた今度で。</p> <pre class="src"><span style="color: #00ffff;">class</span> <span style="color: #eedd82;">@BaseCtrl</span><br /> <span style="color: #eedd82;">@register</span>: (name) -><br /> name ?= <span style="color: #eedd82;">@name</span> || <span style="color: #eedd82;">@toString</span>().match(<span style="color: #7fffd4;">/function\s*(.*?)\(/</span>)?[1]<br /> angular.module(<span style="color: #ffa07a;">'ngappApp'</span>).controller name, <span style="color: #eedd82;">@</span><br /><br /> <span style="color: #eedd82;">@inject</span>: (args...) -><br /> <span style="color: #eedd82;">@$inject</span> ?= [<span style="color: #ffa07a;">'$scope'</span>]<br /> <span style="color: #eedd82;">@$inject</span> = <span style="color: #eedd82;">@$inject</span>.concat args<br /><br /> <span style="color: #98fb98;">constructor:</span> (<span style="color: #eedd82;">@scope</span>, args...) -><br /> <span style="color: #00ffff;">for</span> key, index <span style="color: #00ffff;">in</span> <span style="color: #eedd82;">@constructor</span>.$inject[1..]<br /> <span style="color: #eedd82;">@</span>[key] = args[index]<br /><br /> <span style="color: #00ffff;">for</span> key, fn <span style="color: #00ffff;">of</span> <span style="color: #eedd82;">@constructor</span>.prototype<br /> <span style="color: #00ffff;">continue</span> <span style="color: #00ffff;">unless</span> <span style="color: #00ffff;">typeof</span> fn <span style="color: #00ffff;">is</span> <span style="color: #ffa07a;">'function'</span><br /> <span style="color: #00ffff;">continue</span> <span style="color: #00ffff;">if</span> key <span style="color: #00ffff;">in</span> [<span style="color: #ffa07a;">'constructor'</span>, <span style="color: #ffa07a;">'initialize'</span>] <span style="color: #00ffff;">or</span> key[0] <span style="color: #00ffff;">is</span> <span style="color: #ffa07a;">'_'</span><br /> <span style="color: #eedd82;">@scope</span>[key] = fn.bind?(<span style="color: #eedd82;">@</span>) || _.bind(fn, <span style="color: #eedd82;">@</span>)<br /><br /> <span style="color: #eedd82;">@initialize</span>()<br /><br /> <span style="color: #98fb98;">initialize:</span> -><br /><br /><span style="color: #00ffff;">class</span> <span style="color: #eedd82;">@AuthedCtrl</span> <span style="color: #00ffff;">extends</span> BaseCtrl<br /> <span style="color: #eedd82;">@inject</span> <span style="color: #ffa07a;">'AuthService'</span><br /><br /> <span style="color: #98fb98;">initialize:</span> =><br /> <span style="color: #00ffff;">super</span>()<br /> <span style="color: #eedd82;">@AuthService</span>.user (user) =><br /> <span style="color: #eedd82;">@currentUser</span> = user<br /> <span style="color: #eedd82;">@scope</span>.currentUser = user<br /><br /><span style="color: #00ffff;">class</span> VacationsCtrl <span style="color: #00ffff;">extends</span> AuthedCtrl<br /> <span style="color: #eedd82;">@register</span>()<br /> <span style="color: #eedd82;">@inject</span> <span style="color: #ffa07a;">'Vacation'</span><br /><br /> <span style="color: #98fb98;">initialize:</span> =><br /> <span style="color: #00ffff;">super</span>()<br /> <span style="color: #eedd82;">@scope</span>.vacations = <span style="color: #eedd82;">@Vacation</span>.query()<br /> <span style="color: #eedd82;">@scope</span>.vacation = <span style="color: #00ffff;">new</span> <span style="color: #eedd82;">@Vacation</span><br /><br /> <span style="color: #98fb98;">create:</span> =><br /> console.debug(<span style="color: #eedd82;">@scope</span>.vacation)<br /> <span style="color: #eedd82;">@scope</span>.vacation.$save (v) =><br /> console.debug(v)<br /> <span style="color: #eedd82;">@scope</span>.vacations.push(v)<br /> <span style="color: #eedd82;">@scope</span>.vacation = <span style="color: #00ffff;">new</span> <span style="color: #eedd82;">@Vacation</span><br /></pre><p>いまさらながら AngularJS をさわってみたけど、 C と VB で書いてたむかしながらサーバクライアントアプリみたいで、ちょっと楽しい。</p><p>あるいは継続を使った web フレームワークのサーバ処理がごっそりクライアントサイドに移った感じ。</p>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-33578217350119065742014-07-27T15:37:00.001+09:002014-07-27T15:37:34.719+09:00Using SSL for Erlang Distribution<p><a href='http://www.erlang.org/doc/apps/ssl/ssl_distribution.html'>http://www.erlang.org/doc/apps/ssl/ssl_distribution.html</a> に書かれているとおり。</p><p>/usr/lib/erlang/releases/17 にあるファイルをネタに次のファイルを作成。</p><p>start_ssl.rel</p> <pre class='src'>{release, {<span style='color: #ffa07a;'>"Erlang/OTP"</span>,<span style='color: #ffa07a;'>"17"</span>}, {erts, <span style='color: #ffa07a;'>"6.1"</span>},<br /> [{kernel,<span style='color: #ffa07a;'>"3.0.1"</span>},<br /> {stdlib,<span style='color: #ffa07a;'>"2.1"</span>},<br /> {sasl, <span style='color: #ffa07a;'>"2.4"</span>},<br /> {asn1, <span style='color: #ffa07a;'>"3.0.1"</span>},<br /> {crypto, <span style='color: #ffa07a;'>"3.4"</span>},<br /> {public_key, <span style='color: #ffa07a;'>"0.22"</span>},<br /> {ssl, <span style='color: #ffa07a;'>"5.3.5"</span>}<br /> ]}.<br /></pre><p>boot ファイルを作成</p> <pre class='src'>systools:make_script("start_ssl",[]).<br /></pre><p>/home/ancient/letter/erlang/ssl/erlserver.pem にはサーバ証明書と鍵を書いておく cat pem key > erlserver.pem なイメージ</p><p>起動</p> <pre class='src'>erl -boot /home/ancient/letter/erlang/ssl/start_ssl -proto_dist inet_tls -ssl_dist_opt server_certfile "/home/ancient/letter/erlang/ssl/erlserver.pem" -ssl_dist_opt server_secure_renegotiate true client_secure_renegotiate true -sname ssl_test<br /></pre> <pre class='src'>erl -boot /home/ancient/letter/erlang/ssl/start_ssl -proto_dist inet_tls -ssl_dist_opt server_certfile "/home/ancient/letter/erlang/ssl/erlserver.pem" -ssl_dist_opt server_secure_renegotiate true client_secure_renegotiate true -sname ssl_test2<br /><br />(ssl_test2@yarn)8> net_kernel:connect_node(ssl_test@yarn).<br />true<br />(ssl_test2@yarn)9> nodes().<br />[ssl_test@yarn]<br /></pre><p>ふと気付いた。ssl じゃなくて ssh でやりたかった。</p>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-3192003149932174572014-07-06T15:09:00.001+09:002014-07-06T15:09:20.181+09:00ren ジェネリックワード(ファンクション)<p>ren に Clojure のマルチメソッドみたなものを実装してみた。</p> <pre class='src'>:g length dup type-of ;<br />:m length (( list )) erlang:length/1 ;<br />:m length (( tuple )) erlang:size/1 ;<br />:m length (( binary )) erlang:size/1 ;<br />:m length (( map )) erlang:map_size/1 ;<br /></pre><p>:g でジェネリックファンクションを定義する。やってることはスタックトップのオブジェクトのタイプをスタックにつむだけ。 :m でメソッドを定義する。スタックトップにつまれたタイプでパターマッチングしている。</p><p>Erlang にもマップが導入された。それを使ってこんなふうに OO っぽいことをやってみた。継承をどうするかが悩ましい。</p> <pre class='src'>:g + over type-of over type-of ; # x y -- x y type-of-x type-of-y<br />:m + (( integer _ )) erlang:+/2 ;<br />:m + (( float _ )) erlang:+/2 ;<br />:m + (( list list )) erlang:++/2 ;<br />: point{ ( 'point >typed-map ) '{ ;<br />:m + (( #{ x X1 y Y1 } #{ x X2 y Y2 } point point ))<br /> point{ 'x X1 X2 + 'y Y1 Y2 + }<br /> ;<br /><br />point{ 'x 1 'y 2 } point{ 'x 3 'y 4 } +<br /># => #{'-type-' => point,x => 4,y => 6} Erlang の出力のまま<br /></pre>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-35335584230682613192014-06-22T13:29:00.001+09:002014-06-22T13:37:02.235+09:00データスタックに対するパターンマッチ<p>Erlang ではほとんど関数引数のパターマッチでプログラムが書ける。それを連鎖性言語でやろうとするとデータスタックに対するパターンマッチになる。</p><p>Factor だと <a href="http://docs.factorcode.org/content/article-locals-examples.html">http://docs.factorcode.org/content/article-locals-examples.html</a> な感じでいろいろできるようではあるが、とりあえず dup 等をそんな感じで実装してみた。</p> <pre class="src">: drop (( _ )) ;<br />: dup (( X )) X X ;<br />: swap (( X Y )) Y X ;<br />: over (( X Y )) X Y X ;<br />: rot (( X Y Z )) Y Z X ;<br />: -rot (( X Y Z )) Z X Y ;<br />: nip (( _ X )) X ;<br />: tuck (( X Y )) Y X Y ;<br /></pre><p>わかりやすい。</p><p>reverse と map はこんな感じ</p> <pre class="src">: reverse [] swap reverse' ;<br />: reverse'<br /> (( [] ))<br /> (( Acc [ H T .] )) [ H Acc .] T reverse'<br /><br /><br />: map [ -rot map' ; # list function -- [ list function<br />: map'<br /> (( [] _ )) ]<br /> (( [ H T .] F ))<br /> H F call T F map'<br /><br /></pre><p>そういえば case の書き方をかえたので、いま fib を書くとこうなる。</p> <pre class="src">: fib<br /> = N<br /> N 2 =<<br /> case<br /> true<br /> ( 1 )<br /> _<br /> ( N 1- fib N 2 - fib + )<br /> ;case<br /> ;<br /></pre><p>( ) でブロックというかクオートというかそんなものができる。 Factor の [ ] と同じようなもの。</p> <pre class="src">( 1+ ) 100 swap call .<br /># => 101<br />1 10 ( + ) cons call .<br /># => 11<br /></pre>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-77960917511059055702014-06-15T22:18:00.001+09:002014-06-15T22:19:15.997+09:00また Forth ライクな言語を作っている<p>最近まったくブログ書いてなかった。できればまた書くようにしたい。</p><p>ちかごろまた Forth ライクな言語を作っている。名前は ren(仮)。chon を付けてもいいかもしれない。 Forth ライクな言語を作るのはこれで4つか5つめ。なんか Forth には思い入れがあるみたい。とても簡単に作れる、というのもある。</p><p>今回のは Erlang で書いている。ワードを Erlang の関数にコンパイルする。思えば Erlang もコンパイル関数があるいい言語だ。ワードを Erlang の関数にコンパイルし、呼び出しは普通の Erlang 関数と同じなのでリターンスタックがない。そこは残念なところ。パターンマッチングをきれいに取り込みたいけど、なかなかいい書き方を思い付かない。</p><p>いまの fib はこんな感じ。</p> <pre class="src">: fib<br /> = N<br /> N 2 =<<br /> case<br /> true<br /> 1<br /> ;;<br /> _<br /> N 1- fib N 2 - fib +<br /> ;case<br /> ;<br /></pre><p>言語を実装するのは不毛な感じがするものの楽しいね。</p>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-25052256868685715732014-03-18T22:33:00.001+09:002014-03-18T22:35:03.158+09:00SSD<p>SSD 買った。</p><p>Crucial M500 2.5インチ 内蔵型 SATA6Gbps 960GB CT960M500SSD1</p><p>起動が速っ! SBCL も速っ!</p><p><a href="https://wiki.debian.org/SSDOptimization">SSDOptimization - Debian Wiki</a> を参別に設定。</p><p>マウントオプションに discard,noatime,commit=600 を付ける。/tmp を tmpfs にする。</p><p>sudo vi /etc/fstab</p> <pre class="src">UUID=6a2b89d0-830d-4e8a-9e57-4d7de0426876 / ext4 discard,noatime,commit=600,errors=remount-ro 0 1<br />tmpfs /tmp tmpfs nodev,nosuid,size=40%,mode=1777 0 0<br /></pre><p>I/Oスケジューラ を変える。 deadline にするのがいいらしい。</p><p>sudo apt-get install sysfsutils sudo vi /etc/sysfs.conf</p> <pre class="src">block/sda/queue/scheduler = deadline<br /></pre> <pre class='src'>echo deadline | sudo tee /sys/block/sda/queue/scheduler<br />cat /sys/block/sda/queue/scheduler<br />noop [deadline] cfq<br /></pre><p>あとなるべくスワップしないようにする。</p><p>sudo vi /etc/sysctl.d/local.conf</p> <pre class="src">vm.swappiness=0<br /></pre>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-56756279123106932472014-02-22T18:13:00.001+09:002014-02-22T18:13:04.225+09:00シェルでランダムな文字列を各行に付ける<pre class='src'>yarn:~% cat /tmp/a<br />1<br />2<br />3<br />yarn:~% strings /dev/urandom | grep -oE '\w{3}' | head -n `grep -c '' /tmp/a` |paste - /tmp/a<br />G0n 1<br />eIZ 2<br />vI5 3<br /></pre>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-83854528103064303222014-02-16T00:40:00.001+09:002014-02-16T00:41:03.119+09:00C-c C-f でカーソル位置の FiveAM テストを実行する<p>Slime では C-c C-c でカーソル位置の defun などをコンパイルする。それと同じように C-c C-f でカーソル位置の FiveAM テストを実行したかったので書いてみた。</p> <pre class="src">(<span style="color: #00ffff;">defun</span> <span style="color: #87cefa;">slime-fiveam-debug-test</span> ()<br /> <span style="color: #ffa07a;">"fiveam:debug!"</span><br /> (interactive)<br /> (slime-interactive-eval<br /> (format <span style="color: #ffa07a;">"(fiveam:debug! %s)"</span> (slime-defun-at-point))))<br /><br />(define-key slime-mode-map<br /> [(control ?c) (control ?f)] 'slime-fiveam-debug-test)<br /></pre><p>ちゃんと動く?</p>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-83692459752282197252014-01-25T20:39:00.001+09:002014-01-25T20:39:56.741+09:00package ごとに readtable が指定できたらいいな<p>cl:read と cl:read-preserving-whitespace を上書いちゃいえばできるはずなのでやってみた。</p> <pre class='src'>(<span style='color: #00ffff;'>defvar</span> <span style='color: #eedd82;'>*cl-read*</span> #'cl:read)<br />(<span style='color: #00ffff;'>defvar</span> <span style='color: #eedd82;'>*cl-read-preserving-whitespace*</span> #'cl:read-preserving-whitespace)<br /><br />(<span style='color: #00ffff;'>defvar</span> <span style='color: #eedd82;'>*readtable-hash*</span> (make-hash-table))<br /><br />(<span style='color: #00ffff;'>defmacro</span> <span style='color: #87cefa;'>with-package-readtable</span> (<span style='color: #98fb98;'>&body</span> body)<br /> `(<span style='color: #00ffff;'>let</span> ((*readtable* (gethash *package* *readtable-hash* *readtable*)))<br /> ,@body))<br /><br />(<span style='color: #00ffff;'>sb-ext:without-package-locks</span><br /> (<span style='color: #00ffff;'>defun</span> <span style='color: #87cefa;'>read</span> (<span style='color: #98fb98;'>&optional</span> (stream *standard-input*)<br /> (eof-error-p t)<br /> (eof-value nil)<br /> (recursive-p nil))<br /> <span style='color: #ffa07a;'>"Read the next Lisp value from STREAM, and return it."</span><br /> (<span style='color: #00ffff;'>with-package-readtable</span><br /> (funcall *cl-read* stream eof-error-p eof-value recursive-p)))<br /><br /> (<span style='color: #00ffff;'>defun</span> <span style='color: #87cefa;'>read-preserving-whitespace</span> (<span style='color: #98fb98;'>&optional</span> (stream *standard-input*)<br /> (eof-error-p t)<br /> (eof-value nil)<br /> (recursive-p nil))<br /> <span style='color: #ffa07a;'>"Read from STREAM and return the value read, preserving any whitespace<br /> that followed the object."</span><br /> (<span style='color: #00ffff;'>with-package-readtable</span><br /> (funcall *cl-read-preserving-whitespace*<br /> stream<br /> eof-error-p<br /> eof-value<br /> recursive-p))))<br /><br />(<span style='color: #00ffff;'>defmacro</span> <span style='color: #87cefa;'>set-package-readtable</span> (package readtable)<br /> <span style='color: #ffa07a;'>"package の readtable を指定する。"</span><br /> `(<span style='color: #00ffff;'>eval-when</span> (<span style='color: #b0c4de;'>:compile-toplevel</span> <span style='color: #b0c4de;'>:load-toplevel</span> <span style='color: #b0c4de;'>:execute</span>)<br /> (setf (gethash (find-package ,package) *readtable-hash*)<br /> ,readtable)))<br /><br />(<span style='color: #00ffff;'>defmacro</span> <span style='color: #87cefa;'>clear-package-readtable</span> (package)<br /> <span style='color: #ffa07a;'>"package の readtable を指定を解除する。"</span><br /> `(<span style='color: #00ffff;'>eval-when</span> (<span style='color: #b0c4de;'>:compile-toplevel</span> <span style='color: #b0c4de;'>:load-toplevel</span> <span style='color: #b0c4de;'>:execute</span>)<br /> (remhash (find-package ,package) *readtable-hash*)))<br /></pre><p>package をキーに <code>*readtable*</code> を束縛して元の read, read-preserving-whitespace を呼ぶ。</p> <pre class='src'>(<span style='color: #00ffff;'>defpackage</span> <span style='color: #98fb98;'>:foo</span><br /> (<span style='color: #b0c4de;'>:use</span> <span style='color: #b0c4de;'>:cl</span>))<br /><br />(<span style='color: #00ffff;'>defpackage</span> <span style='color: #98fb98;'>:bar</span><br /> (<span style='color: #b0c4de;'>:use</span> <span style='color: #b0c4de;'>:cl</span>))<br /><br />(info.read-eval-print.read:set-package-readtable<br /> <span style='color: #b0c4de;'>:bar</span><br /> <span style='color: #ff7f24;'>;; </span><span style='color: #ff7f24;'>お好みの readtable をご用意ください<br /></span> (info.read-eval-print.read.triple-quote:make-readtable))<br /><br />(<span style='color: #00ffff;'>in-package</span> <span style='color: #b0c4de;'>:foo</span>)<br />(list <span style='color: #ffa07a;'>"""#,(+ 1 2)"""</span>)<br /><span style='color: #ff7f24;'>;;</span><span style='color: #ff7f24;'>⇒ ("" "#,(+ 1 2)" "")<br /></span><br />(<span style='color: #00ffff;'>in-package</span> <span style='color: #b0c4de;'>:bar</span>)<br />(list <span style='color: #ffa07a;'>"""#,(+ 1 2)"""</span>)<br /><span style='color: #ff7f24;'>;;</span><span style='color: #ff7f24;'>⇒ ("3")<br /></span><br />(info.read-eval-print.read:clear-package-readtable <span style='color: #b0c4de;'>:bar</span>)<br />(list <span style='color: #ffa07a;'>"""#,(+ 1 2)"""</span>)<br /><span style='color: #ff7f24;'>;;</span><span style='color: #ff7f24;'>⇒ ("" "#,(+ 1 2)" "")<br /></span></pre><p>cl:read と cl:read-preserving-whitespace を上書くという邪道なことをやっているので Slime でも思ったとおり動いてくれる。</p><p><a href='https://github.com/quek/info.read-eval-print.read'>https://github.com/quek/info.read-eval-print.read</a></p>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-45098706346105169802014-01-11T18:51:00.001+09:002014-01-11T18:52:31.983+09:00MySQL 5.6 コンパイルとセットアップ<p>Debian の sid まだ MySQL 5.5 なので 5.6 のコンパイルしてセットアップした。 5.5 の方はそのままで追加で 5.6 も動かす。</p> <pre class="src">cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql5.6<br />make<br />make -n install<br />sudo make install<br />cd /opt/mysql5.6<br />sudo chown -R mysql:mysql .<br />sudo vi /opt/mysql5.6/my.cnf<br /></pre><p>/opt/mysql5.6/my.cnf で port, socket, pid-file を 5.5 と違うものにしておく。</p> <pre class="src"># For advice on how to change settings please see<br /># http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html<br /><br />[mysqld]<br /><br /># Remove leading # and set to the amount of RAM for the most important data<br /># cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.<br /># innodb_buffer_pool_size = 128M<br /><br /># Remove leading # to turn on a very important data integrity option: logging<br /># changes to the binary log between backups.<br /># log_bin<br /><br /># These are commonly set, remove the # and set as required.<br />basedir = /opt/mysql5.6<br />datadir = /opt/mysql5.6/data<br />server_id = 2<br />port = 3307<br />socket = /run/mysqld/mysqld5.6.sock<br />pid-file = /run/mysqld/mysqld5.6.pid<br /><br /># Remove leading # to set options mainly useful for reporting servers.<br /># The server defaults are faster for transactions and fast SELECTs.<br /># Adjust sizes as needed, experiment to find the optimal values.<br /># join_buffer_size = 128M<br /># sort_buffer_size = 2M<br /># read_rnd_buffer_size = 2M<br /><br />sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES<br /></pre> <pre class="src">sudo scripts/mysql_install_db --defaults-file=/opt/mysql5.6/my.cnf --user=mysql<br />sudo chown -R root .<br />sudo chown -R mysql data<br />sudo vi /etc/init.d/mysql5.6<br /></pre> <pre class="src"><span style="color: #ff7f24;">#</span><span style="color: #ff7f24;">!/bin/sh<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">This file is public domain and comes with NO WARRANTY of any kind<br /></span><br /><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">MySQL daemon start/stop script.<br /></span><br /><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Usually this is put in /etc/init.d (at least on machines SYSV R4 based<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">systems) and linked to /etc/rc3.d/S99mysql and /etc/rc0.d/K01mysql.<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">When this is done the mysql server will be started when the machine is<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">started and shut down when the systems goes down.<br /></span><br /><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Comments to support chkconfig on RedHat Linux<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">chkconfig: 2345 64 36<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">description: A very fast and reliable SQL database engine.<br /></span><br /><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Comments to support LSB init script conventions<br /></span><span style="color: #ff7f24;">### </span><span style="color: #ff7f24;">BEGIN INIT INFO<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Provides: mysql5.6<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Required-Start: $local_fs $network $remote_fs<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Should-Start: ypbind nscd ldap ntpd xntpd<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Required-Stop: $local_fs $network $remote_fs<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Default-Start: 2 3 4 5<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Default-Stop: 0 1 6<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Short-Description: start and stop MySQL<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Description: MySQL is a very fast and reliable SQL database engine.<br /></span><span style="color: #ff7f24;">### </span><span style="color: #ff7f24;">END INIT INFO<br /></span><br /><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">If you install MySQL on some other places than /opt/mysql5.6, then you<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">have to do one of the following things for this script to work:<br /></span><span style="color: #ff7f24;">#</span><span style="color: #ff7f24;"><br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">- Run this script from within the MySQL installation directory<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">- Create a /etc/my.cnf file with the following information:<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">[mysqld]<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">basedir=<path-to-mysql-installation-directory><br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">- Add the above to any other configuration file (for example ~/.my.ini)<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">and copy my_print_defaults to /usr/bin<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">- Add the path to the mysql-installation-directory to the basedir variable<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">below.<br /></span><span style="color: #ff7f24;">#</span><span style="color: #ff7f24;"><br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">If you want to affect other MySQL variables, you should make your changes<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">in the /etc/my.cnf, ~/.my.cnf or other MySQL configuration files.<br /></span><br /><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">If you change base dir, you must also change datadir. These may get<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">overwritten by settings in the MySQL configuration files.<br /></span><br /><span style="color: #eedd82;">basedir</span>=<br /><span style="color: #eedd82;">datadir</span>=<br /><br /><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Default value, in seconds, afterwhich the script should timeout waiting<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">for server start.<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Value here is overriden by value in my.cnf.<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">0 means don't wait at all<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Negative numbers mean to wait indefinitely<br /></span><span style="color: #eedd82;">service_startup_timeout</span>=900<br /><br /><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Lock directory for RedHat / SuSE.<br /></span><span style="color: #eedd82;">lockdir</span>=<span style="color: #ffa07a;">'/var/lock/subsys'</span><br /><span style="color: #eedd82;">lock_file_path</span>=<span style="color: #ffa07a;">"$lockdir/mysql"</span><br /><br /><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">The following variables are only set for letting mysql.server find things.<br /></span><br /><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Set some defaults<br /></span><span style="color: #eedd82;">mysqld_pid_file_path</span>=<br /><span style="color: #00ffff;">if</span> test -z <span style="color: #ffa07a;">"$basedir"</span><br /><span style="color: #00ffff;">then</span><br /> <span style="color: #eedd82;">basedir</span>=/opt/mysql5.6<br /> <span style="color: #eedd82;">bindir</span>=/opt/mysql5.6/bin<br /> <span style="color: #00ffff;">if</span> test -z <span style="color: #ffa07a;">"$datadir"</span><br /> <span style="color: #00ffff;">then</span><br /> <span style="color: #eedd82;">datadir</span>=/opt/mysql5.6/data<br /> <span style="color: #00ffff;">fi</span><br /> <span style="color: #eedd82;">sbindir</span>=/opt/mysql5.6/bin<br /> <span style="color: #eedd82;">libexecdir</span>=/opt/mysql5.6/bin<br /><span style="color: #00ffff;">else</span><br /> <span style="color: #eedd82;">bindir</span>=<span style="color: #ffa07a;">"$basedir/bin"</span><br /> <span style="color: #00ffff;">if</span> test -z <span style="color: #ffa07a;">"$datadir"</span><br /> <span style="color: #00ffff;">then</span><br /> <span style="color: #eedd82;">datadir</span>=<span style="color: #ffa07a;">"$basedir/data"</span><br /> <span style="color: #00ffff;">fi</span><br /> <span style="color: #eedd82;">sbindir</span>=<span style="color: #ffa07a;">"$basedir/sbin"</span><br /> <span style="color: #eedd82;">libexecdir</span>=<span style="color: #ffa07a;">"$basedir/libexec"</span><br /><span style="color: #00ffff;">fi</span><br /><br /><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">datadir_set is used to determine if datadir was set (and so should be<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">*not* set inside of the --basedir= handler.)<br /></span><span style="color: #eedd82;">datadir_set</span>=<br /><br /><span style="color: #ff7f24;">#</span><span style="color: #ff7f24;"><br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Use LSB init script functions for printing messages, if possible<br /></span><span style="color: #ff7f24;">#</span><span style="color: #ff7f24;"><br /></span><span style="color: #eedd82;">lsb_functions</span>=<span style="color: #ffa07a;">"/lib/lsb/init-functions"</span><br /><span style="color: #00ffff;">if</span> test -f $<span style="color: #eedd82;">lsb_functions</span> ; <span style="color: #00ffff;">then</span><br /> . $<span style="color: #eedd82;">lsb_functions</span><br /><span style="color: #00ffff;">else</span><br /> log_success_msg()<br /> {<br /> <span style="color: #b0c4de;">echo</span> <span style="color: #ffa07a;">" SUCCESS! $@"</span><br /> }<br /> log_failure_msg()<br /> {<br /> <span style="color: #b0c4de;">echo</span> <span style="color: #ffa07a;">" ERROR! $@"</span><br /> }<br /><span style="color: #00ffff;">fi</span><br /><br /><span style="color: #eedd82;">PATH</span>=<span style="color: #ffa07a;">"/sbin:/usr/sbin:/bin:/usr/bin:$basedir/bin"</span><br /><span style="color: #b0c4de;">export</span> PATH<br /><br /><span style="color: #eedd82;">mode</span>=$<span style="color: #eedd82;">1</span> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">start or stop<br /></span><br />[ $<span style="color: #eedd82;">#</span> -ge 1 ] && <span style="color: #b0c4de;">shift</span><br /><br /><br /><span style="color: #eedd82;">other_args</span>=<span style="color: #ffa07a;">"$*"</span> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">uncommon, but needed when called from an RPM upgrade action<br /></span> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Expected: "--skip-networking --skip-grant-tables"<br /></span> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">They are not checked here, intentionally, as it is the resposibility<br /></span> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">of the "spec" file author to give correct arguments only.<br /></span><br /><span style="color: #00ffff;">case</span> <span style="color: #fa8072;">`echo "testing\c"`</span>,<span style="color: #fa8072;">`echo -n testing`</span> <span style="color: #00ffff;">in</span><br /> *c*,-n*) <span style="color: #eedd82;">echo_n</span>= <span style="color: #eedd82;">echo_c</span>= ;;<br /> *c*,*) <span style="color: #eedd82;">echo_n</span>=-n <span style="color: #eedd82;">echo_c</span>= ;;<br /> *) <span style="color: #eedd82;">echo_n</span>= <span style="color: #eedd82;">echo_c</span>=<span style="color: #ffa07a;">'\c'</span> ;;<br /><span style="color: #00ffff;">esac</span><br /><br /><span style="color: #87cefa;">parse_server_arguments</span>() {<br /> <span style="color: #00ffff;">for</span> arg do<br /> <span style="color: #00ffff;">case</span> <span style="color: #ffa07a;">"$arg"</span><span style="color: #00ffff;"> in</span><br /> --basedir=*) <span style="color: #eedd82;">basedir</span>=<span style="color: #fa8072;">`echo "$arg" | sed -e 's/^[^=]*=//'`</span><br /> <span style="color: #eedd82;">bindir</span>=<span style="color: #ffa07a;">"$basedir/bin"</span><br /> <span style="color: #00ffff;">if</span> test -z <span style="color: #ffa07a;">"$datadir_set"</span>; <span style="color: #00ffff;">then</span><br /> <span style="color: #eedd82;">datadir</span>=<span style="color: #ffa07a;">"$basedir/data"</span><br /> <span style="color: #00ffff;">fi</span><br /> <span style="color: #eedd82;">sbindir</span>=<span style="color: #ffa07a;">"$basedir/sbin"</span><br /> <span style="color: #eedd82;">libexecdir</span>=<span style="color: #ffa07a;">"$basedir/libexec"</span><br /> ;;<br /> --datadir=*) <span style="color: #eedd82;">datadir</span>=<span style="color: #fa8072;">`echo "$arg" | sed -e 's/^[^=]*=//'`</span><br /> <span style="color: #eedd82;">datadir_set</span>=1<br /> ;;<br /> --pid-file=*) <span style="color: #eedd82;">mysqld_pid_file_path</span>=<span style="color: #fa8072;">`echo "$arg" | sed -e 's/^[^=]*=//'`</span> ;;<br /> --service-startup-timeout=*) <span style="color: #eedd82;">service_startup_timeout</span>=<span style="color: #fa8072;">`echo "$arg" | sed -e 's/^[^=]*=//'`</span> ;;<br /> <span style="color: #00ffff;">esac</span><br /> <span style="color: #00ffff;">done</span><br />}<br /><br /><span style="color: #87cefa;">wait_for_pid</span> () {<br /> <span style="color: #eedd82;">verb</span>=<span style="color: #ffa07a;">"$1"</span> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">created | removed<br /></span> <span style="color: #eedd82;">pid</span>=<span style="color: #ffa07a;">"$2"</span> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">process ID of the program operating on the pid-file<br /></span> <span style="color: #eedd82;">pid_file_path</span>=<span style="color: #ffa07a;">"$3"</span> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">path to the PID file.<br /></span><br /> <span style="color: #eedd82;">i</span>=0<br /> <span style="color: #eedd82;">avoid_race_condition</span>=<span style="color: #ffa07a;">"by checking again"</span><br /><br /> <span style="color: #00ffff;">while</span> test $<span style="color: #eedd82;">i</span> -ne $<span style="color: #eedd82;">service_startup_timeout</span> ; <span style="color: #00ffff;">do</span><br /><br /> <span style="color: #00ffff;">case</span> <span style="color: #ffa07a;">"$verb"</span><span style="color: #00ffff;"> in</span><br /> <span style="color: #ffa07a;">'created'</span>)<br /> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">wait for a PID-file to pop into existence.<br /></span> test -s <span style="color: #ffa07a;">"$pid_file_path"</span> && <span style="color: #eedd82;">i</span>=<span style="color: #ffa07a;">''</span> && <span style="color: #00ffff;">break</span><br /> ;;<br /> <span style="color: #ffa07a;">'removed'</span>)<br /> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">wait for this PID-file to disappear<br /></span> test ! -s <span style="color: #ffa07a;">"$pid_file_path"</span> && <span style="color: #eedd82;">i</span>=<span style="color: #ffa07a;">''</span> && <span style="color: #00ffff;">break</span><br /> ;;<br /> *)<br /> <span style="color: #b0c4de;">echo</span> <span style="color: #ffa07a;">"wait_for_pid () usage: wait_for_pid created|removed pid pid_file_path"</span><br /> <span style="color: #00ffff;">exit</span> 1<br /> ;;<br /> <span style="color: #00ffff;">esac</span><br /><br /> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">if server isn't running, then pid-file will never be updated<br /></span> <span style="color: #00ffff;">if</span> test -n <span style="color: #ffa07a;">"$pid"</span>; <span style="color: #00ffff;">then</span><br /> <span style="color: #00ffff;">if </span><span style="color: #b0c4de;">kill</span> -0 <span style="color: #ffa07a;">"$pid"</span> 2>/dev/null; <span style="color: #00ffff;">then</span><br /> : <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">the server still runs<br /></span> <span style="color: #00ffff;">else</span><br /> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">The server may have exited between the last pid-file check and now.<br /></span> <span style="color: #00ffff;">if</span> test -n <span style="color: #ffa07a;">"$avoid_race_condition"</span>; <span style="color: #00ffff;">then</span><br /> <span style="color: #eedd82;">avoid_race_condition</span>=<span style="color: #ffa07a;">""</span><br /> <span style="color: #00ffff;">continue</span> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Check again.<br /></span> <span style="color: #00ffff;">fi</span><br /><br /> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">there's nothing that will affect the file.<br /></span> log_failure_msg <span style="color: #ffa07a;">"The server quit without updating PID file ($pid_file_path)."</span><br /> <span style="color: #00ffff;">return</span> 1 <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">not waiting any more.<br /></span> <span style="color: #00ffff;">fi</span><br /> <span style="color: #00ffff;">fi</span><br /><br /> <span style="color: #b0c4de;">echo</span> $<span style="color: #eedd82;">echo_n</span> <span style="color: #ffa07a;">".$echo_c"</span><br /> <span style="color: #eedd82;">i</span>=<span style="color: #fa8072;">`expr $i + 1`</span><br /> sleep 1<br /><br /> <span style="color: #00ffff;">done</span><br /><br /> <span style="color: #00ffff;">if</span> test -z <span style="color: #ffa07a;">"$i"</span> ; <span style="color: #00ffff;">then</span><br /> log_success_msg<br /> <span style="color: #00ffff;">return</span> 0<br /> <span style="color: #00ffff;">else</span><br /> log_failure_msg<br /> <span style="color: #00ffff;">return</span> 1<br /> <span style="color: #00ffff;">fi</span><br />}<br /><br /><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Get arguments from the my.cnf file,<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">the only group, which is read from now on is [mysqld]<br /></span><span style="color: #00ffff;">if</span> test -x ./bin/my_print_defaults<br /><span style="color: #00ffff;">then</span><br /> <span style="color: #eedd82;">print_defaults</span>=<span style="color: #ffa07a;">"./bin/my_print_defaults"</span><br /><span style="color: #00ffff;">elif</span> test -x $<span style="color: #eedd82;">bindir</span>/my_print_defaults<br /><span style="color: #00ffff;">then</span><br /> <span style="color: #eedd82;">print_defaults</span>=<span style="color: #ffa07a;">"$bindir/my_print_defaults"</span><br /><span style="color: #00ffff;">elif</span> test -x $<span style="color: #eedd82;">bindir</span>/mysql_print_defaults<br /><span style="color: #00ffff;">then</span><br /> <span style="color: #eedd82;">print_defaults</span>=<span style="color: #ffa07a;">"$bindir/mysql_print_defaults"</span><br /><span style="color: #00ffff;">else</span><br /> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Try to find basedir in /etc/my.cnf<br /></span> <span style="color: #eedd82;">conf</span>=/etc/my.cnf<br /> <span style="color: #eedd82;">print_defaults</span>=<br /> <span style="color: #00ffff;">if</span> test -r $<span style="color: #eedd82;">conf</span><br /> <span style="color: #00ffff;">then</span><br /> <span style="color: #eedd82;">subpat</span>=<span style="color: #ffa07a;">'^[^=]*basedir[^=]*=\(.*\)$'</span><br /> <span style="color: #eedd82;">dirs</span>=<span style="color: #fa8072;">`sed -e "/$subpat/!d" -e 's//\1/' $conf`</span><br /> <span style="color: #00ffff;">for</span> d<span style="color: #00ffff;"> in</span> $<span style="color: #eedd82;">dirs</span><br /> <span style="color: #00ffff;">do</span><br /> <span style="color: #eedd82;">d</span>=<span style="color: #fa8072;">`echo $d | sed -e 's/[ ]//g'`</span><br /> <span style="color: #00ffff;">if</span> test -x <span style="color: #ffa07a;">"$d/bin/my_print_defaults"</span><br /> <span style="color: #00ffff;">then</span><br /> <span style="color: #eedd82;">print_defaults</span>=<span style="color: #ffa07a;">"$d/bin/my_print_defaults"</span><br /> <span style="color: #00ffff;">break</span><br /> <span style="color: #00ffff;">fi</span><br /> <span style="color: #00ffff;">if</span> test -x <span style="color: #ffa07a;">"$d/bin/mysql_print_defaults"</span><br /> <span style="color: #00ffff;">then</span><br /> <span style="color: #eedd82;">print_defaults</span>=<span style="color: #ffa07a;">"$d/bin/mysql_print_defaults"</span><br /> <span style="color: #00ffff;">break</span><br /> <span style="color: #00ffff;">fi</span><br /> <span style="color: #00ffff;">done</span><br /> <span style="color: #00ffff;">fi</span><br /><br /> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Hope it's in the PATH ... but I doubt it<br /></span> test -z <span style="color: #ffa07a;">"$print_defaults"</span> && <span style="color: #eedd82;">print_defaults</span>=<span style="color: #ffa07a;">"my_print_defaults"</span><br /><span style="color: #00ffff;">fi</span><br /><br /><span style="color: #ff7f24;">#</span><span style="color: #ff7f24;"><br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Read defaults file from 'basedir'. If there is no defaults file there<br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">check if it's in the old (depricated) place (datadir) and read it from there<br /></span><span style="color: #ff7f24;">#</span><span style="color: #ff7f24;"><br /></span><br /><span style="color: #eedd82;">extra_args</span>=<span style="color: #ffa07a;">""</span><br /><span style="color: #00ffff;">if</span> test -r <span style="color: #ffa07a;">"$basedir/my.cnf"</span><br /><span style="color: #00ffff;">then</span><br /> <span style="color: #eedd82;">extra_args</span>=<span style="color: #ffa07a;">"-e $basedir/my.cnf"</span><br /><span style="color: #00ffff;">else</span><br /> <span style="color: #00ffff;">if</span> test -r <span style="color: #ffa07a;">"$datadir/my.cnf"</span><br /> <span style="color: #00ffff;">then</span><br /> <span style="color: #eedd82;">extra_args</span>=<span style="color: #ffa07a;">"-e $datadir/my.cnf"</span><br /> <span style="color: #00ffff;">fi</span><br /><span style="color: #00ffff;">fi</span><br /><br />parse_server_arguments <span style="color: #fa8072;">`$print_defaults $extra_args mysqld server mysql_server mysql.server`</span><br /><br /><span style="color: #ff7f24;">#</span><span style="color: #ff7f24;"><br /></span><span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Set pid file if not given<br /></span><span style="color: #ff7f24;">#</span><span style="color: #ff7f24;"><br /></span><span style="color: #00ffff;">if</span> test -z <span style="color: #ffa07a;">"$mysqld_pid_file_path"</span><br /><span style="color: #00ffff;">then</span><br /> <span style="color: #eedd82;">mysqld_pid_file_path</span>=$<span style="color: #eedd82;">datadir</span>/<span style="color: #fa8072;">`hostname`</span>.pid<br /><span style="color: #00ffff;">else</span><br /> <span style="color: #00ffff;">case</span> <span style="color: #ffa07a;">"$mysqld_pid_file_path"</span><span style="color: #00ffff;"> in</span><br /> /* ) ;;<br /> * ) <span style="color: #eedd82;">mysqld_pid_file_path</span>=<span style="color: #ffa07a;">"$datadir/$mysqld_pid_file_path"</span> ;;<br /> <span style="color: #00ffff;">esac</span><br /><span style="color: #00ffff;">fi</span><br /><br /><span style="color: #00ffff;">case</span> <span style="color: #ffa07a;">"$mode"</span><span style="color: #00ffff;"> in</span><br /> <span style="color: #ffa07a;">'start'</span>)<br /> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Start daemon<br /></span><br /> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Safeguard (relative paths, core dumps..)<br /></span> <span style="color: #b0c4de;">cd</span> $<span style="color: #eedd82;">basedir</span><br /><br /> <span style="color: #b0c4de;">echo</span> $<span style="color: #eedd82;">echo_n</span> <span style="color: #ffa07a;">"Starting MySQL"</span><br /> <span style="color: #00ffff;">if</span> test -x $<span style="color: #eedd82;">bindir</span>/mysqld_safe<br /> <span style="color: #00ffff;">then</span><br /> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Give extra arguments to mysqld with the my.cnf file. This script<br /></span> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">may be overwritten at next upgrade.<br /></span> $<span style="color: #eedd82;">bindir</span>/mysqld_safe --defaults-file=$<span style="color: #eedd82;">basedir</span>/my.cnf --datadir=<span style="color: #ffa07a;">"$datadir"</span> --pid-file=<span style="color: #ffa07a;">"$mysqld_pid_file_path"</span> $<span style="color: #eedd82;">other_args</span> >/dev/null 2>&1 &<br /> wait_for_pid created <span style="color: #ffa07a;">"$!"</span> <span style="color: #ffa07a;">"$mysqld_pid_file_path"</span>; <span style="color: #eedd82;">return_value</span>=$<span style="color: #eedd82;">?</span><br /><br /> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Make lock for RedHat / SuSE<br /></span> <span style="color: #00ffff;">if</span> test -w <span style="color: #ffa07a;">"$lockdir"</span><br /> <span style="color: #00ffff;">then</span><br /> touch <span style="color: #ffa07a;">"$lock_file_path"</span><br /> <span style="color: #00ffff;">fi</span><br /><br /> <span style="color: #00ffff;">exit</span> $<span style="color: #eedd82;">return_value</span><br /> <span style="color: #00ffff;">else</span><br /> log_failure_msg <span style="color: #ffa07a;">"Couldn't find MySQL server ($bindir/mysqld_safe)"</span><br /> <span style="color: #00ffff;">fi</span><br /> ;;<br /><br /> <span style="color: #ffa07a;">'stop'</span>)<br /> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Stop daemon. We use a signal here to avoid having to know the<br /></span> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">root password.<br /></span><br /> <span style="color: #00ffff;">if</span> test -s <span style="color: #ffa07a;">"$mysqld_pid_file_path"</span><br /> <span style="color: #00ffff;">then</span><br /> <span style="color: #eedd82;">mysqld_pid</span>=<span style="color: #fa8072;">`cat "$mysqld_pid_file_path"`</span><br /><br /> <span style="color: #00ffff;">if</span> (<span style="color: #b0c4de;">kill</span> -0 $<span style="color: #eedd82;">mysqld_pid</span> 2>/dev/null)<br /> <span style="color: #00ffff;">then</span><br /> <span style="color: #b0c4de;">echo</span> $<span style="color: #eedd82;">echo_n</span> <span style="color: #ffa07a;">"Shutting down MySQL"</span><br /> <span style="color: #b0c4de;">kill</span> $<span style="color: #eedd82;">mysqld_pid</span><br /> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">mysqld should remove the pid file when it exits, so wait for it.<br /></span> wait_for_pid removed <span style="color: #ffa07a;">"$mysqld_pid"</span> <span style="color: #ffa07a;">"$mysqld_pid_file_path"</span>; <span style="color: #eedd82;">return_value</span>=$<span style="color: #eedd82;">?</span><br /> <span style="color: #00ffff;">else</span><br /> log_failure_msg <span style="color: #ffa07a;">"MySQL server process #$mysqld_pid is not running!"</span><br /> rm <span style="color: #ffa07a;">"$mysqld_pid_file_path"</span><br /> <span style="color: #00ffff;">fi</span><br /><br /> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Delete lock for RedHat / SuSE<br /></span> <span style="color: #00ffff;">if</span> test -f <span style="color: #ffa07a;">"$lock_file_path"</span><br /> <span style="color: #00ffff;">then</span><br /> rm -f <span style="color: #ffa07a;">"$lock_file_path"</span><br /> <span style="color: #00ffff;">fi</span><br /> <span style="color: #00ffff;">exit</span> $<span style="color: #eedd82;">return_value</span><br /> <span style="color: #00ffff;">else</span><br /> log_failure_msg <span style="color: #ffa07a;">"MySQL server PID file could not be found!"</span><br /> <span style="color: #00ffff;">fi</span><br /> ;;<br /><br /> <span style="color: #ffa07a;">'restart'</span>)<br /> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Stop the service and regardless of whether it was<br /></span> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">running or not, start it again.<br /></span> <span style="color: #00ffff;">if</span> $<span style="color: #eedd82;">0</span> stop $<span style="color: #eedd82;">other_args</span>; <span style="color: #00ffff;">then</span><br /> $<span style="color: #eedd82;">0</span> start $<span style="color: #eedd82;">other_args</span><br /> <span style="color: #00ffff;">else</span><br /> log_failure_msg <span style="color: #ffa07a;">"Failed to stop running server, so refusing to try to start."</span><br /> <span style="color: #00ffff;">exit</span> 1<br /> <span style="color: #00ffff;">fi</span><br /> ;;<br /><br /> <span style="color: #ffa07a;">'reload'</span>|<span style="color: #ffa07a;">'force-reload'</span>)<br /> <span style="color: #00ffff;">if</span> test -s <span style="color: #ffa07a;">"$mysqld_pid_file_path"</span> ; <span style="color: #00ffff;">then</span><br /> <span style="color: #b0c4de;">read</span> mysqld_pid < <span style="color: #ffa07a;">"$mysqld_pid_file_path"</span><br /> <span style="color: #b0c4de;">kill</span> -HUP $<span style="color: #eedd82;">mysqld_pid</span> && log_success_msg <span style="color: #ffa07a;">"Reloading service MySQL"</span><br /> touch <span style="color: #ffa07a;">"$mysqld_pid_file_path"</span><br /> <span style="color: #00ffff;">else</span><br /> log_failure_msg <span style="color: #ffa07a;">"MySQL PID file could not be found!"</span><br /> <span style="color: #00ffff;">exit</span> 1<br /> <span style="color: #00ffff;">fi</span><br /> ;;<br /> <span style="color: #ffa07a;">'status'</span>)<br /> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">First, check to see if pid file exists<br /></span> <span style="color: #00ffff;">if</span> test -s <span style="color: #ffa07a;">"$mysqld_pid_file_path"</span> ; <span style="color: #00ffff;">then</span><br /> <span style="color: #b0c4de;">read</span> mysqld_pid < <span style="color: #ffa07a;">"$mysqld_pid_file_path"</span><br /> <span style="color: #00ffff;">if </span><span style="color: #b0c4de;">kill</span> -0 $<span style="color: #eedd82;">mysqld_pid</span> 2>/dev/null ; <span style="color: #00ffff;">then</span><br /> log_success_msg <span style="color: #ffa07a;">"MySQL running ($mysqld_pid)"</span><br /> <span style="color: #00ffff;">exit</span> 0<br /> <span style="color: #00ffff;">else</span><br /> log_failure_msg <span style="color: #ffa07a;">"MySQL is not running, but PID file exists"</span><br /> <span style="color: #00ffff;">exit</span> 1<br /> <span style="color: #00ffff;">fi</span><br /> <span style="color: #00ffff;">else</span><br /> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">Try to find appropriate mysqld process<br /></span> <span style="color: #eedd82;">mysqld_pid</span>=<span style="color: #fa8072;">`pidof $libexecdir/mysqld`</span><br /><br /> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">test if multiple pids exist<br /></span> <span style="color: #eedd82;">pid_count</span>=<span style="color: #fa8072;">`echo $mysqld_pid | wc -w`</span><br /> <span style="color: #00ffff;">if</span> test $<span style="color: #eedd82;">pid_count</span> -gt 1 ; <span style="color: #00ffff;">then</span><br /> log_failure_msg <span style="color: #ffa07a;">"Multiple MySQL running but PID file could not be found ($mysqld_pid)"</span><br /> <span style="color: #00ffff;">exit</span> 5<br /> <span style="color: #00ffff;">elif</span> test -z $<span style="color: #eedd82;">mysqld_pid</span> ; <span style="color: #00ffff;">then</span><br /> <span style="color: #00ffff;">if</span> test -f <span style="color: #ffa07a;">"$lock_file_path"</span> ; <span style="color: #00ffff;">then</span><br /> log_failure_msg <span style="color: #ffa07a;">"MySQL is not running, but lock file ($lock_file_path) exists"</span><br /> <span style="color: #00ffff;">exit</span> 2<br /> <span style="color: #00ffff;">fi</span><br /> log_failure_msg <span style="color: #ffa07a;">"MySQL is not running"</span><br /> <span style="color: #00ffff;">exit</span> 3<br /> <span style="color: #00ffff;">else</span><br /> log_failure_msg <span style="color: #ffa07a;">"MySQL is running but PID file could not be found"</span><br /> <span style="color: #00ffff;">exit</span> 4<br /> <span style="color: #00ffff;">fi</span><br /> <span style="color: #00ffff;">fi</span><br /> ;;<br /> *)<br /> <span style="color: #ff7f24;"># </span><span style="color: #ff7f24;">usage<br /></span> <span style="color: #eedd82;">basename</span>=<span style="color: #fa8072;">`basename "$0"`</span><br /> <span style="color: #b0c4de;">echo</span> <span style="color: #ffa07a;">"Usage: $basename {start|stop|restart|reload|force-reload|status} [ MySQL server options ]"</span><br /> <span style="color: #00ffff;">exit</span> 1<br /> ;;<br /><span style="color: #00ffff;">esac</span><br /><br /><span style="color: #00ffff;">exit</span> 0<br /></pre> <pre class="src">sudo service mysql5.6 start<br /></pre>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-71370087783233869452014-01-07T22:19:00.001+09:002014-01-07T22:19:38.335+09:00ARROWS A 202F に機種変更した<p><a href='http://read-eval-print.blogspot.jp/2011/12/aquos-phone-102sh.html'>AQUOS PHONE 102SH</a> から ARROWS A 202F に機種変更した。</p><p>suica の変更手続きする前に機種変更手続きしちゃってあせったが、新しい sim を前の機種にさしてsuica の変更手続きできた。</p>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0tag:blogger.com,1999:blog-1096313046657120208.post-35298889698386240482013-11-23T10:57:00.001+09:002013-11-23T13:56:56.246+09:00StumpWM でアラーム<p>3分たったら知らせてほしい時とかあるよね。汁全部なくなったりしたら悲しいもんね。</p><p>使った。</p> <pre class="src">(defcommand alarm (seconds message) ((<span style="color: #b0c4de;">:number</span> <span style="color: #ffa07a;">"seconds: "</span>) (<span style="color: #b0c4de;">:string</span> <span style="color: #ffa07a;">"message: "</span>))<br /> <span style="color: #ffa07a;">"alarm"</span><br /> (sb-thread:make-thread<br /> (<span style="color: #00ffff;">lambda</span> ()<br /> (sleep seconds)<br /> (stumpwm::message-no-timeout <span style="color: #ffa07a;">"^3*~<br />~a<br /><br /> ☆ * . ☆<br /> ☆ . ∧_∧ ∩ * ☆<br />キタ━━━( ・∀・)/ . ━━━!!<br /> . ⊂ ノ* ☆<br /> ☆ * (つ ノ .☆<br /> (ノ"</span> message))))<br /></pre><p>StumpWM は手軽るにこういうことができるのがいい。</p><p>これで疲労ぬきして出撃できる。</p>Yoshinori Taharahttp://www.blogger.com/profile/12438780359950589602noreply@blogger.com0