LinkstationにDebianを導入し,Timemachineサーバにする

LS-V1.5TLというBuffaloのNASをずいぶん前に買ったのですが,あまり活用ができていなかったので,
Linuxを入れることにしました。

元々のNASのファームウエアにもTimemachineサーバはついているのですが,もう古いマシンなので壊れても
いいという感じでLinux化し遊ぶことに。

Linux化

こちらの記事がわかりやすいです。
一度分解し,HDDを取りだすのが面倒ですが,それさえ終われば,快適なLinux化ができます。
当然のように,分解の際にほぼ全てのつめを折ってしまいましたが気にしない。

timemachine

手順などはあちらこちらに書いているのですが

avahi

ここを参考に,avahiをインストールします。debianのパッケージがあるのでそのまま使います

sudo apt install avahi-daemon

設定はこんな感じ

/etc/avahi/services/timemachine.service




 %h
 
   _smb._tcp
   445
 
 
   _adisk._tcp
   dk0=adVN=TimeMachine,adVF=0x82
 

samba

sambaをインストールします。Samba上で使うみたいです

sudo apt install samba

sambauser

timemachineとユーザを作ります

sudo adduser timemachine
sudo password -a timemachine
sudo smbpasswd timemachine

timemachine directory

バックアップ用ディレクトリを作成します

sudo mkdir /mnt/timemachine
sudo chown -R timemachine:timemachine /mnt/timemachine

smb.conf

ここでポイントは,通常のSambaユーザとは別にし,Finderなどからはいじれないようにします。
同時にアクセスするとエラーになるための回避です。

[TimeMachine]
   path = /mnt/timemachine
   browsable = yes
   writeable = yes
   create mode = 0664     #tried turning this off, no fix
   directory mode = 0777  #tried turning this off, no fix
   vfs objects = catia fruit streams_xattr
   fruit:aapl = yes
   fruit:time machine = yes
   #guest ok = yes
   fruit:time machine max size =1T  #tried turning this off, no fix
   inherit acls = yes

restart

リスタートします

sudo /etc/init.d/smbd restart
sudo /etc/init.d/avahi-daemon restart

これで使えると思います。

Mac OS 11.4でpip pdftotext

M1Macで何故か素直に入らなかったのでメモ

環境

  • M1 Mac book Air
  • OS: 11.4
  • python: Intel miniconda3
  • python version:3.8.5

手順

brewでPdftotextを入れる

brew install pdftotext

~/.zshrcに追加

export C_INCLUDE_PATH=/opt/homebrew/Cellar/poppler/21.05.0/include:$C_INCLUDE_PATH
export CPATH=$C_INCLUDE_PATH
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/opt/homebrew/Cellar/poppler/21.05.0/lib # どうもこれは効かないらしい

pipでpdftotextライブラリを入れる 

pip install pdftotext --global-option=build_ext --global-option="-L/opt/homebrew/Cellar/poppler/21.05.0/lib"

MacのRStanのインストールエラー

メモ

環境

  • MacOS 10.15.4
  • R 3.6.3

エラー

install.package("rstan")

こんなえらー

unistd.h:727:31: error: unknown type name 'uuid_t'; did you mean 'uid_t'?

対策

RからこれでOK

install.packages("Rcpp", repos="https://RcppCore.github.io/drat")

VSCodeでLatex

MacのVSCodeでLatexを使うためのセッティングの備忘録

環境

  • Mac OS 10.15
  • texlive 2019

settings.json

いろいろなところを参照し、最終的にこれ


{
    "latex-workshop.latex.tools": [
        {
            "name": "latexmk",
            "command": "latexmk",
            "args": [
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "-outdir=%OUTDIR%",
                "%DOC%"
            ],
            "env": {}
        }
    ],

    "latex-workshop.latex.outDir": "%DIR%",
    "latex-workshop.view.pdf.viewer": "tab",
    "latex-workshop.view.pdf.zoom": "page-width",
}


$HOME/.latexmkrc

#!/usr/bin/env perl
$latex            = 'platex -synctex=1 -halt-on-error';
$latex_silent     = 'platex -synctex=1 -halt-on-error -interaction=batchmode';
$bibtex           = 'pbibtex -kanji=utf8';
$dvipdf           = 'dvipdfmx %O -o %D %S';
$makeindex        = 'mendex %O -o %D %S';
$max_repeat       = 5;
$pdf_mode         = 3; # 0: none, 1: pdflatex, 2: ps2pdf, 3: dvipdfmx
$aux_dir          = ".";
$out_dir          = ".";

実験

人工知能学会全国大会のテンプレートをダウンロードし、jsaiac.styとjsai.bstを同じディレクトリに入れておく

\documentclass[twocolumn]{ujarticle}
\usepackage{jsaiac}

\begin{document}
ああああ

\end{document}

このファイルを作成し保存するとコンパイルが始まり、PDFが作成される

macにwgetを入れてみた

MacOSX10.8にはデフォルトでwgetが入っていません。必要ならばソースコードからコンパイルする必要があります。

まず手始めにはgccをインストールする必要があります。こちらを参考にコマンドライン版gccもいれます

wgetはソースコードからコンパイルするため、ブラウザでGNUのページからダウンロードします

$ cd /Users/UserName/Downloads
$ tar zxvfp wget-1.14.tar.gz
$ cd wget-1.14
$ ./configure --with-ssl=openssl
$ make
# su
# make install

こんな感じでインストールできます。

ちなみに–with-ssl=opensslをつけないとconfigureに失敗しました

pdftotextでPDFを文字列化

最近の人工知能ブームでテキストマイニングから法則を発見するといったこともしばしば行うようになってきました。
PDFから文字列を抽出する方法をメモっておきます

環境

  • mac os 10.11

インストール

まずはpdftotextをインストールします

$ brew install homebrew/x11/xpdf-japanese

このまま実行するとエラーになります

$ pdftotext test.pdf
Syntax Error: No font in show
Syntax Error: Unknown character collection 'Adobe-Japan1'

こちらを参考に修正します

$ wget ftp://ftp.foolabs.com/pub/xpdf/xpdf-japanese.tar.gz
$ tar zxvpf xpdf-japanese.tar.gz
$ mkdir -p /usr/local/share/xpdf/japanese 
$ mv xpdf-japanese/* /usr/local/share/xpdf/japanese/
$ echo "textEncoding UTF-8" >> /usr/local/etc/xpdfrc
$ echo "cidToUnicode    Adobe-Japan1    /usr/local/share/xpdf/japanese/Adobe-Japan1.cidToUnicode" >> /usr/local/etc/xpdfrc
$ echo "unicodeMap  ISO-2022-JP /usr/local/share/xpdf/japanese/ISO-2022-JP.unicodeMap" >> /usr/local/etc/xpdfrc
$ echo "unicodeMap  EUC-JP      /usr/local/share/xpdf/japanese/EUC-JP.unicodeMap" >> /usr/local/etc/xpdfrc
$ echo "unicodeMap  Shift-JIS   /usr/local/share/xpdf/japanese/Shift-JIS.unicodeMap" >> /usr/local/etc/xpdfrc
$ echo "cMapDir     Adobe-Japan1    /usr/local/share/xpdf/japanese/CMap" >> /usr/local/etc/xpdfrc
$ echo "toUnicodeDir            /usr/local/share/xpdf/japanese/CMap" >> /usr/local/etc/xpdfrc

実行

2ページ目から出力してみます。

$ pdftotext -f 2 -raw -layout -enc UTF-8 test.pdf 

test.txtというファイル名で作成されます

このサーバにアクセスするためのアクセス権がありませんエラーについて

Linuxでsambaを構築、Macから接続すると表記のようなエラーが出る場合があります。

Windows側からは特に問題なくつながるにもかかわらずです。

しばらく悩んだのですが解決策がわかったのでメモ。

  • CentOS 5.11
  • samba-3.0.33
  • smb.conf
[global]
	workgroup = MYGROUP
	server string = Samba Server Version %v
	security=share
	load printers = yes
	cups options = raw
[user]
	path = /home/user
	guest ok = yes
	writable = yes
	share modes = yes
	guest account = user
	force group = user
	force create mode = 0774
	force directory mode = 0755

こんな感じでゆるゆるのアクセス権限。

しかし、macからFinderのサーバへ接続では

「このサーバにアクセスするためのアクセス権がありません」

との冷たい表示。。

どうやら、/home/user ディレクトリのパーミッションが700になっていたのが原因でした。

777に変更すると問題なく接続可能。

Nobodyで最初接続しようとしているからなのでしょうか?

本来ならば適切な権限にする必要がありそうですがとりあえずこれでよし

Bootcampで外付けUSBにWindows

備忘録用に記録しておく。

bootcampは非常に便利なのですが、MacbookAirの128GディスクではWindows8を20Gパーティーションで入れるのにはちょっときつすぎます

ということで外付けUSBメモリに入れることにします。

USBメモリで起動用ディスク作成

http://uiuicy.cs.land.to/winpe06.html

この辺りを参考にUSBメモリを起動ディスクにします

Windows のインストール

http://posaune.hatenablog.com/entry/2014/05/01/184944

こちらの1と3を実施

ここでWindows8.1を使用する場合にはこちらからADKをダウンロードします

http://www.microsoft.com/ja-jp/download/details.aspx?id=39982

なおコマンドのある場所は上記のURLとは違います


C:\Windows\system32>"C:\Program Files (x86)\Windows Kits\8.1\Assessment and Depl
oyment Kit\Deployment Tools\amd64\BCDBoot\bootsect.exe" /nt60 e:
Target volumes will be updated with BOOTMGR compatible bootcode.

E: (\\?\Volume{56130f06-7576-11e4-830f-001c421b11f1})

		Successfully updated exFAT filesystem bootcode.

Bootcode was successfully updated on all targeted volumes.

C:\Windows\system32>"C:\Program Files (x86)\Windows Kits\8.1\Assessment and Depl
oyment Kit\Deployment Tools\amd64\DISM\imagex.exe"	/info c:\wim\install.wim

多分これで行けるはず?

eclipseでTomcatの設定

いつも忘れてしまうのでメモ

環境

MacOS10.9
tomcat7

brew install tomcat7

java

oracle jdkをインストールし、シンボリックリンク

$ which java

/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home//bin/java

eclipse kepler

インストール

EclipseのClassicをインストールするとサーバランタイムがインストールされずに、TOMCATアプリなど作成する際にデバッグに困ってしまいます。

サーバランタイムをインストールするには、予めBrewでTomcatをインストールした後に、ヘルプのinstall new softwareから

http://download.eclipse.org/releases/kepler

を選択し、いかの2つのプラグインをインストールします。

  • JST Server Adapters
  • JST Server Adapters Extensions

その後、環境設定ーServerーRuntimeEnvironmentsのaddでtomcatを追加するのですが、この際にディレクトリに以下を入力します

/usr/local/Cellar/tomcat7/7.0.55/libexec

これでサーバランタイムが設定可能となります。

この辺りの内容はこちらから引用しています

http://stackoverflow.com/questions/2000078/apache-tomcat-not-showing-in-eclipse-server-runtime-environments

http://stackoverflow.com/questions/17745834/unknown-version-of-tomcat-was-specified-with-tomcat-7-0-42

CocoaのFrameworkでSTLを使ってみる

最近Cocoaにはまっています。Windows用に作成したライブラリをMacへ移植してみたのですが意外とはまったのでメモ

環境

  • MacOX10.9
  • XCode 5

TestAppという単純なアプリを作成しその中からSTLで作成したFrameworkを呼ぶことにするサンプルです。

UtilsというなのFramework

まず、ライブラリの作成です。XCodeでOSX用のCocoaFrameworkを作成します。

作成した後にファイルの追加で以下のヘッダファイルとC++ファイルを追加します

  • Test.h
#ifndef Utils_Test_h
#define Utils_Test_h
#include 
// 値を保持するクラス
class Bean{
public:
		int a;
		int b;

		Bean();
		void set(int a,int b);
		std::string to_s();
};
// 値を操作するクラス
class Test{
public:
		int add(int a,int b);
		std::shared_ptr add(std::shared_ptr a ,std::shared_ptr b);
};
#endif
  • Test.cpp
#include "Test.h"
#include 
Bean::Bean(){
		a=0;
		b=0;
}
void Bean::set(int a_,int b_){
		a=a_;
		b=b_;
}
std::string Bean::to_s(){
		char buf[1000];
		sprintf(buf,"a=%d,b=%d",a,b);
		return std::string(buf);
}
int Test::add(int a, int b){
		return a+b;
}
std::shared_ptr Test::add(std::shared_ptr a ,std::shared_ptr b){
		std::shared_ptr ret=std::shared_ptr(new Bean());
		int va=a->a+b->a;
		int vb=b->b+b->b;
		ret->set(va,vb);
		return ret;
}

ついでにObjective-Cのクラスも追加します。こちらを参考に

  • Utils.h
#import 

@interface Utils : NSObject
+(NSString*)addBrackets:(NSString*)string;
@end
  • Utils.m
#import "Utils.h"

@implementation Utils
+(NSString *)addBrackets:(NSString *)string
{
		return [NSString stringWithFormat:@"[-- %@ --]", string];
}
@end

それぞれのヘッダファイルをPublickにしたのちに、コンパイルするのですが、Build Rulesの Apple LLVM 5.0 Language C++のC++ Language Dialect を -std=c++11へ、C++ Standard Libraryを libc++(LLVM C++ standard library with C++ 11 supportへ変更します。また Apple LLVM 5.0 Language のCompile Source As をObjective-C++へと変更しておきます。

これでコンパイルOKのはず

TestAppというアプリ作成

OSXのApplicationのCocoaApplicationからプロジェクトを作成し、テキストボックスとボタンを配置しておきます。また、プロジェクトのFrameworksに先ほど作成したUtilsのフレームワークを追加しておきます。

  • AppDelegate.h
#import 

@interface AppDelegate : NSObject 

@property (assign) IBOutlet NSWindow *window;

@property IBOutlet NSButton *button;
@property IBOutlet NSTextField *text;

-(IBAction)pushButton:(id)sender;
@end
  • AppDelegate.m
#import "AppDelegate.h"

#import 
#import 
#include 

@implementation AppDelegate
@synthesize button;
@synthesize text;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
		// Insert code here to initialize your application
}

-(IBAction)pushButton:(id)sender{
		std::shared_ptr a=std::shared_ptr(new Bean());
		std::shared_ptr b=std::shared_ptr(new Bean());
		std::shared_ptr t=std::shared_ptr(new Test());

		a->set(1,2);
		b->set(10,20);
		std::shared_ptr tt=t->add(a,b);
		NSString* swk=[NSString stringWithCString:tt->to_s().c_str() encoding:[NSString defaultCStringEncoding]];
		NSString* str=[Utils addBrackets:swk];
		[text setStringValue:str];
}
@end

先ほどのライブラリと同様にBuildSettingを変更しておきます。

これでコンパイルとリンクがOKのはず。。

ボタンを押すとライブラリで計算した値がテキストボックスに出るはずです