어디선가 원치 않는 심볼을 참조하고 있다. 어디있을까
Perlmint
@perlmint@hackers.pub · 87 following · 75 followers
크로스 플랫폼 빌드 고치는 노동자
잡담은
@meperlmint 에서
Github
- @perlmint
Bluesky
- bsky.perlmint.dev
OOM 원인인 거대 파일 때문에 에디터가 죽었다. 재시작되고나서 여전히 열려있는 그 파일을 닫았는데 정리하는 중에 또 OOM으로 죽는다. 역시 또 재시작 되고 다시 그 파일을 열고 있는 에디터...
어?
왜 에러가 나지
어?
Perlmint shared the below article:
places.pub
Evan Prodromou @evanprodromou@socialwebfoundation.org
I'm making an initial version of places.pub available today. places.pub is a collection of Place objects suitable for use in geosocial applications on the ActivityPub network. Part of my work in the Social Web Community Group at the W3C has been participation in the GeoSocial Task Force. This is a sub-group of the SocialCG that focuses on implementing user stories in ActivityPub related to the intersection of geographical systems and social networking, for example, tagging an image with […]
Read more →어째서인지 모르겠지만 맥에서 PWA로 설치하면 passkey를 쓸 방법이 없다
뭐 하다가 여기까지 왔지... 서비스워커 붙여서 백그라운드 노티, 뱃지 추가하려고 했는데, 로그인 방법이 없어서 어떻게든 해보려다 당했구나
어째서인지 모르겠지만 맥에서 PWA로 설치하면 passkey를 쓸 방법이 없다
skt 유심교체는 언제 될지 모르겠으니 esim으로 가려고 했더니 무슨 esim셀프 개통도 사용자가 많다고 못한다고 막아버렸네...;
@perlmint 근데 Hackers' Pub은 Fresh 2.0 알파 버전을 쓰고 있어서 어떻게 될 지 모르겠네요…
@hongminhee洪 民憙 (Hong Minhee) 이슈랑 PR 이름만 보고 기대했는데, 마지막 갱신과 내용까지 보니까 기대가 사라졌어요...
fresh에서 아직 플러그인이 정적파일을 추가를 못한다고 확인을 했고, 이것에 대한 PR이 올라와 있으니, 머지되고 퍼블리시 되고나면 직접 컴파일러를 실행해서라도 Service worker, PWA 플러그인을 만들 수 있을 것 같다.
https://github.com/denoland/fresh/pull/2253 아니 지금 보니까 작년초에 올라온 PR이었잖아...?
PWA를 설치했을 때 android에서는 끌어서 새로고침이 동작하는데, iOS는 동작하지 않는다.
이런... 컨텍스트 넘쳤나 또 다시 코드 창조를 시작했다.
Claude가 코드에 �를 썼다...
이번 변경으로 홈 화면에 추가로 해커즈펍을 설치하면 android, iOS 양쪽 모두, 단독 앱인 것 같은 느낌으로 쓸 수 있게됩니다. 다만, 이메일의 로그인 링크가 설치 된 쪽으로는 안열리는 문제가 있으니 미리 로그인 된 상태에서 설치를 하셔야 곤란하지 않습니다.
이제 좌우 스크롤바가 거의 안생기고 상단의 필요없는 헤더가 없이 쓸 수 있다!
저도 비슷한 생각인데, Haskell이나 Rust는 코너 케이스를 다루지 않고는 컴파일도 못 하게 금지하는 경우들이 꽤 많고 (그래서 좋은 언어지요), 빠르게 해피 패스만을 검증하고 싶을 때는 Python 같은 널널한 언어(복잡하고 규모가 큰 소프트웨어를 만들 때는 나쁜 언어가 되지요)가 쉽게 느껴질 수 있다고 생각합니다. 즉, Haskell이나 Rust가 어렵다고 말할 때의 어려움은 개념적 이해의 난도라기 보다는 시행착오의 커브의 경사를 얘기하는 것 같아요.
비슷한 측면에서 저는 Python의 들여쓰기를 강제하는 문법이 프로그래밍 초심자에게 좋은 습관을 처음부터 정착시키는 데에는 일조할 수 있겠지만, 결코 쉽지는 않다고 생각합니다.
RE: https://hackers.pub/@bgl/01967f97-67ab-7a98-a6e5-16cb3ef31856
fresh에서 아직 플러그인이 정적파일을 추가를 못한다고 확인을 했고, 이것에 대한 PR이 올라와 있으니, 머지되고 퍼블리시 되고나면 직접 컴파일러를 실행해서라도 Service worker, PWA 플러그인을 만들 수 있을 것 같다.
아...? 회사일이랑 전혀 다른 쪽이라 오히려 css에 쉽게 손이 가는건가...?
Huge respect 🫡
@perlmint 무슨 기여든 모두 감사합니다…!!
@hongminhee洪 民憙 (Hong Minhee) 다 제가 보기 편하려고 고치는걸요 ㅎ...
분명 나는 다른걸 기여하고 싶었던 것 같은데 왜 css고치고 있지...?
좁은 화면폭에서 레이아웃 깨지는 케이스 2개 더 확인. 월요일이니 일단 이슈에 올려두어야지...
역시 UI는 너무 어려워... 겨우 뒤에 가려진 요소가 스크롤 안되게 만들기가 이렇게 어렵다니... html에 overflow: hidden을 먹이라는데, MacOS 사파리는 잘 동작하는데, 최소한 iOS사파리에서는 viewport가 정의되어있으면 동작 안한다고...
- 다이빙 연습
- 결혼식 참석
- 메타몽 라프라스 보러가기
- 집안 정리
4번 빼고 다 끝났는데 하기 싫다...
으앗... 너무 보기 불편한 것 중심으로 보고 고치다보니 일반적인 케이스에서 안예뻐졌다...
버그 하나만 고치고 외출 준비해야지 했다가 2번째 버그 잡다가 급하게 씻고 나왔다...
- 다이빙 연습
- 결혼식 참석
- 메타몽 라프라스 보러가기
- 집안 정리
으악 llvm으로 모자라서 gcc도 빌드한다
자고 일어나서 생각해보니 컨텍스트가 짧아서 유사 아무말을 하는게 아닌가 싶기도 하다. 따로 지정을 안했으니 뭔가 기본값을 쓰거나, 내가 직접 지정을 안해도 되는 것이거나 싶다. 후자면 원래 그런 모델이라는 말이고... 전자면 기본값이 너무 짧은게 아닐까 싶기도 하고...
비전 모델도 변환해보고 싶었지만, 변환기에서 지원 안하는 모델이라서 포기.
어제 하이퍼클로바X 변환이 첫 모델 변환이었는데, modelfile의 템플릿을 잘못 작성하면 응답이 안끝나는 결과물도 나온다. open-webui 통해서 그런 모델을 쓰면 취소도 제대로 안되어서 시스템 리부팅을 두번이나 해야했다.
자고 일어나서 생각해보니 컨텍스트가 짧아서 유사 아무말을 하는게 아닌가 싶기도 하다. 따로 지정을 안했으니 뭔가 기본값을 쓰거나, 내가 직접 지정을 안해도 되는 것이거나 싶다. 후자면 원래 그런 모델이라는 말이고... 전자면 기본값이 너무 짧은게 아닐까 싶기도 하고...
어제 하이퍼클로바X 변환이 첫 모델 변환이었는데, modelfile의 템플릿을 잘못 작성하면 응답이 안끝나는 결과물도 나온다. open-webui 통해서 그런 모델을 쓰면 취소도 제대로 안되어서 시스템 리부팅을 두번이나 해야했다.
Deno-lsp동작하게 하겠다고 삽질하던 중에 ts-ls가 원치않게 동작한적이 있는데, 이걸 고치고나니 node쪽 코드에서 ts-ls가 안켜진다.
전반적으로 말길을 잘 못 알아 듣네요. 전에 다른 모델에 영수증 OCR한 텍스트로 더치페이 계산 해달라고 했던 것을 똑같이 시켜보니까, 상품명에 “3개” 가 들어간 상품의 가격을 지 맘대로 3배한 가격으로 만들고, 더하기는 틀리지 않게 해놓고는, 사람수만큼 안나눠주고 어째서인지 상품별로 다시 가격 안내를 하고는 알아서 나눠 내라합니다.
https://llm.perlmint.app/s/50fd2903-57f1-4c22-b2cb-7ddc85fbc1f5 id/password: public@example.com / public
Show GN: 나만의 연합우주(fediverse) 마이크로블로그 만들기
------------------------------
이 튜토리얼은 [Fedify] 라이브러리를 사용하여 [ActivityPub] 프로토콜 기반의 마이크로블로그 서비스를 구현하는 방법을 설명합니다. ActivityPub은 다양한 소셜 네트워크 서비스들이 서로 연동될 수 있게 해주는 분산형 소셜 네트워킹 프로토콜로, 이를 통해 [Mastodon], [Misskey] 같은 서비스와 상호작용할 수 있는 독…
------------------------------
https://news.hada.io/topic?id=20508&utm_source=googlechat&utm_medium=bot&utm_campaign=1834
네이버에서 모델 공개했다고 해서 ollama로 변환해서 돌려봤는데...
전반적으로 말길을 잘 못 알아 듣네요. 전에 다른 모델에 영수증 OCR한 텍스트로 더치페이 계산 해달라고 했던 것을 똑같이 시켜보니까, 상품명에 “3개” 가 들어간 상품의 가격을 지 맘대로 3배한 가격으로 만들고, 더하기는 틀리지 않게 해놓고는, 사람수만큼 안나눠주고 어째서인지 상품별로 다시 가격 안내를 하고는 알아서 나눠 내라합니다.
@perillamint
서버메이드 깐프 음식에 충격 받아서 그만... 요약 한번 시켜보고 알려드리죠
@perillamint
서버메이드 깐프 요약 해달라니까 관련된 내용으로 창조를 하는데요...?
아니 이것들은 글을 요약해달라고 했지 평가해달라고 했나...;
@perlmint 요약 잘 말아주나요?
@perillamint
서버메이드 깐프 음식에 충격 받아서 그만... 요약 한번 시켜보고 알려드리죠
오... open-webui 에서 모델 여러개 선택하면 이렇게 나오는구나
네이버에서 모델 공개했다고 해서 ollama로 변환해서 돌려봤는데...
아무도 읽을 필요가 없길 바라는 글을 작성했다.
간단한 rpmbuild의 사용과 private rpm package 배포
Perlmint @perlmint@hackers.pub
마지못해 패키지를 만들어야 할 것 같은 사람을 위한 설명입니다. 제대로된 패키지를 만들고 싶은 경우에는 부족한 점이 많습니다.
대부분의 경우에는 프로그램을 직접 소스에서 빌드하는 일도 적고, 그걸 시스템 전역에 설치하는 일도 흔치는 않을 것입니다. 좋은 패키지매니저와 관리가 잘되는 패키지 저장소들을 두고 아주 가끔은 직접 빌드를 할 일이 생기고, 흔치 않게 시스템 전역에 설치할 일이 생길 수 있습니다. 어지간한 프로그램들은 요즈음의 장비에서는 별 불만 없이 빌드 할 만한 시간이 소요되나, 컴파일러처럼 한번 빌드했으면 다시는 하고 싶지 않은 프로그램을 다시 설치해야하는 경우도 있을 수 있습니다. 하필 이런 프로그램들은 결과물도 덩치가 매우 큽니다. 이럴 때는 최대한 간단하고 필요한 항목만 패키지에 넣어서 만들어두고 다시 활용하면 좋을 것이기에 이런 경우를 위한 rpmbuild에 대한 나름 최소한의 사용 방법을 정리해봅니다.
rpmbuild
rpmbuild는 rpm-build 패키지로 설치가 가능하며, 나름 단순하게 rpm으로 패키징을 할 수 있는 유틸리티입니다. spec파일에 패키지 정보, 빌드 명령, 설치 명령, 패키지가 포함해야 할 파일 목록을 작성해서 rpmbuild에 입력으로 넣어주면 빌드부터 시작해서 rpm패키지를 만들어줍니다. native 프로그램의 경우 디버그 심볼을 알아서 분리해서 별도의 패키지로 만들어주고, 필요한 의존성도 추정해서 명시해줍니다. 또한, 필요한 경우 하나의 spec 명세로 연관된 서브 패키지도(ex. 실행파일 패키지인 curl과 라이브러리 패키지 libcurl, 라이브러리를 사용하기 위한 개발 패키지 libcurl-devel) 같이 만들 수 있습니다.
작업 환경
rpmbuild는 기본으로 ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS,BUILDROOT}의 경로에서 동작하며 각 경로의 용도는 다음과 같습니다.
SOURCES에는 압축된 소스코드가 위치합니다.SPECS에는 패키지 정의인 spec파일을 둡니다.BUILD밑에서 빌드 작업이 진행됩니다.RPMS에 바이너리 rpm결과물이 생성됩니다.SRPMS에는 소스 rpm결과물이 생성됩니다.BUILDROOT는 패키징 하기 위해 빌드 결과물을 모으는 경로입니다.
spec파일
spec파일은 패키지를 어떻게 빌드하고 어떤 항목들이 패키지에 포함될지, 패키지의 이름, 설명 및 의존성 등의 메타데이터, 패키지 설치, 삭제시의 스크립트를 정의할 수 있습니다. 보통 시작 부분에는 메타데이터 정의로 시작하며, 다음과 같은 기본적인 형태를 취합니다. 나름 단순하게 만든 python을 위한 spec을 예시로 들어보겠습니다.
Summary: Python %{version}
Name: python-alternative
Version: %{version}
Release: 1%{?dist}
Obsoletes: %{name} <= %{version}
Provides: %{name} = %{version}
URL: https://www.python.org
Requires: libffi openssl
AutoReq: no
License: PSFL
Source: https://www.python.org/ftp/python/%{version}/Python-%{version}.tgz
BuildRequires: libffi-devel openssl-devel
BuiltRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
%define major_version %(echo "%{version}" | sed -E 's/^([0-9]+)\\..+/\1/' | tr -d)
%define minor_version %(echo "%{version}" | sed -E 's/^[0-9]+\\.([0-9]+)\\..+/\1/' | tr -d)
%description
Python
%package devel
Summary: python development files
Requires: %{name} = %{version}-%{release}
%description devel
Python development package
%prep
%setup -q -n Python-%{version}
%build
./configure --prefix=%{_prefix}
%install
%{__make} altinstall DESTDIR=%{buildroot}
%{__ln_s} -f %{_bindir}/python%{major_version}.%{minor_version} %{buildroot}/%{_bindir}/python%{major_version}
%clean
%{__rm} -rf %{buildroot}
%files
%{_bindir}/python*
%exclude %{_bindir}/idle*
%{_bindir}/pip*
%{_bindir}/pydoc*
%exclude %{_bindir}/2to3*
%{_libdir}/libpython*
%{_prefix}/lib/libpython*
%{_prefix}/lib/python*
%{_mandir}/man1/python*
%files devel
%{_includedir}/python*
%{_prefix}/lib/pkgconfig/python*
%로 매크로를 사용할 수 있으며, %package, %description, %files 같은 매크로는 인자를 주어서 서브 패키지를 정의하는데도 쓸 수 있습니다.
앞선 예제처럼 devel 이라고작성하면 메인 패키지이름 뒤에 붙여서 python-alternative-devel가 되며, curl - libcurl과 같은 경우에는 메인의 이름은 curl이고, 딸린 패키지를 정의할 때는 %package -n libcurl과 같이 -n옵션을 추가해서 지정할 수 있습니다. 몇몇 매크로는 단계를 정의하는 것과 같은 동작을 하며 다음과 같습니다.
%package
유사성을 보면 spec파일의 맨 첫부분은 메인 패키지의 %package에 해당하는 것이 아닌가 싶습니다. <Key>: <Value>의 형태로 메타정보를 작성합니다. 대부분은 Key를 보면 무슨 값인지 추측 할 만합니다.
나중에 설명할 %files에서 나열한 파일을 rpmbuild가 분석하여 자동으로 패키지가 필요로 하는 의존성을 추정해서 추가 해 줍니다. python 스크립트, perl 스크립트, native 실행파일 등을 분석해서 알아서 추가해주는 것 같은데, 경우에 따라서는 틀린 의존성을 추가해주기도 합니다. 이 때는 AutoReq: no를 설정하여 자동 의존성 추가를 막을 수 있습니다. 이 python-alternative 패키지는 /usr/local/bin/python%{version}을 설치하는데 아마도 같이 포함되는 python 스크립트에 의해서 /bin/python을 의존성으로 추정하여 요구합니다. 패키지 스스로가 제공하는 의존성은 미리 설치 되어있기를 요구하지 않게 동작하는 것 같으니 보통은 문제가 없습니다만, 이 경우에는 스스로 제공을 하지 않기 때문에 python을 설치하기 위해서 python이 필요한 경우가 발생하므로 AutoReq를 껐습니다.
%prep
준비단계로 소스코드의 압축을 해제하고 필요한경우 패치를 적용합니다.
%setup 매크로를 이 안에서 보통 사용하며, %setup은 Source에 명시된 파일명의 압축 파일을 SOURCES 밑에서 찾아서 압축을 풉니다. 그리고 동일한 이름의 디렉토리로 이동을 합니다. 앞선 예제에서는 SOURCES/Python-%{version}.tgz의 압축을 풀고 Python-%{version}으로 이동을 합니다.
패치가 필요한 경우 보통 이 뒤에 패치를 적용하는 명령들을 추가 합니다.
%build
설정, 컴파일 등을 수행하는 단계입니다. 이곳에서 자주 하는 매크로로 %configure, %make_build 등이 있습니다. %configure는 configure를 prefix 및 기타 몇가지 일반적으로 쓰이는 옵션을 추가하여 실행해주며, %make_build는 make와 비슷하게 모든 타겟을 빌드 합니다. 예제에서는 둘다 안쓰고 있고, 심지어 실제 빌드는 안하는데 어쨌든 이후의 %install까지 지나고나서 빌드 결과물만 맞는 위치에 만들어지면 대충 패키지를 만드는데는 별 문제는 없는 것 같습니다.
%install
여기서 빌드 결과물을 설치하는 명령을 작성합니다. 일반적으로 %make_install을 사용하여 make install DESTDIR=%{buildroot}와 비슷한 명령을 수행하여 %{buildroot}밑에 빌드 결과물이 prefix를 유지하여 설치되게 합니다. 예제의
%{__ln_s} -f %{_bindir}/python%{major_version}.%{minor_version} %{buildroot}/%{_bindir}/python%{major_version}을 보면 추정 할 수 있듯이, 패키지에 포함시킬 파일들을 %{buildroot}밑에 생성을 하면 되며, 추가적인 심볼릭 링크는 패키지를 빌드하는 시점에는 존재하지 않지만, 패키지를 설치하게되면 존재하게 될 %{_bindir}/python%{major_version}.%{minor_version}를 향하는 것을 %{buildroot} 밑인 %{buildroot}/%{_bindir}/python%{major_version}에 만듭니다.
%files
패키지에 포함될 파일 목록을 작성합니다. glob 양식으로 파일 목록을 작성할 수 있습니다. %{buildroot} 밑에 생성 되었지만 어느 %files에도 포함되지 않은 파일이 있는 경우에는 빌드를 실패합니다. 그러므로 %exclude를 사용해서 명시적으로 제외해줘야 합니다.
기타 매크로
rpmbuild에서는 기본으로 다양한 매크로를 제공하고 있습니다. --define "_libdir %{_prefix}/lib64"와 같은 옵션을 실행시에 주어서 실행시점에 매크로를 덮어 쓸 수도 있고, 앞선 spec파일 내의 %define major_version 와 같이 다른 매크로와 셸 명령을 활용하여 매크로를 정의 할 수도 있습니다.
원하는 동작을 안하는 것 같은 경우에는 --show-rc옵션을 사용하여 매크로가 어떻게 정의되어있는지 확인해 볼 수 있습니다.
빌드
rpmbuild의 매뉴얼을 보면 자세하게 나와있지만 가장 단순하게는
rpmbuild -bb <specfile>로 바이너리 패키지를 빌드할 수 있습다. 이 때, 압축된 소스코드는 미리 SOURCES밑에 두어야 합니다.
private rpm package 배포
직접 비공개 패키지 저장소 프로그램을 실행하여 제공하는 방법도 있겠지만, 최대한 간단하게 할 수 있는 방법으로, rpm관련 패키지 설치 명령이 입력으로 http등의 URL도 받는 것을 활용하여 적당한 장비에서 http로 서빙을 해주면 됩니다.
힘들게 작성했던 스크립트가 사라졌나 했는데 아직 머지가 안되어서 안보이는 것이었다. 진짜 놀랬네...
vcpkg에서 혹시 모르니까 컴파일러 해시를 비교해서 패키지를 다시 빌드하게 한다는데, MSVC만 유독 다른 머신에 같은 버전으로 죄다 설치해도 해시가 다르게 나와버려서 사실상 공유를 못하는 문제가 있나보다. 이것 때문에 쓸데없는 리빌드로 20분정도씩 매번 낭비하는 것 같은데...
CI에서만 인자 파싱이 아무래도 이상하길래 pwsh를 7.2.2에서 7.5.0으로 업데이트 하니까 해결 되었다.
AI 생태계에 씨앗을 뿌리다: 상업용 오픈소스 AI, HyperCLOVA X SEED | CLOVA
https://bit.ly/4cOkG8e
- 네이버는 상업용 오픈소스 AI 모델 HyperCLOVA X SEED를 공개
- 3B(이미지 이해), 1.5B(텍스트 처리), 0.5B(경량 대화) 세 가지 크기로 출시
- 모두 한국어에 특화되어 동급 모델보다 우수한 성능을 보임
- 2024년 4월 24일부터 Hugging Face에서 다운로드 가능
Gemma 3 와 비교하는군요
오는 8월 9일 Microsoft Korea에서 열리는 #우분투 #사용자 와 #기여자 가 모이는 국내 최대 행사, #UbuCon Korea 2025의 #연사 를 찾습니다! 🎤
올해는 특별히 커뮤니티 #20주년 을 맞아, #초보자 부터 #전문가 까지 모두를 위한 우분투 #활용법 과 경험, 흥미로운 #사례 를 공유해주실 분들을 기다립니다. 여러분의 우분투, #리눅스 그리고 #오픈소스 이야기를 들려주세요! ✨
🗓️ #CFP 마감: 2025년 5월 16일
🔗 자세히 보기 및 #제안서 제출: https://2025.ubuntu-kr.org/cfp
#UbuConKorea #UbuConKorea2025 #Ubuntu #컨퍼런스
@ubuntuCanonical Ubuntu
친구가 외국 반도체회사에 다니는데 이름만 들으면 다 아는 세계에서 손꼽히는 회사다. 1년 전쯤에, 친구가 자기 팀에서 예전부터 쓰고있는 시뮬레이션 코드가 너무 복잡해서 리팩토링 하고 싶다고 나를 찾아왔다. 한 2, 3000줄 되는 Numpy 코드였다.
나는 시뮬레이션의 의미 자체는 전혀 이해를 못하니(이래서 보안문제도 익스큐즈 할수 있었을 것이다), 그냥 코드의 모양만 보고 이상한 부분을 조금씩 고쳐나갔다. 그... 전형적인 물리학자들의 실험실 코드였다(코드를 못짜는건 이해를 하는데, 거기에 대해 한치의 부끄러움도 느끼지 않는다는 점이 뒷목을 잡게 만든다). Numpy 함수도 제대로 활용을 못해놨길래, 나도 Numpy 잘 못쓰지만 대충 이런 함수가 아마 있겠지... 하고 검색해서 찾아내서 교체하고 이런걸 반복했다.
이것저것 고친 다음에 잘돌아가나 한번 실행을 해봤는데, 이럴수가. 시뮬레이션이 1000배 빨라졌다. 아니 뭐, 한 2배 3배 빨라졌으면 내 솜씨라고 자부할텐데, 1000배 빨라진거는 그냥 원래 코드가 똥통이었다고 해석할수 밖에 없다. 구라안치고 정말 1000배다. 1000배의 성능향상의 보답으로 나는 교촌치킨웨지콤보세트를 현장에서 받아먹었다.
그 이후에 어떤 일이 있었냐. 기존 시뮬레이션 코드로는 하루에 시뮬레이션을 2, 3번정도밖에 돌리지 못했는데, 1000배 빨라지고 나니까 결과가 수십초만에 나오니 하루에 수백번 돌릴수 있게 된것이다(내가 고친 코드가 전부는 아니어서 1000배 향상은 아닌데, 가장 큰 병목이긴 해서 결국 100배 이상이라는 듯). 그때부터 100배 많아진 데이터를 처리하기 위한 인프라가 필요해졌다. 그래서 거기 개발팀이 데이터베이스와 데이터 파이프라인 구축을 시작하게 되었다고 한다. 그 팀에서는 일종의 특이점이 시작된것이다;;
결론: 교촌치킨웨지콤보 세트는 개맛있었다.






