Recent blog posts
This is our new blog page. If you're looking for posts before 2012, see our archive.
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...
For the last several years, we’ve hosted a Secret Docubot event at Atalasoft. This year, we combined the annual Docubot festivities with a bacon day. Now as I sit back at my desk, trying to concentrate in the face of a food coma, I thought I’d present you with some pictures I took during the festivities:
Hi! I’m bacon!
We bought a grill to keep in the office. This one is much larger. It’s loaded up with two pounds of thick cut pepper bacon from Burger’s Smokehouse.
By the way, their Cajun Steak Cut bacon was awesome. See that jar there? Rick G. claims it’s moonshine. I don’t know how he got it.
Yes, that’s a donut. Yes, we eat dangerously. Just not every day.
Sadly, as delicious as it looks, it didn’t taste that great – it tasted like a hot, extra greasy donut.
Elaine and her animatronic hat.
December 21 is coming...so what!
December 21 of this year marks the end of the Mayan Calendar. It does not, however, mark the end of the world as your Facebook friends will soon tell you! In fact, there are still Maya around today and they believe December 21 actually marks the start of a new era. Think of it like a Mayan New Year's Eve celebration...except it only happens every 52,000 years. The calendar ends and then is "restarted." What? A calendar that ends and then starts again? Sounds familiar to me - and on a day that's shared with my wedding anniversary, I would rather not have a going-away party; I'd rather think of it as a Mayan time for renewal and reflection. That said,...
We wanted to put some internet conspiracy ideas to bed and put your worries to rest. For all the rest of us, it's the end of our calendar year - and it's been such a fantastic year we've shared with you. Thank you for continuing to put your trust in...