| CARVIEW |
Select Language
HTTP/2 200
cross-origin-resource-policy: cross-origin
etag: W/"a5cced052e09d77dec76841738c8713e8d0674ca3fc856234580d52c55dc88a2"
date: Fri, 16 Jan 2026 04:58:27 GMT
content-type: application/atom+xml; charset=UTF-8
server: blogger-renderd
expires: Fri, 16 Jan 2026 04:58:28 GMT
cache-control: public, must-revalidate, proxy-revalidate, max-age=1
x-content-type-options: nosniff
x-xss-protection: 0
last-modified: Thu, 12 Sep 2024 00:57:09 GMT
content-encoding: gzip
content-length: 9079
x-frame-options: SAMEORIGIN
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
tag:blogger.com,1999:blog-5533014087482697280 2024-09-11T20:57:09.241-04:00 Read, Review, Refactor Reviewing technology, literature, and life (in full color). Anonymous https://www.blogger.com/profile/04169190306058127046 noreply@blogger.com Blogger 6 1 25 tag:blogger.com,1999:blog-5533014087482697280.post-4652260788507899126 2014-04-10T03:27:00.002-04:00 2014-04-10T03:27:56.147-04:00 Migration Complete: Welcome to blog.cppcabrera.com! The migration is now complete. Currently, I have:<br />
<br />
* Atom feed support<br />
* Hosted on https:// (with <a href="https://heartbleed.com/">heartbleed</a> patched)<br />
* Sources hosted on <a href="https://github.com/cabrera/read-review-refactor">github</a><br />
* Main blog over at https://blog.cppcabrera.com<br />
* All content from here ported over<br />
* All posts tagged appropriately<br />
<br />
I've documented the process as my first new post at the new location: <a href="https://blog.cppcabrera.com/posts/learning-hakyll.html">Learning Hakyll and Setting Up</a><br />
<br />
At this point, the one feature I'd like to add to my static blog soon is the ability to have a Haskell-only feed. I'll be working on that over the coming week.<br />
<br />
Thanks again for reading, and I hope you'll enjoy visiting the new site! Anonymous https://www.blogger.com/profile/04169190306058127046 noreply@blogger.com 0 tag:blogger.com,1999:blog-5533014087482697280.post-5131689201497099331 2014-03-31T11:50:00.000-04:00 2014-03-31T11:50:30.517-04:00 Migrating to Static, Self-Hosted Blog Hello, readers.<br />
<br />
Soon, I'll be moving away from the Blogger platform to a statically hosted blog. I've been playing with <a href="https://jaspervdj.be/hakyll/">hakyll</a> for some time now, and am pleased with it's support for syntax highlighting, markup formats, RSS/Atom generation, and packaged Warp.<br />
<br />
It'll be great to develop my blog with emacs, leveraging git for backup and rsync for deployment.<br />
<br />
Expect:<br />
<br />
* Less latency<br />
* A home-grown design<br />
* More code samples, with pretty highlighting<br />
<br />
With possibly:<br />
<br />
* More frequent posts<br />
<br />
Stay tuned. I'll be releasing the new blog by the end of the week! Anonymous https://www.blogger.com/profile/04169190306058127046 noreply@blogger.com 2 tag:blogger.com,1999:blog-5533014087482697280.post-8728524010451343372 2014-01-30T03:18:00.004-05:00 2014-01-30T03:18:59.690-05:00 My OSCON 2014 Proposal: The Case for Haskell I just finished submitting my proposal for OSCON 2014. After two days of brainstorming, I feel pretty good about what I've come up with. This talk:<br />
<br />
<ol>
<li>Is about something I'm passionate about</li>
<li>Is a talk I would give even if I wasn't accepted</li>
<li>Requires me to learn even more thoroughly what I'm proposing to speak on </li>
</ol>
It's an opportunity to learn!<br />
<br />
For those of you that would like to submit a proposal in the future, I have two thoughts to share with you.<br />
<br />
First - <b>DO IT!</b> If you have something you'd love to share, get it out there. You are <a href="https://allowedtoapply.tumblr.com/">Allowed to Apply</a>.<br />
<br />
Secondly, if you need a simple video recording solution (I was on Linux, I used my laptop web cam, and I lacked a proper camera), I'm recommending the <a href="https://www.youtube.com/my_webcam">YouTube Recording</a> interface. Given the capabilities of HTML5, I wasn't entirely surprised that such a thing existed. However, I was pleased with the outcome. It certainly worked for me, and worked better than either Cheese of Guvcview.<br />
<br />
<br />
More on the process:<br />
<br />
I must've re-re-recorded myself at least 10 times in trying to express my abstract. It took practice. It was <b>scary</b> the first time around. I stumbled on words. I ran out of breath. I forgot where I was. It got easier as I got into the cycle of editing my script, tweaking, optimizing, and simplifying. It was very similar to developing, testing, and refactoring. There is <b>Zen</b> in all of this.<br />
<br />
So that was it. Lots and lots of practice. Now, the long wait.<br />
<br />
Oh, and by the way - sharing is caring: here's the link to watch my video proposal: <a href="https://www.youtube.com/watch?v=L3mJbHGrLdw">The Case for Haskell</a><br />
<br />
Let me know what you think. As suggested by (2) above, I intend to give this talk whether or not I'm accepted to speak at OSCON, so let me know if there's something that you'd love to hear about! Anonymous https://www.blogger.com/profile/04169190306058127046 noreply@blogger.com 0 tag:blogger.com,1999:blog-5533014087482697280.post-4540104739953429288 2014-01-28T17:09:00.002-05:00 2014-02-01T00:19:23.008-05:00 OSCON 2014 Aspirations: The Case for Haskell <b>Update (Feb. 01, 2014, 00:18am EST): </b>I uploaded by proposal to OSCON two days ago, then blogged about it. You can see the result here: <a href="https://cppcabrera.blogspot.com/2014/01/my-oscon-2014-proposal-case-for-haskell.html">OSCON 2014 Proposal</a> <br />
<br />
It's been an exciting year, and it's only just started.<br />
<br />
Inspired by movements like <a href="https://allowedtoapply.tumblr.com/">Allowed to Apply</a> and following all kinds of amazing people on Twitter, I'm going to submit an OSCON proposal this year.<br />
<br />
I decided this about a day and a half ago, a bit close to the proposal submission deadline. I've had to move fast as a result.<br />
<br />
<b>Yesterday</b>, I brainstormed on what I want to speak on. Haskell. Definitely Haskell. It's what I've poured a good portion of my free time in to over the past few months. Sadly, I've yet to even say hello on #haskell, but it's been great listening in to discussions on there!<br />
<br />
So, more on that brainstorming -<br />
<br />
The title: "<b>The Case for Haskell</b>"<br />
The track: Emerging Languages <br />
The goals:<br />
<br />
1, Instill excitement in Haskell<br />
2. Show where Haskell can help you (a list of 10)<br />
3. Share 5 places where Haskell is changing the way we think<br />
<br />
There's a lot of pieces left to fill in there still.<br />
<br />
<b>Today</b>, I put together a short summary of talks that emphasized how language features helped people solve problems that were presented at OSCON 2013. I'm sharing this guide with you today in the hope that it helps you build a great submission to OSCON 2014.<br />
<br />
You can find the guide here: <a href="https://dl.dropboxusercontent.com/u/61906905/audience.pdf">OSCON 2013: What People Were Saying About Languages</a><br />
<br />
Happy reading! <br />
<br />
<br /> Anonymous https://www.blogger.com/profile/04169190306058127046 noreply@blogger.com 0 tag:blogger.com,1999:blog-5533014087482697280.post-8902349201470959567 2013-12-31T14:54:00.000-05:00 2013-12-31T14:54:32.873-05:00 "Parallel and Concurrent Programming in Haskell" by Simon Marlow; O'Reilly Media; <a href="https://akamaicovers.oreilly.com/images/0636920026365/cat.gif" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://akamaicovers.oreilly.com/images/0636920026365/cat.gif" width="152" /></a>I want to start writing this, but it's been forever since I actually read this book. I'm concerned I won't be able to do it justice.<br />
<br />
So here's the deal: I've read this book once many months ago (June?), and I've been re-reading it since. Some of the details are blurry, but the gist of the book is still with me.<br />
<br />
Without further ado, here's the review:<br />
<br />
<br />
<br />
======<br />
Review<br />
======<br />
<br />
Disclaimer: I'm reviewing this book under the O'Reilly Blogger Review program. (though I ended up purchasing a hard copy afterwards any way.)<br />
<br />
This is <b>The Book</b> that sold me on Haskell for concurrent and parallel programming. Sure, I've read several articles on the benefits of functional languages for programming in the <b>multi-core </b>world, but that didn't really sink in until I saw how elegant it could be in a functional language.<br />
<br />
In brief, the main benefits I got from reading this this book were:<br />
<br />
* Surveyed parallel programming (in Haskell)<br />
* Surveyed concurrent programming (in Haskell)<br />
* Saw the elegance of the approaches for myself<br />
* Learned about laziness gotchas in parallel contexts<br />
* Learned a bit about what's next and left to improve<br />
* Learned what modules to turn to and watch when in need <br />
<br />
I hope I never have to look at OpenCL or CUDA C++ again for parallel programming. The way Repa/Accelerate handles this is beautiful.<br />
<br />
The chapters on concurrent programming showed me how much having concurrency primitives built into a language change async programming. Having forkIO to run subsequent computations and a scheduler in the run-time make it very convenient.<br />
<br />
In sum, I highly recommend this book. 10/10, one of my top 10 books of 2013. Anonymous https://www.blogger.com/profile/04169190306058127046 noreply@blogger.com 0 tag:blogger.com,1999:blog-5533014087482697280.post-6070189363224527333 2013-12-14T21:17:00.001-05:00 2014-01-28T20:25:12.640-05:00 10 Ways to Incorporate Haskell into a Modern, Functional, CS Curriculum I had some time to spare while I was waiting for dinner to be ready. Dinner was being prepared by the local <a href="https://chinagateduluth.com/">China Gate</a>, and it would probably take on the order of 10 to 15 minutes. So I sat down in the lobby with a notepad in hand.<br />
<br />
The topic on my thoughts: how could Haskell be incorporated into a modern CS curriculum? I decided to run as radically as I could with this, writing a rough draft of what such a curriculum might look like.<br />
<br />
I won't make any arguments for or against functional programming here. I refer readers instead to papers like <a href="https://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf">this one</a> and <a href="https://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/history.pdf">this one</a>, talks like <a href="https://yow.eventer.com/events/1004/talks/1054">this one</a> or <a href="https://vimeo.com/72870631">this one</a>, and books like <a href="https://learnyouahaskell.com/">this one</a>. This is an exercise in ideation.<br />
<br />
Without further ado, let's begin:<br />
<br />
<b>0. Haskell for Introductory Computer Science</b><br />
<br />
Imagine this is the first time you're learning programming. You've never been exposed to mutation, to functions, to compiling, algorithms, or any of the details of architecture. Where do we start?<br />
<br />
Four weeks of Haskell. Enough to get through the first few chapters of <a href="https://learnyouahaskell.com/">LYAH</a> and be able to start thinking about recursion. End each week with a simple exercise, for example, upper-casing a list of strings, upper-casing only the first letter of every string that is longer than 2 characters - little things to build confidence. The Udacity <a href="https://www.udacity.com/course/cs101">Introduction to Computer Science</a> course has many appropriate ideas for beginning level exercises.<br />
<br />
With that introductory period out of the way, now's the time to show why computer science is relevant! Take the time to show case the areas: operating systems, networking, algorithms, programming languages, cryptography, architecture, hardware, and more. Make it relevant:<br />
<br />
* Operating systems: Why are there so many? What does it do? How does my application (email, browser, Steam) run from beginning to end?<br />
* Algorithms: How do you figure out if two characters have collided in a video game? How do you sort a list of address contacts alphabetically by last name?<br />
* Networking: How do you send an instant message or an email to a friend on the other side of the world?<br />
* Programming Languages: As with operating systems.<br />
<br />
There are many applicable introductory exercises here that can set the pace for future courses.<br />
<br />
<b>1. Haskell for Basic Algorithms</b><br />
<br />
This one, and the latter algorithms course on this "Top 10 List", deserve special attention<b>.</b><br />
<br />
Algorithms are fundamentally <b>pure</b> constructs. You give them a well-defined input, and receive a well-defined output<br />
<br />
Take plenty of time to provide weekly exercises. Teaching sorting algorithms, trees, string matching algorithms, and more will be a delight here, I predict.<br />
<br />
It's also a good time to introduce basic run-time analysis, e.g., Big O notation.<br />
<br />
This is also a beautiful time to introduce <a href="https://www.haskell.org/haskellwiki/Introduction_to_QuickCheck1"><b>QuickCheck</b></a><b> </b>in conjunction with invariants. <br />
<br />
<b>2. Haskell for Data Structures</b><br />
<br />
Very similar to the basic algorithms course, except now we teach students about some basic ways to organize data. Lists, vectors, trees, hash maps, and graphs - these should be enough to keep most students (and practitioners) well-equipped for years!<br />
<b> </b><br />
QuickCheck<b> </b>and frequent programming exercises will do well here.<br />
<br />
If an advanced version of this course is desired, I highly recommend starting from here to brainstorm a variant: <a href="https://cstheory.stackexchange.com/questions/1539/whats-new-in-purely-functional-data-structures-since-okasaki">Purely Functional Data Structures</a><br />
<br />
<b>3. Haskell for Networking</b><br />
<br />
This can be very low-level (OSI network stack, TCP window buffering, etc.), it can be very high-level<b> (</b>HTTP, distributed systems), or some mix of the two.<br />
<br />
I think the most important concepts students can come of this course with would be:<br />
<br />
* Validating data at the boundaries and the dangers/usefulness of IO<br />
* How to communicate with other systems<br />
* How to write their own protocols, and why in general, they shouldn't reinvent the wheel<br />
<br />
<b>4. Haskell for Operating Systems</b><br />
<br />
Teach them to ask - what is an operating system? How do I manage my resources?<br />
<b> </b><br />
It's worth surveying the concepts of: memory management, file systems, data persistence, concurrency, parallelism, process management, task scheduling, and possibly a bit more.<br />
<br />
Great projects in this course include: 1) write your own shell, 2) write a simple, local task manager.<br />
<br />
<b>5. Haskell for Comparative Programming Languagues</b><br />
<br />
Let's talk types, functions, composition, and problem solving using different approaches. Ideally, such a course would come after learning how to design solutions to mid-sized programming challenges.<br />
<br />
After that, have students write an interpreter for a Lisp. <br />
<br />
<b>6. Haskell for Compiler Construction</b><br />
<br />
More on: write your own language. This course should cover parsing, lexical analysis, type analysis, and the conversion from source to assembly. <br />
<br />
<b>7. Haskell for Advanced Algorithms</b><br />
<br />
This one's going to be fun. Unleash the power of equational reasoning to put together a course that runs through: graph theory, network flow analysis, greedy algorithms, memoization, and more.<br />
<b> </b><br />
This would also be a great time to discuss how the price one pays for purity in regards to <a href="https://stackoverflow.com/a/1990580/282342">asymptotic performance</a>, and how to overcome that, if necessary.<br />
<br />
Also, an extended treatment of algorithmic analysis in the presence of laziness would be valuable here.<br />
<br />
<b>8. Haskell for Introductory Design of Programs</b><br />
<br />
Really, this should be higher up in this list, and a very early course.<br />
<b> </b><br />
The goal of this course is to come out of it knowing how to:<br />
<br />
* Get a big picture of what they're trying to build<br />
* Break it down into the smaller pieces<br />
* Iterate 'til they get the big picture running<br />
<br />
It's a great time to teach some basic ideas for testing, how to experiment with the REPL, and how to take advantage of the type system for simple things.<br />
<br />
On a more social level, it's a wonderful time to also guide students towards collaborative design, e.g., how to work together and make it fun and efficient. <br />
<br />
<b>9. Haskell for High-Performance Computing</b><br />
<br />
This could be a very fun course. It affords the opportunity to allow students to run wild with simulations and experiments of their choosing, while learning about what it means to do high-performance computing in a functional language.<br />
<b> </b><br />
Given that, it should teach some basic tools that will be applicable to most or all projects. How does one benchmark well? What are the evils of optimization? What is over-optimization? When is optimization needed? What tools exist right now to harness parallelism in Haskell (Repa, Accelerate, etc.)? When is data distribution needed? Why is parallelism important? How is parallelism different than concurrency? How can the type system be wielded to help keep units (km/s, etc.) consistent across calculations?<br />
<b><br /></b>
I'd advocate for letting students choose their own projects built in parallel with the course taking place.<b> </b>A simple default is to optimize the much-lauded matrix multiply to larger and larger scales (distributed even, if they want to go so far!). Writing a collision detection engine for a simple game would be pretty interesting, as well.<br />
<b><br /></b>
<b>Notably (in my opinion) absent topics</b>:<br />
<br />
* Hardware: CPUs, cache hierarchies, main memory, storage, interconnects<br />
* Advanced data structures<br />
* Cryptography<br />
* Web development<br />
* Type systems<br />
* Cross-disciplinary development, e.g., Haskell for CS + [Physics, Chemistry, Biology, etc.]<br />
<br />
These topics are absent from my list for no reason other than I didn't think of them 'til the list was done and articulated. There's so much one can learn and apply at the level of abstraction that computer science (and mathematics) affords that we could specialize further and further. For my own sake, I'm setting a limit. :)<br />
<br />
<b>Final Notes</b><br />
<br />
I've just brain-stormed a curriculum in Haskell. There's a lot of details missing, but it's a working draft.<br />
<br />
There's also other things to consider, beyond the technical aspects. Consider the social aspects. How we teach students to work together? How do we keep learning engaging and fun? How do we help students connect to the greater community of developers that exist outside of academia? How do we keep the lessons relevant to the lives that they lead? How do we encourage them to pursue their passions? Anonymous https://www.blogger.com/profile/04169190306058127046 noreply@blogger.com 3