Import Error: No module named _sqlite3

가 나오는 경우. config.log를 뒤져보면

checking for –enable-loadable-sqlite-extensions
result: no

와 같은 내용이 보인다. 빌드 과정에서 빠져버리므로 당연히 나중에 로딩할 수가 없다.

다음 옵션으로 configure후 다시 make한다.

./configure –enable-dynamic-extensions –enable-loadable-sqlite-extensions



#include <type_traits>

using namespace std;

struct A
{
public:

	A(){}

    static A& singleton() 
	{
		static A obj;

		return obj;
	}


private:
	A(const A&);
	A& operator=(A const&);
};

struct A_1
{
    static A& singleton() 
	{
		static A obj;

		return obj;
	}
};

struct B
{
	B& singleton()
	{
		return *this;
	}
};

struct C
{
	int singleton;
};

void global_func(){}



template<class T>
struct is_function_pointer 
{
private:
	template<class T> 
	struct is_function_pointer_impl
	{
		typedef typename std::remove_pointer<T>::type pointee;
		typedef typename std::is_function<pointee>::type type;
	};

	typedef typename std::conditional
		<std::is_pointer<T>::value, is_function_pointer_impl<T>, std::false_type>
		::type cond_result_t;

public:
	static const bool value = cond_result_t::type::value;
};

template<typename T>
struct has_singleton_accessor
{
private:
	typedef decltype(&T::singleton) func_t;

public:
	static const bool value = is_function_pointer<func_t>::value
						&& !std::is_member_function_pointer<func_t>::value;
};

template<typename T>
struct satisfy_singleton_requirement
{
	enum {
		value = !std::is_trivially_copy_constructible<T>::value
			&&  !std::is_trivially_copy_assignable<T>::value
	};
};


template<typename T>
struct is_singleton
{
	static const bool value = has_singleton_accessor<T>::value
						&&  satisfy_singleton_requirement<T>::value;
};

int main()
{
	static_assert(is_function_pointer<decltype(&A::singleton)>::value, "true.");
	static_assert(is_function_pointer<decltype(&global_func)>::value, "also true.");

	static_assert(is_member_function_pointer<decltype(&B::singleton)>::value
		, "true.");

	static_assert(is_member_function_pointer<decltype(&A::singleton)>::value
		, "but it's false because A::singleton is the static member");

	//therefore:
	static_assert(is_function_pointer<decltype(&A::singleton)>::value
				&& !std::is_member_function_pointer<decltype(&A::singleton)>::value
		, "this is how to check whether A::singleton is static member function.");


	static_assert(is_singleton<A_1>::value, "this type isn't singleton.");	//Err
	static_assert(is_singleton<B>::value, "this type isn't singleton.");	//Err
	static_assert(is_singleton<C>::value, "this type isn't singleton.");	//Err

	static_assert(is_singleton<A>::value, "that's it!");
}

Windows 8.1을 쓰기 위해 256g SSD를 설치했더니 바이오스 포스팅이 몇분씩 걸리는 사태가 벌어졌다.

설치가 잘못되었거나 바이오스에 문제가 생겼거나 둘중 하나겠지 싶어 바이오스를 업데이트했는데도 문제가 사라지지 않았다.

그런데 검색결과 CD드라이브의 문제일 수 있다고 한다.

즉시 전원을 끄고 CD드라이브를 연결한 SATA 케이블을 제거했더니 정상속도로 부팅한다.

 

케이스 내부 청소 후 SATA케이블 재배치할 때 CD드라이브까지의 거리가 멀어서 좀 무리해서 끼웠더니 발생했던 문제인 듯 하다.

케이블 하나 때문에 재부팅이 안되거나 제어판이 안열리거나 프로그램 실행이 제대로 안되거나 하는 문제가 발생할 수 도 있음을 알았다.

소프트웨어를 쓰기 위한 도구이지만 본질은 하드웨어의 집합체인 것을 잊었던 듯.