Recent blog posts
This is our new blog page. If you're looking for posts before 2012, see our archive.
This is going to be about pranks. We love pranks. Yes we do. The problem with pranks is while they’re fun for the instigator; they may not be that much fun for the victim. For example, there is a class of restaurants that as a “feature” have a “no tie” policy where they will cut off your tie if you darken their doorway wearing one. This is allegedly a good joke if you have visitors from out of town who are dressed up and then you take them to a business lunch wherein you get a picture of the victim getting humiliated. Yes, you can tell that I’m not a fan of this, just from the point of view that if I’m traveling and I only have one tie or am wearing one that I’m fond of, I will either go without or have to go buy one. That doesn’t mean that there is no way to carry this off. The better way is to offer the victim a different (lousy) tie on the way in, or to make sure you have a ve...
In the grand scheme of things, I’m not really a type geek or font snob, but I do find the elements of type and type design fascinating, especially when it shows craftsmanship, either in the the letterforms themselves or in how they were created in a particular piece. The 1978 production, Final Marks is a wonderful documentary about this process and is worth the 50 minutes to watch. John Benson, mentioned in the documentary, designed some type for Adobe as well.
I first really started taking note of typography after seeing some of the “Modern Ancients” fonts that Carol Twombly designed for Adobe. These are fonts that were taken or inspired by stone lettering from earlier times. One of her fonts, Lithos, was based on a Greek font, but saw incredible popularity in Mexican food labels.
Over the past weekend, I was at my college reunion at Oberlin and I found some very nice lettering as part of the World War II Memorial near Finney Chapel....
Today I’m going to get all mathy on you. Don’t worry about it – it’s going to be pretty simple math and in the end we’re going to learn how to split a cubic Bézier curve into two new curves.
First, let’s start off with parametric equations. This is a type of equation that adds a new variable, t, which can be thought of as time. In our world, t is going to range from 0 (the start) to 1.0 (the end). So for example, if I have a line segment from point A to point B, then point A is at time 0, point B is at time 1 and the midpoint is at time 0.5.
Let’s look at midpoint briefly – you probably learned midpoint as this:
x’ = (x1 + x0)/2
y’ = (y1 + y0)/2
or simply, the average of the x’s and the y’s. But let’s have some fun with this. I’m going to only work with x components, but I assure you that this works just fine with both. First, I’m...
Quick – take a look at this excerpt from a Dr. Seuss book:
I took this picture with my phone shortly after reading with my son and found this page particularly jarring. Like many technologies, automated type came from a hand-driven process. Writing used to be hand done until Gutenberg and then after, it’s been a continual struggle to get technology to be able to create something that can be done by a talented calligrapher. In this case, the problem is ligatures. Ligatures are sets of glyphs that are tied together (ligated) by their shapes. They are necessary because they improve the appearance and readability of a document. Here is a pretty good blog entry on ligatures.
Now look back at the Seuss. Here’s what I saw immediately (and I am not a typographer):
which are all pairs which should be replaced with an equivalent ligature. In particular, the fl is bad because...
Step 1-through-infinity: offer the worst support ever. Nothing can make up for it.
A little bit of background for those who haven't read Steve's latest article. Atalasoft has purchased quite a few of ----------'s (Company That Shall Not Be Named) peripherals over the years, as well as some of us buying them for personal use. In our server room, we have a collection of dead peripherals -- all of them failing in the same manner (the peripheral would fail intermittently, increasing in frequency until it didn't turn on at all). Steve wrote to ----------, explained the issue in appropriate "that's why he's an expert" language, and asked for reasonable suggestions for repair, replacement, or recycling. The response back? There's a reason why Steve asked, "This is a joke, right?"
The response he received from ---------- was the epitome of bad support. Whoever was responsible for it:
Software engineering is funny. It shares a lot with Computer Science (which honestly, should be called applied mathematics) and it shares some things with other engineering disciplines. With other engineering disciplines, it shares the need for clear processes for planning projects, managing work, ensuring quality, and handling defects. I say that it shares the need because not every shop actually does all of these things and there is certainly no one good standard for any of these. This is an industry problem.
One of the many nice things about being married to a real engineer is that I get to hear a lot about engineering and manufacturing process and one of the things I’ve heard her (and other engineers) talk about is FMEA: Failure Mode and Effects Analysis. This is process whereby a component can be analyzed for failure and severity or probability of failure can be reduced or eliminated. This is what I thought of when one of my LCD mo...
One of the things that I admire in solid programmers is laziness. Some programmers will go to extreme lengths to avoid doing certain classes of work and frankly, I can’t blame them really. For example, if you need to have a set of look up tables in code from some specification, you could just pull of the spec and start typing in the tables. A clever programmer will look at the task and start asking the following questions:
How much typing will each entry in the table take (and by extension, how long will the whole task take)?
How many mistakes will I make just typing?
How long will it take to find all of them?
How long will it take to fix all of them?
How irate will my customers get because of 3 and 4?
When 1 gets measured in any units greater than ‘minutes’ and 3 gets measured in units of days to years, a very clever programmer will also ask, “how can I automate this?”
This week I was looking at cr...
This time, we have lots of exciting updates across our entire suite of SDKs including new mobile support, index fields, and more. Who's ready to learn more? Let's dig in.
Quick Introduction to New Features in 10.3
Atalasoft's VP of Product Development gives us a quick run-down of what to expect in 10.3. (Running time: 1:29)
Watch the overview video. Subtitles and 1080p available.
Build Mobile Document Viewers w/Annotations
This is two-fold: The DotImage Web Document Viewer controls are now supported on iOS Mobile Safari and Android's Chrome mobile browsers. This also includes annotation support with touch interfaces, zooming, pagination, and more. Your users can interact with multipage docs on the run.
Contact for a demo
PDF Generation updates
In DotPdf, you can now import SVG drawings as well as make use of the new TableShape so you can add tabular data to any PDF. Generate invoices with full cont...
If you’ve written software to manipulate large chunks of data, you’ve likely created temporary files to hold the data for you. And if you’re like me, your machine currently has 2587 files in your personal Temp folder. Why? Chances are there are a ton of apps on your system that are Doing It Wrong. I’m going to talk about how most apps do this, how it goes horribly wrong, and what you can do to mitigate this problem for your own code.
Most apps will get the path to the Temp folder and run a loop creating files based on time stamp or time stamp followed by iteration until they succeed in making a new file. This path (or stream) gets used in the application in some manner and at some point in the future it will get removed. And you can bet that it’s the last step where applications screw up – they don’t (or can’t) clean up after themselves.
If you’re using Path.GetTempFileName(), stop. Seriously. Just stop using it. It’...
I saw this question on Metafilter about what CS courses are necessary to be a software developer and thought I would take the opportunity to expound a bit.
The first non-useful answer is: all of it. I went to Oberlin, a college that only grants arts degrees, and received a degree in computer science. In that time, I also took classes in religion, ethnomusicology, physics, media, anthropology, and so on. Anything that seemed interesting and I could schedule, I tried to take. I honestly believe in the value of breadth in many things and depth in a few things. The value is especially apparent in software where solutions frequently need to be tailored to the problem domain and the possible number of domains that can be addressed effectively with software grows daily. If you know about a wide number of things, you can better tailor solutions to those domains. Being a lifelong learner makes it easier to learn new problem domains.
The second answe...