Archives All posts
-
AI deserves better critics 2026-04-10
Bad critique results in missed opportunities to shape the future
-
Far from perfect 2026-03-17
Where AI tooling can go next
-
Bomb, bomb Iran 2026-03-01
High-powered explosives are sometimes necessary for diplomacy
-
Running Jupyter server on Windows 2026-01-08
Maybe I should have just installed Linux
-
Agentic utopia deferred 2025-11-17
Useful agentic systems won't come without a struggle
-
Artificial Darwinism 2025-11-01
What if AI models, tools, and users are forced to co-evolve?
-
core.async and virtual threads 2025-10-26
Surprising semantic changes in a popular library
-
Lateral joins 2025-10-13
An underutilized SQL feature?
-
Will AI replace programmers? 2025-08-21
Job losses will not be due to technology alone
-
Building Postgres on macOS 2025-06-20
Of course it wasn't going to be straightforward
-
Finding when a line was deleted 2025-06-19
git-blame --reverse and git log come to the rescue
-
What Actually Destroys Jobs 2025-06-16
Technology alone is not to blame for loss of jobs
-
Compile-time vs. runtime with C++ templates 2025-05-31
Keeping track of what happens when can be tricky
-
SQL query planning 2025-04-04
The elegant ideas that made RDBMS possible
-
Generating classes in Clojure 2025-03-01
JVM adventures await!
-
Better angels of our tariffs 2025-02-06
The peculiar demonization of a mundane economic tool
-
All the wrong numbers 2024-12-12
Economic data often give false impressions
-
The price of incoherence 2024-11-15
The Democratic coalition is increasingly unworkable
-
The many definitions of retirement 2024-10-08
Discussing the "retirement age" requires context
-
The ultimate rerun 2024-08-11
The debate over illegal immigration is a movie we've seen before
-
Virtual threads 2024-07-08
Is concurrency on the JVM more tractable?
-
No children of men 2024-06-22
What is the cause of low and declining fertility?
-
Does debt matter? 2024-05-31
It depends on who's paying
-
Poverty and disorder 2024-04-07
One should not be mistaken for the other
-
Stack ranking and decimation 2023-10-04
Job cuts rarely impact power structures as they're supposed to
-
Whiplash and the cult of sacrifice 2023-04-10
Don't mistake sacrifice achieving your goals
-
Semantic vs. date versioning 2023-03-08
Versioning software with dates is the superior way
-
Putin's political constraints 2022-10-18
Understanding how the Ukraine War will progress
-
The Sino-Russian delusion 2022-07-04
We need to focus on real threats rather than imagined ones
-
The Identity Stack 2022-06-20
How identity works in America and why intersectionality isn't it
-
Après Trump, l'Orban 2020-11-04
The nationalist populist transformation of the GOP will continue
-
The decline of black political power 2020-08-10
Co-option by others and arithmetic reality demand a different strategy
-
Cryptography 2020-06-13
An elegant area of computer science
-
Dynamics of insufficient demand 2020-04-25
We're not used to dealing with the economic problem of excess production
-
Coronavirus and globalism 2020-03-29
The retrenchment of globalism accelerates
-
China vs. India 2020-01-04
This isn't about authoritarianism vs. democracy
-
What's wrong with 996? 2019-12-22
Working longer isn't better
-
The return of big government 2019-12-14
Internal and external factors alike demand a more powerful state
-
Datomic is simple made easy 2019-11-22
The hits keep coming from Cognitect
-
Size and risk taking 2019-10-26
The larger the organization, the less risk it can bear
-
An adventure in resizing partitions 2019-09-19
A simple task is surprisingly hard
-
The end of PC corporatism 2019-08-22
Cultural and economic changes are coming simultaneously
-
Is it genius or just plain dumping? 2019-07-12
Sober conclusions may be drawn comparing services to products
-
The Strange Obsession With 5G 2019-06-07
Beware technology that becomes a symbol of everything else
-
The Coming IT Crunch 2019-03-01
Slower productivity growth and surging participation forebodes tough times for IT
-
Data Really IS the New Oil 2018-04-28
Similarities between two seemingly unrelated resources
-
The Road to Cyber Serfdom 2018-04-08
Lack of property rights in cyberspace is creating dissatisfaction
-
Code BEAM 2018 2018-03-16
A reflection on the Code BEAM 2018 conference
-
Technology needs genuine diversity 2018-03-04
Hollow words won't improve the tech industry
-
Technology shouldn't waste your time 2018-01-28
Technology, not just the tech industry, has gone terribly wrong
-
A look at Julia 2018-01-05
Exploring a new scientific programming language
-
Quantum computing is real 2017-11-30
A visit to a quantum computing company...that uses Lisp!
-
Augmented reality 2017-09-25
A quick recap of where AR is at
-
Too big a language, too small a language 2017-09-14
Programming languages should be as practical as necessary, but no more
-
Corman Lisp 2017-07-13
An interesting story of Lisps, by Roger Corman
-
Success begets success 2017-06-21
To become successful, first become successful
-
Observations on Ruby 2017-05-20
Looking back at a language I've leapfrogged
-
Tech is tyrannical 2017-05-06
Technology is not democratic--it is autocratic
-
RSI and the Kinesis 2017-04-15
Repetitive strain injury is no joke
-
Just-in-time education 2017-04-08
On the need to interleave school and work
-
Java appletviewer 2017-03-25
Viewing Java applets when browsers stop supporting them
-
Clojure with-redefs gotcha 2017-03-18
A Clojure compiler optimization breaks a problematic macro
-
Put aside the math 2017-02-25
Programming is not a very mathematical activity
-
A good night's sleep 2017-02-20
To do anything right, start with the basics
-
Decompiling Java classfiles in Emacs 2017-02-12
If you have an itch, Emacs helps you scratch it
-
Are you one of us? 2017-02-05
Interviews are as much about identity as skill
-
The rerise of nationalism 2017-01-28
The nation-state reasserts itself--to the American advantage
-
Prediction vs. analysis 2017-01-21
Approaching the future with a crystal ball is the wrong approach
-
Technology, economics, and law 2017-01-14
Social and legal reactions to the rising value of data
-
Better is better 2017-01-07
Being worse may ease adoption, but does not lead to a better product
-
Progress isn't linear 2017-01-01
What can be done in a fresh set of 365 days?
-
Machine learning and math 2016-12-24
A strong math background is essential for machine learning
-
Instant gratification 2016-12-17
Good tools shorten the development feedback cycle
-
Collaboration in open source 2016-12-10
How to organize contributors to open source projects?
-
Clojure/conj 2016 2016-12-03
The premier Clojure conference in the US
-
A shallow dive into Erlang 2016-11-26
Going to the source of great concurrency models
-
Coders at work 2016-11-19
Experiences of great programmers are enlightening
-
The merits of assembly 2016-11-12
Low-level programming can be enlightening
-
Laziness and chunking in Clojure 2016-11-05
Interesting behavior with Clojure's lazy sequences
-
The churn of being cutting edge 2016-10-29
Early adoption has its drawbacks
-
Beyond programming 2016-10-22
For developers, it's not enough to "code"
-
Different strokes for different folks 2016-10-15
Companies approach technology differently--for good reason
-
Do it yourself 2016-10-08
It's the only way to truly learn
-
The mythical software engineer 2016-10-01
How much of what most software developers do is "engineering"?
-
Don't be a hacker 2016-09-24
"Hacking" is not a satisfactory way of writing software
-
JVM garbage collection 2016-09-17
Memory management on the JVM
-
StumpWM 2016-09-10
A window manager in Common Lisp!
-
WiFi passwords--or, why Linux is a hassle 2016-09-03
Why must distros differ on unimportant things?
-
Batteries, the next frontier 2016-08-26
No technological breakthrough would be as important as improved batteries
-
Self-driving cars and local economies 2016-08-20
What unintended economic impacts might self-driving cars have?
-
Crowdfunding and open-source 2016-08-12
What is the right economic model for open-source software?
-
Holding the line 2016-08-06
What to do when you're not feeling motivated to get things done
-
Category theory 2016-07-30
The foundations of Haskell
-
Haskell vs. practical languages 2016-07-23
Why are languages favored by academics wildly unpopular in industry?
-
Reactive programming 2016-07-16
A surprisingly hard concept to define
-
Property-based testing 2016-07-09
Describe what something is and let the computer generate test cases
-
Pattern matching 2016-07-02
A great language feature for writing clean code
-
Functional programming in Scala 2016-06-21
There was a functional language on the JVM before Clojure?
-
Starting Emacs from IntelliJ IDEA 2016-06-18
For when you really need the ultimate editor
-
It's good to be lazy 2016-06-11
Making things for lazy people takes a lot of work
-
Why functional languages are great 2016-06-04
Will great features lead to wider adoption?
-
Basics of an LLC 2016-05-30
Some information on setting up an LLC
-
The 70/30 rule 2016-05-29
Be more of a producer, less of a consumer
-
The problem with tutorials 2016-02-13
Over-simplistic tutorials create bad habits that are hard to break.
-
Default editor in GNOME 2016-02-09
Changing the default text editor in GNOME.
-
Split PDF files by bookmarks 2016-02-05
Sejda, a Java library and CLI utility for manipulating PDF files.
-
Getting an Apress subscription 2016-02-03
Is an Apress Access subscription worth it?
-
Software as a team sport 2016-01-22
The importance of everyone doing things the same way.
-
To understand anything 2016-01-20
A revelation when working on a large codebase.
-
Using WordPress to power your entire website 2013-02-23
Until yesterday, I had my blog set up at the subdomain www.blog.tianxiangxiong.com, but nothing at the site root, www.tianxiangxiong.com. However, this subdomain simply pointed to the files at my subdirectory, www.tianxiangxiong.com/blog. This will cause me a lot of headache later on.
Previously, the plan was to use a web development framework like Django to create my homepage. However, after my computer got stolen (long story), the plan simply petered out. It wasn't that I lost all my work--in fact, I hadn't done much besides familiarize myself with the basic aspects of Django. It's more so that I am forced to use the lab computer I acquired as part of my Pratt Fellows research program as my primary computer, and I don't feel that it's appropriate to install a lot of non-work-related software on it.
Therefore, after allowing my homepage to languish for about a year, I decided to simply use WordPress to power my entire site.
The process was simpler than I expecgted. I simply followed the instructions at the WordPress Codex, Giving WordPress Its Own Directory. Though the title is rather ambiguous, it's a guide intended for individuals who want WordPress to power their site root, but have it in its own subdirectory, e.g. www.tianxiangxiong.com/blog, to avoid cluttering up their root directory. The section relevant to me is "Using a pre-existing subdirectory install".
It was an easy process for the most part, but I did encounter a few problems. Recall the previous mention of subdomain and subdirectory. The key here is to use the latter for the WordPress Address URL and not the former, or else functions like previewing posts will get broken.
-
Being too clever with LaTeX files 2012-10-05
After several years of using LaTeX for various reports and lab write-ups, I feel that I've got a pretty comfortable set-up going. This is a far-cry from freshman year, when I spent entire nights in the computer lab (didn't have a laptop back then) trying to figure out why my document in Emacs wasn't compiling (it was inevitably because of a single misplaced symbol).
Perhaps due to the steep learning curve, I find that I am one of only a few engineers who use LaTeX regularly. Everyone else seems determined to stick to Microsoft Word, or, at best, LibreOffice Writer.
For general purposes, I have a document called report_prototypes.tex that includes several other files.
- The first file is called custom_headings_1.tex, which contains a lot of general preamble stuff.
- The second file is called graphics_1.tex, which contains exactly one thing: a command to generate an image page divider. It's pretty useless for now.
- The third file is called proofs_headings_1.tex, which contains stuff related to mathematical proofs.
It's a fine setup, and I've even got it working on both Windows and Linux using the ifplatform package:
[sourcecode language="latex"]
\usepackage{ifplatform}
\ifwindows
\newcommand{\dropboxprefix}{D:/Dropbox/Code_Library/LaTeX}
\else
\newcommand{\dropboxprefix}{/home/txx/Dropbox/Code_Library/LaTeX}
\fi
[/sourcecode]However, today I ran into a problem. The subfig package I've included as part of custom_headings_1.tex has been deprecated; in fact, it's been deprecated since mid-2011, and I simply hadn't known about it. The new package, subcaption, has much more sensible syntax.
Long story short, I eagerly changed custom_headings_1.tex to use the new package, before I realized that this can't be done. The problem is that all of my old documents are dependent on custom_headings_1.tex and its subfig package. If I change it, the old documents would no longer compile. Therefore I had no choice but to create a new custom_headings_2.tex file to accomodate this tiny update. Of course, every time I make an update in the future, I'll have to create a new headings file while making sure I don't lose the old ones.
In some ways this is really unavoidable. The current situation still beats including local copies of headings files with every new document by a long shot. However, it's an inconvenience I hadn't thought about when I first came up with the method of including shared headings files. It just goes to show that the best-laid plans can be stymied, or at least inconvenienced, by the smallest obstacles.
-
Using Python with Emacs 2012-05-17
A first taste of turning a text editor into an IDE.
-
Syntax highlighting on Wordpress.org blog 2012-04-30
Syntax highlighting on Wordpress.org blog requires a plug-in, while syntax highlighting on Wordpress.com is built-in.
Different plug-ins use different methods for highlighting code. Some use the pre tag, some use the code tag, while the rest use various forms of shortcode such as [code][/code] or [language_name].
Ideally, I'd like my syntax highlighter to fulfill the following criteria:
- Use Alex Gorbatchev's SyntaxHighlighter library
- Auto-format code
- Collapse/expand large code blocks
Despite the large number of syntax-highlighting plugins available, there are none that fulfill all of these criteria. In the end, I settled for what seems to be the most popular plug-in, Viper007Bond's SyntaxHighlighter Evolved. It uses Alex's SyntaxHighlighter and allows the viewer to expand code that is initially collapsed, but there is no auto-formatting capability and no way to re-collapse the code.
A bonus is that it supports the [sourcecode language="language_name"][/sourcecode] tag, which is the same shortcode that Wordpress.com uses, so I don't have to reformat my old posts (not that there are too many).
Here is a code sample using the default theme:
[sourcecode language="cpp"]
#include <iostream.h>
main()
{
char C = 64;
cout << C++ << " ";
C = 96;
return 0;
}[/sourcecode]
-
Migrating to a new host, twice in a week 2012-04-25
A few days ago, I had migrated my blog from Wordpress.com to my personal domain. I used 000webhost.com as my free host. Since my experience with them was not at all positive, I won't post a link here.
000webhost.com promises a large amount of storage and various other features, including 99% uptime, to free users. After I signed up with them and went through the trouble of setting up my site, their server came under DDOS attack, rendering my site inaccessible. After reading some online reviews, I think there are two possibilities:
- They have a lot of enemies because of poor service/shady business practices.
- They are purposefully withholding service to get free users to upgrade to their (quite expensive) paid plan.
These two possibilities are not mutually exclusive. Suffice to say that free always comes at a price.
I've since moved on to Hostgator.com, which has some pretty good internet reviews. Service so far seems decent; the DNS propagation took minutes as opposed to two days, although I don't know if this is simply because I learned to flush my DNS buffers on Fedora 16. Hostgator usually offers a 25% discount on any purchase through a plethora of coupon codes floating around the internet. Around Black Friday/Cyber Monday the discounts can be as steep as 50-80%, but at this point I'm not willing to wait 7 months.
Hostgator also offers one-click Wordpress install, as well as a bunch of other features.
The theme I am currently using, Clean Home, can be downloaded here. This minimalist theme is by Bryan Helmig of Mid Mo Design.
The official theme on Wordpress.org is NOT the same as the one I am using. There are two versions: the official version and a Dreamhost version. I am using the Dreamhost version, which I believe to be superior in design.
-
Getting the latest version of TeXLive on Fedora 16 2012-04-19
In line with Fedora's (and many other Linux distributions') design philosophy, all installed packages should be managed centrally through
yum. This is great in principal, because it allows all software on the system to be updated with a single click.The downside is that not all desired packages are available through Fedora's official repositories. Or, if they are, they may not be regularly updated and properly maintained. The Fedora team also strips out package features that allow updates independent of the operating system.
In this case, I wanted to use TeXLive 2011, but the pre-installed version is TeXLive 2007 (recall that this is the middle of 2012). An update seems to be in progress, but won't be 100% complete until Fedora 17 [1].
Even if TeXLive 2011 was available, however, the policy on banning alternate update methods means that a part of the TeXLive distribution,
tlmgrwill be stripped out.tlmgrallows connection to a LaTeX repository and automates the installation/removal of LaTeX packages.Since I needed some external packages and
tlmgr, I downloaded TeXLive manually (see here for instructions). I also needed to install some packages not available via LaTeX repositories. Here's how to install packages usingtlmgrand by hand:By
tlmgrBASHis unable to findtlmgrwithout being told its location. To do so, use theexportcommand. The overall process of launchingtlmgris- Log into shell as root user.
- Run:
export PATH=/usr/local/texlive/2011/bin/x86_64-linux:$PATH - Run:
tlmgr --gui - Install packages via the GUI
By hand
- Log into shell as root user
- Run:
mkdir /usr/local/texlive/2011/texmf/tex/latex/[directory_name] - Run:
mv [file_path] [new_directory_path] - Run:
texhash /usr/local/texlive/2011/texmf
texhashupdates the package database.Notes
[1] In the meantime, partial updates can be installed using directions found here. -
Customizing Gnome 3.2 on Fedora 16 2012-04-19
Here are some useful extensions to improve your Gnome 3.2 experience. All extensions can be found at https://extensions.gnome.org/
- Alternative Status Menu (by gcampax)
- Replaces GNOME Shell Status Menu with one showing Suspend/Hibernate and Power Off as separate items
- Applications Menu (by gcampax)
- Add a gnome 2.x style menu for applications
- Hide Dash (by zacbarton)
- If you find you dont use the dash or have a smaller screen you can use this extension to hide the dash and allow the windows and application tabs to have a close to full-screen area.
- No Topleft Hot Corner (by azuri)
- This extension disables the top left hot corner. You can still click on Activities or press the dedicated key to reach the overview.
- Overlay Icons (by vdepizzol)
- Easily discover which application to select by viewing the app icons in the windows overview
- Workspace Navigator (by Smotko)
- Allow selection of workspaces with up and down arrow keys in overlay mode
- Workplace Switcher Wraparound (by war1025)
- When switching workspaces, going down from the bottom workspace switches to the top workspace. Likewise, up from the top workspace goes to the bottom workspace.
- Alternative Status Menu (by gcampax)
-
Getting Dell WLAN 1397 Wireless card to work with Fedora 16 2012-04-08
So I decided to dual-boot my computer with Linux. I've been mildly aware of wireless card problems with Linux before, but I never would have thought that it would be this difficult to get things to work right. Here's the solution, courtesy of a forum post
I can't find the link to now. Thanksto that mysterious personuser stoat from fedoraforums.org (link to post) who saved me from hours (more) of frustration.The Dell WLAN 1397 Wireless card is shown to be the Broadcom BCM4312 802.11b/g LP-PHY (rev 01) card through the
lspcicommand. The file needed is calledbroadcom-wl-4.150.10.5.tar.bz2
It should be floating around on the internet, available through a quick search. Too bad WordPress won't allow upload of .tar.bz2 files.
Get the file onto Fedora through a USB, then navigate to the containing folder using the terminal. Run the following commands in the terminal
tar xjf broadcom-wl-r.150.10.5.tar.bz2 cd su broadcom-wl-r.150.10.5/driver su b43-fwcutter -w /lib/firmware wl_apsta_mimo.o
Finally, restart the computer. Wireless internet should be working.
-
Getting Started with WinForms in C++/CLI 2011-07-16
Opening a new Visual C++ WinForms project, the first object we see is the designer, which represents a blank form. The designer can be used to add/delete controls, move controls around, and change controls' basic properties such as name, text, background image, etc. More complex operations should be done within the code, however. To change from designer to code, right-click the designer and select "View code".
[caption id="attachment_56" align="aligncenter" width="450" caption="The initial screen of a WinForms project"]
[/caption]A form is categorized as a header file. The default form is titled "Form1.h". As a header file, it contains the ubiquitous #pragma once preprocessor directive by default, so that the file would be included only once.
All the code used to build the form is included in a namespace, which by default has the same name as the project. DO NOT try to change this namespace's name, because resource files (kept in Form1.resX) use the project name as part of their identifiers. If the namespace name does not match the project name, the resource file won't be found. I learned this lesson the hard way [1].
Default namespaces are included. To make my Student RecordKeeper project, I included two other useful namespaces:
[sourcecode language="cpp" gutter="false"]
using namespace System::IO;
using namespace System::Collections::Generic[/sourcecode]
System::IO is useful for opening, reading, writing to, and closing text files. System::Collections::Generic is useful for using generic collections such as List and Dictionary.
Form1 is an instance of the System::Windows::Forms::Form class. As I understand it, in C++/CLI ref class is used to indicate that a class is managed. The default constructor and destructor follow.
The most interesting part of the code is the InitializeComponent() function. When I first began working with a WinForms project, I kept writing code in the body of the function and wondered why the designer would stop working. Well, turns out you shouldn't ignore big, multi-line warning comments ;). The InitializeComponent() function is used by the designer and is automatically updated. In short, don't touch anything within the function [2].
That's a pretty thorough introduction to a default WinForms application, I think. The full code can be seen below after uncollapsing the section.
[sourcecode collapse="true" language="cpp"]
#pragma once
namespace Example_GettingStarted_WinForms {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;///
<summary> /// Summary for Form1
///
/// WARNING: If you change the name of this class, you will need to change the
/// 'Resource File Name' property for the managed resource compiler tool
/// associated with all .resx files this class depends on. Otherwise,
/// the designers will not be able to interact properly with localized
/// resources associated with this form.
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: Add the constructor code here
//
}protected:
///
<summary> /// Clean up any resources being used.
/// </summary>
~Form1()
{
if (components)
{
delete components;
}
}private:
///
<summary> /// Required designer variable.
/// </summary>
System::ComponentModel::Container ^components;#pragma region Windows Form Designer generated code
///
<summary> /// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
void InitializeComponent(void)
{
this->SuspendLayout();
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(8, 16);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(586, 373);
this->Name = L"Form1";
this->Text = L"Form1";
this->ResumeLayout(false);}
#pragma endregion
};
}[/sourcecode]
[1] As mentioned in a previous post, I began my project (which I called Schedule_UI, even though it's not really a personal schedule maker but rather a grade recorder) in VS2010 and discovered that there is no Intellisense support for C++/CLI, so I ported my project over to VS2008. Well, when I created a new project for VS2008, I named it Schedule_UI_2008. When I copy-pasted my code from the VS2010 project into the VS2008 project, I kept the namespace as Schedule_UI.
Everything worked just fine until I tried to add a background image to a button. The program simply could not find the image resource, even though it was clearly located in the Form1.resX resource file. Took me a long time before I found the answer.
[2] Note that the InitializeComponents() function is surrounded by the pair of directives #pragma region/#pragma endregion. This allows the code between the directives to be collapsed, and is useful for creating user-defined regions of code.
However, there is a big disadvantage to doing this: functions within the region can no longer be collapsed! See here for more information. Although the issue in the link was reported in 2011, this problem has existed since VS2005 and I've seen several Microsoft responses claiming that it would be fixed in a patch for VS2005, then in VS2008, then finally in VS2010. So I wouldn't hold my breath for it to be fixed in VS2012 or whatever the next version of Visual Studio becomes.
-
Using .ico files in Visual Studio 2008 2011-07-16
Today I was putting the finishing touches on my little Student RecordKeeper project when I ran into a very peculiar problem. I had set an ErrorProvider object to show a star icon for several textboxes and comboboxes on my New Student form to show that these fields are mandatory.
I wrote a function to set these ErrorProviders within the form's constructor, and created KeyUp/SelectedIndexChanged EventHandlers to have them disappear if text was typed or selections chosen within the textboxes and comboboxes. If the text was deleted (only by keystrokes, however) or the selected index set to -1, the icons would reappear.
Well, when I created a new form, the icons would appear, but the stars would have white backgrounds instead of transparent backgrounds.
[caption id="attachment_26" align="aligncenter" width="450" caption="Stars with ugly white backgrounds"]
[/caption]I was certain that the star .ico images had transparent backgrounds, so this was very weird. Even stranger, when text was entered into the textboxes, then deleted so that the star icon would disappear and reappear, they would reappear perfectly normal with transparent backgrounds! The white backgrounds would only be there when the form is first created.
I used a different .ico file and found that it did not have the problem with white backgrounds. This was turning out to be quite a mystery! But as with most mysteries, this one had a mundane solution.
I had converted my star images from .png to .ico files using the website http://www.convertico.com/. The different .ico file I used was downloaded directly as a .ico file. Something strange must have been going on in the conversion process. I used GIMP to simply save my .png file as a .ico file and it worked as I wanted it to. The final result is below:
[caption id="attachment_29" align="aligncenter" width="450" caption="Stars with nice transparent backgrounds."]
[/caption] -
Fun with Windows Forms 2011-06-30
The joys of working with Windows Forms