iOSSwiftXcode

iOS Xcode Swift 4.2 Storyboard上にあるViewControllerをプログラムから呼び出し

1 Mins read

Mac 10.14.5
Xcode 10.2.1
Swift 4.2

Storyboard上にあるViewControllerをプログラムから呼び出し方法
サンプルはMain.storyboardを対象としているので、あらかじめ設定の
「General」「Deployment Info」「Main Interface」
をクリアしておくこと

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
 
    var window: UIWindow?   //Main Window
 
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
 
        window = UIWindow(frame: UIScreen.main.bounds)
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let viewController = storyboard.instantiateInitialViewController()
        window?.rootViewController = viewController
        window?.makeKeyAndVisible()
 
        return true
    }
}
Read more
LinuxMySQLPHP

PHP7 MySql error Uncaught Error: Call to undefined function mysql_real_escape_string()

1 Mins read

PHP7の環境へPHP5系のアプリを移動してみたら案の定動かん。。。

モジュール調べたら「mysql_」系が無くなってて「mysqli_」に代わっているのみたいなのでソース内をgrepして片っ端から直したらなんとか動いた♪

mysql_

から

mysqli_

へ「i」つける!

「mysql_select_db」や「mysql_query」は「i」付けるだけではなく、引数の順番も変わっているから念のため、関連する部分は見直しが必要です。

このタイミングで出来ればオブジェクト指向系に変更することをおススメします。
「mysqli::query」感じ!

あと、なんかunset($this)も使えんようになってたみたい。

時代は進むんだぁ

Read more
OracleWindows Server

Windows 2008R2 に Oracle Database 11g を SJIS でセットアップ および Data Pump(データポンプ)使用可にする

2 Mins read

日本企業の金融系で使用されているOracleはまだまだSJISが多く使われている。
テストや開発環境構築時にSJISで立ち上げるための覚書

まとまってなくきたなくて。。。ごめん

●Oracle XEのデータベースをSJISで再構築
再作成後はデータポンプが使用できないので使用可能に設定する

/*========================================
■環境
========================================*/

Windows 2008R2 Standard SP1 (x64)
Oracle Database 11g Express Edition Release2 (11.2.0.2.0 – 64bit Production)

標準セットアップが正常に完了している前提(標準ではUTF-8になる)
SJISも「JA16SJIS」、「JA16SJISTILDETILDE」などあるから環境にあわせてください。今回は「JA16SJISTILDE」です。
文字コードについて

/*========================================
■データベースの再構築
========================================*/
前提、1インスタンス、1データベースとなるOracle
文字コード変更を行う場合、再作成が必要となる
XEでは複数インスタンスを作成できないので、
SIDを増やす方法ではなくインストール時のデータベースを削除し新しく再作成する
余談だが上位エディッションであれば複数インスタンス、複数データベースの運用が可能となる
その際はSIDを決め環境変数など設定が必要

・Dosプロンプトを管理者権限でオープンする

・データベースを削除するためのCleanUp.batが用意されている
CleanUp.batを走らせる

/*
C:\oraclexe\app\oracle\product\11.2.0\server\bin\CleanUp.bat
*/

・手作業で残ったファイルを削除
/*
cd C:\oraclexe\app\oracle\product\11.2.0\server\dbs
*/

/*
del *
*/

・新規データベースを作成する
データベースを作成するためのCreateDB.batが用意されている
文字コードを指定し、再作成する

この処理にはマシンスペックによるが30分から1時間はかかる

/*
cd C:\oraclexe\app\oracle\product\11.2.0\server\bin

CreateDB.bat -dbchar JA16SJISTILDE
*/

・システムのプロパティから環境変数を設定する
(存在しなければ設定する)
/*
ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server
ORACLE_SID = XE
PATH = C:\oraclexe\app\oracle\product\11.2.0\server\bin
NLS_LANG = JAPANESE_JAPAN.JA16SJISTILDE
*/

・DosプロンプトをCloseし管理者権限で再度オープンする
(環境変数を反映させるため)

・Oracleが起動しているかチェックする
/*
tasklist | find “oracle”
*/

・TNS Listnerの起動と確認
/*
lsnrctl.exe start
tasklist | find “TNSLSNR.EXE”
*/

・管理者アカウントのパスワードが設定されていないので再設定を行う
/*
sqlplus /nolog
connect sys as sysdba
*/

・パスワード[hogehoge]で設定 ※環境で変えてくださいね
/*
ALTER USER SYS IDENTIFIED BY “hogehoge”;
ALTER USER SYSTEM IDENTIFIED BY “hogehoge”;
*/

・登録ユーザーの確認とキャラクターセットの確認
/*
select username from dba_users;

select value from nls_database_parameters where parameter=’NLS_CHARACTERSET’;
*/

・パスワードの有効期限が180日になっているので無期限にする
(突然ロックされるので。。。環境によって変更してください)
/*
確認
select * from dba_profiles where resource_name = ‘PASSWORD_LIFE_TIME’;

select username,profile from dba_users;

無期限に変更
alter profile default limit password_life_time unlimited;
*/

・外部からの接続のためにWindows2008R2のファイアーウォール受信「TCP 1521」ポートを開けてあげること!

/*========================================
■Data Pump(データポンプ)
※他にもっと良い方法があれば教えて!
========================================*/

再作成後は「expdb, impdp」が使用不可能になっている
(メタデータ処理が出来ないエラーが出る)

正規版(お試し版で可)の11gR2のOracleを別マシンにインストールし以下のフォルダからファイルコピーする
「$ORACEL_HOME\rdbms\xml\xsl」フォルダごと
XEの「C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\xml」の直下にコピー

「kupostdt.xsl」ファイルを作成し同じフォルダへコピー
参照先(https://forums.oracle.com/forums/thread.jspa?messageID=9958876)
xslフォルダ内のファイルは全部で180ファイルになる

・sysユーザでログインし以下のコマンドを実行すると使用可能となる
SQL>execute dbms_metadata_util.load_stylesheets

/*========================================
■個別スキーマ(ユーザー)作成
========================================*/

/*
[Oracle 11g XE re2]
ユーザー名は大文字で登録される’ADMINUSER’ ※環境で変えてくださいね
*/

create user ADMINUSER
identified by hogehoge
default tablespace USERS
temporary tablespace TEMP;
/* 指定の表領域を無制限に使用できるように設定します。 */
ALTER USER ADMINUSER QUOTA UNLIMITED ON USERS;

col USERNAME for a10
col ACCOUNT_STATUS for a20
col DEFAULT_TABLESPACE for a20
col TEMPORARY_TABLESPACE for a20
select USERNAME,ACCOUNT_STATUS,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users where USERNAME=’ADMINUSER’;

/* 権限付与・確認 */
GRANT CONNECT,RESOURCE TO ADMINUSER;
GRANT UNLIMITED TABLESPACE TO ADMINUSER;
GRANT CREATE SESSION TO ADMINUSER;
GRANT CREATE TABLE TO ADMINUSER;
GRANT CREATE PROCEDURE TO ADMINUSER;
GRANT SELECT ANY TABLE TO ADMINUSER;

col GRANTEE for a30
col GRANTED_ROLE for a30
select GRANTEE,GRANTED_ROLE from dba_role_privs where GRANTEE=’ADMINUSER’;

/* データポンプ処理 */
sqlplus /nolog
connect sys as sysdba;

sqlplus /nolog
connect system as sysdba;

/* エクスポートDir作成・権限付与 */
CREATE DIRECTORY expdp as ‘C:\oraclexe\expdir’;

GRANT READ, WRITE ON DIRECTORY expdp TO ADMINUSER;
GRANT EXP_FULL_DATABASE TO ADMINUSER;

/* インポートDir作成・権限付与 */
CREATE DIRECTORY impdp as ‘C:\oraclexe\impdir’;

GRANT READ, WRITE ON DIRECTORY impdp TO ADMINUSER;
GRANT IMP_FULL_DATABASE TO ADMINUSER;

/* インポートサンプル */
impdp ADMINUSER/hogehoge DIRECTORY=impdp DUMPFILE=DEMO.dmp LOGFILE=DEMO_20171017.log SCHEMAS=DEMO REMAP_SCHEMA=DEMO:ADMINUSER

/*========================================
■クライアント設定
========================================*/

Windows7 Pro Sp1(x64)

ファイアーウォール「TCP 1521」ポートを開放すること!
受信、ローカルポート:任意、リモートポート:1521

Oracle Database 11g Release 2 for Microsoft Windows (32-bit)をダウンロード
(64bit版もある)

解答したファイルからセットアップを開始する。
インストールするオプションは
「SQL*Plus」
「Oracle Net」
のみでよい(最小構成でOKなら)

テキストエディッタで「tnsnames.ora」を作成し内容はこんな感じ
IPやSIDが違う場合など状況により変更してください
=================================================
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.XX)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)

EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)

ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
=================================================

作成したファイルを以下のフォルダに入れてあげる
「C:\app\iagsqap\product\11.2.0\client_1\network\admin」フォルダ内に

Dosプロンプトで

tnsping XE

と叩き通信の疎通を確認する

Read more
AipoApacheLinux日記

CentOS Aipo 7から8へバージョンアップ Apache と Tomcat連動

1 Mins read

Aipoさん使わせていただいております。
ありがとうございます。

バージョンアップにともないURLも「url/aipo」から「url/」にアクセス先が変わりました。

Apacheとの連動且つSSL強制アクセスとしたいので、以下の部分を修正しました。

■Tomcat側設定「/usr/local/aipo/tomcat/conf/server.xml」
Port80はApache配下でコントロールする為にこの部分をコメントアウト
<!-- A "Connector" represents an endpoint by which requests are received
  and responses are returned. Documentation at :
  Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
  Java AJP Connector: /docs/config/ajp.html
  APR (HTTP/AJP) Connector: /docs/apr.html
  Define a non-SSL HTTP/1.1 Connector on port 8080
<Connector port="80" maxThreads="1000" protocol="org.apache.coyote.http11.Http11NioProtocol"
    connectionTimeout="20000"
    redirectPort="8443" />
-->

■Tomcat側設定「/usr/local/aipo/tomcat/conf/server.xml」
AJPを通じて443Portでアクセスさせたいので、8443から443へ変更
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="443" />

■Apache側設定「/opt/lampp/etc/extra/hoge.conf」※apache系のconfファイルね
<IfModule ssl_module>
<VirtualHost *:443>
  #アクセスさせたいURL
  ServerName aipo.hoge.com
  ServerAdmin aipo@hoge.com
 
  #これはダミー
  DocumentRoot "/opt/lampp/htaipo"
  <Directory "/opt/lampp/htaipo">
  </Directory>
 
  #Aipo Tomcatへ連結
  <Location "/">
    ProxyPass "ajp://localhost:8009/"
  </Location>
 
  #オレオレ証明書
  #######################################################
  #  SSL Engine Switch:
  SSLEngine on
 
  #  Server Certificate:
  SSLCertificateFile /opt/lampp/etc/ssl.crt/server.crt
  SSLCertificateKeyFile /opt/lampp/etc/ssl.key/server.key
 
  #必要であればSSL Optionを記載する
  #######################################################
 
</VirtualHost>
</IfModule>

Read more
LinuxMySQL日記

mysqldumpでバックアップ mysqlで復元

1 Mins read

MySqlのバックアップと復元について

CentOS 6.9 x64
MariaDB 10.1.25(xampp linux x64 5.6.31内)

最近xampp内にあるのはMariaDBとなっていますが。。。オープンソースが分かれた感じね。これ昔のSybaseとSQLServerと同じやつだ(汗)MySqlがOracleに買収されて相変わらずオープンソースだけどライセンス系でめんどくさいから分けちゃえってやつ。そういえばUnixとLinuxもそんな感じだよね。アメリカ人(Linuxは欧米かぁ)は昔からライセンスの緩いVS固いで戦ってるけど、こちらは使ってて名前違うのに、中身はほぼ一緒なの、なんで?って疑問、若い人に教えるの大変なんだよなぁ。そういえばOpenSSLも確かオープンソース団体の脆弱性修正が遅すぎるってGoogleが別プロジェクト作っちゃったのこの前見た。。。

まえがきはさておき、xamppや複数のMySqlを1台で運用(あまりやらんが使用ポートを分ければ複数インスト可能)するときに「sock」指定(プロセス指定)が必要なのでその部分も含めてコマンド書いときます。

yum使ってMySqlを標準インストールした場合、Pathが普通に切られているから、他のネット情報のように「sock」部分はカットして使ってください。

■バックアップ(使い勝手がよいのでバイナリでアウトプット)
# ./mysqldump --default-character-set=binary --socket=/opt/lampp/var/mysql/mysql.sock -u root -p dbname > /opt/dump.sql

■復元
# ./mysql --socket=/opt/lampp/var/mysql/mysql.sock -u root -p dbname < /opt/dump.sql

Read more