임신을 하면 태아에게 좋지 않은 음식이나 약물을 삼간다. 심지어는 예쁜 아기를 낳기 위해 예쁘고 색깔이 고운 과일만 골라 먹고, 혹시 아기 피부가 닭 껍질처럼 될까봐 닭고기를 먹지 않는 사람도 있다. 음식의 모양과 태아의 건강과는 전혀 상관이 없지만 예쁘고 건강한 아기를 낳으려는 마음이 이런 풍습들을 만들어낸 것 같다. 임신 중에 태아를 위해 정성을 기울이듯이 임신을 준비하는 동안에도 먹는 것을 조심해야 한다. 난자에 좋지 않은 영향을 미치는 음식, 몸을 차갑게 만드는 음식, 자궁을 비롯해 생식기관을 약하게 만드는 음식들을 멀리 하면 건강한 아기를 맞이하기가 좀 더 수월해질 것이다.

 -차가운 음식을 먹지 않는다
몸이 차면 임신이 잘 안 된다. 음식 자체의 성질이 차가워서 먹으면 몸의 열을 내려주는 음식이나 우유, 아이스크림, 빙과류 같이 찬 음식은 모두 좋지 않다. 찬 성질을 갖고 있는 음식들은 보리밥, 돼지고기, 오징어, 밀가루 식품, 냉면, 참외, 수박, 파인애플 등이 있다. 요즘에는 반찬을 대부분 냉장고에 보관했다가 꺼내 먹는데, 차가운 상태로 먹지 말고 따뜻하게 데워 먹는 것이 좋다.

 -독성이 있는 기호품을 피한다
담배는 백해무익하다. 담배의 수백여 가지 독성 물질은 혈관을 수축시켜 자궁과 난소에 영양과 산소가 제대로 공급되지 못하게 막는다. 따라서 흡연을 하면 건강한 난자를 만들지 못하고, 자궁도 허해진다. 임신을 원한다면 두말할 것도 없이 절대 금연해야 한다.
술 역시 좋지 않다. 술을 잘 마시면 약이 된다는 말이 있어 술은 담배보다는 해악이 덜한 것으로 알고 있는 사람들이 많은데, 이는 잘못된 생각이다. 술의 성분인 알코올은 난자의 노화 속도를 가속화시킨다.

 -패스트푸드를 먹지 말자
편하게 먹을 수 있는 것일수록 임신을 방해한다. 물만 부으면 먹을 수 있는 컵라면, 뚜껑만 따면 간편하게 먹을 수 있는 캔과 통조림에는 각종 첨가물과 합성 착색료, 나트륨 등이 많이 함유되어 있어 건강에 아주 좋지 않다. 청량음료, 과자도 마찬가지다. 이런 음식들은 불임은 물론 각종 암을 일으키는 위험 요인임을 잊어서는 안 된다.

 -기름진 음식을 먹지 않는다
삼겹살, 튀김, 버터, 치즈 같은 기름진 음식은 혈액 내의 콜레스테롤과 지질의 농도를 증가시킨다. 결국 혈액이 끈적거리고 탁해져 혈액 순환이 잘 안 되고, 혈관 벽에 찌꺼기가 많이 붙어 혈관이 좁아져 고혈압, 심장병, 동맥경화증 같은 성인병이 생기기 쉽다. 또한 열량이 높기 때문에 비만, 특히 복부비만을 초래하는 원인이 된다. 비만이 불임을 유발할 수 있는 요인이라는 것은 이미 여러 번 언급했다. 살이 찌면 그만큼 불필요한 노폐물이 많이 축적되어 몸을 습하게 만들고, 혈액 순환이 잘 되지 않아 성기능을 관장하는 신장과 자궁, 난소 같은 생식기관을 약하게 만든다.

Posted by 알 수 없는 사용자
,
토마토, 시금치, 포도주, 견과류, 브로콜리, 귀리,  연어, 마늘, 녹차, 머루를

10
대 건강식품으로 선정했다.
권위있는 학자들이 오랜 기간 연구해서 건강에 가장 도움이 되는 식품으로 선정한 것이다.

비타민이나 미네랄 같은 자연 화합물이 충분히 들어있어 각종 질병을 효과적으로 치유해 준다고 알려진 이들 식품의 영양학.



▽ 시금치

  



칼슘과 철분이 많아 성장기 어린이들의 발육과 영양에 좋다.  철, 비타민 B, 아미노산 등이 풍부하게 들어있어 아이들의 신경계통 손상을 막아준다.

또 어른에게는 심장병과 관계가 깊은 혈관에 염증이 생기는 것을 막아준다. 특히 시금치 뿌리는 많은 영양분을 함유하고 있으므로 조리 할 때 뿌리까지 이용하는 것이 좋다.

변비 예방에 효과적인 미용식품이기도 하다.




▽ 귀리 (대용식품 보리)

  

섬유질이 풍부한 귀리는 그대로 먹기 힘들기 때문에 오트밀 등으로 가공해 먹는 경우가 많다.

귀리에 많이 들어있는 칼륨은 고혈압, 심장병에 효과가 있어  콜레스테롤을 제거하고 혈압을 낮추는 효과가 탁월하다. 콩과 우유 등에 섞어 먹으면 특히 좋다.

식물성 섬유가 풍부하게 들어있어 뚱뚱한 사람들의 다이어트 식품이나 변비예방식으로 좋다.   귀리를 대신해 보리를 먹어도 같은 효과를 준다.



▽ 마늘

  

마늘에 들어있는 알리인, 스코르진, 알리신등의 성분은 항세균 화합물로 페니실린보다 강력한 항생물질임이 밝혀졌다.

만병통치약으로 알려진 마늘은 심장병 예방과 항박테리아, 항곰팡이, 종양 성장 억제 작용에 탁월한 효과가 있다. 혈액중 콜레스트롤을 낮추고 혈액순환을 원활하게 해 심혈관계 질환에 이로운 식품이다.

마늘에 들어있는 알리신은 두뇌발달을 도와준다. 또 혈액순환을 왕성하게 하여 기미, 주근깨 , 잔주름 등의 예방에도 효과적이다.



▽ 견과류
  


잣, 땅콩, 호두, 아몬드 같은 견과류는 노화와 심장 질환 예방 효과가 있으며 피부미용에도 좋다. 두뇌 발달에 좋은 필수지방산이 풍부하므로 어린아이들이 많이 먹으면 좋다.

또한 고도 불포화 지방산이 많아 동맥경화증의 원인이 되는 나쁜 콜레스트롤을 낮추어주고 해로운 콜레스트롤을 없애주는 좋은 콜레스트롤을 높여 심장질환을 막아준다.

견과류에 들어있는 엘라직산은 암자살 세포를 활성화시켜 암의 진행을 방해하여 암환자들에게 좋다고 알려져 있으며 비타민 E가 많아 노화 억제와 항암효과를 갖는다.



▽ 붉은 포도주

  

적당량의 붉은 포도주를 마시면 심장병을 예방하고 암 발병률을 낮춘다.  프 랑스인이 다른 서구인에 비해 심장 질환에 덜 걸리는 이유 중 하나는 포도주를 꾸준히 섭취하기 때문이라고 한다.

포도껍질에는 노화를 방지하는 성분도 들어있다.  껍질의 자주색 색소가 강력한 항암작용을 하고 포도주의 떫은 맛을 내는 성분인 탄닌을 비롯한 폴리페놀성분이 몸에 유익한 콜레스트롤을 활성화시키며 혈관을 경직시키는 펩타이드 생성도 막아준다. 



▽ 브로콜리 (대용식품 양배추)

  

칼슘과 비타민 C를 다량 함유한 브로콜리는 살짝 데쳐 먹으면 좋다.  설포라페인이 들어있어 유방암·대장암·위암 발생을 억제하는 효과가 뛰어나다.  베타 카로틴, 섬유질, 비타민 C가 풍부해 면역력을 키워주고  피부를 아름답게 해준다.

브로콜리는 색이 선명하며 봉오리가 단단하게 뭉쳐있고 줄기에 구멍이 나있지 않은 것이 싱싱하다.



▽ 머루 (블루베리)  (대용식품 - 가지)


  

블루베리의 보라색인 안토시아닌계 색소는 동맥에 침전물이 생기는 것을 막아 심장병과 뇌졸증을 막아준다.  블루베리에는 바이러스와 세균을 죽이는 성분이 들어있다.  가지의 보라색도 같은 효과를 갖고 있다.

야채와 과일 중 항독물질을 가장 많이 함유하고 있어 피를 맑게 만들어준다.

알칼리성 식품으로 칼슘과 인이 다량으로 들어있어 어린이의 성장발육과 여성들의 피부미용에도 좋다. 동양에서는 줄기와 뿌리를 약재로 이용하기도 한다.



▽ 녹차

  

비타민 C보다 1백배나 강한 항독작용을 가진 폴리페놀이 다량 들어있어 종양발생을 초기에 억제한다. 위, 간, 심장 등의 질환 예방에 탁월한 효과가 있고 각종 암의 예방효과가 뛰어나다. 또 성인병과 노화를 촉진하는 과산화 지질의 생성을 억제하고 혈액 중의 콜레스테롤을 줄이는 작용이 있다. 담배의 니코틴을 줄이는 작용도 있으므로 흡연자에게 좋은 식품.

차의 쓴 맛과 떫은 맛 성분은 위장 점막을 보호하고 위장운동을 활발하게 해준다.  녹차를 매일 서너잔씩 마시면 심장질환을 억제하고 암 발병을 낮출 수 있다는 연구 보고서가 여러개 나와있다.



▽ 토마토

  

토마토는 피로를 회복시켜 주는 가장 대표적인 식품 중의 하나이다. 카로틴의 전구체인 라이코파인이 풍부하게 들어있어 전립선암과 소화기 계통의 암을 예방하는 데 특히 효과적이다.

감기 바이러스와 스트레스에 대한 저항력을 높여주는 비타민 C도 풍부해 토마토 두개만 먹으면 성인이 하루 필요한 비타민 C를 모두 충족시킬 수 있다.  다른 과일에 비해 칼로리가 낮아 다이어트 하는 사람도 안심하고 먹을 수 있다.

육식이나 산성식품을 먹은 후 토마토를 곁들이면 위 속에서의 소화를 돕고 산성식품을 중화시켜 준다. 또 골다공증과 치 매 예방에도 효과가 있는 것으로 알려져 있다.



▽ 연어 (대용식품 고등어)



  

미식가들 사이에서 인기 높은 생선 중의 하나인 연어. 연어 속에 함유된 지방산(오메가 3)은 류머티즘 루프스로 알려진 면역 결핍 질환을 막아준다.

비타민 A가 풍부하여 감기에 잘 걸리거나 눈이 쉽게 피로해지는 사람, 피부가 건조한 사람에게도 좋다.

고등어는 오메가 3계 지방산인 DHA 함유량이 연어의 두배에 가깝다. 

DHA는 기억력과 학습능력 유지 효과가 있어 같은 학습을 하더라도 DHA가 있으면 뇌세포가 부드러워지고 활성화 되어 정보 전달이 쉽게 되고 노인성 치매를 예방할 수 있다.
Posted by 알 수 없는 사용자
,
 
사용자 삽입 이미지
» 엄마와 아기의 경계선, 태반의 신비
다음 조건을 만족하는 인체 기관은 무엇일까? ① 여성에게만 있다. ② 일정 기간만 존재하다가 없어진다. ③ 지름 20cm, 두께 2.5cm의 원반 모양이다. ④ 약이나 화장품의 재료로 쓰인다. ⑥ 두 사람의 세포가 섞여 만들어진 기관이다.

아마 아이가 있는 분이 쉽게 맞췄을 것이다. 질문의 답은 태반(placenta)이다. 태반은 자궁에 연결된 원반 모양의 기관으로 중앙의 탯줄이 태아의 배꼽과 연결돼 있어 산모와 태아를 직접적으로 잇는다. 아이가 출산하면 함께 배출되는 태반은 여러 면에서 일반 기관과 다른 독특한 특성을 갖고 있다. 산모와 태아의 경계선, 태반의 비밀을 벗겨보자.

정자와 난자가 만나 수정란이 되면 세포분열을 하면서 이동하다 자궁 내벽에 파묻힌다. 이를 착상이라고 한다. 그리고 착상이 일어난 지점에서 수정란과 자궁에 분화가 일어나 태반이 만들어지기 시작한다. 수정란의 일부가 자라서 물질 전달을 담당하는 융모막으로 변하고, 자궁의 일부는 태반의 가장 바깥 부분을 둘러싸는 탈락막으로 변한다. 즉 태반의 절반은 태아에서, 절반은 산모에서 왔다는 얘기다.

■ 태아의 든든한 보호막

태반은 태아가 자라는데 필요한 핵심적인 기능을 담당한다. 가장 중요한 기능은 산모와 태아의 물질 교환이다. 산모의 산소와 양분을 태아로 전달하고, 태아의 이산화탄소와 노폐물을 산모에게 전달한다. 이때 핵심은 산모의 혈액과 태아의 혈액이 섞이지 않는다는 점. 산모의 혈관과 태반의 혈관 사이에는 조직액이 있어 이 둘을 분리한다. 태반이 꼭 필요한 것만 걸러 보내는 필터 역할을 하는 셈이다.

덕분에 산모의 면역체계가 태아를 공격하지 않는다. 우리 몸의 면역체계는 자신이 아닌 것을 공격하도록 돼있다. 만약 산모의 혈액이 태아에게 직접 전달된다면 혈액 속의 항체와 식균세포들은 태아의 세포를 공격해 죽일 것이다. 또 혈액이 섞이지 않기 때문에 산모가 세균에 감염돼도 태아는 안전하다. 흥분 상태를 만드는 아드레날린 같은 호르몬은 태반을 통과하면서 그 활성이 없어지기도 한다. 이처럼 태반은 태아에게 든든한 방어막이 된다.

하지만 태반이 모든 물질을 걸러내는 것은 아니다. 지용성으로 크기가 작은 분자들은 태반을 쉽게 통과할 수 있다. 대표적인 예가 니코틴, 알코올이다. 만약 산모가 흡연을 하거나 음주를 하면 니코틴과 알코올은 태반을 유유히 통과해 태아에게 그대로 전달된다. 또 세균은 통과하지 못하나 이보다 작은 바이러스는 태반을 통과할 수 있다. 풍진, 수두 등이 대표적이다. 따라서 결혼한 여성은 자신이 아이를 갖기 전에 이들 바이러스에 대한 항체가 있는지 검사해야 한다.

■ 산모와 태아에 필수 물질 분비

태반의 역할은 물질 교환에 그치지 않는다. 태반은 태아가 아직 몸의 기관을 제대로 갖추지 못했을 때 그 기관들의 역할을 대신한다. 우리 몸에서 간은 포도당을 글리코겐으로 바꿔서 저장했다가 에너지가 급히 필요할 때 내보낸다. 태아에서 간이 만들어지기 전까지 태반이 이 역할을 대신한다. 태반 덕분에 태아는 산모의 영양 상태가 들쭉날쭉해도 비교적 안정적으로 영양분을 공급받을 수 있다.

뇌하수체를 대신해 태아의 뇌 발달을 촉진하기도 한다. 태아의 뇌는 임신 24~28주 사이에 발달하는데 이때 뇌를 활성화시키는 신경전달물질이 중요한 역할을 한다. 산모의 뇌하수체에서 분비된 호르몬과 신경전달물질 중 일부는 태반을 통해 태아에게도 전달된다. 예를 들어 산모가 기분 좋을 때 분비되는 도파민은 태아에게도 전달돼 태아를 기분 좋게 하고 뇌 세포를 활성화 한다.

또 태반은 산모가 임신 동안 필요한 호르몬을 직접 생산해 산모 쪽으로 분비한다. 임신 초기에 나오는 융모성선자극호르몬은 황체 퇴화를 막아 프로게스테론과 에스테론을 분비하게 한다. 프로게스테론과 에스테론은 자궁 내막을 유지시켜 유산을 막고, 모유 수유를 위해 유선을 발달시키는 등 임신 동안 매우 중요한 호르몬이다. 이 융모성선자극호르몬이 임신 초기 입덧을 유발하는 원인으로 알려져 있다. 임신 4개월이 되면 태반에서 직접 프로게스테론을 분비하기 시작한다.

■ 과학자들이 태반에 주목하는 이유

다양한 역할을 하는 만큼 태반에는 태아가 성장하는데 필요한 모든 것이 담겨 있다. 영양분과 호르몬은 물론이고, 간세포증식인자(HGF)나 신경세포증식인자(NGF) 같은 성장인자와 세포증식에 관련된 사이토카인도 들어있다. 의학계에서는 이 같은 사실에 주목해 오래 전부터 태반을 의약품으로 쓰고 있다. 기원전 4세기 히포크라테스가 태반의 효능에 대해 언급한 바 있고, 우리나라의 허준의 동의보감에도 태반의 기능에 대한 설명이 있다. 임상실험 결과 피부 미용과 통증 치료에 효과가 있고, 고혈압, 당뇨병, 관절염 등에도 효과가 있는 것으로 나타났다.

현재 국내에는 치료목적으로 갱년기 장애와 간질환 환자에게 태반 의약품이 허가돼 있다. 태반 추출물을 살균해서 가공한 제품이다. 그러나 태반은 여러 물질이 섞여있는 혼합물로 아직 각각의 성분이 어떤 기능을 하는지 정확히 밝혀지지 않은 상태다. 따라서 부작용이 있을 수 있고, 태반을 추출한 산모의 건강 상태에 따라 약효에도 차이가 날 수밖에 없다.

태반에는 최근 주목받는 줄기세포도 들어있다. 특히 탯줄과 태반 안의 혈액을 ‘제대혈’이라고 하는데 이 속에 태아의 줄기세포가 다량 들어있다. 태반의 탈락막에는 산모의 줄기세포가 있다. 줄기세포는 모든 세포로 분화가 가능한 세포로 손상된 조직에 넣어주면 치료 효과가 크다. 태반의 줄기세포를 보관해 두면 장차 산모와 아이가 질병에 걸렸을 때 이용할 수 있다.

■ 기생충 흉내 내는 태반

지난 11월 10일에는 산모와 유전적 구성이 다른 태반이 산모의 면역체계에 의해 공격받지 않는 이유가 밝혀졌다. 태반이 살아남는 이유는 기생충의 전략과 비슷하다. 기생충 세포의 표면에는 포스포콜린이라는 분자가 있다. 이 분자는 사람의 면역체계를 속여 마치 기생충을 자신의 일부처럼 받아들이게 한다. 덕분에 기생충은 사람의 몸속을 돌아다니면서도 면역체계의 공격을 받지 않을 수 있다. 영국 리딩대 필 로우리 박사는 태반이 기생충처럼 자신을 위장해 면역의 공격으로부터 피한다고 말했다. 태반에서 합성되는 대부분의 단백질에는 포스포콜린 분자가 달려있다.

태반이 면역체계를 피해 산모의 몸과 하나가 되는 이유를 완전히 밝힌다면 의학계의 오랜 난제를 해결할 수 있다. 장기이식에서 가장 큰 문제는 체내의 면역체계가 기껏 이식한 장기를 타인으로 판단해 죽이는 데 있다. 자가면역질환도 비슷하다. 면역체계가 어떤 이유에서인지 자기 조직을 타인으로 인식해 공격해서 생기는 병으로 류머티즘관절염이 대표적이다. 태반의 비밀이 풀린다면 장기이식과 자가면역질환 치료에 결정적인 해법을 제시할 것으로 보인다.

예전에 불결한 것으로 여겨 버려졌던 태반은 오늘날 현대 의학이 해결하지 못하는 질병을 치료할 대안으로 떠오르고 있다. 태반의 신비가 밝혀져 난공불락으로 남아있던 질병들이 차례차례 극복되기를 기대해 본다. (글 : 김정훈 과학칼럼니스트)

과학향기 출처 : KISTI의 과학향기

Posted by 알 수 없는 사용자
,


예전에 만든거라 이제 소스도 없어지고 EXE 실행화일만 남았네요. (소스없음 ㅜ.ㅜ)

이 프로그램은 관리자(상담원)과 1:1 상담 목적으로 만든 프로그램입니다.
간단히 이야기하면.. 대화방 기능이 없는 채팅이지요.

사용중인 홈페이지 : http://www.mindcrony.com/

* 잡설..

채팅은 서버에 부하를 줍니다. 하지만, 이 프로그램은 서버가.. 바로
개인 컴퓨터이랍니다 ^^... 그래서 홈페이지 서버 부하랑은 별도~~~

쇼핑몰이나 이런곳에 적용하면 괜찮을 듯 하네요.

* mindcrony_chat.exe 프로그램

2024 포트를 사용합니다. (외부에서 접근 가능하도록 세팅해주셔야합니다.)
연결 후 동적으로 계속 연결되면서 관리자의 글을 전송해줍니다.

AJAX 통신으로 들어온 대화내용과 사용자 ip:port:cookie 으로써, 해당 채팅창에
뿌려줍니다.

* 홈페이지 설치 방법

<iframe name='chat_windows' src="http://아이피:2024/conn?사용자이름" width="430" height=410 frameborder='0' topmargin='0' leftmargin='0' marginwidth='0' marginheight='0' scrolling=no></iframe>

이렇게 설치하시면, 아래처럼 창이 나오게됩니다. 물론 index.txt 화일 수정하면,
마음대로 변경가능합니다.

사용자이름 역시 제로보드나 이런 회원프로그램과 연동이 가능합니다.
저 같은 경우에는 싸이월드 미니홈피를 홈페이지 연결시켜, 방문자추적&대화이름
나오게 해버렸습니다 클럭;;ㅋㅋ





* 프로그램 동작 화면.

사용자 삽입 이미지
 

* 디자인 변경 방법

같이 첨부한 index.txt 화일 내용을 수정해주시면 됩니다.

* Copyright ?

index.txt 를 보시면, 길호님의 일부 소스가 첨부되어있습니다.
길호님의 상담프로그램을 참고해서 만든거라 .. ^^ㆀ


출처:http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=57630&page=1
Posted by 알 수 없는 사용자
,


<?
# 특징: 본문 중에 나타난 모든 욕들을 한꺼번에 콤마로 구분하여 리턴

# 방법: 속도를 고려하여 전진방식의 매칭으로 처리
# 매칭할 단어들을 배열A에 저장해 놓는다.
# 함수로 위 단어의 첫글자를 따로 배열B로 만든다.
# 본문을 한글자씩 전진하면서 그 글자랑 매칭되는 문자가 있는지 B배열을 채크한다.
# B배열은 A배열에서 그 문자로 시작하는 첫 단어의 index를 가지고 있으며
# A배열의 그 위치부터 현재 문서 위치의 문자열이랑 비교를 하는데,
# 문자열 비교를 위하여 문서로부터 단어 최대길이만큼 짤라서 비교를 한다.
# 저작권: 니맘 대로 하세요.

# 필터링할 단어들. 정렬되어 있어야 한다.
# 심한 욕들이 있어서 첨부파일로 넣었습니다.
include "words_text.php";

# [수집된 단어의 첫 2바이트] => 그 글자가 처음 나오는 단어의 인덱스
#
function get_indexOfWords(&$words)
{
  $arr= array();
  $ch_old=0;
  foreach($words as $k=>$v){
    $ch= $v{0}.$v{1};
    if ($ch_old==$ch) continue;

    $ch_old=$ch;
    $arr[$ch]= $k;
  }
  return $arr;
}

# 상수
# 배열값 중에서 가장 긴 길이와 같거나 더 길면 됨. 정확하지 않아도 무방..
# 왜냐면, 본문 중에서 비교할 문자열을 적당히 짜를 용도이므로
define('MEX_WORD_LEN', 10);

function fuck_match (&$words, $str)
{
  $RET_WORDS= array();
  $char2idx= array();

  $char2idx= get_indexOfWords($words);
  $num_words= sizeof($words);
  $len_str= strlen($str);

  $han_flag=0;
  for ($i=0; $i<$len_str; $i++){
    if ($han_flag){      # 한글의 두번째 바이트 차례는 건너뜀
      $han_flag=0;
      continue;
    }
    $ch= $str{$i};
    if (127 < ord($ch)){
      $ch.= $str{$i+1};  # 한글이면 2바이트를 1글자로 처리
      $han_flag=1;
    }

    if (! isset($char2idx[$ch]))  # 첫글자가 일치하는 단어의 인덱스가 없으면 건너뜀
      continue;

    $str_part= substr($str, $i, MEX_WORD_LEN);  # 본문 중에 비교할 부분 문자열

      // echo "@$i@ 단어의 첫글자 일치의 경우  ($str_part == {$words[$char2idx[$ch]]})<br>";

    $match_word= '';
    for($j=$char2idx[$ch]; $j< $num_words; $j++){
      if (strpos($str_part, $words[$j])===0) # 단어가 완전히 포함되면
        $match_word= $words[$j];            # 임시저장
      if ($str_part<= $words[$j]){    # 단어가 비교 문자열보다 커지는 순간에 탈출
        if ($match_word!='')
          $RET_WORDS[]= $match_word;  # 그 순간의  임시 단어 수집
        break;
      }
    }
    if ($match_word && $j==$num_words){
    // echo "@$i@ 정렬에 문제가 있어서 저장 못하고 지나왔다면? ($match_word)<br>";
      $RET_WORDS[]= $match_word;
    }
  }
  if(0==sizeof($RET_WORDS))    return '';

  return implode(', ', array_unique($RET_WORDS));  # 중복 제거하고 리턴
}


#--------------- 요 밑으로는 테스트 --------------------------#

function __get_microtime(){
  list($usec, $sec)=  explode(" ",microtime());
  return (float)$usec + (float)$sec;
}


$time_start= __get_microtime();

$test_str= <<<TEST
여기는  별의별 헛소리를 다 넣어도 된다 무조껀 뻐큐
테스트용 문자열이므로 아무 의미가 없습니다 자세히 읽어 보지 말기를 바랍니다.
하하 호호 히히 쉽 스까이
내가 생각하는 아이템 사이트에서는
사실은 자유게시판이 아니라 회원제에서는 욕이 나오기는 힘들고 관리하기도 쉽다.
따라서 무단광고, 성인광고 처리에 집중하자.
일부러 표기법을 어기거나 특수분자랑 뒤섞는 등의 "정해지지 않는" 단어 처리에 대해서는
쉽게 생각하면 새로운 광고 단어 유형을 그때그때 수동으로 수집처리하면 된다.

자동으로 처리하려면?
광고 단어의 글자 사이에 특수문자들을 끼워 넣은 경우를 매칭하기 위하여
공백을 포한한 특수문자는 모두 제거하고 매칭할까.
3글자 이상의 길이면 가능하겠는데. 이런 좁밥

2글자 이하의 매칭은 특수문자 제거하고 매칭시 엉뚱한 문자열이 걸릴 수 있다. ㅅㅂㄹㅁ','凸','갈보
그러므로 2자 이하의 단어 매칭시 바로 광고라고 확정하지 말고 가중 점수로써 처리하자.
시발시발 시발 새새끼 개새끼
호홋
TEST;

$result= fuck_match ($words, $test_str);

echo "결과= ($result)<hr>실행에 걸린 시간=". (__get_microtime()- $time_start);
?>

펌:http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=57637&page=1

Posted by 알 수 없는 사용자
,

$time_start= _get_microtime();
$count_C=0;
$array_to_search_in = array_flip($MysqlReservedWords);
foreach($MysqlReservedWords as $k=> $v){
  if (isset($array_to_search_in[$v]))
    $count_C++;
  else
    $noSearch_C.="($v)";
}
$time_C= _get_microtime()- $time_start;

arr_search_bin()로 찾은 갯수=(262),                검색시간=(0.0029969215393066)
array_flip()과 isset()을 이용해 찾은 갯수=(262), 검색시간=(0.00027084350585938)


-------------------------------------------------------------------------------------------


$array_to_search_in = array_flip($MysqlReservedWords);  # 뒤집고
if ($array_to_search_in ('찾을값')){
  찾았으니 처리할 거 처리해;
}
Posted by 알 수 없는 사용자
,

제로보드외 타게시판도 가능합니다.


사용자 삽입 이미지

※ 이전 버전에 비해 달라진 점
① 숫자만 되던 것에 영문도 가능하게 함
② 이미지의 숫자를 점 하나 하나 찍어서 만들던 것을, 비트맵 폰트파일을 이용하여 더욱 빠르고 간편하게 구현
③ 특정 게시판에는 스팸차단기능이 비활성화되도록 설정 가능
④ 기존, 3개의 파일로 쪼개져 있던 것을, 1개의 파일로 모음 (프로그램파일 1개+폰트파일 1개)
⑤ 기타, 소스를 더욱 효율적으로 정리
(도움을 주신 비혼(BiHon)님께 감사드립니다.)


※ 기존 1.5로 적용하시던 분들은, skin/ 디렉토리에 있는 3개의 파일을 지우시고,
이 2개의 파일을 올리시면 됩니다. (제로보드 관련파일 및 스킨파일 수정 불필요)

※ 본 프로그램은 서버에서 GD 라이브러리를 지원해야 가능합니다.

※ 앞으로 더 이상의 업그레이드는 하지 않을 예정입니다. (개인적인 사정으로)

사용자 삽입 이미지
  1. ZM_Crypt 2.0 특징
    1. 적용이 쉽다
      PHP 프로그램을 몰라도, HTML만 알면 쉽게 적용 가능합니다.
      기본적으로 파일 4개에 1줄씩만 넣어주시면 작동합니다.
    2. 게시물 차단 + 덧글(코멘트) 차단
      최근에는 덧글스팸도 많이 늘었습니다.
      본 프로그램은 게시물 뿐만 아니라 덧글(코멘트)의 자동등록도 차단합니다.
    3. 디자인 변경 용이
      여러 스킨을 사용해도, 각 스킨마다 원하는 위치에
      예쁘게 삽입 가능합니다.
    4. 보안코드가 텍스트 아닌 이미지
      보안코드가 텍스트가 아닌 이미지로 출력됩니다.
      그렇다고, 기존 이미지 파일을 불러오는 것이 아닙니다.
      GD 라이브러리를 이용, 자체 폰트함수로 그때마다 숫자 이미지 파일을 뿌려주고
      자동 삭제됩니다.
      때문에, 기존 텍스트 기반의 보안코드보다 보안성이 강합니다.
    5. 씨앗(Seed)을 바탕으로 한 자체 암호화 함수 내장여러분이 처음에 씨앗(Seed)을 설정할 수 있습니다.
      암호화는 그 씨앗을 바탕으로 이루어집니다.
      때문에, 더욱 더 안전합니다.
  2. 설치방법
    1. 환경설정 (zm_crypt.php 수정)
      ① 13째줄(씨앗) : 반드시 변경, 알파벳+숫자로 이루어진 암호 (외울 필요 없음)
      ② 14째줄(자릿수) : 보안코드의 자릿수 설정 (기본값:4자리)
      ③ 15째줄(보안코드 문자종류) : 숫자+알파벳, 또는 숫자만 설정 가능 (기본값:숫자+알파벳)
      ④ 스팸광고게시물 차단 필요없는 게시판 id 입력 : 게시판에 따라 차단 필요없는 게시판 이름(id)를 콤마(,)로 구분하여 입력
    2. 업로드제로보드(bbs) 디렉토리 안에 'skin' 디렉토리에 아래 두 파일 업로드.
      zm_crypt.php (zmCrypt 프로그램 파일)
      andale12.gdf (글꼴 파일)
      예:
      /bbs/ : 제로보드 설치 디렉토리
      /bbs/skin/ (특정 스킨 디렉토리가 아님) ☜ 이 디렉토리에 설치
      /bbs/skin/snowboard/ : 스노우보드 스킨 디렉토리
    3. 제로보드 파일 수정 (write_ok.php , comment_ok.php)위 두 파일을 열면 5~7째줄에 아래와 같은 코드가 똑같이 들어 있습니다.
      include "_head.php";
      위 코드의 바로 아랫줄에 아래 코드를 삽입합니다.
      include ("./skin/zm_crypt.php" ) ;
      저장 후 업로드 하여 덮어씌우시면 됩니다.
    4. 스킨 파일 수정 #1 (write.php)<?=$hide_start?> 코드 아랫줄에 다음 코드 삽입
      <? $zCryptClass='input' ; include ("./skin/zm_crypt.php" ) ; ?>
      (위에서 input 는 입력 폼의 스타일 클래스(class)입니다. 이해 안 되시면 패쓰!)

      이후, 원하시는 위치에 아래와 같이 넣으시면 됩니다.
      <?=$zCrypt_Img?> : 보안코드 이미지
      <?=$zCrypt_Form?> : 보안코드 입력폼
      (<?=$hide_start?> ~ <?=$hide_start?> 안에 넣어야 로그인한 회원에게는 숨길 수 있습니다.)
    5. 스킨 파일 수정 #2 (view_write_comment.php)<?=$hide_c_password_start?> 코드 아랫줄에 다음 코드 삽입
      <? $zCryptClass='input' ; include ("./skin/zm_crypt.php" ) ; ?>
      (위에서 input 는 입력 폼의 스타일 클래스(class)입니다. 이해 안 되시면 패쓰!)

      이후, 원하시는 위치에 아래와 같이 넣으시면 됩니다.
      <?=$zCrypt_Img?> : 보안코드 이미지
      <?=$zCrypt_Form?> : 보안코드 입력폼
      (<?=$hide_c_password_start?> ~ <?=$hide_c_password_end?> 안에 넣어야 로그인한 회원에게는 숨길 수 있습니다.)
    6. 설치 완료설치완료되었습니다. 테스트해 보시기 바랍니다.
      로그아웃 후 테스트해 보시는 것, 잊지 마세요.
  3. 고급 환경설정
    1. 환경설정 (zm_crypt.php 수정)20~17줄에는 고급 환경설정 코드가 있습니다.
      보안코드 글자색, 바탕색 등을 변경할 수 있습니다.
      주석이 자세히 되어 있으므로 쉽게 변경 가능합니다.
  4. 기타 문의사항 및 정보
    1. 이메일 : ZnMee@naver.com (지앤미)
    2. 블로그 : blog.naver.com/ZnMee (知&美 : 앎과 앎다움)
    3. 프로그램 : ZM_Crypt 2.0 (2007.07.18. Released)

※ 2007년 11월 07일 추가 정보

제가 테스트하고 있는 커뮤니티 게시판에 본 ZM_Crypt 2.0을 적용한 이후로
자동 스팸광고 게시물이 어제 처음으로 등록되었습니다.
어떻게 등록했나 보니, 아예 회원가입을 자동으로 하여 로그인 한 후
게시물을 등록하는 방식이더군요.
이에, 회원가입 페이지에도 보안코드를 입력하도록 조치하였습니다.

제로보드 프로그램이 있는 디렉토리에 있는
member_join.php 에 보안코드 입력 폼을,
member_join_ok.php 에 검사 코드를 추가하면 됩니다.

단, 이렇게 했을 경우, 오류가 발생합니다.
zm_crypt.php 파일을 열어 18번째 줄 다음에
if (!$id) {$id=0;}
위와 같이 1줄의 코드를 넣어 주시면 오류가 해결됩니다.

출처:http://blog.naver.com/znmee/70019857377
Posted by 알 수 없는 사용자
,

페이징 함수

인터넷관련 2007. 12. 4. 10:03
일반적인것과 그룹화 한 것 두가지 샘플이 있으니 보시면 아실거 같고

리팩토링은 알아서 하시길 바랍니다.
버그있음 댓글달아주세요 (그룹화 해본적이 없어 이런상으로 계산된거라 제대로 나오는지는 모르겠습니다.)

본 코드는 아무렇게가 갖다 쓰심 됩니다.


<?php
// vim600: ts=4 sw=4

class C
{
// constants
    const ERR_PAGING_ROW                    = 10001;
    const ERR_PAGING_SCALE                  = 10002;
    const ERR_PAGING_PART_INFO_INVALID      = 10003;
    const ERR_PAGING_PART_NO_NOT_INTEGER    = 10004;
    const ERR_PAGING_PART_COUNT_NOT_INTEGER = 10005;

// only static
    private function __construct () {}


/**
    @param array
        int total  : 전체 게시물수
        int page    : 현제 페이지번호
        int row    : 페이지당 게시물 수
        int scale  : 페이징 블럭 (페이지에 보여질 번호판 수)
        string link : page=xxx 를 지외한 모든 링크
            예) aaa.php?a=$a&b=$b&c=$c&page=$page 이런 링크가 필요하다면
                            link = "a=$a&b=$b&c=$c";
        array group : 분할정보 (division 정보) 미사용시 필요없음
            int no => int count
    @param part : boolean - 데이타를 group(division) 화 하는지의 여부

    @return array
        total          : 전체 게시물 수
        page            : 현제 페이지 번호
        totalpage      : 총 페이지 수
        prev_link      : 이전 링크
        paging          : 번호판 리스트
        next_link      : 다음 링크
        start_link      : 처음 링크
        end_link        : 마지막 링크
        enable_prev    : 이전페이지 가능한가?
        enable_next    : 다음페이지 가능한가?

        object query    : group 화 정보  (쿼리용 변수)
            int limit  : 쿼리에서 사용할 limit
            int offset  : 쿼리에서 사용할 offset
            array group : 쿼리에서 사용할 group number list
*/

    public static function paging (array $arr, $part = false)
    {
        $total = intval($arr['total']);
        $page = intval($arr['page']);
        $row = intval($arr['row']);
        $scale = intval($arr['scale']);
        $link = $arr['link'];
        $group = $arr['group'];

        if($link) $amp = '&';

        if($row < 1)
            throw new Exception (self::ERR_PAGING_ROW);
        if($scale < 1)
            throw new Exception (self::ERR_PAGING_SCALE);

        if($page < 1) $page = 1;
        $totalpage = ceil($total / $row);
        if($page > $totalpage) $page = $totalpage;

        if($total > 0) {
            $start = (intval($page / $scale) * $scale) + 1;
            if(!($page % $scale)) $start -= $scale;
            $end = $start + $scale - 1;
            if($end > $totalpage) $end = $totalpage;
            $prev = $start - $scale;
            $next = $start + $scale;
        }

        for($i = $start; $i <= $end; $i++)
            $paging_loop[] = array('page_num' => $i,
                                  'page_link' => "page=".$i.$amp.$link);

        $count = count($paging_loop);
        if($count > 0) $paging_loop[$count-1]['end'] = 1;


        $limit = $row;
        $offset = ($page - 1) * $row;

        if(!$part) {
            $_grp->limit = $limit;
            $_grp->offset = $offset;
        }
        else {
            if(!is_array($group))
                throw new Exception(self::ERR_PAGING_PART_INFO_INVALID);

            try {$_grp = self::_make_query_info($group, $limit, $offset); }
            catch (Exception $e) { throw $e; }
        }

        $arr = array('total' => $total,
                    'page' => $page,
                    'totalpage' => $totalpage,
                    'prev_link' => 'page='.$prev.$amp.$link,
                    'paging' => $paging_loop,
                    'next_link' => 'page='.$next.$amp.$link,
                    'start_link' => 'page=1'.$amp.$link,
                    'end_link' => 'page='.$totalpage.$amp.$link,
                    'enable_prev' => ($page > $scale) ? true : false,
                    'enable_next' => ($end < $totalpage) ? true : false,

                    'query' => $_grp
          );

        return $arr;
    }

    private static function _make_query_info(array $grp, $limit, $offset)
    {
        $start = $offset;
        $end = $offset + $limit;

        $sum = 0;
        $found = false;
        $pos = array();
        $_offset = 0;

        foreach($grp as $part => $count) {
            if(!is_int($part) || $part < 1)
                throw new Exception(self::ERR_PAGING_PART_NO_NOT_INTEGER);
            if(!is_int($count))
                throw new Exception(self::ERR_PAGING_PART_COUNT_NOT_INTEGER);

            $sum += $count;

            if($sum > $start) $found = true;
            if($found) {
                $pos[] = $part;
                if(!$_offset) $_offset = $offset + $count - $sum;
            }
            if($sum >= $end) break;
        }

        if(!is_array($pos))
            throw new Exception(self::ERR_PAGING_PART_INFO_INVALID);


        $group->group = $pos;
        $group->offset = $_offset;
        $group->limit = $limit;

        return $group;
    }

    public static function get_errmsg ($const)
    {
        switch($const) {
            case self::ERR_PAGING_ROW:
                return '페이지당 출력수를 셋팅해 주세요';
            case self::ERR_PAGING_SCALE:
                return '페이징 블럭을 셋팅해 주세요';
            case self::ERR_PAGING_PART_INFO_INVALID:
                return '분할정보가 없거나 잘못되었습니다.';
            case self::ERR_PAGING_PART_NO_NOT_INTEGER:
                return '분할번호가 숫자가 아니거나 없습니다.';
            case self::ERR_PAGING_PART_COUNT_NOT_INTEGER:
                return '해당분할그룹의 정보가 숫자가 아닙니다.';
            default: return '알수 없는 에러입니다.';
        }
    }
}

// example1 - 그룹화 하지 않은 경우
$arr = array('total' => 5,
            'page' => 1,
            'row' => 10,
            'scale' => 10);

try {$paging = C::paging($arr); }
catch (Exception $e) {
    print 'LINE: '.$e->getLine().' '
          .C::get_errmsg($e->getmessage());
    exit;
}

// pgsql 에서는 limit offset 이 limit $limit offset $offset
// mysql 에서는 limit $offset,$limit
// oracle 에서는 RN between ($offset + 1) and ($offset + $limit)
// 또는 각자 알아서 영역을 구하시길
$query = "select xxxxx from xxxx order by xxx "
        ."limit ".$paging['query']->limit." offset ".$paging['query']->offset;

$tpl->assign($paging);


// example2 - 그룹화 할 경우 (division 사용시)
// 앞은 분할번호 뒤는 갯수
// 최신정보부터 뒤집어 넣습니다.
$division = array(5 => 205,
                  4 => 5000,
                  3 => 5029,
                  2 => 4800
  );

$arr = array('total' => 15034,
            'page' => 22,
            'row' => 10,
            'scale' => 10,
            'group' => $division);

try {$paging = C::paging($arr, true); }
catch (Exception $e) {
    print 'LINE: '.$e->getLine().' '
          .C::get_errmsg($e->getmessage());
    exit;
}

$query = "select xxxxx from xxxx "
        ."where xxxx "
          ."and division in (".implode(',', $paging['query']->group).") "
        ."order by xxx "
        ."limit ".$paging['query']->limit." offset ".$paging['query']->offset;

$tpl->assign($paging);

?>

펌:http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=57690&page=1
Posted by 알 수 없는 사용자
,
Cairo is a 2D graphics library with support for multiple output devices. Currently supported output targets include the X Window System, Win32, image buffers, PostScript, PDF, and SVG file output. Experimental backends include OpenGL (through glitz), Quartz, and XCB.


cairo 는 리눅스의 핵심 그래픽 라이브러리 입니다.
X Window 에서 부터 다양한 곳에 핵심적으로 쓰이고 있습니다.

php 에 붙일 생각을 못했었는데, gd 가지고 삽질하고 있는 모습을 본 어떤분이 권해주셔서 설치했습니다.
각 리눅스 배포판에서 cairo 를 지원하므로, cairo 는 그냥 설치하시면 되고,
php 용 래퍼만 phpize 적용하시면 바로 사용하실 수 있습니다.

php-cairo : http://sourceforge.net/projects/klecks/ (gentoo ebuild)
cairo manual : http://cairographics.org/manual/

php-cairo 에 klecks 라는 프로젝트는 svg 를 다루게 해 줍니다만, 패스~

php-cairo 에는 메뉴얼이 없습니다.
cairo 의 순수 래퍼라서 cairo 메뉴얼을 보면 되기 때문일 것입니다.

작명이 일관적이지 않은 느낌도 있고, 좀 헷갈리긴 합니다만, 예제정도는 들어있으니 따라하다 보면 할 만 합니다.

struct 를 리턴하는것을 기준으로 class 를 리턴하도록 한듯 합니다.

아래는 예제를 직접 만들어 본 것입니다.
절대! 전혀! 가볍습니다.
gd 에 비해 오래걸린다는 생각이 조금도 안듭니다.
gd 보다 하는일이 많다는것을 생각한다면 훨씬 효율적일듯 합니다.

FF

IE



<?php

$surface
 = new cairo_image_surface(0, 500, 500
);
$context = new cairo_context($surface
);


$x = 30
;
$y = 30
;
$l = 16
;
$ll = 30
;
$r = 0
;

$b = 1
;
$cr = 1
;
$cg = 0
;
$cb = 0
;
$ca = 1
;

$points = makeflower($x, $y, $l, $ll, $r, 5
);
drawflower($context, $points, $cr, $cg, $cb, $ca
);
$x += 15
;
$y += 10
;
$l *= 1.05
;
$ll *= 1.05
;
$r += 7
;
$b *= 1.1
;
$cr -= .05
;
$cb += .05
;
$ca -= .05
;

for(
$i = 0; $i < 18; $i
++) {
   
$points = makeflower($x, $y, $l, $ll, $r, 5
);
   
drawflower($context, $points, $cr, $cg, $cb, $ca, $b
);
   
$x += 15
;
   
$y += 10
;
   
$l *= 1.1
;
   
$ll *= 1.1
;
   
$r += 7
;
   
$cr -= .05
;
   
$cb += .05
;
   
$ca -= .05
;
   
$b *= 1.1
;
}
$points = makeflower($x, $y, $l, $ll, $r, 5
);
drawflower($context, $points, $cr, $cg, $cb, $ca
);


$x = 30
;
$y = 80
;
$l = 30
;
$ll = 13
;
$r = 0
;

$b = 1
;
$cr = 1
;
$cg = 0
;
$cb = 0
;
$ca = 1
;

$points = makestar($x, $y, $l, $ll, $r, 5
);
drawstar($context, $points, $cr, $cg, $cb, $ca
);
$x += 15
;
$y += 17
;
$l *= 1.1
;
$ll *= 1.1
;
$r += 7
;
$b *= 1.1
;
$cr -= .03
;
$cg += .02
;
$cb += .05
;
$ca -= .05
;

for(
$i = 0; $i < 18; $i
++) {
   
$points = makestar($x, $y, $l, $ll, $r, 5
);
   
drawstar($context, $points, $cr, $cg, $cb, $ca, $b
);
   
$x += 15
;
   
$y += 17
;
   
$l *= 1.05
;
   
$ll *= 1.05
;
   
$r += 7
;
   
$cr -= .03
;
   
$cg += .02
;
   
$cb += .05
;
   
$ca -= .05
;
   
$b *= 1.1
;
}

$points = makestar($x, $y, $l, $ll, $r, 5
);
drawstar($context, $points, $cr, $cg, $cb, $ca
);

$surface->write_to_png('cairo.png'
);

function
makestar($x, $y, $l, $ll, $r, $t
)
{
   
$ra = 360 / ($t << 1
);
    for(
$i = 0; $i < $t; $i
++) {
       
$r += $ra
;
       
$points[] = (sin($r * M_PI / 180) * $l) + $x
;
       
$points[] = (cos($r * M_PI / 180) * $l) + $y
;

       
$r += $ra
;
       
$points[] = (sin($r * M_PI / 180) * $ll) + $x
;
       
$points[] = (cos($r * M_PI / 180) * $ll) + $y
;
    }

    return
$points
;
}

function
drawstar(&$context, $points, $r, $g, $b, $a, $border = false
) {
   
$context->move_to($points[0], $points[1
]);
    for(
$i = 2; $i < count($points); $i += 2
) {
       
$context->line_to($points[$i], $points[$i + 1
]);
    }
   
$context->close_path
();

   
$context->set_source_rgba($r, $g, $b, $a
);
    if(
$border === false
) {
       
$context->fill
();
    } else {
       
$context->close_path
();
       
$context->set_line_width($border
);
       
$context->stroke
();
    }
}

function
makeflower($x, $y, $l, $ll, $r, $t
)
{
   
$ra = 360 / ($t * 3
);
   
$points[] = (sin($r * M_PI / 180) * $l) + $x
;
   
$points[] = (cos($r * M_PI / 180) * $l) + $y
;
    for(
$i = 0; $i < $t; $i
++) {
       
$r += $ra
;
       
$points[] = (sin($r * M_PI / 180) * $ll) + $x
;
       
$points[] = (cos($r * M_PI / 180) * $ll) + $y
;

       
$r += $ra
;
       
$points[] = (sin($r * M_PI / 180) * $ll) + $x
;
       
$points[] = (cos($r * M_PI / 180) * $ll) + $y
;

       
$r += $ra
;
       
$points[] = (sin($r * M_PI / 180) * $l) + $x
;
       
$points[] = (cos($r * M_PI / 180) * $l) + $y
;
    }

    return
$points
;
}

function
drawflower(&$context, $points, $r, $g, $b, $a, $border = false
)
{
   
$context->move_to($points[0], $points[1
]);
    for(
$i = 2; $i < count($points); $i += 6
) {
       
$context->curve_to($points[$i], $points[$i + 1], $points[$i + 2], $points[$i + 3], $points[$i + 4], $points[$i + 5
]);
       
$context->line_to($points[$i + 4], $points[$i + 5
]);
    }
   
$context->close_path
();

   
$context->set_source_rgba($r, $g, $b, $a
);
    if(
$border === false
) {
       
$context->fill
();
    } else {
       
$context->close_path
();
       
$context->set_line_width($border
);
       
$context->stroke
();
    }
}

?>
<html>
<head>
<!--[if IE]>
<style>
div {
    width:500px;
    height:500px;
    filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='asdf.png', sizingMethod='scale');
}
div img {
    visibility:hidden;
}
</style>
<![endif]-->
</head>
<body bgcolor="#999999">
<div>
<img src="cairo.png" />
</div>
</body>
</html>



License


Cairo is free software and is available to be redistributed and/or modified under the terms of either the GNU Lesser General Public License (LGPL) version 2.1 or the Mozilla Public License (MPL) version 1.1 at your option.




FF

IE


이것이 삽질의 원흉입니다.
파란색 도형이 gd 의 기본 함수 입니다.
보시다시피 '선' 에는 안티알리아스가 적용이 되는데 알파채널계산이 안되어 허옇게 뜹니다.
그래서 붉은색 도형을 만들다 만 것인데,
php-cairo 를 알게되어 중단했습니다.


출처:http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=57691&page=1
Posted by 알 수 없는 사용자
,
플래쉬 스트리밍 서버 RED5 설치기

여기에 리눅스 기반 스트리밍 서버들 몇 가지 소개 된 것이 있던데요.

red5 에 대해서는 언급이 없어 올립니다.

정확한 서버명은 "플래쉬 커뮤니케이션 서버"라 해야 하나?


리눅스에서의 설치 환경은 jdk1.5이상 + 톰캣 + red5 으로 구성.

저는 먼저 윈도우 버젼이 있어 윈도우 xp에 설치해봤습니다.

리눅스에 설치하다가 잘 안될 경우 부족한 내공으로 해결할 자신도 없고.. ㅋ


Red5 윈도우 버젼은 jetty서버가 내장되어 톰캣설치가 불필요.

그래서 jdk1.5 + red5 서버구동 가능.(jdk1.5는 jre1.5 만 설치되면 됨)

http://osflash.org/red5 에서 red5 를 다운 받아 인스톨하면

jre 설치 폴더를 물으면(설치 되어 있을 경우 자동으로 찾아줌)

jre설치경로를 선택하고 설치를 계속해서 끝냄.


http://127.0.0.1:5080/ 로 접속해서 Red5 Test Page 란 페이지가 나오면 설치 성공.

테스트할 스트림 폴더는 Red5\webapps\oflaDemo 에 streams 폴더를 만들고 그 안에

flv로 인코딩 된 동영상을 넣으면 끝(예: test.flv).

그리고 클라이언트는 플래쉬로 flv플레이어를 만든다.

만들때 참고로 ns.connect는 "rtmp://127.0.0.1/oflaDemo" 로

ns.play는 "test.flv"로 하면 된다.

마지막으로 인코딩은 adobe나 red5 에서 제공되는 프로그램을 사용하는 것이 좋네요.

리사나 다른 프로그램은 멈춤현상이 발생하는 경우가 있는 것 같습니다.


그리고 테스트 서버 링크는 http://211.108.234.116:8080/ 인데요

제 컴이 켜져 있을 때만 가능합니다. 플래쉬 스트리밍은 Temporary Internet Files에

캐쉬가 남지 않네요. 그래서 효과가 있을 것 같아 경로도 함 숨겨봤습니다.


관심있는 분들 설치해보시고 결과 좀 알려주세요.

특히 리눅스에서 설치결과^^


화상채팅, 실시간 스트리밍 등등 지원

펌:http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=57695&page=1
Posted by 알 수 없는 사용자
,
http://www.software.or.kr/
이곳 들여다보다 보니 오른쪽 스크롤 배너에 확대 축소 버턴이 있어서 스크립을 들여다 봤떠니..
   
var nowZoom = 100; // 현재비율
document.body.style.zoom = nowZoom + "%";

식으로....

확대 축소를 하고있네요..

100%가 기본사이즈고  축소 확대할때 +10 이나 -10 을 해서 페이지 자체 사이즈를 바꾸고 있네요..


저처럼 모르고 있었던 사람 있을려나 해서....
1원짜리팁입니다.


아래는 실제 스크립트 입니다.


<!-- 화면 확대 축소 시작 IE 전용 --->
<!--
var nowZoom = 100; // 현재비율
var maxZoom = 200; // 최대비율(500으로하면 5배 커진다)
var minZoom = 80; // 최소비율

//화면 키운다.
function zoomIn()
{
    if (nowZoom < maxZoom)
    {
        nowZoom += 10; //25%씩 커진다.
    }
    else
    {
        return;
    }
    document.body.style.zoom = nowZoom + "%";
}


//화면 줄인다.
function zoomOut()
{
    if (nowZoom > minZoom)
    {
        nowZoom -= 10; //25%씩 작아진다.
    }
    else
    {
        return;
    }
    document.body.style.zoom = nowZoom + "%";
}

//화면 원래대로
function zoomDefault()
{
    nowZoom = 100;
    document.body.style.zoom = nowZoom + "%";
}
//-->
<!-- 화면 확대 축소 끝 --->


IE7에선 Ctrl 누른 상태에서 휠조정으로 가능합니다.
Posted by 알 수 없는 사용자
,

우리집 종합부동산세금 알아보기

간편 세액 계산 프로그램 :
보유세 상세 조견표 :


부동산 세금 바로 알기

종합부동산세 주요 이슈 




종부세는 투기꾼에 부과하는 징벌적 세금이 아닙니다
종부세는 투기꾼을 지목해서 부과하는 징벌적 세금이 아니라 부동산 보유자가 국가와 사회로부터 받는 혜택에 상응하여 납부하는 대가입니다. 다시 말해 잘 갖춰진 방범시설, 편리한 도로망 등 다른 지역보다 상대적으로 쾌적한 주거환경 등 납세자가 실제로 향유하고 있는 혜택에 대한 적절한 부담인 것입니다.

또한 종부세는 재정이 취약한 지역에 우선 배분되어 사회적 혜택을 제대로 받지 못한 사람을 위해 사용되기 때문에, 이는 곧 자신이 받은 혜택을 법에서 정한 범위 내에서 만이라도 되돌리는 사회적 환원으로서 고귀한 나눔의 실천이라 할 것입니다. 이런 나눔을 통해 보다 많은 사람들이 함께 누릴 수 있는 사회안전망(Social Safety Net)이 형성되고 우리 모두와 미래세대의 삶의 수준을 한 단계 높이는 확실한 투자가 됩니다.

대다수 국민은 종부세를 내지 않습니다.
종부세는 재산세를 납부하는 사람 중에서 일정기준금액(주택의 경우 공시가격 6억원)을 초과하는 고가의 부동산을 보유한 사람에게만 과세됩니다.

금년도 종부세를 전망해 본 바에 의하면, 주택분 종부세를 내는 사람은 약 38만 1천 세대입니다. 이는 주민등록상 전국 세대수(1,777만 세대)의 2.1%이며 전국 주택 보유 세대수(971만 세대)의 3.9%에 불과합니다.

따라서 무주택자(806만 세대) 뿐만 아니라 대다수 주택 보유 세대(96.1%)의 경우에도 종부세를 부담하지 않습니다.

한편 주택분 종부세를 내는 사람 중 63.5%가 다주택(2주택 이상) 보유자이며, 이들 다주택자가 종부세 과세대상 주택의 89.4%를 점유하고 있습니다. 또한 주택분 종부세를 내는 사람 중 94%가 수도권(서울/경기/인천)에 살고 있습니다.

일반적인 종부세 부담은 그리 큰 편이 아닙니다.
주택분 종부세를 내는 사람 가운데 42.2%는 100만원 이하의 종부세액을 부담하고, 81.1%는 500만원 이하의 종부세액을 부담합니다.

1세대 1주택자 중 공시가격 9억원(시가 11억 3천만원 수준) 이하자의 경우 평균 종부세액은 80만원정도 이고, 올해 처음으로 주택분 종부세를 내는 사람의 경우도 평균 종부세액이 80만원 정도로 부담이 그리 큰 편은 아닙니다.

국세청에서는 일반 납세자들의 종부세에 대한 막연한 불안감을 해소하고 올해 자신이 부담할 종부세액이 얼마인지를 개략적으로 알아 볼 수 있도록 간편세액계산 프로그램과 상세조견표를 홈페이지(www.nts.go.kr)에 게재해 놓고 있습니다.

한편 주택의 보유세 실효세율이 미국 주요도시는 1.5%~1.6%, 일본은 1%로 알려져 있습니다. 반면 우리나라 시가 10억원(공시가격 8억원 수준) 주택의 보유세 실효세율은 0.4%정도로 선진국에 비해 낮습니다.

소득대비 보유세 비율을 낮추기 위해서도 종부세가 필요합니다.
보유세는 '소득'에 대해 부과하는 소득세가 아니라 '재산보유사실' 자체에 대해 과세하는 세금입니다. 따라서 보유세를 조세체계상 직접적으로 관련이 없는 소득과 연계시키는 것은 "소득이 없으면 부동산을 아무리 많이 보유해도 세금을 부과할 수 없다"는 취지로 이해될 수 있어 자칫 일반국민들로 하여금 보유세에 대한 큰 오해를 불러 올 수 있습니다.

한편 우리나라의 주택가격이 턱없이 높아 소득에서 차지하는 보유세 비중이 점차 높아질 수 있기 때문에 바로 이점에서도 종부세의 당위성이 있는 것입니다. 집값이 선진국에 비해 높게 된 데는 그간의 우리나라 보유세가 비정상적으로 낮았던 것이 그 원인의 하나였음을 부인할 수 없습니다.

따라서 종부세를 통해 부동산에 대한 투기적 가수요를 억제하고 종부세가 국민들의 부동산 취득•보유•처분 등에 의미 있는 결정요소가 되도록 함으로써 주택가격의 정상화와 함께 소득대비 보유세 부담도 적정수준을 유지하도록 하자는 것입니다.

올해 주택가격 하락은 내년도 공시가격에 반영됩니다.
종부세는 과세기준일(매년 6월 1일) 현재, 과세기준금액을 초과하는 부동산 보유자에게 부과되지만, 종부세 과세표준 계산시 사용되는 공시가격은 매년 1월 1일 기준으로 산정됩니다. 즉 금년도 공시가격 상승은 지난해의 주택가격 급등의 결과인 것입니다.

만약 현재와 같은 주택가격 하향 안정세가 연도 말까지 지속되어 연초에 비해 집값이 떨어진다면 이의 효과는 내년도 공시가격에 반영될 것이고, 다른 조건이 동일하다면 보유세도 그에 따라 줄어들 것입니다. 특히 주택 공시가격이 6억원 이하까지 떨어진다면 종부세 과세대상에 해당 되지 않게 될 수도 있습니다.




종합 부동산세 신고 안내 :
http://www.nts.go.kr/estate/intro/index.html


양도소득세 및 부동산 세금 일반 안내 :
http://www.nts.go.kr/estate/guide/index.html
Posted by 알 수 없는 사용자
,