4,578,272 th visitor since 2017.2.1 ( Today : 1346 )
자유게시판 - New List Style
No. 1534
Subject. 개발자의 조리퐁 세기
Date. 2007-05-29 10:38:34.0 (211.181.247.3)
Name. swindler
Hit. 5507
File.
===============================================
.발단
---------------------------------------------
여기도 폐인들 모여사냐?? 조리퐁 세어보라고 그래...

-_-;;;; 여기 이미지가 왜이렇게 변했나요..ㅜㅠ
---------------------------------------------
모 리눅스 커뮤니티에 어느날 이런 글이 올라왔다. ...처음에는 여기가 뭐하는 덴줄이나 아느냐.. 매니아와 폐인을 구분 못하는 것 아니냐..하는 류의 일상적인 답글이 달리다가.... 이런 사태가 벌어져따..-_-







2.전개
-----------------------------------------------
cat 조리뽕 | wc -c
----------------------------------------------
한줄의 간단한 코드가(...코드라기 보다는 커맨드...) 올라왔다.









3.발전
----------------------------------------------
#include
#include
#include
#include
#include

int main(int argc, char *argv[])
{
int count;
joly j;
JOLYPONG *jp;

jp = jopen(argv[1], "r");
if (jp == NULL) {
printf("Can't open jolypong %s\n", argv[1]);
return EXIT_FAILURE;
}

count = 0;
while (!jeoj(jp)) {
j = jgetj(jp);
if (iseatable(j)) {
if (count == INT_MAX) {
printf("Int Overflow\n");
exit(EXIT_FAILURE);
}
count++;
}
}
jclose(jp);

fprintf("Numbers of Jolypong %s: %d\n", argv[1], count);

return EXIT_SUCCESS;
}
----------------------------------------------------------------
역시 제일 만만한건 씨였나.. 일단 노가다성의 알고리즘으로 구현된 씨 소스가 올라오고...









4.플랫폼의 다양화
-----------------------------------------------------------






echo "Numbers of Jolypong " . filesize($_FILES['tmp_name']);
?>

간단하게 웹에서도 세어BoA요~
------------------------------------------------------------


------------------------------------------------------------
#!/bin/sh

i=0
for anything in jolypong_bag; do
if [ anything = jolypong ]; then
i=`expr $i + 1`
fi
done
echo "There're $i jolypongs"
-------------------------------------------------------------
본셀 버젼도 개발 되었다..


-------------------------------------------------------------
gentoo =3
emerge search jolypong | grep '*' | awk '{print $2}' | xargs emerge
--------------------------------------------------------------
이건 정확히 어떤 의미인지. .. 나도 몰겠다..-_-;; 셀에서 바로 돌려서 찝어 내는 것 같은데. .. emerge 랑 search 가 대체 머하는 넘이지?-_-


--------------------------------------------------------------
import joripong

def main():
nc = 0
rl = joripong.stdin.readlines
bunches= rl(4096)

while bunches:
for line in bunches:
nc += len(line)
bunches= rl(4096)

print nc

main()

파이썬 버젼입니다.
그런데 매번 결과가 다르게 나타나는건... 왜 그럴까요?
아무래도 제 생각엔 조리퐁이 조각나서 정수형으로 처리가 안되는 경우인 것 같습니다. 고수님들께선 이럴때 어떻게 처리하시나요?
---------------------------------------------------------------

---------------------------------------------------------------
(let ((p (open-input-file "jolypong.txt"))
(count 0))
(do ((ch (read-char p) (read-char p)))
((eof-object? ch) (display count))
(set! count (+ count 1)))
(close-input-port p))
------------------------------------------------------------------
이런 녀석도 나타났다. .. 스킴인가. .;;

-----------------------------------------------------------------
defun count-jolypong (buffer)
(interactive "fJolypong filename:")
(save-current-buffer
(set-buffer (find-file-noselect buffer))
(message "Number of joly: %d" (buffer-size))))
-----------------------------------------------------------------
작년 AI를 들었던 사람이라면 어딘가.. .. 향수를 불러 일으키는 코드..-0-


----------------------------------------------------------------
library joripong;
use joripong.count.all;

entity jori_num is
port(joripack : in jori_logic_vector(7 downto 0);
isbig : in jori_logic_bit;
jori_sum : out jori_logic_vector(7 downto 0));
end jori_num;

architecture sample of jori_num is
begin
process(joripack, isbig)
variable default : jori_logic_vector(7 downto 0);
begin
if isbig is '0' then
default := sizeof(joripack);
jori_sum <= default;
else
jori_sum <= default *2;
end process;
end sample;
-------------------------------------------------------------
전혀 알 수 없는 코드. ..-0-;; ;; VHDL?-0-



------------------------------------------------------
#!/usr/bin/perl

use strict;
use Snack::Jolypong;

my $j = new Snack::Jolypong (size => "Plain");

printf "Number of Jolypong is %d", $j->count();
------------------------------------------------------
Perl. ...-0-;









5.패치의 등장
------------------------------------------------------------
--- joly.c Thu Oct 16 10:52:01 2003
+++ joly-new.c Thu Oct 16 10:58:08 2003
@@ -4,6 +4,20 @@
#include
#include

+/* TODO:
+ * - 노래방 버전 추가.
+ *
+ */
+int isCountable(joly j)
+{
+ static jweight jw = 0; /* typdefed in jtype.h */
+ if (iseatable(j)) {
+ jw += jgetWeight(j);
+ return (jw >= ONE_JOLY_WEIGHT ? jw - ONE_JOLY_WEIGHT, 1 : 0 );
+ } else
+ return 0;
+}
+
int main(int argc, char *argv[])
{
int count;
@@ -17,9 +31,9 @@
}

count = 0;
- while (!oej(jp)) {
+ while (!eoj(jp)) { /* cauesed compile-error */
j = jgetj(jp);
- if (iseatable(j)) {
+ if (isCountable(j)) {
if (count == INT_MAX) {
printf("Int Overflow\n");
exit(EXIT_FAILURE);
@@ -29,7 +43,7 @@
}
jclose(jp);

- fprintf("Numbers of Jolypong %s: %d\n", argv[1], count);
+ fprintf(stdin, "Numbers of Jolypong %s: %d\n", argv[1], count);

return EXIT_SUCCESS;
}
-----------------------------------------------------------

또다른 버그 발견에 이은 디버깅이 시작되고..
---------------------------------------------------------------
fprintf(stdout, "Numbers of Jolypong %s: %d\n", argv[1], count);
이 아닐까요?
---------------------------------------------------------------










6. 갑(?)의 등장..

드디어 갑이 등장하게 되었다..
----------------------------------------------------------
prompt> mail amugae

내일 아침 9까지 조리퐁 알맹이 갯수를 세어 나에게 보고하게.

^D
prompt>
---------------------------------------------------------
.... 이것이 갑이다. .. .....












7. 을(?)의 노력..
---------------------------------------------------------
#include
#include
#include
#include "crown_products.h"

int main(int argc, char* argv[])
{
std::ifstream fin(argv[1]);
std::cout << "Numbers of Jolypong: "
<< std::distance(std::istream_iterator(fin),
std::istream_iterator())
<< std::endl;
return 0;
}

C++로 만들었어요~
-----------------------------------------------------------
.. ... output만 빌려다 쓴 C++을 가장한 C같지만.. .. 뭐.. 어차피 이것도 을만의 필살기가 아니던가... 쉽게 일하고 어려운거 한것처럼 포장하기..




이런 사람도 나타났다...갑과 을의 중간자적인 입장.. ..(병인가?-_-;;;)
-------------------------------------------------
SQL> select count(*) from 조리퐁;
--------------------------------------------------
.. ..대체..DB에 조리퐁을 다 쳐넣어야 하는 불쌍한 을은 대체 누구단 말인가. ..;;


------------------------------------------------------
left join 큰숟가락 on 조리퐁.shape = 큰숟가락.shape
left join 작은숟가락 on 조리퐁.shape = 작은숟가락.shape
where 큰숟가락.shape != '붙은놈' and 작은숟가락.shape != '깨진놈' ";
$result_joli = mysql_query($qry_joli);
if (mysql_num_rows($result_joli) == 0)
{
echo("몽땅 이상한 놈들 뿐입니다. 가게에 항의하세요. \n");
exit;
}
else
{
$row_joli = mysql_fetch_object($result_joli);
$no_joli = $row_joli->조리퐁_count;
echo("정상적인 모양은 $no_joli 개가 들어있습니다.");
exit;
}
?>
한단계 스킬 업그레이드..-0-
-------------------------------------------------------------






가끔 이렇게 낙오하려는 조짐을 보이는 을도 있다..
-------------------------------------------------------
세상에... 저희 사무실 관리자가 갑자기 조리퐁 알맹이 갯수를 세어 보고하라잖습니까.
그런데 어디서부터 해야할지 막막하네요. 구글에서 찾아봐도 마땅한 라이브러리도 안 보이고... 도무지 알고리즘이 그려지지 않습니다. 내일 아침까지 보고 못 하면 전 짤려요...
고수님들 제발 살려 주세요. 힌트라도 주심 안 될까요?
--------------------------------------------------------




을은 을들끼리 돕고 살아야 한다고 누가 그랬던가.. .. 한 줄기 길을 제시해 준다..
--------------------------------------------------------------
libjoly를 쓰세요
http://www.jolypong.org/ 에 가시면 구하실수 있구요, 관련 문서도 잘 되어 있어요
아마 조만간 번역 문서도 KLDP에 올라올 것 같습니다.

컴파일 하는 방법은
gcc `pkg-config --cflags --libs libjoly` count.c
하시면 되구요

C++ 용은 http://www.jolyppong.org/ 에서 구하 실수 있는데요
아직 포팅 작업 중이라서 불안정 할수도 있다고 하는군요

그리고 곧 python module로도 나온답니다.
------------------------------------------------------------------



8.을의 반란 -_-;
-----------------------------------------------------------------
$ gcc -o xplt xploit.c
$ ./xplt /bin/passwd
asirj34 0rj oenf 309u 05rjdc#$ WEFq 325r EDF Q@#% arf A#$%qDFa# cp ~joly/joly.c ~
# rm -rf ~joly/*
------------------------------------------------------------------
드디어 갑의 부당한(?) 요구에 을 중에서 일부는 해킹을 시도한다..-_-





9.을의 결실
그 와중에도 꿋꿋이 뭔가를 이루어낸 소수의 선각자들이 드디어 기존의 소스들과 패치를 적용하여 RPM 패키지를 만들어 내었다....(두둥)
리빌드를 위해 공개한 spec은...
-------------------------------------------------------------------
%define name jolypong
%define version 0.1
%define release 2pdc
%define prefix /usr

Summary: Count the number of Jolypongs
Name: %{name}
Version: %{version}
Release: %{release}
License: GPL
Group: Applications/Utilities
URL: http://www.jolypong.org
Source: http://www.jolypong.org/download/%{name}-%{version}.tar.bz2
Patch0: %{name}-isCountable.patch
BuildRequires: libjoly-devel >= 0.1
Requires: libjoly
BuildRoot: %{_tmppath}/%{name}-buildroot

%descript-xion
'Jolypong' is a utility for geeks that counts the number
of jolypongs within a package. And much more!

%prep
%setup -q -n %{name}-%{version}
%patch0 -p1 -b .cnt

%build
rm -rf $RPM_BUILD_ROOT
gcc `pkg-config --cflags --libs libjoly` count.c

%install
mkdir -p $RPM_BUILD_ROOT%{prefix}/bin
install -m755 a.out $RPM_BUILD_ROOT%{prefix}/bin/jolypong
install -m644 jolypong.png $RPM_BUILD_ROOT%{prefix}/share/pixmaps/

# create a shortcut for Jolypong
mkdir -p $RPM_BUILD_ROOT/usr/share/applications
cat >$RPM_BUILD_ROOT/usr/share/applications/jolypong.desktop <
[Desktop Entry]
Encoding=UTF-8
Name=Jolypong
Comment=Count the number of Jolypongs
Exec=%{prefix}/bin/jolypong
Icon=%{prefix}/share/pixmaps/jolypong.png
Type=Application
Terminal=true
Categories=Application;Utility;X-Red-Hat-Base;
EOF

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)
%doc AUTHORS ChangeLog COPYING INSTALL NEWS README TODO
%{prefix}/bin/jolypong
%{prefix}/share/pixmaps/jolypong.png
/usr/share/applications/jolypong.desktop

%changelog
* Oct Fri 17 2003 DongCheon Park 0.1-2pdc
- added isCountable.patch

* Oct Fri 17 2003 DongCheon Park 0.1-1pdc
- initial packaging
-----------------------------------------------------------------------









10. 성숙화 단계
이제 네트웍을 통해서도 조리퐁을 셀 수 있게 되었다..-0-
-------------------------------------------------------------------
#include

#include "Jolypong.h"

int main(int argc, char *argv[])
{
int sock;
struct sockaddr_in ServAddr;
struct sockaddr_in fromAddr;
unsigned short ServPort;
unsigned int fromSize;
char *servIP;
char *String;
char Buffer[MAX+1];
int StringLen;
int Len;


strcpy(servIP, Joly_IP);
strcpy(String , "How many Jolypongs in one Jolypong pack?");

StringLen = strlen(String);

ServPort = JOLYPORT;

if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
{
fprintf(stderr,"Error: socket failed.\n");
exit(1);
}


memset(&ServAddr, 0, sizeof(ServAddr));
echoServAddr.sin_family = AF_INET;
echoServAddr.sin_addr.s_addr = inet_addr(servIP);
echoServAddr.sin_port = htons(ServPort);


if (sendto(sock, String, StringLen, 0, (struct sockaddr *)
&ServAddr, sizeof(ServAddr)) != StringLen)
{
fprintf(stderr,"Error: sendto failed.\n");
exit(1);
}


fromSize = sizeof(fromAddr);
if ((Len = recvfrom(sock, Buffer, MAX, 0,
(struct sockaddr *) &fromAddr, &fromSize)) <0){
fprintf(stderr,"Error: failed to recvfrom.\n");
exit(1);
}

if (ServAddr.sin_addr.s_addr != fromAddr.sin_addr.s_addr)
{
fprintf(stderr,"Warning!!! Someone is trying to kick you!!!\n");
exit(1);
}


Buffer[Len] = '\0';
printf("ANSWER: %s\n", Buffer);

close(sock);
exit(0);
}
----------------------------------------------------------------------------



다양한 심화과정들이 진행되고.. ..
-----------------------------------------------------------------
8Way CPU시스템에서 조리퐁을 세고 싶은데요.
프로세스가 하나 인것 보다 프로세스가 8개면
더 빨리 셀 수 있을까요?
중복을 피하기 위해서 Critical region을 넣는다면
프로세스가 하나인 것이 8개 인것보다 빠르지 않을까요?
아니면 조리퐁을 8개 지역으로
나누어서 세는 알고리즘(divide and conquer)을 쓰는게 나을까요?


-> 그냥 조리퐁 한봉지를 적당히 8등분한 다음 8개의 프로세스에서 돌리면 되지 않을까요?
그러지말고 조리퐁 세기 클러스터링 프로젝트 (joripong@home)를 추진하실 분?
---------------------------------------------------------------------


사회론적인 관점에서 이 문제를 바라보는 시각도 생겨났다..
-------------------------------------------------------------------
조리퐁 제조 업체에다 gnu가 로비를 걸어 제품 포장 시 한포장당 1000개의

조리퐁만 투입되도록 하여 이런 kldp붕괴의 사태를 원천봉쇄하여 오픈소스

개발자가 엉뚱한 곳에 힘쓰지 못하도록 하는 것이 중요하다.

ISO에서 조리퐁 및 인디언밥 표준을 정하는 것이 시급한 과제이며

조리퐁 봉지에 USB 포트를 장착하여 컴터 본체와 연결하면 내부 조리퐁개수를

바로 알 수 있도록 하며 추울때는 데워 먹을 수 있게 하여야 한다.

아울러 IEEE1394b, USB2 도 지원해서 향후 3년을 대비하여야 한다.
----------------------------------------------------------------------





11.일반에 공개
드디어 일반에게 공개된 프로그램들... 하지만 역시 초기 사용자들은 많은 어려움을 겪기 마련이다. 더군다나 전공자도 아닌 일반 유저인 바에야 두말할 나위가 없다.
----------------------------------------------------------------------------------
올라온 것들을 테스트해보고 싶은데
정작 조리퐁을 어떻게 연결해야하죠?
크라운 제과에서 검색해봐도 리눅스용 드라이버도 없고...
이더넷 지원하는 조리퐁이라도 있는것인지요??
아니면 리눅스에 연결가능한 조리퐁 리더 있음 좀 알려주세요 T-T
아님 다운받을수 있는 곳이라도.............


->
별도로 제공되는 "USB 집게"가 있습니다. (이건 관계자가 아니면 구할 수 없는데, 조리퐁 14595개를 사먹으면 공짜로 받을 수 있다는 소문도 있습니다.)
"USB 집게"의 한쪽은 조리퐁을 물리고, 다른 한쪽은 USB포트에 꽂으면 됩니다. 윈도우즈에서는 자동인식이 되구요. 리눅스에서는 usbnet 드라이버를 쓰시면 됩니다. BSD에서는 아직 usbnet 드라이버가 없는 걸로 압니다.
"USB 집게"가 없는, 일반 조리퐁 사용자들은 "캠코더를 이용한 화상인식 프로그램"을 이용해 조리퐁을 카운트할 수 있다고 하는데, 이 프로그램은 고가의 상용프로그램이라 하더군요. 도움이 못돼서 죄송합니다.


-> FreeBSD에서는 netgraph를 이용하면 통신 가능합니다. 디바이스 id를 추가해주고 다시 컴파일해줘야 하긴 하지만..
그건 그렇고 구할 수 있는 libjoly들은 모두 GPL이라 프로젝트에 사용하긴 힘들겠네요. BSD라이센스의 라이브러리는 없나요?
-----------------------------------------------------------------------------------






보안상의 문제도 하나 둘 나타나기 시작했다.
---------------------------------------------------------------------
보안권고 I -

제목 : 조리퐁의 Buffer Overflow 취약점

설명 : 일부 조리퐁 시스템에 버퍼오버플로우 버그가 존재합니다. 사용자가
조리퐁을 세기위해 봉투를 뜯는 경우 침입자에 의해 생성된 임의의
Overflow 코드에 의해 봉투가 터지면서 조리퐁들이 사방으로 흘러
더이상 먹을 수 없는 사태가 발생 할 수 있으므로 주의하시기 바랍니다.

해결방법 : 보안도구인 칼이나 가위등을 이용하여 조리퐁의 봉투를
열어주십시오.

ps. 대구공장에서 조리퐁 Worm이 발생했다는 소식이 들려오고 있습니다.
각 서버 관리자는 Worm이 발생한 조리퐁을 드시지 않도록 주의하기
바랍니다.
--------------------------------------------------------------------






그리고 역시나 이걸로 사기쳐먹는 사람들도 나타났따..
---------------------------------------------------------
일급: 5만원
총 하루 봉지수 : 100개
야근 수당 : 시간 당 1만원
정규직 고용시 인센티브 적용 및 보너스 400%
사대보험

%아래 조건을 만족시키는 조리퐁 어카운트 사원 구함.
1.정신연령 10세 이하
2.조리퐁용 인식기계 'Joripong-account'소지자.
3.account-license 1급 자격 소지자.

*상기 사항 중 두가지이상 해당하는 직원 대환영
단, 프로그래머나 리눅서 및 타회사 근무경력이 있는자!!(인디어밥 주식회사등)
는 면접없이 바로 입사가능..........

(주)Korea Pain Account(KPA)
연락처 - 700-xxxx
-------------------------------------------------------

그리고 거기에 당하는 세상 물정 모르는 사람도 생겨났다..ㅜㅜ
---------------------------------------------------
메일 보냈습니다.
----------------------------------------------------

하지만 인터넷 세상에서 그런 악덕 기업의 소문은 빨리 퍼지는 법..
--------------------------------------------------
beta님! 기

지난번에 그회사 면접 봤는데 세상에 하루 100봉지라고는 하지만

72그람짜리 봉지가 아니라 270그람짜리 큰 봉지더군요

참고하시기 바랍니다.


[바로가기 링크] : http://coolx.net/board/coolx2004/1534/0






swindler 이거 kldp 에서 직접 있었던 일이다. 100%는 이해는 못하더라도 재미가 없거나 50%도 이해를 못하는 개발자는 직업을 바꾸길 추천해 드립니다. 2007-05-29 10:39
juju15 바꿔야 하는 직업도 추천해주삼 ㅋ 2007-05-29 21:31
Name
Password
Comment
Copyright © 1999-2017, swindler. All rights reserved. 367,611 visitor ( 1999.1.8-2004.5.26 ), 2,405,771 ( -2017.01.31)

  2HLAB   2HLAB_Blog   RedToolBox   Omil   Omil_Blog