2013年12月28日土曜日

SQL Serverを使う限り中小企業のクラウドサービスの提供はありえない?





利用料払いでSQL Serverを使ったクライアントへのサービスを提供しようとすると非常に高価になります。2コアバックで18K~19Kくらいでしょうか、、、SPLAS流通会社へ別途問い合わせが必要
http://www.microsoft.com/ja-jp/licensing/licensing-options/spla-program.aspx


ではどうすればいいのか、、、、

1)大規模なSQL Serverを作成し、シェアする
  課題
  ・中小企業には厳しい
  ・管理が煩雑になりうる(影響を加味して管理しなければならない。
2)Editionを変更する
  ⇒ないです。ExpressやWorkgroupなどは、SPLAに対応していない
3)SQL Serverをやめる
  ・MySQLやPostgreSQLなどに乗り換える
  ⇒対応コストが掛かり過ぎる上に、自社のエンジニアのスキルスセットの変更は難しい

、、、、ベストな対応案が無いですね。

なにかいい案ってありますか?

言えるのは、最初から開始するなら、Cloud前提のアーキテクチャで固めるべきでしょう。
技術選択の誤りは、ブラックな環境を生み出すので気をつけたほうがいいです。


2013年12月27日金曜日

139 unable to close session for _accessoryの対応について

ERROR - opening session failed
ERROR - /SourceCache/ExternalAccessory/ExternalAccessory-242/EASession.m:-[EASession dealloc] - 139 unable to close session for _accessory=0x14e846d0 and sessionID=65536


またこのエラーが発生しました。


スキャナが繋がっていない場合のプリンタの電源OFF/ONで発生します。


対応は、Bluetooth接続時にコネクションのハードウェアモデルを見るように対応しました。


Bluetoothのイベントキャッチ


  [[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications];

  [[NSNotificationCenter defaultCenter] addObserver:self
                                           selector:@selector(_accessoryDidConnect:)
                                               name:EAAccessoryDidConnectNotification
                                             object:nil];
  [[NSNotificationCenter defaultCenter] addObserver:self
                                           selector:@selector(_accessoryDidDisconnect:)
                                               name:EAAccessoryDidDisconnectNotification
                                             object:nil];



イベントの記載方法


- (void)_accessoryDidConnect:(NSNotification *)notification
{


 EAAccessory *connectedAccessory =  [[notification userInfo] objectForKey:EAAccessoryKey];
 OPN2002iBluetoothService *sessionController = [OPN2002iBluetoothService sharedController];

    NSLog(@"description=%@",[connectedAccessory description]);
   
    if ([[[connectedAccessory modelNumber] substringToIndex:3] isEqualToString:@"OPN"]) {



補足


2013-12-29 10:08:34.483 UNITE-POS[716:60b] description=<EAAccessory: 0x155eff40> {
  connected:YES
  connectionID:28447505
  name: Wireless Barcode Scanner
  manufacturer: OPTOELECTRONICS CO.,LTD.
  modelNumber: OPN-2002i
  serialNumber: 000956
  firmwareRevision: 1.0.0
  hardwareRevision: 1.0.0
  protocols: (
    "jp.opto.opnprotocol"
)
  delegate: (null)
}


2013-12-29 10:11:21.850 UNITE-POS[716:60b] description=<EAAccessory: 0x155ed810> {
  connected:YES
  connectionID:28447508
  name: Star Micronics
  manufacturer: Star Micronics
  modelNumber: Star Micronics
  serialNumber:
  firmwareRevision: 0.1.0
  hardwareRevision: 0.1.0
  protocols: (
    "jp.star-m.starpro"
)
  delegate: (null)
}



わからないこと


Bluetoothの接続時にDidConnectが2回発生します。

この理由がわからなかった。。。

2013年12月7日土曜日

iOS7だとFTP通信を行った後にまれにアプリケーションが完全終了する

iOS7になって画面が広くはなり、正しい4:3の画面サイズになったのは嬉しい。

入れたコード
                        //iOS7対応
                        if (SYSTEM_VERSION_LESS_THAN(@"7.0"))
                        {
全体コード
- (void) stream: (NSStream *) theStream handleEvent: (NSStreamEvent) streamEvent
{
    NSData *data;
   
    switch (streamEvent)
    {
        case NSStreamEventOpenCompleted:
        {
   self.filesInfo = [NSMutableArray array];
            self.didOpenStream = YES;
            self.receivedData = [NSMutableData data];
        } break;
           
        case NSStreamEventHasBytesAvailable:
        {
            data = [self.streamInfo read: self];
           
            if (data)
            {
                [self.receivedData appendData: data];
            }
           
            else
            {
                InfoLog(@"Stream opened, but failed while trying to read from it.");
                [self.streamInfo streamError: self errorCode: kBRFTPClientCantReadStream];
            }
        }
        break;
           
        case NSStreamEventHasSpaceAvailable:
        {
           
        }
        break;
           
        case NSStreamEventErrorOccurred:
        {
            [self.streamInfo streamError: self errorCode: [BRRequestError errorCodeWithError: [theStream streamError]]];
            InfoLog(@"%@", self.error.message);
        }
        break;
           
        case NSStreamEventEndEncountered:
        {
            NSUInteger  offset = 0;
            CFIndex     parsedBytes;
            uint8_t *bytes = (uint8_t *)[self.receivedData bytes];
            int totalbytes = [self.receivedData length];
            do
            {
                CFDictionaryRef listingEntity = NULL;
               
                 parsedBytes = CFFTPCreateParsedResourceListing(NULL, &bytes[offset], totalbytes - offset, &listingEntity);
               
                if (parsedBytes > 0)
                {
                    if (listingEntity != NULL)
                    {
                        //iOS7対応
                        if (SYSTEM_VERSION_LESS_THAN(@"7.0"))
                        {
                            id date = [(__bridge NSDictionary *) listingEntity objectForKey: (id) kCFFTPResourceModDate];
                            if (CFGetRetainCount((__bridge CFTypeRef) date) >= 2)
                                CFRelease((__bridge CFTypeRef) date);
                        }
                        self.filesInfo = [self.filesInfo arrayByAddingObject: (__bridge_transfer NSDictionary *) listingEntity];
                    }
                    offset += parsedBytes;
                }
               
            } while (parsedBytes > 0);
            [self.streamInfo streamComplete: self];
        }
        break;
       
        default:
            break;
    }
}

サーバ管理者もしているが、WindowsServer2008R2のファイル共有へ接続が出来ない問題の対応

有るサーバがファイル共有が使えなくなっているこの調査に難航したのでメモをアップする。

対象のサーバ
Windows Server 2008R2
ホストOS
Windows Server 2012
仮想マシン
Hyper-V3.0
一番の問題は、「ネットワークと共有センター」からネットアダプターが参照できないこと

対応のためにやったこと
1)Windows Updateで最新化

2)ググった
 参考にしたページ
 http://www.aibsc.jp/joho/otasuke_m/clientserver/netcheck.html
 ⇒共有サービスからネットワークアダプタが確認ができない。

3)Hyper-V 統合サービスのアップグレードもした。
 ---------------------------
 Hyper-V 統合サービスのアップグレード
 ---------------------------
 以前のバージョンの Hyper-V 統合サービスがインストールされていることが検出されました (バージョン 6.1.7601.17514)。このインストールをアップグレードするには、[OK] をクリックしてください。

それでも現象は変わらずでした。

4)結果、
 デバイスマネージャーからネットワークアダプタ「Microsoft Hyper-V ネットワーク」を削除して再起動後にネットワークの設定を行ったところ復旧しました。

以上

2013年12月4日水曜日

ERROR - /SourceCache/ExternalAccessory/ExternalAccessory-213.3/EASession.m:-[EASession dealloc]


発生しているエラー
2013-08-28 14:04:20.879 UNITE-POS[365:907] ERROR - opening session failed
2013-08-28 14:04:20.881 UNITE-POS[365:907] ERROR - /SourceCache/ExternalAccessory/ExternalAccessory-213.3/EASession.m:-[EASession dealloc]
- 137 unable to close session for _accessory=0x20887b40 and sessionID=65536
2013-12-03 11:51:05.935 UNITE-POS[1575:60b] ERROR - opening session failed
2013-12-03 11:51:05.936 UNITE-POS[1575:60b] ERROR - /SourceCache/ExternalAccessory/ExternalAccessory-242/EASession.m:-[EASession dealloc]
- 139 unable to close session for _accessory=0x15d9dea0 and sessionID=65536
参考にしたマニュアル、サンプル
https://developer.apple.com/library/ios/samplecode/EADemo/Introduction/Intro.html

修正例
  [[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications];
  [[NSNotificationCenter defaultCenter] addObserver:self
                                           selector:@selector(_accessoryDidConnect:)
                                               name:EAAccessoryDidConnectNotification
                                             object:nil];
  [[NSNotificationCenter defaultCenter] addObserver:self
                                           selector:@selector(_accessoryDidDisconnect:)
                                               name:EAAccessoryDidDisconnectNotification
                                             object:nil];

- (void)_accessoryDidDisconnect:(NSNotification *)notification
{
 [_service closeSession];        
 NSLog(@"▼ScannerPlugin.m DidDisconnect -> close");
 CDVPluginResult *result;
 result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:@"_accessoryDidDisconnect"];
 [self writeJavascript:[result toSuccessCallbackString:_callbackEventId]];
}
↓マニュアルを見て修正しました。
- (void)_accessoryDidDisconnect:(NSNotification *)notification
{
    EAAccessory *disconnectedAccessory =  [[notification userInfo] objectForKey:EAAccessoryKey];
   
    if ([disconnectedAccessory connectionID] == [[_service accessory] connectionID])
    {
        [_service closeSession];
        NSLog(@"▼ScannerPlugin.m DidDisconnect -> close");
        CDVPluginResult *result;
        result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:@"_accessoryDidDisconnect"];
        [self writeJavascript:[result toSuccessCallbackString:_callbackEventId]];
       
    }
}

補足

bluetoohデバイスが2つ以上あることを前提でコードを組まないといけませんね。

Xamarin、PhoneGap(Cordova)、Titaniumをやってきているが、以外なところでハマった。