「EMACS」を含む日記 RSS

はてなキーワード: EMACSとは

2008-11-28

僕がMacユーザを続けてるわけ

僕はMacユーザだ。最初に買ったのはスケルトンiMacFirewireDVD-ROMがついているやつで、色はグリーンだった。OSはMacOS9.0.2。もう10年近く前の話だ。

僕がMacを買ったのは、ひとえに絵が描きたいからだった。正直Windowsにするかどうか、とても悩んだ。でもその頃買った色彩王国という色の塗り方をプロインタビューした本では、CG塗りをしている人はMacを使っていた。だから僕もMacを買った。その頃は絵のプロになる気満々だったから、A3までプリントでき、カートリッジを交換すれば同じくA3までスキャンできるプリンターと、とても高かったけどPhotoshop 5.5J、そしてタブレットも一緒に買った。さすがにタブレットまではお金が回らなくて、Favoの一番安い奴になっちゃったけど。本を読んでPhotoshopでの絵の塗り方を勉強した。自分なりにいろいろいじって、デジタルトーンのかけ方を覚えたりもした。それで僕は満足していた。その頃に描いた絵は今もちゃんととってあってpixivにアップしてあったりする。

でもMacに不満がないわけでもなかった。興味本位プログラミングをやってみたいと思っていたけど、ネット環境もなく大型書店もない田舎住まいの僕にはMacでのプログラミング方法なんて分かんなかった。それに、爆弾がよく出たりとか、どこにファイルを置いたのかすぐ忘れてしまったりとか、そういうところでも不満があった。

そして、絵のプロを目指すとか思っていたのに、いろいろ思う所あって実家を離れ大学に進学した。学科はプログラミングが出来そうな情報系を選んだ。そして大学で、コンピュータ室の管理のアルバイトをすることになった。

そのアルバイトでは、大学で使っているUNIXシステムユーザサポートと、その他の雑用をやった。雑用用にはWindowsXPだったか2000だったかのマシンを使わせてもらえることになった。そして驚いた。WindowsMacよりも使いやすかったことに。

ユーザのホームがあってその下にマイドキュメントがあって、とどこにファイルを保存すればいいのか簡単に分かったし、それゆえ作ったファイル行方不明になってしまうこともなかった。安定性も高かった。

ただ、プログラミングに関しては大学の授業とバイトの兼ね合いで、WindowsではなくUNIXを使ってやることになった。最初に覚えたのはCだ。UNIX世界に触れたのも、僕にとっては非常に大きなカルチャーショックだった。それまでアイコンクリックして何かが出てきて、といったGUI世界しか体験したことのない僕にとって、コマンドを打ち込んであれこれやるというCUI世界は、なんと言ったらいいんだろうか?効率性とかそういうものも当然感じたけれど、でもそれ以上にコンピュータの原点というか、よりコンピュータの弱いところというか、コンピュータ自分が降りていくというか、そんなことを感じた。変なことを書いたがとにかく、コマンドを使ってファイルを作って消して実行して、自分がどこに居るかということは見た目ではなく自分の頭の中で把握していなければならない、自分の他にもコンピュータユーザが居る、まるでコンピュータの中のマンションに住んでいるような錯覚を覚える文化に、虜になったとまではいわないが非常に感銘を受けた。

さて、次に買うマシンはどうしよう?と思ったとき、僕はWindowsを買おうと思った。UNIXシステム大学にあるし、Linuxを入れるにしてもまずはPCを買わなければならない。そう、このとき僕の中で2代目のマシンMacにするという選択肢は綺麗に消えていた。しかし、そんな僕を変える出来事があった。MacOSXとの出会いだ。

バイト先ではどんな環境ユーザから問い合わせがあるか分からないから出来る限りいろんな環境を揃えなくてはならないという理由で、2台だけだったがMacも置いてあった。僕がMacユーザだと知った技官の方は、そのMacの管理を僕に一任した。そのMacに当時ですら古かったMacOSX10.0が入っていたのだ。

この最初のMacOSXは評判が悪かった。すぐ固まる、落ちる、今までのソフトが使えない、そんな悪評を僕はマック雑誌で沢山目にしてきた。しかし実際にこのMacOSX10.0をみて、それらの評判がそう的外れなものではないということはすぐわかったが、MacOS9に比べると、Windowsのように自分のホームがあって基本的にファイルがそこに置かれるというところは改善点だと思った。だがそれ以上に僕を魅了したものがあった。ターミナル存在だ。今までのようにGUIを使ってファイルを作ったり移動したりすることができる。しかもそれをUNIXのように(実際UNIXなのだが)CUI世界から眺めることもできる。その逆もしかり。それにWindowsでは面倒なUNIXへのログインも、sshを使って簡単にできる。そんなことにとても感動した。そしていろいろ調べているうちに当時最新のMacOSX10.2だったらX11betaも使うことができると知って、技官の方や先生へ直談判した。技術的なことにどん欲な彼らはそれに非常に興味を示し、MacOSX10.2を買ってもらえた。僕は早速それらをインストールし、Mac上でUNIXサーバからEmacsの窓を引っ張ってきた。それだけのことであるが、それがたまらなく楽しかった。いつどこの研究室からどんな問い合わせが来るか分からないから、暇なときはMacを使って勉強しなさい、と言ってもらえ、僕はMacに夢中になった。日本語Texを入れたり、Mac上でCやJava勉強をしたりと、それはとても楽しい時間だった。そんな僕は次のマシンMacにするぞ、と固く心に近い、そしてその通りまたMacを買った。友人達コンピュータ室にこもってプログラミング課題をこなしているとき、僕は早々に家に帰って自宅のMacからサーバログインして課題をこなしたものだ。

今この文章も、当然Macで書いている。今はWeb開発系のバイトをしていて、その上でもMacはいい選択肢だと思っている。ペーペーの僕の遥か上を行く開発チーフ達もうちの会社の場合ほとんどMacだ。ApacheをはじめとしてWeb開発に必要なものはほとんどあらかじめインストールされているし、足りないものはMacPortを使ってすぐにインストールできる。ブラウザでの表示確認にはSafariFirefoxをはじめとしたモダンブラウザが使えるし、Parallels Desktopを使えばWindowsインストールでき、そのブラウザからMac側で動かしているWebアプリの表示確認をすることだって出来る(たいていはIEに失望することになるが)。

絵を描きたいというところから始まった僕のMac人生だけれど、Web屋もどきになった今でも重宝している。これからもよっぽどのことがない限り変えることはないだろう。非常に長く主観的な思い入ればっかりの文章を書き連ねてきたけど、これが僕がMacユーザを続けてるわけ。

2008-11-18

http://anond.hatelabo.jp/20081118153234

Emacsだって、きもぉーい。

Visual StudioXcode でしょー、まぁじ、きもいんですけどぉー。

彼氏秀丸を使ってた。別れたい…

秀丸だと矢印キーに手を伸ばした時なんか恥ずかしいww

下向いちゃうしww

男にはせめてEmacs使って欲しい・・・

検索とかで検索ダイアログ出されたら・・・・もう最悪ww

せめて普通にC-s、C-rくらいは使って欲しい。

常識的に考えて欲しいだけなんです!

秀丸で開発されてる時の恥ずかしさとか分かる?

あのね?たとえば平日10??20人ぐらいで開発作業とかするでしょ?

それぞれLinuxとかで開発するわけじゃない?

みんな普通EmacsVimコード書くわけでしょ?

秀丸でノロノロタイプしてたら大恥かくでしょうがww

--

彼氏軽自動車に乗ってた。別れたい…

http://anond.hatelabo.jp/20081111000645

2008-11-11

ためしに VS 使ってみたけど、emacsgcc でやっていたときよりも開発速度落ちた気がする。

便利機能はいろいろあるはずなんだけどにゃー

2008-10-19

http://anond.hatelabo.jp/20081018073905

俺もここまでしっかりしてないが

サイト特化型のダウンローダーをスクリプト言語で書いてるけど

インタフェース部分にemacs使うのは凄いなぁって思った

こういうインタフェースをサラッと書くのにemacsを使うのは便利なのか

2008-10-18

real street angels から mechanize を使って動画を取ってきてEmacsで見てみるよ

せっかく書いたから匿名でのせてみるよ

使い方は

  • 動画を取ってきたいよ
    • config.yamlユーザとかを設定するよ
    • ids.txt に取ってきたいIDを書くよ
    • sangels.bat を実行するよ
  • Emacs動画を見たいよ
    • sangels.el を load するよ
    • M-x sangels だよ

必要なものを gem で取ってくるにはこうすればいいよ

  • gem install -r log4r
  • gem install -r -v 0.6 hpricot
  • gem install -r mechanize

長すぎてelispが消えたから続きがあるよ

sangels.bat - 起動用バッチファイル

@echo off
setlocal
set WD=%~dp0
cd /d %WD%

ruby get_movies.rb
ruby get_images.rb
ruby create_m3u.rb

ruby

config.yaml - 設定ファイル
user: ユーザID
password: パスワード
ids_file: ids.txt
done_file: ids_done.txt
movies_dir: movies

log4r_config:
  pre_config:
    global: INFO
  loggers:
    - name: app
      type: Log4r::Logger
      level: INFO
      outputters:
        - STDOUT
        - FILE
  outputters:
    - name: STDOUT
      type: Log4r::StdoutOutputter
      formatter:
        type: Log4r::PatternFormatter
        pattern: "%d [%l] %C - %M"
        date_pattern: "%H:%M:%S"
    - name: FILE
      type: Log4r::FileOutputter 
      filename: "#{LOGDIR}/sangels.log"
      formatter:
        type: Log4r::PatternFormatter
        pattern: "%d [%l] %C - %M"
        date_pattern: "%Y-%m-%d %H:%M:%S"
get_movies.rb
require 'fileutils'
require 'logger'
require 'mechanize'

BASEDIR = File.dirname($0)
require "#{BASEDIR}/util"
require "#{BASEDIR}/sangels"

$config = load_config(BASEDIR)
prepare_logger(BASEDIR)
$log = new_logger("get_movies")
WWW::Mechanize.log = new_logger("mechanize")
WGet.log = $log

class IDFile
  def initialize(file)
    @file = file
    unless File.exist?(@file)
      Fileutils.touch(@file)
    end
  end

  def ids(contains_comment = nil)
    File.open(@file) {|io|
      io.to_a.map {|x|
        x.chomp
      }.select {|x|
        if x.empty?
          nil
        elsif contains_comment
          true
        else
          not /^\s*\#/ =~ x
        end
      }
    }
  end

  def add(id)
    ids = ids(true)
    unless ids.any? {|x| x == id}
      write(ids + [id])
    end
  end

  def delete(id)
    ids = ids(true)
    if ids.any? {|x| x == id}
      write(ids - [id])
    end
  end

  def write(ids)
    File.open(@file, "w") {|io|
      ids.each {|x| io.puts x}
    }
  end
end


$log.info("BEGIN #{$0} ================")
exit_code = 0
begin
  ids_file = IDFile.new($config.ids_file)
  done_file = IDFile.new($config.done_file)
  movies_dir = $config.movies_dir
  wget = WGet.new

  sangels = SAngels.new
  sangels.login($config.user, $config.password)
  ids_file.ids.each {|id|
    begin
      movies = sangels.movies(id)
    rescue SAngels::Movies::InvalidMoviesError
      $log.warn("invalid movie id: #{id}")
      next
    end
    dir = File.expand_path(id, movies_dir)
    movies.each {|link|
      wget.retrieve(link.href, dir)
    }
    expected = movies.movie_links.map{|x| File.basename(x.href)}
    actual = Dir.glob("#{dir}/*").map {|x| File.basename(x)}
    if (expected - actual).empty?
      done_file.add(id)
      ids_file.delete(id)
    end
  }
rescue => e
  $log.error(e)
  exit_code = 1
end

$log.info("END #{$0} (#{exit_code}) ================")
exit exit_code
get_images.rb
require 'fileutils'
require 'logger'
require 'mechanize'
require 'ostruct'

BASEDIR = File.dirname($0)
require "#{BASEDIR}/util"
require "#{BASEDIR}/sangels"

$config = load_config(BASEDIR)
prepare_logger(BASEDIR)
$log = new_logger("get_images")
WWW::Mechanize.log = new_logger("mechanize")
WGet.log = $log

$log.info("BEGIN #{$0} ================")
exit_code = 0
begin
  movies_dir = $config.movies_dir
  sangels = SAngels.new
  sangels.login($config.user, $config.password)
  thumbnails = sangels.thumbnails

  Dir.glob("#{movies_dir}/*").each {|dir|
    next unless File.directory? dir
    id = File.basename(dir)

    url = thumbnails.url(id)
    unless url
      $log.warn("#{id} is not found")
      next
    end
    path = File.expand_path("00_thumbnail#{File.extname(url)}", dir)
    next if File.exist? path

    $log.info("retrieving #{url}")
    thumbnail = thumbnails.get_file(id)
    File.open(path, "wb") {|io| io.write(thumbnail)}
  }
rescue => e
  $log.error(e)
  exit_code = 1
end

$log.info("END #{$0} (#{exit_code}) ================")
exit exit_code
create_m3u.rb
BASEDIR = File.dirname($0)
require "#{BASEDIR}/util"

$config = load_config(BASEDIR)
movies_dir = $config.movies_dir
Dir.glob("#{movies_dir}/*") {|dir|
  next unless File.directory? dir
  name = File.basename(dir)
  files = Dir.glob("#{dir}/*.wmv").sort

  File.open("#{movies_dir}/#{name}.m3u", "w") {|io|
    files.each {|file|
      io.puts "#{name}/#{File.basename(file)}"
    }
  }

  File.open("#{dir}/00_movies.m3u", "w") {|io|
    files.each {|file|
      io.puts "#{File.basename(file)}"
    }
  }
}
sangels.rb
require 'mechanize'
require 'hpricot'

BASEDIR = File.dirname($0)
require "#{BASEDIR}/util"

class SAngels
  HOST = "real2.s-angels.com"
  LOGIN_URL = "http://#{HOST}/member/"
  INFO_URL = "http://#{HOST}/teigaku/item.php"
  THUMBNAILS_URL = "http://#{HOST}/teigaku/"
  THUMBNAIL_URL = "http://#{HOST}/images/default/thumb/"

  def initialize()
    @agent = WWW::Mechanize.new
  end

  def login(user, password)
    login_form = @agent.get(LOGIN_URL).forms.find {|form|
      form.fields.any? {|field| field.name == "frmLoginid"}
    }
    login_form.frmLoginid = user
    login_form.frmPw = password
    @agent.submit(login_form)
  end

  def movies(id, no_validate = nil)
    Movies.new(@agent, id, !no_validate)
  end

  def thumbnails
    Thumbnails.new(@agent)
  end

  class Thumbnails
    def initialize(agent)
      @agent = agent
      doc = Hpricot(@agent.get_file(THUMBNAILS_URL))
      elems = doc.search("div[@class=realthum]/a")
      @links = Hash(
        elems.map {|elem|
          href = elem["href"]
          id = $1 if /ID=(.+)/ =~ href
          url = elem.search("img")[0]["src"]
          [id, url]
        })
    end

    def get_file(id)
      @agent.get_file(url(id))
    end

    def url(id)
      @links[id]
    end

    def exist?(id)
      url(id)
    end
  end

  class Movies
    class InvalidMoviesError < StandardError
    end

    def initialize(agent, id, no_validate)
      @agent = agent
      @id = id
      if !no_validate &amp;&amp; !valid?
        raise InvalidMoviesError
      end
    end

    def info_page_url
      "#{INFO_URL}?ID=#{@id}"
    end

    def info_page
      @agent.get(info_page_url)
    end

    def movies_page
      @agent.click(info_page.links.find {|link| /P=10/ =~ link.href})
    end

    def movie_links
      movies_page.links.select {|link|
        /wmv$/ =~ link.href
      }.sort {|a, b|
        File.basename(a.href) <=> File.basename(b.href)
      }
    end

    def valid?
      info_page.uri.to_s == info_page_url
    end

    def each(&amp;block)
      orig_links = movie_links
      orig_links.each {|orig_link|
        link = movie_links.find {|l| File.basename(l.href) == File.basename(orig_link.href)}
        block.call(link)
      }
    end
  end
end
util.rb
require 'log4r'
require 'log4r/yamlconfigurator'
require 'singleton'
require 'fileutils'
require 'ostruct'

def Hash(a)
  Hash[*a.flatten]
end

def load_config(basedir)
  OpenStruct.new(File.open("#{basedir}/config.yaml") {|io| YAML.load(io)})
end

def new_logger(name)
  Log4r::Logger.new("app::#{name}")
end

def prepare_logger(basedir, logdir = nil)
  logdir ||= basedir
  Log4r::YamlConfigurator["LOGDIR"] = logdir
  Log4r::YamlConfigurator.load_yaml_file("#{basedir}/config.yaml")
end

class NullObject
  include Singleton
  def method_missing(message, *arg)
    NullObject.singleton
  end
end

class WGet
  class << self
    attr_accessor :log
    def initialize
      super
      @log = NullObject.singleton
    end
  end
  
  def log
    self.class.log
  end

  def retrieve(url, dir)
    FileUtils.mkdir_p(dir)
    file = File.expand_path(File.basename(url), dir)
    if File.exist?(file)
      log.info("already retrieved #{url}")
      return true
    end

    tmp = "#{file}.part"
    log.info("retrieving #{url}")
    ret = system("wget", "-c", "-O", tmp, url)
    if ret
      log.info("retrieving succeeded #{url}")
      File.rename(tmp, file)
    else
      if $? == 0x020000 # Ctrl-C
        exit($?)
      else
        log.error("retrieving failure #{url} (#{$?})")
      end
    end
    return ret
  end
end

2008-10-11

私のプログラム

初めは小学生の頃か。

実物のスペースインベーダー記憶はない。

しかし、それを皮切りにアーケードゲームのみならず、ゲームウォッチ、ケームセンター嵐などを経て、ファミコンが登場する「ゲーム」の時代だった。

「ゲーム」コンピューターゲーム意味になった時代だった。小学生も「コンピューター」にワクワクした。

21世紀コンピューターにより人工知能ができる。そんな時代だった。

でも、アルファベットを知らない小学生BASICは難しかった。ぴゅう太がせいぜいだった。

中学生学校PC-9801があった。後のパソコンである。

PRINT」で文字を表示する。「GOTO」で行き先を変える。それは分かった。でも何をすればよいか分からなかった。

だから「ベーマガ」で16進数を打った。でも動かなかった。何度も調べ、直し、試した。デバッグした。

してようやくゲームが動いた。ゲームはつまらなかった。

でも動いた。自分の入れた文字で数字でコンピュータが動いた。自分で動かした。動かせた。

BASICで線を引きマシン語で文字を動かした。

高専に進んだ。Turbo Pascalコラムスもどきを作った。

初めてフルスクラッチで書いた。配列も使った。

小学生のころから6年が過ぎていた。

Turbo Cも使った。IDEで使うそれは、インタプリタのノリだった。

FM-Rレイトレースもした。一晩かけて、エラーが起きていた。

でも、構造プログラミングを学んだ。ポインタも学んだ。マシン語の知識が役立った。

Solarisも使った。EmacsやXも使った。オブジェクト指向も知らずC++にも触れた。

GC構造体を代入して使い回し、Xサーバを落した。

家のノートFreeBSDを入れた。rootになった。

awksed正規表現を学んだ。そしてperlに出会った。

コラムスもどきを作ってから6年が過ぎていた。

テレホーダイにした。Mewを使った。チャットをした。

perlで掲示版の書き込みをチェックし、madokaで遊んだ。CGIを書いたりした。

脆弱性を見つけた。作者にメールした。ドキドキした。

perlと出会ってから6年が過ぎていた。

オープンソースプロジェクトに参加した。

はてなに出会った。JavaScriptに出会った。

BookmarkletgreasemonkeyAjaxオブジェクトだらけだった。

初めはゲームだった。でも最初だけだった。

ハードを叩き、ライブラリを叩いていた。

サーバを叩き、ブラウザを叩いてきた。

気が付いたら24年が経っている。

今、pythonで書いている。

ようやく、言語の違いには慣れてきた。でも、まだLISPを使った事はない。

道はまだまだある。未知の世界につながっている。

作りたい物が本当は何かは分からない。作れる物が本当は何かは分からない。

でも、何かがあるような気はする。だからプログラムしてみる。

どんなふうに動くのかは分かってない気がするけれど、分かっている事もある。

今も「コンピューター」にワクワクしている。

それが今の私のstatusだ。

http://anond.hatelabo.jp/20081011173016

2008-07-24

プログラミング言語オタが非プログラマー彼女言語世界を軽く紹介するための10言語

via Twitterオタが非オタの彼女にTwitter世界を軽く紹介するための10ユーザ

まあ、どのくらいの数のプログラミング言語オタがそういう彼女をゲットできるかは別にして、

「オタではまったくないんだが、しかし自分のオタ趣味を肯定的に黙認してくれて、

 その上で全く知らないプログラミング言語世界とはなんなのか、ちょっとだけ好奇心持ってる」

ような、ヲタの都合のいい妄想の中に出てきそうな彼女に、プログラミング言語のことを紹介するために

習得させるべき10言語を選んでみたいのだけれど。

(要は「脱オタクファッションガイド」の正反対版だな。彼女プログラミング布教するのではなく

 相互のコミュニケーションの入口として)

あくまで「入口」なので、アーキテクチャに過度に依存するアセンブラ等の低級言語は避けたい。

あと、いくら基礎といってもBrainf*ckやUnlambdaのような難しすぎるものは避けたい。

ポール・グラハムが『Arc』は外せないと言っても、それはちょっとさすがになあ、と思う。

そういう感じ。

彼女の設定は

PCはほぼウェブ閲覧専用、Excel程度は使える。

ロジカル度が高く、頭はけっこう良い

まずは俺的に。出した順番は実質的には意味がない。

Java

まあ、いきなりここかよとも思うけれど、「Java以前」を濃縮しきっていて、「Java以後」を決定づけたという点では

外せないんだよなあ。ゴスリングもハゲだし。

ただ、ここでオタトーク全開にしてしまうと、彼女との関係が崩れるかも。

この情報過多な言語について、どれだけさらりと、嫌味にならず濃すぎず、それでいて必要最小限の情報彼女

伝えられるかということは、オタ側の「真のコミュニケーション能力」の試験としてはいいタスクだろうと思う。

Smalltalk (Squeak), LOGO

アレって典型的な「オタクが考える一般人に受け入れられそうなプログラミング言語(そうオタクが思い込んでいるだけ。実際は全然受け入れられない)」そのものという意見には半分賛成・半分反対なのだけれど、それを彼女にぶつけて確かめてみるには一番よさそうな素材なんじゃないのかな。

プログラミング言語オタとしてはこの二つは“教育用言語”としていいと思うんだけど、率直に言ってどう?」って。

Haskell

ある種の言語オタが持ってるラムダ計算への憧憬と、ACM監修の関数型言語純粋さへのこだわりを

彼女に紹介するという意味ではいいなと思うのと、それに加えていかにも参照透過な

純粋関数型で許される計算順序の規定」を体現するモナド

純粋関数型言語の非正格性」を体現する無限リスト

の二要素をはじめとして、オタ好きのする要素を言語にちりばめているのが、紹介してみたい理由。

Common LISP

たぶんこれを見た彼女は「Emacsだよね」と言ってくれるかもしれないが、そこが狙いといえば狙い。

この系譜の作品がその後続いていないこと、これがポール・グラハムの間では大人気になったこと、

ポールグラハムがウェブサービスの構築に使って、それがいろんなウェブサービス開発者にも影響しててもおかしくはなさそうなのに、

実際のウェブサービスでこういうのが使われないこと、なんかを非オタ彼女と話してみたいかな、という妄想的願望。

Perl

「やっぱりプログラミングバッチ処理のためのものだよね」という話になったときに、そこで選ぶのは「awk

でもいいのだけれど、そこでこっちを選んだのは、この言語にかけるラリーdankogaiの思いが好きだから。

断腸の思いで延ばしに延ばしてそれでも2008年、っていうPerl 6のリリース予定日が、どうしても俺の心をつかんでしまうのは、

そのリリースというイベントへの諦めきれなさがいかにもオタ的だなあと思えてしまうから。

Perlリリース延期を無駄だとは思わないし、拙速リリースは無茶だろうとは思うけれど、一方でこれが

GuidoやMatzだったらきっちり予定通りリリースしてしまうだろうとも思う。

なのに、各所に頭下げて迷惑かけてリリースを延期してしまう、というあたり、どうしても

「自分の言語を形作ってきた哲学(TMTOWTDI)が捨てられないオタク」としては、たとえラリーがそういうキャラでなかったとしても、

親近感を禁じ得ない。言語自体の高評価と合わせて、そんなことを彼女に話してみたい。

Postscript

今の若年層でPostscriptを直で書いたことのある人はそんなにいないと思うのだけれど、だから紹介してみたい。

PDFよりも前の段階で、DTP哲学とか印刷技法とかはこの作品で頂点に達していたとも言えて、

こういうクオリティプログラミング言語エディタで書かれてたんだよ、というのは、

別に俺自身がなんらそこに貢献してなくとも、なんとなくプログラミング言語好きとしては不思議に誇らしいし、

いわゆるJava VMでしかスタック言語を知らない彼女には見せてあげたいなと思う。

PHP

PHPの「HTMLに埋め込み可能な点」あるいは「RDBMSとの接続性」をオタとして教えたい、というお節介焼きから教える、ということではなくて。

HTMLテンプレートエンジンを作り続ける」的な感覚言語オタには共通してあるのかなということを感じていて、

だからこそアメリカ版『Yahoo!』の開発言語PHP以外ではあり得なかったとも思う。

「MとVとCを分離なんてできない」というオタの感覚今日さらに強まっているとするなら、その「オタクの気分」の

源はPHPにあったんじゃないか、という、そんな理屈はかけらも口にせずに、

単純に楽しんでもらえるかどうかを見てみたい。

Prolog

これは地雷だよなあ。地雷が火を噴くか否か、そこのスリルを味わってみたいなあ。

こういう述語論理風味の計算をこういうかたちで言語化して、それが非オタに受け入れられるか

気持ち悪さを誘発するか、というのを見てみたい。

C++

9本まではあっさり決まったんだけど10本目は空白でもいいかな、などと思いつつ、便宜的にC++を選んだ。

Javaから始まってC++で終わるのもそれなりに収まりはいいだろうし、テンプレート以降のメタプログラミング時代

の先駆けとなった言語でもあるし、紹介する価値はあるのだろうけど、もっと他にいい言語がありそうな気もする。

というわけで、俺のこういう意図にそって、もっといい10本目はこんなのどうよ、というのがあったら

教えてください。

「駄目だこの増田は。俺がちゃんとしたリストを作ってやる」というのは大歓迎。

こういう試みそのものに関する意見も聞けたら嬉しい。

2008-07-18

vimperator最高

ほんとにもう最高。

楽したい人間+ハマり性な人間には、こーゆーカスタマイズがしがし出来るツールが最高なのよ。

オレ流ブラウザ環境整備できるのももうタマラン。

エディタならvimemacsでもいいけど、あんまり詳しくない。

他のツールはカスタマイズ性で見劣りする。

こだわりのない人間にはどんなツールでもオッケーなんだろうね。

オレはこだわるところはこだわる。

ちょっとした不便に気づかないか気づいても甘受してしまうような人間と、今はクリアできなくともなんとか今後の課題にしたいと考える人間。

そこの違いだね。

どっちが得かというのはわからんけどね。

優劣とか損得の問題じゃなく、ただオレはそういう人種だってこと。


追記

ブクマありがとう

vimperatorrcねえ。特筆すべき点はないけど、あえて一部抜粋すれば、こんな感じ。

inoremap <C-1> <Esc>1gt
inoremap <C-2> <Esc>2gt
inoremap <C-3> <Esc>3gt
inoremap <C-4> <Esc>4gt
inoremap <C-5> <Esc>5gt
inoremap <C-6> <Esc>6gt
inoremap <C-7> <Esc>7gt
inoremap <C-8> <Esc>8gt
inoremap <C-9> <Esc>9gt
noremap <BS> H
noremap <S-BS> L
noremap ,b <Esc>:bmarks -tags=
noremap u :o<Space> " ldrc+ldrでoで:open出来ない問題を解決
" wildoptions=auto時に一瞬補完が表示されてウザいmapがある - Dis Communication - 符号無し
" http://unsigned.g.hatena.ne.jp/Trapezoid/20080620/1213961754
javascript <<EOM
[
    [',a',':dialog addbookmark'],
    [',c',':viewSBMComments -t h'],
    [',C',':viewSBMComments -t hdl'],
    [',d',':pindownload'],
    [',ld',':set ldrc'],
    [',p',':mb clear-pin'],
    [',q',':toggleldrc'],
    [',R',':so ~/_vimperatorrc'], 
    [',r',':res'],
    [',v',':!vim ~/_vimperatorrc'], 
    ['\\s',':scrapbook'],
    ['\\S',':scrap'],
    ['\\f',':firebug'],
    ['\\d',':dialog downloads'],
    ['\\p',':tabopen chrome://browser/content/places/places.xul'],
    ['!',':set invum'],
    ['B',':ls!'],
    ['\\a',':addons'],
    ['\\e',':errorconsole'],
    ['\\F',':firebugwindow'],
    ['\\d',':dialog downloads'],
    ['\\g',':oepnGMpanel'],
    ['\\G',':toggleGM'],
    ['e',':note'],
    ['<F11>',':fullscreen'],
    ['\\P',':placesnewwin'],
    ['\\H',':historynewwin'],
    ['<C-j>',':togglebookmarksidebar'],
    ['<C-k>',':togglehistorysidebar'],
    ['<C-l>',':addtoldr'],
    ['<C-S-Right>',':removerighttabs'],
    ['<C-S-Tab>',':previousfirebugtab'],
    [',o',':openselectedlinks'],
    [',3',':copy titleAndURL'],
    [',ig',':imageGet'],
    [',io',':imageOpen'],
    ['w',':submit'],
    [',lo',':logout'],
    // nicontroller.js
    [',ni',':nicoinfo'],
    [',np',':nicopause'],
    [',nm',':nicomute'],
    [',nv',':nicommentvisible'],
    [',nz',':nicosize'],
    [',ns',':nicoseek'],
].forEach(function([key,command]){
    liberator.mappings.addUserMap([liberator.modes.NORMAL], [key], "User defined mapping",
        function () { liberator.execute(command); }, {rhs: key, noremap: true});
});
EOM

javascript <<EOM
[
    ['<C-j>',':togglebookmarksidebar'],
    ['<C-k>',':togglehistorysidebar'],
].forEach(function([key,command]){
    liberator.mappings.addUserMap([liberator.modes.INSERT], [key], "User defined mapping",
        function () { liberator.execute(command); }, {rhs: key, noremap: true});
});
EOM
javascript <<EOM
// nicontroller.js plugin
// [N]-
// N 秒前にシークする。
// 指定なしの場合 10 秒前。
liberator.mappings.addUserMap(
    [liberator.modes.NORMAL],
    ['-'],
    'seek by count backward',
    function(count) {
        if(count === -1) count = 10;
        liberator.execute(':nicoseek! ' + '-' + count);
    },
    { flags: liberator.Mappings.flags.COUNT }
);

// [N]+
// N 秒後にシークする。
// 指定なしの場合 10 秒後。
liberator.mappings.addUserMap(
    [liberator.modes.NORMAL],
    ['+'],
    'seek by count forward',
    function(count) {
        if(count === -1) count = 10;
        liberator.execute(':nicoseek! ' + count);
    },
    { flags: liberator.Mappings.flags.COUNT }
);
EOM

Vimperatorで;bでリンクを新しいバックグラウンドのタブに開くようにする。

http://anond.hatelabo.jp/20080709195527

も俺の仕業なんだけど、これvimperator本体に実装してくれないかな。

気になる点・これからの課題

窓の杜 - 【NEWSFirefox 3のスマートロケーションバーに対応した「XUL/Migemo

http://www.forest.impress.co.jp/article/2008/07/07/xulmigemo0105.html

余談

Index of /

http://vimperator.driftaway.org/

に上がるのはたいてい朝の07:30になっているので、いつからかチェックするのが朝の習慣になった。

2008-07-17

MSVisualStudio

emacs風のキーアサインは用意されているのに、vi風のやつが用意されてないのはなぜだ。

モードがあるからできなんだろうけどさ。

2008-06-27

http://anond.hatelabo.jp/20080627002436

おおどうもありがとうございます。

社会人暦は数年あるんですが、この業界に入ったのは今年の3月頃です。全く別職種から。

元々理系なんでCとかFORTRANスパゲティコードくらいは書いたことがあったという感じでした。

(もちろん今現在スパゲティですが)

自作PCは昔々に1台作りました。SATAの読み方は最近知りましたw

ジャンルweb系ではないです。業務系でも組み込み系でもないですが。

ネットワークDBはさっぱりです。あとGUIもわかりません。これはまずいと思っています…。

あと地味にUNIX系OSもよくわかってないです。

この前valgrindをインストールしようとしてよくわかんなくて諦めましたorz

今日makefileが上手く動かなくて発狂しそうになったりもしました。

emacsキーバインドにも慣れないし、cygwin日本語化も結局未だに上手く行かず…。

周りが優秀なので焦るばかりです。これは感謝すべきことですが。

プログラム一本で食べていけるとは思えないし、自分のやりたいこととも少し違うので、

プログラミングに関しては中の上から上の下くらいのレベルを目指そうと思っています。

あと1回は転職すると思いますし、今26なので、30までにはどこにでもいけるようになりたいと思っています。

それにしても憶えること多すぎですね…。全体がわかるようになるのはいつになるのか…orz

2008-06-21

emacs使いの僕がemacsを使わないとき


さあて、viでも使うか……

vi使いの僕がviを使わないとき


どっちも使わないとき

  • 使いたいコマンドを忘れて、思い出せないとき

さあて、これからの時代はやっぱ、Kateだよな。

どっかの統合開発環境みたく、プロジェクトごとに開くファイルを設定できるんだぜ。

Kateを使わないとき

2008-05-15

http://anond.hatelabo.jp/20080515095722

マウスジェスチャマウスだけで全てすませたい時に使う。

プログラミングの時はマウスに手を移したくないのでキーボードのみで済ませられるようにショートカットキーを多用したりキーボードだけですませらるようなエディタemacs, vi)を使用している人は多いだろう。

それと感覚は同じ。ただブラウジングするときや映画でも見るときに、わざわざキーボードに手を移さずにすむように5つボタンマウス使用し、それ以上の機能はマウスジェスチャでまかなう。

ダラダラとブラウジングするのにマウスキーボードショートカットを使うのはかなり効率が悪いだろう。

私が衝撃を受けた10の事柄 -情報系学部のくせに

情報系学部のくせにマジですか!いや、必須とはいわんけどおまえコンピュータ興味ねぇの!?

2008-04-16

http://anond.hatelabo.jp/20080415232005

ほんとにこの人は議論というものをわかってるのかね。一つの論点を挙げたらそれと心中しないといけないとでも思ってるんだろうか。

じゃあまず撤回するところからはじめろよ。くぐるまたぐらを激しく間違えてんだよ君は。

そういう意味でこの批判は文字通りナンセンス無意味)。「このような論点が存在する」という主張は「このような価値観こそが正しく、他は全て間違っていると信ずる」というものとは全く異なる。だいたい俺が一度でも「役に立つから良い」などと主張したか?「役に立つものだけが良いものだ」と思っている奴が相手だと想定したから、「ある特定の価値観を認めたしてもこういう論点が存在する」と言ったのだ。それのどこが、俺がその「特定の価値観」を主張したことになるのだ。

これだけ言ってもわからないとしたら、君は論理的思考というものが全くできないと言って然るべきだろうね。

なお、くぐるまたぐらを間違えたことは認めるが、それは君がどういう思想の持ち主だったかを読み違えただけだ。しかし、匿名でものを書いている君が「俺様のことを正しく理解しないとは無礼千万!」などという資格はまるでないぞ。

だいたい、文学価値社会経済的国政的有用性で測ろうなどというのがそもそも冒涜だ。

それもまた極端な価値観だな。文学は神聖にして侵すべからずというのか。芸術的にも価値があり、経済的に価値があるならなおのことよいではないか。

知的社会政治的有用性で芸術を測ってる段階で、俗物だと思うけどなあ。

じゃあ例えば君が美術館の館長で、「芸術なんて無駄なものに金が出せるかボケぇ」ってな思想の持ち主の市長によって予算が激減させられそうになったとき、彼にどう反駁するんだ?芸術に対して経済的有用性を云々するのは冒涜である、と主張して、その結果宗教論争に陥って君は解雇、職員も路頭に迷う、なんてのが理想なのか?それこそ勘違いヒロイズムもいいところだ。職員はいったいどうなるのだ。

俺、別に英語帝国でいいと思ってるけど。

これが「世に差別不正が溢れているとして、そりゃ一凡人に出来ることは少ないが、開き直って加担するような真似は俺には出来んね」といった人間言葉なんだからお笑いぐさだね。

欧米古典文化には、確かに今でも通じる知的、思想的、社会政治的意義はあるよ。

文芸的な、要は道楽としての価値は認めるが、それ以上のものはないだろ。やっぱぜんぜん違うよ。

文化を有用性で測るのは冒涜だとかおっしゃったのはどこの誰様でしたっけねえ。

日本は所詮アジアだよ。それが証拠に、自由主義民主主義もまるで精神的なところに根付いてなくて、簡単に前時代的な思想に転ぶじゃないか。

差別発言ですな。そう言い切ったあなたが19世紀の人間ならあなたはヘーゲルになれたかもしれない。だが今は21世紀なのでな。ヘーゲルの5693番煎じぐらいのことを言っても「事実関係に反する」と言われて終了。欧米先進国様にもキリスト教原理主義とか移民排斥とか悪しき伝統の宿痾はいくらでもある。

あんたがもしヘーゲルなら、あるいは丸山眞男でもいい、欧米先進国様の良い点だけに憧れを持って、悪い点を等閑視していたとしても、情報の不足として酌量された点はあるだろう。だが現代ではそうはいかないぞ。

アベレージをほどほどに高く保ちつつ、それで足りないようなエリート海外で一流の教育を受けて来い、って言ってるだけなんだが。

そんな極少数のエリートのために世界最高峰教育機関を整備するコストは、バカにならんと思うがね。

わざわざそんなことをしたってなんのメリットもないし、むしろデメリットしか想定できないと主張しているのがわからんのか。

えーと、それから旧帝大卒業生が世の中のどれだけの割合になるのか調べてからものを言おうね。

それを言うなら、そもそもFORTRANも知らんバカが情報工学を語るなw

Fortranを知らないなんて一言も言ってないのにねえ。天声でも聞こえたのかなあ。

実践的なことばっかやってんじゃねーか。お前がその実践性を理解できてないだけだ。

釈迦に説法。仮にも俺は工学修士だ。お前ごときがエラそうに言ってる話なんて学ばずとも勝手に覚えたわ。

工学は実践に直結しているに決まってるじゃないか。「実践」のレベルが違うと言っているのだ。誰が講義Emacsgrepの使い方なんか教えてるか、馬鹿馬鹿しい。時間を掛ければいつでも必要なだけ身に付けられることをわざわざ貴重な時間をいくらも割いてまで教えるわけがなかろう。

だいたい、線型代数微積も何も理解できないお前ががあのシラバスの内容を大まかにでも正確に理解できているわけがないんだがね。それのどこが君のいったような意味で「実践的」なのだ?え?

言っておくが、どっかで聞きかじったような言葉言葉として知っていることと、内容まで理解していることは天と地の差だぞ。誰かがあの内容に沿って作ってくれたライブラリを使ってコーディングすることは「情報工学」じゃないぞ。わかってんのかその違いが。

無知は罪ではないし、自分の無知を自覚できないことに同情の余地はあるが、自分が賢いと思い込むのは迷惑千万だな。

2008-04-14

http://anond.hatelabo.jp/20080414014639

あと、書き忘れてたけど、その流れで言えば、日本でもラテン語ギリシャ語欧米古典文学を学ぶべきだ、ってなるのが筋なんじゃねーの?

さて、

関数型言語コンパイラOSが必須科目なのはおかしい

に反論すればいいんだな。オッケー。

2008-04-05

さくらの旧(?)専用サーバ CentOS 4.6 を Linux-Vserver に入れ替えてみた

前置き

契約直後の初期状態

  • ホスト名をsakura2とした。
  • sshd と vsftpd が動いていた。
[admin@sakura2 ~]$ uname -a
Linux sakura2 2.6.9-67.0.4.ELsmp #1 SMP Sun Feb 3 07:08:57 EST 2008 i686 athlon i386 GNU/Linux
[admin@sakura2 ~]$ cat /etc/issue.net
CentOS release 4.6 (Final)
Kernel \r on an \m

CentOS 5 へのアップグレード(?)

中身の整理
  • なるべく最小構成に近い最新のCentOS4.6にしてみる。
# yum update
# yum remove emacs emacspeak emacs-leim emacs-common
# yum remove NetworkManager
# yum remove bluez-bluefw bluez-hcidump bluez-libs bluez-utils
# yum remove cups cups-libs
# yum remove irda-utils isdn4k-utils pcmcia-cs wireless-tools
# yum remove wpa_supplicant gpm xinetd
# yum remove ppp nfs-utils lksctp-tools autofs
# yum remove xorg-x11-libs
# yum remove selinux-policy-targeted
# yum remove vsftpd
# yum clean all
CentOS 5 にアップグレード(?)してみる
[admin@sakura2 ~]$ uname -a
Linux sakura2 2.6.9-67.0.7.ELsmp #1 SMP Sat Mar 15 06:54:55 EDT 2008 i686 athlon i386 GNU/Linux
# rpm -Uvh http://mirror.centos.org/centos/5/os/i386/CentOS/centos-release-notes-5.1.0-2.i386.rpm \
http://mirror.centos.org/centos/5/os/i386/CentOS/centos-release-5-1.0.el5.centos.1.i386.rpm
[root@sakura2 admin]# cat /etc/issue.net
CentOS release 5 (Final)
Kernel \r on an \m

# yum update glib procps udev iptables
# rpm -Uvh --nodeps http://mirror.centos.org/centos/5/os/i386/CentOS/initscripts-8.45.17.EL-1.el5.centos.1.i386.rpm \
http://mirror.centos.org/centos/5/os/i386/CentOS/mkinitrd-5.1.19.6-19.i386.rpm
# rpm -Uvh http://mirror.centos.org/centos/5/os/i386/CentOS/e2fsprogs-1.39-10.el5.i386.rpm \
http://mirror.centos.org/centos/5/os/i386/CentOS/e2fsprogs-libs-1.39-10.el5.i386.rpm \
http://mirror.centos.org/centos/5/os/i386/CentOS/e2fsprogs-devel-1.39-10.el5.i386.rpm
# rpm -Uvh http://mirror.centos.org/centos/5/os/i386/CentOS/kernel-2.6.18-53.el5.i686.rpm
[admin@sakura2 ~]$ uname -a
Linux sakura2 2.6.18-53.el5 #1 SMP Mon Nov 12 02:22:48 EST 2007 i686 athlon i386 GNU/Linux

# yum clean all

[root@sakura2 admin]# yum --version
Loading "fastestmirror" plugin
2.4.3
[root@sakura2 admin]# rpm --version
RPM version 4.3.3
# yum update
Error: Missing Dependency: python-abi = 2.3 is needed by package python-elementtree
  • 解決法がわからないので放置

Linux-Vserver の導入

# vi /etc/ssh/sshd_config
# /etc/init.d/sshd restart
# vi /etc/yum.repos.d/dhozac-vserver.repo
# yum update kernel
# yum install util-vserver{,-core,-lib,-sysv,-build}
[admin@sakura2 ~]$ uname -a
Linux sakura2 2.6.22.19-vs2.3.0.34.1 #1 SMP Mon Mar 17 05:32:04 EDT 2008 i686 athlon i386 GNU/Linux

ホストOS環境の整備

# yum update bash screen rsync
# /etc/init.d/iptables save
# /etc/init.d/iptables start
# cat /etc/sysconfig/iptables

# Generated by iptables-save v1.3.5 on Mon Mar 24 19:57:07 2008
**filter
:INPUT ACCEPT [1067:96557]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [63680:6208436]
:e0 - [0:0]
-A INPUT -i eth0 -j e0
-A e0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A e0 -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A e0 -p tcp -m tcp --dport 22 -j ACCEPT
-A e0 -p tcp -m tcp --dport 80 -j ACCEPT
-A e0 -p tcp -m tcp --dport 443 -j ACCEPT
-A e0 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Mon Mar 24 19:57:07 2008
# Generated by iptables-save v1.3.5 on Mon Mar 24 19:57:07 2008
**nat
:PREROUTING ACCEPT [179:10642]
:POSTROUTING ACCEPT [213:13895]
:OUTPUT ACCEPT [251:16220]
-A PREROUTING -s ! 10.0.0.0/255.255.255.0 -p tcp -m tcp --dport NNNN -j DNAT --to-destination 10.0.0.1:22
-A POSTROUTING -s 10.0.0.0/255.255.255.0 -d ! 10.0.0.0/255.255.255.0 -j SNAT --to-source AAA.BBB.CCC.DDD
COMMIT
# Completed on Mon Mar 24 19:57:07 2008

ゲストOSの設定

[root@sakura2 ~]# /usr/sbin/vserver-stat
CTX   PROC    VSZ    RSS  userTIME   sysTIME    UPTIME NAME
40013   27 301.5M  73.8M  30m36s31  56m38s90  11d06h56 one
40015    5  10.8M   4.4M   0m28s33   0m12s68   9d04h23 two
40016    2   4.2M   1.3M   0m00s47   0m00s64   0m01s97 three

追記

2008-02-29

http://anond.hatelabo.jp/20080229133914

いやー、Emacsがもてはやされたのは歴史の流れだから。歴史の視点で見ないとわからないよ。

viが比較的エディタ世界にとどまったのに対し、emacsシェルヒストリ機能をつけてみたり(bshにはなかった)、gdbにきちんとしたUIをつけてみたり(gdbの生のコマンドはひどい)、マルチウインドウを提供((テキスト画面で!))したりした。

だから、それらが全部洗練されたGUI環境で提供される現代、Emacsが統合環境だとかいっても通じない。結局、Emacsの今の利点は、統合開発環境すら作れそうなくらい強力なEmacs Lispマクロを持っている、ことだけだと思う。それが欲しい人は、それだけでEmacsを唯一絶対神と認めるよ。

おれは、Emacsにあこがれていたけど、こだわりはない。viにもない。edexがあれば最低機能は十分。

http://anond.hatelabo.jp/20080229124417

開発環境Linux

だけどオレは win にも emacs (NTemacs) を入れる。

オレは vi はあまり使いこなしていないから、vi はちょっと設定ファイルCUI編集するときだけ使う。

よーし、プログラミングやるぞー、というときは emacs を使う。

emacs (vi) を使う理由はいちいち言語ごと、プラットフォームごとに開発環境を変えたくないから。

php → Zend IDE とか C++Visual Studio とか Python → ? とか Ruby → ? とかやってらんない。

そもそも win でしか動かない IDE 多いし。

http://anond.hatelabo.jp/20080229114003

覚えるべき事の量は多いけど、その分慣れると速いし多くの事ができる。SISCとRISCの違いみたいな。

viは単純な命令セットだけで多くの事をこなそうとしてて、emacsはたくさんの命令セットがあるけど1命令でさくっと大きな問題を処理してくれる。

で、emacsは機能拡張も自分でできちゃうので、より(人間脳内メモリを大量消費してより高速(人間の操作量的な意味で)に動作するソフトウェアになっていく。

http://anond.hatelabo.jp/20080229114003

日本語入力ならviよりEmacsの方が入力しやすい(かもしれない)。

だって、viだとカーソル移動や編集の際にわざわざ日本語入力を切替えないといけなくなるから。

(俺の場合はeggとかなんとか、ディストリビューションごとにemacs日本語環境の設定が違うので、すんごい混乱した。)

ディストリビューションの設定次第でEmacsが活かされたり、殺されたりしてるような気がする。(そもそも俺自身にEmacsカスタマイズするだけの気概も無いのだが。)

とかいいつつ、俺は日本語の文章を打つ場合はKDEGNOMEテキストエディタを使ってる。

でもEmacsのいくつかのコマンドbashとかinfoコマンドと多少の互換性があるので覚えておいてもいいかもね。

manの操作はvi寄りだけど。

http://anond.hatelabo.jp/20080229121938

Emacs=統合編集環境

とか言ってみる。

これなー。よくわからんのよ。何が出来るか箇条書きされてもEmacsだけで出来るすごさってのが分からない。

普通こういうのは作業している人のモニターを眺めたりして「おお、いまのどうやったの?」とか聞いて学んでいくんだけど、Emacsだけは身近に強者がいなかったためにすごさがわかんない。

だから、学ぶ気もなくて、あいかわらずvi使ってる。

なんだか寂しいような悔しいような。

http://anond.hatelabo.jp/20080229121938

横はいり。

クライアントマシンwin人間からすると、

なんでEmacsがそこまであれなのかわからんのだけど・・・

WinScpみたいんでこっちで編集したんじゃダメなの?

Emacs使うひとはもっと編集スパンが細かいのかな??

SSHごしとかでlinuxアクセスしてもviでまにあうぐらいの設定編集レベルしかしないから、

Emacsの必要性があまりわからん。

SSH越しとかでバリバリスクリプティングするの??

それとも編集専用マシンがそもそもLinuxなの?

後者であれば納得なのだけど、前者だとするとちょっと理由がわからないです><

http://anond.hatelabo.jp/20080229120851

UNIX全体がそうでしょ。

UNIXコマンド覚えるだけでもしんどいです。

viUNIXの操作 となっているのが意味不明だけど、vi がお気に入りだってんなら vi でいいでしょ。

そこは書き方間違ったよ。ごめん。テキスト編集って書くべきだった。

よく vi vs emacs の(不毛な)議論があるように基本的にはどちらかでいい。

emacsを使用することで、特定条件下であれviよりも能率のいい場面があるのかなと思ったんだけど、

viでも十分に可能で、あえて覚える必要ないってことなのか。

http://anond.hatelabo.jp/20080229114003

Emacs=統合編集環境

とか言ってみる。

使い込んでいる人は統合開発環境みたく「ちょwwwおまwww」って人も多いかと思われる。

ログイン ユーザー登録
ようこそ ゲスト さん