아 오랜만에 글을 써봅니다! 그 동안 얼마나 글을 쓰고싶었는지!
안녕하세요 저는 잘 지냅니다 허허.

오늘 들고온 물건은 역시 잉여한 물건입니다. 저는 이런 잉여한 작업을 좋아하죠.
저는 참고 문헌을 마지막에 쓰는게 싫습니다. 먼저 쓰신 분들에게 실례같아요. 그러니 먼저 오늘 이 글을 쓰기에 이르기까지 참고한 사이트를 먼저 쓰고자 합니다.

http://www.clien.net/cs2/bbs/board.php?bo_table=lecture&wr_id=212575
http://www.linuxjournal.com/article/3641
https://docs.python.org/3.4/c-api/init.html

자 그럼 시작해볼까요.

이번 글은 C++에서 tweepy를 사용하기 위해 삽질한 글 입니다. 사용한 파이썬 버전은 3.4.3 입니다.
최종 목적은 C 함수를 파이썬에서 호출하고 파이썬 코드를 C에서 호출하는 것 입니다.

이 글은 Windows를 기준으로 설명됩니다. 리눅스는 훨씬 더 쉽게 작업을 진행 하실 수 있습니다 -ㅅ-; 리눅스 개발자 분들은 알아서 잘 하실거라 믿어요.

먼저 파이썬을 다운받아 설치합니다. 아, 최종적으로 배포하시려는 프로그램의 플랫폼이 32비트면 32비트 파이썬을 다운받아 주시는것 잊지 마시구요!
이제 부스트를 빌드해봅시다. 부스트 빌드 옵션의 자세한 설명은 구글에 검색해 보시길 권장합니다. 참고로 저는 아래 블로그를 참고해서 빌드했습니다.

http://warmz.tistory.com/903

그 다음에 tweepy를 받고 인스톨합니다. 머 이건 자유입니다. 그냥 참고만 하셔도 됩니다. (참고로 tweepy는 3.4.3에서 오류가 있습니다. 해결 방법은 맨 마지막에 있습니다.)

위 작업이 끝나셨으면, 이제 코딩하러 갑니다.
VS를 실행하시고 프로젝트 생성 후 반드시 Release 빌드로 바꾸시고 Python 인스톨 디렉터리 안의 include를 헤더 파일 경로에 추가, libs 폴더를 라이브러리 폴더에 추가해줍니다.
Release로 빌드 안하면 python_d.lib 없다고 컴파일 안되는데 python_d.lib를 구하려면 파이썬 소스 코드를 직접 컴파일 하셔야합니다... 귀찮으니 생략합니다.

부스트 역시 라이브러리 폴더와 헤더 폴더에 추가합니다. (경로는 부스트 빌드가 끝나면 출력해줍니다.)

으음. 일단 파이썬 스크립트먼저 대충 짜볼까요...
tweepy 예제 코드를 조금 수정해보죠.

import twit_c
import time
import webbrowser
from getpass import getpass

import tweepy
import sys

class StreamWatcherListener(tweepy.StreamListener):
    def on_status(self, status):
        try:
            # C 함수를 호출합니다.
            twit_c.on_status(status.text)
        except:
            print(sys.exc_info())
            pass

    def on_error(self, status_code):
        print('An error has occured! Status code = %s' % status_code)
        return True  # keep stream alive

    def on_timeout(self):
        print('Snoozing Zzzzzz')

consumer_key = '수정'
consumer_secret = '수정'

access_token = '수정'
access_secret = '수정'

auth = tweepy.auth.OAuthHandler(consumer_key, consumer_secret, 'oob')
auth.set_access_token(access_token, access_secret)

api = tweepy.API(auth)
stream = ''

l = StreamWatcherListener()

def get_authorization_url():
    return auth.get_authorization_url()

def set_access_token(pin):
    auth.get_access_token(verifier=pin)
    
    global api
    api = tweepy.API(auth)
                
def userstream_start(run_async = False):
    global stream
    global l
    stream = tweepy.Stream(auth, l)
    stream.userstream(async = run_async)

def userstream_end():
    global stream
    stream.disconnect()

def home_timeline(page = 0, max_id = -1):
    if max_id == -1:
        return api.home_timeline()
    else:
        return api.home_timeline(page=0, max_id=max_id);

으음. 머 이정도 일까요. 제가 파이썬을 제대로 공부한게 아니라 코드가 병신이네요. 넹 머 그래도 불편함 없이 충분히 테스트 가능할거 같네요.
프로젝트 폴더 안에 scripts라는 폴더를 생성 하고 위 코드를 twit.py 라는 파일로 저장하겠습니다. 그리고 __init__.py 를 만듭니다. 머 딱히 아무것도 안쓰셔도 됩니다.


C++로 돌아와보죠.
부스트 헤더와 파이썬 헤더를 인클루드합니다.

#include <stdio.h>
#include <string>
#include <windows.h>

#include <python.h>

// 아래 두 개의 전처리문에 대해서는 검색하시기 바랍니다.
#define BOOST_ALL_NO_LIB 
#define BOOST_PYTHON_STATIC_LIB 
#include <boost/python.hpp>

// 사용할 lib 파일을 지정합니다.
#pragma comment(lib, "libboost_python3-vc120-mt-1_58.lib")

// 유니코드 지원을 위한
#include <io.h>
#include <fcntl.h>

자 이제 파이썬에서 호출할 함수를 만들죠.

// 파이썬에서 호출할 함수입니다.
static PyObject* OnStatus(PyObject *self, PyObject *args)
{
	const char* str = NULL;
	if (!PyArg_ParseTuple(args, "s", &str))
		return NULL;

	// 파이썬 3.4.3에서 tweepy는 utf8 문자열을 던져줍니다.
	// 콘솔에서 출력을 위해 utf-16으로 인코딩을 바꾸어 줍니다.
	wchar_t text[300] = { 0 };
	MultiByteToWideChar(CP_UTF8, 0, str, -1, text, 300);
	wprintf(L"%s\n", text);
	Py_RETURN_NONE;
}

// 파이썬에서 호출할 함수를 가지고 있는 변수.
// 자세한 내용은 Python API 문서를 참고해주시기 바랍니다.
static PyMethodDef OnStatusMethods[] = {
	{ "on_status", (PyCFunction)OnStatus, METH_VARARGS,
	"userstream callback function." },
	{ NULL, NULL, 0, NULL }
};

// 모듈 변수.. 자세한 내용은 역시 Python API.
static struct PyModuleDef OnStatusModules = {
	PyModuleDef_HEAD_INIT,
	"twit_c",
	"userstream callback test.",
	-1, OnStatusMethods
};

// 모듈을 등록할 때 함수포인터를 받네요... 그래서 만들었습니다.
static PyObject* PyInit_Twit(void)
{
	return PyModule_Create(&OnStatusModules);
}

와 이거 점점 길어지는데요 ㅋㅋ....

본격적으로 들어가기전에 boost python에 잠시 이야기하겠습니다.
본래 python을 순수 Python API만을 이용하여 C에서 사용하려고 하면 PyObject*에 대해 수동으로 레퍼런스 카운팅을 해줘야합니다.
무슨 소리냐구요? 메모리를 개발자가 수동으로 관리해 주어야 한다는 소리죠!

아 이 얼마나 귀찮은 이야기입니까... 코드 적게 짜겠다고 임베디드 파이썬 써보려고 하는데 레퍼런스 카운트가 수동이라니;
코드가 더러워질거 같습니다. C++11에서 표준으로 포함된 shared_ptr 같은 놈을 쓰면 인생 참 행복해 질텐데 말이죠.

boost python을 사용하면 그게 됩니다. 넹. 여러분이 레퍼런스 카운팅을 신경 쓸 필요가 없다는거죠. 이 외에 더 좋은 기능도 많습니다. 제가 저 위에 파이썬에서 C 함수 호출하겠다고 장황하게 쓴 저것도 boost python을 사용하면 사실 간단하게 만들 수 있는것 같더라구요. 해보진 않아서 모르겠습니다. 아닌가..?

자세한 내용은 글 시작하기 전에 써놓은 클리앙 링크를 참고해주세요. 이 글보다 몇 백배 친절한 설명이 있으며 이 글보다 예외 처리도 잘 되어있습니다...
자 그럼 이 좋은 부스트 파이썬을 바로 써보도록 하져.

boost::python::object tmp; 를 입력하고 저장하느 순간 Visual Studio의 Intellisense가 비명을 지르기 시작하는게 함정

int main(int argc, char *argv[])
{
	using namespace boost::python;

	// Windows 콘솔에서 유니코드 글자 출력을 위해 필요합니다!
	_setmode(_fileno(stdout), _O_U16TEXT);

	// 이 함수는 Py_Initialize 함수가 호출되기 전에 호출되어야 합니다.
	PyImport_AppendInittab("twit_c", &PyInit_Twit);

	// 파이썬 초기화
	Py_Initialize();

	// 항상 예외는 체크해 주셔야 합니다.
	// 아래 코드를 블럭으로 묶은 이유는 스코프 범위 때문입니다.
	// Py_Finalize 함수가 호출 되기 전에 모든 PyObject*가 해제되어야 합니다.
	// 만약 스코프를 제한하지 않으면 Py_Finalize  이후에 boost::python::object 클래스의 소멸자가 호출되며
	// 이는 런타임 에러로 이어집니다.
	//try
	{
		// scripts 폴더의 twit.py를 import 한 후 그 객체를 twit에 저장합니다.
		boost::python::object twit = boost::python::object(boost::python::handle<>(PyImport_ImportModule("scripts.twit")));

		// twit에서 home_timeline 어트리뷰트를 찾고 호출합니다.
		// boost python에서 어트리뷰트를 찾는 함수는 attr이며, 이 함수의 결과로 리턴되는 object 클래스는 ()가 오버로딩 되어있습니다.
		// 이 오버로드된 ()을 호출하게 되면 해당 어트리뷰트의 함수를 실행합니다.
		// 만약 존재하지 않는 어트리뷰트를 실행하게 될 경우 예외를 내뿜게 되니 예외처리를 해주셔야합니다.
		auto hometimeline = twit.attr("home_timeline")();
		auto hometimeline_sizeof = hometimeline.attr("__len__")();

		// extract함수는 리턴 결과를 특정 타입으로 캐스팅 시켜줍니다. __len__ 함수는 int형을 리턴하므로 int로 캐스팅해줍니다.
		// 만약 캐스팅에 실패하면 (리스트를 int형으로 바꾼다던가... 불가능한 캐스팅의 경우) 역시 예외가 발생합니다.
		int testCount = boost::python::extract<int>(hometimeline_sizeof);
		wprintf(L"%d\n", testCount);

		// 프로퍼티나 변수의 경우 아래처럼 그냥 어트리뷰트만 가져온 후 extract로 타입 변환 해주면 됩니다.
		// 오버로딩된 ()를 호출할 경우 예외가 발생하니 주의해주세요.
		long long maxId = boost::python::extract<long long>(hometimeline.attr("max_id"));

		for (int i = 0; i < testCount; i++)
		{
			auto py_auther_name = hometimeline[i].attr("author").attr("name");
			auto py_auther_screen_name = hometimeline[i].attr("author").attr("screen_name");
			auto py_text = hometimeline[i].attr("text");

			char* utf8_auther_name = boost::python::extract<char*>(py_auther_name);
			char* utf8_screen_name = boost::python::extract<char*>(py_auther_screen_name);
			char* utf8_text = boost::python::extract<char*>(py_text);

			wchar_t u_auther_name[300] = { 0 };
			wchar_t u_screen_name[300] = { 0 };
			wchar_t u_text[300] = { 0 };

			// 변경하는 이유는 위에 파이썬에서 호출되는 함수에 써놓았습니다.
			MultiByteToWideChar(CP_UTF8, 0, utf8_auther_name, -1, u_auther_name, 300);
			MultiByteToWideChar(CP_UTF8, 0, utf8_screen_name, -1, u_screen_name, 300);
			MultiByteToWideChar(CP_UTF8, 0, utf8_text, -1, u_text, 300);

			// wprintf(L"auther id : %s, screen_name : %s\n", u_auther_name, u_screen_name);
			wprintf(L"text : %s\n", u_text);
		}

		wprintf(L"Start UserStream!\n");
		// userstream 서버에 접속합니다!
		// 이 함수의 인자는 async 여부이므로 true을 던져줬으니 비동기로 처리한다는 이야기겠죠?
		// 안타깝지만 작동하지 않습니다. 정확힌 함수가 호출되고 실행되다 일시정지됩니다.
		twit.attr("userstream_start")(true);

		// 사용자로 부터 입력을 받습니다.
		while (1)
		{
			wchar_t input[300] = { 0 };
			std::wcin >> input;
			if (input[0] == L'q')
			{
				twit.attr("userstream_end")();
				break;
			}
		}
	}
	// catch (...)
	// {
	// }

	Py_Finalize();
	return 0;
}

머 홈 타임라인은 얻어오네요 ㅎㅎ. cin까지도 정상적으로 호출됩니다.



하지만 안타깝게도.. 유저스트림이 작동하질 않아요...
파이썬 코드에서 생성한 쓰레드가 중간에 정지되기 때문입니다. ㅜ_ㅜ
해결방법이 있으니까 글을 썼겠져?

이를 위해선 C코드에서 파이썬 쓰레드를 관리해주어야 할 필요가 있습니다.

자 그럼 관리해보죠.

int main(int argc, char *argv[])
{
	using namespace boost::python;

	_setmode(_fileno(stdout), _O_U16TEXT);

	PyImport_AppendInittab("twit_c", &PyInit_Twit);

	Py_Initialize();

	// !추가!
	PyEval_InitThreads();

	{
		boost::python::object twit = boost::python::object(boost::python::handle<>(PyImport_ImportModule("scripts.twit")));
		
		// 현재 파이썬 쓰레드 상태를 가져옵니다.
		auto mainThreadState = PyThreadState_Get();

		wprintf(L"Start UserStream!\n");
		twit.attr("userstream_start")(true);

		// 현재 쓰레드 상태를 저장하고 쓰레드의 global interpreter lock(GIL)을 해제합니다.
		// GIL에 대한 설명은 Python API를 참고해주세요.
		mainThreadState = PyEval_SaveThread();

		while (1)
		{
			wchar_t input[300] = { 0 };
			std::wcin >> input;
			if (input[0] == L'q')
			{
				// 마지막으로 저장된 쓰레드 상태를 가져온 후 GIL을 설정합니다.
				// PyEval_SaveThread()를 호출한 이후에는 파이썬의 현재 쓰레드 상태가 NULL이 되기 때문에
				// 반드시 아래 함수나 PyThreadState_Swap 함수를 이용하여 쓰레드 상태를 변경해주어야 다른 파이썬 코드를 실행 할 수 있습니다.
				// 또한 PyEval_SaveThread() 후 파이썬 코드를 실행하기 전에 GIL을 반드시 설정해야 한다는 사실도 잊지 마시길 바랍니다.
				PyEval_RestoreThread(mainThreadState);
				twit.attr("userstream_end")();
				// 현재 쓰레드 상태를 저장하고 GIL을 해제합니다.
				mainThreadState = PyEval_SaveThread();
				break;
			}
		}
		// 마지막으로 저장된 쓰레드 상태를 가져온 후 GIL을 설정합니다.
		// Py_Finalize 함수 호출 전에 반드시 GIL이 설정되어있어야 합니다.
		PyEval_RestoreThread(mainThreadState);
	}
	Py_Finalize();
	return 0;
}

우와..이렇게 하면 작동해야 할텐데 말이죠...



머져 이 귀찮은건...

tweepy의 코드를 수정해줍니다. tweepy/streaming.py를 편집기로 열고 ReadBuffer 클래스의 161번 줄, 171번줄을 수정합니다.

    def read_len(self, length):
            # ...중간 코드 생략...
            # 아래 코드의 맨 끝에 .decode('utf-8')을 붙입니다.
            self._buffer += self._stream.read(read_len).decode('utf-8')

    def read_line(self, sep='\n'):
            # ...중간 코드 생략...
            # 아래 코드의 맨 끝에 .decode('utf-8')을 붙입니다.
            self._buffer += self._stream.read(self._chunk_size).decode('utf-8')

이렇게 오랜만의 글이 끝났네요. 설명이 무진장 대충이라 이해가 안되시는 부분도 많을거라 생각됩니다....
그런 부분에 대해서는 위에 언급한 사이트를 참고하셔서(...) 위기를 잘 헤쳐나가시길 바랍니다.
사실 이 글과 저 위에 있는 글 2개면 왠만한 임베디드 파이썬에서 문제가 생길것 같진 않네요.

블로그를 방문해 주셔서 감사합니다. 좋은 하루 되시고 즐거운 코딩하시길 바랍니다!


앵커 충전기입니다!


1세대부터 현재 나온 3세대까지 모두 써 봤지만 역시 제일 늦게 나온 3세대가 제일 안정적입니다.

1세대는 IQ 기능이 없고 2세대는 IQ 기능이 생겼지만 1세대랑 동일하게 퓨즈가 끊기면 죽어버리는 증상이 있었고요 ㅜㅜ

하지만 3세대가 나오고는 그런 걱정도 NO! 국내 정식 발매로 AS도 가능!


IQ 기능으로 아이패드 같이 전력이 많이 필요한 기기라도 안정적으로 충전도 가능해서 너무 좋네요.

일단 여러기기를 연결해도 아이패드 및 타 기기에 충전이 전혀 느려지지 않습니다. 40W이기때문에 충분한 전력 공급이 되기 때문이죠


제일 큰 장점은 5포트 동시 충전이 아닐까 싶어요.

요즘 시대에 폰과 패드 그리고 장난감(?)으로 서브폰이라도 있으면 충전기 2~3개씩 필요하고 공간 차지까지... 하지만! 앵커 하나로 전 모든게 해결이 됐습니다 ㅎㅎ


사진에는 참가하지 못했지만 조만간 윈도우폰도 한국으로 날라올 예정이라 더 필요한 제품 앵커 충전기가 아닐까 싶습니다!!


XPEnoboot 5.2-5565.2 부트로더로 문제 없이 업데이트 됩니다.


Version : 5.2-5565 Update 2

(2015/06/09)

Important Information

  1. A thorough investigation has been done, and it is confirmed that DSM and its related packages are not impacted by the LogJam vulnerability because of the way Synology implements OpenSSL in our system.

Fixed Issues

  1. Improved the stability of SHR expansion.
  2. Improved the stability of SMB transfer when the system is being accessed by an excessive number of clients.
  3. Fixed multiple kernel vulnerabilities (CVE-2014-3122, CVE-2014-3153, CVE-2014-0196, and CVE-2014-4699).
  4. Fixed an issue where CPU usage could remain high when widget is enabled.
  5. Fixed an issue where LDAP users could fail to log in to DSM.
  6. Fixed an issue where files could not be downloaded via Windows' terminal.
  7. Fixed an issue where system cannot enter hibernation.
  8. Fixed an issue where some folders with non-English names would become inaccessible via SMB.
  9. Fixed an issue where volumes/iSCSI LUN cannot be displayed after the Synology High Availability system resumes from safe mode with UPS connected.




'NAS > XPEnology' 카테고리의 다른 글

XPEnoboot 5.2-5592.2 (05/08/2015) released  (0) 2015.08.05
XPEnoboot 5.2-5592.1 released  (0) 2015.07.31
XPEnoboot 5.2-5565.2 released  (0) 2015.06.09
XPEnoboot 5.2-5565.1 DS3615xs 부트로더 출시  (0) 2015.06.02
Synology Version: 5.2-5565  (0) 2015.05.13

XPEnoboot 5.2-5565.2

Changes in version 5.2-5565.2
(07-06-2015)

  • Enabled support for iSCSI
  • *Module ‘powernow-k8‘ has been deprecated since kernel 3.7 and is now replaced by ‘acpi_cpufreq



'NAS > XPEnology' 카테고리의 다른 글

XPEnoboot 5.2-5592.1 released  (0) 2015.07.31
Synology Version: 5.2-5565 Update 2  (0) 2015.06.10
XPEnoboot 5.2-5565.1 DS3615xs 부트로더 출시  (0) 2015.06.02
Synology Version: 5.2-5565  (0) 2015.05.13
Synology Version: 5.1-5022 Update 5  (0) 2015.04.24

TS140 + Hyper V 조합으로 문제 없이 업데이트가 되었습니다.

http://xpenology.me/downloads/ 

http://download.xpenology.fr/


'NAS > XPEnology' 카테고리의 다른 글

Synology Version: 5.2-5565 Update 2  (0) 2015.06.10
XPEnoboot 5.2-5565.2 released  (0) 2015.06.09
Synology Version: 5.2-5565  (0) 2015.05.13
Synology Version: 5.1-5022 Update 5  (0) 2015.04.24
Synology Version: 5.1-5022 Update 4  (0) 2015.03.21

핵놀 부트로더는 미지원 상태입니다.

https://www.synology.com/ko-kr/releaseNote/DS3615xs


Version : 5.2-5565

(2015/05/12)

Compatibility and Installation

  1. DSM 5.2 can only be installed on Synology products running DSM 5.0 or above. Before starting, please log in to DSM and go to DSM Update to install the latest DSM.
  2. Some features have specific hardware requirements and are only available on certain Synology NAS products.

Important Notes

  1. DSM 5.2 is the last supported major DSM version for all 10-series models.
  2. An issue of data consistency caused by SSD TRIM is not resolved yet; as a result, SSD TRIM is currently disabled in DSM 5.2.
  3. DSM 5.2 is the last DSM version to support Time Backup as an add-on application in Package Center. Time Backup features will be fully merged into the built-in Backup package in future releases. Existing Time Backup users will not be affected.
  4. Sharing via Facebook and Google+ will no longer be supported starting from DSM 5.2.

What’s New in DSM 5.2

  1. Single Sign-On
    • You can register multiple DSM and access them using one set of credentials. After initial login, linked DSM accounts will automatically log in to avoid credential re-authentication.
  2. Windows File Sharing
    • Added SMB3 and end-to end data encryption support.
  3. Backup and Replication
    • Added support for file-level restoration with File Version Browser in multi-version backup tasks.
    • You can set up backup rotation to recycle old backup versions automatically in multi-version backup tasks.
    • Added data transfer encryption support for multi-version backup.
    • Added support for Amazon S3 China Region as a backup destination.
  1. iSCSI LUN Snapshots
    • You can take iSCSI snapshots more frequently, up to every five minutes.
    • You can set the snapshot retention policy to retain a specific number of versions for hourly, daily, weekly, monthly, and yearly snapshots.
  2. Link Aggregation
    • Added support for two new modes when creating a bond interface: Adaptive Load Balancing and Balance XOR.
  3. SSD Cache
    • SSD cache now has a smaller memory footprint, consuming 90% less memory than DSM 5.1 for newly created SSD caches.
  4. File Station
    • You can manage and transfer files to popular public cloud services such as Dropbox, Box, Google Drive, and OneDrive.
    • The built-in photo viewer now supports full-screen mode.
    • You can drag and drop files between two browsers.
    • You can set the number of times a shared link can be accessed.
    • Added playlist support for the built-in audio player.
    • You can use the built-in mail client to send shared links.
  5. QuickConnect
    • Enhanced stability.
    • DSM will automatically add port forwarding rules required by QuickConnect services on your compatible UPnP router, saving your time on network configuration.
  6. DSM log-in page
  • You can add welcome messages to deliver information to users before they log in to the system.
  1. DSM Help
    • You can reach online resources such as FAQ and compatibility lists in DSM Help now.
    • One more tutorial about how to back up data from your computer is added in the section of Get started with DSM.
  2. Misc
    • You can customize the security level of SSH connections by selecting which encryption algorithm(s) to use.
    • Added more flexible port forwarding rules, including assigning random port numbers, and customized port settings.
    • You can set usage quotas for different groups. The group usage quota is automatically applied when a user is added to the group.

What’s New in Packages

  1. Single Sign-On Package
    • Based on the OAuth2 standard, SSO Server package turns Synology NAS into a SSO server that allows developers to register their web applications to the server and utilize the single sign-on feature. This increases daily productivity by saving time spent on re-authentication.
  1. Docker
    • Docker is a lightweight virtualization application that gives you the ability to run thousands of containers created by developers from all over the world on DSM. The hugely popular built-in image repository, Docker Hub, allows you to find shared applications from other talented developers.
    • A step-by-step tutorial is introduced to guide you through the basic container creation.
  2. Note Station
    • Added to-do list feature. You can add tasks to notes or add them independently to the to-do list.
    • Manage tasks by specifying a priority, due date, and reminder.
    • Synology Web Clipper is now available on the Chrome Web Store. You can clip web content directly to Note Station.
    • Export notebooks to a nsx file for backup or for importing to another Synology NAS.
    • Export individual notes as HTML files so that users without Note Station can read them.
    • You can archive seldomly used notebooks so that they will not be displayed in the notebook section or in search results.
    • Enhanced Note Station file structure. A three-tier structure (Shelf, Notebook, and Note) provides greater flexibility for organizing Note Station.
    • You can display notes in presentation mode.
    • You can create new notes in a joined notebook if you were given modify permissions.
    • You can share notes via the built-in DSM email application.
    • You can change the default notebook.
    • You can adjust the default note font size.
    • Import notes from YinXiangBiJi.
    • Better note version conflict handling.
    • Todo badge number on Desktop icon.
  3. Cloud Station
    • Added support for low-latency smart polling.
    • You can assign different historic version numbers for each shared folder.
    • Enhanced general performance.
    • Added support for native renaming operation.
    • Administrators can enable/disable Cloud Station directly from Package Center.
    • Added support for File Station Recycle Bin.
    • Files greater than 10GB can be synced.
    • Updated PC client for Windows, Mac and Linux:
      1. Added a quick setup wizard.
      2. Added a search feature to automatically find all Synology NAS in the local area network.
      3. Added a system tray menu in graphic user interface.
      4. You can right-click to stop or resume syncing for specific subfolders.
      5. You can right-click a synced folder to generate a folder sharing link.
      6. You can right-click any file on your computer to copy it to the Cloud Station folder.
      7. Added a client-side sync log.
  4. Cloud Sync
    • Added unidirectional sync from NAS to public cloud and from public cloud to NAS.
    • You can encrypt and compress data sent to public cloud storage.
    • Added support for Amazon S3 compatible public cloud service providers.
    • Added support for WebDAV public cloud service providers.
    • Added support for Amazon Cloud Drive.
    • Added support for Megafon Disk.
    • Added support for native renaming operation (support level differs with public cloud storage API).
    • You can customize both task name and polling period.
    • You can sync files as large as 10GB with OneDrive.
    • Added support for File Station Recycle Bin.
  5. Mail Server
    • Added attachment filter to block specific file extensions.
    • You can receive real-time notifications regarding daily quota status.
    • Added support for SPF/DKIM and DMARC sender validation.
    • Added customized auto-reply and content setting features.
    • Daily quotas can be set by user.
  6. Glacier Backup
    • Enhanced to handle Amazon server-side speed limit.
    • Enhanced general performance.
  7. Video Station
    • You can use hotkeys to fast forward, rewind, and adjust the volume during video playback.
    • Subtitle files can now be located anywhere on your Synology NAS and no longer need to match the filename of your video files. Simply select them using the built-in chooser in Video Station during playback.
    • More code-pages supported to correctly recognize subtitles in different languages.
    • You can set a timing offset to sync subtitles with video playback.
    • You can customize video posters by selecting an image from your Synology NAS.
    • Use the shortcut on the library to quickly add video folders.
    • You can delete videos directly from Video Station
    • Supported right-click context menu to access useful functions more quickly.
  8. Audio Station
  • Added support for indexing CUE sheet files to display all indexed audio tracks, and the song information of an undivided album file for management (requires DSM 5.2).
  • Added support of transcoding FLAC/APE, ALAC/AAC, OGG, AIFF formats for DLNA players.
  1. Photo Station
    • A brand-new design that gives Photo Station mobile a refreshed look-and-feel. The update includes two major improvements: watching videos and linking directly to details page of a photo.
    • You can select specific albums when creating a smart album.
    • More EXIF information is displayed in the lightbox page, and can also be added as conditions when creating smart albums.
  2. Download Station
    • Previews for photos and videos are available for torrent downloads.
    • Added support for HTTP downloads with multiple connections.
  3. Media Server
    • Resumed video transcoding support (This feature is supported by select models. Please go here for detailed information).
  4. Redmine
    • Redmine is a flexible project management web application. It has numerous features and can be run on Synology NAS via Docker.
  5. GitLab
    • GitLab is a web-based Git repository manager with wiki and issue tracking features. It has numerous features and can be run on Synology NAS via Docker.
  6. LXQt
    • LXQt is a desktop utility built on QT with partial Razor-qt and LXDE components. It comes with a basic graphical user interface which gives users the ability to leverage certain operating system features, such as web browsing. It has numerous features and can be run on Synology NAS via Docker.
  7. SpreeCommerce
    • SpreeCommerce is a full-featured storefront tool built on common standards so you do not have to compromise speed to market, efficiency, or innovation. You can also easily leverage the advantages of modular design to configure, supplement, or replace the functionalities you need. It has numerous features and can be run on Synology NAS via Docker.
  8. Discource
    • Discourse is a forum application software with a focus on user experience by introducing infinite scrolling, live updates, drag and drop attachments and more. It has numerous features and can be run on Synology NAS via Docker.
  9. MantisBT
    • MantisBT is an open source, web-based issue tracker and project management tool with a focus on simplicity and flexibility. Users are able to get started quickly and manage their projects effectively, making collaboration with team members and clients easy and professional.
  10. LimeSurvey
    • LimeSurvey is a powerful survey creation tool that help you easily create and publish intuitive and question-and-answer surveys and collect responses without the requirement of technical background. LimeSurvey also provides graphical analysis of the result for you to quickly find the information from the statistics. You also have the full control of whom to access the survey, either publish the survey publicly or limit only the users with the "once-only" token.
  11. CMS
    • Enhanced general performance.
    • Bug fixes and usability enhancements.



이 글을 읽으시기 전에 Xiaomi Mi Box Mini 최신버전에서 apk 설치하기! apk 활성화부터 하셔야합니다.


밑에 링크로 가신 뒤 1.0.Shafaguanjia.apk 파일을 받아서 설치를 해줍니다.

http://www.honorbuy.com/forum/thread-359789-1-1.html 


밑에 스샷 처럼 아이콘이 생기면 클릭해서 들어갑니다.

업데이트가 뜨면 업데이트는 하세요.


이제 제일 첫번째 탭에서 설정 톱니바퀴 앱을 실행합니다.


그러면 안드로이드 설정앱을 보실 수 있고 A 아이콘이 언어를 설정하는 메뉴입니다.


제일 위에 중국어로 되어있네요. 클릭하시고


제일 밑에 영어를 누르시면 끝납니다.


완벽하게는 아니지만 대부분 간단한건 다 영어로 바뀌고 개인정보(?)라고 생각 했던 메뉴는 계정 & 보안 메뉴였군요!


클리앙 중고장터에서 2.8이라는 저렴한 가격으로 건진 물건입니다.

처음 받자마자 개봉해보니 애플 제품이 생각나는 그러한 제품이었습니다.


기분 좋게 뜯어서 TV에 연결하고 펌웨어를 확인해보니 아... 1.3.82 ㅜㅜ

클리앙에서 찾아 본 사용기에서는 1.3.72에서만 apk 설치 활성화가 가능하다고 하시고 해외 포럼도 동일한 이야기 밖에 없었습니다.

http://www.clien.net/cs2/bbs/board.php?bo_table=use&wr_id=748926

1.3.76 이상이면 답이 없고 다운그레이드 (전버전에 한해서) 가능하지만 1.3.76 으로 내려가도 불가능 하다는 이야기만 보였지만 adb wi-fi 접속으로 apk 설치가 가능하다고 하는겁니다!

http://www.clien.net/cs2/bbs/board.php?bo_table=use&wr_id=751724

하지만 위 방법은 제가 아무리 해도 소용이 없더군요.


그 와중에 오후 7시를 기점으로 새 펌웨어가 등장... 1.3.83이 나와서 그냥 올려버리고 패치 노트가 중국어라 구글 번역기를 돌릴 겸 샤오미 사이트로 가봤습니다.



생각해보니 샤오미 포럼이 있다는걸 떠 올리고는 샤오미 포럼을 뒤져보니! 와... 공유 네트워크로 접근해서 apk 설치 방법이 땋!

http://bbs.xiaomi.cn/thread-11280858-1-1.html


직접 해봤습니다.

분명 이 방법이면 될거 같았습니다.

일단 adb 활성화 및 알 수 없는 소스 허용을 해주셔야 합니다.


먼저 환경설정


중국어를 몰라서... 개인설정(?) 비슷한거 같습니다.


이제 첫번째 그리고 2번째 항목을 스샷처럼 설정 하시면 됩니다!



이제 다시 홈화면으로 오신 뒤 동영상 앱을 실행합니다.


오른쪽에 + 버튼을 누르시고


본인에 내부 (삼바) 아피를 입력해서 접속 해줍니다.


이제 폴더에 접근하면 apk 설치가 가능합니다!!!



설치가 모두 끝나면 이제 맛깔나게 사용하시면 끗!

재부팅 없이 업데이트 됩니다.

부트로더 기준 XPEnoboot DSM-5.1.5022.3

Version : 5.1-5022 Update 5

(2015/04/23)

Fixed Issues

  1. Fixed a vulnerability that could allow unauthorized access to the shared folders via SMB protocol.








재부팅 없이 업데이트 됩니다.

부트로더 기준 XPEnoboot DSM-5.1.5022.3

Version : 5.1-5022 Update 4

(2015/03/21)

Fixed Issues

  1. Upgraded OpenSSL to 1.0.1m to address multiple vulnerabilities (CVE-2015-0204, CVE-2015-0286, CVE-2015-0287, CVE-2015-0289, CVE-2015-0292, CVE-2015-0293, CVE-2015-0209, and CVE-2015-0288).






+ Recent posts