ng War of the Roses Basing By iron-mitten.blogspot.com Published On :: Mon, 11 Nov 2024 21:44:00 +0000 The men of Lord Hastings' Retinue struggle through the mud of Tewkesbury.Vallejo thick mud was the perfect solution for the grim battle conditions of the war. Adding snow to this layer would look fantastic but would rather limit the battles. I think a generic muddy field is a good all rounder for this brutal conflict.I broke my usual 69x60mm basing after seeing a friend's and decided to copy it. Partly because the cheapness of plastics allows for bigger units. I also have quite a few old Perry miniatures from the old days of Foundry. These old lead figures are great for sprinkling amongst the ranks to add character. The above photo shows the effect of these old sculpts. They have to be mounted on plastic bases etc to bring them up to the height of the newer plastics. The mud is great for covering these and making everyone level.As the Vallejo mud was drying, I cut up some thin brush bristles and pushed them into the mixture. These make for great arrows and really helps to give the bases a War of the Roses look and feel.The mud is also great for splashing up the legs and clothes of the soldiers. It's quite subtle but helps to set them in the scene.The mud isn't quite dry yet and there are a couple more things to do before they are finished. Layers of 'Rutted field' from Luke's APS should look good over the mud, as well as patches of static grass. Also the arrows will need some white goose fletching on them. These new bases are 80x60mm and give a more realistic look to a unit. I got a bit carried away with these bases and they grew to 10 men per base.The figures In these units are a mix of old Foundry, Perry's plastics and Forlorn Hope metal figures. They all mix together well and make for characterful formations. Full Article War of the Roses
ng Eugene Zaikonnikov: Breaking the Kernighan's Law By blog.funcall.org Published On :: Sun, 15 Sep 2024 15:00:00 GMT "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.." — Brian W. Kernighan. I'm a sucker for sage advice much as anyone else, and Kernighan is certainly right on money in the epigraph. Alas there comes a time in programmer's career when you just end up there despite the warning. It could be that you were indeed too clever for your own good, or maybe the code isn't quite yours anymore after each of your colleague's take on it over the years. Or just sometimes, the problem is indeed so hard that it strains your capacity as a coder. It would usually start with a reasonable idea made into first iteration code. The solution looks fundamentally sound but then as you explore the problem space further it begins to seep nuance, either as manifestation of some real world complexity or your lack of foresight. When I run into this my first instinct is to instrument the code. If the problem is formidable you got to respect it: flailing around blindly modifying things or ugh, doing a rewrite at this stage is almost guaranteed to be a waste of time. It helps to find a promising spot, chisel it, gain a foothold in the problem, and repeat until you crack it. Comfortable debugging tools here can really help to erode the original Kernighan coefficient from 2 to maybe 1.6 or 1.4 where you can still have a chance. Lisp users are fortunate with the options of interactive debugging, and one facility I reach often for is the plain BREAK. It's easy enough to wrap it into a conditional for particular matches you want to debug. However sometimes you want it to trigger after a particular sequence of events across different positions in code has taken place. While still doable it quickly becomes cumbersome and this state machine starts to occupy too much mental space which is already scarce. So one day, partly as a displacement activity from being intimidated by a Really Hard Problem I wrote down my debugging patterns as a handful of macros. Enter BRAKE. Its features reflect my personal preferences so are not necessarily your cup of tea but it could be a starting point to explore in this direction. Things it can do: act as a simple BREAK with no arguments (duh) wrap an s-expression, passing through its values upon continuing trigger sequentially based on the specified position for a common tag allow for marks that don't trigger the break but mark the position as reached provide conditional versions for the expressions above print traces of tagged breakpoints/marks If you compile functions with debug on you hopefully should be able to see the wrapped sexpr's result values. (use-package '(brake)) (defun fizzbuzz () (loop for n from 100 downto 0 for fizz = (zerop (mod n 3)) for buzz = (zerop (mod n 5)) do (format t "~a " (if (not (or fizz buzz)) (format nil "~d" n) (brake-when (= n 0) (concatenate 'string (if fizz "Fizz" "") (if buzz "Buzz" ""))))))) These macros try to detect common cases for tagged sequences being either aborted via break or completed to the last step, resetting them after to the initial state. However it is possible for a sequence to end up "abandoned", which can be cleaned up by a manual command. Say in the example below we want to break when the two first branches were triggered in a specific order. The sequence of 1, 3, 4 will reinitialize once the state 4 is reached, allowing to trigger continuously. At the same time if we blow our stack it should reset to initial when aborting. (defun ack (m n) (cond ((zerop m) (mark :ack 3 (1+ n))) ((zerop n) (mark :ack 1 (ack (1- m) 1))) (t (brake :ack 4 (ack (1- m) (ack m (1- n))))))) In addition there are a few utility functions to report on the state of brakepoints, enable or disable brakes based on tags and turn tracing on or off. Tracing isn't meant to replace the semantics of TRACE but to provide a souped up version of debug by print statements everyone loves. CL-USER> (report-brakes) Tag :M is DISABLED, traced, with 3 defined steps, current state is initial Tag :F is DISABLED with 2 defined steps, current state is 0 Tag :ACK is ENABLED with 3 defined steps, current state is initial Disabling breakpoints without recompilation is really handy and something I find using all the time. The ability to wrap a sexpr was often sorely missed when using BREAK in constructs without implicit body. Sequencing across threads is sketchy as the code isn't guarded but in many cases it can work, and the appeal of it in debugging races is clear. One of those days I hope to make it more robust while avoiding potential deadlocks but it isn't there yet. Where it already shines tho is in debugging complex iterations, mutually recursive functions and state machines. Full Article
ng Patrick Stein: Ray Tracing In One Weekend (in Lisp, and n-dimenions) By nklein.com Published On :: Fri, 27 Sep 2024 02:37:31 GMT Earlier this year, I started working through the online book Ray Tracing In One Weekend (Book 1). I have been following along with it in Common Lisp, and I have been extending it all from 3-dimensional to n-dimensional. I reproduced 4-dimensional versions of all of the book images which you can see on my weekend-raytracer github page. Here is the final image. This is a 250-samples-per-pixel, 640x360x10 image plane of three large hyperspheres (one mirrored, one diffuse, one glass) atop a very large, diffuse hypersphere. Also atop this very large hypersphere are a bunch of smaller hyperspheres of varying colors and materials. The image is rendered with some defocus-blur. Final image of 4-dimensional scene Caveat: This depends on a patched version of the policy-cond library that is not in the current Quicklisp distribution but should be in the next. Full Article
ng Joe Marshall: Lisp vs. golang By funcall.blogspot.com Published On :: Thu, 17 Oct 2024 02:17:00 GMT It's no secret that I'm an aficionado of Lisp. It's my go to language, especially when I don't know what I'm doing. I call it research and prototyping, but it's really just playing around until something works. We had a need for some auditing of some of our databases at work. They ought to agree with each other and with what GitHub and CircleCI think. It took a couple of weeks part time to prototype a solution in Common Lisp. It showed that the databases were in 99% agreement and found the few points of disagreement and anomalies that we ought to fix or look out for. I want to integrate this information into a dashboard on one of our tools. I prototyped this by spinning up a Common Lisp microservice that returns the information in JSON format. But management prefers that new services are written in golang. It would be easier for me to rewrite the service in golang than to try to persuade others to use Common Lisp. It also gives me the opportunity to compare the two languages head to head on a real world problem. No, this is not a fair comparison. When I wrote the Lisp code I was exploring the problem space and prototyping. I'm much more experienced with Lisp than with golang. The golang version has the advantage that I know what I want to do and how to do it. In theory, I can just translate the Common Lisp code into golang. But then again, this is a “second system” which is not a prototype and has slightly larger scope and fuller requirements. So this cannot be a true head to head comparison. The first point of comparison is macros (or lack thereof). I generally don't use a lot of macros in Common Lisp, but they come in handy when I do use them. One macro I wrote is called audit-step, which you can wrap around any expresion and it prints out a message before and after the expression is evaluated. The steps are numbered in sequence, and nested steps get nested numbers (like step 2.3.1). If you wrap the major function bodies with this macro, you get a nice trace of the call sequence in the log. Golang doesn't have macros, but it has first class functions. It's easy enough to write a function that takes a function as an argument and wraps it to output the trace messages. In fact, the macro version in Common Lisp just rewrites the form into such a function call. But the macro version hides a level of indentation and a lambda. In golang, my major functions all start with func MajorFunction (args) int { return AuditStep("MajorFunction", "aux message", func() int { // body of MajorFunction // Actual code goes here. }) } The bodies of all my major functions are indented by 16 spaces, which is a little much. I like higher order functions. I can write one higher order function and parameterize it with functions that handle the specific cases. In my auditing code, one such workhorse function is called collate. It takes a list of objects and creates a table that maps values to all objects in the list that contain that value. To give an example, imaging you have a list of objects that all have a field called foo. The foo field is a string. The collate function can return a table that maps strings to all objects that have that string in the foo field. collate is very general. It takes a list of objects and four keyword arguments. The :key argument is a function that extracts the value to collate on. The :test argument is a function that compares two keys (it defaults to eql if not specified). The :merger argument is a function to add the mapped object to its appropriate collection in the table (it defaults to adjoin). The :default argument specifies the initial value of a collection in the table (it defaults to nil). The :merger function is the most interesting. It takes the key and the object and the current value of the table at that key. It returns the new value of the table at that key. The default merger function is adjoin, which adds the object to the collection at the key if it is not already there. But you can specify a different merger function. For example, if you want to count the number of objects at each key, you can specify a merger function that increments a counter. The functional arguments to the collate function are often the results of other higher order functions. For example, the :key argument is often the result of composing selector functions. The :merger argument is often the result of composing a binary merge function with a unary transformer function. The transformer function is often the result of composing a number of primitive selectors and transformers. In Common Lisp, it is quite easy to write these higher order functions. We can compose two unary functions with the compose2 function: (defun compose2 (f g) (lambda (x) (funcall f (funcall g x))) and then compose as many functions as we like by fold-left of compose2 starting with the identity function: (defun compose (&rest fs) (fold-left #'compose2 #'identity fs))We can compose a binary function with a unary function in three ways: we can pipe the output of the binary function into the unary function, or we can pipe the output of the unary function into one or the other of the inputs of the binary function. (defun binary-compose-output (f g) (lambda (x y) (funcall f (funcall g x y)))) (defun binary-compose-left (f g) (lambda (x y) (funcall f (funcall g x) y))) (defun binary-compose-right (f g) (lambda (x y) (funcall f x (funcall g y)))) The collate function can now assume that a lot of the work is done by the :key and :merger functions that are passed in. It simply builds a hash table and fills it: (defun collate (item &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))) So suppose, for example, that we have a list of records. Each record is a three element list. The third element is a struct that contains a string. We want a table mapping strings to the two element lists you get when you strip out the struct. This is easily done with collate: (collate records :key (compose #'get-string #'third) :test #'equal ; or #'string= if you prefer :merger (binary-compose-right (merge-adjoin #'equal) #'butlast)) The audit code reads lists of records from the database and from GitHub and from CircleCI and uses collate to build hash tables we can use to quickly walk and validate the data. Translating this into golang isn't quite so easy. Golang has first class function, true, but golang is a statically typed language. This causes two problems. First, the signature of the higher order functions includes the types of the arguments and the return value. This means you cannot just slap on the lambda symbol, you have to annotate each argument and the return value. This is far more verbose. Second, higher order functions map onto parameterized (generic) types. Generic type systems come with their own little constraint language so that the computer can figure out what concrete types can correctly match the generic types. This makes higher order functions fairly unweildy. Consider compose2. The functions f and g each have an input and output type, but the output type of g is the input type of f so only three types are involved func Compose2[T any, U any, V any](f func(U) V, g func(T) U) func(T) V { return func(x T) V { return f(g(x)) } } If want to compose three functions, we can write this: func Compose3[T any, U any, V any, W any](f func(V) W, g func(U) V, h func(T) U) func(T) W { return func(x T) W { return f(g(h(x))) } } The generic type specifiers take up as much space as the code itself. I don't see a way to write an n-ary compose function. It would have to be dynamically parameterized by the intermediate types of all the functions it was composing. For the collate function, we can write this: func Collate[R any, K comparable, V any]( list *Cons[R], keyfunc func(R) K, merger func(V, R) V, defaultValue V) map[K]V { answer := make(map[K]V) for list != nil { key := keyfunc(list.Car) probe, ok := answer[key] if !ok { probe = defaultValue } answer[key] = merger(probe, list.Car) list = list.Cdr } return answer } We have three types to parameterize over: the type of the list elements (i.e. the record type) R, the type of the key K, and the type of the value V. The key type is needs to be constrained to be a valid key in a map, so we use the comparable constraint. Now that we have the types, we can annotate the arguments and return value. The list we are collating is a list of R elements. The key function takes an R and returns a K. The merger takes an existing value of type V and the record of type R and returns a new value of type V. The magic of type inference means that I do not have to annotate all the variables in the body of the function, but the compiler cannot read my mind and infer the types of the arguments and return value. Golang forces you to think about the types of arguments and return values at every step of the way. Yes, one should be aware of what types are being passed around, but it is a burden to have to formally specify them at every step. I could write the Common Lisp code without worrying too much about types. Of couse the types would have to be consistent at runtime, but I could write the code just by considering what was connected to what. In golang, the types are in your face at every function definition. You not only have to think about what is connected to what, you have to think about what sort of thing is passed through the connection. I'm sure that many would argue that type safety is worth the trouble of annotation. I don't want to argue that it isn't. But the type system is cumbersome, awkward, and unweildy, especially when you are trying to write higher order functions. It is taking me longer to write the golang version of the audit service than it did to write the Common Lisp version. There are several reasons. First, I am more experienced with Common Lisp than golang, so the right Common Lisp idioms just come to mind. I have to look up many of the golang idioms. Second, the golang code is trying to do more than the Common Lisp code. But third, golang itself introduces more friction than Common Lisp. Programs have to do more than express the algorithm, they have to satisfy the type system. There are more points of comparison between the two languages. When I get frustrated enough, I'll probably write another post. Full Article
ng 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
ng "Dragons of Paris" and the Role of Time in the Mongolian Wizard Series By floggingbabel.blogspot.com Published On :: Fri, 18 Oct 2024 23:20:00 +0000 .The kind people at Reactor Magazine have posted my two latest Mongolian Wizard stories, one yesterday and the other today. Thursday's "Halcyon Afternoon" took place during a rare moment of peace for Franz-Karl Ritter. But in today's "Dragons of Paris," it's warfare as usual. Time has always been a little tricky in this series. The first story was clearly set in the Nineteenth Century but, though only a few years have passed, the series has now reached what is recognizably World War I. Mostly this occurred for reasons explained in "The Phantom in the Maze" and "Murder in the Spook House." (And which I anticipate giving me increasing difficulties in writing the next ten stories.) But also, in a more literary background sense, I wanted to cover the transition from a way of life now alien to us to something more modern, if not contemporary. So time may get a bit more slippery in the future. That's if, of course, the stories go in the direction I intend. Sometimes the fiction has its own ideas where it wants to go and the author can only follow along meekly in its wake.You can read the story here. Or just go to the ezine and poke around. It's a good place to poke around.Above: The illustration is by Dave Palumbo. I'm grateful for that.* Full Article
ng Zoo must be confusing By satwcomic.com Published On :: Zoo must be confusing View Comic! Full Article
ng Why Virat Kohli, Jasprit Bumrah were missing from Perth nets; India ramp up privacy amid Manchester United-like security - Hindustan Times By news.google.com Published On :: Wed, 13 Nov 2024 04:53:31 GMT Why Virat Kohli, Jasprit Bumrah were missing from Perth nets; India ramp up privacy amid Manchester United-like security Hindustan TimesVirat Kohli in focus: Intense net session begins for upcoming Test series against Australia The Times of IndiaVirat Kohli in Australia for BGT: A timeline India TodayBlack veil of secrecy: India begin training in privacy in Perth ESPNcricinfoIndia to play intra-squad warm-up match at WACA on Friday ahead of Australia Tests but BCCI denies public viewing Hindustan Times Full Article
ng Kanguva Box Office Day 1 Advance Sales: 568% Higher Than Suriya’s Last Release ET In USA, Selling 5,460 Tix/Hr In India! - Koimoi By news.google.com Published On :: Tue, 12 Nov 2024 12:24:51 GMT Kanguva Box Office Day 1 Advance Sales: 568% Higher Than Suriya’s Last Release ET In USA, Selling 5,460 Tix/Hr In India! KoimoiKanguva morning show: Tamilians miffed as other states get earlier shows for Suriya, Bobby Deol's film Hindustan Times5 Reasons To Watch Suriya and Bobby Deol Starrer 'Kanguva' In Theatres Zee NewsKanguva’s second half to be very crisp 123teluguKanguva advance booking: Suriya's film earns over Rs 4 crore ahead of release India Today Full Article
ng 3 Children, 3 Women Missing After 10 Suspected Kuki Militants Killed In Encounter In Manipur's Jiribam - NDTV By news.google.com Published On :: Tue, 12 Nov 2024 11:11:01 GMT 3 Children, 3 Women Missing After 10 Suspected Kuki Militants Killed In Encounter In Manipur's Jiribam NDTVManipur on boil: 2 more bodies found, 6 missing The Times of IndiaAdditional paramilitary forces rushed to Manipur amid spike in ethnic violence Hindustan TimesLetters to The Editor — November 13, 2024 The Hindu2 men found dead, 6 of family missing day after militants killed in Manipur India Today Full Article
ng Chennai doctor stabbed by assilants posing as patients - The Times of India By news.google.com Published On :: Wed, 13 Nov 2024 06:21:00 GMT Chennai doctor stabbed by assilants posing as patients The Times of IndiaChennai Doctor Stabbed 7 Times By Son Of Woman Who Had Cancer NDTVDoctor stabbed by patient’s attendant at Kalaignar Centenary Super Speciality Hospital in Chennai The HinduPatient's son stabs doctor 7 times in Chennai hospital, arrested India TodayDoctor stabbed multiple times in Tamil Nadu government hospital by patient’s relative Deccan Herald Full Article
ng congratulations borned By www.marriedtothesea.com Published On :: Thu, 17 Nov 2022 04:00:00 EST Today on Married To The Sea: congratulations bornedThis 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
ng shiny gengar By www.marriedtothesea.com Published On :: Sun, 04 Dec 2022 04:00:00 EST Today on Married To The Sea: shiny gengarThis 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
ng hating things By www.marriedtothesea.com Published On :: Thu, 15 Dec 2022 04:00:00 EST Today on Married To The Sea: hating thingsThis 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
ng fishing is borin By www.marriedtothesea.com Published On :: Sun, 29 Jan 2023 04:00:00 EST Today on Married To The Sea: fishing is borinThis 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
ng stop buying things By www.marriedtothesea.com Published On :: Wed, 12 Apr 2023 04:00:00 EDT Today on Married To The Sea: stop buying thingsThis 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
ng everything all right By www.marriedtothesea.com Published On :: Wed, 14 Jun 2023 04:00:00 EDT Today on Married To The Sea: everything all rightThis 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
ng painting so fast and sloppy By www.marriedtothesea.com Published On :: Wed, 28 Jun 2023 04:00:00 EDT Today on Married To The Sea: painting so fast and sloppyThis 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
ng 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
ng go forth strong man By www.marriedtothesea.com Published On :: Wed, 26 Jul 2023 04:00:00 EDT Today on Married To The Sea: go forth strong manThis 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
ng running this show By www.marriedtothesea.com Published On :: Wed, 06 Dec 2023 04:00:00 EST Today on Married To The Sea: running this showThis 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
ng stop freaking out By www.marriedtothesea.com Published On :: Wed, 17 Jan 2024 04:00:00 EST Today on Married To The Sea: stop freaking outThis 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
ng stop whining and By www.marriedtothesea.com Published On :: Wed, 28 Feb 2024 04:00:00 EST Today on Married To The Sea: stop whining andThis 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
ng traveling across the ocean By www.marriedtothesea.com Published On :: Wed, 24 Jul 2024 04:00:00 EDT Today on Married To The Sea: traveling across the oceanThis 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
ng yee haw pecking order By www.marriedtothesea.com Published On :: Wed, 28 Aug 2024 04:00:00 EDT Today on Married To The Sea: yee haw pecking orderThis 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
ng Een maand niet klaarkomen, is dat écht gezond: uroloog over de ‘No Nut November’-challenge - Provinciale Zeeuwse Courant By news.google.com Published On :: Mon, 11 Nov 2024 17:14:00 GMT Een maand niet klaarkomen, is dat écht gezond: uroloog over de ‘No Nut November’-challenge Provinciale Zeeuwse CourantHele verhaal bekijken via Google Nieuws Full Article
ng Webinar: nieuw HPV-screeningsbeleid en -vaccinatie - 19 november 2024 - Medi-Sfeer By news.google.com Published On :: Wed, 13 Nov 2024 08:08:57 GMT Webinar: nieuw HPV-screeningsbeleid en -vaccinatie - 19 november 2024 Medi-Sfeer Full Article
ng Heeft nieuwe eigenaar van SK Deinze centen? Spelers zijn ongerust en verschenen niet op het oefenveld - Het Laatste Nieuws By news.google.com Published On :: Tue, 12 Nov 2024 16:21:00 GMT Heeft nieuwe eigenaar van SK Deinze centen? Spelers zijn ongerust en verschenen niet op het oefenveld Het Laatste NieuwsValse (door)start in Deinze: club krijgt puntenaftrek en ontkent "staking" van de spelers sporza.beSpelers Deinze staken omdat nieuwe overnemer niet betaalt, puntenaftrek dreigt Het Laatste NieuwsEven hol als hoopvol: het overnamedossier van Deinze doorgelicht De StandaardDeinze reageert misnoegd na puntenaftrek en is scherp voor media: “Fake news om de club te destabiliseren” Het Nieuwsblad Full Article
ng Een Franse "alleskunner" boezemt iedereen angst in op Gentse Zesdaagse: "Zelfs als renner kijk je naar hem op" - sporza.be By news.google.com Published On :: Wed, 13 Nov 2024 07:12:00 GMT Een Franse "alleskunner" boezemt iedereen angst in op Gentse Zesdaagse: "Zelfs als renner kijk je naar hem op" sporza.beDe Vylder en Ghys sluiten als leiders de eerste dag van Gentse Zesdaagse af sporza.beMinder volks, minder spektakel, maar sneller dan ooit: hoe de Zesdaagse van Gent echt specialistenwerk is geworden De StandaardLindsay De Vylder, wereldkampioen op ontdekkingstocht: “Ik ga dringend beter moeten leren onderhandelen” Het Laatste NieuwsKoen Crucke geeft al zingend het startschot van 6 dagen volksfeest en wielerspektakel in ’t Kuipke Het Nieuwsblad Full Article
ng Gladiator 2: De langstverwachte film van het jaar is een mission impossible - VRT.be By news.google.com Published On :: Wed, 13 Nov 2024 04:30:06 GMT Gladiator 2: De langstverwachte film van het jaar is een mission impossible VRT.beHele verhaal bekijken via Google Nieuws Full Article
ng “‘Dr. Vogel’ was geen dokter”: expert over zin en onzin van homeopathie en kruidengeneeskunde - Het Laatste Nieuws By news.google.com Published On :: Tue, 12 Nov 2024 16:00:00 GMT “‘Dr. Vogel’ was geen dokter”: expert over zin en onzin van homeopathie en kruidengeneeskunde Het Laatste Nieuws Full Article
ng “Absurde toestanden” bij verplichting zonnepanelen voor grote verbruikers: “Zelfs bedrijf dat niets meer produceert, moet er leggen” - Het Laatste Nieuws By news.google.com Published On :: Wed, 13 Nov 2024 05:00:00 GMT “Absurde toestanden” bij verplichting zonnepanelen voor grote verbruikers: “Zelfs bedrijf dat niets meer produceert, moet er leggen” Het Laatste Nieuws Full Article
ng Prijsstijging energie-eiland voor kust kan huishoudens jaarlijks "20 euro" extra kosten - VRT.be By news.google.com Published On :: Tue, 12 Nov 2024 16:50:46 GMT Prijsstijging energie-eiland voor kust kan huishoudens jaarlijks "20 euro" extra kosten VRT.beKosten energie-eiland in Noordzee lopen op tot 630 miljoen euro per jaar De TijdKamerleden willen uitstel van miljardencontract voor energie-eiland De StandaardKamerleden willen uitstel voor toewijzing duur contract energie-eiland Knack.beVan der Straeten: “Voorbarig om stekker uit energie-eiland te trekken” Het Belang van Limburg Full Article
ng Man die slapende dakloze in Rotterdam ernstig verwondde met steen mogelijk aangehouden in Franse stad Toulon - VRT.be By news.google.com Published On :: Wed, 13 Nov 2024 05:25:27 GMT Man die slapende dakloze in Rotterdam ernstig verwondde met steen mogelijk aangehouden in Franse stad Toulon VRT.beMan die zware tegel op hoofd van slapende dakloze gooide mogelijk gearresteerd in Frankrijk Het Laatste NieuwsVerdachte (32) van aanval met betonblok op slapende dakloze in Rotterdam opgepakt in Franse stad Toulon Het NieuwsbladPoging moord op slapende, dakloze man Opsporing VerzochtArrestatie in Frankrijk na dood dakloze, link met Rotterdamse zaak onderzocht NOS Full Article
ng Kinderopvang wordt duurder in Bilzen-Hoeselt: “Daarvoor zijn we geen fusie aangegaan” - Het Belang van Limburg By news.google.com Published On :: Mon, 11 Nov 2024 15:51:11 GMT Kinderopvang wordt duurder in Bilzen-Hoeselt: “Daarvoor zijn we geen fusie aangegaan” Het Belang van LimburgHele verhaal bekijken via Google Nieuws Full Article
ng Grote verkeershinder verwacht in Brussel door betoging boeren - De Standaard By news.google.com Published On :: Wed, 13 Nov 2024 05:59:23 GMT Grote verkeershinder verwacht in Brussel door betoging boeren De StandaardVandaag en morgen grote verkeershinder verwacht in Brussel door betoging boeren en taxichauffeurs Het NieuwsbladBetogingen én verkeersellende in Brussel verwacht morgen en donderdag, ook gevolgen voor wie naar Rode Duivels gaat Het Laatste Nieuws2 dagen hinder in Brussel door boerenprotest en taxiprotest VRT.bePolitie verwacht grote verkeershinder door betoging boeren en taxi's BRUZZ Full Article
ng Overleden vrouw aangetroffen op oprit van woning in Zwijndrecht, parket opent onderzoek - VRT.be By news.google.com Published On :: Wed, 13 Nov 2024 08:02:08 GMT Overleden vrouw aangetroffen op oprit van woning in Zwijndrecht, parket opent onderzoek VRT.beVrouw vermoord op oprit van woning in Zwijndrecht bij Antwerpen: schedel van slachtoffer werd ingeslagen Het Laatste NieuwsVrouw dood aangetroffen op oprit van een woning in Zwijndrecht, parket start onderzoek naar gewelddadig overlijden Het NieuwsbladVermoorde vrouw aangetroffen voor woning in Zwijndrecht: parket start onderzoek Gazet van AntwerpenLevenloos lichaam van vrouw gevonden op oprit van woning in Zwijndrecht: schedel van slachtoffer werd ingeslagen Het Laatste Nieuws Full Article
ng Izegem zet verder koers richting coalitie met Vlaams Belang: “We hebben hier een omgekeerd cordon sanitaire” - Gazet van Antwerpen By news.google.com Published On :: Tue, 12 Nov 2024 15:12:44 GMT Izegem zet verder koers richting coalitie met Vlaams Belang: “We hebben hier een omgekeerd cordon sanitaire” Gazet van AntwerpenHele verhaal bekijken via Google Nieuws Full Article
ng Revolving Shotgun By cheezburger.com Published On :: Fri, 25 Feb 2011 09:40:00 -0800 Full Article DIY guns Hall of Fame overkill wtf
ng The Built-In Air Conditioning Just Wasn't Effective By cheezburger.com Published On :: Mon, 09 Sep 2013 04:00:00 -0700 Especially after someone put that giant wooden thing on top. Full Article van funny air conditioner there I fixed it
ng A Lesson in Moving By cheezburger.com Published On :: Tue, 31 Jul 2012 06:00:00 -0700 When the thing you're trying to move is bigger than the car you're trying to move it with, you might run into a few problems! ... and by "problems," I mean "other cars." Full Article car fail couch moving
ng 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
ng Recycling At Its Best By cheezburger.com Published On :: Wed, 26 Oct 2011 08:00:00 -0700 Full Article dual use going green nature saw tools
ng How to Avoid a Ticket for Parking in the Grass By cheezburger.com Published On :: Tue, 11 Jun 2013 08:00:00 -0700 Full Article trailers funny parking
ng 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
ng The Hardest Part About Moving into 2014 By cheezburger.com Published On :: Tue, 31 Dec 2013 10:00:00 -0800 Prepare to make this fix a lot. Full Article spelling g rated
ng Racing Stripes By cheezburger.com Published On :: Wed, 14 Mar 2012 06:00:00 -0700 You're doing them wrong. Full Article car door masking tape plastic plastic bag
ng 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
ng 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