Skip to main content

Ralsina.Me — Roberto Alsina's website

New qmail plugin idea: overload

It should not hap­pen but it does: Your qmail serv­er is over­load­ed. Maybe you are un­der a DOS at­tack, or there is a rea­son why you are get­ting 10x your usu­al amount of mail.

But then you start see­ing how your "not pre­pro­cessed" queue starts grow­ing, and grow­ing...

This can al­so mean things like cla­mav or spa­mas­sas­s­in, which need to check the mail be­fore it gets queued are not keep­ing up with the mail flow, or maybe some IO per­for­ma­ce is­sue.

But what can you do righ now to fix it?

Well, you can dis­able spa­mas­sas­s­in, or, in ex­treme cas­es, shut­down SMTP so the sys­tem has a chance to catch its breath so to speak.

Of course, clos­ing SMTP means your own users can't send email ei­ther, which suck­s.

Now there is a lighter al­ter­na­tive: shut­down SMTP for those who are not your user­s.

Here's the triv­ial code, im­ple­ment­ed as a SPP plug­in, fit to be used in the [mail] sec­tion:

#!/bin/dash

if [ -f /var/qmail/control/overloaded ]
then
      if [ -z "$SMTPAUTHUSER" ]
      then
              echo R451 Temporary Failure: Server overload
              echo overload: $PPID Temporary Failure: Server overload >&2
      fi
fi

And if you are dar­ing and want to make your sys­tem self­-­cor­rect­ing, maybe you should cron some­thing like this:

* * * * * if [ `qmail-qstat  | tail -1 | cut -d: -f2` -gt 100 ];\
then touch /var/qmail/control/overloaded ;\
else rm -f /var/qmail/control/overloaded; fi

I will prob­a­bly code it again in C and make it part of ra/­plu­g­in­s.

Me and the subte.

I moved to Buenos Aires (BA) al­most ex­act­ly 8 years ago. For those who have nev­er been here, let me tell you some things about it. It's large. Do you know Sao Paulo? A bit small­er. Much small­er than Mex­i­co DF. About the same size as New York. Twice the pop­u­la­tion of the Rand­stad. About the same as greater Paris or Is­tan­bul. So fig­ur­ing out a way to move around it was im­por­tan­t.

Vista dos Aires

The way most na­tives do it is by bus. There is a pret­ty ex­ten­sive and ef­fi­cient net­work of bus­es which will take you any­where. There are maybe 150 dif­fer­ent lines, but if you don't know the city, spe­cial­ly the place you are try­ing to reach, they are a recipe for get­ting lost, be­cause you can (will) miss your stop and end any­where else.

Colectivos

To make it worse, I get dizzy on bus­es. The brak­ing and start­ing makes me re­al­ly sick. I can con­trol it, as long as I look out the win­dow, or straight for­ward, and breath re­al­ly care­ful­ly.

So, since I don't drive, and cabs are rel­a­tive­ly ex­pen­sive, I al­ways pre­ferred the sub­way, or, as it is called here, the subte. Plus, on trains and sub­ways I can even read and not get dizzy. I al­ways tried to live close to a sta­tion, I had al­most one hour to read while trav­el­ing and we got along great.

The subte is pret­ty old. The first in Latin Amer­i­ca, and still the on­ly one in a few mil­lion near­by square miles. But it's al­so ... quirky.

For in­stance, I lived in Bel­gra­no, close to the D line. Which had ja­pa­nese cars. How did I know they were ja­pa­nese cars? Well, they had all these things writ­ten on the win­dows in Ja­pa­nese. Sad­ly, I can't find pic­tures of that, and in a re­cent trip I did­n't see them, so it may be that af­ter maybe 20 years some­one de­cid­ed to rub them of­f. That's a pity. I al­ways imag­ined they said in­ter­est­ing stuff, even if they prob­a­bly said "keep your hands in­side the car, you id­iot".

There's al­so the bo­letería-kiosco. A kiosco is a sort of mi­ni drug­store, where you can buy can­dy, a so­da, maybe a com­b, or con­dom­s. A bo­letería is a palce where you buy tick­ets to ride the subte. And in some places, you can do both things. Be­cause they turned the tick­et booths in­to kioscos.

El hombre del Kiosco

Tere is the line at Re­tiro sta­tion, in the C line. There's 4 or 5 bo­leterías. When you get there, of­ten there's 40 or 50 peo­ple in line on the first one. And you can walk just be­side them and buy a tick­et in the 4th or 5th booth, where there's noone wait­ing.

And of course, a clas­sic, the one ev­ery tourist sees. The A line. The orig­i­nal BA sub­te, opened 90 years ago or so... and still us­ing the same cars. Yes, you can ride an­tique, wood­en cars to work on that line. With in­can­des­cent bulbs on glass tulip­s. With man­u­al doors (man­u­al open­ing on­ly, they close au­to­mat­i­cal­ly with bone crush­ing force).

Empty train car

Sure, it's hot. There's no air con­di­tion­ing, and BA can get pret­ty hot in sum­mer. But it's nice in win­ter! It's fast, you can't get lost, and it's just so BA.

Weird Django/PyODB bug

I am fin­ish­ing my first large-ish Djan­go app from scratch [1].

To lo­gin a us­er you can do some­thing like this:

[root@wally app]# python manage.py shell
Python 2.3.4 (#1, May  2 2007, 19:26:00)
[GCC 3.4.6 20060404 (Red Hat 3.4.6-8)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from pyodb import *
>>> import django.contrib.auth
>>> print django.contrib.auth.authenticate(username='user',password='pass')
user

And then you use that us­er ob­ject for djan­go.­con­trib.auth.lo­gin

Some of the au­then­ti­ca­tion da­ta is avail­able on a Mi­cro­soft SQL Server, and I get it via py­o­d­b. And this hap­pens when I try to au­then­ti­cate the us­er (as­sume us­er and pass are valid, this is the small­est snip­pet that trig­gers the bug):

[root@wally app]# python manage.py shell
Python 2.3.4 (#1, May  2 2007, 19:26:00)
[GCC 3.4.6 20060404 (Red Hat 3.4.6-8)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from pyodb import Connect
>>> import django.contrib.auth
>>> c1=Connect("sqlserver",uid="user",pwd="pass")
>>> print django.contrib.auth.authenticate(username='user',password='pass')
None

As you can see, the py­o­db stuff should not in­ter­fere with the djan­go stuff at al­l. I am on­ly im­port­ing one func­tion and con­nect­ing to the DB, I don't even ex­e­cute any SQL or use any da­ta from the SQL con­nec­tion. But the calls to au­then­ti­cate fail.

How are you sup­posed to de­bug this? I worked around it by mov­ing the Py­O­DB stuff to an­oth­er mod­ule, but it's weird.

Strange things I see: the roof statue of Carupá

Walk­ing near the train sta­tion of Carupá, head­ing for a cus­tomer's I saw a rather shab­by house in the in­dus­tri­al area, white and with green paint­ed doors made of met­al. And on top of it, stand­ing as if about to jump, there's a stat­ue of a chub­by guy wear­ing a white shirt and black pants. Why is there a stat­ue in the roof of that house? Why is it so creep­y?

Imagen011.jpg

The aw­ful pic­ture is cour­tesy of my phone.

Text-based presentations

There have been a few posts on plan­et KDE about tex­t-based pre­sen­ta­tion tools (1 , 2 , 3) and while their so­lu­tions are all prob­a­bly bet­ter than mine, I have to say I did some­thing in the area about a year ago.

Since I like re­struc­tured text and PyQt that's what it's based on, but you can just use it with vi and a wyse60, if you wan­t.

My project is called To­bo­gan and it has a work­ing ver­sion.

It has a GUI, but let's ig­nore it for this post about tex­t-based soft­ware ;-) and show the text be­hind it:

===============
Why use Tobogan
===============

-------------------
(If you are a nerd)
-------------------

:transitions: from_left,to_left,from_top,to_top,from_right,to_right,to_bottom,fade_out



It's nerd-oriented
------------------

It's trivial to display source code, with
proper syntax highlighting.

.. code-block:: python

    from base64 import *
    def myFirstFunction():
          print b64decode ('YnllIHdvcmxkIQ==')

Even for things like shell sessions.
Dammit, I am a nerd, I will try to add every nerd
feature I deem cool.



It does things simply
---------------------

This is a subtitle?
===================

Wanna show a flickr photo?

.. code-block:: rst

    .. flickr:: myPhotoTitle

How about using openomy.com to share your files?
And whatever else you can think of, it probably
**can**\  be done.

.. footer:: Smart thing goes here

And here is the re­sult af­ter run­ning rst2s­l.py on it.

Hints:

  • If you move the cur­­sor to the top, you will get (bro­ken?) pre­vi­ous/next ar­rows

  • If you click on the win­­dow, you get to the next slide.

I have not touched this in al­most a year, and it would need lots of love, but it's not a bad con­cep­t, IMVHO.


Contents © 2000-2023 Roberto Alsina