Recent Blogposts | Page 2

Solution to CUPS Claiming Print Job Completed Despite Printing Nothing

May 10, 2016, 1:42 p.m. Sysadmin

Cause

The system runs out of RAM

Solution

Kill RAM intensive processes, or use swap.

How Did I Run into This Problem?

I have installed CUPS on my Raspberry Pi. It was connected to a USB printer and made it accessible via my LAN. It had been working very well until the recent. In these few weeks, somehow the printer does not print.

I entered the CUPS web interface of my Raspberry Pi and tried printing a test page. Funny enough. It claimed that the print job was completed, despite that the printer did nothing.

Then I dig up /var/log/cups/access_log. Here is what's inside.

localhost - - [10/May/2016:14:37:12 +0800] "POST /printers/Canon_MG2400_series HTTP/1.1" 200 422 Print-Job successful-ok

It claimed that the print is a success. Obviously that's not true!

Then I dig up /var/log/cups/error_log. Unfortunately, there was nothing inside.

Then I started trying stuffs like:

  • Reconnecting the printer
  • Restarting CUPS
  • Using another USB Cable
  • Rebooting the printer

None worked! :(

Then I figured out that there is something called LogLevel in CUPS config. I modified it as follows:

LogLevel debug

And I restarted CUPS. Then I noticed the following messages appeared in /var/log/cups/error_log:

D [10/May/2016:14:37:20 +0800] [Job 136] Error: /undefined in --setpagedevice--
...
D [10/May/2016:14:37:20 +0800] [Job 136] Last OS error: Cannot allocate memory
D [10/May/2016:14:37:20 +0800] [Job 136] GPL Ghostscript 9.05: Unrecoverable error, exit code 1
...
I [10/May/2016:14:37:22 +0800] [Job 136] Job completed.

What? Obviously something went wrong! How on the earth could the level of that message merely be a debug? I think that should be at least a warn! More importantly, how come it is called "Job completed"? I think that should be "Job Failed" instead! :<

After that, I increased the swap space. And remote printing starts working again. :D

Took me a few hours to figure that out. I couldn't find this solution in Google. That's why I blog about this. Hopefully someone somewhere would somehow find this blogpost helpful.

UPDATE: I've filed a bug report to the CUPS developers. Hopefully it will be fixed soon.


Sadale.net Goes HTTPS

April 15, 2016, 2:20 a.m. Meta

Thanks to Let's Encrypt. We can now get SSL certificates for free!

I was slacking off while doing homework. That's why I did the HTTPS setup yesterday. :P

Currently, only some of the subdomains of sadale.net supports HTTPS. I'd like to test it for a while before enabling it for all of the domains.

Many image links in blogposts are still having http:// prefix . I'll convert them to https:// when I got time.


Asynchronous Rock Paper Scissors Tournament 2016 - Poland Website Ready

March 30, 2016, 3:34 a.m. RPS

Finally the website of Asynchronous Rock Paper Scissors Tournament 2016 - Poland is ready!

To make the event more internationalized, it will be hosted by different country every year! The coming event will be hosted by Poland.

To join the event, just fill in the form in the site with your nickname, nickcountry and the hands to be played in 1st April UTC. After that, you can wait for the release of the result in 2nd April UTC.

Have fun in the coming April Fool's Day!


Hiatus of Development

March 3, 2016, 11:43 a.m. Cellphone Diver Koloniigo Meta RPS

I'm sorry to announce that the development of all project of Sadale is suspended since I made the last blogpost. It is expected not to be resumed for weeks.

The main issue is that right after my illness, I got a lot of homework to do because they stacks up while I was sick. Right after I completed them, I got tests. Then I got to do revision. And now I'm writing essays. Later I need to prepare for presentations. Then I got exams. :(

Apparently I won't be able to work on any project until (hopefully) the end of the exam.

Anyway, there is some unannounced progress on Cellphone Diver that I made a while ago. That's upgrade store! I've got the basic of upgrade store functional:

Cellphone Diver Upgrade Store

Currently, there are two projects to be completed:

  • Cellphone Diver
  • Koloniigo

When I got time, I'll do Cellphone Diver first. If it's a success(get to the frontpage of a flash game site), I'll start another flash game project before working on Koloniigo.

Meanwhile, there's a project that I completed developing. It's the website for next International Asynchronous Rock Paper Scissors event that will be held in 1st April 2016! I've contacted a Polish guy and he will probably host the next event. The site is done and instruction on setting up the site is sent to the hoster. I'll let you guys know when the site is ready. Stay tuned!


Epic Failure in Global Game Jam

Feb. 7, 2016, 2:25 p.m. Gamedev

As you might knew, I've joined Global Game Jam last weekend. It was a, well, interesting experience. I learned a lot. :P

I thought that I was well-prepared for the jam.

Months before the jam, I've developed the game Half N' Half within 24 hours as a practice of gamedev within very limited time. The project went well.

Later, I've joined Ludum Dare 33 compo and developed Poopie: The Flying Monster within 48 hours. The project went well too. The rating isn't great. But at least it's completed within the time limit. I even got a few hours of spare time.

A few days before the jam, I started preparing for it by playing around with HaxeFlixel.

Unfortunately, the team that I joined didn't complete the game What's life in the jam.

What happened?

The Global Game Jam is a 48 hours event that require me to attend to the jam site physically. On the jam site that I joined, The 48 hours spanned across two days, two evenings, beginning with an evening.

First Evening

In the first evening, we were supposed to form teams. Being an self-taught amateur game developer, I went to the site alone because none of my friends was interested in the event.

Right after the theme Ritual released, I didn't have any idea in my mind. Therefore, I walked around in the site to check whether there was any interesting idea I wanted to work on. Then I found a group with such an idea. Then I joined them as an artist. Since they decided to use pixel art, and I had no experience on it, I did programming instead of art, tho.

The team had nine members. It includes 4 programmers, 4 artists and 3 game designers. One of the game designer was also an artist. One programmer was also an artist.

Right after I joined the group, the game designers argued with each other for exceptionally long period of time(like 5 hours+) over an idea. Being impatient, I asked them to gave me something to program or give me some art to work on. As you know, as long as a part of the game design is settled down, programmers and artists can start working on it. This would allow programming, art and game design to perform concurrently, which will definitely save time. Surprisingly, one of the game designer told me that we can't work on it until the completion of game design. He even insulted me by saying things like "apparently you're the sort of people who write articles in exam without thoroughly planning it". To avoid escalation of the tensions, I shut up. Somehow I didn't leave the team.

During the design process they somehow decided to use phaser.io despite I strongly object to it. Out of four programmers, none of us had worked with phaser.io before. Obviously phaser.io wasn't the choice if we want to complete the game. That is because we would need to spend a few hours to figure out how does the library work. Interestingly, one of the game designer suggested that the spirit of a game jam is to experiment with stuffs.

That game designer is indeed pretty interesting. Apparently, the ideas in his mind isn't very consistent. While he thinks that the spirit of a game jam is to experiment with stuffs, he keep mentioning that some companies joined the jam with many game engines ready. And those companies adapt those engines for the theme. He keep telling us that those games won't get any awards. Implying that he thought that we have a chance for an award. At the moment, what I was thinking was that it's pretty unlikely that our team would get any award because our game probably won't be completed.

After that, I slept on the site by crossing my arms and put on head right above them. The noise of argument of the game design continues. Anyway, at the night the game designers have settled down the complete game design. One of them started working on the Game Design Documentation.

Speaking of Game Designer Document, I found that the document was funny. It was six-pages long. As a reference, behold the equivalent documentation for the game design of Poopie: The Flying Monster, which was a game I developed for Ludum Dare 33:

The document above was designed in like 30 minutes. I wonder how come they need to much time to argue about the game design. Who need a long documentation for a 48 hours game? We got no time to waste. Head on the develop the game already!

While I was asleep, I was still semi-conscious because the sleeping environment was very poor. The light above my head was so bright. Sleeping there is a joke for me. I heard something interesting while I was sleeping. That game designer told another teammate that I was not clever to suggest to work on an idea before it's completely designed. He said that he will "reeducate" me some time later. It was pretty funny for me. I don't see arguing over simple matter for a long time in a 48 hours game jam is a good idea. The longer they argue, the less time we got to develop the game.

First Day

The next day, as expected, the programmers, including me, have spent a lot of time on figuring out how does phaser.io work without working much on the functionality of the game. We also setup stuffs like Slack, git, etc for the purpose of collaboration.

One of the programmer started reading the game design documentation. I haven't read it. Just by skimming thru it, I found that it was very long! What I knew was that the game is a platformer. I hate reading long stuffs. Therefore, I just wait for other programmers to read the document. :P

One of the funny thing about the game designer is that he got work to do that day. He wasn't available in the site until evening. Fortunately, we didn't need to understand the document because our progress on figuring out how does phaser.io work was too slow. :P

Second Evening

The game design guy was back. One of the programmer who have read the game design documentation asked for clarification. Turned out that the documentation was misinterpreted. It was really funny. The entire purpose of the documentation is to specify the whole game design. How come it is worded ambiguous enough that it can be misinterpreted? This evening, the game designer seems to have lost his coolness that he had in last evening.

Still, our progress was very slow as of the evening. We only got a character walking with semi-working ladders. Then I decided, with permission of other programmers, to switch to HaxeFlixel myself as a backup plan. Just in case they couldn't make it work with phaser.

Meanwhile, the game designers argues on the design of the game again. It doesn't matter anyway because we didn't program to a point that game design matters.

Then I tried to sleep at night again. Well, again, it's a joke. Since the lighting of the site is too bright, I slept in a couch of a garden near the site. That place was dark enough for me to sleep. In the midnight, a mosquito flew over my ear and woke me up. I couldn't sleep after all.

Second Day

In the second day, I was exhausted of not having enough sleep for two nights. I keep saying "I'm very sleepy" without helping much on the team. Fortunate enough, the other two programmers somehow managed to make ladders, characters and infinite world work. Out of tiredness, I was switched from proactive programming mode to on-demand programming mode. That day, I only programmed when I was asked by other programmers. I was probably sick since this day. But I didn't aware of it. And one of my groupmate started complain me of keep saying I'm being tired, I did find it being offensive. Anyway, I tolerated it.

At the end, we did get a sort of working game. At least it's playable. But it's nowhere from being complete. And somehow I and the groupmate who previously complain me of saying being tired ran into an argument. It was weird. I have a feeling that it was ok for me to be insulted, but it was not ok for me to insult others as a defensive measurement. It was pretty difficult to get along with the game designers in the team. :/ I was getting along well with other programmers and artists, tho.

What Went Well

  • Collaboration between programmers are good. With git, we're working on the same piece of code at the same time without much conflicts.
  • Slack. We share link and resources efficiently.
  • Socialized with a few other programmers in another team as well as some in my own team.

What Went Wrong

  • Incomplete game
  • Poor time management
  • Too many game designers
  • Unrealistic goal
  • Too many arguments over team members
  • Use of unfamiliar library

I and probably other programmers in the team did foresee these issues at the first evening. It's sad that we couldn't do anything on it at all. I regret that I didn't leave the team in the first place.

Notes to Future Self(May not be true for everyone)

  • Never sleep on site. Sleeping at home is a much better choice.
  • Join a team with less members
  • Join a team without, or with only one game designer
  • Consider jamming alone. I have been working well alone :P
  • Leave a team as soon as you found that it isn't suitable for you

Aftermath: Severe Illness

Right after the jam, I found myself suffered from severe illness. I caught cold and I got fever. :(

The fever is now gone. But I'm still having a cold. And now I need to sleep like 15 hours every day. That's why I made this blogpost so late. :(

Alright! After I get well, I'll continue to work on Cellphone Diver!