Monday, December 31, 2007
Happy new year..
Anyway, for all of you who read this post, I wish truly your 'Happy new year.'
Monday, December 24, 2007
Emacs code folding with python
Using hide-show is very easy. No need to install extra package.
M-x hs-minor-mode will activate it.
The basic functions are:
hs-hide-block
hs-show-block
And, maybe this will be useful:
hs-show-all
It has a short cut, too. I am not used to it, at this time. Shortcut makes sense, but I call this by M-x. Maybe when I'm tired of function name, I will use their short cut key because I generally avoid my own short cut.
Tuesday, December 18, 2007
Monday, November 26, 2007
/proc/[pid]/smaps and Perl Linux::Smaps
Okay... 2.6.14 was published in 2005. Catching up Kernel update should not be neglected like this. :) I definitely have been LAZY.
Anyway, smaps is very useful to see actual memory mapping with content of a process. Analyzing it seems awkward. So, I searched any useful tool at least making total of RSS. It seems like Perl people came up with something. ( I respect Perl hackers. ) Search for Linux::Smaps in CPAN.. Sounds very cool utility.
Wednesday, November 14, 2007
Result of new install
Another issue is my Korean language pack. skim does not work with QT4, but Gentoo ships qt4 by default. I love newer version, always. But, going back to nabi for this was face-frowning situation. It's getting close to 10 years livinig in the US, I am using Korean less and less. I meet Korean people, but in the work, I use English mostly. More importantly, when I use computer, I tend to search more English websites than Korean websites. So, no Korean language until it is fixed with qt4. Again, I am getting old :)
Monday, November 12, 2007
ATI and AIGLX support
2. Gentoo recently put compiz-fusion in their main repository
Although some people had problem with AMD64 platform, I decided to try it out. Nothing wrong with Ubuntu Gutsy with Xgl, I always feel slightly uncomfortable on non-gentoo linux. SO!! I wipe out and reinstall gentoo on my laptop. Currently, emerge -uDN world is running before X11 install. Once X11 is installed, I will download recent fireGL driver.
Sunday, November 4, 2007
Emacs and Info page.
But, I couldn't start any of project. I was not just for programming at this moment. Instead, I decided to catch up some emacs stuff. Emacs became my favorite editor for 6 months. My previous post revealed that I was a vim user. I used it for 8 years, and I switched to Emacs. When I started to use Emacs this year, I thought 'Why do people cry about emacs so much?' As vim was not intuitive, Emacs was not either. Advanced stuff in Vim requires extensive knowledge, Emacs needs it, too. First, it started with curiosity, after 6 months later I realize why Emacs is so much a great editor.
Info must be one which makes emacs great editor. In my opinion, info page in Emacs is one of the greatest documentation tool. It had some of topics I already read from the web, or other sources. If someone starts to use linux, I will recommend to learn how to use Info page. Because, documentation accessibility is great. It is like a good book shelf for many topics. It is very well organized. I would like to have chances to visit as many pages as possible.
Luckily, I still remember core of vim. I found myself editing files using vim when I sshed to servers. I could bring Emacs over X forward, but these servers were mostly configured by vim. I guess it's momentum. I would not give up Vim, because it is also a great tool, but I would not spend time to research about vim anymore.
Sunday, October 28, 2007
Documentation..
Our department did NOT have CMS. No central documentation system. The defense word was, 'we are small.' I didn't bother to start one like tikiwiki. I actually enjoyed not documenting my work :) We have issue tracking system, but it is not used for programming issue. We purchased it long time ago, and I feel very sorry that we are stuck to this.
Back to documenting story, my best option to publish my work was HTML. When I listed number of my projects, gosh it went up to 20. It is still growing. Sure, I worked a lot. :)
I am moving on. I don't know what will be my next job, but excited to relocating to my new place in Atlanta, GA !!!
Monday, October 15, 2007
Suffering by cold
One of major thing happened that I can reveal is "COLD". My big son suffered by this for 2 weeks. It got to worse to 'pneumonia'. Only thing I could do was just watch him fighting through it. After his recover, my little one suffered by the similar symptom. It had not worsened to pneumonia. However, it must have been very painful for 4 month old baby.
My wife was the next. She can not finish a sentence without intervened by cough. And once she starts to cough, it sounds very bad. She lost her voice significantly. She is recovering at this stage. I guess she need a week or two for complete recovery.
Now, I picked up a cold last weekend. Last saturday, it started with small escalated temperature. And, it is getting worse and worse. I don't cough, but headache is the most annoying. It is very bad for a programmer :(
Worse part is, I have no sick leave left. A hahaha. It was very nice to have a month of paternity leave when Jaron was born. :) I don't regret. Since I am a healthy young man, I think I can fight through this disease without any sick leave. Luckily, I don't cough. So, people don't feel get spread by me.
When Jake was sick, he had 103 F temperature. That must be very hard for him. I feel so much sorry about him, and I appreciate him to finish his sickness.
Monday, August 13, 2007
One main advantage of using/programming in KDE
Example will explain better. I am reading documents using 'kpdf'. And I want to trace my reading on this document. One application of this log will be my reading speed on this document.
If you are running KDE, dcop server is already running. If not, dcop server can be still manually started. Assuming we have dcop server, try this command.
$dcop
Then, a list of dcop(pable) application will appear. Then,
$ dcop kpdf-6961 kpdf currentPage
223
Walla. It gave me current page that I am on. If you play with dcop a little further, you will be amazed that it can be a better way to talk to another process. Registering a function to dcop(pability) isn't hard either. If IPC should be considered for local application, this approach should be very appealing.
Wednesday, August 8, 2007
krusader
I love KDE. Mostly this preference comes from my laziness.
Monday, August 6, 2007
compiz-fusion.
In the meanwhile, I bound a short cut for CompizConfig. Ctrl + Super + Alt + 'C'. Couldn't bring any other unique combination without conflict.
Saturday, August 4, 2007
KDE struggles on my new hardware
When I brought up amarok for the first, it gave me a pop up of 'want to install MP3 plugin?'. At that time, my wireless was struggling. So, 'not now' was my answer. After that, amarok wouldn't respond at all. I thought it remembers my network carrier as a wireless. So, I dropped ndiswrapper and plug in for eth1 (wired network). Not working still.. I am using audacious instead.
Konqueror is better than this situation. But, I can not bring many features as I expect. It is a big cost for very young and new hardwares.
To make all this worse, my right hand wrist is picking up a soaring pain. I am still young to have a joint problem :(
Friday, August 3, 2007
I am alive
Okay, I got my new laptop which dragged me several days. I audaciously tried gentoo linux on brand new Dell 1521. It has 2x64bit turion with 2GB of memory. ATI Xpress 1270 onboard VGA. I was very brave to give gentoo on it, and I struggle, now.
Dell 1521 is introduced in the market only 2 months ago and its HW parts are very new. And it is 64bit processor.. sigh..
Thursday, July 26, 2007
Bye, Xemacs 21. Move to Emacs 23
I am getting used to it more and more. I especially liked lisp syntax to configure the environment. Currently, I am working on writing emacs plugin to look up english dictionary. I need urllib or socket with some nice parser. Anyway, getting into it and enjoying emacs.
One thing I couldn't bare on Xemacs was that it was not friendly with Korean Language system in KDE, I believe it starts from X layer. Before I fight with UTF-8 on Xemacs, I looked up emacs.kldp.org and found Emacs 23 supports UTF-8 with Korean enabled out of the box!
I tried it out, and loved it. I migrated custom.el from .xemacs to .emacs file.
It is very radical move because Emacs 22 is still not in stable tree.
But, I got what I wanted and life goes on.
Wednesday, July 18, 2007
Gentoo: tip for KDE
Then, I thought, "Why not?". It does not cost me loss of data. It only costs me extra work for recovery. As long as, I can bring data back, that's fine.
Things went okay. I backed up most or all of necessary data, and restored them back including pg dbs. My tool for window manager is still KDE. It took me just about a day to bring up. Full blown kde-meta compilation will take longer than that. And, slow.
To make KDE responsive and fast, I do this.
# emerge kdebase-startkde ( for basic kde)
# emerge konsole ( I always need terminal with enhanced control )
# emerge kicker kmenuedit
You can think of KDE with only these three for XFCE, stripped down version of Gnome. Then, build in anything that will be needed. For example, my favorite amarok.
# emerge amarok.
:)
Tuesday, July 17, 2007
Linux: Gentoo vs. Ubuntu
I would like to. That is currently a big dilemma. We are pretty busy this summer, but after the summer, let's consider :)
Thursday, July 12, 2007
gentoo on slow system
Second, Windows 2000. Ha ha ha. Unless somebody has a too much time to experiment how long it takes for fully patched with gazillian times of reboot. I don't want to try, but I can imagine myself stuck in this ugly box patching and rebooting repeatedly.
Then, linux becomes the key. However, current ubuntu/kubuntu desktop release will not be happy with 256Mb ram. It will be as slow as Windows XP. We can use debian or ubuntu server and start from there. Light window manager like fluxbox or window maker with small but powerful system monitor like conky will do it. Personally, I prefer fluxbox.
When eagerness to offload unused kernel module or strip down application thanks to USE flags comes into play, gentoo brings serious dilemma. As much I don't want to be stuck updating windows machine, as the same I don't want to be stuck looking at compiling screens.
I can just compile and leave. What if emerge process failes in the middle? Okay, then use the box while compiling. That's what I do. Then, the machine is usable, but not fun. Especially, when emerging, it already lost sometimes half, sometimes fully lost cpu resource. Plus, firefox is slow!!
But, the result will be the cleanest.
The last thing that I want to see is 'update candidate, glibc.'
Wednesday, July 11, 2007
gentoo: ndiswrapper can't find CONFIG_NET_RADIO
My gentoo system is very slow machine. 5 year-old Intel Celeron (256KB cache) with 256MB ram. Taking so long time for kernel compilation was bothersome especially in sleepy brain. Well, finally finished, (GOSH! forgot to check how long it took. Kernel compile does not leave a log in /var/log/emerge.log )
By reboot, I found two things broken. My sound and ndiswrapper. ndiswrapper 1.44 ebuild was complaining CONFIG_NET_RADIO. At first, I thought, 'I forgot to visit networking section.' :) But, before menuconfig, grep 'NET_RADIO' .config on /usr/src/linux surprised me. Nothing!!
Okay, if an application is complaining an non-existing CONFIG option in kernel, most likely this must be gone. I found this entry from googling:
http://bugs.gentoo.org/show_bug.cgi?id=179951
I turned on new config, CONFIG_WIRELESS_EXT, and spent compiling kernel in sleepy brain once again, rebooting, touching /etc/portage/package.mask and package.keywords for ndiswrapper, and emerging... And it was solved. modprobe successfully loaded ndiswrapper.
Thursday, June 28, 2007
oracle: data with single quote
I tried this task with postgresql hoping for a better solution. Things were worse in Postgres. I knew that my favorite psycopg2 does not support prepared statement, yet. But, the rest of the drivers, such as pypgsql and all others that I have researched, were in the same status.
Anyway, I found this this link:
http://catherinedevlin.blogspot.com/2005_07_01_archive.html
Oracle had a different idea. Different quote operator. q'| |'. Like python block quote('''), it relieves single quote when wrapped around it.
Insert into tbl(txt) values ( q'|Hello world's geeks.|' );
Coming back to work after the vacation
Programming skills needed time to get up to speed. English was troubled for a while, Korean much more fluent :) I hope my kids pick up Korean first.
Now, the good days of vacation is over and the life resumes with an additional responsibility. I don't mind, though. Maybe, Jake will object?
Thursday, June 7, 2007
my new family.
Anyway, his first image brought a deja-vu. He looks exactly the same with my first one, Jake. When getting a chance, I want to show pictures of my sons side by side. My wife and I took a picture on purpose when we put Jaron in the baby basket for the first time. We successfully took the same angle, the same pause, but in different clothes two years ago as we took Jake. If somebody sees these pictures side by side, 'Hmmmm,... Why did you change baby's clothes on discharge from the hospital? Were you guys bored enough?'
Wednesday, May 23, 2007
Python twisted part 2
The beauty of this was that control part seamlessly communicates with collectors because they are running under the same application. At the same time, I do NOT need to think about Threading and locking. How nice it is !!
Thursday, May 17, 2007
python twisted
These are called asynchronous high level network framework. Sometimes word 'abstracted' is attached in introductory contents.
First thing we have to focus is what it is. 'Abstracted' or 'High level' can be best described as 'Protocol Implemented'. I do not have to worry about protocol specifics. I just call methods from objects instantiated from twisted.SomePackage. And asynchronous means, not synchronous. Then, someone may ask what is synchronous? Let's simplify that 'synchronous' is similar way to have conversation between human beings. One person asks, and wait until the other responses. Peers don't speak at the same time. In asynch mode, they do. More in detail can be found in Unix Network Programming ( a.k.a UNP ). There are more in detail about asynchronous communication (non-blocking, signal driven, etc.) I recommend reading UNP for network programmers. Chapters about Async-communication was the best.
With these network frameworks, any network driven application can be very simplified in terms of number of lines of code. Especially, server applications processing custom protocols are very simplified. Buffer handling/IO handling is almost trivial and the performance is even faster thanks to async IO's better utilization of bandwidth.
This morning, I have written another network server processing message from various servers. The key word is 'This Morning'. That's right. I wrote this in low degree of hours. Actually, in 2 hours. I just process the message and stuff into sqlite3, and my life goes on. If I have to write the same code in C, it should take up at least 1 day. :)
Tuesday, May 8, 2007
Stripping HTML tag
This is very rough test code written using BeautifulSoup.
http://lucky.umd.edu/code/strip-htmltag.py
Tuesday, May 1, 2007
My tool set
These are my note takers. I normally use springnote.com because of accessibility. 'Hey, it is another Korean website.' Sorry :)
2. Google tool set:
I do not have to explain what are google tool set. Google always brings one of the essential tools for life. Beginning with gmail, there are calendar, map, earth, doc, personalized google portlets, blog(Of course!), analytics, talk, and most infamous Google SEARCH! I can not live without google.
3. flickr, kflickr, flickrapi(by Beej)
This is one that google couldn't rule. I tried to use picasa from google, flickr really ruled. My pictures and my family's pictures are posted there.
4. kdissert, vym for brain storming.
There is a project called 'freemind'. I used to use it but after I migrated to KDE from gnome, I used kdissert instead. vym helps kdissert. 'freemind' is not a bad tool, but I like simplicity to use in kdissert.
5. bloglines for news read
I use this not only for news reader, but also for good article keeper with 'important' tag. That is very useful.
6. KDE desktop with Gentoo, Ubuntu
When using linux, I chose KDE for my desktop. I started with bare gnome about 7-8 years ago when I first used Linux ( At that time, I just started computer science degree ). Then I moved to blackbox, later it became fluxbox. Then, I moved back to gnome after CPU hits GHz and 512 Mb became general PC memory size. And then, I settled in KDE. KDE is just very easy and well-balanced desktop environment.
7. keychain for ssh-agent
Because of my work, I have to jump from machines to machines. Without this, typing up my password everytime should not be imagined!!
8. Other utilities for fun
Such as amaroK, mplayer, etc.
Thursday, April 26, 2007
One thing at a time...
My mindset is one thing at a time. Once a subject takes over my mind, that thing has it all. When I learned and worked computer programmings before my son was born, I used to hadve topics of programmings in all of my mind. I thought about coding when driving, walking, and sitting on my desk. This was very productive way so that I was always ready to jump in.
Not any more. My son has my mind all. I need a warm-up period for my brain to get up to speed when coding. Evaluation of 'Okay, what is the situation that I am in? ' takes longer than I used to evaluate. Worse thing is that I forget all of my work as soon as I see the pictures of my son on my desk.
Back in my young life, I was indulged in playing guitar. After my high school, I practiced my guitar like professional. At least 10 hours a day, and 12 hours straight playing was easy. I remember that sometimes I couldn't speak. I lost my verbal ability temporarily because of music. One thing at a time went very extreme.
My wife mentioned that she felt that she lost a bit of her short term memorization after having our first son, Jake. Biologically, that was a proper side effect of pregnancy. But, me??? I was not the person carrying a baby and suffering for 10 months. But, why am I losing my memory? And ability to concentration?
To tell the truth and conclusion, this is good. I have never been happier than these days. Especially, we will have our second son in 6 weeks. I always thought I have been a lucky man with my basic needs were always met. But, these days are the happiest moment.
Losing my productivity is my side effect, but that's okay as long as I meet the expectation for my performance review. Eventually, I will get my productivity back. Enjoying with my family is more fun at this moment, and that's what my mind said, 'One at a time.'
Wednesday, April 25, 2007
Dynamic prefix of PYTHON
Then, once it copied into process memory, the process doesn't care where this object file came from. This is a different problem. Probably, anyone who has compiled a package from source for multiple versions suffered for libraries of different versions. One of the primary reason is that compiled object remembers wrong places for library, but different object file exists there as the same name. 'make clean' or 'make distclean' should be used in proper time.
Python, on the other hand, is an interpreted language. Compilation is not required. (*.pyc matters, but let's simplify at this moment. ) Python searches library at runtime, and it loads the library at runtime. So far, no difference. But, the library location does not need to be known beforehand. The most beautiful thing is that the location can be determined by looking at stack frame! This can eliminate the needs of compilation '--prefix' switch.
Consider this segment of code.
http://lucky.umd.edu/code/dynamic-prefix.py
This segment of code is very simple (6 lines of code including spaces.) It just prints what is the absolute path of the executable. Regardless how it is called, it should return the same path. If we have [Arbitrary App Home] and, under this [Arbitrary App Home] are subdirectories of bin, etc, and lib. And bin subdir has executable runme.py. Regardless of how runme.py was called, it knows where it is and set right value of the [Arbitrary App Home]. Therefore, we don't need --prefix at all.
This is VERY Nice.
Monday, April 23, 2007
begin to flickring..
I thought about using picasa first, because I like what google is doing. While I was playing with Gdata client, picasa client wasn't in the package. There were Java and .Net client, but no python. Since there were 3 posts on picasa python client/library, I could wait until they release the code. Or I checked flickr and found flickrapi written by beej. :)
I just uploaded 80 pictures from infamous cyworld. Since cyworld didn't expose an interface downloading pictures, I had to work around. It was annoying..
Tuesday, April 17, 2007
rundl132.exe
Where did the number 132 come from? First, it is not a power of 2. So, when my wife called me, I saw that it is 'rundl132.exe' which tries to have a similar look of 'rundll32.exe' Quick googled and found that it is malicious code. I actually applauded for this nice name. This guy who wrote this malicious piece has a sense of humor :)
Well, anyway, it was a nice piece of joke.
Monday, April 2, 2007
Saturday, March 31, 2007
Beryl is going to be Coral.
Beryl was a fork of Compiz, but both converged. (Compiz plugins are running on Beryl.) This merge makes sense. I hope both teams with similar proficiencies to lead Beryl/Compiz successful. Coral is not official, yet. But, community seems to like it.
Monday, March 26, 2007
So far, So good with Xemacs
For windows XP, Microsoft released a utility called 'Ctrl2Cap' for this purpose. I ran into somebody explaining regedit to do this. It was not only ugly, but also NT based. So, another googling brought me to microsoft website, which was the exactly what I was looking for.
Ctrl2cap must be installed from command line prompt. And it required reboot which xmodmap on Linux didn't require. Hey, what do I expect on Windows? I have decided not to compare Windows and Linux long time ago... If it wants to be rebooted, reboot the box.
One problem for this. I was using Windows XP from rdesktop connection. Windows by default does not allow to display 'shutdown' menu from rdesktop session. I just guessed if Windows have 'shutdown' command from the prompt. YEP, there it was. Rebooting windows from command prompt is reasonable command and it was there. I issued 'shutdown -r -f' and it rebooted without any pain. Xemacs on both of my systems.
Friday, March 23, 2007
opened an account in playtalk.net
Why is that? Well.. sometimes I may not want to post full blown blog entry for many reason. But, leaving a log for this shortly can be done in this website. Input method is not only from a computer but also from a cell phone.
You may say, 'Hey, it is Korean.' Sorry, I still speak in Korean. Looked in carefully, you may find a link called 'international'. They try to be English friendly, but how good will depend on their contribution to keep it up.
Tuesday, March 20, 2007
Yet, another IDE
The title seems very weak, but I was very impressed by spe.
While I was playing with spe, I wondered 'what spe stands for?' So, I clicked on about menu. There it says Stani's Python Editor. Okay. I clicked on the Homepage hyper link, and I got Error and googled it and found http://pythonide.blogspot.com/
Interesting tool like this have wrong link brought some sympathy for short, but later I guessed if it is supported by blender, then not so bad.
I found this when I was searching for PyCrust. spe uses PyCrust integrated. The biggest advantage of spe is evaluator. The reason why I love python is, I feel very comfortable with Python. Everything looks easy with it. But, still I needed to look up pydoc many times just for function signature. My short term memory is pretty at idiotic level. :(
What spe makes me excited is, at least, I can reduce time for looking up function header. Its editor uses space over tab character for indentation. 'Copy and paste'able to Xemacs. Nice...
Monday, March 19, 2007
Mylar
Eclipse is a heavy-weight, but very feature rich framework for developers. Eclipse provides very nice view for Java developers. However, they provide C/C++ (CDT), Python (PyDev), and basically all plugins for all languages. I am sure that I can find some plugin which somebody made for some reasonable reason.
Mylar is an eclipse plugin and it gives a different perspective when watching a source code in BIG project. I lost demo presentation clip link, but it can be found very easily at mylar home. I installed eclipse 3.2 and tested Mylar quickly. Hyper link from a source code is a nice feature but, it was not available in 3.2. They said it is available in 3.3. I stopped research at this point, because I have many jobs to finish. But, definitely, this is worth learning.
Sunday, March 18, 2007
Emacs..
Now I am trying to get Emacs once again. I installed Xemacs and got a annoying terminal bell when I made a mistake on the editor. A temptation to go back to vim.. But, I googled and set the visual bell. It is annoyingly in complicated place like:
Options -> Advanced(Customize) -> Emacs -> Environment -> Sound -> Visual Bell
And I suffered to toggle the value to non-nil. What made this application one of the best editor in opensource group? Sure, I saw too many configurable places which I have no idea. Let's try to stick to Xemacs for a while and see why it is a good editor!
Wednesday, March 14, 2007
Windows compatible OS in Open Source
Friday, March 9, 2007
Beryl from svn
Unfortunately, big fight did not happen. I had about three issues, but that was it. I am sure if it was Gentoo, this issues must not be the big problem.
1. AM_PATH_PYTHON issue.
It was specifically ubuntu issue. Ubuntu ships automake 1.4 by default. But AM_PATH_PYTHON macro was added later than this. So, it was a simply old package problem. Well, aptitude remove and installing newer package was quite easy.
2. GL/glxtokens.h was not found.
Beryl svn check-out obviously had this file under beryl-mesa directory. But actual make line didn't have -I entry for this directory. I wondered if it was a bug, or there was a missing piece to expose this directory for the compilation session. Well, either didn't matter to me. My laziness just symlinked GL directory under /usr/local/include and life goes on...
3. Several missing library issues.
It was a matter of time to resolve these issues. Mostly I needed to fill the gap, modify makeall script to bypass packages which were successfully built, and then rerun makeall. Missing libraries actually were basically required '-dev' packages to be installed. I missed gentoo so much while fixing these problems.
Basically this was it. And I could run beryl with Wall plugin. I have found beryl added more features including bypass opacity which freed me 'XLIB_SKIP_ARGB_VISUALS' for rdesktop.
Well, now the next question is, why did I do that? When I develop my current project, my PC is soaring for resources and I turn down beryl for that. I just compiled the package I don't use often? It looks like, but this tells how much I like beryl.
Wednesday, March 7, 2007
How much do you enjoy programming?
This article introduced the book 'iWos'. The key question that he mentioned was "How often do you write a program for yourself? Do you have a project which have been maintained for more than a year? Isn't it unreasonable to expect somebody else develop code worth more than a year although you don't have one worth more than a year? "
When I looked back myself, I felt ashamed.
dynamic loading using dlopen API in C++
Think about the problem that overladed functions in C++ are in .so file and we need to load them in dynamic manner. If it is in C, it is fairly easy because we can not use the name which is already defined. One to One relationship. So, C compiler can map the symbol name as a function name in the symbol table. Nice.
Okay, in C++, simple function name will not work as a symbol name in the symbol table. One example is the overloaded functions. So, C++ compiler needs to generate other necessary information attached to the function name for symbol table. This process is called 'Name Mangling'. Unfortunately ANSI C++ does not define how to mangle names. It's all up to compiler, which means, binary level compatibility is not preserved. One SO file per system !!
Therefore, in essence, overloaded functions can not be dynamic. In addition to it, to make any C++ function dynamic, they need to be in extern "C" closure without overloading support.
Now more complicated problem occurs when we need to load a class in dynamic manner. Non-static class member function needs an instance to be in the symbol table. But, dlopen() and building an instance makes an 'chicken and egg' problem. Thinking of this problem will be my next thing for fun thought, later.