text:
NEW: For a prettier blog interface, see the Wordpress version!
|Write function to automatically mirror a page to my hard disk {{Tasks:993}} (2004.04.28)
|Write pcmpl-arch {{Tasks:1030}} (2004.05.06)
|Fix emacspeak-config so that it doesn't speak my deleted characters. (2004.11.20)
|Fix nonexistent link problem: ../emacs/dev/emacs-wiki/emacs-wiki-publish.el (2004.12.18)
|Find out how to limit to unanswered mail {{Tasks:255}} (2004.01.11)
|Make screenshots {{Tasks:317}} (2004.03.21)
What I use Emacs for
- Email (Gnus)
- Programming
- Chess
- IRC (http://www.sourceforge.net/projects/erc)
- My website
- Editing, of course
- Speech synthesis through emacspeak
Like almost all newbies, I started out with pico, the editor that
comes with pine. pico was friendly. pico was easy to use. pico also
kept wrapping my lines, which is a Very Bad Idea when you're
programming. I discovered that
pico -w would turn such
undesirable behavior off, and
alias pico="pico -w "
became part of my .bashrc everywhere.
However, I felt mildly ashamed of pico. All the Unix books said I should learn how to use vi, so I did. vi was fun, too - vim, especially. I had my funky one-line ex commands, like :s%/foo/bar/g. I could go to any line with :linenumber. I regularly used :! to invoke shell commands. I liked the way it syntax-colored practically all the files I edited - even the more obscure ones - and I was even thinking of writing my own syntax files for the things it didn't handle yet.
I suppose it was sheer curiosity that made me try out Emacs. Emacs was an intellectual challenge. I found myself attracted to its intimidating complexity. I wanted to see if I could get the hang of it.
Emacs was surprisingly easy to use. I read through the tutorial. I even browsed through the info node in my spare time. I used the menu bar and the tool bar until I learned the different shortcuts and extended commands. It was pretty cool.
Then one summer, I opened the Emacs LISP intro manual. I got hooked. I started reading Emacs source code. I traced through functions. I wrote my own. I did more and more stuff in Emacs and I realized how much I had missed by using other editors.
Emacs is cool. =)
49. Automatically scheduling tasks onto TaskPool
(defadvice planner-create-task-from-buffer (before paul activate) "Automatically schedule task onto TaskPool as well as other projects." (if plan-page (unless (string-match plan-page "TaskPool") (setq plan-page (concat plan-page planner-multi-separator "TaskPool"))) (setq plan-page "TaskPool")))Here's another snippet that will unschedule tasks from TaskPool when you mark them completed with C-c C-x (planner-task-done). Nifty stuff, huh?
(defadvice planner-task-done (after paul activate) "Remove completed tasks from the TaskPool if that still leaves them linked." (let ((info (planner-current-task-info))) (when (planner-task-link-text info) ;; If it is linked to TaskPool _and_ at least one other thing (if (string-match planner-multi-separator (planner-task-link-text info)) (planner-multi-replan-task (planner-multi-make-link (planner-multi-filter-links "^TaskPool$" (planner-multi-task-link-as-list info) t))) ;; Else if it has a date and is linked to TaskPool (if (and (planner-task-date info) (string= (planner-task-link info) "TaskPool")) (planner-replan-task nil))))))原始的な計算機が、コンピューターの開発されるずっと以前に存在していた。 Primitive calculating machines existed long before computers were developed.
48. Adding an arbitrary extension to your planner files
Do you want all of your planner files to have a TXT extension so that they'll be searched by tools such as Google Desktop or Apple Spotlight?
Use the 'rename' tool to add .txt extensions to all of your files, or use the following code to rename all of your planner files from a running Planner setup:
(defun my-rename-planner-files () "Rename all my planner files to .txt if they don't have that extension yet." (interactive) (mapcar (lambda (file) (unless (string-match "\\.txt$" (cdr file)) (rename-file (cdr file) (concat (cdr file) ".txt")) (message "%s" (cdr file)))) (planner-file-alist)) (with-planner (emacs-wiki-refresh-file-alist)))Then add this to your ~/.emacs before you load Planner:
(setq emacs-wiki-ignored-extensions-regexp "\\.txt") (defadvice emacs-wiki-find-file (around extension activate) "Open the Emacs Wiki page WIKI by name. If COMMAND is non-nil, it is the function used to visit the file. If DIRECTORY is non-nil, it is the directory in which the Wiki page will be created if it does not already exist." (unless (interactive-p) (setq wiki (cons wiki (cdr (assoc wiki (emacs-wiki-file-alist)))))) ;; At this point, `wiki' is (GIVEN-PAGE FOUND-FILE). (if (cdr wiki) (let ((buffer (funcall (or command 'find-file) (cdr wiki)))) (if (= (prefix-numeric-value current-prefix-arg) 16) (with-current-buffer buffer (set (make-variable-buffer-local 'emacs-wiki-directories) (cons (file-name-directory (cdr wiki)) emacs-wiki-directories)) (set (make-variable-buffer-local 'emacs-wiki-file-alist) nil))) buffer) (let* ((dirname (or directory (emacs-wiki-maybe t) (car emacs-wiki-directories))) (filename (expand-file-name (car wiki) dirname))) (unless (file-exists-p dirname) (make-directory dirname t)) (funcall (or command 'find-file) (concat filename ".txt")))))新しいパソコンを買うつもりで金を溜めているんだ。 I am saving money in order to buy a new personal computer.
47. BBDB tags
Right, that tags thing looks like a good idea. It should be easy to hack into BBDB. I'll need to actually tag people, and then write an Emacs Lisp script that scans through all of the records, gathers them into categories, and then creates the list.
HEY. This might actually work. Here's a quick test of tags:
Use C-o to add a "tags" field to your BBDB records. This should be a space-delimited list of tags (case-sensitive for now). Call M-x sacha/planner-bbdb-insert-tags-alist to produce a list like the one above.
(defun sacha/bbdb-get-tags (record) "Return the tags for RECORD as a list." (let ((tags (bbdb-record-getprop record 'tags))) (when tags (split-string tags)))) (defun sacha/bbdb-test-tags (query tags) "Return non-nil if QUERY is a subset of TAGS." (let ((result t)) (while (and result query) (unless (member (car query) tags) (setq result nil)) (setq query (cdr query))) result)) (defun sacha/bbdb-search-tags-internal (records tags) "Return a list of RECORDS matching TAGS." (when (stringp tags) (setq tags (split-string tags))) (let (result) (while records (when (sacha/bbdb-test-tags tags (sacha/bbdb-get-tags (car records))) (setq result (cons (car records) result))) (setq records (cdr records))) result)) (defun sacha/bbdb-search-tags (tags) "Display all the records that match TAGS." (interactive "MTags: ") (bbdb-display-records (sacha/bbdb-search-tags-internal (bbdb-records) tags))) (defun sacha/planner-bbdb-link (record) "Return a link to RECORD." (or (bbdb-record-getprop record 'plan) ;; From a BBDB entry with a plan page; use that. Yay! (concat "[[bbdb://" (emacs-wiki-replace-regexp-in-string " " "." (bbdb-record-name record)) "][" (bbdb-record-name record) "]]"))) (defun sacha/bbdb-get-tags-index () "Return a list of tags and records." (let ((tags-alist '()) (records (bbdb-records)) tags entry list link) (while records (setq tags (sacha/bbdb-get-tags (car records))) (while tags (setq entry (assoc (car tags) tags-alist)) (setq list (cdr entry)) (add-to-list 'list (car records)) (if entry (setcdr entry list) (add-to-list 'tags-alist (cons (car tags) list))) (setq tags (cdr tags))) (setq records (cdr records))) tags-alist)) (defun sacha/planner-bbdb-insert-tags-alist (&optional tag-alist) "Insert TAG-ALIST into the current buffer." (interactive) (unless tag-alist (setq tag-alist (sacha/bbdb-get-tags-index))) (insert (mapconcat (lambda (item) (concat (car item) " | " (mapconcat 'sacha/planner-bbdb-link (cdr item) ","))) tag-alist "\n")))
To think that only took me an hour of leisurely coding (including tagging my contact information)...
昨年度のコンピューターからの利益は、今年度分よりも10%近く多かった。 Profit on computers for the previous year was nearly ten percent higher than the current year.
46. Modification of johnsu01's scoring
The following code allows you to sort tasks based on regexp matches against the line. It's fairly simple, but may give people ideas about fancier task sorting.
(setq planner-sort-tasks-key-function 'planner-sort-tasks-by-score) (defvar planner-score-rules '(("read" . 50)) "Alist of planner scoring rules of the form (regexp . score-value). Tasks with higher scores are listed first.") (defun planner-sort-tasks-by-score () "Sort tasks by the rule in the table." (let ((score 0) (case-fold-search t) (line (buffer-substring-no-properties (line-beginning-position) (line-end-position)))) (mapc (lambda (item) (when (string-match (car item) line) (setq score (- score (cdr item))))) planner-score-rules) score))
45. flashcard-import-from-kill
The following code snippet makes it easier for me to import segments from my dictionary files. It uses ../emacs/flashcard.el.
(defun flashcard-import-from-kill (deck) "Import cards for DECK from the clipboard, which should be colon-separated. Question : Answer" (interactive (list flashcard-deck)) (unless (eq major-mode 'flashcard-mode) (error "You're not in a deckfile.")) (with-temp-buffer (yank) (goto-char (point-min)) (while (re-search-forward "^ *\\(.*\\) +: +\\(.*\\)$" nil t) (flashcard-add-card deck (flashcard-make-card (match-string 1) (match-string 2))))) (when (and (interactive-p) (not flashcard-card)) (flashcard-ask)))../emacs/flashcard-config.el
44. Proof of concept: Deleting private tasks
It's easy to tweak Planner. For example, the following two lines of code delete all lines that contain {{private}} before publishing. Your planner pages will be fine, but the published HTML won't contain them.
(add-to-list 'planner-publishing-markup (lambda () (delete-matching-lines "{{private}}"))) (planner-update-wiki-project)Fun, isn't it?
43. Straight redefinition of describe-function-1
(defun describe-function-1 (function) (let* ((def (if (symbolp function) (symbol-function function) function)) file-name string (beg (if (commandp def) "an interactive " "a "))) (setq string (cond ((or (stringp def) (vectorp def)) "a keyboard macro") ((subrp def) (if (eq 'unevalled (cdr (subr-arity def))) (concat beg "special form") (concat beg "built-in function"))) ((byte-code-function-p def) (concat beg "compiled Lisp function")) ((symbolp def) (while (symbolp (symbol-function def)) (setq def (symbol-function def))) (format "an alias for `%s'" def)) ((eq (car-safe def) 'lambda) (concat beg "Lisp function")) ((eq (car-safe def) 'macro) "a Lisp macro") ((eq (car-safe def) 'autoload) (setq file-name (nth 1 def)) (format "%s autoloaded %s" (if (commandp def) "an interactive" "an") (if (eq (nth 4 def) 'keymap) "keymap" (if (nth 4 def) "Lisp macro" "Lisp function")) )) ((keymapp def) (let ((is-full nil) (elts (cdr-safe def))) (while elts (if (char-table-p (car-safe elts)) (setq is-full t elts nil)) (setq elts (cdr-safe elts))) (if is-full "a full keymap" "a sparse keymap"))) (t ""))) (princ string) (with-current-buffer standard-output (save-excursion (save-match-data (if (re-search-backward "alias for `\\([^`']+\\)'" nil t) (help-xref-button 1 'help-function def))))) (or file-name (setq file-name (symbol-file function))) (when (equal file-name "loaddefs.el") ;; Find the real def site of the preloaded function. ;; This is necessary only for defaliases. (let ((location (condition-case nil (find-function-search-for-symbol function nil "loaddefs.el") (error nil)))) (when location (with-current-buffer (car location) (goto-char (cdr location)) (when (re-search-backward "^;;; Generated autoloads from \\(.*\\)" nil t) (setq file-name (match-string 1))))))) (when (and (null file-name) (subrp def)) ;; Find the C source file name. (setq file-name (if (get-buffer " *DOC*") (help-C-file-name def 'subr) 'C-source))) (when file-name (princ " in `") ;; We used to add .el to the file name, ;; but that's completely wrong when the user used load-file. (princ (if (eq file-name 'C-source) "C source code" file-name)) (princ "'") ;; Make a hyperlink to the library. (with-current-buffer standard-output (save-excursion (re-search-backward "`\\([^`']+\\)'" nil t) (help-xref-button 1 'help-function-def function file-name)))) (princ ".") (terpri) (when (commandp function) (let* ((remapped (command-remapping function)) (keys (where-is-internal (or remapped function) overriding-local-map nil nil)) non-modified-keys) ;; Which non-control non-meta keys run this command? (dolist (key keys) (if (member (event-modifiers (aref key 0)) '(nil (shift))) (push key non-modified-keys))) (when remapped (princ "It is remapped to `") (princ (symbol-name remapped)) (princ "'")) (when keys (princ (if remapped " which is bound to " "It is bound to ")) ;; FIXME: This list can be very long (f.ex. for self-insert-command). ;; If there are many, remove them from KEYS. (if (< (length non-modified-keys) 10) (princ (mapconcat 'key-description keys ", ")) (dolist (key non-modified-keys) (setq keys (delq key keys))) (if keys (progn (princ (mapconcat 'key-description keys ", ")) (princ ", and many ordinary text characters")) (princ "many ordinary text characters")))) (when (or remapped keys non-modified-keys) (princ ".") (terpri)))) (let* ((arglist (help-function-arglist def)) (doc (documentation function)) (usage (help-split-fundoc doc function))) (with-current-buffer standard-output ;; If definition is a keymap, skip arglist note. (unless (keymapp def) (let* ((use (cond (usage (setq doc (cdr usage)) (car usage)) ((listp arglist) (format "%S" (help-make-usage function arglist))) ((stringp arglist) arglist) ;; Maybe the arglist is in the docstring of the alias. ((let ((fun function)) (while (and (symbolp fun) (setq fun (symbol-function fun)) (not (setq usage (help-split-fundoc (documentation fun) function))))) usage) (car usage)) ((or (stringp def) (vectorp def)) (format "\nMacro: %s" (format-kbd-macro def))) (t "[Missing arglist. Please make a bug report.]"))) (high (help-highlight-arguments use doc))) (insert (car high) "\n") (setq doc (cdr high)))) (let ((obsolete (and ;; function might be a lambda construct. (symbolp function) (get function 'byte-obsolete-info)))) (when obsolete (princ "\nThis function is obsolete") (when (nth 2 obsolete) (insert (format " since %s" (nth 2 obsolete)))) (insert ";\n" (if (stringp (car obsolete)) (car obsolete) (format "use `%s' instead." (car obsolete))) "\n")) (insert "\n" (or doc "Not documented."))) (unless file-name (insert "\n\nDefinition hyperlink not found, so inserting definition here.\n\n" (pp-to-string (symbol-function function))))))))
Chat on sterling.freenode.net#emacs
42. Code to print function definitions for code not associated with a file
This needs to be tweaked so that it notices when code has been redefined.
(defadvice describe-function-1 (after sacha activate) (let ((def (if (symbolp function) (symbol-function function) function)) file-name) ;; START OF CODE EXTRACTED FROM describe-function-1 (and (eq (car-safe def) 'autoload) (setq file-name (nth 1 def))) (or file-name (setq file-name (symbol-file function))) (when (equal file-name "loaddefs.el") ;; Find the real def site of the preloaded function. ;; This is necessary only for defaliases. (let ((location (condition-case nil (find-function-search-for-symbol function nil "loaddefs.el") (error nil)))) (when location (with-current-buffer (car location) (goto-char (cdr location)) (when (re-search-backward "^;;; Generated autoloads from \\(.*\\)" nil t) (setq file-name (match-string 1))))))) (when (and (null file-name) (subrp def)) ;; Find the C source file name. (setq file-name (if (get-buffer " *DOC*") (help-C-file-name def 'subr) 'C-source))) ;; START NEW CODE (or file-name (with-current-buffer standard-output (insert "\n\nDefinition file not found, so inserting definition here.\n\n") (prin1 (symbol-function function))))))
Chat with :edrx on sterling.freenode.net#emacs
41. Japanese flashcards
This extracts all kanji in the buffer and converts them to the format expected by flashcard.el.
(defun sacha/kanji/get-ordered-kanji-list () "Return a list of characters in the buffer." (goto-char (point-min)) (let (kanji-list) (while (not (eobp)) (let ((c (char-after (point)))) (when (>= c ?亜) (add-to-list 'kanji-list c))) (forward-char 1)) kanji-list)) (defun sacha/kanji/to-flashcard-j2e (&optional list) "Return a Japanese-English flashcard set. If LIST is non-nil, use that instead of the current buffer." (interactive (list (sacha/kanji/get-ordered-kanji-list))) (unless list (setq list (sacha/kanji/get-ordered-kanji-list))) (let ((result (with-current-buffer (find-file-noselect "/usr/share/edict/kanjidic") (mapconcat (lambda (kanji) (goto-char (point-min)) (when (re-search-forward (format "^%c.*?{\\(.*\\)}" kanji) nil t) (format "%c : %s\n" kanji (replace-regexp-in-string "}\\s-+{" "," (match-string 1))))) list "")))) (if (interactive-p) (kill-new result) result))) (defun sacha/flashcard-method-leitner-check-answer (card answer) "Check answer for correctness. Allow multiple correct answers and provide feedback." (if (member answer (split-string (flashcard-card-answer card) ",")) (progn (flashcard-insert "Correct! Answer is:\n" (propertize (flashcard-card-answer card) 'face 'flashcard-answer-face 'rear-nonsticky t) "\n" "\n") t) (flashcard-insert "The correct answer is:\n" (propertize (flashcard-card-answer card) 'face 'flashcard-answer-face 'rear-nonsticky t) "\n" "\n") (y-or-n-p "Was your answer correct? "))) (setq flashcard-method-check-answer-function 'sacha/flashcard-method-leitner-check-answer) (add-to-list 'auto-mode-alist '("\\.deck\\'" . flashcard-mode)) (add-hook 'flashcard-mode-hook 'flashcard-add-scroll-to-bottom) (add-hook 'flashcard-positive-feedback-functions 'flashcard-feedback-highlight-answer) (add-hook 'flashcard-positive-feedback-functions 'flashcard-feedback-congratulate) (add-hook 'flashcard-positive-feedback-functions 'flashcard-method-leitner-positive-feedback)
40. More hacks for mangling Japanese CSV
This is for use with kdrill.
(defun sacha/kanji/get-ordered-kanji-list () (let (kanji-list) (while (not (eobp)) (let ((c (char-after (point)))) (cond ((= c ?\")) ((= c ?\n)) ((= c ?:) (forward-line 1) (forward-char -1)) (t (add-to-list 'kanji-list c)))) (forward-char 1)) kanji-list)) (defun sacha/kanji/ordered-usefile-to-kill () (interactive) ;; Look up kanji in kanjidic (let ((list (sacha/kanji/get-ordered-kanji-list))) (kill-new (with-current-buffer (find-file-noselect "/usr/share/edict/kanjidic") (mapconcat (lambda (kanji) (goto-char (point-min)) (when (search-forward (char-to-string kanji) nil t) (skip-syntax-forward " ") (buffer-substring-no-properties (point) (and (skip-syntax-forward "^ ") (point))))) list "\n")))))
39. Refactoring Planner annotation code
Many planner files just contain code for creating hyperlinks from the current buffer. This does not have anything to do with the idea of planning, but simply makes planning information available from more buffers.
If we separate this functionality from planner.el, we can make it easier for people to play around with context-sensitive hyperlinking without having to deal with planner's complexity.
To make it easy for other people to play around with this, the composition function needs to be flexible. Annotations should be returned as (uri text) pairs, and a -composition-function can put the two together in the appropriate format, escaping as necessary. Highlighting will be provided in a separate file that defines a minor mode that can be placed anywhere.
Other people's code for creating annotations, then, would just involve calling -get-uri, or -as-kill, or -to-string. We can use the hook mechanism to get the appropriate annotations for the current buffer. -core.el will provide a method for resolving links, and it should be something that can be used as browse-url-browser-function.
planner code also specifies how to mark up links. If we're moving the annotation code into a layer that doesn't know about publishing, what will happen to the code? In that case, we will define URL transformation functions in either emacs-wiki or planner. Yes, that would work...
I need to think of a good name for it. uri.el? Yeah, that sounds okay.
38. Updating the timelog
I often update my task descriptions. We haven't found a neat way to do this in-buffer, so I use planner-edit-task-description. However, if I update the task description or replan a task, my timelog data gets out of date. This code snippet updates all matching tasks in the timelog, and can serve as an example for code that updates things after a task is edited.
(defadvice planner-replan-task (around sacha/planner-timeclock activate) "Update the timelog as well. Warning! Do not have duplicate tasks!" (let ((info (planner-current-task-info))) ad-do-it (with-current-buffer (find-file-noselect timeclock-file) (goto-char (point-min)) (while (re-search-forward (concat "^. [^ ]+ [^ ]+ " "\\(" (regexp-quote (planner-task-plan info)) "\\)" ": " (regexp-quote (planner-task-description info)) "$") nil t) (replace-match (ad-get-arg 0) t t nil 1)) (save-buffer) (kill-buffer (current-buffer))))) (defadvice planner-edit-task-description (around sacha/planner-timeclock activate) "Update the timelog as well. Warning! Do not have duplicate tasks!" (let ((info (planner-current-task-info))) ad-do-it (with-current-buffer (find-file-noselect timeclock-file) (goto-char (point-min)) (while (re-search-forward (concat "^. [^ ]+ [^ ]+ " (regexp-quote (planner-task-plan info)) ": " "\\(" (regexp-quote (planner-task-description info)) "\\)" "$") nil t) (replace-match (ad-get-arg 0) t t nil 1)) (setq planner-timeclock-current-task (ad-get-arg 0)) (save-buffer) (kill-buffer (current-buffer)))))
35. emacs-wiki snippet for getting a list of images from a dired buffer
(defun sacha/emacs-wiki-marked-images-as-kill () "Return a list of images ready to be inserted into a wiki page." (interactive) (kill-new (mapconcat 'emacs-wiki-make-link (dired-get-marked-files) "\n")))bash script for timestamping and thumbnailing pictures
#!/bin/bash SIZE=320x240 while [ -n "$1" ]; do if [ -f $1 ]; then DATE=$(date +"%Y%m%d-%H%M%S" --reference="$1") EXT=$(echo "$1" | sed 's/.*\././') echo $1 cp $1 "$DATE$EXT" cp "$DATE$EXT" "thumb-$DATE$EXT" touch --reference="$1" "$DATE$EXT" if [ "$EXT" == ".jpg" ]; then convert -size $SIZE -resize $SIZE "$DATE$EXT" "thumb-$DATE$EXT" touch --reference="$1" "thumb-$DATE$EXT" fi fi shift done
34. sacha/planner-create-note-from-task
;; Improvements: ;; - Link back to the task? ;; - Make it possible to have your note on another page? (defun sacha/planner-create-note-from-task () "Create a note based on the current task." (interactive) (let* ((task-info (planner-current-task-info)) note-num) (when task-info (setq note-num (planner-create-note (planner-page-name))) (save-excursion (save-window-excursion (when (planner-find-task task-info) (planner-edit-task-description (concat (planner-task-description task-info) " " (planner-make-link (concat (planner-page-name) "#" (number-to-string note-num)) "...")))))) (insert (planner-task-description task-info) "\n\n")))) ;; I use F9 p to go to today's page, anyway. (define-key planner-mode-map (kbd "C-c C-n") 'sacha/planner-create-note-from-task)../emacs/planner-config.el
33. ee-send-to-erc-channel
<edrx> (defun ee-send-to-erc-channel (channel line) <edrx> (if (not (get-buffer channel)) <edrx> (error "There's no buffer called \"%s\"" channel)) <edrx> (if (not (eq 'erc-mode (with-current-buffer channel major-mode))) <edrx> (error "The buffer \"%s\" is not an ERC buffer")) <edrx> (switch-to-buffer channel) <edrx> (goto-char (point-max)) <edrx> (insert line) <edrx> (erc-send-current-line)) <edrx> ;; <edrx> (defun find-fsbotanswer (question) <edrx> (interactive "sQuestion: ") <edrx> (ee-send-to-erc-channel "fsbot" question)) <edrx> ;; <edrx> ;; Example: (find-fsbotanswer "conkeror?")Chat on niven.freenode.net#emacs
32. Emacs lisp snippet for browsing referrer logs
(defun sacha/ffap-quick () (interactive) (save-window-excursion (save-excursion (ffap))))This makes browsing the output of ref.pl (previously blogged; it just extracts the referrer) much easier. I local-set-key it to RET. Hitting RET twice opens the URL as a w3m tab in the background.
31. Marking up note headlines with a permalink
(defun sacha/planner-markup-note () "Replace note with marked-up span." (let ((id (concat emacs-wiki-bare-digits-anchor-prefix (match-string 1))) (val (match-string 1))) (replace-match (save-match-data (format "#%s\n** %s " id (planner-make-link (concat (emacs-wiki-page-name) "#" val) (concat val "."))))))) (defalias 'planner-markup-note 'sacha/planner-markup-note)
30. Navigating the kill ring
Snippet from bojohan:
(defun yank-rpop (arg) (interactive "*p") (yank-pop (- arg)))Map this to M-Y and you'll be all set.
29. Etask: Gantt charts for Emacs
Wow, pretty! I should check this out...
28. AAAAARRRRRRRRGGGGGHHHH! I hate open source! In the nicest way possible, but still...
ARGH! I hate open source. <sniff> In the nicest way possible. <sniff> So I decided to be nice <sniff> and work on command completion in Emacs for the tla version control system <sniff> and I Google to check if it had been done before <sniff> but only come across messages saying people were interested in doing it... <sniff> Pour a few hours into it <sniff> adding completion for _every_ _darn_ _command_ <sniff> and a day after posting it on gnu.emacs.sources and the arch mailing list <sniff> I get a note asking how it's different from an existing module listed on the wiki <sniff!> And the existing implementation is more flexible, too! <sniff> (Although not as pretty in terms of coding conventions.) Story of my life, really, <sniff> every time I get a good idea <sniff> and work on it <sniff> someone's gone and done it <sniff> and better than I would've.
Chat on Ede.NL.EU.:.Org#linuxhelp
27. pcmpl-arch.el
All the commands documented in tla help can be completed using ../emacs/vc-arch/pcmpl-arch.el, a programmable completion module for the arch version control system. I'm getting the hang of pcomplete now... =)
26. Heavily tweaked w3m
I've decided to do even more things the Emacs Way. Emacs-w3m is a lot more customizable than Mozilla. This is Emacs we're talking about after all, so it's no surprise. ;)
I've set up a heavily tweaked keymap that might fit the way I browse: an insane number of tabs and a lot of remembering. The default keymaps favor QWERTY, but I've tweaked it for my Dvorak keyboard. Here are a few thoughts.:
, and . cycle through the tabs HTNS (all caps) navigate through the page per line tn scroll through the page like DEL and SPC r rememberBy default, pages open in new tabs in the background.
See linked file for more details.
25. sacha/try-expand-emacs-wiki-name
(defun sacha/try-expand-emacs-wiki-name (old) "Expand a wiki name." (unless old (he-init-string (he-dabbrev-beg) (point)) (setq he-expand-list (if (derived-mode-p 'emacs-wiki-mode) (delq nil (mapcar (lambda (item) (when (string-match (concat "^" (regexp-quote he-search-string)) (car item)) (planner-make-link (car item)))) (emacs-wiki-file-alist)))))) (while (and he-expand-list (or (not (car he-expand-list)) (he-string-member (car he-expand-list) he-tried-table t))) (setq he-expand-list (cdr he-expand-list))) (if (null he-expand-list) (progn (if old (he-reset-string)) nil) (progn (he-substitute-string (car he-expand-list) t) (setq he-expand-list (cdr he-expand-list)) t)))../../notebook/emacs/hippie-config.el
24. sacha/fix-tla-log {{04.04.21,EmacsHacks}} 11:17
(defun sacha/fix-tla-log () "Correct a wrong commit. Run this inside the arch subdirectory for the patch in your repository, not your project tree." ;; Copy the log file (let* ((directory (car (file-expand-wildcards "*.patches"))) modes (log-file (car (file-expand-wildcards (concat (file-name-as-directory directory) "[email protected]/patch-log/patch-*")))) (tar-file (car (file-expand-wildcards "*.tar.gz"))) log-md5 tar-md5) (when directory (if (file-newer-than-file-p "log" log-file) (progn (delete-file log-file) (copy-file "log" log-file)) (delete-file "log") (copy-file log-file "log")) ;; Recreate the tar.gz (delete-file tar-file) (call-process "tar" nil nil nil "zcvf" tar-file directory) ;; Calculate checksums (with-temp-buffer (call-process "md5sum" nil t nil "log" tar-file) (goto-char (point-min)) (re-search-forward "^\\([^ ]+\\)\\s-+log" nil t) (setq log-md5 (match-string 1)) (re-search-forward "^\\([^ ]+\\)" nil t) (setq tar-md5 (match-string 1))) (with-temp-buffer (setq modes (file-modes "checksum")) (insert-file-contents "checksum") (goto-char (point-min)) (re-search-forward "^Signature-for") (delete-region (point-min) (match-beginning 0)) (re-search-forward "^md5\\s-+log\\s-+\\([^ ]+\\)$") (replace-match log-md5 t t nil 1) (re-search-forward "^md5\\s-+.+?\\.tar\\.gz\\s-+\\([^ ]+\\)$") (replace-match tar-md5 t t nil 1) (when (re-search-forward "BEGIN PGP SIGNATURE" nil t) (delete-region (line-beginning-position) (point-max))) (let ((pgg-output-buffer (current-buffer))) (pgg-sign t)) (delete-file "checksum") ;; Sign the checksum (write-file "checksum") (set-file-modes "checksum" modes)))))
23. emacs-wiki-link-url: return relative links
(defadvice emacs-wiki-link-url (around sacha activate) "Return relative links if possible." ad-do-it (when ad-return-value (unless (emacs-wiki-wiki-url-p ad-return-value) (setq ad-return-value (file-relative-name ad-return-value (if (string-match "public_html" ad-return-value) "../../public_html/notebook/plans" "../../notebook/plans"))) (when (and sacha/emacs-wiki-use-absolute-url-flag emacs-wiki-publishing-p) (setq ad-return-value (w3m-expand-url ad-return-value "http://sacha.sachachua.com/notebook/wiki/"))))))
22. Scheduling tasks in the diary
(defun sacha/planner-diary-schedule-task (time) "Add a diary entry for the current task at TIME." (interactive "MTime: ") (save-window-excursion (save-excursion (save-restriction (let ((info (planner-current-task-info))) (sacha/planner-diary-add-entry (planner-task-date info) (concat time " | " (planner-task-description info) ""))))))) (defun sacha/planner-diary-add-entry (date text &optional annotation) "Prompt for a diary entry to add to `diary-file'." (interactive (list (if (or current-prefix-arg (not (string-match planner-date-regexp (planner-page-name)))) (planner-read-date) (planner-page-name)) (read-string "Diary entry: "))) (save-excursion (save-window-excursion (make-diary-entry (concat (let ((cal-date (planner-filename-to-calendar-date date))) (calendar-date-string cal-date t t)) " " text (or annotation (let ((annotation (run-hook-with-args-until-success 'planner-annotation-functions))) (if annotation (concat " " annotation) ""))))) (planner-goto date) (planner-diary-insert-diary-maybe))))../../notebook/emacs/planner-config.el
21. Ignoring orkut addresses in BBDB
(defun sacha/bbdb-canonicalize-net-hook (addr) "Do not notice [email protected] addresses." (cond ((null addr) addr) ((string-match "[email protected]\\.com" addr) nil) (t addr))) (setq bbdb-canonicalize-net-hook 'sacha/bbdb-canonicalize-net-hook)../../notebook/emacs/bbdb-config.el
20. bbdb: prefix for sacha/try-expand-factoid-from-bbdb
To control expansion further, I've made a bbdb: prefix required. This will allow me to still properly use dabbrev expansion.
;; Particularly fun with ERC. I am now a bot! (defun sacha/try-expand-factoid-from-bbdb (old) "Try to expand from BBDB. If OLD is non-nil, cycle through other possibilites." (unless old ;; First time, so search through the BBDB records for the factoid. (progn (he-init-string (he-dabbrev-beg) (point)) (setq he-expand-list nil) (when (string-match "bbdb:\\(.+\\)" he-search-string) (setq he-search-string (match-string 1 he-search-string)) (mapc (lambda (item) (setq he-expand-list (append he-expand-list (list (bbdb-record-getprop item 'blog)))) (setq he-expand-list (append he-expand-list (list (bbdb-record-getprop item 'web)))) (setq he-expand-list (append he-expand-list (list (car (bbdb-record-net item))))) (setq he-expand-list (append he-expand-list (list (bbdb-record-getprop item 'notes))))) (let ((notes (cons '* he-search-string))) (bbdb-search (bbdb-records) he-search-string he-search-string he-search-string notes nil))) (setq he-expand-list (delq nil he-expand-list))))) (while (and he-expand-list (or (not (car he-expand-list)) (he-string-member (car he-expand-list) he-tried-table t))) (setq he-expand-list (cdr he-expand-list))) (if (null he-expand-list) (progn (if old (he-reset-string)) nil) (progn (he-substitute-string (car he-expand-list) t) (setq he-expand-list (cdr he-expand-list)) t)))../../notebook/emacs/hippie-config.el
19. Local file links should be transformed to relative file links if possible
(defadvice emacs-wiki-markup-link (around sacha activate) "Resolve the matched wiki-link into its ultimate <a href> form. Images used the <img> tag." ;; avoid marking up urls that appear to be inside existing HTML (when (and (not (eq (char-after (point)) ?\")) (not (eq (char-after (point)) ?\>))) (let* (string (wiki-link (match-string 0)) (url (emacs-wiki-link-url wiki-link)) (name (emacs-wiki-escape-html-string (emacs-wiki-wiki-visible-name wiki-link)))) (when url (unless (emacs-wiki-wiki-url-p url) (setq url (file-relative-name url (if (string-match "public_html" url) "../../public_html/notebook/plans" "../../notebook/plans"))))) (setq string (if (null url) (if (and emacs-wiki-serving-p (emacs-wiki-editable-p (emacs-wiki-wiki-base wiki-link))) (format "<a class=\"nonexistent\" href=\"editwiki?%s\">%s</a>" (emacs-wiki-wiki-base wiki-link) name) (format "<a class=\"nonexistent\" href=\"%s\">%s</a>" emacs-wiki-maintainer name)) (if (save-match-data (string-match emacs-wiki-image-regexp url)) (if (string-equal url name) (format "<img src=\"%s\" />" url) (format "<img src=\"%s\" alt=\"%s\" />" url name)) (if (save-match-data (string-match emacs-wiki-image-regexp name)) (format "<a href=\"%s\"><img src=\"%s\" /></a>" url name) (format "<a href=\"%s\">%s</a>" url name))))) (add-text-properties 0 (1- (length string)) '(rear-nonsticky (read-only) read-only t) string) (setq ad-return-value string))))../../notebook/emacs/emacs-wiki-config.el
18. sacha/acm-submit-problem
(defun sacha/submit-acm-problem () (interactive) (let ((buffer (current-buffer))) (gnus-fetch-group "mail.judge-acm") (gnus-summary-post-news) (save-excursion (when (re-search-forward "--text follows this line--" nil t) (forward-line) (insert-buffer-substring buffer)))))../../.emacs
17. sacha/list-web-stats
Foo bar baz qux ba
(defun sacha/list-web-stats (prefix) (interactive (list current-prefix-arg)) (goto-char (point-min)) (let ((results) referrer page) (while (re-search-forward "GET \\([^ ]+\\) [^\"]+\"[^\"]+\"\\([^\"]+\\)" nil t) (setq page (match-string 1)) (setq referrer (match-string 2)) (when (string-match "\\(google\\.[^/]+\\)/search.+?q=\\([^&]+\\)" referrer) (setq referrer (concat (match-string 1 referrer) "://" (match-string 2 referrer)))) (add-to-list 'results (if prefix (concat page " " referrer) (concat referrer " " page)))) (setq results (sort results 'string<)) (with-current-buffer (get-buffer-create "*Web stats*") (erase-buffer) (while results (insert (car results) "\n") (setq results (cdr results))) (pop-to-buffer (current-buffer)))))
16. total-difference
(defun sacha/total-difference (list) "Computes the sum of the differences between successive items in LIST." (let ((distance 0)) (while (cdr list) (setq distance (+ (abs (- (car list) (car (cdr list)))) distance)) (setq list (cdr list))) distance))I used this to calculate the total distance travelled by a read/write head given the list of tracks.
15. Display subject on the first line, dynamically
;;; gnus-summary-update-subject.el --- Display subject on the first line, dynamically ;;; Time-stamp: <2004-03-07 18:02:03 bojohan> ;; <http://www.dd.chalmers.se/~bojohan/emacs/gnus-summary-update-subject.html> ;; Modified by Sacha to work with subjects anywhere in the summary line. ;;; Code: (defvar gnus-summary-update-subject-overlay nil) (defvar gnus-summary-update-subject-hide-overlay nil) (setq gnus-summary-same-subject (propertize " " 'gnus-summary-same-subject t)) (defvar gnus-summary-update-subject-thread-marker ">") (defun gnus-summary-update-subject (&optional window start) (when gnus-summary-update-subject-overlay (save-excursion (goto-char (or start (window-start))) (when (re-search-forward gnus-summary-update-subject-thread-marker (line-end-position) t) (if (not (text-property-any (line-beginning-position) (line-end-position) 'gnus-summary-same-subject t)) (progn (delete-overlay gnus-summary-update-subject-overlay) (delete-overlay gnus-summary-update-subject-hide-overlay)) (let ((subject (gnus-summary-subject-string (gnus-summary-article-number)))) (move-overlay gnus-summary-update-subject-hide-overlay (+ (point) 2) (+ (point) 2 (length subject))) (move-overlay gnus-summary-update-subject-overlay (point) (1+ (point))) ;;(overlay-put gnus-summary-subject-overlay 'window (selected-window)) (overlay-put gnus-summary-update-subject-hide-overlay 'invisible t) (overlay-put gnus-summary-update-subject-hide-overlay 'intangible t) (overlay-put gnus-summary-update-subject-overlay 'after-string subject))))))) (defun gnus-summary-update-subject-setup () (add-hook 'window-scroll-functions 'gnus-summary-update-subject nil t) (set (make-local-variable 'gnus-summary-update-subject-overlay) (make-overlay 0 0)) (set (make-local-variable 'gnus-summary-update-subject-hide-overlay) (make-overlay 0 0))) (add-hook 'gnus-summary-prepared-hook 'gnus-summary-update-subject-setup) (defadvice gnus-summary-position-point (after summary-update-subject activate) (gnus-summary-update-subject)) (provide 'gnus-summary-update-subject) ;;; gnus-summary-update-subject.el ends here../../notebook/emacs/gnus-summary-update-subject.el
14. nowikilink
It would be nice to have a tag that turns off implicit wikiname linking...
13. ERC pseudo-AI assisted IRC help
<sachac> Hmm. That gives me another nifty ERC idea - if we annotate BBDB records with timezones, we should be able to greet people good morning/day/evening appropriately. Plus points for greetings in native languages! ;) <sachac> Now that's just insane, really. <laugh> <arete> *augh* <arete> laugh too <arete> sacha: I'm sure you'll have it done by tomorrow ;) <myrkraverk> sachac: that could be nice, yes <myrkraverk> ,there is also an evil place without a name -- it does not have emacs <fsbot> Added entry to the term "there" <plaisthos> ,now <fsbot> try: Acknowledgments NowPlaying PostItNow WikiAcknowledgments WikiNow <sachac> arete: Well, I've been thinking of rule-based matching on privmsgs received, with responses suggested in another buffer for easy selection with keysequence or mouse... =) <Lukhas> sachac: good idea <arete> hehe yeah, saw you mention it the other day <arete> just one step away from eliza =P <sachac> arete: I'm just thinking of how to do it nicely so that the matches don't take a terribly long time. I suppose match-string is my friend. I can build the regexp at the start, match it constantly, then match again based on the match string... <delYsid> ,df rx <fsbot> rx is a Lisp macro in `rx'. <fsbot> (rx REGEXP) <fsbot> Translate a regular expression REGEXP in sexp form to a regexp string. <fsbot> See also `rx-to-string' for how to do such a translation at run-time. <fsbot> The following are valid subforms of regular expressions in sexp <fsbot> notation. <fsbot> STRING ..[Type ,more] <sachac> arete: ... but of course that means I'll be working as a stateless machine for now. Oh well. Actually, no, the functions can keep state on their own; I just won't be able to add new keywords without recompiling the regular expression, which shouldn't be too hard. <myrkraverk> sachac: I guess the best way for the greeting is some standard text that gets translated at other ercs <arete> don't forget to weight the chosen responses so you don't have to look through them all each time the same choices come up =) <delYsid> sachac: use rx-to-string and a variable... <sachac> myrkraverk: Actually, that will hook into my "hi" thing... <myrkraverk> oh, k, then <sachac> myrkraverk: ERC should not only check which of your pals are online, but also which you haven't greeted yet, and people who aren't pals but who have greated you specifically. =) <sachac> I haven't written said "hi" thing yet, though. <sachac> Err. <sachac> Greeted. <sachac> Grrr. <sachac> myrkraverk: Ideally, ERC should compile a list of people to say Hi to, and hi them all on one line, appending a generic ", world" at the end or something like that. =) <sachac> myrkraverk: An extension to BBDB could have custom greetings for hi. For example, I greet some people in other languages. <myrkraverk> sachac: you have too many ppl to say hi to ;) <sachac> myrkraverk: It's a proof of concept! ;) <sachac> myrkraverk: If you tie that in with the funky timezone thing, that would be, well, pretty funky. <myrkraverk> btw, can erc let me know when someone is online? <arete> sacha: don't' forget the automated reply to a greeting =) <sachac> myrkraverk: However, the timezone thing could be done without the funky hi thing... <myrkraverk> hmm <sachac> arete: My proposed system wouldn't be entirely automated. It would suggest responses, but it would allow the user to actually change them or select a different response from the buffer. <zeDek> howdy sachac <sachac> arete: I'm thinking of a circular queue of 5 to 10 (of course, configurable) possible replies. <sachac> zeDek: howdy zeDek <sachac> Well, that's an easy way around it - just echo the greeting... ;) * sachac is the resident bot-in-training. ;) <zeDek> lol <myrkraverk> sachac: btw, I have a photo now on orkut (like you care :P ) <arete> *chuckle* <Lukhas> zeDek: did you find time to send me the new color-theme ? :) <zeDek> Lukhas, ok wait <Lukhas> thanks <sachac> arete: I'm interested in this because I stay on a few help channels. My hippie-expansion from BBDB is pretty useful for expanding factoids, but (a) I don't want to have to remember what to expand, and (b) I want to be able to deal with questions I might not have paid attention to. ;) * zeDek was migrating old gnusfr.org and emacsfr.org <Lukhas> lukhas -> free point fr <sachac> myrkraverk: I'll check that out when I get around to starting up a graphical browser... <Lukhas> did you find hosting room ? <arete> sacha: now there is a more productive use of it =) <arete> I can never remember what keyword fsbot wants <sachac> delYsid: Hmmm, that should be interesting. <sachac> arete: The human still filters the automatic responses, of course. =) <delYsid> I use it in chess-ics for a very complicated re (760 chars) <sachac> arete: And automatic responses can be of the form <name>: <canned response> already... <sachac> arete: Naturally, if we allow functions and strings as canned responses, then we can even have a state machine. <arete> yumm, pseudo-AI assisted irc help <zeDek> Lukhas, <sachac> arete: Yeah, something like that. <laugh> <zeDek> Lukhas, done <sachac> arete: Worth hacking on in my spare time, I think.
12. ERC bot enhancements
I should add a hook that parses channel messages, extracts keywords, runs them through my database and populates a circular queue of likely "nick: canned answer" combinations.
11. Code for Nethack screenshots in Emacs
(defvar nethack-screenshot-file "~/.nethack-notes" "Filename to store Nethack data in.") (defun sacha/nethack-take-screenshot (caption) (interactive "MCaption: ") (save-window-excursion (save-excursion (find-file nethack-screenshot-file) (goto-char (point-min)) (insert ".#1 " caption "\n\n" (with-current-buffer (get-buffer "*nethack map*") (buffer-substring-no-properties (point-min) (point-max))) "\n\n" (with-current-buffer (get-buffer "*nethack status*") (buffer-substring-no-properties (point-min) (point-max))) "\n\n") (save-buffer))))
10. Good idea for nethack.el
From the Emacs channel:
kanaldrache: yes, therefor i want a mapping function ... take a picture of that level when you leave it so that you can chekc nine levels later "Mhh, where was that expensive shop? Level 4 or level 7?" without walking back or use you /oT
9. nethack code to check if a character has something in the inventory
(defvar nethack-temp-log nil "String containing captured messages.") (defun nethack-has-item-p (regexp) "Return non-nil if the character has an item matching REGEXP in the inventory." (let ((nh-filter-hook (append (list 'nethack-store-log) nh-filter-hook)) (nethack-temp-log nil)) (nh-send-and-wait "inv 1") (nh-send nil) (string-match regexp nethack-temp-log))) (defun nethack-store-log (string) (setq nethack-temp-log (concat nethack-temp-log string "\n"))) (defvar nh-filter-hook nil "Hook that is called with the received line.") (defadvice nh-filter (around sacha activate) "Insert contents of STRING into the buffer associated with PROC. Evaluate the buffer contents if we are looking at a prompt and then delete the contents, perhaps logging the text." ;; insert output into process buffer (with-current-buffer (process-buffer proc) (goto-char (point-max)) (insert string) (forward-line 0) (if (looking-at nh-prompt-regexp) (let ((prompt (match-string 1))) (nh-log (buffer-substring (point-min) (point))) (unless (run-hook-with-args-until-success 'nh-filter-hook (buffer-substring (point-min) (point))) (eval-region (point-min) (point))) (cond ((or (equal prompt "command") (equal prompt "menu")) (nh-print-status) (sit-for 0) (setq nh-at-prompt t)))))))
8. Woohoo! Emacspeak back up!
After struggling with ../emacs/emacspeak-config.el, Emacs with Emacspeak now boots all the way up to my tasks. Now I get to play with it a whole lot more. Next step - get another Twiddler (Dr. Rodrigo said that the department will spring for it). Also, check out gestures for Emacs. Oh, and have lots of fun... =)
emacspeak-planner.el in ../emacs/emacs-wiki has preliminary support. emacspeak doesn't seem to like invisible text in emacs-wiki. Fix one of these days.
7. committing
The proper thing to do when C-x v v is called and files are modified depends on whether or not multiple files had been changed. If multiple files would be committed in a single patchset, one should bring up a dired buffer containing the modified files, allowing the user to unmark a few. When the files have been selected, a log window should appear. C-c C-c in this window should commit the patchset.
6. Emacs hacks
(defun sacha/reverse-line () (interactive) (let ((string (buffer-substring (line-beginning-position) (line-end-position)))) (delete-region (line-beginning-position) (line-end-position)) (insert (apply 'string (reverse (string-to-list string))))))
5. Basic balance calculation
Moved into DoubleEntryAccounting.
4. Unanswered mail hack
I'm having a hard time keeping track of mail I've already answered. To better keep track of my mail, I think I will split off my personal mail into several groups:
- mail.misc
- mail.misc.archive for mail I've already answered and for my replies; threads I consider complete
- mail.misc.noanswer for mail I want to archive but don't need to answer
- mail.misc.all, a virtual group that lets me see and search through all the mail
All personal mail will be dumped into mail.misc.
3. Tutorial: Writing a new Emacs mode
2. Gnus pending
Maybe I should just make tasks for them? Or perhaps use gnus-newsgroup-replied...
Xref: 2003.11.26:5
1. Smarter Gnus scoring
I frequently want to see threads where I did not have the last word. How can I do that? Xref: 2003.11.26:4
36. Don't lose remember buffers when closing Emacs
(defun ajk/my-cleanup-then-save-buffers-kill-emacs (&optional arg) "Clean up before saving buffers and killing Emacs." (interactive "P") ;; stop here if there's a *Remember* buffer (if (get-buffer remember-buffer) (remember) ;; clean up Gnus (and (fboundp 'gnus-alive-p) (gnus-alive-p) (let ((gnus-interactive-exit nil)) (gnus-group-exit))) (save-buffers-kill-emacs arg))) (defalias 'sacha/save-buffers-kill-emacs 'ajk/my-cleanup-then-save-buffers-kill-emacs)../emacs/remember-config.el
37. Banning code for ERC
(defun erc-cmd-BAN (nick) (let* ((chan (erc-default-target)) (who (erc-get-server-user nick)) (host (erc-server-user-host who)) (user (erc-server-user-login who))) (erc-send-command (format "MODE %s +b *!%s@%s" chan user host)))) (defun erc-cmd-KICKBAN (nick &rest reason) (setq reason (mapconcat #'identity reason " ")) (erc-cmd-BAN nick) (erc-send-command (format "KICK %s %s :%s" (erc-default-target) nick (or reason ""))))Chat with :sindre on niven.freenode.net#emacs
I'd love to hear about any questions, comments, suggestions or links that you might have. Your comments will not be posted on this website immediately, but will be e-mailed to me first. You can use this form to get in touch with me, or e-mail me at [email protected] .


text:
Fabian Belt
Color: please select a color
Size: please select a size
Style # BLOWW40124
Need Assistance? Contact Us Now
Studs trim the centered bow on this skinny leather belt. Adjustable length and button closure.
Leather: Cowhide.
Made in the USA.
Width: 0.75in / 2cm
S/M: 29-32in / 73.5-81cm
M/L: 32-35in / 81-89cm
Leather: Cowhide.
Made in the USA.
Width: 0.75in / 2cm
S/M: 29-32in / 73.5-81cm
M/L: 32-35in / 81-89cm
Elegant, sophisticated, and timeless. Using the finest leathers, B-Low The Belt creates innovative, creative, and imaginative designs. Designers Carole Kotler and Ana Schoenberg launched B-Low The Belt in 2002, drawing inspiration from their love of '60s and '70s fashions to bring exciting accessories to fashion-forward women. And those women have taken notice: celebrity fans include Julia Roberts, Paris Hilton, and Heidi Klum, and Vogue, Elle, and InStyle have sung the line's praises. See all B-Low The Belt reviews
Shipping & Returns
Free Shipping Worldwide: No matter where you are sending your order, we offer free express shipping across the globe. Shipping Details
Easy Returns: Because we understand that not every purchase is exactly right, we've made returns easy. With the return form and return shipping label included with every order, customer service calls aren't necessary. And if you're in the USA, returns are free. Return Details
Shipping Available: Shipping Within USA Only: For Amazon Prime members, free two-day shipping is available for all Shopbop products.

subset: commoncrawl


text:
Penalty wanted on Campbell hit
What if the flag had been thrown? Might everything have changed?
The Browns trailed 13-3 in the third quarter and aimed to make Pittsburgh pay for going for it on fourth and 1 near midfield. Ahtyba Rubin and Paul Kruger stuffed a run and gave the Browns the ball in prime field position.
Soon, they were at the Pittsburgh 39 on a third and 7. William Gay stormed in on a corner blitz and smashed into Jason Campbell from the quarterback's blind side.
Campbell went down in a heap while losing the ball, leading to a long fumble return and, in essence, the end of Browns hopes.
Chudzinski protested on the field.
"I talked to the officials," he said. "I felt like Jason was hit on the head."
A flag would have put the Browns in field-goal range with a first down.
"They didn't feel that way," Chudzinski said.
Rather than watching the Browns cut a deficit to 13-6 or less, Pittsburgh kept the ball and went up 20-3.
Campbell had missed a play in the second quarter with a rib injury. The big hit by Gay left him with a concussion.
Brandon Weeden finished the game, and all signs point to Weeden facing Jacksonville on Sunday.
Weeden works through boss
On the coldest day of the year, Brandon Weeden did not get a warm reception as he replaced Jason Campbell two separate times. There were smatterings of boos.
"You've just got to laugh at it," Weeden said. "All you can do is go out there and march down the field and throw a touchdown."
The boos got loudest after Weeden threw a pick-six to hand the Steelers a 27-3 lead.
His touchdown pass with 3:13 left cut it to 27-11, but there weren't many people left to cheer.
- At kickoff, the wind chill was near zero and winds gusted up to 35 mph.
"Once you're out there, it's not too bad," Weeden said. "Standing on the sideline in the first half was the worst part."
- Before leaving with a concussion, Campbell went 14-of-22 for 124 yards. After replacing Campbell in the third quarter, Weeden went 13-of-29 for 209 yards.
"Any time your quarterback goes down, it's tough,"
Chudzinski said. "We'll get Brandon ready to start this week and play this game."
- The Browns would have only one healthy quarterback for the Jacksonville game unless they sign one this week.
"It's a possibility," Chudzinski said.
- The Browns are 1-3 in games Campbell has started, 3-0 in games Brian Hoyer has started, and 0-4 in games Weeden has started.
Page 2 of 4 - Fans leaves; Gordon goes crazy
Josh Gordon became the first Browns receiver to top 200 yards in a game and also tied a franchise mark with 14 catches.
His agent will be thrilled, but otherwise ...
"After taking a loss like that," Gordon said, "it means nothing."
The Steelers softened their defensive scheme after taking a 20-3 lead midway through the third quarter.
After that, Gordon caught eight passes for 169 yards. He wound up with 237 yards for the game. He caught six passes for 111 yards after a pick-six gave Pittsburgh a 27-3 lead.
"It's great to get that experience," Gordon said, "but if we can't go out there and win, I don't really care."
In nine games (he lost two to a suspension), Gordon has caught 54 passes for 988 yards.
His 1,793 yards in 25 games as a Brown is a franchise best for that span. Next on that list are Kellen Winslow (1,457) and Antonio Bryant (1,432).
- Rob Chudzinski on Chris Ogbonnaya's second costly second-quarter fumble in as many weeks:
"It was a great play by (Troy) Polamalu. They got a field goal out of that (for a 13-3 halftime lead). That was a big swing."
- Chudzinski on a no-sack day against Ben Roethlisberger, who had had been sacked 10 times in his last two games:
"He's hard to tackle. There were a few plays where we couldn't get him on the ground and he completes a pass. You know what you have to do. It's just hard to do it against him."
- Chudzinski on falling from promising playoff position to desperation with losses to Cincinnati and Pittsburgh:
"We had opportunities. We let them slip through our fingers. Now we can't control everything."
Locker room chatter
- Brandon Weeden on the prospect of taking first-team reps for the first time since the Browns prepared for an Oct. 20 game at Green Bay: "It's going to be good getting to throw to the guys I'm going to be throwing to (in a game) and doing some plays within our offense."
- Weeden on trying to rally from the team's 1-5 skid:
"We've got a bunch of mature guys who are good leaders that are going to get us back on track."
- Wideout Josh Gordon on Weeden getting booed:
"It's difficult. I'm sure it's difficult for him. As professionals, you have to drown that out. I can't really say that played a part in the loss. I'm sure it couldn't have helped, either."
- Tight end Jordan Cameron on the booing:
Page 3 of 4 - "For (Weeden), I think it would be annoying. If the crowd is booing the quarterback for the home team, it's neither a good thing. For being thrown into the fire, he played pretty well."
- Safety T.J. Ward on the struggles of the Browns' offense:
"It's frustrating. I'm not going to lie."
What Pittsburgh said
- Ben Roethlisberger on going from an 0-4 start to tied for the AFC's second wild-card spot, at 5-6, heading into a Thursday night game against the Ravens: "That's irrelevant right now. Right now, I'm going to enjoy this."
- The entirety of head coach Mike Tomlin's opening statement: "Nice accomplishment, but not a lot of time to admire our work."
- Roethlisberger on No. 2 wideout Emmanuel Sanders catching six passes:
"Joe (Haden) is a great corner, and he went everywhere 'A.B.' (Antonio Bryant) went. It really opened some things up for Emmanuel."
- Tomlin on the playoff race: "Four to six teams scrapping to stay in. Obviously, the Browns are not out of it, but today was significant."
- Tomlin on Roethlisberger's sack-free day: "When you're ahead, you can run the ball. Some of it is game circumstance, but I appreciate them keeping him clean."
Doing the math
- The Browns had been averaging 7.1 penalties a game. They were penalized just twice Sunday.
Gary Barnidge false started on the first series. With the score at 3-3 and the Browns in Pittsburgh territory, Alex Mack made an illegal snap, leading to a punt.
Pittsburgh likely was penalized just twice.
- Both teams made 19 first downs. The Browns led in net yards, 367-302. The Browns' No. 4-ranked defense held Pittsburgh below their opponents' season average.
- Steelers' rookie Le'Veon Bell ran 23 times for 80 yards.
- The Browns proceeded with their running-back-by-committee approach. Chris Ogbonnaya's decent day (four carries, 26 yards) was ruined by a fumble that led to a Pittsburgh field goal.
- Willis McGahee and Fozzy Whittaker totaled 28 yards on 10 rushes.
• Greg Little has been quiet since his monster game against Baltimore. He was targeted seven times Sunday but caught just two passes for 17 yards.
• With 11:50 left in the second quarter, on fourth-and-2 from the Pittsburgh 12, Ben Roethlisberger fired toward the right flat, into the hands of linebacker D'Qwell Jackson.
Jackson, positioned between the intended receiver and the quarterback, couldn't hang on to the fastball. It might have been a quick pick-six.
• Nose tackle Phil Taylor did not start and wasn't on the field as the Steelers drove to a field goal on their opening series. His playing time was limited after that, too.
Page 4 of 4 - Approached after the game, Taylor said, "I'm not answering no questions."
• The Browns have held opponents to 5-of-28 on third-down conversions in the last two games.
• The Steelers were 4-of-14 on third-down conversions and were stopped the only time they went for it on fourth down.
Extra points
• Fozzy Whittaker made one of the few kickoff returns that amounted to anything this year, reaching the 35 to launch the Browns' first series, which ended with a 49-yard field goal.
• Billy Cundiff is 16-of-19 on field goal tries after hitting from 49 and missing from 46 Sunday.
• Owner Jimmy Haslam, who visited the Browns' locker room after the recent home win over Baltimore, did not stop by after Sunday's game.
Location, ST | website.com


text:
Take Clara's yarn class!
Related info
New this week
Clara's Books
Knitter's Review
December 9, 2004
We all know that the shoes don't always make the athlete, and the kitchen doesn't always make the chef.
But can software turn your average Joe or Jill into an accomplished knitwear designer?
That's what I pondered when I removed the shrinkwrapping from the
Sweater Wizard 3.0
CD and popped it in my computer for a test drive.
In the Boutique: Calendar Crazy
If you're like me, you like to toss in a few treats for yourself when doing your holiday shopping. That's why this week I'm offering something that'll make your knitting friends and you happy. From now until Sunday, December 19th, order two
2005 Year in Yarn
calendars and get a third one free. Who says you can't have your cake and eat it too?
In the Forums: Family Feuds?
Many of us must face this quandary every year during the holidays: Do you knit for
family you don't get along with
Forgot your forum username or password?
Year-End Challenge
For December, I'm asking the Knitter's Review community join me in a gift to the
Heifer Foundation
In the past two years we've collected over $2,000, which translates into four llamas and 12 sheep for deserving families around the world. So far this month we have collected nearly $300 towards this year's donation.
If you're interested in helping and are in a position to contribute this year, you can send a check or money order (payable to Heifer International), in whatever amount you can afford, to:
Knitter's Review
P.O. Box 1617
Blue Hill, ME 04614
As always, I thank you for your readership and your support. Happy knitting, and I'll see you in the forums!
P.S. Do you have friends who would enjoy Knitter's Review? If so, use our simple
Tell a Friend
form and let them know about us.
Knitter's Review Poll
Have you ever used software to design a sweater before?
Participate in our
Knitter's Review Poll
and you'll see an instant tally of all the votes.
Subscriber Services
If you no longer wish to receive our weekly email update,
click here to be immediately unsubscribed
If your email address has changed or you'd like to make any changes, visit your
My Subscription
© Copyright 2000-2004 by Clara H. Parkes. All rights reserved.
Feel free to share this, in its entirety, with others.
This week's sponsor
Experience the downy
soft luxury of
100% brushed alpaca
Peruvian Collection
66% savings, plus
two free patterns at
Copyright © 2000-2016 Clara H. Parkes
All rights reserved. Permission to reproduce is required.


text:
Each item is carefully chosen, thoughtfully packed, and patiently aged for those who appreciate cheese.
Sign in to your Address Book.
To check if any specific restrictions for this item apply to any United States shipping address, please enter the information below.Sorry, this service is not available to Canadian addresses.
This is being shipped to a P.O. Box
This product has no shipping restrictions.
If you're not completely happy with your purchase, we'll refund your merchandise amount or send a replacement.
Get what you want now with Wisconsin Cheeseman Credit
© 2016 The Wisconsin Cheeseman


text:
POSITION: Defenseman
SHOOTS: Left
BIRTHPLACE: Minnetonka, MN, USA
DRAFTED: undrafted
|WCHA First All-Star Team (2008) NCAA West First All-American Team (2008) Signed as a free agent by NY Islanders, April 1, 2008. Signed as a free agent by Nashville, August 8, 2011. Signed as a free agent by Washington, July 3, 2012. Missed majority of 2012-13 due to upper-body injury at Tampa Bay, January 19, 2013. Missed majority of 2013-14 due to leg injury vs. Calgary, October 3, 2013. Traded to Carolina by Washington with Arizona's 4th round pick (previously acquired, Carolina selected Callum Booth) in 2015 NHL Draft for Tim Gleason, February 26, 2015. Missed majority of 2014-15 due to head injury vs. Philadelphia, March 6, 2015 and as a healthy reserve.
2012-13:Recorded an assist on 4/23 vs. WPG ... Registered an assist on 4/18 at OTT ... Scored a goal on 4/16 vs. TOR ... Scored a goal on 4/13 vs. TB ... Tallied an assist and the GWG, his first with WSH, on 4/9 at MTL ... Recorded first multi-point game (2a) with WSH on 4/7 vs. TB ... Tallied first assist with WSH on 3/31 at PHI ... Skated season-high 23:03 on 3/17 vs. BUF ... Returned to the lineup on 3/16 at BOS after missing 25 games due to injury ... Made WSH debut on 1/19 at TB.
2011-12: Played his 200th career game on 12/8 at CBJ ... Tallied a goal on 12/6 vs. PHX ... Tied a season high with four shots on goal on 12/3 vs. BUF ... Skated a season high 21:56 on 12/1 at VAN ... Scored first goal of the season on 11/26 at DET ... Recorded first assist of the season on 10/22 at CGY ... Made NHL playoff debut in Game 1 of WCQF vs. DET on 4/11 and skated 8:20.
2010-11: Set career highs in goals (4) and points (22), and tied a personal best in assists (18) … Ranked 2nd on the Islanders in blocked shots with a career high (137) … Reached career highs in penalty minutes (45), hits (54) and shots (81) … Scored first career GWG on 3/11 vs. BOS ... Missed 18 games due to three separate injuries.
2009-10: Set career highs in assists (18), games played (69) and average ice time (20:41) with the NY Islanders in 2009-10 … Ranked second on the 2009-10 Islanders in blocked shots (131) … Played 100th career NHL game on 3/19 vs. Anaheim… Scored first career power-play goal on 1/23 vs. New Jersey.
2008-09: Tied for 11th among NHL rookie defensemen in points (6) … Ranked fifth among AHL rookie blueliners in points per game (.54) with the 2008-09 Sound Tigers. 2007-08: Made NHL debut 48 hours after signing first pro contract on 4/3 vs. the New York Rangers ... Recorded first NHL point (1a) the following night against the Rangers at Madison Square
College Career
Played four years at Colorado College (WCHA), totaling 19 goals and 57 assists in 151 games. 2007-08: Named 2008 WCHA Defensive Player of the Year, a WCHA First-Team All-Star and an NCAA West First-Team All-American ... Recipient of the 2008 WCHA Scholar Athlete of the Year Award ... Named to the 2008 ESPN The Magazine Academic All-American Team … Led NCAA defensemen in both points (37) and assists (31). 2006-07: Ranked 2nd on team among defensemen in points (15) 2005-06: Appeared in 42 games and recorded 4 goals, 9 assists, 13 points and 48 penalty minutes. 2004-05: Finished the season ranked 4th among WCHA rookie defensemen in points (2g-9a-11pts).
NHL Transactions
Signed with NYI as a free agent, April 1, 2008 ... Signed with NSH as a free agent, August 8, 2011 ... Signed with WSH as a free agent, July 3, 2012.
Favorite activity outside hockey is golf ... His first job was as a warehouse employee ... Would most like to meet Green Bay Packers QB Aaron Rodgers ... Lists his favorite TV show as "The Big Bang Theory" ... His favorite pregame meal is chicken and whole wheat pasta.


text:
Naturopathica Gift Box
Add our iconic blue gift box to your order. Perfect for holidays and gifts, this box fits up to 4 skin care products. Please select 2 boxes if you are placing a larger order or if your order contains more than two 8.4 oz. bottles.
Please note: Items are not automatically packed in Gift Box, no gift card or gift messaging currently available.


text:
ESTERO, FLORIDA -- On my birthday my car went into the shop. I obtained a rental from Hertz. Three of the four cars were significantly damaged (which I only realized after driving downtown to take myself out for dinner and getting a flat tire for what I thought was "no reason"). So while I was on the phone with "Roadside Assistance," who refused to send any assistance. I've been sick (severe lung infection, etc) since then because it was abnormally cold out and I didn't plan on hanging out outdoors all evening. Anyway, let me get to some more basic facts.
A. I was hung up on by 7 "customer support representatives." B. I spent 11.5 hours trying to get a response from anyone that could "address the problem," according to the branch I rented the car from. C. They still have not returned the $200.00 dollars they held on my debit card. D. I could go on for days but I'll spare you. If you want to know more, email me at **. I must go now before I'm late to meet the notary appointment. I have to get this letter sent to corporate via certified mail now. Do your homework before you rent a car. What a NIGHTMARE!
SAN DIEGO, CALIFORNIA -- We rented a car through Hertz a couple of months ago when we were in San Diego. In SoCal, there are toll roads where you pay with your Fast Pass and if you don't have a Fast Pass, you have to call a special number that is posted as you're driving through the toll, or else you are fined. It would have been nice to know that in advance. My husband and I were looking for a place to pay the toll, which doesn't exist. Somehow, you are supposed to find that number and write it down as you are driving on the freakin' highway. Ridiculous.
Anyway, we drove through the toll, assuming that the car would already have a Fast Pass connected to it, and we would pay those upon returning the car. That is not what happened, and we actually completely had forgotten about it. A couple weeks later, I received a notice in the mail that we had blown the tolls and had to pay them, plus a fine through the Highway Dept., plus a $30 fine through Hertz. When I called Hertz to explain the situation, they told me to call the Highway Dept. and if I could get the fine dismissed. All I needed to do was have them email Hertz and the Hertz fine would also be dismissed, which I did.
The Highway Dept. dismissed the fine and all we had to do was pay the tolls. When I provided Hertz with the email, they told me I was still responsible for their fine because the email didn't tell them what they wanted. I wrote Hertz back and asked them what else exactly did I need to have the email say and I would contact the Highway Dept. and ask them to rewrite it, but Hertz never responded. At this point, I was at a loss because the email from the Highway Dept. stated that, "the tolls have been paid and no further action is needed."
I noticed a few days ago that, since they had my credit card info from the previous transaction when we rented a car, Hertz went ahead and charged my credit card for the fee that they imposed without my permission. I have since taken it up with my bank and am contesting the charges. Never again will I ever rent a car from Hertz and neither will any of my friends, who travel quite a bit.
I made an online reservation for a rental car through Expedia. I rented a car from Dollar (same as Hertz, even dealt with Hertz rental agent in addition to Hertz customer service) for a trip I took to Munich, Germany. Being an international trip, I carefully reviewed the accident coverage provided by my credit card company and decided that I would decline coverage through Hertz. I even read the terms and conditions stated in the reservation, and I was still good with my decision.
However, when I arrived on the ground in Munich, Hertz told me that I had no choice but to accept their coverage unless I could provide written documentation of my rental insurance coverage provided by my credit card company. After complaining that this was new information and I was never told about this policy, I was basically told to pay for the coverage or don't rent the car. After making a stink, I was told by the agent that if I printed the info at my hotel and returned with it, they could remove the insurance coverage. Boy, I should have gotten that in writing!
Having nowhere to print out my information, I had no choice but to accept the coverage and hope that they honored their promise. I'm willing to bet you can see where this is going. I printed the information as requested, and returned with it. However, the agent that accepts the returns was unable to do anything for me and told me I had to see the agent at the booth. But when I got to the booth, they informed me that since the invoice was closed out (which occurs when you give back the keys), there was nothing they could do for me. But that it wasn't a big deal, and that I could call customer service and they'd take care of it.
When I called customer service, I was informed that since I accepted the coverage, the bill was correct. They don't care about the shady business practices of policies that will force you to pay them more money for add-on services that you don't need. Then they give you the run around having to make phone calls, write emails, etc, all the time basically telling you to go pound sand.
I could not have been prepared to provide written documentation of something that I was not informed of prior, at a time when I had no options. They are aware of this, and it is why they do it. They know you are screwed, and that most likely you cannot deny the car rental given that you are in a foreign city with no other options. Then they make promises they never intend to keep. I will NEVER rent from Hertz or their affiliates again.
RESEDA, CALIFORNIA -- I had a traffic accident, needed a rental and have $35 a day coverage for 30 days with AAA Insurance. They told me they had my claim and all was good to just come in. When I arrived I was told to 'wait' (they had only 2 rental agents). I had to wait 20+ minutes, after-which I was told that I was getting a Nissan Sentra (it was the ONLY car they had). What BS. My cousin is an exec for a car rental company and told me that this is 'standard operating procedure'.
The car was horrible, had nearly 30,000 miles and appeared to have been in a major accident (I always check the body lines to detect a previous accident). In addition it had a large dent in the hood. This is what I get for $35 a day??? I thought "what horrible customer service." Worst of all, when I arrived home I ran a car fax on the vehicle. In fact I found it had been in 2 previous accidents.
STAY AWAY FROM HERTZ. They say they are #1, well not even close. The last person they care about is the customer. I called Enterprise, reserved the exact car I wanted (worth $35 a day) and they have a reservation/hold on the car for 10 AM tomorrow. Further they will pick me up at HERTZ (I am taking the Nissan SENTRA back after exactly 1 day). Hope this review gets out there and you all banish HERTZ, ultimately I hope they go BK.
LAWRENCE, KANSAS -- I think it is absolutely ridiculous how the entire staff handled our rental in Lawrence, Kansas. We are VERY displeased and will post and tell everyone we can how horrible Hertz has been. The counter person, Luke, had no clue what he was doing and charged us for incorrect charges, then totally passed us off to corporate because "I don't know how that happened, but billing can fix it for you".
We rented a mid-size car and we were given an SUV that got horrible gas mileage. Andrew, the regional manager was incapable of proper customer service. Charges did not "fall off" as we were told they would. It insane that charges can be put randomly on our credit card without permission and we're just suppose to wait for Hertz to release the funds that never should have been held to begin with. Never again will we rent from Hertz.
HARTFORD, CONNECTICUT -- Needed to spend a week in Connecticut to do some work. Rented a car with a great deal from the Hertz website. No problem getting the car and returning the car. Overall it was a good experience...then. A week after my rental ended, a charge for over $100 appears on my credit card from a company called Plate Pass Hertz. Apparently I've received charges for using toll routes in NY/NJ for the week I was in Connecticut.
The only problem is I never left Connecticut. In fact the car was in a pay garage in New Haven for all of the days they show it being in NY. I had the key in my possession. I had only put 143 miles on the car the entire rental. I am not happy for this random and erroneous charge, and now will have to deal with this third party, who Hertz provided my information to charge my credit card. So much for a great deal, now I have to waste my time trying to get this charge reversed.
MUNICH GERMANY, ILLINOIS -- I prepaid a rental for a car in Munich, Germany for $246.31 and said I wanted snow tires and was quoted it would be $130. When I picked the car up they were on it so I left. Was told if I did not bring the car back full of gas they could charge me 182.70 Euros. That's one scam to look out for at 4.35 Euro per liter.
To make a long story short the tires cost me $193.20 after adding all their none quoted taxes and fees just about as much as the car rental was itself. Take pictures of the car damage and have them write it down on a form they give you. When I took the car back they were looking to find things to charge me for until I started taking pictures again of the car.
They also wanted to take my form with the damage I had seen before leaving then I would have had no proof of prior damage and scratches & of rock chips. My advice is prepay but never add to your prepaid price. They will add, add, add to it.
ATLANTA, GEORGIA -- These people are devious and deceitful. Watch your wallet. Read your contract. I reserved an intermediate car for my wife for one day online for a quoted total price of $74. Ended up paying $192 because they upgraded her to a full size without telling her that she was being upgraded or explaining that there was a charge for the upgrade. She signed the electronic contract assuming she was getting what was reserved - they pulled a fast one on her and she, unfortunately, fell for it. Called customer service to ask for a refund - they offered 15% off the $60 upgrade charge ($9). That was so outrageous I had to laugh.
SPAIN, UTAH -- This spring we took a trip to Spain and rented a car from Hertz, and were charged an "Administrative Fee" of $45 for a minor traffic fine of about $45. While on this vacation, we incurred a traffic violation, we were caught on traffic camera apparently driving in some kind of restricted lane, in downtown Granada, caught on traffic camera. Incurring a fine of 40 Euros. This translated to about $45 US plus tax. OK fair enough. We didn't know we had violated any traffic law until we got the charge from Hertz. Instead of just charging our credit card for the traffic fine of $45 US they charged an additional $45 for an "administrative fee".
This brought our total to about $95 including tax. We found this ridiculous and absurd price gouging for the 5 minutes of work needed to look up our rental contract and charge us for the traffic fine. Wow! $45.00 for a few minutes of work, I guess I'm in the wrong business. We won't be renting from Hertz again.
MINNEAPOLIS, MINNESOTA -- I had been a faithful Hertz customer for over 30 years (NO MORE). I rented a car for one day at 40.00. Took the car back to the airport with having used on a few gallons of their gas. They charged me over 76.00 for gas, or 14.00 per gallon. Hertz next time you try to rob me, use a ** gun. I will crusade for the rest of my life telling people not to use Hertz.


text:
WSJ's Michael Phillips Discusses 'The Lobotomy Files' on Reddit
The Lobotomy Files: Inside the Mind of Roman Tritz
Video: WSJ reporter Michael Phillips discusses how he uncovered the nearly forgotten story of hundreds of WWII veterans that were lobotomized.
By Rubina Madan Fillion
The Wall Street Journal recently published The Lobotomy Files, a multimedia project about the Veterans Administration's use of lobotomies to treat about 2,000 mentally ill veterans.
On Monday, reporter Michael Phillips took reader questions during a two-hour Reddit AMA (short for "Ask Me Anything"). He shared his thoughts on PTSD, The Lobotomy Files and what it's like to report in war zones. You can read the full Reddit thread here. Below are some of the highlights.
Reader question: How did you stumble upon this story?
Michael Phillips: I spoke to a woman whose uncle had been lobotomized by the VA after the war. She had a few 1940s medical journal articles about the practice. She suspected that if it happened to her uncle, it probably happened to many others. She was absolutely right.
Reader question: What is the most shocking fact you uncovered while working on this series?
Phillips: It was probably the casual experiment done an Oregon VA hospital, where they took four mentally ill vets and gave them fake lobotomies to see if there was a placebo effect. There wasn't. So they the doctor went back and gave them real lobotomies. I'd add one other shocking thing. The Roanoke VA hospital listed two vets lobotomized for "Psychosis, with psychotic personality (homosexuality)."
Reader question: Did you have a group of people helping research the lobotomy series and how long does it take to ready something like this for publication?
Phillips: Our incredible researcher, Jim Oberman, helped me track down the families, once I had found the names of lobotomized vets. And Juliette Arai at the National Archives is a wizard with the files. She helped steer me to boxes of records that might contain VA lobotomy files. But I did most of the research on my own. Start to finish the whole thing took about seven months.
Putting the online extravanganza together was very much a team effort at the WSJ. There were about 15 people involved in crafting the immersive online experience at wsj.com/lobotomyfiles For once in my career I really prefer to read the stories online, rather than on newsprint under my breakfast cereal.
Reader question: Did you form an opinion on whether or not the patients would have suffered from tough mental health issues regardless of their war service?
Phillips: It was really hard to tell, even when I had complete medical records, whether the lobotomized vets were mentally ill because of their wartime service or coincidental to it. Schizophrenia – to take one example of a common diagnosis – tends to hit men at a fairly young age. So does military service. Would they have been schizophrenic absent the stresses of combat? I wish I knew for sure, but I have to believe that it would vary from case to case.
Reader question: How does this story apply to current day events? A lot of medical treatments were harsh back in the day, no? Doctors did not have treatment options yet were still faced with illnesses that had to be treated.
Phillips: Many readers have suggested a connection to today's events: The country is again swamped by combat veterans struggling with the psychological aftermath of their service. We certainly have a far better understanding of PTSD and other such issues than we did in the 1940s. But many readers have asked aloud: What treatments are we using now that we'll consider barbaric in 50 years? Perhaps none. But…
Some aspects of the stories are indeed gruesome. The archival films of lobotomies being performed by Walter Freeman in story two are not for the faint of heart. Some viewers should skip those films. But I hope readers will understand that if we didn't provide detailed information about the operation and its impact, then we weren't really doing justice to the vets' experiences.
Reader question: What was the first war, or combat zone, that you reported on? What was the most shocking difference between that experience and normal life that you didn't expect?
Phillips: In the early 90s I was working for the Associated Press out of Madrid and was sent to cover civil wars in Angola and Somalia. Both were fascinating experiences, but I was stunned by the chaos of Somalia. No rules, true anarchy. We didn't go anywhere without a driver, a fixer and two gunmen. One AK pointing out of a window on each side.
Reader question: What is the most important thing your experiences in Afghanistan and Iraq taught you? Did the experiences you had change you in any way?
Phillips: I've covered the wars from a fairly narrow perspective. I write about U.S. troops and their experiences. (We have far more qualified people writing about Afghan politics and society, as well as the larger strategic issues.) So I've been immersed in the lives of soldiers and their families.
What strikes me is how concentrated the costs of war are on those who fight it and those who wait for them to come home. As a nation, we've come a long way since the Vietnam War. People really do distinguish between the war and the warrior. The public, in my view, provides a warm and grateful welcome home for returning troops. But that will inevitably fade with time, while military families continue to feel the impact for years and years. Especially in the case of Gold Star families, for whom the wounds are always fresh.
As for the second question… I don't know. I don't feel like I have any PTSD from the experiences I've had. I do spend a fair amount of time thinking about guys I know who have been killed, and families they left behind.


text:
Mac Sales Rose in 4th Quarter. Or Fell.
PC shipments, like beauty, are in the eye of the beholder. Just ask Apple.
Gartner and IDC on Thursday said global PC shipments fell in the fourth quarter, squeezed by surging demand for tablet computers. However, the two research firms offered starkly different views of the Mac's fortunes.
Gartner delivered the bullish scenario. It said Apple's U.S. computer shipments rose 28.5% to 2.17 million units in the fourth quarter. That's impressive, considering that Gartner estimated overall U.S. shipments fell 7.5%.
IDC took the opposing view. It said U.S. Mac shipments fell 5.7% to 1.59 million units in the fourth quarter, losing steam faster than the overall market's 1.6% decline.
Who's right? It's hard to say.
Both numbers are preliminary and will change after PC makers disclose quarterly results. Apple doesn't break out product sales by region, making it hard to examine the research firms' track records in recent quarters. Overall, Apple said it sold 10% fewer Macs in the fiscal year ended in September than a year earlier.
Gartner analyst Mikako Kitagawa said its numbers are based on conversations with industry players, including component makers, retailers and distributors. "We think that Apple did quite well in the holiday period," she said, noting that Apple took the unusual step of offering promotions on Macs during the holiday shopping season.
A few other nuggets for the bull case: Apple introduced a new desktop computer, the Mac Pro, and a new operating system, Mavericks, in the fourth quarter, which might have spurred sales. Moreover, Apple had a relatively easy comparison target – its shipments had fallen 22% in the same quarter a year earlier, because of supply shortages.
On the other hand, IDC analyst Jay Chou said his firm has "a more conservative view of Apple at this stage." He said the numbers may disagree because the firms rely on different sources and methodologies.
The firms' preliminary numbers for Apple have often diverged in recent quarters. In the first quarter of 2013, for example, Gartner said shipments rose 7.4%, while IDC estimated a decline of 7.5%.
The disparity is less pronounced with other PC makers. At Hewlett Packard, for example, Gartner said U.S. shipments fell 10.3% while IDC estimated a 12.3% drop. For Dell, the gap was even more narrow – a 7.4% increase for Gartner versus a 6.6% rise for IDC.
The Apple sales mystery will be resolved Jan. 27, when the company reports financial results.


text:
SPCC training seminar slated
Published: Thursday, June 27, 2013 at 7:38 a.m.
Last Modified: Thursday, June 27, 2013 at 7:38 a.m.
The N.C. Cooperative Extension, Henderson County and environmental engineering firm agCompliance will hold a Spill Prevention, Control and Countermeasure (SPCC) educational training seminar from 8:30-9;30 a.m. Friday at the Extension Office in Jackson Park, Hendersonville.
The seminar will provide updated information about the SPCC law and how it pertains to farmers, ranchers and fuel distributors. During the seminar, agCompliance will give information about the deadlines, regulations and compliance solutions. Call 828-697-4891 for more information.
Reader comments posted to this article may be published in our print edition. All rights reserved. This copyrighted material may not be re-published without permission. Links are encouraged.


text:
Welcome, please sign up for faster checkout or to view your account
Our Flat Rate ground shipping is available for US shipments only.
This rate of $6.95 is for any sized order. Delivery times are 2-8 business days.
Please note: Shoes are excluded from the Flat Rate Shipping option.
For more information on shipping methods and prices please view our
Shipping Info Page
Close Recently added item(s)
You have no items in your shopping cart.
Shopping Options
You have no items to compare.
MON - FRI 9 - 5 pst
Customer Service: firstname.lastname@example.com
Customer Contest Submissions: email@example.com


text:
Saturday, 02/17/1990
Student Union Ballroom, University of Massachusetts, Amherst, MA
Set 1: Possum, GinBathtub Gin, DividedDivided Sky > SlothThe Sloth, Bouncin'Bouncing Around the Room, YEMYou Enjoy Myself, GolgiGolgi Apparatus
Set 2: Reba, Oh Kee PaThe Oh Kee Pa Ceremony > BagAC/DC Bag, CoilThe Squirming Coil, HoodHarry Hood, Carolina
Encore: Mike'sMike's Song > HydrogenI Am Hydrogen > WeekapaugWeekapaug Groove
· The Ocean tease in You Enjoy Myself
· David Bowie tease in Mike's Song
Average Song Gap: 2.81
Performers: Trey Anastasio, Page McConnell, Jon Fishman, Mike Gordon
Notes: The opening acts were Widespread Panic and Gene Matthews. The Ocean (Led Zeppelin) was teased in the YEM vocal jam. Mike's Song started as David Bowie.
Song Distribution:
5 Lawn Boy
3 Junta
3 The Man Who Stepped into Yesterday
3 The White Tape
2 Stash
Songs by Debut Year:
This show was part of the "1990 Tour."
Clocking in at only an hour and fifty minutes, this is a somewhat truncated show, even for the era. However, there is still some good early Phish for our listening pleasure. Solid Possum and Gin to open. Gin still had the stupid ending at this point, but that is pretty easy to look past. The Divided Sky > The Sloth is strong. The transition is a little shaky, but it ends up working out nicely. The vocal jam out of YEM is one that I actually really liked and the Golgi closes up this set nicely.
The 19th Reba ever opens set II. It's obvious that they're not completely comfortable with the song yet; it's not bad, per se, it just feels forced. That said, the jam is actually pretty strong. The Bag that follows is nothing spectacular, but I am going to spend a disproportionate amount of time on it because it highlights something that hadn't fully developed in the band yet.
If I had to narrow it down to one thing that amazes me most about this band, it would be how locked in all four of them are when it comes to the direction of their energy. Starting somewhere between Summer '93 and Summer 94, they were always on the same page, as if they all had one mind. They could (and still can) build or naturally fade more fluidly than any other band I've ever heard. All it would take is a couple notes from one of them and the other three would immediately follow higher or lower or where-ever. It's so quick and uncanny at times.
Well, what does this have to do with the Bag? There is a point in this Bag where Trey is obviously building tension toward the top of the phrase. When the phrase comes around he hits the root up in the stratosphere and the other three don't drop the energy. Mike and Page don't drop lower and Fish doesn't lay into the beat harder. The classic formula for release of tension for non-melodic parts is playing dissonant sounds in the mid or high range and releasing it by dropping lower consonant sounds. Both Page and Mike do the first part, but not second. It was obvious Trey was going to release and when he hits that high release it doesn't have very much impact. I make it sound worse than it actually is, but it is the little things like this that separate this well above average rock band from the world class rock band just a few years later.
The rest of the show is fine. The piano solo at the end of Coil is only about fifteen seconds long, the ending of Hood momentarily falls apart, and the Mike's Groove is short and powerful. 3 stars from me.


text:
United States Department of Agriculture
Agricultural Research Service
Return to the JWDSRC Home Page
That year, the Mississippi Agricultural and Forestry Experiment Station donated a 17-acre building site and deeded it to the USDA. When design and plans for the federal facility were completed, actual construction began in 1968 and was finished in August 1970 at a cost of $3.7 million. (Present estimated costs for the same facility is about $40 million.) Formal dedication ceremonies for the ARS Center, its adjacent greenhouses and its supply buildings were held on October 18, 1971.
The defined mission of the ARS complex was to increase efficiency in the production and processing of mid-south agricultural products to benefit both the farmer and the consumer. Today, with an operating budget of about $37 million annually (includes Area Office) and a staff of 65 Ph D research scientists and over 200 support personnel, the emphasis is still on the importance of research to improve production and processing in Mississippi and the mid-south.
At first, the federal complex at Stoneville was operated by a Central Committee of three Laboratory Chiefs, one of whom was chosen each year to act as Chairman. In September of 1972, when ARS reorganized nationally, Stoneville became an Area management headquarters for southern Mississippi, Louisiana (except New Orleans), and Arkansas.
In August 1978, change in ARS Area boundaries resulted in the inclusion of all of Mississippi into the Delta States Area and naming of the Center as the Delta States Research Center.
In October 1983, another ARS reorganization resulted in a change where Arkansas was aligned into another Area and Alabama, Kentucky, and Tennessee were combined with Louisiana and Mississippi as an ARS organizational unit. At this time the Area name was changed to the Mid South Area, but the Stoneville complex remained the Delta States Research Center. Additionally, all major administrative functions for 12 research Locations in the five-state area of Mississippi, Louisiana, Alabama, Kentucky and Tennessee are being handled at the Stoneville complex.
During 1984, the 98th Congress, 2nd Session, passed a bill that was signed into law by President Reagan on October 17, 1984, naming the Delta States Research Center in Stoneville, Mississippi, as the "Jamie Whitten Delta States Research Center."
Jamie Whitten Delta States Research Center
141 Experiment Station Road
P.O. Box 225
Stoneville, MS 38776
Return to the JWDSRC Home Page


text:
With its oval shape, a pale blue plastic egg makes a perfect beginning for Jack's joyful likeness.
Watch all your favorite shows every day on Nick Jr
Print the Jack Egg Template and cut out the pieces. Trace the ear pieces onto pale and medium blue felt, the hair piece onto green felt, and the nose and mouth onto black felt. Cut out the felt pieces.
Glue the nose near the pointy end of the egg. Then glue the mouth just below it. With the marker, draw on the eyes.
Separate the two pieces of the plastic egg. Slip the ears and hair in between the pieces and then put the egg back together. (Squeezing the egg pieces together will keep the felt pieces intact.
To create the stand, cut a 2- by 8-inch strip of red/purple construction paper. Fold it in half lengthwise. Coil into a ring, overlapping the ends. Staple in place.
Here's a cool craft kids can display in their bedrooms
Looking for Franklin gear? Cool beans! We've got the perfect iron-on decal
Picture this... your child's potrait "painted" by Frankin's Aunt T!
Your little one will be ready to go, after potty training play with Blue and Joe
Turn printables and pipe cleaners into a hanging craft with your dino fan!
Got a dino fan at YOUR house? Decorate kids' rooms with these Triassic triangles!
Kids will eat up the idea of dinosaur eggs resting in this sweet nest
Put those dinos in their place! It's a dino-packed scrapbook journal just for kids
Let your dino designer "cook up" this terrifying Triceratops!
Dinosaurs are on the prowl! Now your kid can can scope them out just like Dino Dan
Add a dash of dinosaurs to your family photos
Just a few scissor snips, and you've made these colorful dinosaur toppers in a snap!
Deck out your Dino Dan fan with these awesome dinosaur designs--so easy even a dinosaur could make them
Curtain up on the most musical clubhouse around!
A concert T-shirt for your little fan!
All hands and tentacles on board to make this under-the-ocean outfit
Hot dog! It's Blue at the door for Halloween
Add a touch of Blue to your home decor
These are a few of MY favorite things!
Let the sun shine on Blue and you!
Pop up with sweet Mother's Day wishes from Blue and Joe!
Mom's got a clue that you love her.
Blue will be your child's constant companion all through the night
Learn to tell time with Tickety Tock
This sock was made for talkin'
Peek-a-Boo! It's Blue!
Paint your little pups Blue this Halloween
Save pennies (and that tissue box!) with Blue
Smiles from ear-to-ear
Explore a new way to snack with Dora!
Every explorer will love these festive cupcake decorations!
Libby's lighting the way to a healthy snack!
Send guests home with favors that are sew silly!
Get the cupcakes in on the fun with these whimsical cupcake wrappers and toppers!
These goody bags are sew simple and sew sweet!
Your little Lalas will be sew excited to help create this party item!
Add some Lalas to your lollipops!
Celebrate summertime by crafting this 3D door sign
Kids are going to have sew much fun embroidering eggs!
Add some Easter cheer to your home with these egg wreaths!
Kids are going to have sew much fun with this cute embroidery craft!
Tick, tock, Dora and Boots are inside this clock!
Invite your child's favorite Nick Jr. friends to the kids table with this printable craft
Turn your paper plate into the perfect table topper!
Kids will FALL in love with this seasonal decoration
Greet visitors with a colorful display featuring your child's Nick Jr. friends
Kids can help get ready for the feast by adding color to this printable centerpiece!
This birthday banner makes it simple to deck the walls with the PAW Patrol!
Print, fold, and fill with finger-licking treats!
Create personalized "doggy bags" for PAWesome party guests!
It's a party with your favorite pups!
Top off your PAW Patrol themed party with these print & cut decorations
This goody bag is dressed up for Dad's special day!
Here's a printable purse that's fashionable & makes saving pennies fun!
Fill up Peter's wagon with enough coins to buy radishes!
Dress up cones with cute Nick Jr. characters!
Here's a printable purse that's fashionable & makes saving fun!
Lalaloops-ify your little doll with these printable picture frames!
Make a door sign that will bloom in any room!


text:
A West Virginia man remains in the Carroll County Jail after he was arrested Friday and charged with felony theft.
Deputies arrested without incident Robert Wayne Gebroski, 30, of 244 Francis Ave., Windsor Heights, W.Va., at his workplace on Bear Road, near Kilgore.
Carroll County Sheriff Dale Williams said that on Dec. 20, Gebroski removed a commercial-type welder from the oil and gas pipeline where he worked. The welder was found at his home in West Virginia on Jan. 9. The welder was valued at $7,000. Gebroski faces felony theft charges.
Location, ST | website.com


text:
- Home
- News
- Sports
- Opinion
- Obituaries
- Features
- Special Sections
- Classifieds
- Public Notices
Forgot Password? | Not a User? Sign up
Few things are as clear-cut or urgent as the need to get Kentucky's children off to a healthy start in life.
One, whether you're a parent or a politician, it's a moral obligation. I firmly believe that. Two, Kentucky's future depends on our ability to create a talented, inquisitive and productive work force.
One year ago, my administration launched an aggressive plan to tackle head on one of the biggest hurdles to our children's and our state's future: Lack of health insurance.
If you currently subscribe or have subscribed in the past to the KY News Journal, then simply find your account number on your mailing label and enter it below.
Click the question mark below to see where your account ID appears on your mailing label.
If you are new to the award winning KY News Journal and wish to get a subscription or simply gain access to our online content then please enter your ZIP code below and continue to setup your account.
|ZIP Code: