Planeta Blogów WMI UAM

February 10, 2019

Borkowski Marcin

2019-02-10 Making recover-this-file messages more prominent

When I start my Emacs, I visit all my agenda files automatically (of course, I set up the org-agenda-files variable first).

This has an annoying side effect. When I visit a file interactively, and Emacs detects that an autosave file exists for the file I’m visiting, it suggests using M-x recover-this-file. When I visit files during my init.el execution, these messages get lost in the *Messages* buffer, and it is easy to forget to check the autosave data. (This normally should not happen, since Emacs asks about saving all unsaved files before exiting. Sometimes, though, my Emacs gets killed for some reasons, and then it’s a problem.)

Of course, I could call recover-file for all the offending files automatically. Too much automation without informing the user is not necessarily the best option, however. I decided that I want to make the warnings much more prominent, and the simple method I used may be general enough to be potentially useful for other people as well. Here’s the code I have at the end of my init.el.

(defun show-initial-important-messages (regex)
  "Show all lines in *Messages* matching REGEX."
  (let* ((messages (with-current-buffer "*Messages*"
		     (buffer-string)))
	 (important
	  (with-temp-buffer
	    (insert messages)
	    (delete-non-matching-lines regex (point-min) (point-max))
	    (buffer-string))))
    (when (> (length important) 0)
      (with-output-to-temp-buffer " *Important messages from the init file*"
	(princ important)))))
(show-initial-important-messages "recover-this-file")

I guess that the code is pretty much self-explanatory; if not, check out the docstrings of all the relevant functions.

Now I can see all the messages about unsaved buffers when I start Emacs. (I can easily add other messages, too – time will tell if this is going to be useful.)

CategoryEnglish, CategoryBlog, CategoryEmacs, CategoryOrgMode

February 10, 2019 09:00 AM

February 04, 2019

Borkowski Marcin

2019-02-04 A simple template mechanism in Elisp

A long time ago I asked on the Emacs mailing list about a templating mechanism for Emacs Lisp. Of course, there is format. However, I don’t like it as a template engine, since the entries are identified by their order and not names. Then, there is YASnippet and skeleton.el, but they are (probably) better suited for interactive use. (At least Yasnippet can be used programmatically, but it seemed to be too complicated for my needs anyway back then.) Some people suggested other solutions, none of which really appealed to me.

So, I set out to write my own. Notice how we compute pos for the next iteration in string-expand-template (this simple trick is due to Pascal J. Bourguignon) – we can’t just use match-end, since this doesn’t take into account the possible difference in lengths of the replaced string and the replacement.

(defun string-expand-template (template values)
  "Expand TEMPLATE, replacing occurrences of \"{{{beep}}}\" using
the alist VALUES.  The text to use as the replacement is the cdr
of the cons with car equal to the string \"beep\".  If no such
string is present in VALUES, use the empty string as the
replacement.  To insert literal \"{{{\" in the template, escape
the first one with a backslash."
  (let ((pos 0) (result template) prev-result)
    (while (string-match
	    "\\(?:^\\|[^\\]\\)\\({{{\\([a-z0-9-]+\\)}}}\\)"
	    result pos)
      (setq prev-result result)
      (setq result (replace-match
		    (or (cdr (assoc (match-string 2 result) values)) "")
		    t t result 1))
      (setq pos (+ (match-beginning 2)
		   (- (length result) (length prev-result)))))
    result))

(defun perform-template-expansion-here (values)
  "Perform template expansion, using the VALUES alist, from the point
to the end of (visible part of) the buffer.  This is used by both
`expand-template' and `insert-and-expand-template' functions."
  (while (re-search-forward "\\(?:^\\|[^\\]\\)\\({{{\\([a-z0-9-]+\\)\\(?:,\\(.*?\\)\\)?}}}\\)" nil t)
    (replace-match (or (cdr (assoc (match-string 2)
				   values))
		       (match-string 3)
		       "")
		   t t nil 1)))

(defun expand-template (template values)
  "Expand TEMPLATE, replacing occurrences of \"{{{beep}}}\" using
the alist VALUES.  The text to use as the replacement is the cdr
of the cons with car equal to the string \"beep\".  If no such
string is present in VALUES, use the empty string as the
replacement.  To insert literal \"{{{\" in the template, escape
the first one with a backslash."
  (with-temp-buffer
    (insert template)
    (goto-char 0)
    (perform-template-expansion-here values)
    (buffer-string)))

(defun insert-and-expand-template (template values)
  "Expand TEMPLATE, replacing occurrences of \"{{{beep}}}\" using
the alist VALUES.  The text to use as the replacement is the cdr
of the cons with car equal to the string \"beep\".  If no such
string is present in VALUES, use the empty string as the
replacement.  To insert literal \"{{{\" in the template, escape
the first one with a backslash."
  (save-restriction
    (narrow-to-region (point) (point))
    (insert template)
    (goto-char (point-min))
    (perform-template-expansion-here values)
    (goto-char (point-max))))

It turned out to be easier than I suspected – not completely without pitfalls, though. I decided to base it on regexen (“A man had a problem, and he decided to use reular expressions…;-)”), which is a bit restrictive, but not too much for my needs.

So, let me start with a short howto. The main entry point is the function expand-template. It receives two arguments: the template itself and an alist specifying the substitutions. In the template (which is an ordinary string), anything consisting of letters, digits and/or hyphens between triple braces is the key searched for in the alist. If none is found, an empty string is inserted. As a bonus, you can write a default value after a comma; it may contain anything except a newline or three closing braces. Finally, a backslash before the opening triple braces escapes the whole thing. And that’s it.

Let us look at a few examples.

(expand-template
 "This is {{{beep}}} and that is {{{cling}}}."
 '(("beep" . "an apple")
   ("cling" . "an orange")))
(expand-template
 "{{{beep}}} is tasty, and I like how the glasses go \\{{{cling}}}."
 '(("beep" . "Wine")
   ("cling" . "an orange")))
(expand-template
 "This is a {{{beep}}} and that is {{{nothing}}}."
 '(("beep" . "beep")
   ("cling" . "cling")))
(expand-template
 "This is a {{{beep}}} and that is a {{{cling,CLING}}}."
 '(("beep" . "beep")))

Since very often the templates are expanded only to be then inserted into a buffer, and expand-template uses a (with-temp-buffer ... (buffer-string)) approach, using it to generate a string only to be inserted somewhere is a waste, so there is also the insert-and-expand-template. It takes exactly the same arguments, but instead of returning an (expanded) string, it just expands the template in place.

I mentioned some pitfalls. I wanted to implement expand-template using replace-regexp-in-string at first. It’s rep argument (specifying the replacement text) can be a function, which seemed to suit my needs. However, this function receives only the text that matched, and while you can refer to the match data in it, they are not very useful: match-beginning and match-end, for some strange reason, refer not to the searched string, but certain its substring! (Admittedly, this is documented, but it’s not something I like.) Finally, I decided that doing the replacements in a buffer (as opposed to a string) will be both easier to code (and the code will be more readable) and (probably) more effective.

It turned out that things were a bit more complicated – but this will wait for another post.

CategoryEnglish, CategoryBlog, CategoryEmacs

February 04, 2019 05:00 AM

January 28, 2019

Borkowski Marcin

2019-01-28 A simple tip with killing and yanking code

I often kill (cut) some code and then yank (paste) it somewhere else. Often the level of indentation is wrong in the new place (for instance, something is put from a higher level into a then-branch of a conditional).

Emacs has the indent-region command (by default bound to C-M-\). While it operates on the region, it does not require the region to be active. Since yank sets the mark and point at the opposite sides of the yanked text, you can press C-M-\ immediately after the yank and Emacs does The Right Thing™ for you. It even works when the region begins or ends in the middle of a line (in such a case, that line is also indented).

You’re welcome.

CategoryEnglish, CategoryBlog, CategoryEmacs

January 28, 2019 07:00 PM

January 20, 2019

Borkowski Marcin

2019-01-20 Filling and version control

It has been said a lot of times that when writing some (natural language) text with version control in Emacs, filling is a bad idea. Any change involving adding or deleting a significant number of characters and then refilling can result in all subsequent lines in a paragraph changed, and the diff looks really ugly then.

The solution usually proposed is putting each sentence on a separate line, and then just use visual-line-mode to wrap your lines on the screen without putting any hard newlines in.

Well, I sort of dislike this idea. The main problem I have with it is that I either tend to write rather longish sentences myself, or work on texts by other people that have long sentences. (This is definitely not optimal with respect to readability etc., but I’ve been working in academia for the past 14 years, and old habits die hard.) Having a wide screen makes visual-line-mode rather uncomfortable (well, I could try longlines-mode, which is deprecated, but reported to work – maybe some day), and looking at diffs with long lines is a pain in the neck anyway.

It occurred to me that one possible solution is to try to have the best of both worlds. Why not fill the paragraph, but introducing a newline after each sentence, too? (After writing this, I realized that I’m definitely neither the only one, not the first one to have this idea.) Then, when a change is large enough to “spill over” to next lines, it will only affect the current sentence, which seems to me an acceptable compromise. Here’s my attempt at the code which you could bind to M-q or some other key:

(defun fill-sentences-in-paragraph ()
  "Fill the current paragraph with a newline after each sentence."
  (interactive)
  (save-excursion
    (save-restriction
      (mark-paragraph)
      (narrow-to-region (point) (mark))
      (while (not (eobp))
	(fill-region-as-paragraph
	 (point)
	 (progn (forward-sentence) (point)))
	(delete-horizontal-space)
	(newline)))))

It is a quick-and-dirty solution (as many other Emacs hacks are), but I plan to start to use it and if there are any problems, I might refine them over time.

And now that I think about it, why not highlight long sentences as I write them? This would be a cool aid when writing prose. And Emacs already has the infrastructure to do that, like flymake. After a quick search, it turns out that I am (obviously) again not the first one to come up with that idea; it turns out that there are quite a few linters for English, and even one that works for more languages, including my mother tongue. So one of the future blog posts of mine will probably be a survey of these tools.

CategoryEnglish, CategoryBlog, CategoryEmacs, CategoryTeX

January 20, 2019 08:00 PM

January 14, 2019

Borkowski Marcin

2019-01-14 Some Org Agenda keybindings

This post is just a friendly reminder that it may be a good idea to look in the manual from time to time, just in case there are some gems hidden there you don’t remember (even if you read it once).

It turns out that you can do a lot of things from the Org Agenda buffer. Usually, I just wander around that buffer using the normal movement commands and exit it using q. Of course, I also often mark things done using t and jump to them using RET. But until recently, that was about it.

It turns out Agenda can do a lot more. One nice thing is C-c C-o, which just opens the link from the selected entry (and displays a list of links found there first if there is more than one). f and b move forward and backward in time, and . gets back to today. A number of commands starting with v changes the appearance of the agenda, showing or hiding various kinds of information.

If you have a habit of not closing your agenda (e.g., with q), you might find M-<up> and M-<down> useful – they allow to rearrange the order of agenda entries, but only temporarily (until the agenda is (re)generated again).

If you want to reschedule your tasks, S-<right>, S-<left> and > may be for you.

You can also manage clocks (i.e., start and stop clocking etc.) from the agenda view.

One of the cooler things you can do in the agenda is bulk actions. You can mark more than one entry (manually or with a regex) and then perform some action on all marked entries. The available actions include manipulating todo state, tagging, archiving, scheduling/deadlining and refiling. You may also, as the manual puts is, “[r]eschedule randomly into the coming N days”, which I never used, but that looks cool. If that weren’t enough, defining custom actions is (of course) also possible, either on the fly or permanently.

Do yourself a favor and check out the manual, there are even more possibilities!

CategoryEnglish, CategoryBlog, CategoryEmacs, CategoryOrgMode

January 14, 2019 06:00 AM

January 06, 2019

Borkowski Marcin

2019-01-06 Emacs server and other Emacs instances

A few years ago, I mentioned indirectly that I use emacs-server. For some time, I just had (emacs-server) in my init.el. This, however, had an annoying side effect of giving an error when I started a second instance of Emacs. (I do this from time to time, e.g. when I fiddle with my config, to check whether the changes in init.el made in the “main” instance of Emacs are working.) Then I changed it to

(ignore-errors
  (emacs-server))

which didn’t really matter, since what (emacs-server) issues is a warning, not an error. Finally, I decided to do something better about it. I changed my invocation of emacs-server to something like this.

(require 'server)
(unless (server-running-p)
  (server-start))

Actually, this is not the whole story. In the rare case I have two Emacsen running at the same time, I usually treat one of them as temporary. Why not make this fact more prominent? At the same time, quitting the “temporary” one can (and should) be easier. So I installed this.

(require 'server)
(if (server-running-p)
    (load-theme 'green-phosphor t)
  (setq confirm-kill-emacs #'yes-or-no-p)
  (server-start)
  (global-set-key (kbd "C-x C-3") 'server-edit))

I installed a second color theme just so the temporary Emacs can look very different, and I deliberately chose a venomous one. (Don’t get me wrong, I like green; when I play a boardgame, I choose green pieces whenever I can, since it’s my favorite color. But an intense green instead of something more subdued is probably not the best choice for your editor.) Also, I moved (setq confirm-kill-emacs #'yes-or-no-p) and (global-set-key (kbd "C-x C-3") 'server-edit) into the else-branch of the if so that they are activated only in my main Emacs. (By the way, I’ve had a setup where Emacs is started automatically after I log in for quite a few years now. It doesn’t make much sense to turn on a computer without starting the OS, right? ;-) )

CategoryEnglish, CategoryBlog, CategoryEmacs

January 06, 2019 10:00 PM

December 31, 2018

Borkowski Marcin

2018-12-31 An info about the size of message attachments

I have been using mu4e for quite a long time as my email client now. I would never switch back to Claws Mail again (maybe mutt, with emacsclient as the editor;-)). However, mu4e has some rough edges. One of them (which is really a problem with Emacs’ message-mode) is displaying of attachments when writing the message. (I already solved two problems with attaching files to messages in Emacs, but this feature needs even more tweaking.)

I have a rather slow internet connection, and sending emails in mu4e is synchronous, so I’d like to be warned when sending a large attachment. Many graphical email clients display the size of the attachment. Not only does message-mode not do this, but in general the inserted attachments look ugly and illegible.

So, I set out to fix both these issues. The most difficult part is adding the size information. When I attach a file to a message in Emacs, something like this is inserted in the buffer:

<#part type="image/jpeg" filename="..." disposition=attachment>
<#/part>

It turns out that the code responsible for parsing the above text is well hidden in the mml.el file. While I could not understand it completely, after a while of grepping and edebugging I came to the conclusion that adding a size="..." part should be safe. The natural choice was to advise the mml-attach-file function.

This, however, won’t probably work. The part responsible for actually inserting the attachment “marker” is buried deeply in that function. So I decided to choose a more hackish solution, and advise mml-insert-empty-tag instead. This is definitely not something I’d be very proud of, but I can’t see any other way without making larger modifications.

So, here was my first attempt.

(defun mml-add-size-to-message-part (name &rest plist)
  "Add filesize to the inserted part if applicable"
  (if (and (eq name 'part)
	   (plist-member plist 'filename))
      (plist-put plist 'size
		 (number-to-string
		  (file-attribute-size
		   (file-attributes
		    (plist-get plist filename))))))
  (cons name plist))

(advice-add 'mml-insert-empty-tag
	    :filter-args
	    'mml-add-size-to-message-part)

Unfortunately, it didn’t work as expected (actually, it didn’t work at all). It turned out that the problem was with the :filter-args advice combinator. In its case, the piece of advice is called with a funcall and not apply – in other words, we need to take a list of arguments as a single argument to mml-add-size-to-message-part and decompose it ourselves to name and plist.

So, here is the working one.

(defun mml-add-size-to-message-part (args)
  "Add filesize to the inserted part if applicable"
  (let ((name (car args))
	(plist (cdr args)))
    (if (and (string= name "part")
	     (plist-member plist 'filename))
	(plist-put plist 'size
		   (human-readable-size
		    (file-attribute-size
		     (file-attributes
		      (plist-get plist 'filename))))))
    (cons name plist)))

(advice-add 'mml-insert-tag
	    :filter-args
	    'mml-add-size-to-message-part)

Notice how I used the human-readable-size function I blogged about previously.

This is all nice, but it’s not enough for me. I don’t really care that much about the exact path to the attachment or other stuff in the part line; I’m mainly interested in the filename and size of the attachments.

So, my goal now is to hack the mml insertion functions more to make things I want to see at first glance more prominent.

Since all this is hackish enough already, I decided to add insult to injury and apply yet another “clever” hack: since both MIME type and filename contain the most interesting parts after a slash, I’m going to make the part after the slash of each mml tag stand out.

Since Emacs does not have a function for mapping over plists, I quickly wrote my own; it turned out to be very similar to the one by Drew Adams.

(defun embolden-after-slash (string)
  "Return a copy of STRING with the part after the last slash boldface.
If there are no slashes, make all of it bold."
  (let* ((result (substring string))
	 (slash-pos (string-match "/[^/]+$" result)))
    (add-face-text-property
     (if slash-pos (1+ slash-pos) 0)
     (length result)
     'bold t result)
    result))

(defun transform-plist (fun plist)
  "Run FUN on each key-value of PLIST.
Return the new value.  FUN should receive two arguments."
  (let ((result nil))
    (while plist
      (push (car plist) result)
      (push (funcall fun (car plist) (cadr plist)) result)
      (setq plist (cddr plist)))
    (nreverse result)))

(defun mml-prepare-tag (args)
  "Prepare NAME and PLIST for `mml-insert-tag'.
Make the interesting parts of values more prominent."
  (let ((name (car args))
	(plist (cdr args)))
    (cons name (transform-plist
		(lambda (key value)
		  (if (stringp value)
		      (embolden-after-slash value)
		    value))
		plist))))

(advice-add 'mml-insert-tag
	    :filter-args
	    'mml-prepare-tag)

After spending some time writing and debugging the above code, it turned out that it won’t work… One reason is that mml-insert-tag for some reason uses prin1 when inserting the values of tags. Another is that as soon as all tags are inserted, font lock kicks in and renders the whole attachment in the message-mml face.

Fail.

I asked a suitable question on the Emacs mailing list and got a whole lot of interesting answers. For starters, it turned out that if I want to manually add some faces to a text in a buffer with font-lock mode turned on, I should use the font-lock-face property and not the face one. Changing add-face-text-property to add-text-properties turned out to (partially) solve the problem. Parts of the attachment tag were actually printed in boldface, but this somehow turned off the fontification of the rest. (This is probably not a surprise, since looking at the font-lock settings in mml.el reveals that the tag is highlighted as a whole. I suspect that when font-lock sees the font-lock-face property anywhere in the text it is about to transform, it just refuses to touch it, which is not unreasonable.)

Of course, this doesn’t solve the prin1 issue, which is way harder to fix. It seems that a simple advice filtering the argument to mml-inser-t-tag won’t work here – the prin1 is buried deeply in mml-insert-tag. Of course, I wouldn’t like to rewrite this function, either, especially that the prin1 does serve a purpose.

My solution to the problem is way less elegant, but at the same time much simpler. Instead of doing the highlighting work before calling mml-insert-tag, let’s do it afterwards. And instead of working on a string, let’s work on the stuff already inserted in the buffer.

The last problem that remains is that we still break font-lock due to using the face-font-lock property. This, however, is easy to fix – instead of text properties, we can use overlays. (They are separate objects that consume memory, but if there is no variable bound to an overlay and the buffer the overlay was in gets killed, the overlay is subject to garbage collection, so we do not have to worry about it.)

(require 'cl)

(defun embolden-with-overlay (start end)
  "Embolden the text between START and END, using an overlay."
  (let ((tmp-overlay (make-overlay start end)))
    (overlay-put tmp-overlay 'face 'bold)))

(defun make-mml-tag-before-point-more-legible (name &rest plist)
  "Apply boldface to relevant parts of mml tag before point."
  (save-excursion
    (let ((opoint (point)))
      (when (search-backward (format "<#%s" name) nil nil)
	(goto-char (match-end 0))
	(while (looking-at " [a-z]+=")
	  (goto-char (match-end 0))
	  (if (eq (char-after) ?\")
	      (embolden-with-overlay
	       (progn
		 (forward-char)
		 (point))
	       (progn (while (and (search-forward "\"" opoint t)
				  (save-excursion
				    (backward-char)
				    (cl-oddp (skip-chars-backward "\\\\")))))
		      (point)))
	    (embolden-with-overlay
	     (point)
	     (progn
	       (re-search-forward "[ >]" opoint t)
	       (backward-char)
	       (point)))))

(advice-add 'mml-insert-tag :after 'make-mml-tag-before-point-more-legible)

This may be kind of fragile, since I am not sure how (un)reliable manual parsing of the mml tag can be. (Also, I make the whole value of each “property” bold, not only the part after the last slash.) However, since the only thing that depends on it will be the fontification, I have the luxury of not needing to care too much about edge cases: the worst that can happen is that the wrong parts of the tag will be set in boldface. And I have been now using this code for a while, and it seems to work very well.

CategoryEnglish, CategoryBlog, CategoryEmacs

December 31, 2018 09:00 AM

December 24, 2018

Borkowski Marcin

2018-12-24 Merry Christmas

As usual at this time of year, I have best Christmas wishes for everyone reading this. I wish that you all discover the beauty and truth of the Catholic faith. Don’t let the sins of the Catholic people - even the clergy - deceive you: the one, holy, Catholic and apostolic Church is where you can find truth about God and man. Merry Christmas!

CategoryEnglish, CategoryBlog, CategoryFaith

December 24, 2018 11:00 PM

December 16, 2018

Borkowski Marcin

2018-12-16 A simple tip on using destructive functions

This is something fairly obvious to every seasoned Lisp programmer, but let’s not forget that there are novices, too.

Many Elisp functions are noted to be “destructive”, which means that they can change their arguments. For instance, if you want to sort a list, you may use the sort function, which is said to modify its argument by side effects (this is exactly what “destructive” means). This does not necessarily mean, however, that after executing (sort some-list), the variable some-list will magically contain a sorted version of it previous self! Let’s consider two examples.

(setq some-list '(1 3 2))
(sort some-list #'<)
some-list

After evaluating the above code, some-list is bound to (1 2 3), i.e., the sorted version, and hence you might think that this is always going to be the case.

Wrong.

Let’s look at this code.

(setq some-list '(3 1 2))
(sort some-list #'<)
some-list

See? Now some-list is just (3).

What is going on here?

Well, in order to understand what happens, we will use the famous cons cell diagrams, found in so many books on Lisp.

Remember that each cons cell contains two “slots”: car and cdr. A list is simply a chain of cons cells whose cars contain (more precisely: point to) values held in the list, and cdrs point to the next cons cell in the chain.

Hence, the list in our first example looks like this.

some-list
    |
    V
 +-A---+-----+   +-B---+-----+   +-C---+-----+
 |  1  |  ------>|  3  |  ------>|  2  |     |
 +-----+-----+   +-----+-----+   +-----+-----+

(An empty slot means nil, of course.)

After the first sort, cons cell A’s cdr is modified to point at C, C’s cdr points at B, and B’s cdr is set to nil. Since some-list still points to A (as we did not assign anything else to this variable), our list looks like this:

some-list
    |     +-------------------------+
    |     |                         |
    V     |                         V
 +-A---+--|--+   +-B---+-----+   +-C---+-----+
 |  1  |  |  |   |  3  |     |   |  2  |  |  |
 +-----+-----+   +-----+-----+   +-----+--|--+
		   ^                      |
		   |                      |
		   +----------------------+

Let’s consider now the second example. We start with this:

some-list
    |
    V
 +-A---+-----+   +-B---+-----+   +-C---+-----+
 |  3  |  ------>|  1  |  ------>|  2  |     |
 +-----+-----+   +-----+-----+   +-----+-----+

and after sorting, our cons cells look like this:

some-list
    |
    |     +-------------------------------+
    |     |                               |
    V     V                               |
 +-A---+-----+   +-B---+-----+   +-C---+--|--+
 |  3  |     |   |  1  |  ------>|  2  |  |  |
 +-----+-----+   +-----+-----+   +-----+-----+

See what happened? Since some-list points at A now, and A’s cdr is nil, we get (3) as some-list.

So, what we should do about it? It turns out that sort returns “the sorted sequence”, which means cons cell B. Therefore, if we want some-list to be sorted, we should say this instead.

(setq some-list '(3 1 2))
(setq some-list (sort some-list #'<))
some-list

And of course, the same goes for other destructive functions, like nreverse or cl-delete.

(You might also look at my earlier post about destructive functions and comments to that post.)

CategoryEnglish, CategoryBlog, CategoryEmacs

December 16, 2018 12:00 PM

December 10, 2018

Borkowski Marcin

2018-12-10 Lesser known Dired stuff

It is not a secret that I am a big fan of Dired. Recently I learned about a thing introduced relatively recently into Emacs, that is, the wdired-create-parent-directories variable. If you set it to a non-nil value, renaming a file or directory in Wdired to something containing one or more slashes will Do The Right Thing. How cool is that?

Also, I have set wdired-allow-to-change-permissions to t, and now I can change file permissions in Wdired with keyboard macros, for instance. (It’s probably not much more powerful than good ol’ chmod, but it’s Emacs!) Consult the manual for the details.

CategoryEnglish, CategoryBlog, CategoryEmacs

December 10, 2018 06:00 AM

January 08, 2015

Hromada Mateusz

Warka 9 – American India Pale Ale

Zasyp:

  • pale ale 4kg
  • pszeniczny 0,8kg
  • carapils 0,5kg

Zacieranie w 18l wody, słód dodany w 55°C:

  • 68°C – 65 minut przerwy (po 30 minutach podgrzanie z 65°C do 68°C)

Po filtracji i wysładzaniu wyszło 21,5 litra brzeczki o BLG 11,1.

Chmielenie:

  • 60 minut – 40g Simcoe
  • 20 minut – 30g Simcoe
  • 5 minut – 30g Simcoe
  • 0 minut – 30g Amarillo
  • dry hopping – 30g Simcoe (6 dni), 30g Simcoe (3 dni)

Po schłodzeniu i filtracji wyszło 19 litrów o BLG 16.

Fermentacja (drożdże US-05):

  • 11 dni burzliwej
  • 23 dni cichej

Do refermentacji użyłem 140g cukru i 735g wody.

ABV: ok. 6.2%

by ruanda at January 08, 2015 09:38 PM

Warka 8 – Cydr

Składniki:

  • sok jabłkowy Riviva 22l

Sok ma BLG 12.

Fermentacja (drożdże US-05):

  • 7 dni burzliwej
  • 38 dni cichej

Do refermentacji użyłem 155g cukru i 1135g wody.

ABV: ok. 6.3%

by ruanda at January 08, 2015 09:34 PM

Warka 7 – American Wheat

Zasyp:

  • pszeniczny 2kg
  • pilzneński 2kg

Zacieranie w 16l wody, słód dodany w 45°C:

  • 45°C – 15 minut przerwy
  • 53°C – 15 minut przerwy
  • 68°C – 75 minut przerwy (po 30 minutach podgrzanie z 64°C do 70°C)

Po filtracji i wysładzaniu wyszło 21 litry brzeczki o BLG 7.

Chmielenie:

  • 60 minut – 10g Chinook
  • 20 minut – 20g Palisade
  • 5 minut – 20g Cascade
  • 0 minut – 20g Amarillo
  • dry hopping – 30g Amarillo, 10g Cascade, 10g Palisade

Po schłodzeniu i filtracji wyszło 18 litrów o BLG 12.

Fermentacja (drożdże US-05):

  • 8 dni burzliwej
  • 35 dni cichej

Do refermentacji użyłem 120g cukru i 880g wody.

ABV: ok. 5.5%

by ruanda at January 08, 2015 09:28 PM

November 11, 2014

Girl, lost in IT

Nowy wpis, nowe miejsce

W poprzednim wpisie uprzedzałam, że muszę wprowadzić duże zmiany. Nie jestem już w stanie pisać każdego tekstu w dwóch językach. Dodatkowo czuję, że zmieniłam się przez ostatnie kilka lat – czuję, że „wyrosłam” trochę z tego bloga. Właśnie napisałam pierwszy tekst w nowym miejscu. Blog nazywa się Na miękko - serdecznie zapraszam.

by ynka at November 11, 2014 09:02 PM

October 13, 2014

Krzysztof Szarzyński

Zawieszenie publikacji

Jeśli dobrze liczę, to od 402 dni nic tu nie napisałem. Ponieważ zazwyczaj nie mam niczego interesującego do powiedzenie/napisania, dlatego przerzuciłem się na inne platformy, które lepiej pasują do “beztekstowej” formuły. Nadal robię zdjęcia – więcej niż kiedyś, ale publikuje je w mniejszych porcjach. Zapraszam na mój profil 500px, gdzie wrzucam rożne zdjęcia z całego …

by Quati at October 13, 2014 06:41 PM

June 12, 2014

Hromada Mateusz

Warka 6 – Żytni Stout

Zasyp:

  • pale ale 2kg
  • żytni 2kg
  • żytni czekoladowy 0,25kg
  • Carafa typ III special 0,25kg

Zacieranie w 16l wody, słód dodany w 55°C:

  • 55°C – 10 minut przerwy
  • 70°C – 60 minut przerwy (po 60 minutach podgrzanie z 62°C do 68°C)
  • 68°C – dodanie ciemnych słodów, 40 minut przerwy

Po filtracji i wysładzaniu wyszło 20,5 litra brzeczki.

Chmielenie:

  • 60 minut – 10g Tomahawk
  • 15 minut – 30g Tomahawk
  • 5 minut – 30g Tomahawk
  • dry hopping – 30g Tomahawk

Po schłodzeniu i filtracji wyszło 18 litrów o BLG 13.

Fermentacja (drożdże S-04):

  • 22 dni burzliwej

Do refermentacji użyłem 125g cukru i 835g wody.

ABV: ok. 4,4%

by ruanda at June 12, 2014 08:38 PM

April 27, 2014

Girl, lost in IT

W planie zmiany + jak tu trafiłam (w obrazkach)

Kolega wyraził ostatnio zaniepokojenie działaniem swojego czytnika RSS. To przecież niemożliwe, żebym tak długo nie napisała nic na swoim blogu! Niestety, możliwe. Do tego powód jest dość absurdalny: piszę mniej, ponieważ piszę więcej. Naprawdę. Pamiętacie, jak przeżywałam swoje 10000. urodziny? Postanowiłam wtedy na poważnie wziąć się za rzeczy, o których zawsze myślałam, że zrobię je […]

by ynka at April 27, 2014 06:28 AM

March 22, 2014

Hromada Mateusz

Warka 5 – Imperial India Pale Ale

Zasyp:

  • pale ale 5kg
  • wiedeński 1kg
  • carapils 0,5kg
  • pszeniczny 0,2kg

Zacieranie w 21l wody, słód dodany w 55°C:

  • 55°C – 10 minut przerwy
  • 65°C – 90 minut przerwy (po 60 minutach podgrzanie z 61°C do 65°C)

Po filtracji i wysładzaniu wyszło 23 litry brzeczki o BLG 14.

Chmielenie:

  • 60 minut – 40g Chinook
  • 10 minut – 20g Citra, 20g Simcoe
  • 5 minut – 30g Citra, 30g Simcoe
  • 0 minut – 15g Cascade, 15g Palisade
  • dry hopping – 15g Cascade, 15g Palisade

Po schłodzeniu i filtracji wyszło 21 litrów o BLG 17.

Fermentacja (drożdże US-05):

  • 9 dni burzliwej
  • 10 dni cichej

Do refermentacji użyłem 130g cukru i 630g wody.

ABV: ok. 7,6%

by ruanda at March 22, 2014 07:44 PM

March 12, 2014

Hromada Mateusz

Warka 4 – American Wheat

Zasyp:

  • pszeniczny 2kg
  • pilzneński 2kg

Zacieranie w 15l wody, słód dodany w 55°C:

  • 55°C – 10 minut przerwy
  • 68°C – 70 minut przerwy (po 50 minutach podgrzanie z 62°C do 67°C)

Po filtracji i wysładzaniu wyszło 21 litry brzeczki o BLG 9,5.

Chmielenie:

  • 60 minut – 10g Chinook
  • 20 minut – 20g Palisade
  • 5 minut – 20g Cascade
  • 0 minut – 20g Amarillo
  • dry hopping – 30g Amarillo

Po schłodzeniu i filtracji wyszło 18 litrów o BLG 13.

Fermentacja (drożdże US-05):

  • 8 dni burzliwej
  • 11 dni cichej

Do refermentacji użyłem 120g cukru i 800g wody.

ABV: ok. 5.3%

by ruanda at March 12, 2014 06:14 PM

February 23, 2014

Girl, lost in IT

Oddam za darmo!

Raz na jakiś czas znajduję w domu coś, co dawno już przestało mi być potrzebne, ale co mogłoby jeszcze przydać się komuś innemu. Niektóre takie rzeczy wystawiam na Allegro (zwłaszcza, jeśli są warte więcej niż kilkadziesiąt złotych), jednak do Allegro często zniechęca mnie konieczność oszacowania kosztów przesyłki. Jeśli chcę pozbyć się czegoś szybko, tanio i […]

by ynka at February 23, 2014 05:23 PM

February 15, 2014

Hromada Mateusz

Instalacja Raspbian przez debootstrap

IMG_20140214_203617

Wymagania

Potrzebny jest Linux, w miarę świeży debootstrap i qemu-arm-static. Oczywiście potrzebny też jest dostęp do użytkownika root.

Partycjonowanie i formatowanie karty SD

Kartę należy podzielić na dwie partycje. Pierwsza, sformatowana w FAT będzie zamontowana jako /boot. Druga partycja będzie zamontowana jako /, można ją sformatować np. w ext4:

root@lol:/mnt# fdisk /dev/sdh
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1021, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1021, default 1021): +64M

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): c
Changed system type of partition 1 to c (W95 FAT32 (LBA))

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (10-1021, default 10):
Using default value 10
Last cylinder, +cylinders or +size{K,M,G} (10-1021, default 1021):
Using default value 1021

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.
root@lol:/mnt# mkfs.vfat /dev/sdh1
[...]
root@lol:/mnt# mkfs.ext4 /dev/sdh2
[...]
root@lol:/mnt# mkdir rpi
root@lol:/mnt# mount /dev/sdh2 rpi/
root@lol:/mnt# mkdir rpi/boot
root@lol:/mnt# mount /dev/sdh1 rpi/boot/

Instalacja i konfiguracja

Debootstrap należy przeprowadzić w dwóch etapach, gdyż binarki przeznaczone są na inną architekturę.

root@lol:/mnt# debootstrap --foreign --arch armhf wheezy rpi/ http://archive.raspbian.org/raspbian
[...]
root@lol:/mnt# cp /usr/bin/qemu-arm-static rpi/usr/bin/
root@lol:/mnt# LANG=C chroot rpi/ /debootstrap/debootstrap --second-stage

Następnie można chrootować się na budowany system:

root@lol:/mnt# LANG=C chroot rpi/ /bin/bash

Potrzebne są repozytoria w sources.list:

deb http://archive.raspbian.org/raspbian wheezy main contrib non-free
deb-src http://archive.raspbian.org/raspbian wheezy main contrib non-free

W pliku /boot/cmdline.txt należy dodać parametry do kernela:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

/etc/fstab:

proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 0

Różne sieciowe ustawienia są w plikach /etc/hostname, /etc/resolv.conf i /etc/network/interfaces.

W chroocie należy doinstalować paczki git, binutils i ca-certificates.

Potrzebne jest narzędzie rpi-update:

root@lol:/# wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update
root@lol:/# chmod +x /usr/bin/rpi-update
root@lol:/# mkdir /lib/modules
root@lol:/# rpi-update
[...]

Aby dostać się do RPi po restarcie potrzebne jest ssh i hasło na roota:

root@lol:/# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@lol:/# apt-get install ssh
[...]

Po wyjściu z chroota, odmontowaniu obu filesystemów i przełożeniu karty do RPi powinien zabootwać się Raspbian dostępny przez ssh:

root@trololo:~# uname -a
Linux trololo 3.10.30+ #640 PREEMPT Fri Feb 14 19:09:14 GMT 2014 armv6l GNU/Linux

Linki

by ruanda at February 15, 2014 01:20 PM

February 02, 2014

Hromada Mateusz

Warka 3 – American Stout

Zasyp:

  • pilzneński 3kg
  • monachijski 1kg
  • jęczmień palony 0,3kg
  • barwiący 0,2kg

Zacieranie w 15l wody, słód dodany w 55°C:

  • 55°C – 10 minut przerwy
  • 68°C – 70 minut przerwy (po 35 minutach podgrzanie z 64°C do 66°C)
  • 66°C – dodanie ciemnych słodów i 15 minut przerwy

Po filtracji i wysładzaniu wyszło 22 litry brzeczki o BLG 11.

Chmielenie:

  • 60 minut – 15g Centennial
  • 15 minut – 15g Centennial
  • 5 minut – 15g Centennial
  • 0 minut – 25g Centennial
  • dry hopping – 30g Centennial

Po schłodzeniu i filtracji wyszło 19,5 litra o BLG 15. Dodałem 1,5l wody.

Fermentacja (drożdże S-04):

  • 8 dni burzliwej
  • 12 dni cichej

Do refermentacji użyłem 140g cukru i 860g wody.

by ruanda at February 02, 2014 09:54 PM

Girl, lost in IT

10000* lat

Parę (naście) dni temu skończyłam 32 lata. Ta magiczna liczba nie doskwiera mi za bardzo i nie ona jest bezpośrednią przyczyną powstania tego tekstu. Do rozmyślań skłoniły mnie życzenia, które składano mi z tej okazji. Kilkoro (młodszych) znajomych, niezależnie od siebie, obdarowało mnie życzeniami brzmiącymi mniej więcej tak: „Wszystkiego najlepszego. Żebyś miała wspaniały rok. I […]

by ynka at February 02, 2014 06:17 PM

January 27, 2014

Hromada Mateusz

Warka 2 – American Pale Ale

Zasyp:

  • pilzneński 2,5kg
  • monachijski 1,3kg
  • karmelowy jasny 0,2kg

Zacieranie w 12l wody, słód dodany w 55°C:

  • 55°C – 10 minut przerwy
  • 69°C – 60 minut przerwy (z podgrzaniem w 40 minucie)

Po filtracji i wysładzaniu BLG 10.

Chmielenie:

  • 60 minut – 15g Simcoe
  • 15 minut – 15g Simcoe
  • 5 minut – 15g Simcoe
  • 0 minut – 25g Simcoe
  • dry hopping – 30g Simcoe

Po schłodzeniu i filtracji wyszło 16,5 litra o BLG 13.

Fermentacja (drożdże US-05):

  • 8 dni burzliwej
  • 10 dni cichej

Do refermentacji użyłem 110g cukru i 740g wody.

ABV: ok. 5%

by ruanda at January 27, 2014 06:25 PM

January 26, 2014

Hromada Mateusz

Warka 1 – American India Pale Ale

Pierwszą warkę uwarzyłem z przygotowanego zestawu surowców.

Zasyp:

  • pale ale 5,5kg
  • Cara Gold 0,5kg
  • pszeniczny 0,2kg

Zacieranie w 18l wody, słód dodany w 55°C:

  • 55°C – 10 minut
  • 69°C – 60 minut (bez podgrzewania, końcowa 62°C)
  • 76°C – mashout

Po filtracji i wysładzaniu wyszło 23 litry brzeczki o BLG 15.

Chmielenie:

  • 60 minut – 25g Warrior
  • 20 minut – 20g Simcoe
  • 10 minut – 10g Amarillo
  • 5 minut – 10g Amarillo
  • dry hopping – 30g Amarillo

Po schłodzeniu i filtracji wyszło 20,5 litra o BLG 17.

Fermentacja (drożdże US-05):

  • 10 dni burzliwej
  • 11 dni fermentacji cichej

Do refermentacji użyłem 135g cukru i 660g wody.

ABV: ok. 7%.

by ruanda at January 26, 2014 07:03 PM

December 15, 2013

Girl, lost in IT

O zmianie (pracy)

Kilka dni temu kolega z poprzedniej pracy spytał, czy przeniosłam blog w nowe miejsce – nie napisałam prawie nic od czasu, gdy zmieniłam pracę. Babcia przy każdym spotkaniu pyta, czy „korporacja” zdążyła już przeżuć mnie i wypluć. Odpowiem krótko: nie i nie! To prawda, że w ciągu ostatnich kilku miesięcy nie napisałam zbyt wiele. Miało […]

by ynka at December 15, 2013 07:46 PM

September 08, 2013

Krzysztof Szarzyński

Warszawa 2013 – Quati w stolicy.

Zanim zaproszę na ostatnią odsłonę zdjęć z mojego krótkiego pobytu w Warszawie, chwila luźnych wywodów. Nocowałem w hotelu przy placu Konstytucji, który oferował dwa rodzaje pokoi: ciche i z widokiem na miasto. Mi się trafiło oglądanie miasta, ale ponieważ ze mną na szkolenie przyjechało kilka innych osób z Poznania, to zdecydowaliśmy się z Adamem iść …

by Quati at September 08, 2013 06:19 PM

September 04, 2013

Krzysztof Szarzyński

Warszawa 2013 – część druga

Dziś druga porcja obrazków z Warszawy. Hasłem przewodnim miało być “ludzie w Warszawie”, ale chyba troszkę bardziej pasuje “życie w Warszawie”. Chyba nigdy nie byłem dobry w nadawaniu tytułów i nazw. 🙂 Część trzecia zostanie opatrzona moimi przemyśleniami i komentarzem co do samego miasta. Zdjęcia również będą bardziej dotyczyć tego co widziałem i przeżyłem 🙂

by Quati at September 04, 2013 05:27 PM

September 01, 2013

Krzysztof Szarzyński

Warszawa 2013 – część pierwsza

W tym roku wakacje były podzielone na dwie cześći. Najpierw pojechaliśmy z Olą do Zwierzyńca, gdzie odpoczywaliśmy aktywnie zwiedzając Zamojszczyznę i korzystając z dobrodziejstwa krętych rzek i kajaków turystycznych. Ciągle czekam na chwilę weny żeby wybrać kilka zdjęć i je opublikować 🙂  Drugim etapem moich wakacji było… skończenie życia jako student i rozpoczęcie “dorosłości” w …

by Quati at September 01, 2013 08:07 PM

Girl, lost in IT

Cicho sza!

Wcale nie zarzuciłam pisania tego bloga. Krótko o tym, co ostatnio dzieje się u mnie: Kupiliśmy dom. Trwa remont. Kompletnie nie doszacowałam nakładów czasowych (o finansowych nie będziemy tu rozmawiać) niezbędnych do realizacji takiego przedsięwzięcia. Tłumaczę książkę o C++ i Qt (Dlaczego? Patrz wyżej). Jest gruba. Zamiast tłumaczyć, spędzam godziny na rozmowach z fachowcami. Pół […]

by ynka at September 01, 2013 07:36 PM

July 13, 2013

Girl, lost in IT

Open’er, czyli wieczne poszukiwania

Heineken Open’er to co roku ta sama historia. Wiele tygodni przed festiwalem niecierpliwie zaczynam śledzić lineup i planować, co będę chciała zobaczyć. Bliżej terminu okazuje się, że z pięciu wymarzonych koncertów dwa odbywają się naraz, a trzy inne jeden po drugim – na scenach oddalonych od siebie o kilometr. Planuję także, z kim pojadę i […]

by ynka at July 13, 2013 08:00 AM

June 26, 2013

Krzysztof Szarzyński

Nowe zabawki i noc kupały

Obiecanki – cacanki. Czyli tradycyjnie, jak Quati mówi, że coś napisze, to znaczy, że mówi. 🙂 Dziś mam kilka zdjęć zrobionych za pomocą nowej zabawki, która oprócz tego, że jest świetnym gadżetem, to spełnia też czasami funkcję obiektywu. Otóż moim nabytkiem jest Sigma 50 mm F1.4 DG EX HSM, czyli typowa portretowa “stałka” z dość jasnym …

by Quati at June 26, 2013 09:43 PM

May 30, 2013

Girl, lost in IT

Feminiści kontra statystyka

Uczestniczyłam ostatnio w konferencji, w której programie znalazł się panel dyskusyjny poświęcony mniejszościom w środowisku informatyków. Podczas panelu miałam okazję porozmawiać z inspirującymi i pełnymi dobrej woli ludźmi, jednak doszło tam również do pewnego zderzenia opinii, które wspominam do tej pory. Był sobie facet. Doświadczony lider, blogger, walczący o zwiększenie liczby kobiet w IT. Osoba, […]

by ynka at May 30, 2013 04:54 PM

April 26, 2013

Krzysztof Szarzyński

Dowód życia.

Nie! Nie będę mówił o takim sobie filmie z Russelem Crowe :). Chcę tylko napisać, że żyję i mam się (raczej) dobrze. Sporo sie ostatnio dzieje i jest mało czasu na pisanie. Tradycyjnie chyba już raz na pół roku szybka notka z ostatnimi wydarzeniami: Byłem w Krakowie na pierwszej edycji KrakRobota, niestety w tym roku […]

by Quati at April 26, 2013 09:48 PM

April 20, 2013

Girl, lost in IT

Kup swojemu dziecku sobie robota Lego Mindstorms

Pierwszy raz klocki Lego widziałam, będąc małym dzieckiem, nie pamiętam nawet, czy było to Peweksie, „u prywaciarza”, czy może u kolegi, którego tata był kapitanem na statku handlowym, przez co w ich domu zawsze można było trafić na skarby niedostępne w normalnych sklepach (począwszy od mandarynek). Pamiętam, że zachwyciły mnie czyste kolory, przemyślane projekty oraz możliwości, jakie […]

by ynka at April 20, 2013 04:05 PM

March 16, 2013

Girl, lost in IT

Na słodko-gorzko o skutkach asertywności

Minęło już półtora miesiąca od kiedy zmieniłam pracę. Czas… biegnie szybko. Decyzja ciągle wydaje się dobra. Uczę się bardzo dużo. W trakcie ostatnich tygodni dwa razy odwiedziłam Warszawę, po raz pierwszy spróbowałam koreańskiej kuchni (z wyjątkiem zupy kimchi w Art Sushi, którą polecam, ale tylko ludziom o żołądkach ze stali), a także zapisałam się na […]

by ynka at March 16, 2013 12:37 PM

February 22, 2013

Krzysztof Szarzyński

Nowy semestr… nowe zabawki.

Wraz z początkiem nowego semestru letniego wróciła… zima. I fajnie! Po pierwsze dlatego, że miałem już dość pluchy i wilgoci, a po drugie, dlatego że to znów okazja żeby popstrykać kilka zdjęć. Akurat tego dnia rano świeciło Słońce, więc spontanicznie chwyciłem aparat mając nadzieję na krótki spacer po pracy. Dlatego, że skończyłem później niż miałem […]

by Quati at February 22, 2013 09:26 PM

February 02, 2013

Krzysztof Szarzyński

Przerwa zimowa

Przerywamy zimę by nadać odcinek jesieni. Jeżeli tak ma być do wiosny, to ja dziękuje! Wiem, ze dużo osób nie lubi zimy (bo zimno, bo choroby, bo grube ciuchy, bo skrobanie szyb w autach). Jednak jak patrzę na to co się dzieje teraz na dworze to już wolę mroźną i szczypiącą w uszy oraz nos […]

by Quati at February 02, 2013 08:48 PM

December 12, 2012

Krzysztof Szarzyński

Kraków… Bienalle Sztuki 2012

Czy ja zawsze musze zaczynać post od zastanawiania się dlaczego tak rzadko wrzucam jakieś materiały? Chyba tak… no cóż taka tradycja Dziś kilkanaście zdjęć z dwudniowego wyjazdu do Krakowa w… październiku. Hasłem przewodnim było odwiedzenie kilku wystaw artystycznych i polansowanie się na Krakowskim Rynku, stąd sporo zdjęć z pseudo-artystycznym zacięciem Ponieważ spadł śnieg, a na [...]

by Quati at December 12, 2012 11:04 AM

September 20, 2012

Krzysztof Szarzyński

Tatry Wysokie III – Kopa Kondracka

Ostatnią wyprawą w góry było wyjście na Kopę Kondracką połączone z odwiedzeniem Kasprowego Wierchu. I tak jak zawsze miałem pecha, gdy odwiedziałem ten drugi szczyt, tak i tym razem nie było fajnie. Chyba zawsze jak jestem na Kasprowym to zmuszony jestem oglądać mgłę… i to gęstą. Wycieczka numer V – Kopa Kondracka we mgle. Zaczęliśmy [...]

by Quati at September 20, 2012 04:47 PM

February 24, 2012

Dopierała Andrzej

2011-05-27 Darmowe fotoradary dla nissan connect

Może kogoś zainteresuje - nie znalazłem nigdzie opisu jak to łatwo zrobić “za friko”.

1. Ściągamy listę fotoradarów z http://ump.waw.pl/ plik z mapą fotoradarów (http://ump.waw.pl/update/Jacek.zip).
2. Rozkompresowujemy go
3. Łączymy to co nas interesuje do jednego pliku csv:

undefine@uml:~/tmp$ cat Kontrole\ Drogowe/*.csv Niebezpieczne\ Miejsca/*.csv Przejazdy\ Kolejowe/*.csv >x.csv
undefine@uml:~/tmp$ 

4. Usuwamy polskie znaczki (zapewne można jakoś przekodować, ale nie chciało mi się metodą prób i błędów szukać kodowania):

iconv -f cp1250 -t ascii//TRANSLIT  < x.csv > jacek.csv

5. Plik jacek.csv umieszczamy w katalogu myPOIs/myPOIWarnings na pendrive
6. Pendrive wkładamy do nissan connect i ładujemy POI użytkownika z menu(Setup → Navigation → Download my POIs)
7. Przestrzegamy ograniczeń ;)

February 24, 2012 08:24 AM

December 23, 2011

Dopierała Andrzej

2011-12-23 Ankieta Polskiego Badania Czytelnictwa: Przyszła do mnie prośba o wypełnienie ankiety. Z Polskiego Badania Czytelnictwa, sp. z o.o. Niby nic dziwnego, ale.. przyszła "smailem". A sama ankieta, po podaniu "pinu" z listu do wypełnienia na stronie http://www.ankieta.pbc.pl/ W zamian za wypełnienie ankiety oferują m.in. kupony sodexo na kwotę 20zł. I w sumie... Podszedłem do tematu trochę z mieszanymi uczuciami. Jak? Skąd? Po co? Z tego co znalazłem dane osobowe otrzymali z bazy PESEL na podstawie Dz.U. 2006 nr 139 poz. 993, 44h ust 2 par 2. List - był zaadresowany do mnie (imię, nazwisko, adres). Natomiast w samej ankiecie na stronie zwrot był przez "Pani". Pomyłka? Koniec końców zmarnowałem kwadrans i wypełniłem. Co prawda niezbyt wartościowo, bo z proponowanych czasopism to tylko sporadycznie Metro przeglądam jak akurat mi w korku wcisną, natomiast Fantastyki w ankiecie nie było, ale - jak to badanie statystyczne, to.. czemu nie.

Przyszła do mnie prośba o wypełnienie ankiety.
Z Polskiego Badania Czytelnictwa, sp. z o.o.

Niby nic dziwnego, ale.. przyszła “smailem”. A sama ankieta, po podaniu “pinu” z listu do wypełnienia na stronie http://www.ankieta.pbc.pl/

W zamian za wypełnienie ankiety oferują m.in. kupony sodexo na kwotę 20zł.

I w sumie… Podszedłem do tematu trochę z mieszanymi uczuciami. Jak? Skąd? Po co? Z tego co znalazłem dane osobowe otrzymali z bazy PESEL na podstawie Dz.U. 2006 nr 139 poz. 993, 44h ust 2 par 2.

List - był zaadresowany do mnie (imię, nazwisko, adres). Natomiast w samej ankiecie na stronie zwrot był przez “Pani”. Pomyłka?

Koniec końców zmarnowałem kwadrans i wypełniłem. Co prawda niezbyt wartościowo, bo z proponowanych czasopism to tylko sporadycznie Metro przeglądam jak akurat mi w korku wcisną, natomiast Fantastyki w ankiecie nie było, ale - jak to badanie statystyczne, to.. czemu nie.

December 23, 2011 09:04 PM

November 07, 2011

Dopierała Andrzej

2011-11-07 brother mfc5490CN: drukarka brother mfc 5490cn pod linuksem i.. ipv6.

Stara drukareczka HP 6540 się popsuła (uchwyt od czarnego tuszu przestał kontaktować), naprawa oczywiście nieopłacalna, a mi by się w domu przydał skaner, wiec… Nabyłem nową drukareczkę. Po przejrzeniu dostępnych opcji wybór padł na Brother MFC 5490CN
I - jak na razie nie mam co narzekać.
Drukowanie spod linuksa - ruszyło praktycznie od razu.
Skanowanie spod linuksa - również. Mimo iż po raz pierwszy w życiu konfigurowałem skaner pod linuksem.

A na dokładkę - drukarka działa również po ipv6…

Local> show ip v6

IPv6 is Enabled
IPv6 Static Address is Enabled
IPv6 Addresses are 2A02:848:A::XXXX:XXXX:XXXX:XXXX/64 (via Router)
                   FE80::XXXX:XXXX:XXXX:XXXX/64 (link-local)

The priority IP version of name resolving is IPv4

Będę musiał chyba firewalla wyklikać dla ipv6 :/

November 07, 2011 10:56 PM

September 09, 2011

Ogrodowczyk Wojciech

Koniec tej zabawy

Jak co bystrzejsi czytelnicy mogli zauważyć, nie pisuję już tu praktycznie nic, a zdjęcia tu umieszczane to jedynie opóźnione „przedruki” względem mojego konta na flickr. Kierując się więc brzytwą Okhama i zwykłym lenistwem...

September 09, 2011 08:12 AM

August 22, 2011

Dopierała Andrzej

2011-08-22 Lekko przerobiony multi router looking glass w php: Skrypt do przedstawiania na routerach.

Już kilka osób się mnie pytało jak zrobiłem http://lg.maverick.com.pl/.

Bazuję na lekko zmodyfikowanej wersji MRLG (Multi Router Looking Glass for PHP). Obecnie jego strona niestety nie działa - i oryginału nie mam do pobrania.

Moją zmodyfikowaną wersję umieściłem na mrlg-20091215.tgz, natomiast plik konfiguracyjny do niej na mrlg-config.php. Na pytania nie odpowiadam, w konfiguracji nie pomagam (bo nie mam czasu) - ale może komuś się przyda :).
Licencja - zgodnie z licencja oryginału - GPL.

Ale jak masz jakieś poprawki - podsyłaj :)

Wiem że brzydko zrobione, ale - było potrzebne na szybko i w parę godzin tylko na tyle mnie było stać.

Jak dodasz w swojej sieci kopię - zgłoś na traceroute.org - widoczność swojego miejsca w sieci się często przydaje :).

August 22, 2011 07:55 PM

August 21, 2011

Ogrodowczyk Wojciech

August 11, 2011

Ogrodowczyk Wojciech

August 05, 2011

Dopierała Andrzej

2011-08-05 Problematyczne ipv6 - dziwny resolver: problem z domenami z dodanym rekordem AAAA.

undefine@uml:~$ host aramin.net
aramin.net has address 42.1.94.0
;; Warning: Message parser reports malformed message packet.
;; connection timed out; no servers could be reached

i tak dla sporej części, o ile nie wszystkich adresów z dualstackiem - taki dziwny feature AP DSL-G604T w hotelu.

Do tej pory myślałem że dodanie rekordu AAAA nic nie psuje, teraz - sam się przekonałem że nie jest tak różowo, jak sie okazało że nie mogę się dostać na strony/serwery z dodanym AAAA. Na szczęście - można skorzystać z własnych albo googlowych dnsów.

Oczywiście prawidłowa odpowiedź to

undefine@uml:~$ host aramin.net
aramin.net has address 195.110.48.48
aramin.net has IPv6 address 2a01:5e00:2:52::30
aramin.net mail is handled by 0 mx.aramin.net.

August 05, 2011 04:55 PM

July 29, 2011

Ogrodowczyk Wojciech

July 27, 2011

Ogrodowczyk Wojciech

July 21, 2011

Ogrodowczyk Wojciech

July 14, 2011

Ogrodowczyk Wojciech

June 26, 2011

Dopierała Andrzej

2011-06-26 IPv6 na stronie: ipv6 na stronie

Co prawda po IPv6 day, ale.. wreszcie dołożyłem AAAA do mojej strony(i stron firmowych). Ciekawe co wybuchnie ;)

June 26, 2011 07:24 PM

June 17, 2011

Ogrodowczyk Wojciech

May 31, 2011

Ogrodowczyk Wojciech

Planet shot

Bcn planet shot

Eksperymentale ujęcie wychodka na szczycie świata, krok po...

May 31, 2011 11:44 AM

May 29, 2011

Ogrodowczyk Wojciech

March 12, 2011

Dopierała Andrzej

2011-03-12 IPv6-garsc-statystyk: kilka słów podsumowania o ruchu ipv6

Kilka statystyk z pewnego routerka. Zbierane ip6tables, w dłuższym okresie czasu. Wykresów nie daję, bo za mała próbka by ładnie wyglądało ;)

Dane z pewnej sieci osiedlowej w Poznaniu. IPv6 udostępnione klientom przez radvd. Głównie klienci “prywatni”.

Wejście:
2% - 6to4
pomijalne - PIX
24% - PLIX
3% - natywne IPv6 od Crowleya
69% - tunel z HE

Wyjście:
51% - 6to4(!)
6% - PIX
36% - PLIX
1% - Crowley
6% - tunel z HE.

Wnioski:
- podobnie jak w przypadku ipv4 duża część ruchu przypada na PLIX
- upload to głównie ruch kierowany do 6to4 - jak sądzę ruch p2p.
- bardzo duży download na tunelu z HE. Co prawda miałem trochę wątpliwości czy należy się w to bawić - to jednak obserwując ruch przy włączonym i przy wyłączonym tunelu widać że opóźnienia przez HE są często niższe. Pozatym - alternatywa to pchanie ruchu przez Crowleya, który.. również sporą część ruchu ma przez HE. HAWE jak na razie ipv6 nie dostarcza.

March 12, 2011 11:49 PM

February 22, 2011

Dopierała Andrzej

2011-02-22 IPv6 a 6to4: ipv6 6to4 sit0 routing ruch siec

Powolutku bawię się w wdrożenie IPv6 u pewnego ISP.

Na peeringach (w PIX i PLIX) ipv6 śmiga “natywnie”. Świata niestety jak na razie nikt nie dostarczył, więc leci tunelem z HE.

Do tego rozgłoszenie prefiksów do kilku testowych sieci - i troszkę ruchu widać.

W którymś momencie zauważyłem, że trochę ruchu leci do 6to4. Postawiłem więc bezpośredniego relaya(opis z http://wiki.debian.org/DebianIPv6) i…

mav-ipv6

Wniosek? Wbrew pozorom bardzo dużo (tak na oko 1/3) ruchu to ruch z relayami 6to4. Stąd zapewnienie dobrej komunikacji z nimi powinno być dosyć istotne przy udostępnianiu ipv6. Do testowego ip z którym obserwowałem ruch po ustawieniu bezpośredniego tunelowania 6to4 na moim routerze opóźnienia spadły z ok 80 do 50ms - a ruch wzrósł o kilkanaście procent.

(na wykresie jest widoczny wyłącznie ruch na tunelach - peeringi/polska leci natywnie, stąd nie mam prostej możliwości wyróżnienia go od ipv4)

February 22, 2011 11:06 PM

February 17, 2011

Dopierała Andrzej

2011-02-17 Rozkład ruchu na łączach: rozkład ruchu plix hawe tp pix

Taka mała ciekawostka.

Jest sobie mały operator. Świadczący głównie usługę dostępu do internetu dla “ludzi”. Pakiety - dosyć duże, po kilka/kilkadziesiąt megabitów, upload ciut mniejszy - po 2-3 megabity.
Ogólnie - zazwyczaj mało kto dociera do limitu w którąkolwiek ze stron.

Do tego jest troszkę hostingu i łącz biznesowych… Ale większośc to klienci indywidualni.

Łącza:
- peering w PIX-ie (http://www.pix.net.pl)
- peering w PLIX-ie (http://www.plix.pl)
- PBT HAWE (http://www.pbthawe.eu)
- Transmisję CDP Global od crowleya (http://www.crowley.pl)

i w którymś momencie na parę chwil pojawiła się testowa transmisja do TPSA - normalnie leci przez HAWE (i dalej styk z crowleyem).

Ruch - puszczony przez bgp prawie “samopas”. Lekkie preferencje by sterować ruchem na łączach zagranicznych (hawe/cdp), gdzieniegdzie unikanie problematycznych ścieżek - ale - można powiedzieć że rozkład jest prawie naturalny.

I teraz - procentowy wykres ruchu:
rozklad-lacz

Interesuje nas głównie download - uploadu jest niewiele - ok połowy downloadu, więc zazwyczaj mieści się w ramach kontraktu.

Co jest ciekawe… ok 30% ruchu zamyka się w plixie. Nawet trochę więcej.

PIX - jest malutki. poniżej 3% ruchu. Gdyby nie skala oraz fakt że jest prawie za darmo - nie było by go sensu trzymać.

HAWE i crowley - utrzymują się mniej więcej na zbliżonym poziomie - przerzucanie to głównie zmiany na ich upstreamach oraz “rzucanie” nimi (prepend przez community) by przerzucić na łącze gdzie dalej od kontraktu.

Przez jakiś czas była testowana tpsa. I tutaj niespodzianka - download był ledwo w okolicach 5% sumarycznego ruchu. Czyli - biorąc pod uwagę cenę - malutko. Z koleji upload to ok 20% ruchu - co w tej sytuacji oznaczało że było to jedyne łącze gdzie upload przekraczał download! I przypominam że to nie hosting, tylko głównie klienci indywidualni. Cóż - P2P rządzi.

February 17, 2011 11:59 AM

January 06, 2011

Dopierała Andrzej

2011-01-06 Konto w aliorbank: zakładanie konta w aliorbanku cz.1

Stwierdziłem że w mojej małej firemce przyda się kolejne konto. Obecne mam w mBanku, bo.. wiadomo - za darmo. No - prawie. 1zł za każdy przelew “na zewnątrz” - to już trochę w miesiącu wychodzi.

A Aliorbank ciągle kusi darmowym kontem, 5-cioma darmowymi przelewami w miesiącu i “premią” 50zł przy stanie konta 9k. Czyli więcej niż na lokacie w mbanku.

Z nowym rokiem - próbuję więc założyć konto.
Pierwsze wrażenia po przebrnięciu przez formularz?

  • Nie pozwala mi na wpisywanie polskich znaczków. Przeglądarka chrome. Po wklejeniu tekstu z polskimi znaczkami - ogonki znikają.
  • Do wybrania klasyfikacja usług… Ja w GUS-ie mam zgłoszoną 6202Z(działalność związana z doradztwem w zakresie informatyki - wg klasyfikacji z 2007 roku). A na stronie pozwalają na wybór pomiędzy.. 6201 a 6203.

Ale przebrnąłem - polskie znaczki jak sądzę poprawią mi w oddziale. O efektach pewnie poinformuję…

January 06, 2011 08:40 PM