マイクラでピラミッド

Python で黄金のピラミッドを作ってみた。以下のソースを/usr/local/minecraft/forge/mcpipy/ にpyramid.py として保存。

from mcpi.minecraft import Minecraft
from mcpi.block import *
mc = Minecraft.create()
pos = mc.player.getTilePos()

height = 51
A = ((height*2)-1)

for i in range(height):
    mc.setBlocks(pos.x+i,pos.y+i,pos.z+i,pos.x+(A-(i+1)),pos.y+i,pos.z+(A-(i+1)),Block(41))

ブロックIDリストから、Block(41) と番号で指定します。

http://minecraft-ids.grahamedgecombe.com/

https://n5v.net/block-item-id-6876/

チャットウィンドウ「/」から

python pyramid.py

と入力すると目の前に黄金のピラミッドが出現しました。

ローストビーフや回復ポーションなど欲しいアイテムもゲットし放題ですね。

マイクラのForge Server建てた

マイクラのサバイバルモードが、バニラだと死にげーと気づいてしばらく遠ざかっていました。・・・が、何か攻略本はないかとAmazon.co.jp を探してみると面白そうな本がありました。

Minecraftで楽しく学べる Pythonプログラミング – Amazon.co.jp

Python かぁ~、死にげーよりはまあ楽しそうだしやってみるか!のノリで手に取るととても楽しそうでした。

一部抜粋)Minecraft には「Mod」という拡張プログラムがあります。通常ではありえないアイテムを追加したり、プログラミング環境を導入できたりと様々な機能を追加できるのがModです。Minecraft をPython で制御するためにも、Modの導入が欠かせません。ここではほとんどのModをMinecraft 内に追加できる「Forge」の導入方法を、Windows とMac に分けて解説します。

つまり、Linux のMultiPlayer サーバーをPython を使ってプログラミングしたWorld でプレイできるということです。

詳細は当該書籍に譲りますが、ここではForge の導入方法を紹介したWebページのリンクを貼っておきます。

CentOS 5のcui環境にMinecraft Forge 1.8を入れる – Qiita

Windows クライアントの%UserProfile%\AppData\Roaming\.minecraft\forgeとサーバーのminecraft/forge/ ディレクトリ両方にhttps://github.com/arpruss/RaspberryJamMod/releases (公式)からダウンロードしたMods.zip, python-script.zip を解凍してできた、RaspberryJamMod.jar とmcpipyフォルダを新規作成したゲームディレクトリ(ここでは、./forge/)にコピペすると、Modの導入に成功しました。

[ゲームディレクトリ]┳[mcpipy]
‘                            ┠[mods]-RaspberryJamMod.jar


起動・停止コードは、

# java -Xmx2048M -Xms1024M -jar forge-1.12.2-14.23.0.2491-universal.jar nogui (起動
# screen -S minecraft-server -p 0 -X eval 'stuff stop\015' (停止
# screen -ls (ソケット確認

チャットウィンドウ「/」から、

python helloworld.py

と入力すると、「Hello world!」と返され足元のブロックが変化しました。

それでは、楽しいModライフを!

カスタマバーコードのレイアウト

大量の宛先にはがきを送るときには、宛名印刷にWord の差し込み文書機能を使うこともあると思います。

最新のWord 2016では宛名のExcel 住所データから郵便カスタマーバーコードの挿入ができます。

[ツールバー]-[差し込み文書]リボンから[バーコードフィールドの挿入]-[バーコードの生成] をクリック。

フィールドから[住所] を選択、[バーコードのタイプ] で[郵便バーコード] を選択、[OK]。するとバーコードフィールドが差し込まれました。

ここからバーコードのレイアウトを編集していきます。[バーコード] フィールドだけを選択して右クリックからメニューの中の、[バーコードの編集…] をクリック。

[詳細設定] から[回転] で270° を選び、[OK]。バーコードフィールドをはがき側面に移動します。

このままだと切手部分にバーコードが重なって良くないので、[レイアウト]リボンから[間隔] を今回は[90pt] 開けます。

すると今度は、ちょうど真ん中に収まりました。

ちょっとしたことでも予備知識としてあれば仕事の効率もアップしますね。

IE11で「このページに安全に接続できません」

IE11で、おもにhttps サイトの閲覧でエラーが出ます。解決方法は、グループポリシーエディターを開いて、

[コンピュータの構成]-[管理用テンプレート]-[Windows コンポーネント]-[Internet explorer]-[インターネットコントロールパネル]-[詳細設定ページ]-[暗号化サポートを無効にする]設定を[有効] にして、[安全なプロトコルの組み合わせ]プルダウンメニューから[TLS1.0 およびTLS1.2 を使用] を選択して[適用]-[OK]すると直りました。

Creators Update 適用後、Edge ブラウザでDNSがタイムアウトして、INET_E_RESOURCE_NOT_FOUND エラーが表示されるバグも多数あるようですね。

http://sutchy.cocolog-nifty.com/sutchy/2017/06/inet_e_resource.html

IPv6 を無効にすると良いとのことですが、当方の環境では再現されませんでした。

VirtualBox エクステンションPack

Oracle のVirtualBox のダウンロードページから、(2017年7月24日現在

VirtualBox 5.1.24 Oracle VM VirtualBox Extension Pack

をダウンロードして、[ファイル]-[環境設定]-[拡張機能] とポイントし、ダウンロードしたExtension Pack を選択しインストールします。

ゲストOSでもUSB機器が使えるようになりました。

参考URL:

http://vboxmania.net/content/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%86%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%91%E3%83%83%E3%82%AF%E3%81%AE%E5%B0%8E%E5%85%A5

LibreOffice calc のマクロボタン

MS オフィス互換のLibreOffice calc ですが、MS Excel で書いた時刻表示のプロシージャを読み込むか、試みに実行してみました。

まず、セル”A1″=GETDATE() とユーザー定義関数を入力します。
[ツール]-[マクロ]-[マクロの管理]-[LibreOffice Basic…]から当該ブックの[standard]をクリックして[新規作成] で以下のプロシージャをコピペします。

Option VBASupport 1
Function GetDate() As Date
Application.Calculation = xlCalculationAutomatic
Application.Volatile
GetDate = Now()
End Function

Sub clock()
Dim counter As Long, crntAdd As String
Worksheets("sheet1").Activate
Worksheets("sheet1").Range("A1").Select

crntAdd = ActiveCell.address

Do Until crntAdd <> "$A$1"
If counter Mod 1000 = 0 Then
counter = 0
Worksheets("sheet1").Range("A1").Calculate
crntAdd = ActiveCell.address
DoEvents
End If
counter = counter + 1
Loop

End Sub

Private Sub フォーム_click()
Call clock
End Sub

[表示]-[ツールバー]-[フォームコントロール]から[コントロールツールバー]をポイントして「ツールバー」から「デザインモード」にします。

[フォーム]の挿入ボタンをクリックするとコントロールフォームが表示されます。(ちなみにボタンの名前変更は、右クリック→コントロール→全般タブ→タイトルから変えられます。)

「プッシュボタン」と書かれた[フォーム]を右クリックして[コントロール]から[イベント]-[実行時] の[…]をクリックして「アクションの割り当て」から「マクロセレクター」で[フォーム_click]マクロを割り当てます。

「デザインモード」を終了して名前を付けてブックを保存。[プッシュボタン]フォームをクリックすると時計が動きました。
難点は、MS Excel のthisworkbook.Activate が使えないことや、Workbook_Open という名前のプロシージャを作ると動作せず「マクロセレクター」から登録することなど不自由を感じました。
参考URL:

http://calibreblo.blogspot.jp/2011/05/blog-post.html

VirtualBox GuestAdditions のインストール

VirtualBox のコンソールとホストOS(Windows10)の間でクリップボードを共有するため、GuestAdditions のインストールをしました。メニューバーの[デバイス]-[Guest Additions CDイメージの挿入] するとデスクトップにデバイスが表示されます。

# yum -y install make gcc kernel-devel
# mount /dev/sr0 /media/
# cd /media/VBOXADDITIONS-*
# ./VBoxLinuxAdditions.run

後は同じくメニューバーの[デバイス]-[クリップボードの共有]-[双方向]をチェックすると、コンソールとホストOS(Windows10)の間でコピペができるようになりました。

プログラムのバグ修正

過去のエントリーのJavaScriptの連立一次方程式の解の分数表示のバグの件でしばらく放置状態だったことをお詫び申し上げます。詳細は以下の通りで、

分数の表示

分子と分母の絶対値をとってからユークリッド互除法で最大公約数を求めて、分母がプラスかマイナスかで条件分岐して、分母と最大公約数が等しいとき(分母=1のとき非表示)、分母と最大公約数が等しくないときを、解(x とy)でそれぞれで条件分岐して、分母にマイナスがあれば符号変換するフローに考え違いがあった模様。(ちょっと考えれば自明だったんですけどね。

[pmath]z=ad-bc<0[/pmath]のとき

[pmath]x=-{dp-bq}/{delim{|}{ad-bc}{|}}[/pmath]

[pmath]y=-{aq-cp}/{delim{|}{ad-bc}{|}}[/pmath]

var x1= d1*p1-b1*q1, y1 = a1*q1-c1*p1, z1 = a1*d1-b1*c1, x2 = Math.abs(x1), y2 = Math.abs(y1), z2 = Math.abs(z1);

if(z1 > 0) {
 if(gcdmemo(x2,z2) == z2) {
  document.getElementById('x').innerHTML = "x = " + x1/gcdmemo(x2,z1);
  if(gcdmemo(y2,z2) == z2) {
   document.getElementById('y').innerHTML = "y = " + y1/gcdmemo(y2,z1);
  }
  else {
   document.getElementById('y').innerHTML = "y = " + y1/gcdmemo(y2,z1) + "/" + z1/gcdmemo(y2,z1) + " = " + y1/z1;
  }
 }
 else {
  document.getElementById('x').innerHTML = "x = " + x1/gcdmemo(x2,z1) + "/" + z1/gcdmemo(x2,z1) + " = " + x1/z1;
  if(gcdmemo(y2,z2) == z2) {
   document.getElementById('y').innerHTML = "y = " + y1/gcdmemo(y2,z1);
  }
  else {
   document.getElementById('y').innerHTML = "y = " + y1/gcdmemo(y2,z1) + "/" + z1/gcdmemo(y2,z1) + " = " + y1/z1;
  }
 }
}
else {
 if(gcdmemo(x2,z2) == z2) {
  document.getElementById('x').innerHTML = "x = " + (-1)*x1/gcdmemo(x2,z2);
  if(gcdmemo(y2,z2) == z2) {
   document.getElementById('y').innerHTML = "y = " + (-1)*y1/gcdmemo(y2,z2);
  }
  else {
   document.getElementById('y').innerHTML = "y = " + (-1)*y1/gcdmemo(y2,z2) + "/" + z2/gcdmemo(y2,z2) + " = " + y1/z1;
  }
 }
 else {
  document.getElementById('x').innerHTML = "x = " + (-1)*x1/gcdmemo(x2,z2) + "/" + z2/gcdmemo(x2,z2) + " = " + x1/z1;
  if(gcdmemo(y2,z2) == z2) {
   document.getElementById('y').innerHTML = "y = " + (-1)*y1/gcdmemo(y2,z2);
  }
  else {
   document.getElementById('y').innerHTML = "y = " + (-1)*y1/gcdmemo(y2,z2) + "/" + z2/gcdmemo(y2,z2) + " = " + y1/z1;
  }
 }
}

CentOS7 LibreOffice

CentOS7.3 でGNOMEデスクトップに付いてくるオフィスアプリ、LibreOffice。

Calc, Writer, Draw, Impress と表計算、ワープロ、図形描画、プレゼンテーションの機能を持ったMS オフィス互換ソフトのひとつを触ってみました。

プログラムはJava で動くとのことで、表計算のcalc から[ツール]-[マクロ]-[マクロの管理]-[Libre Office Basic…] とポイントして当該ブックの[Standard]から[新規作成] をクリック。

プロシージャの先頭に、「Option VBASupport 1」と入力して試みに、Range(“A1”) = “Hello World” を「F5」キーで走らせると実行できました。

サーバーからGUI でオフィスを触る機会はないと思いますがLinux でも表計算、ワープロが使えるという発見でした。(セキュリティ的には好ましくありませんが・・・。

参考URL:

LibreOfficeマクロ入門講座 最低限知っておきたいこと

LibreOfficeでVBAを使う方法。1行おまじないを書くだけ!