swfobject 오픈 소스 프로젝트로 진행중이다.
http://code.google.com/p/swfobject/

웹표준에 부합하지 않는 플래시를 좋아하진 않지만, 플래시를 어쩔 수 없이 써야하는 경우가 있다. 동적인 컨텐츠를 로드한다랄지 클라이언트에서 그렇게 원한다던지...

근데 Internet Explorer와 FireFox는 서로 다른 방식으로 HTML 태그(embed, object)를 사용한다. 그리고 그 파라미터는 복잡해서 매번 컨텐츠를 넣을때마다 외울 수도 없고 항상 찾아서 넣어야 한다. swfojbect를 사용하면 이러한 불편함을 줄일 수 있고, 태그를 잘못썼나 하는 고민에서 해방될 수 있다. 그리고 무엇보다 몇줄만 추가하면 되고 스펙에 정의된대로 뿌려줄 수 있기 때문에 매우 편리하다.


기존 플래시 가져오는 코드
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
  <head> 
    <title>SWFObject - step 3</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
    <script type="text/javascript" src="swfobject.js"></script> 
 
    <script type="text/javascript"> 
    swfobject.registerObject("myId", "9.0.115", "expressInstall.swf"); 
    </script> 
 
  </head> 
  <body> 
    <div> 
 
      <object id="myId" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="780" height="420"> 
 
        <param name="movie" value="myContent.swf" /> 
        <!--[if !IE]>--> 
        <object type="application/x-shockwave-flash" data="myContent.swf" width="780" height="420"> 
        <!--<![endif]--> 
          <p>Alternative content</p> 
        <!--[if !IE]>--> 
        </object> 
        <!--<![endif]--> 
      </object> 
    </div> 
  </body> 
</html>



swfobject 사용후 변경된코드

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
 
<head> 
   
<title>SWFObject dynamic embed - step 3</title> 
   
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
   
<script type="text/javascript" src="swfobject.js"></script> 
     
   
<script type="text/javascript"> 
    swfobject
.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0"); 
   
</script> 
 
 
</head> 
 
<body> 
   
<div id="myContent"> 
     
<p>Alternative content</p> 
   
</div> 
 
</body> 
</html>




swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0"); 

위 한줄로 쉽게 사용할 수 있다는게 매우 매력적이다.

저작자 표시 비영리 변경 금지
Posted by iHWAN

 

Zend Framework 가 1.10으로 업데이트 되었다.
작년 이맘때쯤 1.x 초반대였던것을 생각해보면 지난 일년간 꽤 많은 업데이트가 있었다.

재밌는것은 바코드 라이브러리가 들어있다는 사실과 LiveDocx에 대해서 지원한다는 점이다. 공식적으로 패키징되었다는게 매우 의미가 있는것 같다.

또한 Jquery에 대한 지원도 늘어났다는 점이 반갑다.
이전에 ZF에 탑재된 Dojo로 개발하다가 너무 느렸다. 그래서 가장 널리 쓰이는 Jquery로 갈아탔는데, 확실히 이전보다 낫다. 다양한 예제도 많고, 앞으로도 Jquery에 대한 지원을 늘려주면 좋겠다.

이전버전부터 Zend Framework와 Zend Server를 같이 패키지화 하고 있는데 한번 Zend Server도 사용해봐야겠다.

NEW FEATURES

* Zend_Barcode, contributed by Mikael Perraud and Thomas Weidner
* Zend_Cache_Backend_Static, contributed by Pádraic Brady
* Zend_Cache_Manager, contributed by Pádraic Brady
* Zend_Exception - previous exception support, contributed by Marc Bennewitz
* Zend_Feed_Pubsubhubbub, contributed by Pádraic Brady
* Zend_Feed_Writer, contributed by Pádraic Brady
* Zend_Filter_Boolean, contributed by Thomas Weidner
* Zend_Filter_Compress/Decompress, contributed by Thomas Weidner
* Zend_Filter_Null, contributed by Thomas Weidner
* Zend_Log::factory(), contributed by Mark van der Velden and Martin Roest ibuildings
* Zend_Log_Writer_ZendMonitor, contributed by Matthew Weier O'Phinney
* Zend_Markup, contributed by Pieter Kokx
* Zend_Oauth, contributed by Pádraic Brady
* Zend_Serializer, contributed by Marc Bennewitz
* Zend_Service_DeveloperGarden, contributed by Marco Kaiser
* Zend_Service_LiveDocx, contributed by Jonathan Maron
* Zend_Service_WindowsAzure, contributed by Maarten Balliauw
* Zend_Validate_Barcode, contributed by Thomas Weidner
* Zend_Validate_Callback, contributed by Thomas Weidner
* Zend_Validate_CreditCard, contributed by Thomas Weidner
* Zend_Validate_PostCode, contributed by Thomas Weidner
* Additions to Zend_Application resources, including Cachemanager, Dojo, Jquery,
  Layout, Log, Mail, and Multidb (contributed by Dolf Schimmel)
* Refactoring of Zend_Loader::loadClass() to conform to PHP Framework Interop
  Group reference implementation, which allows for autoloading PHP 5.3
  namespaced code
* Updated Dojo version to 1.4

http://www.zendframework.com/download/current/

저작자 표시 비영리 변경 금지
Posted by iHWAN
많은 웹 2.0을 지향하는 서비스들에는 구글(지메일) 연락처를 가져와서 서비스를 한번에 홍보하거나 친구로 등록할 수 있는 기능들이 있다. 

이를 휴팟에 구현하려고 하다가 그 난해함과 국내 자료가 부족하였다. OAuth도 공부하게 되었는데 문제는 구글에서 소개하는 PHP로 하는 방법을 사용하면 오류가 나고 공부해서 구현하려면 몇일은 그냥 까먹을거 같았다. 

결국 한 이틀을 구글링을 하면서 씨름을하다가 IBM Developerworks 에서 찾아냈다. 
PHP + Zend Framework 기반이라 사용하기도 쉽고, 서버에 따로 작업을 할 필요가 없다는 점이 장점이다.

PHP 애플리케이션과 Google Contacts 통합하기

요약:  Google Contacts Data API는 사용자의 개인용 Gmail 연락처 정보를 읽고 수정할 수 있는 강력한 클라이언트 중립적 API를 제공합니다. 애플리케이션 컨텍스트에서 이 API와 함께 사용자 정의 PHP 애플리케이션을 통해 연락처를 검색, 추가, 삭제 및 수정하는 방법에 대해 설명합니다.

구글 주소록 레퍼런스 
http://code.google.com/intl/ko-KR/apis/contacts/docs/3.0/reference.html
저작자 표시
Posted by iHWAN

울트라 나브 신형

개발 2009/10/06 17:42

http://tpholic.com/xe/2591180

http://tpholic.com/xe/2591180


기존에 윈도우 버튼의 부재로 팔아버린 울트라나브!

신형 울트라나브는 많은 단점을 보완해나왔다 ㅠㅠ
윈도우 버튼이 생겼다.
Esc, Delete 버튼이 커졌다.
키감이 향상되었다.

아.... 땡긴다.

그러나... 
한국 정발가격은 너무 비싸서 나중에 공구나 할때 고민해야할듯ㅋ



저작자 표시
Posted by iHWAN

Content-Disposition 은 컨텐트 타입의 옵션이다.
실제로 지정된 파일명을 지정함으로써 더 자세한 파일의 속성을 알려줄 수 있다.


2.1  The Inline Disposition Type

   A bodypart should be marked `inline' if it is intended to be displayed automatically upon display of the message.  Inline  bodyparts should be presented in the order in which they occur,  subject to the normal semantics of multipart messages.

"Content-disposition: inline"

브라우저 인식 파일확장자를 가진 파일들에 대해서는 웹브라우저 상에서 바로 파일을 자동으로 보여줄 수 있어서 의미상인 멀티파트 메시지를 표현하는데 있다. 그외의 파일들에 대해서는 "파일 다운로드" 대화상자가 뜨도록 하는 헤더속성이다.



2.2  The Attachment Disposition Type

  Bodyparts can be designated `attachment' to indicate that they are separate from the main body of the mail message, and that their display should not be automatic, but contingent upon some further action of the user.  The MUA might instead present the user of a bitmap terminal with an iconic representation of the attachments, or, on character terminals, with a list of attachments from which the user could select for viewing or storage.

"Content-disposition: attachment"

브라우저 인식 파일확장자를 포함하여 모든 확장자의 파일들에 대해,  다운로드시 무조건 "파일 다운로드" 대화상자가 뜨도록 하는 헤더속성이라 할 수 있다.

 http://www.ietf.org/rfc/rfc2183.txt 


출처: Content-disposition 속성


저작자 표시
Posted by iHWAN
One issue many people run into when using SWFUpload with Zend Framewok is that sessions are often lost in the upload process. Fortunately there is a way to prevent these incessant session-less side-effects.

The problem lies in the built-in security of the Session class. It tries to detect session hi-jacking by checking the User Agent before resuming a session. Normally this is good practice, however some browsers send a "Flash Player" User Agent when using SWFUpload, which results in lots of blood and mayhem as you could imagine.

Now, this is solution.

Upload Script (view)
<script type="text/javascript">
...
post_params:
   {
    "PHPSESSID": "<?php echo Zend_Session::getId()?>"
   },
...
</script>


Php session started In ZF controller.
So, this code input bootstrap before first line.

/application/bootstrap.php


/* swfupload session issue
 * http://swfupload.org/forum/generaldiscussion/1008 *
 */
if ($_POST['PHPSESSID'] && strpos($_SERVER['REQUEST_URI'], "/upload")!==false) {
 $_COOKIE['PHPSESSID'] = $_POST['PHPSESSID'];
}

"/upload" have to change your controller or controller/action patten. It prevents security issue.

It is not good solution. If you have good solution, you comment this article.

ref.
http://swfupload.org/forum/generaldiscussion/1008
http://blogs.bigfish.tv/adam/2008/04/01/cakephp-12-sessions-and-swfupload/
저작자 표시
Posted by iHWAN

crontab 설정 주기

개발 2009/05/04 17:04
유닉스, 리눅스에는 특정시간에 프로그램을 실행하게 하는 crontab 이라는 프로그램이 있다.

현재 목록을 보기 위해서는 crontab -l 목록을 수정하기 위해서는 crontab -e 명령어를 사용한다.

매 1분에 등록되는 프로그램은 아래와 같다.
01 * * * * /usr1/htdocs/program/bin/main_today_new_count.sh

시간 지정 방식은 아래 규칙으로 한칸씩 따른다.
#     minute (0-59),
#     hour (0-23),
#     day of the month (1-31),
#     month of the year (1-12),
#     day of the week (0-6 with 0=Sunday).


저작자 표시
Posted by iHWAN

사용자가 입력하는 유동적인 데이터 처리시 띄어 쓰기를 하지 않아서 의도하지 않게 텍스트가 밀려나온다던지, 의도하지 않는 크기 이상으로 부모 컨테이너가 밀려 나오는 경우가 있다.

IE에서는 word-wrap: break-word;이라는 CSS가 있어서 이전부터 사용해왔었고, 많은 곳에서 이것만을 사용하고 프로그램 로직에서 스페이스를 주는 트릭을 사용한다.

그러나 FireFox나 Opera에서도 이를 해결할 수 있는 방법이 있는데, white-space를 이용하여서 줄바꿈이 가능하도록 하는 구문이다.

#wordwrap{
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
}

저작자 표시 비영리 변경 금지
Posted by iHWAN

MS Project 2007 에서 가장 쉽지 않은게, 작업간의 의존관계를 정하는 일이다.

이 의존관계에 따라서 작업의 순서를 정할 수 있다. 기본적으로 이 4가지의 의존관계를 알고 있어야만 프로젝트를 제대로 사용 할 수 있다.


Project에서는 기본적으로 완료 후 시작 연결 (연결: 프로젝트에서 작업 간의 의존 관계를 설정하는 것입니다. 작업을 연결하면 작업의 시작 날짜와 완료 날짜 사이에 의존 관계가 설정됩니다. OLE에서 프로그램을 서로 연결하면 한 문서에서 데이터가 변경될 때마다 다른 문서의 데이터가 업데이트됩니다.)로 작업을 연결하지만 모든 경우에 완료 후 시작 연결을 적용할 수 있는 것은 아닙니다. Project에서는 프로젝트를 현실적으로 모델링할 수 있도록 여러 가지 종류의 작업 연결이 제공됩니다.




완료후 시작 (FS)


작업 B는 작업 A에 의존하고 있으며 작업 A가 완료되어야 시작할 수 있습니다.

예를 들어 "기초 공사"와 "콘크리트 타설"이라는 두 가지 작업이 있을 경우 "콘크리트 타설" 작업은 "기초 공사" 작업이 완료되어야 시작할 수 있습니다.

 

동시 시작(SS)


작업 B는 작업 A에 의존하고 있으며 작업 A가 시작되어야 시작할 수 있습니다.

이 경우 한 작업이 시작되면 아무 때나 그 작업에 의존하는 작업을 시작할 수 있습니다. SS 연결 종류에서 두 작업을 반드시 동시에 시작할 필요는 없습니다.

예를 들어 "콘크리트 타설"과 "콘크리트 고르기"라는 두 가지 작업이 있을 경우 "콘크리트 고르기" 작업은 "콘크리트 타설" 작업이 시작되어야 시작할 수 있습니다.


동시 완료(FF)


작업 B는 작업 A에 의존하고 있으며 작업 A가 완료되어야 완료할 수 있습니다.

이 경우 한 작업이 완료되면 아무 때나 그 작업에 의존하는 작업을 완료할 수 있습니다. FF 연결 종류에서 두 작업을 반드시 동시에 완료해야 할 필요는 없습니다.

예를 들어 "배선"과 "전기 점검"이라는 두 가지 작업이 있을 경우 "전기 점검" 작업은 "배선" 작업이 완료되어야 완료할 수 있습니다.



 시작 후 완료(SF)

작업 B는 작업 A에 의존하고 있으며 작업 A가 시작되어야 완료할 수 있습니다.

이 경우 한 작업이 시작되면 아무 때나 그 작업에 의존하는 작업을 완료할 수 있습니다. SF 연결 종류에서 한 작업의 시작 시점이 그 작업에 의존하는 작업의 완료 시점과 같아야 할 필요는 없습니다.

예를 들어 건축 프로젝트에서 지붕 트러스를 부지 밖에서 시공하는 경우를 가정하면 프로젝트의 두 가지 작업은 "트러스 운송"과 "지붕 조립"이 됩니다. 이때 "지붕 조립" 작업은 "트러스 운반" 작업이 시작되어야 완료할 수 있습니다.



출처: 프로젝트 내에서 작업 의존 관계(연결) 만들기

저작자 표시 비영리 변경 금지
Posted by iHWAN


"저희 베타스튜디오는 YLC라는 동아리에서 만난 두 개발자의 만남으로 시작하였습니다."

 수천명의 동아리  지원서를 이메일로 처리하는 것은 너무 힘든 작업이였습니다. 이를 쉽게 할 수 없을까? 라는 고민으로 온라인 지원 시스템을 개발하였습니다. 그리고 그 두 개발자는 이 시스템을 다른 동아리에게도 유용하게 사용할 수 있도록 체크원이라는 지원 시스템을 여러 사람에게 개방하였습니다. (http://blog.checkone.org/entry/체크원-생각)

이를 회사로 만들고 싶은 두 사람은 여러 창업 경진대회와 VC에게도 아이템이 널리 사용되기 어렵다 라는 평을 들었습니다. 게다가 두명이서 개발과 홍보 영업 등을 하기에 너무 벅찼고, 결국은 몇 군데 단체만 사용하였습니다.




우리의 시스템을 더 많은 사람들이 이용할 수 있지 않을까? 라는 생각으로 우리의 꿈을 같이 할 팀원의 필요성과 보다 많은 사람들이 사용할 수 있는 서비스를 만들어야 한다고 생각하였습니다.


그리고 베타스튜디오를 설립하였습니다.
함께할 팀원을 찾고 찾아서 디자이너, 홍보담당, UI, 개발자를 곳곳에서 찾아다녔습니다.(베타스튜디오 팀소개) 우리의 꿈을 같이 할 사람들을 구했고, 보다 많은 사람들이 사용할 수 있는 서비스를 만들기 위해 많은 고민을 하였습니다. 

저희는 "개인화되고 협력할 수 있는 서비스"를 생각했습니다. 그리고 팀플에대한 고민을 했습니다. 팀플을 하려기에 개인이 사람을 찾기가 너무 힘듭니다. 대표 커뮤니티등에서 자유게시판에 글을 써서 모으는 방식이 거의 유일합니다. 그러나 그런 커뮤니티에 방문하지 않는 사람들은 볼 수도 없습니다.

  1. 블로거들이 팀 블로그를 운영하고 싶은데, 같이 쓰고 싶은사람 찾기.
  2. 밴드를 만들고 싶은 사람이 같이 하고 싶은 사람 모으기.
  3. 토익공부를 하고 싶은데, 같이 스터디를 하고 싶은 사람 모으기.
  4. 등등등...


다양한 곳에서 같이 할 사람들을 찾아야할 니즈는 많이 가지고 있습니다. 그래서 이를 한곳에서 해결 할 수 있는 서비스를 하려고 합니다. 나아가 그 팀이 발전할 수 있도록 MS쉐어포인트와 비슷한 컨셉의 협업 도구등을 제공하여 그 팀의 성공을 위해서 보조 할 수 있는 플랫폼을 생각했습니다. 저희는 체크원에서 얻은 시행착오와 몇번의 기획서와 개발의 시행착오를 통해서 이번에 휴팟이라는 서비스를 클로우즈 오픈할 예정입니다.



저희의 꿈과 비젼이 아직은 미약합니다. 사무실도 없고, 제대로된 밥한번 먹기 힘들지만 팀원간의 서로서로 끈끈한 팀웍과 각자의 열정은 어떤 팀에도 못지 않습니다. 

저희의 노력을 지켜봐 주십시요.



----

떡이떡이님의 IT Viewpoint(벤처가 힘입니다…'LG넷북+정품백신'을 떡이떡이가 쏩니다)의 이벤트로 저희 휴팟의 과거와 현재 그리고 미래에 대해서 정리 해보게된 계기가 되었습니다.

저희 팀에는 홍보담당이 노트북이 없습니다. 사무실이 따로 없기 때문에 외부에서 메신져나 스카이프로 회의하기가 힘들고, 다른사람에게 소개 하기에도 힘듭니다. 저희 베타 스튜디오가 이벤트에 당첨된다면 정말 유용하게 사용되고, 저희 팀의 사기도 올라갈 것입니다. 감사합니다.

저작자 표시 비영리 변경 금지
Posted by iHWAN