Documentation for Setting up an OpenGL project using Apple Xcode has been updated for Xcode 4.2.5.
I got an email earlier this afternoon from someone seeking help on the topic and promptly updated it to go along with Xcode’s new interface. I’ve also added new sample code from a texture project I did at the university to help adequately test the set up.
Side note: I was not aware how high the doc was on google search results!
Spotify is pretty damn cool. I think we can all agree on this. What’s even cooler (if you’re an Open Source/Linux geek) is running a third-party ncurses client to connect to Spotify. Here’s what I had to do on Fedora 17 (64 bit).
subversion libtool libogg-devel libvorbis-devel pulseaudio-libs pulseaudio-libs-devel zlib-devel gstreamer-devel libao-devel openssl-devel ncurses-devel
svn co https://despotify.svn.sourceforge.net/svnroot/despotify despotify
despotify/src
directory
cd despotify/src
make
sudo make install
libdespotify.so.0
got installed. Now, I’m sure there’s a more intelligent way to do this (please tell me if you know by commenting on this blog post, or hit me up on twitter: @tbielawa), but lacking the necessary knowledge, I opted use symbolic links (note: this fixes the “despotify: error while loading shared libraries: libdespotify.so.0:" cannot open
error message you may be seeing)
cd /usr/lib64
sudo ln -s ../lib/libdespotify.so.0
?
” key to see a list of shortcuts. ctrl+e
is a shortcut for :connect
)
despotify
User not found
” error message. Per the information in this thread on the archlinux forumsI did the following:
That’s everything I had to do. So, is it worth it? No. Not really. But it was a fun little experiment/challenge.
The interface is immature, at best. It’s lacking most/all of the functionality I really enjoy in the official Spotify client, such as creating and listening to artist/song based radios, receiving/sending music suggestions to friends, Starring songs for offline listening later, etc…
What you can do is search for artists/tracks and play the results, and, impress your friends? I guess. (probably not though)
When I started considering my “long-term” goals I realized it’s important that the goals are not trivial, or even just “hard”. I believe that long-term goals should require a great effort on one’s part to attain. For me they should represent stretches of my abilities that will result in improvements to my person, both generally and professionally.
And so, after a few years of casual contemplation and meditating, I’ve discovered the only serious long-term goals that I believe in and would follow through with. While describing them I’ll try to explain why I decided each is important to me.
The first is the most achievable, given my tenacity (read: hardon) for documentation. I want to author a technical book. The stretch part of this is thus: ideally the produced work, in the years to follow, would become regarded as a seminal tomb of knowledge with respect to its topic. As Brooks wrote “The Mythical Man Month“, and Dave Thomas & Andrew Hunt wrote “The Pragmatic Programmer” on software engineering, and Edward Johnson wrote the “Red Hat RPM Guide” on the all aspects of the packaging format, it would become a title people instantly associate with a topic.
I decided this goal is realistic (and something I really should do) because of the unsolicited feedback I regularly receive about the quality of my documentation. In our technical community I have the uncommon ability to write documentation which is accessible, non-threatening, thorough, correct, and clear; while still maintaining appeal and value to both newcomers and advanced users. I am able to anticipate questions about projects or tools, which I was involved in creating or use regularly, and I consistently produce relevant reference material on the subjects almost reflexively.
And I Enjoy Doing This.
For simplicity though, lets summarize this goal as “becoming a published technical writer.”
The second goal is one I only understand at much more of a superficial level. I want to be first-author on an RFC. Perhaps, I can relate this goal as such: it is the standards-driven-specification-geek version of being first-author on a published research paper. It is a goal which focuses a community of thought (perhaps not yet even realized by the thinkers themselves), encourages further analysis, and leads to useful implementations of the paper’s contents.
In my career as an IT professional I have been able to identify areas needing standardizing and formalization. I understand that approaching these kind of problems is best done not in a Cathedral style approach. As I’ve matured I’ve begun to understand what it is that made the best standards, the most adopted ones, earn such respect. Now, when I work on something which is intended to make peoples lives better I have a very Bazaar style approach. I actively solicit feedback and discussion throughout all phases: planning, early prototype development, initial adoption and testing, and on through actual adoption.
Over time in my workplace, and only because of the value gained through this transparent collaboration process, have I been able to produce “solutions” (ick, that feels like such a buzzword now) that have, sometimes vastly and unexpectedly, improved the consumer’s relationships in the respective areas.
I have learned that what I think is the best approach to a workflow or task doesn’t count for shit if the person (who, by the way, is actually hoping it solves world hunger, fixes their depression, oh — and happens to makes their job easier by cutting 20 minutes off a repetitive task) runs into an “obvious mistake” when they try to use it for the first time.
Standards, whether they be in the form of a tool, methodology, policy, or what have you, should be obvious. Anything you produce is worthless if people don’t look at it and say “well yeah, duh”. The point of a standard is having the idea that was on everybody’s mind already (or obvious if prompted to think about it), produced and available in a format which is agreeable to a broad community of consumers.
This is the right goal for me because we don’t have enough people in the world who naturally identify areas which would benefit from the introduction of standards, while at the same time, working with their peers to create something that other people benefit from as well. I consider myself lucky to be one of those people.
And I Enjoy Doing This.
That is my second goal. Lets just summarize it as “becoming the author of an RFC.”
I’m unsure of exactly how to close a blog post like this. It goes without question that this is the most personal thing I’ve posted on this otherwise technical space. I know now what my goals are. The next step will be equally as difficult as discovering and accepting them was: I’m going to have to figure out how to reach them.
~/.weechat/perl/autoload
~/.weechat/python/autoload
Needs some tweaks on Gnome 3 though for better functionality
Explanation for having this:
By default, in GNOME3 every notification you recieve from weechat will stack up in your notification panel until acknowledged. This is not my idea of ideal. In libnotify, setting notifications to transient (see patch) means that they will not hang around on your notification panel forever — waiting for you to acknowledge them — one-by-one, before they disappear
/open
alias, see the aliases section below.~/.weechat/python/autoload
Why not just click the links normally? Presumably, you’re running weechat in a terminal, this will cause long links to hard-wrap around the screen. When the links are hard-wrapped like this it causes the clickable portion of the URL to become truncated (you won’t be able to click the full url).
With this plugin you can use a simple command (within weechat) to launch links for you. The plugin watches your channels for text that looks like links and makes a note of them.
This has one obvious limitation: it doesn’t work well if you’re running weechat on a remote host, i.e., you have to ssh to the host you run weechat on. (But there are ways around that).
Alt + a
Alt + #
Alt + 5
See the next tip if you need to show a buffer whose number is two or more digits.
Alt + j ##
Alt + j 10
The current window will now display buffer number 10
F7
F8
Alt + h
Ctrl + N
Ctrl + P
F12
by defaultF11
by defaultThis conflicts with the common F11
= full screen idiom. Instead, lets leave F12
as scroll down, but make Shift + F12
scroll up.
/key bind meta2-24;2~ /bar scroll nicklist * y-100%
Enter it exactly as shown: with the tilde (~
) and semicolon (;
).
WeeChat >= 0.3.5, terminal with 256 colors
Run the command in this link: http://lnx.cx/~tbielawa/blog/weechat_nick_colors.txt
/set irc.look.smart_filter on
/filter add irc_smart * irc_smart_filter *
/set irc.look.smart_filter_delay 5
If you want to see who has joined/left recently, press ALT + =
(alt and the equals key). Pressing it again rehides the notices.
You may have a problem where your buffer titles (channel topics) only color the bar to the end of their text. This is a configuration issue and the fix is documented on the weechat FAQ.
At work I am logged into three IRC networks all day long: devel, corp, and freenode, I use this to set a status (tbielawa|brb, or tbielawa|wfh, …) on all three at once:
/alias appendnick /allserv nick tbielawa|$*
/appendnick wfh
Nick on all networks is now: tbielawa|wfh.
/alias cb /buffer close
/cb
If I have been disconnected (dropped off the VPN, or switched locations) and I need to reconnect to all my IRC networks I use this:
/alias rejoin /reconnect -all
/rejoin
If you’re using the urlgrab.py
plugin (above), this will open the last URL it found in your current channel:
/alias open /url 1
/open
The last link sent in your channel will be launched in your browser.
Split weechat into three horizontally stacked windows:
/alias split3 /window splith 33; /window +1; /window splith
/split3
I don’t normally run this by hand, it’s actually a part of a more complex alias I run when I first open weechat. See /mychannels
and /startup
, below.
These will build off of some of the aliases we already setup in the “Basic Aliases” section.
/alias wfh /appendnick wfh
/wfh
My nick would now be set to tbielawa|wfh on all logged in servers. Requires you made the /appendnick
alias already.
/alias lunch /appendnick lunch
/lunch
My nick would now be set to tbielawa|lunch on all logged in servers.
/alias unlunch /allserv nick tbielawa
/unlunch
My nick would now be set back to ‘tbielawa’ on all logged in servers.
Ask the GCA bot in #it-eng to do a Figlet (Figlets are large ASCII text banners). This works no matter what channel you’re viewing presently, as long as it’s on the same irc network:
/alias fig /msg #it-eng gca: figlet $*
/fig LOLCATS!
The phrase LOLCATS! will appear in a large ASCII font in the #it-eng channel.
This requires that you have three horizontally stacked windows open (see /split3
above). It will cycle the focus through each window and then set it to display a specific buffer (channel).
Say for example you automatically join three channels when opening weechat: #it, #secretfunchannel, and #myteamchannel:
/alias mychannels /window up; /buffer #it; /window down; /buffer #secretfunchannel; /window down; /buffer #myteamchannel; /window up
/mychannels
When the alias finishes the cursor will be focused on the center buffer (channel), which in this example would be #secretfunchannel.
Final Window <-> buffer arrangement after running /mychannels
:
Top <-> #it
Middle <-> #secretfunchannel
has the cursor focusBottom <-> #myteamchannel
I don’t actually run this alias directly (like /split3
, above). It is part of a more complex macro. See /startup
, below.
Sets up your windows and what channels they display correctly when you start weechat. This will split weechat into three horizontally stacked windows, each showing a specific channel:
/alias startup /split3; /mychannels
/startup
/split3
alias and the /mychannels
alias, defined above.I noticed that Emacs was getting a default-directory
value of /
when launching it with a custom keyboard shortcut I set up in Gnome (2). The result is that opening a file started my search in the root (/
) of the filesystem.
I suppose this is due to the way in which emacs was invoked (via the window manager). Given that there was no actual present working directory, I can understand that it would default back to using /
.
At the time I was just setting the window title:
emacs -T Emacs
When considering how to work around this I first considered setting the default-directory
in my .emacs
file. This turned out to be a less an idea solution. Doing so causes it to become a global configuration value (all subsequent emacs launched via the terminal opened in ~
). So instead, I changed my launcher command to this:
emacs -T Emacs -eval "(setq default-directory \"~/\")"
Works like a champ!