2008年12月26日金曜日

Flexでパンくずを作ってみる

Flexでパンくずを作ってみました。
もちろん改良の余地はあります。なんせ0.0.0ですから。

まだSVNのみの公開です。
http://code.google.com/p/breadcrumbs-flex/


んーんGoogleCodeナウいですな。

HibernateでClobを生成

OracleのCLOB型などを使用すると
String型から変換してClob型などに変更する必要があります。


Clob clob = Hibernate.createClob(textData);


SQLServer2000でMicrosoftのJDBCを利用すると
TEXT型がCLOB型になるのですがどうもうまく返してくれません。
※Microsoftによると仕様みたいです。

なのでjTDSのドライバを使ったことがあります。

HibernateでOracleのシーケンスを使う

Oracle でのシーケンス指定を行います。
するとHibernateでは以下のように指定します。


<id name="id" type="big_decimal">
<column name="ID" precision="22" scale="0" />
<generator class="sequence">
<param name="sequence">tblTree_id</param>
</generator>
</id>

Oracleで通番を設定

Oracleで指定しないで通番を指定するには


create table tbl_tree (
id number,
name varchar2(255) not null,
treeXML XMLType,
create_dt_d timestamp,
update_dt_d timestamp,
primary key ( id )
);

create sequence tblTree_id start with 1 increment by 1;

select tbltree_id.nextval from dual;


という風に「tblTree_id」のような変数を作って
指定する必要があります。

SQLではtblTree_id.nextvalみたいな設定が必要です。

HTTPServiceに引数を渡す

Objectを単純にnewして作成します。

その後、オブジェクトのプロパティ名を
Webに対する引数と同じにして設定します。

POSTの仕方は以下です。(GETでも良い)
でsend()メソッドの引数に渡すと


var argObj:Object = new Object();

var targetId:String = String(treeGrid.selectedItem.id);
argObj.targetId = targetId;

srvTreeView.method = URLRequestMethod.POST;
srvTreeView.send(argObj);



サービスに対して渡すことができます。

Webにアクセスしてデータグリッドを表示

Webにアクセスして、データグリッドの一覧に表示する方法です。


<mx:HTTPService id="srvDataView" url="http://localhost:8080/selectView.do"
useProxy="false" result="showResult(event)"/>


というタグを作ります。

XMLを返してくれるHTTPにアクセスします。
上記URLは下記XMLを返すRESTサイトです。


<treeView>
<forms>
<treeViewList>
<data>
<name>テスト名称</name>
<id>5</id>
</data>
<data>
<name>XMLデータだよー</name>
<id>6</id>
</data>
<data>
<name>一応ね</name>
<id>7</id>
</data>
</treeViewList>
</forms>
</treeView>


これに対して
データグリッドを準備して

<mx:DataGrid id="treeGrid">
<mx:columns>
<mx:Array>
<mx:DataGridColumn headerText="ID" dataField="id"/>
<mx:DataGridColumn headerText="Name" dataField="name" />
</mx:Array>
</mx:columns>
</mx:DataGrid>


ActionScript上に戻り値のイベントを利用して
その値を設定します。


public function showResult(event:Event):void {
treeGrid.dataProvider = srvDataView.lastResult.treeView.forms.treeViewList.data;
}


これで変更してくれます。

2008年12月14日日曜日

Flexのコンポーネントの初期化

ActionScriptでコントロールを作成して、

//オブジェクトを生成
var waitWindow:WaitWindow =new WaitWindow();
//ラベルを設定
waitWindow.setLabel(objFile.name);


という風に処理を行い
newしたコンポーネントに対して処理を行う場合、
newされた側にあるコンポーネントの値にアクセスすると
nullオブジェクトにアクセスする場合があります。

そんなときは


private var myLabel:String = "";

public function setLabel(aLabelText:String):void {
myLabel = aLabelText;
callLater(setTitle);
}

private function setTitle():void {
displayLabel.text = myLabel;
}


として処理を遅らせます。
newしただけでは中にあるDisplayObjectが初期化が行われないのでしょう。
callLater()は表示を再描画時に処理を行うそうなので
処理を遅らせて処理をすることが可能になります。

何度も処理を行うような時に使用するかは。。。わかりませんが
これで初期化はOKです。

2008年12月6日土曜日

Flexで日付変換

まずタグを用意します。


<!-- 日付フォーマットオブジェクト -->
<mx:DateFormatter id="dateFormatter" formatString="YYYY/MM/DD JJ:NN:SS" />


でスクリプト上で


//日付型へ変換
var showDate:Date = new Date(item.pubDate);
return dateFormatter.format(showDate);


と指定してやるとOKです。

Webアプリの再起動

「conf/tomcat-users.xml」
のmanagerロールで管理されていますので


<user name    ="アカウント" 
      password="パスワード"
      role    ="manager"/>


を設定しておきます。

その後、 
http://ドメイン/manager/reload?path=/Webアプリのパス
にアクセスすると
追加してあるユーザをBASIC認証してきます。
そこにユーザ名とパスワードを設定してください。

アプリケーションが再起動します。
(ポートも指定してください)

Web+APでコネクトして隠したとしても
私みたいに全通ししているとアクセス可能です。
よって攻めないでください。
(外部からも再起動可能って事です)

Javaのサーバモード

起動方式を変更します。

以前仕事で(その時はWindowsサーバ)で
デフォルトで結合試験を通り、いざシステムテストの負荷テストを
行ったら、でかいクエリを10発連続で飛ばしたら止まりました。。。

はてさてなんでだろう。。。とやっていて、
コネクション数、セッション継続時間、ソケット有効とかも変更しましたが
一応以下の文面も追加しました。

メモリを変更しないと動かない時が多かったので
これがわかりやすい問題の1つでした。
調べると難しい話しも多いのですが、
システム搭載の物理メモリの半分ぐらい使って良いのではないでしょうか?

アウトオブメモリに陥ったらどうぞお試しあれ。
※実装を直す暇があれば、適切かどうかを試すのが賢明かも。

環境変数に


CATALINA_OPTS=-Xmx256M -Xms256M -Xss256K -server


を追加します。
そうすると起動時に環境変数として盛り込まれます。

但し、Windowsのサービス起動(Tomcat.exe)だと、
この変数の影響がでない現象がありました。
何やらサービスの起動はレジストリからVMの値を
決定しているらしい。。。という結論に至りました。

Tomcatエラーページの指定

サーバ上でエラーとなった場合、エラーページを指定する事ができます。

<error-page>
  <error-code>404</error-code>
  <location>/error/notfound.html</localtion>
</error-page>

と指定するとNotFoundを自分の好きなページで表示する事ができます。
400:不正なリクエスト

401:無許可
403:禁止されている
408:サーバが応答しない
500:サーバ側で何らかの問題発生

となります。
BASIC認証時は401を指定していると
いきなりエラーページにとんだことがあります。
これはBASIC認証を勉強すれば、わかります。

Javaの例外を捕まえたい場合は

<error-page>
  <exception-type>java.io.FileNotFoundException</exception-type>
  <location>/error/filenotfound.html</localtion>
</error-page>

とできるようです。
。。。。Struts等を使いたい場合、
例外はtry処理等した方が良いと思いますが。。。

Tomcatで認証

「認証情報がなければ、FORMページへリダイレクト」といった
アプリケーションはしばしば見受けられますが、
Tomcat(他を知りませんが)はweb.xmlの編集で認証を
フォルダ、ファイル単位でかけることが可能になります。


それではPostgreSQLのテーブルを使って認証してみましょう。

データベース作成はPostgreSQLの項にありますので見てみてください。
Tomcat5だと./common/libに
JDBCドライバが存在する事が条件です。
Tomcat6では./libになります。

server.xml内にある200行目位です。

 <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
        driverName="org.postgresql.Driver" 
          connectionURL="jdbc:postgresql://サーバ名/データベース名?
          user=ユーザ&password=パスワード"
        userTable="users"
        userNameCol="user_name"
        userCredCol="user_pass"
        userRoleTable="user_roles"
        roleNameCol="role_name"/>

って感じで編集します。

その後、アプリケーションのweb.xmlにおいて以下を追加します。


  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Volunteer Manager ID</web-resource-name>
      <url-pattern>/manage/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>admin</role-name>
      <role-name>design</role-name>
    </auth-constraint>
  </security-constraint>
  
  <login-config>
    <auth-method>DIGEST</auth-method>
    <realm-name>Volunteer Manager ID</realm-name>
  </login-config>

  <security-role>
    <role-name>admin</role-name>
    <role-name>design</role-name>
  </security-role>


これで指定したパスはセキュリティがかかります。

サーブレットでエンコード

すべてのレスポンスを統一したコードに変換する方式は
web.xmlに以下を記述します。


 <filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>filter.EncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
 </filter>

 <filter-mapping>
  <filter-name>encodingFilter</filter-name>
  <servlet-name>action</servlet-name>
 </filter-mapping>


まぁこれはStruts用なのでservlet-nameはactionになっていますが、
それぞれの名称にあわせてください。

このクラスに


/**
 * Tomcatコード変換フィルター
 */
public class EncodingFilter implements Filter {

  String encName;

  /**
   * 初期化処理<br>
   * エンコード名を取得
   */
  public void init(FilterConfig config) throws ServletException {
    // TODO 自動生成されたメソッド・スタブ
    encName = config.getInitParameter("encoding");
  }

  /**
   * 実行処理
   */
  public void doFilter(ServletRequest request,
                       ServletResponse response,
                       FilterChain chain) 
                      throws IOException, ServletException {
    request.setCharacterEncoding(encName);
    chain.doFilter(request, response);
  }
}


としておけばOKです。
initでコード名を取ってきていますが、
実装に依存させても大丈夫です。

2008年12月4日木曜日

DataGridのカラムに対して処理を行う

データグリッドの文字列をXMLから設定して、
それで処理をやりたいですよね。

・・・ってDataGridの表示を説明してない。。。

ActionScriptに

//データの日付処理
private function changeDate(item:Object, column:DataGridColumn):String {
//item.pubDateって感じでデータにアクセス
//戻す文字列で表示されます。
return "test";
}

って感じのメソッドを作成します。
引数、戻り値はこれで決まってます。

でDataGridColumnにメソッドをlabelFunctionで指定してあげます。
・・・dataFieldには指定しなくても良いのかな?


<mx:DataGridColumn width="250" headerText="日付" dataField="pubDate" labelFunction="changeDate"/>


これでchangeDate()が呼び出されます。
XMLで日付を出してたんですけど、書式を変えたかったのでやってみました。

FlexでTreeを表示


Flexでのツリーの初期化を行います。
myXMLという変数にディレクトリを表現したXMLを記述します。

Treeコンポーネントを用意して


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp();">
<mx:Script>
<![CDATA[
private var myXML:XML =
<dir name="Yahooトピックス" url="http://dailynews.yahoo.co.jp/fc/rss.xml">
<dir name="国内" url="http://dailynews.yahoo.co.jp/fc/domestic/rss.xml"/>
<dir name="地域" url="http://dailynews.yahoo.co.jp/fc/local/rss.xml"/>
<dir name="経済" url="http://dailynews.yahoo.co.jp/fc/economy/rss.xml"/>
<dir name="海外" url="http://dailynews.yahoo.co.jp/fc/world/rss.xml"/>
<dir name="エンターテイメント" url="http://dailynews.yahoo.co.jp/fc/entertainment/rss.xml"/>
<dir name="スポーツ" url="http://dailynews.yahoo.co.jp/fc/sports/rss.xml"/>
<dir name="サイエンス" url="http://dailynews.yahoo.co.jp/fc/science/rss.xml"/>
<dir name="コンピュータ" url="http://dailynews.yahoo.co.jp/fc/computer/rss.xml"/>
</dir>

//アプリケーション初期化
public function initApp():void{
//ツリーの初期化
rssTree.dataProvider = myXML;
}
]]>
</mx:Script>

<mx:Tree x="10" y="80" width="219" height="308" id="rssTree"
labelField="@name"
defaultLeafIcon="@Embed(source='Assets.swf', symbol='TreeFolderClosed')"/>

</mx:Application>


idを入れてアプリケーション初期化のメソッドにdataProviderを指定させます。
これでツリーが表示されるはずです。

Flexで初期化

Flexでの初期化の方法です。


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp();">
<mx:Script>
<![CDATA[
//アプリケーション初期化
public function initApp():void{
}
]]>
</mx:Script>
</mx:Application>


Appricationタグに「creationComplete」でメソッドを指定して
ActionScriptでメソッドを記述します。
これでこのメソッドが初期化処理として呼び出されます。

2008年12月1日月曜日

日付変換を行う

Date型から固定文字列への変換には
SimpleDateFormatを使用して以下のようにします。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
String date = sdf.format(new Date());

また文字列で取得したデータからDate型への変換は

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
Date date = sdf.parse(str);

とします。
無論文字列のフォーマットが合ってないとダメです。
※例外を発生します。

正規表現を使う

色々チェックする時には、String.matches()を使用します。
例えば以下は簡単なメールアドレスチェックです。

aValue.matches("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+");

マップのキー取得

STLを知らないプログラマも増えてきて
何度言ってもListとMapの違いまでしかわかってくれません。
何がListで何がArrayかもわからんのです。。。

まぁそれはさておき、良くマップのキー取得を行う際に
忘れてしまうので覚え書きしておきましょう。


//HashMapオブジェクト生成
Map map = new HashMap();

//Mapにオブジェクトを追加
map.put("1","ライコネン");
map.put("2","アロンソ");
map.put("3","ミヒャエル");
map.put("4","バトン");
map.put("5","ハイドフェルド");

//「キー」の一覧をSetで取得
Set set = map.keySet();

//イテレータ取得
Iterator iterator = set.iterator();

Object object;
//データ数回取得
while(iterator.hasNext()){
  object = iterator.next();
  System.out.println(map.get(object));
}

文字列の変換

「http://ーーー」と指定された文字列をAタグに変換かけたいような時は
正規表現を使用して以下のように行います。

String atag = value.replaceAll("(http://|https://){1}
                     [\w\.\-/:]+","<a href=$#39;$0$#39;>$0</a>");

valueの値はどんな文字列でも変換されます。
Stringの関数ですのでかなり手軽に行う事ができます。
無論リンクの名前を変更したいような時は後ろの$0を変更します。

認証ユーザ名を拾ってみる

BASIC認証等行なった際は

String user = request.getRemoteUser();

とすれば認証されたユーザ名が取得できます。
当然の事ですが、パスワードは取れません。(取る必要がない?)

また、ユーザのロール確認には


request.isUserInRole("test")

として、ロール名に認証されたユーザが入っているかを確認できます。

また、

request.getAuthType()

を行うと認証方式を取得する事もできます。。。。使うか?

ログアウト

Webアプリでログインしている状態を終了します。
但し、単純にセッションを切るだけです。(Form認証の際)

    HttpSession session = request.getSession(false);
    if (session!=null) {
      session.invalidate();
    }

BASIC認証はブラウザにデータを埋め込んで処理をしますので、
ブラウザを終了したりしないと認証は起こりません。

Javaでグラフを表示

さて、グラフを出してみましょう。JFreeChartを使ってみます。
http://www.jfree.org/
に行ってみてください。

解凍したファイルから

java -jar jfreechart-0.9.21-demo.jar

を実行してみましょう。

をーかっこいいのは何個かありますね。
Gantt Chart辺りを使えばプロジェクト管理なんかもできそう!!
あちゃ。。。アボートした。。。

Barでアクセス数、 Timeで日毎アクセス数、Pieで使用OS、ブラウザ
これでアクセスログ解析ができるでしょう。
しかもこれをWebアプリ等に簡単に適用して、
サービスに展開する事も可狽ゥな。。。。

よし!!簡単なアプリケーションを作ってみましょう。
jfreechatはもちろんjcommonもクラスパスに追加しましょう。 

public class ChartTest extends JFrame  implements WindowListner
  public ChartTest() throws HeadlessException {
    super();
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent ev) {
        System.exit(0);
      }
    });

    JPanel pane = new JPanel(new BorderLayout());
    setContentPane(pane);

    JFreeChart chart = createChart();
    ChartPanel cpane = new ChartPanel(chart);
    pane.add(cpane);
  }

  private JFreeChart createChart() {
    DefaultPieDataset pie = new DefaultPieDataset();
    pie.setValue("FireFox",37);
    pie.setValue("Opera",25);
    pie.setValue("IE",21);
    pie.setValue("Other",17);
    JFreeChart rtnChart = 
        ChartFactory.createPieChart("てすとです",pie,true,true,true);
    return rtnChart;
  }

  public static void main(String[] args) {
    ChartTest chart = new ChartTest();
    chart.setBounds(0,0,300,300);
    chart.show();
  }
}

おーこれで円グラフが書けました!!
ChartUtilities等を使えばファイルに保存もできます。

※一応言っておきますが、一部インプリメントしてません。

ログファイル出力

ログは以下のように出力できます。

  //ロガーを取得
  Logger logger = Logger.getLogger("java.util.logging");
  //ファイル名を指定
  FileHandler fh = new FileHandler("/tmp/ziro.txt");
  //出力フォーマットの設定
  fh.setFormatter(new SimpleFormatter());
  logger.addHandler(fh);
  //出力レベルの設定
  logger.setLevel(Level.INFO);
  //出力
  logger.log(Level.INFO,"出力します。");

とします。
これで出力指定したファイルにログファイルを出力します。

2008年11月29日土曜日

HibernateでのSQL出力設定

HibernateではSQLをトレースしてくれます。
SQLを投げてるタイミングがわかったりして
結構重宝する場合がありますが、消す場合は

hibernate.cfg.xmlファイルの「show_sql」の部分をfalseにします。


<property name="show_sql">false</property>

HibernateのCriteriaでカウントなど

Hibernateをよく使いますが
CriteriaでアクセスをするとSQLを使うことはありません。

まずカウントの取得方法は

criteria.setProjection(Projections.rowCount()).uniqueResult();
//もしくは
Projections.countDistinct("プロパティ");

と行います。

DISTINCTは

criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);


などで行うことができます。

2008年11月26日水曜日

Strutsでダウンロード

ファイルのダウンロードを方法を記述する。

これは個人的な見解なのですが
よく、以下のようなAction上での記述が見受けられます。

//ダウンロード用のコンテンツタイプ設定
response.setContentType("application/octet-stream");
//ファイル名の設定(ヘッダ情報)
response.setHeader("Content-Disposition","attachment; filename=testcsv");
//各データの取得
OutputStream os        = response.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os, encode);
BufferedWriter writer  = new BufferedWriter(osw);

しかし、どうでしょうか。。。
例えば、writerに直接書き込んでるビジネスロジックの途中で、
Exceptionが起こると考えた場合、responseを記述している為、
Struts上の動作に戻ることが不可能ではないですか。。。

Strutsにおいて通常Viewで出力を行なう事を考えれば、
これはこれでおかしいのではないでしょうか?

ファイルがコピーレベルのデータだとしても、
JSP側でダウンロードを行なうのが筋のような気がしないでもないですね。
※処理最終でWriterに記述すれば障害の可能性が低くなることはわかっています。

それではJSPでダウンロードする感じを記述してみましょう!!

2008年11月24日月曜日

Treeを展開してみる

FlexでTreeを使用していますが
初期表示でTreeを展開したいと思いました。

すべての設定終わった後に動作するcallLater()を使用するようです。

初期化系のメソッド内でこれを行い、

tree.dataProvider = wkXML;
//ノードを展開する
callLater(expandFirstNode);


でそのメソッドを定義します。


//ツリーを展開する
private function expandFirstNode():void
{
//ディレクトリ選択
tree.selectedIndex=0;
//ルートを展開
tree.expandItem(tree.dataProvider.getItemAt(0),true);
}


これで初期化と同時にツリーが展開します。

HSQLDBでのLimit文

DBをPostgreSQLからHSQLDBに移行することになったのですが
不覚にもPostgreSQLでLimit文を使っていました。
こりゃ、移行断念か。。。。と思いましたが
以下で指定した行数を取得できるようです。

SELECT LIMIT 0 10 [カラム名] FROM [テーブル名]

0が開始行、10が取得行数になります。0から始まります。
行数より大きな数字等を渡してもエラーにはならないようです。

HSQLDBのインストールと起動

Javaが存在すれば動作するDBです。
簡易的にテストしたりするには適しています。

http://hsqldb.org/

からダウンロードしてきます。
ダウンロードしたファイルを解凍して
demo/runServer.batを見ればわかりますが


cd ..\data
@java -classpath ../lib/hsqldb.jar org.hsqldb.Server %1 %2 %3 %4 %5 %6 %7 %8 %9


で起動することが可能です。

文字列コードなどを指定する場合はJavaコマンドに
-Dsqlfile.charset=Windows-31J
などを追加します。

runManager.batでSQLを直接打つことも可能です。

起動した際に「server.properties」という記述があります。
ここにデータベース名などを記述して起動することも可能です。


起動したコンソールをCtrl+Cで閉じるとシャットダウンします。

2008年11月23日日曜日

FileReferenceのセッション継続

Flexでのアップロード、ダウンロードを行う場合
「FileReference」を使用しますが、
WebServiceなどを通じて接続されたセッション情報を継続できません。
下記行わなくてもIEでは操作できましたが、
FirefoxやCromeでは不可能でした。おそらくCookieの関係でしょうね。


私の場合はTomcat→Strutsを使用してサービスを構築していますので
ActionForm値を使用してアップロードを行います。
Session継続を行っても新しいFormのインスタンスを生成してしまいます。
なので初回インスタンスを生成した時にRequestから


request.getSession().getId()


の値を取得して、Flexに返します。
FlexではセッションIDを何らかの形で保存しておきます。
でFileReferenceを使用する際に使用するURLRequestが使うURLに
jsessionidとして設定してあげます。


var request:URLRequest = new URLRequest();
request.url = uploadUrl + ";jsessionid=" + sessionId;
reference.upload(request);


すると同一のセッションで値をやりとりすることが可能です。
能書きから行くとおそらくログイン情報の共有等もこれでできるでしょう。

セキュリティ的にこれでよいのかは不問の方向で!

2008年11月17日月曜日

Linuxで無線LAN

昔から無線環境はあったのですが、もっぱら友人の為に使っていました。
それは我がメインマシンIBM社のX40はFedoraCore2を載せている為である。。。
昔やろうと思っていたのですが、途中でおっくうになり、止めてました。

「Atheros」ですので「madwifi」でイケルらしいです。
http://sourceforge.net/projects/madwifi/
....ダウンロードはない見たいです。
よって


cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/madwifi co madwifi 

make install


でOKです。

ネットワーク設定で「ath0」が出てきます。しかし設定はできません。

「/etc/sysconfig/network-scripts」
にath0の設定ファイルを作成すれば良いです。
「ifcfg-ath0」
という名称を下のように作成します。


DEVICE=ath0
ESSID="**********"
KEY="*****WEPの16進"
BOOTPROTO=dhcp
ONBOOT=no
MODE="Managed"

WEPの16進数はWeb等でも公開されてますので、
変換すれば容易です。

固定IPなどで設定するには


BOOTPROTO=none
BROADCAST=192.168.***.255
IPADDR=192.168.***.自分
NETMASK=255.255.255.0
NETWORK=192.168.***.0
GATEWAY=192.168.***.げーとうぇいのIP


の設定でうまく行きます。
あとは


ifup ath0


で完了です。
起動時の読み込みもこのコマンドを呼んであげれば動作します。


最近だとインストールするだけで読み込んでますけどね。。。

LinuxでのIPTable

IPTableの設定方法

ipchainsとは同時起動できないそうです。 

/etc/init.d/iptables start

これで起動します。 

/etc/init.d/iptables stop

ストップします。
(その他製品等の接続の不正原因等を
  手っ取り早く確認する場合やってみてください)

さて、肝心の設定ですが、、、読んでると眠くなるくらい奥が深いです。。。

だもんで、sshでの接続を許すような場合、


/sbin/iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT

と行います。

/etc/init.d/iptables save

で、設定をセーブする事が可能です。

これで再起動すれば、、、ばっちり!!

LinuxでのTELNET設定

「/etc/xinetd.d/telnet」を編集します。

service telnet
{
 flags = REUSE
 socket_type = stream
 wait = no
 user = root
 server = /usr/sbin/in.telnetd
log_on_failure += USERID
 disable = yes
}


「disable = yes」→「disable = no」
に変更します。

変更後は

/etc/rc.d/init.d/xinetd restart

を行い、サービスを再起動します。

IPTable等やネットワークの設定で見えない状況もあります。ご注意を。

Linuxでのマシン名

「/etc/sysconfig/network」を編集します。


NETWORKING=yes
HOSTNAME=マシン名

LinuxのNFS設定

LinuxにおけるNFSの構築をやりましょう。
NFSはネットワーク上で他の端末のディスクを共有する仕組みです。
これにより、あたかも物理ディスクのように使用する事ができます。

例えばDBを構築して、データファイルは別のRAIDに組んだり、
開発環境を同期化させたりすることができます。

私の場合は
サーバは玄人指向の「KUROーBOX HG」、
ファームバージョンは1.1です。
  ※OS、カーネルはメーカへ
クライアントはFedoraCore2を搭載したノートパソコンです。

サーバの設定
 まずはインストールが必要です。最近のディストリビューションだったら
 初めから入っていて「/etc/exports」の作成、追加だけでできるようです。
 玄箱はそうはいきません。
 まず、添付のCDROMからbinaryから
   nfs.tar.gz
   portmap-5beta.tar.gz
 を持ってきて、これらをROOTで展開を行います。
  /usr /etc /sbin 辺りに展開されます。
 そして以下を実行します。
 「/etc/rc.d/rc2.d/」にて

  ln -s ../init.d/portmap S31portmap
  ln -s ../init.d/nfs-common S32nfs-common
  ln -s ../init.d/nfs-user-server S32nfs-user-server

 「/etc/rc.d/rc0.d」にて


  ln -s ../init.d/portmap K31portmap
  ln -s ../init.d/nfs-common K32nfs-common
  ln -s ../init.d/nfs-user-server K32nfs-user-server


 「/etc/rc.d/rc6.d/」にて

  ln -s ../init.d/portmap K31portmap
  ln -s ../init.d/nfs-common K32nfs-common
  ln -s ../init.d/nfs-user-server K32nfs-user-server 


 を行います。
 その後、「/etc/exports」を編集します。
 「物理ディスク名 クライアントIPやドメイン(接続指定)」のレコードを追加します。
  例えば、


/mnt/share 192.168.0.3(rw,no_root_squash)

  とします。
  サブネットマスクでの指定も実現できます。
  無論、IPTable等と併用して、安全にしてください。

  再起動しましょう。


クライアントの設定

  さて、こちらの設定はより簡単です。
  まずはサーバの確認 


/usr/sbin/showmount -e 接続サーバ名


  これでNFSアクセス指定ができます。
  出力されない場合は設定にミスがあるか、NFSが起動してないか
  ネットワークコネクトに問題がある可能性があります。


mount -t nfs サーバ名:/mnt/share /mnt/nfs

  としてマウントします。
  これでOKです!!

※Fedora2はこれじゃダメですだ!!
おそらく「mount to NFS server サーバ名 failed: server is down.」
と表示されてしまいます。NFSバージョン3で接続している見たいです。

「/etc/fstab」を編集し、


サーバ名:/mnt/share /mnt/nfs nfs auto,nfsvers=2  0 0


を追加して、「mount /mnt/nfs」としてみてください。

Fedoraでない人でもfstabに


サーバ名:/mnt/share /mnt/nfs  auto  0 0


以上のように記述しておくと、
起動時にローカルのように使用する事が可能になります。

Linuxのインストール

IBM X40にFedora Core2をインストールしてみます。
あらかじめ、ブートできるCD-ROMを持っていることを前提にします。

さて、まずimgファイルを入手する必要があります。
http://download.fedora.redhat.com/pub/fedora/linux/core/2/i386/iso/
ここからdisc1-4を入手します。

これらをCD-Rに焼くのですが、気をつけなければいけないのが
「WindowsXPのデフォルト機狽ナ焼いたらブートできない」点です。
そこで、「Image Recoder」
http://download.fedora.redhat.com/pub/fedora/linux/core/2/i386/iso/
を使用します。(各種ベンダが出しているライティングャtトでも可狽ナす)

インストールしてもうんともすんとも言いませんが、完了しています。
*.imgのファイルで右クリックすると「Imageなんたらー」と出ます。
そうしたら、CD-Rのドライブを指定する。それだけでOKです。

これでインストールCD×4は完成します。

あとはブートすればOK!!(F12でブートリストが出ます)
それにCD-ROMが認識されないようだったら、FDDでブートして
CD-ROMを読み込ませたりとちーと難しい世界に入ります。

後はインストーラーにそって設定!!

情報は以下のとおり
http://www.fedora.redhat.com/:本家
http://fedora.jp/:(http://fedora.jp/wiki/ こっちの方が盛んみたい。)
http://linux2ch.bbzone.net/index.php

Linuxで起動と同時にサービス実行

Apache、Tomcat、PostgresSQL等をインストールした後、
起動時に自動的に実行したい場合、以下の手順で登録を行います。

1.「/etc/rc.d/init.d」 にスクリプトを作成
2.起動ランレベルに対してシンボリックリンクを唐!)

まずは1でデーモンを起動、終了、再起動、ステータス侮ヲを
行う事のできる共通的なシェルを作ります。

同一のディレクトリにあるものを参考に
start,stopのシェルを書きましょう。
(VI等でデーモンを開いて見てみましょう)

その後はランレベルに合わせたディレクトリに
シンボリックリンクを作成していきます。

ランレベルは「rc?.d」の?部分になります。
GUI起動だったら5、コンメ[ルなら3等、最悪すべてを
作っても良いと思います。

私の開発環境はGUIですので5にします。
逆に公開サーバ等は3に設定しておきます。

「rc5.d」にて
「ln -s ../init.d/作成したシェル S??作成したシェル」を実行します。
??は起動順序になります。
ネットワーク起動がまだの状態での
ネットワーク関係の起動を行いたくない等他のサービスと
関係がでて来る場合は意識が必要になります。

後は再起動等して確認しましょう。 


/sbin/chkconfig vsftpd on


でも可能みたいです。

Linuxでのフラッシュメモリ読み込み

Linuxでフラッシュメモリを読み込むなんてできるの?って思ってたら結構簡単にできるものです。
USBに指してみると、、、、あら!?LEDが光ってくれます。つうことは後はmountするだけ!!


mkdir /mnt/usbmem
mount -t vfat /dev/sda1 /mnt/usbmem/
cd /mnt/usbmem/
ls -ltr

完璧!!
だけど、、、、日本語のディレクトリが文字化けする場合があります。
※私はFedoraCore2だもんで化けました!!

だけど、UTF-8だから大丈夫のはず!!
んーと。。。。。マウントしているのは。。。
。。。。
。。。。

NFSを建てた時に見たファイル辺りに設定すれば良いのではないかと考えてみる。。。
/etc/fstab

ファイルシステムだからきっとそうだ!!


/dev/sda1   /mnt/usbmem/ auto                    noauto,user,iocharset=utf8 0 0

今までの経験で行けば、、キャラセットさえ設定すれば良いはず!!

んでumountして、、、
デバイスが使用中!!
使ってないのに!!

なんでこんな事を文句言うのかな。。。としばし考えてみる。。。。。。。。
かれこれ5秒位たった後、、、、
あっ!!ディレクトリに入りっぱなし!!

おもむろに

cd /tmp
umount /mnt/usbmem

これでOK!!
でもう一回マウントすると、日本語が表示されました。
きっと他のLinuxでもこれでいけるはず!!
※無論キャラコードは違うんでしょうけど。

Linuxでの環境変数設定

環境変数などを設定するには
/etc/profile.d
の位置にファイルを作成します。

例えばjava.shというファイルに


export JAVA_HOME=/usr/java/jdk1.5.0_06


また、java.cshというファイルに


setenv JAVA_HOME /usr/java/jdk1.5.0_06


を設定しておきます。
するとシェル起動時には読み込まれています。

LinuxでのDNSクライアント設定

/etc/resolv.conf を編集します。

nameserver 192.168.32.220
nameserver 192.168.32.1
nameserver 127.0.0.1

でOKです。再起動等は必要ありません。

LinuxでCDを焼く

LinuxのCDをLinuxで焼く方法を記述します。
なにやらカーネルのバージョンで違うようですが、
私の環境は2.6でした。

倍速やファイル名は各環境で違うと思います。

 /usr/bin/cdrecord -v speed=4 dev=/dev/hdc -eject FC-5-i386-disc1.iso

Linuxのアンチウィルスソフト

LinuxのアンチウィルスにはBitDefenderというソフトを使っています。

http://www.bitdefender.com/


単独のRPM配布ありで簡単に導入が可能です。

ダウンロード後は権限のあるユーザで


bdc --files /*


等とやるとチェックを行う事ができます。
プロキシサーバを使用している場合には


/opt/bdc/bdc.ini


があるので、ファイルに

HttpProxy = サーバのアドレス:ポート番号

を追加します。そうすると、

bdc --update

で定義の更新を行います。

2008年11月16日日曜日

Linuxのハードディスク増設

外付けHDDを購入しました。
ベアボーンなのでHDDも別購入となりました。
mountしましたがもちろんうまくいきません。
おなじみのパーティション作成と
ファイルシステムのフォーマットが必要ですね。




/sbin/fdisk /dev/sdb



これで別のコンソールが立ち上がります。
「n」でパーティションを作成して、
「w」で書き込みます。
まぁ「t」でIDを変更したり、色々できますね。
何より書き込まないと変更できないのがエライ!!




/sbin/mkfs -t ext3 /dev/sdb1



ext3はFAT32ですね。
ext2でもOKだったのですが、現在使っているNASが
FAT32なのでext3を指定しました。




mount -t ext3 /dev/sdb1 /mnt/hdd



これで可能ですね。

2008年9月15日月曜日

Treeコンポーネントのアイコンを変更

Tree表示のアイコンの表示を変更してみました。


<mx:tree change="treeChange(event);"
labelField="@name"
defaultLeafIcon="@Embed(source='Assets.swf', symbol='TreeFolderClosed')"/>


defaultLeafIconの部分は「ファイル」表示されるアイコンですね。



デフォルトのアイコンに変更したかったんで若干苦労していました。
Assets.swfから抜き出すように記述するんですね。
ディレクトリのみ表示みたいなときに役立つかと。

2008年8月13日水曜日

ふと思う

ページャーのインターフェースですが
1,2,3,4,5って感じですよね?

ふと思ったのですが、情報が増えていくと
新しいものが1ページになります。

・・・・これっておかしいですよね?
新しいものが2,3,4ってなったほうが良いような気がする。
すると「3ページ」にこの情報がある。。。っていう情報は更新されません。

・・・これは一回推察するべきかもしれませんね。

iPhoneのSDKってやっぱ駄目なんですね。

何か情報公開は駄目みたいですね。
ってことでブログに書くのは中止。

2008年7月18日金曜日

なるほどね。

そういう事ね。。。。。。
へー。。。ActionScriptっておもしろいね。

2008年7月5日土曜日

Papervision3Dで遊ぶ

ちょっと触ってます。
面白いですね。

2008年6月21日土曜日

まずはネットワークって。。。

さて、ネットワークツールをつくろうと思い立ちましたが
まずもって自分のIPさえもわからない。。。

CFNetworkっていうツールを見つけたが
まずもって開発形態さえもわかってない。

まずはボタンをアプリケーションに配置してみよう。
Navigation、OpenGL、TabBar、Utility、ViewBased、WindowBased
ってアプリケーションがありますね。
わかんないからWindowで作って見ましょう。

シミュレーターを実行するとタダのWindowが出て終了ですね。
main.mにアプリケーション開始のプログラムが記述してあります。
おそらく起動時に動作する箇所ですね。
その後に「プロジェクト名+AppDelegate.m」っていうファイルの
applicationDidFinishLaunching:applicationが動作するみたいですね。

何か気の遠くなる作業に思えてきた。

2008年6月17日火曜日

んじゃやってみますかね。

んじゃちーとやってみますか?
ネットワーク系のツールでも。

2008年6月14日土曜日

さぁ動かしてみる

MacOSX10.5.3にアップデートしてから再インストールすると
「iPhoneSDK」がインストーラーで選択できるようになりました。
よーし。これで開発開始だっ!!!

Xcodeを起動して新規プロジェクトを実行したら
iPhoneのメニューが出ました!!!

・・・でどうするんだ。。。

再度インストール

再度インストールしてみました。んーん。。。動きません。
XCodeってのと若干の関係がありそう。
。。。やっぱ何もわからないのはハンデがありますね。

調べてみると「/Developer/Applications/Xcode」ってのを
起動しないといけないみたいですね。難しい。

って思ってたらiPoneSDKのインストール部分にチェックできてないですね。
ってことでOSのアップデートからですね。

冷静に考えれば。。。

Mac自体社会人になって始めて仕事した時の
端末がMacだった位で触った事さえない。。。

インストールは終了したがひとまずどこから起動するかさえわからない。。。
一応再起動を試みる。

何やらMacのバージョンがあやしい。。。

iPhoneSDKをインストールしてみる

iPhoneでの開発を行ってみたいと思います。

さぁまずはインストールです。
インストールするにもMacでの開発のみらしく、
まずは友人にMacを借りてインストールを開始しました。