Newer posts are loading.
You are at the newest post.
Click here to check if anything new just came in.
Click here to check if anything new just came in.
April 22 2012
Roman Numerals Kata revisited
More than a year ago I wrote a post and recorded a video about the Roman Numerals Kata. To be honest I haven't been doing many katas lately but as I've had this weekend for myself, I went back and revisited the Kata, in JavaScript this time. And also recorded a video:
I am not really sure about how my coding has changed in the last year. There's no doubt that JavaScript uses a very different philosophy to Java, and I'm a lot more confident writing JavaScript now, but other than that, not much seems to have changed.
The only common pattern I see is that TDD is really helpful. In both screencasts you can see me doing something wrong (mixing up symbols last year, and forgetting to auto-call the function this year, for instance) and only by having tests failing I realised that they were problems. It really saves you time if you don't have to deploy your code and play around with it to see what you've broken. Also, being the first user of your own code allows you to put a bit of thought in your design.
In this version I was not interested about recursion or Maps in Java, and I decided to skip the outer BDD layer (although Jasmine would allow me to do so). What was more interesting was to go through the different Module pattern incarnations in JavaScript, and using jasmine-node from the command line, although the --autotest option keeps crashing on me so I cannot use it! I am not the biggest fan of autotest utilities but for these kind of deliberate practice they are actually quite nice.
I am not really sure about how my coding has changed in the last year. There's no doubt that JavaScript uses a very different philosophy to Java, and I'm a lot more confident writing JavaScript now, but other than that, not much seems to have changed.
The only common pattern I see is that TDD is really helpful. In both screencasts you can see me doing something wrong (mixing up symbols last year, and forgetting to auto-call the function this year, for instance) and only by having tests failing I realised that they were problems. It really saves you time if you don't have to deploy your code and play around with it to see what you've broken. Also, being the first user of your own code allows you to put a bit of thought in your design.
In this version I was not interested about recursion or Maps in Java, and I decided to skip the outer BDD layer (although Jasmine would allow me to do so). What was more interesting was to go through the different Module pattern incarnations in JavaScript, and using jasmine-node from the command line, although the --autotest option keeps crashing on me so I cannot use it! I am not the biggest fan of autotest utilities but for these kind of deliberate practice they are actually quite nice.
March 08 2012
February 26 2012
Dublin GameCraft 2012
I spent the day with more than 100 game developers and designers yesterday at Dublin GameCraft. It was a lot of fun and although Donall and I didn't really submit our entry for any prizes, we recorded a short video of what we got up to, and here it is:
The topic of the day was: Dinosaur Angst, and as you can see, our dino was pretty angry! Our half baked game was based on OpenSimulator, using stuff we found in the web and LSL. Certainly not the best platform for good gameplay for a shooter, but it was fun to make, the atmosphere in the place was awesome, and have met some really nice people so that's what I call a great day!
The topic of the day was: Dinosaur Angst, and as you can see, our dino was pretty angry! Our half baked game was based on OpenSimulator, using stuff we found in the web and LSL. Certainly not the best platform for good gameplay for a shooter, but it was fun to make, the atmosphere in the place was awesome, and have met some really nice people so that's what I call a great day!
January 19 2012
Open Wonderland - Best View proposed changes
Best View is about the most useful capability ever! It works great with objects with an aspect ratio very similar to your screen, but it's not as good with wider objects such as a cardwall.
You can see what I mean in the following video:
So scratching an itch, I've been working on a patch to add functionality to the capability so that you can focus on certain parts of the object. The key modifiers I'm proposing are:
Mouse wheel = zoom in and out
alt + Mouse wheel = move left and right
alt + crtl + Mouse wheel = move up and down
UPDATE
The keys to be used now are:
Mouse wheel = zoom in and out
ctrl + Mouse wheel = move left and right
ctrl + shift + Mouse wheel = move up and down
The mouse wheel effect also works with trackpads and Mac mouse devices by just sliding a finger as if you had a real wheel.
The patch has not been reviewed yet but if you want to give it a go, I have sent it to the mailing list, and I would appreciate any testing and feedback. Just take into account that it might be rejected.
You can see what I mean in the following video:
So scratching an itch, I've been working on a patch to add functionality to the capability so that you can focus on certain parts of the object. The key modifiers I'm proposing are:
Mouse wheel = zoom in and out
alt + Mouse wheel = move left and right
alt + crtl + Mouse wheel = move up and down
UPDATE
The keys to be used now are:
Mouse wheel = zoom in and out
ctrl + Mouse wheel = move left and right
ctrl + shift + Mouse wheel = move up and down
The mouse wheel effect also works with trackpads and Mac mouse devices by just sliding a finger as if you had a real wheel.
The patch has not been reviewed yet but if you want to give it a go, I have sent it to the mailing list, and I would appreciate any testing and feedback. Just take into account that it might be rejected.
January 11 2012
December 31 2011
bye 2011
it's the end of the year, an absolutely fantastic one, which in my case it's been focused on learning, especially with others.
I started the year attending more local meetups than ever, and it has proved a fantastic source of experience and learnings. I have enjoyed very much the local Irish and Dublin groups, and all the other stuff we have organised such as hacking evenings and code retreats.
Probably the most intense experience of the year were the code retreats. Participating, organising, or facilitating, it's an experience that I wouldn't let pass you given a chance if you have not experienced it yet.
I also have to mention the great time I had attending the TDD courses in Madrid for XPWeek. Carlos is a fantastic coach and the courses were really enjoyable.
It has also been a great year 'online' with all the projects we've done with Open Wonderland, and I'm hoping to have more time for it in the new year.
The most important event of the year, personally, was leaving work a couple of weeks ago. After four fantastic years working for TCD I have decided to take a break, focus on my PhD for a couple of months, and see what life has in store for me after that.
Hope you all have a fantastic 2012!
I started the year attending more local meetups than ever, and it has proved a fantastic source of experience and learnings. I have enjoyed very much the local Irish and Dublin groups, and all the other stuff we have organised such as hacking evenings and code retreats.
Probably the most intense experience of the year were the code retreats. Participating, organising, or facilitating, it's an experience that I wouldn't let pass you given a chance if you have not experienced it yet.
I also have to mention the great time I had attending the TDD courses in Madrid for XPWeek. Carlos is a fantastic coach and the courses were really enjoyable.
It has also been a great year 'online' with all the projects we've done with Open Wonderland, and I'm hoping to have more time for it in the new year.
The most important event of the year, personally, was leaving work a couple of weeks ago. After four fantastic years working for TCD I have decided to take a break, focus on my PhD for a couple of months, and see what life has in store for me after that.
Hope you all have a fantastic 2012!
November 20 2011
Open Wonderland and Google Docs Proof of Concept
I have been very quiet for the last while but as my work load eases out I've had some time to mess about with Open Wonderland again.
This time I've spent a couple of hours putting together a proof of concept (POC) to send information to Google Docs from inworld. In the following video you can see how a word processor document is created from an in world HUD.
The module is very rough and has only been thought of as a proof but if you want to check it out feel free to do so. As usual my code is in github: Proof of Concept for Google Docs and Open Wonderland Integration.
I have to say that the Google Data API has its quirks, although I have only spent a couple of hours using it, but it seems to be solid enough to create powerful client applications.
Any feedback is very welcome as usual!
This time I've spent a couple of hours putting together a proof of concept (POC) to send information to Google Docs from inworld. In the following video you can see how a word processor document is created from an in world HUD.
The module is very rough and has only been thought of as a proof but if you want to check it out feel free to do so. As usual my code is in github: Proof of Concept for Google Docs and Open Wonderland Integration.
I have to say that the Google Data API has its quirks, although I have only spent a couple of hours using it, but it seems to be solid enough to create powerful client applications.
Any feedback is very welcome as usual!
September 30 2011
the busiest September in years!
This has certainly been the busiest September for me in many many years. I can even say the busiest in my life.
After finishing August in a high note with the Ruby Ireland Rails 3.1 launch party, September started with a Ruby Project night in amworks in which we were working a bit on Conway's Game of Life.
The following week two events took place, on the Tuesday the dublinjs meetup with a fantastic backbone.js presentation by David and a kata by Wiktor, and on the Saturday I had the privilege to co-organise and co-facilitate the first code retreat in Dublin (and in Ireland as far as I know!).
If that was not enough, on Sunday I took a flight to Madrid to attend XPWeek. The Monday was a full day of talks, and the rest of the week I attended the TDD courses by Carlos Ble.
I have posts coming about some of these events so won't go into details here, but all the events were absolutely fantastic!
We have also been pushing a new release of Open Wonderland for a while and I think there will be some juicy news out very soon, which is very exciting!
And tomorrow, 1st of October I will certainly not be missing the SocketStream session that the AOL Dublin guys are preparing. That is if this stupid cold I've been nursing since I'm back in Ireland allows me to get out of bed!
After finishing August in a high note with the Ruby Ireland Rails 3.1 launch party, September started with a Ruby Project night in amworks in which we were working a bit on Conway's Game of Life.
The following week two events took place, on the Tuesday the dublinjs meetup with a fantastic backbone.js presentation by David and a kata by Wiktor, and on the Saturday I had the privilege to co-organise and co-facilitate the first code retreat in Dublin (and in Ireland as far as I know!).
If that was not enough, on Sunday I took a flight to Madrid to attend XPWeek. The Monday was a full day of talks, and the rest of the week I attended the TDD courses by Carlos Ble.
I have posts coming about some of these events so won't go into details here, but all the events were absolutely fantastic!
We have also been pushing a new release of Open Wonderland for a while and I think there will be some juicy news out very soon, which is very exciting!
And tomorrow, 1st of October I will certainly not be missing the SocketStream session that the AOL Dublin guys are preparing. That is if this stupid cold I've been nursing since I'm back in Ireland allows me to get out of bed!
August 16 2011
the summer of busy
So far this summer is being much busier than usual.
A couple of weeks ago I attended the html 5 hack-a-thon organised by the Dublin GTUG guys. It was real fun and got to meet some very interesting people and to hack on a browser multi-user whiteboard based on WebSockets and canvas. All the projects were really good, and the effort during the two days paid off big time.
Last week we were busy working on a rails mountable engine to add feedback forms to your web during the Ruby Project nights at amworks. Only a few hours there but it's great to be able to learn and share socially out of work hours, at least from time to time!
In the meantime all is good to go for the code retreat we are organising for September the 17th. Location and sponsorship is pretty much all we needed, and we are looking forward to the day. Tickets flew in less than 3 days, so hopefully people will turn up on the day. If you are reading this, have a ticket, and know for sure that you cannot attend, please let us know cause we have a growing waiting list.
And finally, all is ready for the dublinjs meet up tonight in which Wiktor will tell us all about CoffeScript and Dom has prepared a Kata for us to go through. Great fun ahead!!!
A couple of weeks ago I attended the html 5 hack-a-thon organised by the Dublin GTUG guys. It was real fun and got to meet some very interesting people and to hack on a browser multi-user whiteboard based on WebSockets and canvas. All the projects were really good, and the effort during the two days paid off big time.
Last week we were busy working on a rails mountable engine to add feedback forms to your web during the Ruby Project nights at amworks. Only a few hours there but it's great to be able to learn and share socially out of work hours, at least from time to time!
In the meantime all is good to go for the code retreat we are organising for September the 17th. Location and sponsorship is pretty much all we needed, and we are looking forward to the day. Tickets flew in less than 3 days, so hopefully people will turn up on the day. If you are reading this, have a ticket, and know for sure that you cannot attend, please let us know cause we have a growing waiting list.
And finally, all is ready for the dublinjs meet up tonight in which Wiktor will tell us all about CoffeScript and Dom has prepared a Kata for us to go through. Great fun ahead!!!
August 05 2011
Open Wonderland OurBricks module Preview 2
Another update on the OurBricks module to use within Open Wonderland. This time you can see the process end to end.
There are still a few glitches in the UI, not being very responsive, and the OurBricks API is likely to change in the near future as it is in active development, but the prototype is working now, as you can see in the video.
If you want to play with the sources you can find them in my github account.
There are still a few glitches in the UI, not being very responsive, and the OurBricks API is likely to change in the near future as it is in active development, but the prototype is working now, as you can see in the video.
If you want to play with the sources you can find them in my github account.
August 02 2011
Open Wonderland OurBricks module Preview
I've been working for the last couple of weeks in a new module that will eventually allow the loading of 3D models from the OurBricks collection directly from within Open Wonderland.
The module is in a very early stage and we are collaborating with the guys at OurBricks to get it finalised as soon as possible, but for now you can see the progress (search functionality) in the following video:
As usual, you can find the source code in my github account. Feel free to clone and change. Pull requests always welcome!
Update: Just got a couple of models imported; a bike and an aircraft, as can be seen in the following screenshot:
Models from OurBricks.com
The module is in a very early stage and we are collaborating with the guys at OurBricks to get it finalised as soon as possible, but for now you can see the progress (search functionality) in the following video:
As usual, you can find the source code in my github account. Feel free to clone and change. Pull requests always welcome!
Update: Just got a couple of models imported; a bike and an aircraft, as can be seen in the following screenshot:
Models from OurBricks.com
July 28 2011
July 18 2011
July 15 2011
Sprockets for JavaScript
As a JavaScript newbie, a thing that some times puts me off when I see some libraries out there is the fact that they tend to be just the one big file, with long functions and tons of lines of code that is not that easy to follow.
Sprockets aim is to help out with this situation. As their website reads:
Sounds good to me!!! so how to get started? Reading the manual, of course!
The following is a quick a dirty guide to Sprockets and how to use it from the command line with the sprocketize command. I have created a really silly bunch of sample files that contain only dummy js functions and are here just to illustrate the use.
And you are ready to go!
What else you need to know? Only two more things are needed: directives and the sprocketize command.
Comments that start with the symbol above are considered directives, and they are used to pull in other resources that your project will use: other JavaScript files and any assets you use in the form of stylesheets, images, and so on.
There are two directives currently supported in Sprockets, require for other js files, and provide for other related assets. If the files are surrounded by quotes as in "myfile", then sprockets will only look for that file in the same directory. If is used, then all the load path will be searched for. That load path can be indicated to sprockets through the command line option.
So let's see some code: I have two files called my_file_1.js and my_file_2.js and I want them in just the one file for deployment. The contents of the files are:
my_file_1.js
my_file_2.js
The Sprocketize command
There are different ways to use Sprockets being probably the Ruby library the most used. But the gem also bundles a command line tool which is a wrapper for the Ruby library so let's go with that cause it is really easy.
From the previous section we have two files called my_file_1.js and my_file_2.js and I want them in just the one file for deployment. To generate that concatenated file we can do:
This will create a file called deployment_file.js with the following content:
deployment_file.js
You can see that firstFunction has been pulled in before the second one, and in the process all the comments and stuff that you don't need to deploy have also been stripped out. How nice is that!!!???
Hungry for more?
There is more about Sprockets that you can fin about in their manual. It is a great tool that I hope to start using soon.
Sprockets aim is to help out with this situation. As their website reads:
[Sprockets] helps you turn messy JavaScript into clean modules for development and a single file for deployment.
Sounds good to me!!! so how to get started? Reading the manual, of course!
The following is a quick a dirty guide to Sprockets and how to use it from the command line with the sprocketize command. I have created a really silly bunch of sample files that contain only dummy js functions and are here just to illustrate the use.
Installation
Installation is easy peasy through a Ruby gem. The only trick here is that if you are using rvm (and you should!) you will not need to use sudo, and if you are using your system Ruby it will probably be need. So let's do it:gem install sprocketsAnd you are ready to go!
What else you need to know? Only two more things are needed: directives and the sprocketize command.
Directives
//=Comments that start with the symbol above are considered directives, and they are used to pull in other resources that your project will use: other JavaScript files and any assets you use in the form of stylesheets, images, and so on.
There are two directives currently supported in Sprockets, require for other js files, and provide for other related assets. If the files are surrounded by quotes as in "myfile", then sprockets will only look for that file in the same directory. If is used, then all the load path will be searched for. That load path can be indicated to sprockets through the command line option.
So let's see some code: I have two files called my_file_1.js and my_file_2.js and I want them in just the one file for deployment. The contents of the files are:
my_file_1.js
function firstFunction() {
// I do nothing really!!!
};my_file_2.js
//= require "my_file_1.js"
function secondFunction() {
// I do nothing but function one should appear before me
};The Sprocketize command
There are different ways to use Sprockets being probably the Ruby library the most used. But the gem also bundles a command line tool which is a wrapper for the Ruby library so let's go with that cause it is really easy.
From the previous section we have two files called my_file_1.js and my_file_2.js and I want them in just the one file for deployment. To generate that concatenated file we can do:
sprocketize *.js > deployment_file.jsThis will create a file called deployment_file.js with the following content:
deployment_file.js
function firstFunction() {
};
function secondFunction() {
};
You can see that firstFunction has been pulled in before the second one, and in the process all the comments and stuff that you don't need to deploy have also been stripped out. How nice is that!!!???
Hungry for more?
There is more about Sprockets that you can fin about in their manual. It is a great tool that I hope to start using soon.
July 12 2011
June 27 2011
How much complex is it to model social behaviors???
I believe that there is cause and agency effect in the social values and psychological behavior affecting those values of humans. From one moment to another moment, the systematic state of human changes with respect to its motivations. Humans maintain and regulate the behavioral system in order to shift to the state of desired goal. Every individual contributes to the environment and, therefore, is an integral part of a society. Humans inhibit the characteristics of social and cultural norms of the environment around them. To understand the behavior of an individual it is, therefore, important to dig into the social and cultural norms that impact its actions. It depends upon the objective characteristics of the individual or group which makes the predicted set-of-actions more complex. Infact, it is difficult to evolve exact models of non-linear cause-effect relationships. It is because those relationship have abrupt jumps from one state to another state, but essentially have a motivation behind their actions. Therefore, I believe that we exist in a complex world, and by complex I state that;
- The variance in the environment, i.e., the dynamic or static nature of the environment which is affected by certain external variables.
- The alteration in number of elements existing in the environment, from which information is acquired about the environment.
- The co-relation between existing and new elements that contribute to the social networking within the environment.
- The authenticity and relationship between the social entities that affect the motivations of elements in an environment.
Its evident that the relationship between the social entities and their executing actions are non-linear in nature. For systematic modeling point-of-view, there is apparent difficulty in modeling social variables, but fundamentally they are triggered from some underlying motivation. Similarly, the basic ideology behind each abrupt state isn't just another exquisitely selected action, but has some rational reasoning behind it. For the sake of explanation, suppose that you had a bad startup for the day and you are already getting late for you office. Your wife gives you a list of shopping-items, which you had planned to pick up on your way to your office (goal), as those shops fall in your planned path. But ofcourse, due to shortage of time you'll reroute your plan and path to your office (goal), neglecting the disadvantage of delaying the shopping list. Hence, the motivation of reaching on time leads to take a different path but your goal was essentially the same.
Therefore, in the world of robotics and artificial intelligence, for such environments how would we understand, learn and respond to such environments which have natural tendency towards uncertainty, and are dynamic in nature, i.e., may change as a consequence of actions of elements existing within the environment?
Further, how to we adapt to such environments which have increasing complexity, where the planned set of actions may vary based on the motivations of individual within the environment?
June 21 2011
June 18 2011
SICP -- Starting with the P2PU study group
We have finally started with the SICP study group and I'm delighted to put some time into it. For once, I will focus all my effort and free time to work through and enjoy this fantastic book.
The goal of the group is to finish one section every second week, which gives us 6 weeks for the first chapter. Some people might think that 6 weeks is a lot but to be honest, at least for me, with a full time job, a part time PhD to work on, and all the normal social commitments, it's not that much time. So let's get cracking!
I decided to go back a re-watch the first bunch of MIT SICP lectures as it's been a while since I got around to see them first. I always have this funny and a bit weird feeling when I start watching one because for a moment I feel like I am watching an 80's sitcom or something similar. I'm probably just being silly but it always makes me smile!
The lecture series starts with Harold Abelson ranting a bit about the term Computer Science not being a very good one when it's not a real science, or even about computers. I do agree with him but if you want to know more about the subject you will have to watch it for yourself.
More interesting are his comments about the distinction between declarative or descriptive knowledge and imperative or procedural knowledge. Procedural knowledge or 'Know-How' can be directly applied to a task, whilst declarative knowledge tells us about truth. His example for this is the fact that the square root of a number can be expressed in the form of a mathematic equation(descriptive), compared to a way or algorithm to finding that square root through approximation (imperative).
He also explains that although you can learn most of the LISP language (its rules anyway!) in a short lecture, that does not make you a good user of the language. He compares it to learning the rules of chess and being a good chess player; you need the rules to play, but the rules do not make you any good at it. So you need to embed yourself in the context and the experience, and the techniques to do so are the topic of the course.
In Abelson's words, programming is all about managing complexity, and the techniques in this course will allow you to do so.
The lectures are divided into three main topics which do not correspond to the five sections of my book (my edition is from 1996), but that can be easily correlated, or so I think.
The parts discussed in the lectures are:
- Black-box Abstraction: I guess this will be chapters 1 and 2, building abstractions with procedures/data.
- Conventional Interfaces: I'd say this is chapter 3: Modularity, Objects, and State.
- Metalinguistic Abstractions: This is chapter 4, of the same title.
The fifth chapter of the book about Register Machines does not seem to be in the lectures, but I couldn't tell right now cause I have yet to watch them all.
And that is all for now. I will spend another couple of hours later this evening working through the book and preparing the meeting for tomorrow Sunday at 7pm GMT, 3pm EST. Meetings happen on the #sicp channel on freenode IRC and everybody is welcome!!!
The goal of the group is to finish one section every second week, which gives us 6 weeks for the first chapter. Some people might think that 6 weeks is a lot but to be honest, at least for me, with a full time job, a part time PhD to work on, and all the normal social commitments, it's not that much time. So let's get cracking!
I decided to go back a re-watch the first bunch of MIT SICP lectures as it's been a while since I got around to see them first. I always have this funny and a bit weird feeling when I start watching one because for a moment I feel like I am watching an 80's sitcom or something similar. I'm probably just being silly but it always makes me smile!
The lecture series starts with Harold Abelson ranting a bit about the term Computer Science not being a very good one when it's not a real science, or even about computers. I do agree with him but if you want to know more about the subject you will have to watch it for yourself.
More interesting are his comments about the distinction between declarative or descriptive knowledge and imperative or procedural knowledge. Procedural knowledge or 'Know-How' can be directly applied to a task, whilst declarative knowledge tells us about truth. His example for this is the fact that the square root of a number can be expressed in the form of a mathematic equation(descriptive), compared to a way or algorithm to finding that square root through approximation (imperative).
He also explains that although you can learn most of the LISP language (its rules anyway!) in a short lecture, that does not make you a good user of the language. He compares it to learning the rules of chess and being a good chess player; you need the rules to play, but the rules do not make you any good at it. So you need to embed yourself in the context and the experience, and the techniques to do so are the topic of the course.
In Abelson's words, programming is all about managing complexity, and the techniques in this course will allow you to do so.
The lectures are divided into three main topics which do not correspond to the five sections of my book (my edition is from 1996), but that can be easily correlated, or so I think.
The parts discussed in the lectures are:
- Black-box Abstraction: I guess this will be chapters 1 and 2, building abstractions with procedures/data.
- Conventional Interfaces: I'd say this is chapter 3: Modularity, Objects, and State.
- Metalinguistic Abstractions: This is chapter 4, of the same title.
The fifth chapter of the book about Register Machines does not seem to be in the lectures, but I couldn't tell right now cause I have yet to watch them all.
And that is all for now. I will spend another couple of hours later this evening working through the book and preparing the meeting for tomorrow Sunday at 7pm GMT, 3pm EST. Meetings happen on the #sicp channel on freenode IRC and everybody is welcome!!!
June 17 2011
A simple guide to installation of LISP in Unix
1. Open terminal window, and install Clisp using:
sudo apt-get install clisp
2. Then, install Emacs and Slime using:
sudo apt-get install emacs slime
3. Create directory for slime to use, i.e.,
mkdir ~/.slime
4. Make file .emacs in home directory using any editor, e.g.,
nano .emacs
and put the following
;;; Lisp (SLIME) interaction
(setq inferior-lisp-program "clisp")
(add-to-list 'load-path "~/.slime")
(require 'slime)
(slime-setup)
(setq inferior-lisp-program "clisp")
(add-to-list 'load-path "~/.slime")
(require 'slime)
(slime-setup)
5. Open emacs in terminal by using,
emacs &
6. Now press Crtl-x Crtl-f, it will create new file. Now you can write test the compiler. For example, do the basics of addition, i.e., write (+ 2 2) inside the created file and compile it by pressing Crtl-x Crtl-e.
7. For slime, simply press Alt-x and type word 'slime' without quotes.
If installed perfectly, you shall see something like this
CLISP Port:55022 Pid:2811
; SLIME 2010-07-21
CL-USE
CL-USE
Older posts are this way
If this message doesn't go away, click anywhere on the page to continue loading posts.
Could not load more posts
Maybe Soup is currently being updated? I'll try again automatically in a few seconds...
Maybe Soup is currently being updated? I'll try again automatically in a few seconds...
Just a second, loading more posts...
You've reached the end.


