ca Scott L. Burson: Comparison: FSet vs. Sycamore By scottlburson2.blogspot.com Published On :: Fri, 18 Oct 2024 05:35:00 GMT [BULLETIN: Quicklisp now has the latest version of FSet.] Sycamore, primarily by Neil Dantam, is a functional collections library that is built around the same weight-balanced binary tree data structure (with leaf vectors) that FSet uses. While the README on that page comments briefly on the differences between Sycamore and FSet, I don't feel that it does FSet justice. Here is my analysis.Dantam claims that his library is 30% to 50% faster than FSet on common operations. While I haven't done comprehensive micro-benchmarking, a couple of quick tests indicates that this claim is plausible. A look through the internals of the implementation confirms that it is clean and tight, and I must commend him. There may be some techniques in here that I could usefully borrow.Most of the performance difference is necessitated by two design choices that were made differently in the two libraries. One of these Dantam mentions in his comparison: FSet's use of a single, global ordering relation implemented as a CLOS generic function, vs. Sycamore's more standard choice of requiring a comparison function to be supplied when a collection is created. The other one he doesn't mention: the fact that FSet supports a notion of equivalent-but-unequal values, which are values that are incomparable — there's no way, or at least no obvious way, to say which is less than the other, and yet we want to treat them as unequal. The simplest example is the integer 1 and the single-float 1.0, which have equal numerical values (and cl:= returns true on them), but which are nonetheless not eql. (I have a previous blog post that goes into a lot more detail about equality and comparison.) Since Sycamore expects the user-supplied comparison function to return an integer that is negative, zero, or positive to indicate the ordering of its arguments, there's no encoding for the equivalent-but-unequal case, nor is there any of the code that would be required to handle that case.Both of these decisions were driven by my goal for the FSet project. I didn't just want to provide a functional collections library that could be called occasionally when one had a specific need for such a data structure. My ambition was much grander: to make functional collections into a reasonable default choice for the vast majority of programming situations. I wanted FSet users (including, of course, myself) to be able to use functional collections freely, with very little extra effort or thought. While Lisp by itself reaches a little bit in this direction — lists can certainly be used functionally — lists used as functional collections run into severe time complexity problems as those collections get large. I wanted the FSet collections to be as convenient and well-supported as lists, but without the time complexity issues.— Or rather, I wanted them to be even more convenient than lists. Before writing FSet, I had spent years working in a little-known proprietary language called Refine, which happened to be implemented on top of Common Lisp, so it was not unusual to switch between the two languages. And I had noticed something. In contrast to CL, with its several different predefined equality predicates and with its functions that take :test arguments to specify which one to use, Refine has a single notiion of equality. The value space is cleanly divided between immutable types, which are compared by value — along with numbers, these include strings, sets, maps, and seqs — and mutable objects, which are always compared by identity. And it worked! I found I did not miss the ability to specify an equality predicate when performing an operation such as "union". It was just never needed. Get equality right at the language level, and the problem goes away.Although FSet's compare generic function isn't just for equality — it also defines an ordering that is used by the binary trees — I thought it would probably turn out to be the case that a single global ordering, implemented as a generic function and therefore extensible, would be fine the vast majority of the time. I think experience has borne this out. And just as you can mix types in Lisp lists — say, numbers and symbols — without further thought, so you can have any combination of types in an FSet set, effortlessly. (A project I'm currently working on actually takes considerable advantage of this capability.)As for supporting equivalent-but-unequal values, this desideratum flows directly from the principle of least astonishment. While it might not be too surprising for a set or map implementation to fail distinguish the integer 1 from the float 1.0, it certainly would be very surprising, and almost certainly a source of bugs in a compiler that used it, for it to fail to distinguish two uninterned symbols with the same name. (I saw a macro expansion recently that contained two distinct symbols that both printed as #:NEW. It happens.) A compiler using Sycamore for a map on symbols would have to supply a comparison function that accounted for this; it couldn't just compare the package name and symbol name. (You'd have to do something like keep a weak hash table mapping symbols to integers, assigned in the order in which the comparison function encountered them. It's doable, but FSet protects you from this madness.)Along with those deep semantic design choices, I've spent a lot of time on developing a wide and featureful API for FSet (an effort that's ongoing). FSet has many features that Sycamore lacks, including:seqs, a binary-tree sequence implementation that holds arbitrary Lisp objects (Sycamore ropes hold only characters, which is certainly an important special case, but why restrict ourselves?)default values for maps and seqs (the value to return when the key is outside the domain is associated with the collection, not supplied at the call site; this turns out to be a significant convenience)generic functions that operate on both lists and FSet collections, to shadow the CL builtins the powerful map-union and map-intersection operations (I'll blog about these in the future)more ways to iterate over the collections (the FSet tutorial has a good summary, about 3/4 of the way down)speaking of the tutorial, FSet has lots more documentationLet me digress slightly to give an example of how FSet makes programming more elegant and convenient. Joe Marshall just put up a blog post comparing Go(lang) with Common Lisp, which is worth a read on its own; I'm just going to grab a code snippet from there to show a little bit of what programming with FSet is like. Here's Joe's code: (defun collate (items &key (key #'identity) (test #'eql) (merger (merge-adjoin #'eql)) (default nil)) (let ((table (make-hash-table :test test))) (dolist (item items table) (let ((k (funcall key item))) (setf (gethash k table) (funcall merger (gethash k table default) item)))))) (defun merge-adjoin (test) (lambda (collection item) (adjoin item collection :test test)))And here's what I would write using FSet: (defun collate (items &key (key #'identity)) (let ((result (map :default (set)))) (dolist (item items result) (includef (@ result (funcall key item)) item))))(Well, I would probably move result outside the dolist form to make it clearer what the return value is, but let's go with Joe's stylistic choice here.)For those who haven't used FSet: the form (map :default (set)) creates a map whose default is the empty set, meaning that lookups on that map will return the empty set if the key is not in the map. This saves the includef form from having to handle that possibility.My version makes assumptions, it's true, about how you want to collect the items with a given key; it doesn't give you other choices. It could, but what would be the point? It's already using a general set with better time complexity than lists, and saving you from having to write anything like merge-adjoin. The extensible global equivalence relation means you're not going to need to supply a :test either. I think the FSet-enhanced code is cleaner, more elegant, and therefore clearer than the plain-CL version. Don't you agree? Maybe you wouldn't say it's a huge improvement, okay, but it's a small example; in a larger codebase, I would argue, these small improvements add up.* * * * *To summarize: if you just want a library you can call in a few places for specific purposes, Sycamore might work better for you (but think hard if you're writing a comparator for symbols). FSet can certainly be used that way, but it can be much more. If you want to see one way in which Common Lisp can be made into a better language, without giving up anything that we love about it, I urge you to give FSet a try.FSet has changed the way I write Lisp programs. — an FSet user (UPDATE: the magnitude of the performance difference between FSet and Sycamore surprised me, and inspired me to do some profiling of FSet. It turned out that I could get a 20% speedup on one micro-benchmark simply by adding some inline declarations. Mea culpa, mea culpa, mea maxima culpa; I should have done this years ago. With that change, the generic function overhead appears to be the only significant cause of the remaining ~20% performance difference. I tried creating a Sycamore set using a thin wrapper around fset:compare, and the resulting performance was very similar to that of FSet with its new inlines.) Full Article
ca vindarel: Running my 4th Common Lisp script in production© - you can do it too By lisp-journey.gitlab.io Published On :: Tue, 22 Oct 2024 17:19:26 GMT Last week I finished a new service written in Common Lisp. It now runs in production© every mornings, and it expands the set of services I offer to clients. It’s the 4th service of this kind that I developed: - they are not big - but have to be done nonetheless, and the quicker the better (they each amount to 1k to 2k lines of Lisp code), - they are not part of a super advanced domain that requires Common Lisp superpowers - I am the one who benefits from CL during development, - I could have written them in Python - and conversely nothing prevented me from writing them in Common Lisp. So here lies the goal of this post: illustrate that you don’t need to need a super difficult problem to use Common Lisp. This has been asked many times, directly to me or on social media :) At the same time, I want to encourage you to write a little something about how you use Common Lisp in the real world. Sharing creates emulation. Do it! If you don’t have a blog you can simply write in a new GitHub repository or in a Gist and come share on /r/lisp. We don’t care. Thanks <3 We’ll briefly see what my scripts do, what libraries I use, how I deploy them, what I did along the way. Needless to say that I dogfooded my CIEL (beta) meta-library and scripting tool for all those projects. Table of Contents Scripts n°4 and 2 - shaping and sending data - when you can write Lisp on the side SFTP Deploying Script n°2 and simple FTP Scripts n°3 and 1 - complementary web apps Lasting words Links Scripts n°4 and 2 - shaping and sending data - when you can write Lisp on the side My latest script needs to read data from a DB, format what’s necessary according to specifications, and send the result by SFTP. In this case I read a DB that I own, created by a software that I develop and host. So I could have developed this script in the software itself, right? I could have, but I would have been tied to the main project’s versioning scheme, quirks, and deployment. I rather had to write this script on the side. And since it can be done on the side, it can be done in Common Lisp. I have to extract products and their data (price, VAT...), aggregate the numbers for each day, write this to a file, according to a specification. To read the DB, I used cl-dbi. I didn’t format the SQL with SxQL this time like in my web apps (where I use the Mito light ORM), but I wrote SQL directly. I’m spoiled by the Django ORM (which has its idiosyncrasies and shortcomings), so I double checked the different kinds of JOINs and all went well. I had to group rows by some properties, so it was a great time to use serapeum:assort. I left you an example here: https://dev.to/vindarel/common-lisps-group-by-is-serapeumassort-32ma Dates have to be handled in different formats. I used local-time of course, and I still greatly appreciate its lispy formatter syntax: (defun date-yymmddhhnnss (&optional date stream) (local-time:format-timestring stream (or date (local-time:now)) :format '((:year 4) (:month 2) (:day 2) (:hour 2) (:min 2) (:sec 2) ))) the 2 in (:month 2) is to ensure the month is written with 2 digits. Once the file is written, I have to send it to a SFTP server, with the client’s codes. I wrote a profile class to encapsulate the client’s data as well as some functions to read the credentials from either environment variables, the file system, or a lisp variable. I had a top-level profile object for ease of testing, but I made sure that my functions formatting or sending data required a profile parameter. (defun send-stock (profile &key date) ...) (defun write-stock (profile filename) ...) Still nothing surprising, but it’s tempting to only use global parameters for a one-off script. Except the program grows and you pay the mess later. SFTP To send the result through SFTP, I had to make a choice. The SFTP command line doesn’t make it possible to give a password as argument (or via an environment variable, etc). So I use lftp (in Debian repositories) that allows to do that. In the end, we format a command like this: lftp sftp://user:****@host -e "CD I/; put local-file.name; bye" You can format the command string and run it with uiop:run-program: no problem, but I took the opportunity to release another utility: https://github.com/vindarel/lftp-wrapper First, you create a profile object. This one-liner reads the credentials from a lispy file: (defvar profile (make-profile-from-plist (uiop:read-file-form "CREDS.lisp-expr")) then you define the commands you’ll want to run: (defvar command (put :cd "I/" :local-filename "data.csv")) ;; #<PUT cd: "I/", filename: "data.csv" {1007153883}> and finally you call the run method on a profile and a command. Tada. Deploying Build a binary the classic way (it’s all on the Cookbook), send it to your server, run it. (during a testing phase I have deployed “as a script”, from sources, which is a bit quicker to pull changes and try again on the server) Set up a CRON job. No Python virtual env to activate in the CRON environment... Add command line arguments the easy way or with the library of your choice (I like Clingon). Script n°2 and simple FTP My script #2 at the time was similar and simpler. I extract the same products but only take their quantities, and I assemble lines like EXTRACTION STOCK DU 11/04/2008 ....978202019116600010000001387 ....978270730656200040000000991 For this service, we have to send the file to a simple FTP server. We have a pure Lisp library for FTP (and not SFTP) which works very well, cl-ftp. It’s a typical example of an old library that didn’t receive any update in years and so that looks abandoned, that has seldom documentation but whose usage is easy to infer, and that does its job as requested. For example we do this to send a file: (ftp:with-ftp-connection (conn :hostname hostname :username username :password password :passive-ftp-p t) (ftp:store-file conn local-filename filename)) I left you notes about cl-ftp and my SFTP wrapper here: https://dev.to/vindarel/ftp-and-sftp-clients-for-common-lisp-1c3b Scripts n°3 and n°1 - specialized web apps A recent web app that I’m testing with a couple clients extends an existing stock management system. This one also was done in order to avoid a Python monolith. I still needed additions in the Python main software, but this little app can be independent and grow on its own. The app maintains its state and communicates it with a REST API. It gives a web interface to their clients (so my clients’ clients, but not all of them, only the institutional) so that they can: search for products add them in shopping carts validate the cart, which sends the data to the main software and notifies the owner, who will work on them. The peculiarities of this app are that: there is no user login, we use unique URLs with UUIDs in the form: http://command.client.com/admin-E9DFOO82-R2D2-007/list?id=1 I need a bit of file persistence but I didn’t want the rigidity of a database so I am using the clache library. Here also, not a great activity, but it works©. I persist lists and hash-tables. Now that the needs grow and the original scope doesn’t cut it any more, I wonder how long I’ll survive without a DB. Only for its short SQL queries VS lisp code to filter data. I deploy a self-contained binary: code + html templates in the same binary (+ the implementation, the web server, the debugger...), with Systemd. I wrote more on how to ship a standalone binary with templates and static assets with Djula templates here: https://lisp-journey.gitlab.io/blog/lisp-for-the-web-build-standalone-binaries-foreign-libraries-templates-static-assets/ I can connect to the running app with a Swank server to check and set parameters, which is super helpful and harmless. It is possible to reload the whole app from within itself and I did it with no hiccups for a couple years, but it isn’t necessary the most reliable, easiest to set up and fastest method. You can do it, but nobody forces you to do this because you are running CL in production. You can use the industry’s boring and best practices too. Common Lisp doesn’t inforce a “big ball of mud” approach. Develop locally, use Git, use a CI, deploy a binary... Every thing that I learned I documented it along the way in the Cookbook ;) Another app that I’ll mention but about which I also wrote earlier is my first web app. This one is open-source. It still runs :) In this project I had my friend and colleague contribute five lines of Lisp code to add a theme switcher in the backend that would help him do the frontend. He had never written a line of Lisp before. Of course, he did so by looking at my existing code to learn the existing functions at hand, and he could do it because the project was easy to install and run. (defun get-template(template &optional (theme *theme*)) "Loads template from the base templates directory or from the given theme templates directory if it exists." (if (and (str:non-blank-string-p theme) (probe-file (asdf:system-relative-pathname "abstock" (str:concat "src/templates/themes/" theme "/" template)))) ;; then (str:concat "themes/" theme "/" template) ;; else :D template)) He had to annotate the if branches :] This passed the code review. Lasting words The 5th script/app is already on the way, and the next ones are awaiting that I open their .docx specification files. This one was a bit harder but the Lisp side was done sucessfully with the efficient collaboration of another freelance lisper (Kevin to not name him). All those tasks (read a DB, transform data...) are very mundane. They are everywhere. They don’t always need supercharged web framework or integrations. You have plenty of opportunities to make yourself a favor, and use Common Lisp in the wild. Not counting the super-advanced domains where Lisp excels at ;) Links https://lispcookbook.github.io/cl-cookbook/ awesome-cl companies using Common Lisp in production (at least the ones we know) Common Lisp course in videos – it helps me, and you ;) I added 9 videos about CLOS last month, and more are coming. It’s 86 minutes of an efficient code-first approach, out of 7+ hours of total content in the course. After this chapter you know enough to read the sources of the Hunchentoot web server or of the Kandria game. I have done some preliminary Common Lisp exploration prior to this course but had a lot of questions regarding practical use and development workflows. This course was amazing for this! I learned a lot of useful techniques for actually writing the code in Emacs, as well as conversational explanations of concepts that had previously confused me in text-heavy resources. Please keep up the good work and continue with this line of topics, it is well worth the price! [Preston, October of 2024] Full Article
ca ALL SOULS NIGHT Complete! In One Easy-to-Read Location! By floggingbabel.blogspot.com Published On :: Mon, 04 Nov 2024 20:57:00 +0000 .This year's Halloween story, written on leaves and serialized daily on my blog, one sentence at a time, is done. Every day in October, I added to it, it reached its last words on Halloween.Funny thing, though. In conversations with two different friends, I learned that neither of them had realized it was a story. They each thought I was just posting random sentences written on leaves. One of them is an artist, and thinks primarily in visual terms, so I thought at first that was a misunderstanding curious to her. The other, however, is a well-known writer and, what's more important, quite a good one. I have no idea what's going on there.Long story short, at my behest, my son Sean, put all the photos up on Imgur, subtitled. So, if you didn't realize that they told a story... Or if, somehow, you weren't able to hold all the sentences in your head until the story was complete... Now you can find out what was going on. (The stone angels mark the ends of paragraphs.)You can find it by clicking on the link here.* Full Article
ca Drop bears are scary right By satwcomic.com Published On :: Drop bears are scary right View Comic! Full Article
ca The implication of that By satwcomic.com Published On :: The implication of that View Comic! Full Article
ca listen carefully By www.marriedtothesea.com Published On :: Sun, 30 Oct 2022 04:00:00 EDT Today on Married To The Sea: listen carefullyThis RSS feed is brought to you by Drew and Natalie's podcast Garbage Brain University. Our new series Everything Is Real explores the world of cryptids, aliens, quantum physics, the occult, and more. If you use this RSS feed, please consider supporting us by becoming a patron. Patronage includes membership to our private Discord server and other bonus material non-patrons never see! Full Article autogen_comic
ca bro cmon america By www.marriedtothesea.com Published On :: Sun, 11 Dec 2022 04:00:00 EST Today on Married To The Sea: bro cmon americaThis RSS feed is brought to you by Drew and Natalie's podcast Garbage Brain University. Our new series Everything Is Real explores the world of cryptids, aliens, quantum physics, the occult, and more. If you use this RSS feed, please consider supporting us by becoming a patron. Patronage includes membership to our private Discord server and other bonus material non-patrons never see! Full Article autogen_comic
ca hold up american fla By www.marriedtothesea.com Published On :: Sun, 25 Dec 2022 04:00:00 EST Today on Married To The Sea: hold up american flaThis RSS feed is brought to you by Drew and Natalie's podcast Garbage Brain University. Our new series Everything Is Real explores the world of cryptids, aliens, quantum physics, the occult, and more. If you use this RSS feed, please consider supporting us by becoming a patron. Patronage includes membership to our private Discord server and other bonus material non-patrons never see! Full Article autogen_comic
ca borned in the hellscape By www.marriedtothesea.com Published On :: Sun, 15 Jan 2023 04:00:00 EST Today on Married To The Sea: borned in the hellscapeThis RSS feed is brought to you by Drew and Natalie's podcast Garbage Brain University. Our new series Everything Is Real explores the world of cryptids, aliens, quantum physics, the occult, and more. If you use this RSS feed, please consider supporting us by becoming a patron. Patronage includes membership to our private Discord server and other bonus material non-patrons never see! Full Article autogen_comic
ca no cap butcher By www.marriedtothesea.com Published On :: Wed, 19 Apr 2023 04:00:00 EDT Today on Married To The Sea: no cap butcherThis RSS feed is brought to you by Drew and Natalie's podcast Garbage Brain University. Our new series Everything Is Real explores the world of cryptids, aliens, quantum physics, the occult, and more. If you use this RSS feed, please consider supporting us by becoming a patron. Patronage includes membership to our private Discord server and other bonus material non-patrons never see! Full Article autogen_comic
ca america must outlaw children By www.marriedtothesea.com Published On :: Wed, 17 May 2023 04:00:00 EDT Today on Married To The Sea: america must outlaw childrenThis RSS feed is brought to you by Drew and Natalie's podcast Garbage Brain University. Our new series Everything Is Real explores the world of cryptids, aliens, quantum physics, the occult, and more. If you use this RSS feed, please consider supporting us by becoming a patron. Patronage includes membership to our private Discord server and other bonus material non-patrons never see! Full Article autogen_comic
ca duck carrying around By www.marriedtothesea.com Published On :: Wed, 12 Jul 2023 04:00:00 EDT Today on Married To The Sea: duck carrying aroundThis RSS feed is brought to you by Drew and Natalie's podcast Garbage Brain University. Our new series Everything Is Real explores the world of cryptids, aliens, quantum physics, the occult, and more. If you use this RSS feed, please consider supporting us by becoming a patron. Patronage includes membership to our private Discord server and other bonus material non-patrons never see! Full Article autogen_comic
ca if i can be honest cody By www.marriedtothesea.com Published On :: Wed, 14 Feb 2024 04:00:00 EST Today on Married To The Sea: if i can be honest codyThis RSS feed is brought to you by Drew and Natalie's podcast Garbage Brain University. Our new series Everything Is Real explores the world of cryptids, aliens, quantum physics, the occult, and more. If you use this RSS feed, please consider supporting us by becoming a patron. Patronage includes membership to our private Discord server and other bonus material non-patrons never see! Full Article autogen_comic
ca track my candy bar By www.marriedtothesea.com Published On :: Wed, 01 May 2024 04:00:00 EDT Today on Married To The Sea: track my candy barThis RSS feed is brought to you by Drew and Natalie's podcast Garbage Brain University. Our new series Everything Is Real explores the world of cryptids, aliens, quantum physics, the occult, and more. If you use this RSS feed, please consider supporting us by becoming a patron. Patronage includes membership to our private Discord server and other bonus material non-patrons never see! Full Article autogen_comic
ca the catcher By www.marriedtothesea.com Published On :: Wed, 05 Jun 2024 04:00:00 EDT Today on Married To The Sea: the catcherThis RSS feed is brought to you by Drew and Natalie's podcast Garbage Brain University. Our new series Everything Is Real explores the world of cryptids, aliens, quantum physics, the occult, and more. If you use this RSS feed, please consider supporting us by becoming a patron. Patronage includes membership to our private Discord server and other bonus material non-patrons never see! Full Article autogen_comic
ca you cant attack By www.marriedtothesea.com Published On :: Wed, 26 Jun 2024 04:00:00 EDT Today on Married To The Sea: you cant attackThis RSS feed is brought to you by Drew and Natalie's podcast Garbage Brain University. Our new series Everything Is Real explores the world of cryptids, aliens, quantum physics, the occult, and more. If you use this RSS feed, please consider supporting us by becoming a patron. Patronage includes membership to our private Discord server and other bonus material non-patrons never see! Full Article autogen_comic
ca you cannot perceive By www.marriedtothesea.com Published On :: Wed, 07 Aug 2024 04:00:00 EDT Today on Married To The Sea: you cannot perceiveThis RSS feed is brought to you by Drew and Natalie's podcast Garbage Brain University. Our new series Everything Is Real explores the world of cryptids, aliens, quantum physics, the occult, and more. If you use this RSS feed, please consider supporting us by becoming a patron. Patronage includes membership to our private Discord server and other bonus material non-patrons never see! Full Article autogen_comic
ca welcome to the magical lair By www.marriedtothesea.com Published On :: Wed, 04 Sep 2024 04:00:00 EDT Today on Married To The Sea: welcome to the magical lairThis RSS feed is brought to you by Drew and Natalie's podcast Garbage Brain University. Our new series Everything Is Real explores the world of cryptids, aliens, quantum physics, the occult, and more. If you use this RSS feed, please consider supporting us by becoming a patron. Patronage includes membership to our private Discord server and other bonus material non-patrons never see! Full Article autogen_comic
ca Matteo Simoni over geschrapte naaktscènes in ‘Callboys’: “Jan Eelen pakte mijn ‘jos’ en zwierde hem weg” - Het Laatste Nieuws By news.google.com Published On :: Wed, 13 Nov 2024 05:52:00 GMT Matteo Simoni over geschrapte naaktscènes in ‘Callboys’: “Jan Eelen pakte mijn ‘jos’ en zwierde hem weg” Het Laatste Nieuws Full Article
ca Instant Catalog Shopping By cheezburger.com Published On :: Wed, 23 May 2012 06:00:00 -0700 Looking through the phone book to find a furniture store? Stop right there, you're already home. Full Article chair office chair
ca Protecting Itself From The Impending Cactus Attack By cheezburger.com Published On :: Fri, 17 Jun 2011 04:00:00 -0700 He'll just wait this one out. Cacti can't survive without water, right? ~NSHA Full Article
ca Not A Good Thing To See When Entering a Cab By cheezburger.com Published On :: Fri, 18 Nov 2011 14:00:00 -0800 Buses don't have seat belts. I don't see the problem. ~NSHA Full Article cars safety first taxi
ca Catches All The Dripping Crap By cheezburger.com Published On :: Wed, 12 Oct 2011 10:00:00 -0700 Full Article bbq cooking dual use gross toilet
ca When You Can't Stand Up, You Should Probably Quit Drinking By cheezburger.com Published On :: Sat, 03 Dec 2011 06:00:00 -0800 Or at least switch to 12oz cans to delay the inevitable. ~NSHA Full Article beer beer cans construction home improvement
ca Donegal captain on comeback trail By www.bbc.co.uk Published On :: Mon, 09 Apr 2012 20:49:50 GMT Donegal captain Michael Murphy hopes he will be fit to play in next month's Ulster championship preliminary round tie against Cavan. Full Article Northern Ireland
ca Cavan hold on to Ulster U21 title By www.bbc.co.uk Published On :: Wed, 11 Apr 2012 21:36:11 GMT Cavan retain the Ulster Under-21 Football title as they edge out Tyrone 1-10 to 0-10 in Wednesday's final at Brewster Park. Full Article Northern Ireland
ca Andrews resigns from Cavan post By www.bbc.co.uk Published On :: Thu, 12 Apr 2012 15:42:06 GMT Cavan football manager Val Andrews quits after the county's players made it clear that they wanted him to step down. Full Article Northern Ireland
ca McDonnell ends his Armagh career By www.bbc.co.uk Published On :: Fri, 13 Apr 2012 13:23:53 GMT Armagh football suffers another blow as Steven McDonnell announces his retirement from the intercounty game. Full Article Northern Ireland
ca Cavan name Hyland as new manager By www.bbc.co.uk Published On :: Tue, 17 Apr 2012 08:03:00 GMT Terry Hyland and assistant Anthony Forde take over at Cavan after the resignation of Val Andrews. Full Article Northern Ireland
ca Cavan hand debuts to five players By www.bbc.co.uk Published On :: Tue, 15 May 2012 22:00:59 GMT Cavan have handed debuts to five players for Sunday's Ulster senior football championship tie against Donegal. Full Article Northern Ireland
ca Tropicana Field can be fixed by 2026, but Rays must play elsewhere in 2025 By www.foxsports.com Published On :: Tue, 12 Nov 2024 16:42:09 -0500 A detailed assessment of the hurricane damage to Tropicana Field concludes that the home of the Rays is structurally sound and can be repaired in time for the 2026 season, but not by 2025 Opening Day. Full Article mlb
ca Bev Priestman fired as Canada women's soccer coach after Olympic drone scandal By www.foxsports.com Published On :: Tue, 12 Nov 2024 17:55:11 -0500 Canada women's soccer coach Bev Priestman has been fired after an independent review of a drone surveillance scandal at the Paris Olympics Full Article soccer
ca Bears fire OC Shane Waldron, how much of it is on Caleb Williams? | First Things First By www.foxsports.com Published On :: Tue, 12 Nov 2024 23:00:57 +0000 Nick Wright reacts to the Chicago Bears firing OC Shane Waldron, then discusses how much Caleb Williams is to blame for the team's poor season. Full Article nfl
ca Opportunity knocks for USMNT's Ricardo Pepi: 'I'm feeling ready to be the man' By www.foxsports.com Published On :: Tue, 12 Nov 2024 18:29:11 -0500 With several U.S. men's national team strikers out with injuries, 21-year-old Ricardo Pepi has a golden opportunity to prove why he deserves to be Mauricio Pochettino top choice up top. Full Article soccer
ca Kyler Murray, Brock Purdy move up, Caleb Williams on bottom of Mahomes Mountain | First Things First By www.foxsports.com Published On :: Tue, 12 Nov 2024 23:59:55 +0000 Nick Wright reveals who climbs up and down his Week 11 QB Tiers, including Kyler Murray and Brock Purdy, who will face each other in the final game of the regular season with playoffs on the line. Watch as Nick explains why Caleb Williams is not off Mahomes Mountain yet despite a change in the Chicago Bears coaching staff. Full Article nfl
ca Alabama's Ryan Williams on Travis Hunter winning Biletnikoff: 'I can't let him do that' By www.foxsports.com Published On :: Tue, 12 Nov 2024 19:11:36 -0500 In an interview on FOX Sports' "All Facts, No Brakes," Alabama stars Ryan Williams and Jaylen Mbakwe shared why they stayed after Nick Saban's retirement and their thoughts on Travis Hunter. Full Article college-football
ca 2024-25 NBA championship odds: Celtics, Thunder favored; Cavs rising By www.foxsports.com Published On :: Tue, 12 Nov 2024 23:47:40 -0500 A number of contenders are chasing the defending champion Celtics on the oddsboard. Check out where things stand, with insight from Jason McIntyre. Full Article nba
ca What’s Wrong With Today’s Society Captured In 20 Brutally Honest Illustrations By cheezburger.com Published On :: Sat, 24 Aug 2019 19:00:00 -0700 This illustrator, John Holcroft, is genius! check out his website for more. Full Article art social media web comics
ca Woman's Insightful Facebook Post On The College Admission's Scandal Goes Viral By cheezburger.com Published On :: Mon, 26 Aug 2019 07:00:00 -0700 Everyone needs to read this woman's insightful Facebook post amidst the whole college admission's scandal dominating our news feeds. Full Article scandal news facebook social media politics college
ca Donald Trump Cats Aren't Nearly as Scary as the Man Himself By cheezburger.com Published On :: Tue, 27 Aug 2019 19:00:00 -0700 To #TrumpYourCat, you should brush your pet, then form the hair into a "toupee", and place it on top of their head. Oh, and you can thank Donald Purrump for this genius idea!And if you need some more Trump memes <-- those are simply tremendous Full Article donald trump Cats
ca Bill Clinton Cracked a Terrible Dad Joke on Twitter and Nobody Can Handle It By cheezburger.com Published On :: Mon, 02 Sep 2019 07:00:00 -0700 Slick Willy just had to go and crack a dad joke that simultaneously dug on President Trump and kept the pun game strong, didn't he? Naturally, people were highly entertained and vaguely irritated. Full Article twitter politics bill clinton puns
ca Photoshop Battle Reaches Logical Conclusion and Goes to Town on Donald Trump's Giant Butt By cheezburger.com Published On :: Tue, 15 Oct 2019 07:00:00 -0700 Full Article donald trump photoshop battle trump memes
ca Fourteen Joe Biden Memes For The Political Satirists By cheezburger.com Published On :: Fri, 06 Dec 2019 19:00:00 -0800 Look, we definitely don't want to hate on any particular candidate or take sides in this presidential election cycle, but Joe Biden has just been so meme-able this election season that we really had to take advantage of the material handed to us. We think that Biden supporters and haters alike will be able to laugh at these. Full Article 2020 president Democrat presidential election barack obama election joe biden politics
ca Iowa Caucus's Delayed Results Have Churned Up Some Anxious Reaction Memes By cheezburger.com Published On :: Tue, 04 Feb 2020 16:00:00 -0800 Last night the 2020 Iowa Democratic Caucus stirred up quite the controversy when it was announced that the results would be delayed due to "inconsistencies" in a new app meant to speed up the reporting results of the caucus. Ironic, to say the least. But hang tight, because they're set to be released at 5 pm Eastern Time.Ahead of the results being released, Pete Buttigieg gave what appeared to be a victory speech last night to the confusion of many. The bizarre move has lead many to believe that the system may have been rigged in Mayor Pete's favor.As always, we have to give the disclaimer that we're not picking sides; we're merely reporting on what the internet has been saying, so scroll down to see some of our favorite reaction memes and tweets while we all wait impatiently for the results. Full Article twitter iowa caucus 2020 bernie sanders funny memes presidential election Iowa reaction memes politics
ca The Shadow Team Gets Roasted For Being Shady During The Iowa Caucus By cheezburger.com Published On :: Thu, 06 Feb 2020 07:00:00 -0800 Meet the Shadow team in charge of developing an app meant to help tally the votes from the Iowa caucus on Monday night. The purpose of the app was to help the process run more smoothly, but in the end it proved to be a complete and utter disaster, as precinct chairs supposedly couldn't get the app to actually work, in turn causing a delay in reporting.The delay was blamed on "inconsistencies" in reporting, but honestly, who really knows what the truth is.The team is reportedly run by people who worked on Hilary Clinton's presidential campaign in 2016. Additionally, 2020 candidate Pete Buttigieg's campaign paid the tech firm over $40,000 in 2019 leading many to suspect foul play.But this is America, and we can't possibly have problems with corruption, right?As of right now, we still don't have all the results from the caucus, so while you continue to anxiously refresh the New York Times page, have some hot Twitter takes on the people (rats) behind Shadow, Inc. Full Article shady political shadow funny memes presidential election Iowa reaction memes corruption
ca 'Nancy Pelosi Ripping Paper' Proves The Political Memes Aren't Going Anywhere By cheezburger.com Published On :: Thu, 13 Feb 2020 07:00:00 -0800 While we would love for election season to be over right about now, we've gotta admit that the resulting political memes have been top-notch. The internet has been loving this particular dank meme, which shows Speaker of the House Nancy Pelosi ripping up Donald Trump's State of the Union speech. Full Article politicians donald trump funny memes Nancy Pelosi political memes dank memes ignore trending politics
ca Joe Biden Gets Trolled With His Cringey 'I'm On Team Joe' Campaign By cheezburger.com Published On :: Tue, 21 Apr 2020 07:00:00 -0700 Poor ol' Joe Biden has been the subject of many memes in this election cycle. Whether you love him or hate him, you have to admit that they've been pretty amusing. This particular meme mocks a campaign avatar where one can insert their image next to text that says "I'm on team Joe!" It's moderately cringey to say the least, but cringey makes for the best meme material. Full Article campaign 2020 trolling cringe president america roast election joe biden politics
ca 'Far-Left Or Far-Right' Memes Poke Fun At Both Sides Of The Political Spectrum By cheezburger.com Published On :: Sat, 22 Aug 2020 07:00:00 -0700 Y'all, beware because this is the dumbest sh*tpost we've seen in a while. And the best part of it? People on both sides of the political spectrum can enjoy it. Click here to see more examples and more info! Full Article stupid memes political right wing funny memes dank memes trending memes shitposts trending politics
ca New Zealand Twitch Streamer Casually Gets a Visit From a World Leader By cheezburger.com Published On :: Thu, 10 Sep 2020 07:00:00 -0700 Jacinda Ardern is the prime minister of New Zealand. She decided to drop in and catch up with well known Twitch streamer, Broxh. What ensues is nothing short of a magical, wholesome interaction. Full Article awesome video games