본 자료는 PHP용 암호화 및 복호화가 가능한 라이블러리를 소개합니다.

 

이 자료를 이용하여 제가 직접 C#과 Oracle용으로 마이그레이션한 라이블러리를 공개합니다.

 

(ADODB가 GNU 라이센스이므로 공유는 당연하다 판단했습니다.)

 

출처 : http://adodb.org/

 

- 암호화 : MD5Crypt.Encrypt(문자열, 키값) //호출 할 때마다 다른 값이 리턴됨

- 복호화 : MD5Crypt.Decrypt(암호 문자열, 키값)

 

암호화 문자열과 키값은 반드시 키보드에 존재하는 영문+숫자+특수키 값만을 정상적으로 사용 가능하며,

 

기타 다른 문자(특수문자, 한글, )들은 문자 인코딩 타입과 플랫폼에 따라 상이한 결과가 나오므로 주의가 필요함.

 

 

 

[CODE]

//ADOdb의 crypt.inc.php
//Session Encryption by Ari Kuorikoski 
class MD5Crypt{
  function keyED($txt,$encrypt_key)
  {
    $encrypt_key = md5($encrypt_key);
    $ctr=0;
    $tmp = "";
    for ($i=0;$ikeyED($tmp,$key));
  }

  function Decrypt($txt,$key)
  {
    $txt = $this->keyED(base64_decode($txt),$key);
    $tmp = "";
    for ($i=0;$i= 58 && $randnumber <= 64) || ($randnumber >= 91 && $randnumber <= 96))
      {
        $randnumber = rand(48,120);
      }

      $randomPassword .= chr($randnumber);
    }
    return $randomPassword;
  }

}

 

 

 

 

 


[PHP / Crypt / MD5Crypt]암호화, 복호화 Class (ADOdb의 crypt.inc.php

http://userpark.net/124


[C# / .NET / Crypt / HxCrypt]암호화, 복호화 Class

http://userpark.net/125


[ORACLE / PL/SQL / Crypt / HxCrypt]암호화, 복호화 PACKAGE(Class)

http://userpark.net/126

 

추후 Javascript 버전도 고려중니다만, 변경 하시면 공유 부탁드립니다. ^^


Windows 플랫폼에서 alert 객체가 지원되지 않아서 Ionic Popup객체로 대체...


var alert = window.alert;


angular.module('myApp', ['ionic'])

.controller('myCtrl', function ($scope, $state, $timeout,$ionicPopup) {
    alert = function (messageText, titleText) {
        if (!titleText || titleText == "undefined") {
            titleText = "";
        }
        var alertPopup = $ionicPopup.alert({
            title: titleText,
            template: messageText
        });
        alertPopup.then(function (res) { });
    };

});



출처 : 자작(userpark.net)


출처 : https://github.com/driftyco/ionic/issues/2885



window.addEventListener('click', function(event) {
  if (Object.prototype.toString.call(event) == '[object PointerEvent]') {
    event.stopPropagation();
  }
}
, true);


또는


ionic.Platform.isIE = function () {
    return ionic.Platform.ua.toLowerCase().indexOf('trident') > -1;
}

if (ionic.Platform.isIE()) {
    angular.module('ionic')
      .factory('$ionicNgClick', ['$parse', '$timeout', function ($parse, $timeout) {
          return function (scope, element, clickExpr) {
              var clickHandler = angular.isFunction(clickExpr) ? clickExpr : $parse(clickExpr);

              element.on('click', function (event) {
                  scope.$apply(function () {
                      if (scope.clicktimer) return; // Second call
                      clickHandler(scope, { $event: (event) });
                      scope.clicktimer = $timeout(function () { delete scope.clicktimer; }, 1, false);
                  });
              });

              // Hack for iOS Safari's benefit. It goes searching for onclick handlers and is liable to click
              // something else nearby.
              element.onclick = function (event) { };
          };
      }]);
}


'Language > Mobile' 카테고리의 다른 글

[Hybrid/Ionic]Windows Platform에서 alert 객체 대체  (1) 2016.11.04

 

상기 Libary를 이용하면 Json을 이용한 컨트롤이 Javascript에서 손쉽게 이루어 질 수 있을 것으로 판단한다.

  1. XML 파일 또는 포멧의 자료를 “XML to JSON – a converter”를 이용하여 JSON으로 변경
  2. “Sesseion variables without cookies”를 이용하여 해당 페이지에 저장(새로고침을 하여도 해당 창이 닫히기 전까지는 유지되는 기능 활용)
  3. “JSON Query Engine”을 이용하여 CRUD(Create, Read, Update, Delete) 작업 수행 및 반영

본 소스가 왜 필요하고 어떻게 구현되는지는 소스 보면 쉽게 이해가 가실것으로 판단하여 설명은 달지 않겠습니다.

호출 페이지(HTML)

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script type="text/javascript" src="jquery-1.7.1.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function ()
            {
                loadData();
            });
            function loadData()
            {
                try
                {
                    $.ajax({
                        url: "http://[테스트 도메인]/json_test.php"
                        , crossdomain: true
                        , dataType: "jsonp"
                        , jsonp: "callback"
                        , jsonpCallback: "jsonpCallback"
                        , type: 'GET'
                        , data: post
                        , contentType: "application/json; charset=utf-8"
                        , error: function (jqXHR, textStatus, errorThrown)
                        {
                            alert("Error : " + textStatus + " / " + errorThrown);
                        }
                        , success: function (msg, textStatus, jqXHR)
                        {
                            // Callback함수 이용 추천
                            $("#txtResult").text(JSON.stringify(msg));
                        }
                    });
                } catch (e) {
                    alert("Error!!");
                }
            }
            function jsonpCallback(msg)
            {
                //var data = eval(msg);
                alert(msg["callback"] + " / " + JSON.stringify(msg));
            }
        </script>
    </head>
    <body>
        <div id="txtResult" name="txtResult">
        Result Text String
        </div>
    </body>
</html>


피호출 페이지(PHP / json_test.php)

<?php
header("content-type: application/json");  
$callback = $_GET["callback"];

$json_data = array();
$json_data["get"] = $_GET;
$json_data["data"]["a"] = "A";
$json_data["data"]["b"] = "B";
$json_data["data"]["c"] = "C";
$json_data["data"]["d"] = "D";
$json_data["data"]["e"] = "E";

echo $callback . "(". json_encode($json_data) . ")";
?>

결과

{"get":{"callback":"jsonpCallback","_":"1385021410367"},"data":{"a":"A","b":"B","c":"C","d":"D","e":"E"}}

 


주의사항

JSON.stringify 함수는 IE8 부터 지원되며, 브라우져 버전이 IE8이더라도 문서 모드가 “Internet Explorer 8 표준”이상에서만 정상 작동하며, “Internet Explorer 8 호환모드”또는 Internet Explorer 7” 이하에서는 작동되지 않습니다.
크롬 등에서는 정상 작동합니다. 문제는 “Internet Explorer” ^^;;
 

참고 : http://www.fbloggs.com/2010/07/09/how-to-access-cross-domain-data-with-ajax-using-jsonp-jquery-and-php/

JQuery Ajax API Document : http://api.jquery.com/jQuery.Ajax/

 

*.lin을 이용하여 Line Type을 만들 수있으나, Multi Line은 해결책을 찾지 못하여 엄청난 고생을 하였다.

그에 따라 다음에 까먹을 까봐 이렇게 메뉴얼화 해놓으며, 다른 사용자 분들도 필요하면 사용하여 보기시 바랍니다.

Plant에서 Tracing Line을 그릴려고 하는데 기본 AutoCAD P&ID의 Line Type에서는 Tracing Line Type을 지원해 주지 않습니다.

그러면 추가하는 법을 아래에 서술하오니 참고하시기 바랍니다.

기술지원을 해준 투아이티씨솔루션(http://www.iitcsolution.com)의 김도겸씨에게 감사의 인사를 전합니다.

이만 ~

 

  1. AutoCAD P&ID 실행
  2. AutoCAD P&ID의 일반 도면 “Open”을 이용
     
  3. Open Dialog Box에서 반드시 추가(수정)할 Project 폴더로 이동하여 “projSymbolStyle.dwg” Open

  4. Command창에 “MLSTYLE” 명령 입력

  5. “Multiline Style”창에서 [New…] 실행

  6. “New Style Name”에 적당한 사용자 정의 명칭 부여 후 [Continue]

  7. “New Multiline Style : ???????”
    1. “Description” : 적당한 설명 문구 입력
    2. “Elements”의 라인 (기복적으로 두개)들의 설정값을 [Linetype]과 기타 설정 기능들을 활용 하여 변경
    3. 설정 반영 : [OK]
       
  8. “projSymbolStyle.dwg” [저장(save)]
  9. 해당 프로젝트 Open후 프로젝트명에서 Popup호출 후 “Properties” 실행(프로젝트 설정)

  10. “Project Setup”에서 “P&ID DWG Settings > P&ID Class Definitions > Engineering Items > Lines > Pipe Line Segments”로 이동 후 Popup Menu 호출 하여 [New] 실행
     
  11. “Create Class” Dialog Box를 이용한 설정
    1. “Class Name” : 유일한 값이어야 하며, 시스템에서만 인식되는 고유한 키값, 스페이스(띄어쓰기)와 특수문자를 제외한 값을 입력
    2. “Display Name of the Class” : 사용자가 알아보기 위한 값이며, 외부로 표시되는 이름
    3. [OK]

  12. 우측의 “Class settings : ~~~~”항목에서 “Line"의 [Edit Line…] 실행

  13. “Line Settings” Dialog Box를 이용한 설정
    1. “Show flow arrows” : 화살표 표시 여부(Pipe Line의 Flow(유체) 방향) (Default : No)
      => Yes
    2. “Flow arrow style” : 화살표 표시할 스타일 (Default : Flow Arrow Style)
    3. “Layer” : 도면 레이어 계층 설정 (Default : --- Use Current ---)
      =>”Process”로 지정하였으며, 알아서 레이어를 선택하시기 바랍니다.
    4. “Color” : 도면에 표시할 색상(Defalt : ByLayer)
      => “Blue”, 알아서 지정
    5. “Sline type: 도면에 표시할 Line Type (Default : Polyline)
      => “Mline”을 선택
    6. “Linetype” : (Default : Continuous)
      => 사용자가 작성한 스타일 선택
    7. “Line weight” : 라인 굵기 (Default : --- Use Current ---)
    8. “Tagging prompt: 라인 도면에 추가 시 자동 태킹 할지 선택(Default : Not a tagged component)
    9. “Gap priority” : Gap 값 설정, 0일 경우 추가 안됨… 0이상 입력(Default : 0)


  14. “Add to Tool Palette…”를 이용하여 팟레트에 추가
  15. “Project Setup”의 [Apply]와 [OK]를 눌러 설정 마무리
  16. Tracing Pipe Line Segment를 이용하여 확인

  17. 원하는 간격 또는 모양이 아닌 경우 “projSymbolStyle.dwg”에서 “MLSTYLE”을 이용하여 수정 후 저장하여 사용
    기존 MLType이 변경된 경우 해당 도면에서 “SYNCHSTYLES”을 이력하면 되나… 기존 스타일은 유지되고 새로 추가됨… 혹여나 잠재적인 버그가 있지 않을까 우려는 됨


 

출처 : 자작(userpark.net)

AutoCAD P&ID Loading을 빠르게…

대부분 별다른 방법은 없으며, 일단 빠르게 실행하기 위한 방법을 찾은 결과 현재는 두 가지 항목이나 추후 추가되는 내용 있으면 추가하겠습니다.

  • Q : Autodesk AutoCAD P&ID or Plant 3D를 실행하는데 초기 로딩이 상당히 느립니다.
    • A : 이점은 .NET으로 개발된 모든 응용프로그램에 해당 되며, 최초 로딩 한번은 느리나 그 다음 로딩은 빨라집니다.
      초기로딩 늦음에 대한 해결 방법이 따로 없으며, SSD 장착 하시기 바랍니다.(신세계를 경험하실 겁니다 ^^)

 

  • Q : AutoCAD P&ID or Plant3D의 프로젝트 Database를 Microsoft SQL Server로 이용 중인데 프로그램 로딩이 한 참을 멈추어져 있습니다.
    • A : 이 부분은 SQLite를 쓸 때는 없었던 문제이나, Microsoft SQL Server를 이용한 프로젝트를 마지막에 사용 후 재 가동 하였을 때 나타나는 버그로 보입니다.
      해결 방법은 AutoCAD P&ID 시작 전 “PnPLocalDataCachPurger.exe”를 실행 하여 주시기 바랍니다.
    • A : 배치파일(.BAT)을 생성하여 항상 시작 시 “PnPLocalDataCachPurger.exe”를 실행하는 파일을 생성 하십시요.
      Microsoft SQL Server든, SQLite를 이용하시던 무조건 아래 파일로 실행하시면 되겠습니다.
      MSSQL은 초기 실행 관련 딜레이 오류 해결과, SQLite사용시 외부에서 속성 변경 시 반영 안 되는 문제 두 가지 모두 해결 가능합니다.
      예) AutoCAD P&ID 2013기준(64bit, 32bit 환경에 따라 알아서 설정하시기 바라며, Window 64bit에 AutoCAD 32bit를 설정한 경우 빼고 OS와 AutoCAD 32, 64bit가 같으면 그대로 이용하시면 됩니다)

"C:\Program Files\Autodesk\AutoCAD P&ID 2013 - English\PnPLocalDataCachePurger.exe"
Pause
"C:\Program Files\Autodesk\AutoCAD P&ID 2013 - English\acad.exe"
exit

 

출처 : 자작(userpark.net)

 


참고 :

2012/09/26 - [S/W/Autodesk AutoCAD(s)] - [AutoCAD P&ID]Autodesk AutoCAD P&ID와 함께 배포되는 지원 프로그램 소개



Visual Studio에서 빌드(Build) 또는 디버그(Debug) 시에 발행하는 경고 오류가 하기와 같은 형식으로 발생할 경우 해결 방법

※ 경고라서 특별히 프로그램 실행하는데 문제는 안되나… 꺼림직해서…

경고    1    포함된 interop 어셈블리 'c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\EnvDTE.dll'에 대한 참조는 ‘~~~~~~~~~~~~~.dll' 어셈블리가 해당 어셈블리에 대해 만든 간접 참조로 인해 만들어졌습니다. 두 어셈블리 중 하나에서 'Interop 형식 포함' 속성을 변경하십시오.   ~~~~

경고    2    포함된 interop 어셈블리 'c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\EnvDTE80.dll'에 대한 참조는 ‘~~~~~~~~~~~~~.dll' 어셈블리가 해당 어셈블리에 대해 만든 간접 참조로 인해 만들어졌습니다. 두 어셈블리 중 하나에서 'Interop 형식 포함' 속성을 변경하십시오.    ~~~~~

상기 오류 발생한 경우 프로젝트 참조에서 해당 참조를 선택하여 “Interop 형식 포함(Embed Interop Types)”를 False로 변경한다.

   

출처 : 자작(userpark.net)

무지개참조 : http://documentation.devexpress.com/#WindowsForms/clsDevExpressSkinsSkinManagertopic

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace UserPark
{
    static class Program
    {
        /// <summary>
        /// 해당 응용 프로그램의 주 진입점입니다.
        /// </summary>
        [STAThread]
        static void Main()
        {
            //DevExpress 보너스 스킨 등록(활성화)
            DevExpress.UserSkins.BonusSkins.Register();
            //DevExpress.XtraEditors.XtraForm(SDI Form) 스킨기능 활성화
            DevExpress.Skins.SkinManager.EnableFormSkins();
            //DevExpress.XtraEditors.XtraForm(MDI Form) 스킨기능 활성화
            DevExpress.Skins.SkinManager.EnableMdiFormSkins();
           
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new TfrmMain());
        }
    }
}

Program.cs 파일에 Line 16~21 코드를 추가한다.

※ 반드시는 아니나…. 추천….

자세한 설명은 생략

  • Main 폼에 아래 소스 추가하면 스킨갤러리를 사용할 수 있다.
    • “DevExpress.XtraBars.RibbonGalleryBarItem” or “DevExpress.XtraBars.Ribbon.GalleryControl” 타입으로 “GalleryItemSkins”명으로 생성(추가) 하였을 경우 아래 코드를 소스에 추가하여 준다.
DevExpress.XtraBars.Helpers.SkinHelper.InitSkinGallery(GalleryItemSkins, true);

  • 스킨 종류 선언
    • Program.cs에 아래 소수 추가(“DevExpress Dark Style” 사용시)    ※반드시는 아니나…. 추천….
DevExpress.LookAndFeel.UserLookAndFeel.Default.SetSkinStyle("DevExpress Dark Style");
// or
DevExpress.LookAndFeel.UserLookAndFeel.Default.SkinName = "DevExpress Dark Style";

DevExpress.LookAndFeel.UserLookAndFeel.Default.UseWindowsXPTheme = false;

참조에 COM객체 “Windows Script Host Object Model”(1.0) 추가

 

   1: string fileName = @"Temp.lnk";
   2: string fileExt = Path.GetExtension(fileName);
   3: if (fileExt.Trim().ToLower() == ".lnk")
   4: {
   5:     IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
   6:     IWshRuntimeLibrary.IWshShortcut link = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(fileName);
   7:     fileName = link.TargetPath;
   8: }

출처 : 모름

<?xml version="1.0"?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>


혼합 모드 어셈블리는 런타임의 버전 'v2.0.50727'에 대해 빌드되며 추가 구성 정보 없이 '4.0' 런타임에 로드할 수 없습니다.
라는 오류가 발생할 경우
app.config 파일에 다음 설정을 입력한다.
<startup useLegacyV2RuntimeActivationPolicy="true">

참조 : http://social.technet.microsoft.com/Forums/en-US/ieitprocurrentver/thread/1342e167-8016-4a75-99bf-4d11d01d9bb1


Windows 7 64bit 환경 기준으로 레지스터리 값 수정하면 됨.

(첨부 파일은 또한 Windows 7 64bit 기준으로 작성 됨)

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework]

"EnableIEHosting"=dword:00000001


EnableIEHosting_Windows7_64bit.reg.zip


오늘에서야 알았다...

Springnote가 종료 된걸...

Springnote에서 내보내기로 한 글도 제법되는데...

관련 첨부파일 및 이미지 내용은 다 날아갔다...

저번주에 최종 종료되었고, 3-4개월전부터 공지를 한거 같은데...

난 왜 오늘에서야 알게되었을까..


여기에 내보내기 안한 것도 많은데...


더불어... 첨부파일과 이미지들... 어떻게 만드냐 ^^;;


덗두리 해 봅니다.

'잡답' 카테고리의 다른 글

SyntaxHighlighter 3.0.83 설치  (0) 2012.06.14
'나갈래' 외치는 고양이  (0) 2012.04.04
맘에 드는 게시판이 없는것 같다...  (3) 2009.01.06
강좌 만들기가 너무 귀찮아  (1) 2008.09.26
우애수  (0) 2008.08.13

DevExpress.XtraGrid.Views.Grid.GridView gv = sender as DevExpress.XtraGrid.Views.Grid.GridView;
if (gv.FocusedColumn.FieldName == "DIV_EXP_NO" && gv.ActiveEditor is GridLookUpEdit)
                        {
                            GridLookUpEdit lue = gv.ActiveEditor as GridLookUpEdit;
                            DataTable dt = lue.Properties.DataSource as DataTable;
                            DataView dv = new DataView(dt);
                            string strItem = gv.GetRowCellValue(gv.FocusedRowHandle, gv.Columns["ITEM_NAME"]).ToString();
                            dv.RowFilter = string.Format("ITEM_NAME='{0}'", strItem);
                            lue.Properties.DataSource = dv;
                        }

출처 : http://blog.happydong.kr/189

 

C#으로 개발을 하다보면 다양한 상황에서 디버깅을해서 처리 값을 확인해야 하는 일이 생긴다. Output Value를 확인하다든지... 정확한 값이 세팅되었다 든지..., 더미값(쓰레기값)을 세팅해서 프로그램을 테스트 한다던지... 등등의 여러가지 상황에서 디버깅 값을 확인해야 할 일들이 빈번하게 있기 마련이다. 그리고 이렇게 디버깅한 내용은 릴리즈 할때는 적용이 안되어야 하는 것이 맞다. 그래서 디버깅 코드를 짤때에는 디버그모드일때와 릴리지모드일때 실행되야할 코드를 적절히 나눠서 짜야한다. 이렇게 구분하기 위해서는  #if #endifConditional Attribute를 적절하게 사용하는 것이 좋다. 
처음 개발을 시작했을 때는 생각해보자!! 예전 같았으면 프로그램 소스를 짜면서 디버깅소스를 코드로 같이 짜고 디버그 모드(Debug Mode)에서 확인하고 필요없을때(릴리즈때)는 주석처리하면서 했을 것이다. 물론, 머리가 좋은 사람들은 이런식으로 처리안 했을 것이다. 그러나 프로그램을 처음 접하면서 배우는 것이 디버깅하는 방법보다, 주석을 먼저 배우기때문에 이런 불편한 방법을 사용하는 초보 개발자들이 몇몇 있을 것이다. 물론, 나도 처음 배울때 이랬다.

주석으로 처리하는 잘못된 예

/*  릴리즈때는 사용하지 않음.
            MessageBox.Show("Test");
  */

위 코드의 내용 처럼 릴리즈 모드(Release Mode)일때와 디버그 모드(Debug Mode)일때를 확인해서 처리해야하는 경우가 있다면 바보같이 주석처리해가면서 처리하지말고 #if #end와 Conditional Attribute를 이용하자!!

1. #if #endif 사용

이는 메소드 내부의 간단한 처리를 확인 할때 사용하는 것이 적절한 것 같다. 사용 방법은 아래와 같다.

private void InitializeView()
{

#if DEBUG
	// 처리된 결과의 값을 찍어 봅니다. 
	Debug.WriteLine("Value1");
	Debug.WriteLine("Value2");
#endif
}

#if #endif를 많이 사용하면 코드가 조금 지저분해 질수 있으니 적절하게 적당히 사용하는 것이 좋을 것 같다. 

 

 

2. Conditional Attribute 사용

이는 메소드 형태로 사용할수 있으면 빌드모드에 따라 해당 메소드를 호출할지 않할지를 결정할수 있다. 사용 방법은 아래와 같다.

Conditional Attribute

private void InitializeView()
{
	... 내용 생략...
	DebugMsg();
}
[Conditional("DEBUG")]
public void DebugMsg()
{
	MessageBox.Show("Conditional Test");
}

 

InitializeView메소드안에 보면 DebugMsg라는 메소드를 호출하고 있는데, 빌드모드가 디버그이면 해당 메소드를 호출할 것이고, 릴리즈일 경우 호출되지 않을 것이다. 그리고 Conditional은 다중 지정이 가능하다. 즉, [Conditional("DEBUG"), Conditional("TRACE")] 이런식으로 가능하다.

#if #endif와 Conditional Attribute를 적절히 사용하면 보다 깔끔한 코드, 디버그모드와 릴리지모드를 나눠서 코드를 정리할수 있을 것이다. 물론, #if #endif보다는 Conditional Attribute를 활용하는 쪽이 보다 깔끔한 소스를 짤수 있을 것이다. Conditional를 선언한 메소드들을 한클래스에 모아서 사용하는 것도 적절하다 볼수 있다.

참고 )
프로젝트의 프로퍼티(Properties)메뉴에 들어가, 빌드(Build) 옵션에서 해당 빌드모드의 내용을 체크할수 있다.

 

출처 : http://blog.happydong.kr/189

+ Recent posts