I was doing some math with Lars and during our session, we came up with the following inequality. Let $a_1,\ldots,a_r\in\mathbb N$ be integer numbers with $a_i\ge k$. Then,
\[ \frac{\sum_{i=1}^r a_i}{\prod_{i=1}^r a_i} = \sum_{i=1}^r \frac{1}{\prod_{j\ne i} a_j} \le \frac{r}{k^{r-1}}= \frac{rk}{k^r} \]
The inequality is completely obvious, but I found it useful and didn't want to forget about it.
On the second day of 29c3, we talked about the group law on an elliptic curve based on our old script (in German) called "Das Gruppengesetz auf Elliptischen Kurven". Today, we explained to some people how elliptic curves can be used to factorize the product of two primes, i.e. attack weak RSA keys. When we were done, we let the flipchart paper taped to the wall and sat down. Few minutes passed before two people in passing showed an unusual interest in our notes. A few words into the conversation, I bluntly asked them about their mathematical background, which was met with an amused
> I'm a math professor, does that suffice?
These people turned out to be Tanja Lange and Daniel Bernstein, two scientists who are rather big shots in mathematical cryptography. I am ashamed to say that I did not even know that, but I certainly understood that they knew a lot more about elliptic curves than me and they were willing to share. To be precise, they were really friendly, and good at explaining it. That's rare. Of course, I eagerly listened as they began elaborating on the advantages of Edwards coordinates on elliptic curves. The two of them had attended the talk by Edwards introducing the concept in 2007 and observed the cryptographic potential:
Basically (and leaving out some details), it's all about the fact that
\[ x^2+y^2 = 1+dx^2y^2 \]
defines an elliptic curve, with all relevant points visible in the affine plane; check out the picture. Choosing $(0,1)$ as your neutral element, a group law on this curve is given by
\[ (x_1,y_1) \oplus (x_2,y_2) := \left( \frac{x_1y_2+x_2y_1}{1+dx_1x_2y_1y_2}, \frac{y_1y_2+x_1x_2}{1+dx_1x_2y_1y_2}\right). \]
With this shape, you never have to mention projective coordinates, the group law can be explained in a very elementary kind of way — and then it turns out that this shape also yields faster algorithms for point multiplication. In short: If you're into curves, cryptography or both, I thoroughly encourage you to check out their summary page about Edwards coordinates.
We have arrived at the 29C3 and set up shop. We will talk a bit about elliptic curves and stuff, but whenever you find us hanging out in 1C, you can stick around and talk to us about anything.
I was asked today if one could make LaTeX skip all occurances of the value 13, in all counters, as some buildings do. Well, of course you can:
\let\stepc\stepcounter\renewcommand{\stepcounter}[1]{%
\ifthenelse{\equal{\value{#1}}{12}}{\stepc{#1}}{}\stepc{#1}}
Here, we first save the \stepcounter
macro in \stepc
, then we renew its definition by stepping the counter twice if its current value equals 12, therefore effectively omitting the 13th occurance. Also, you should watch the thirteenth floor, it's a nice movie if you're into scifi.
Because apparently, some people our age still do not know about the Pilot Frixion Pen ((At the time of writing, this ebay shop is Germany's cheapest option.)), let me just very briefly inform you about this ingenious item. It is a regular ball pen, but the ink it uses turns invisible under a certain amount of heat. Hence, the Frixion has a little rubber nob at the end, which effectively works as an eraser, because rubbing it against a sheet of paper produces enough heat to turn the ink invisible! Good news: Leaving your lecture notes on the heating does not erase them. Seriously though, this pen is just awesome.
Let's say you have a Windows PC on a 64 bit machine. Obviously, you have Cygwin because anything else would just be silly. Then you want to develop C-Applications that you can compile and run on large Linux-based servers, so you turn to an an IDE that can work with Cygwin. Now here comes the twist: For whatever stubborn reason, you want to be able to compile your applications native 64 bit, and you want to do it in Eclipse, and you want to be able to debug them.
Do you want to know how?
I do not have a Facebook account. Why don't I have a Facebook account? A couple reasons spring to mind:
* I think that it's a pathetic, average, unimaginable kind of self-portrayal.
* I do not want to give all kind of private details about my (social) life to some company with very questionable motives, let alone imprinting all that data into the internet for all eternity.
* It eats up lots of time I could spend writing blog posts that noone reads.
As a matter of fact, however, none of those is really the reason why I don't use Facebook. My reason not to use Facebook is that it is expected of me to use it. Let me clarify: People have stopped asking "Do you have a Facebook account?" and instead, they started asking
> What's your Facebook account?
Depending on who's asking, to them, my answer sounds a bit like "Oh I'm sorry, I do not have a Telephone." And indeed, that's a pretty good metaphor. Facebook is the best new tool of communication since mobile telephony was made available to the public. I remember when only very few people had a cellphone, because I was in elementary school then - and I had one. I got it for Christmas because I had begged and begged, I wanted no other present, just that cellphone. It caused all kinds of problems, teachers didn't want me to bring it to school, stuff like that. Can you imagine? Nowadays, that just sounds absurd. Nowadays, everyone has a cellphone, because that technology is so convenient that we got used to it, it has become vital to our way of life. You can not exist in the digital age, without a telephone.
And Facebook is headed in the same direction - for a good reason. It's an incredibly powerful addition to existing communication, partly replacing old technology and combining others into an easily manageable framework to maintain all your social relations. And it's almost free - you are paying them with just your personal information, which they use for advertising and thelike. Frankly, I couldn't care less about that. In fact, I think that's totally fair. But at some point, it will have become socially impossible to not have a Facebook account. At that point, we have given a private company complete control over our respective social statuses. When you apply for a job, they first check your Facebook profile. When you chat up a stranger, you exchange Facebook information and that's the first they'll really know about you. Of course, Facebook wouldn't use that power to harm anyone, that'd be very bad for business. If I were Mr. Zuckerberg, I'd offer special premium Facebook profiles instead, for a certain fee of course. Let's say $10 a month and you just seem better than everyone else. Most people would get one, and at some point you just seem like a bum if you don't. So you pay the ten bucks, what the hell. And before you know it, everyone's paying Facebook fee every month. You're upset? You'd never do that? It's absurd? Well, you pay about that much for your cellphone, don't you? Nobody would refuse to use a cellphone just because he has to pay for the calls. Only, like, a crazy communist hermit bum would say such a thing.
Now, you might say, alright! Facebook is worth paying money for it. What's the problem? The problem is that Facebook is neither controlled by the government nor by the market. They have no rivals, by design. Facebook does not interact with other social networks. That's different for cellphones - you have different vendors that live in a healthy state of competition. Same holds for email, regular mail, and basically all kinds of communication. Not one of them is monopolized. If we let a company monopolize our communication, we're screwed. Now, I am not actually very afraid that this will happen in such an apocalyptic manner. Things will work out alright. But right now, I don't think that it should be expected of everyone in the whole civilized world to have an account on that website, no matter how good it is. I am making a political statement by not having a Facebook account. Me not being a very politically active person, this is one hell of a statement.
Let's say you have a matrix $A\in\mathrm{GL}_n$. How do we best denote the inverse of its transpose? You would probably write $(A^T)^{-1}$ or $(A^{-1})^T$ because it is the same. However, today at the office we decided to henceforth write $A^{-T}$ instead. It seems abusive at first, but I can make it formal for you, if you care for that kind of stuff. As we all know, the transpose of $A^T$ is $A$. In other words, the transposition operator $\vartheta:\mathrm{GL}_n\to\mathrm{GL}_n$ which maps $A$ to its transpose satisfies $\vartheta^2=1$. So far, the exponentiation map is defined as $\mathrm{GL}_n\times\mathbb{Z}\to\mathrm{GL}_n$ mapping $(A,k)\mapsto A^k$. We instead consider the ring $\mathbb{Z}[T]:=\mathbb{Z}[t]/(t^2)$ and extend the domain of the exponentiation map to $\mathrm{GL}_n\times\mathbb{Z}[T]_\ast$, where $\mathbb{Z}[T]_\ast$ denotes the homogeneous elements of $\mathbb{Z}[T]$. This way, you can write $A^{kT}$ instead of $(A^k)^T$ and you have $A^{kT^2}=A^k$ as required. Note that by restricting to homogeneous elements in $\mathbb{Z}[T]$, we get $A^{p+q}=A^pA^q$ and $A^{pq}=(A^p)^q$ for all $p,q\in\mathbb{Z}[T]_\ast$.
Roman told us about a turing machine in Magic: The Gathering™. The design seems very complicated at first, I would have thought that there was an easier way to do it. However, with the 8 minutes invested so far, I did not come up with a better implementation.
I was recommended taskwarrior by Lars, who advertised it as a very cool todo-list manager for the commandline. It's available under cygwin as well. I wanted to give it a try today, so installed it and checked out the taskwarrior homepage. The first thing it does, it leads you to the 30 second taskwarrior tutorial where they give you a very tiny set of commands you need to make a todo-list in the most literal sense: A list of things that you have to do. Of course, the program can do much more than that, and I am not even familliar with all of its features. However, at this point already, I want to comment positively on the unusually gentle learning curve it provides, compared to most other Linux tools. This is an aspect of program design often neglected: Do not overwhelm the user, in particular not with features that are optional. I think a great many deal of open source projects could benefit significantly from improvements in that area, because all elitism aside, a large and devoted userbase is the heart and soul of a vivid, open software project.
You use Opera? Good. Go to
* Settings
* Preferences
* Advanced
* Content
Check the checkbox that says Enable plug-ins on demand. This is the plugin setting you always wanted. It replaces all plugins (say, annoying flash ads) by a little play button which you can click to activate the control. This way, all plugins are disabled by default (and that's good, because most of them are annoying), and whenever there actually is a plugin that you want to use, just click the play button and play your silly flash game if you must.
I have wondered how to undefine existing commands in $\LaTeX$ for so long. Finally, I googled it up. It's easy. Simply
\makeatletter
\let\command\@undefined
\makeatother
and the \command
has been undefined. This does not cause an error when \command
was undefined before. After that, you can merrily
\newcommand{\command}{Hell Yeah.}
and be on your way.
Under Cygwin, you can install the 64 bit mingw version of GCC, but you don't get the gnu multiprecision library for free with it, you'll much rather have to compile it from source. I ran into a bit of trouble here: It will not suffice to tell the configuration script about the new compiler, there are now mingw-64 versions of all relevant binaries that should be used instead. Basically, you go like
tar -xjf gmp-5.0.4.tar.bz2
cd gmp-5.0.4
./configure \
AR=x86_64-w64-mingw32-ar \
AS=x86_64-w64-mingw32-as \
DLLTOOL=x86_64-w64-mingw32-dlltool \
DLLWRAP=x86_64-w64-mingw32-dllwrap \
CC=x86_64-w64-mingw32-gcc-4.5.3 \
NM=x86_64-w64-mingw32-nm \
LD=x86_64-w64-mingw32-ld \
OBJDUMP=x86_64-w64-mingw32-objdump \
RANLIB=x86_64-w64-mingw32-ranlib \
STRIP=x86_64-w64-mingw32-strip
I am not sure if all of these are needed, but it won't hurt either. After that, you should
make && make check
the whole thing. Worked perfectly for me, so now I can link with libgmp.a
in .libs
and native 64 bit bignum action ensues!