Утиліти "повинен мати" ОС X X Terminal [закрито]


109

Я щойно читав із задоволенням і багато чому дізнався з цих питань:

Але я не знайшов у цих своїх улюблених інструментів, якими я користуюся щодня , і я думаю, що це тому, що це призначені для OSX / Terminal інструменти , що не вписуються добре у вищезазначені питання.

Мої улюблені за уподобанням: oh-my-zsh , homebrew (але також макпорти), janus ...

Ці інструменти мають спільне:

  • Термінал : встановлення та використання
  • OSX призначений : brewє, gitні!
  • Проста установка : один лайнер, тобто. git clone; wget ...тощо.
  • Розширювана : можливо, має розширення чи простий API (наприклад, о-мі-зш із плагінами, варити формули, janus із вбудованими плагінами vim ...)
  • Часто з відкритим кодом, безкоштовним, розміщеним на Github, сценарієм, в основному (але не тільки!) З рубіном ...

Чи знаєте ви будь-які інші подібні обов'язкові інструменти? Я хотів би відкрити для себе нові!

Будь ласка, включіть лише одну утиліту на відповідь. Крім того, не додайте копії. Перевірте спочатку перед публікацією. Якщо ви бачите дублікат, будь ласка, скажіть відповідь та повідомте автора, залишивши коментар.


homebrew і macports разом можуть мати проблеми, оскільки macports буде читати файли, встановлені homebrew, і вони не обов'язково будуть правильною версією
user151019

правда, але в 95% часу немає жодної основної проблеми, а для решти 5% випадків просто рішення тимчасово змінюється на $ PATH ... Я вважаю за краще варити легкість і легкість, але макпорти мають набагато більше пакетів, які ми, ймовірно, ніколи не бачимо по-домашньому ...
Вінсент

@Vincent - вся суть домашньої мови полягає в тому, що ви можете досить легко створити власну формулу, тому "ніколи не бачимо по-домашньому", здається, цілком пропустіть її суть. MacPorts - це зручно, оскільки вам не потрібно робити багато чого, ефективно даючи вам інсталятор стилю BSD portабо Debian apt-get.
ocodo

Добре відповісти на власне запитання - чому б не розділити «відповіді» і просто залишити питання.
bmike

@slojomo, поглянь на деякі дуже складні макспортні "порти" з безліччю залежностей, як потоп, ти зрозумієш ... плюс той факт, що у домашньої програми є політика, яка не містить формул, що переважають системні компоненти ... (наприклад, mysql ...)
Вінсент

Відповіді:


92

Домашнє пиво

Відсутній менеджер пакунків для ОС X.

Це дивовижний менеджер пакунків, дуже легкий і простий у використанні. Принцип KIS, який змушує мене думати про archlinux. Його громада велика і дуже активна.

.

Дивіться також brew tapкоманду, яка містить деякі відсутні формули, які можуть бути корисні, як, наприклад, коли вам потрібна остання версія php> brew tap josegonzalez/php.

(Homebrew має політику не замінювати системні компоненти, але ей, іноді доведеться)


Ваш посилання FormulaAlt не працює. (404)
ottel142

редагується, щоб згадати про те, brew tapщо зараз є вбудованим рішенням для обробки зовнішніх "формул" .
Вінсент

Зауважте, ви також можете вказати "зовнішню" формулу безпосередньо через URL-адресу до її
formula.rb

ОНОВЛЕННЯ: Homebrew тепер готовий замінити системні компоненти, наприклад, make, curl, bash, zsh ... Вам просто потрібен додатковий крок: brew link --force <package>перезаписати системну копію. Також деякі несуттєві копії пакунків зберігаються в homebrew-dupesрепо замість канонічного.
Калеб Сю

62

iTerm2 (безкоштовно)

Згадується в коментарях, але це важливо , тому для акценту ...


7
Серйозно, забудьте про OSX Terminal + Visor, iTerm2 набагато краще, я цілий день ділю панелі в повноекранному режимі за допомогою гарячої клавіші a la la visor ... Є також багато інших чудових функцій ...
Vincent

1
Як не дивно, він не оновлював стабільний реліз з липня 2011 року, а бета-версія вийшла в липні 2012 року, яка ніколи не отримувала рекламу. Цей проект мертвий?
Дан Розенстарк

1
@Yar це все ще розробляється. Автор підтримує офіційне репо тут: github.com/gnachman/iTerm2
mh.

37

Ack (безкоштовно)

Відмінно підходить для пошуку текстових файлів, вам більше ніколи не доведеться використовувати комбінацію знаходження / grep.


Ack має два приємні плагіни інтеграції для основних текстових редакторів OSX:


3
+1 Ack - це така дивовижна заміна грепа, якби не те, що grepє в моїй м’язовій пам'яті, я б ніколи не використовував це.
ocodo

Ack є обов'язковим інструментом, робить grep для розробників доброзичливим, але це трохи поза темою, оскільки він не пов'язаний з OSX, редагуючи цю відповідь, щоб додати інформацію Vim / AckMate.
Вінсент

1
grinтакож є хорошою альтернативою.
gak

усмішка чудова, ось посилання: pypi.python.org/pypi/grin
Лорін Хохштейн

2
В наші дні все йде про The Silver Searcher .
Zev Eisenberg

33

о-мі-зш (безкоштовно)

Кілька функцій, автозаповнення помічників та інше, що змушує кричати ...

"О МОЙ ЗШЕЛЬ!"

Змусив мене оболонку оболонки, коли я просто використовував її, коли мені довелося ... Zsh "баш на стероїди", з oh-my-zsh та всіма його плагінами, багато специфіки для OSX, оболонка набагато більш зручна та потужна ... О, також теми досить класні.


Також варто ознайомитись з деякими альтернативами / доповненнями матеріалів на основі zsh:

  • prezto - це повне перезапис oh-my-zsh, чисте та набагато активніше, зараз його використовую :)
  • zsh-users (Безкоштовно) Деякі дуже приємні речі zsh (люблять виділення синтаксису)
  • zcm (безкоштовно) zsh-менеджер конфігурації (натхненний oh-my-zsh)

1
zshз oh-my-zshдійсно надзвичайним, він навіть виконає завершення шляху через scp/ sshкоманду, якщо ви включили аутентифікацію відкритого ключа на сервер, на який ви дивитесь, він змінюється. (приголомшливо-потужне завершення ... /v/m/s/TAB 'розширюється до /Volumes/MyDrive/Src)
ocodo

+1 для prezto. Мені подобається підхід до використання підмодулів git.
Жолудь

Також перевіряйте github.com/zsh-users/antigen
ocodo

Prezto набагато швидше, ніж oh-my-zsh. Спробуйте спробувати.
Rnhmjoj

32

lolcat (безкоштовно)

льодяник


2
Безумовно, найкорисніший термінальний інструмент, ева! (Після коров’яку та філе, тобто.)
ocodo

9
Зрозуміло, що підтримка 256-кольорової підтримки була додана до Lion Terminal.
Кріс Пейдж

2
приємно (хай), але трохи поза темою, не дуже пов’язаною з OSX
Vincent

Хто дбає? =) Це приємний інструмент!
Матьє Ріглер

Найкорисніша установка будь-коли.
січня

24

Функції оболонки

Я не можу жити без цього.

  • Одна команда для їх оновлення.

    update() {
        local brew="brew update; brew upgrade;"
        local gisty="gisty pull_all; gisty sync_delete"
        local gem="gem update;"
        local pip="pip freeze --local | grep -v '^\-e' | cut -d = -f 1  | xargs pip install -U -q"
        sh -c $brew$gisty; sudo sh -c $gem$pip
    }

    Очевидно, ви можете додати більше команд відповідно до використовуваних вами менеджерів пакетів. Це зроблено мною.

  • Змініть каталог на поточний каталог Finder

    cdf() {
        target=`osascript -e 'tell application "Finder" to if (count of Finder windows) > 0 then get POSIX path of (target of front Finder window as text)'`
        if [ "$target" != "" ]; then
            cd "$target"; pwd
        else
            echo 'No Finder window found' >&2
        fi
    }

    cdfщоб відкрити каталог Finder у терміналі та open .відкрити у Finder каталог терміналів каталогу.

    Джерело

  • Отримуйте кольори на сторінках з інструкціями

    man() {
        env \
        LESS_TERMCAP_mb=$(printf "\e[1;31m") \
        LESS_TERMCAP_md=$(printf "\e[1;31m") \
        LESS_TERMCAP_me=$(printf "\e[0m") \
        LESS_TERMCAP_se=$(printf "\e[0m") \
        LESS_TERMCAP_so=$(printf "\e[1;44;33m") \
        LESS_TERMCAP_ue=$(printf "\e[0m") \
        LESS_TERMCAP_us=$(printf "\e[1;32m") \
        man "$@"
    }

    Джерело

  • Використовуйте приватний ключ RSA в git

    git(){
        trap 'rm -f /tmp/.git_ssh.$$' 0
        SSH_KEY="~/.ssh/id_rsa"
        echo "ssh -i $SSH_KEY \$@" > /tmp/.git_ssh.$$
        chmod +x /tmp/.git_ssh.$$
        export GIT_SSH=/tmp/.git_ssh.$$
        [ "$1" = "git" ] && shift
        git "$@"
    }

    Я помітив, що введення цього у ваш .rc сповільнить git. Якщо ви хочете цього уникнути, вам слід розпакувати функцію та зберегти її як скрипт оболонки у вашому$PATH

    Джерело (я його трохи змінив. Оригінал щоразу запитує ключовий шлях.)

  • Виділення синтаксису в кіт

    cat() {
        local out colored
        out=$(/bin/cat $@)
        colored=$(echo $out | pygmentize -f console -g 2>/dev/null)
        [[ -n $colored ]] && echo "$colored" || echo "$out"
    }

    Це може бути досить повільним, оскільки перед роздруком його потрібно проаналізувати весь файл. Ніколи не використовуйте це у двійковому файлі!

    pip install Pygments для встановлення пігментів.


використання приватного ключа RSA в git краще з налаштуванням SSH через ~ / .ssh / config.
Ейр Нім

21

Inconsolata-dz (безкоштовно)

Це незначна модифікація оригінальної Inconsolata . Це фантастичний одношаровий шрифт для використання з Terminal.app, TextMate, MacVim та будь-де ще вам потрібен. Обов'язковий код для будь-якого кодера. введіть тут опис зображення


+1 Мені це подобається більше, ніж ProfontX
EmmEff

1
На жаль, це не дуже добре виглядає на вашому екрані.
Петро Штібрані

Здається, він зазнав деяких артефактів стиснення - замінив його (сподіваємось) кращим!
Інгмар Хупп

Дякую. Зараз це мій шрифт за замовчуванням майже в кожній програмі для написання тексту.
Rnhmjoj

19

TotalTerminal (безкоштовно)

Вкладки, козирок, гарячі клавіші, дуже прості та надійні. Добре підтримується з частими оновленнями.

TotalTerminal


16

MTR (безкоштовно) від BitWizard - поєднує pingіtraceroute

Установка: brew install mtr --no-gtk

                                            Packets               Pings
 Host                                     Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. 217.70.191.253                         0.0%    32    0.5   1.7   0.3  17.6   3.8
 2. p252-core4-d.paris.gandi.net           0.0%    32    0.5   1.1   0.3  17.8   3.1
 3. xe2-1-24-vcore1-dc1.balt.gandi.net     0.0%    32   97.4 105.7  96.9 187.7  22.0
 4. eqixva-google-gige.google.com         80.0%    31  100.8 100.2  99.6 100.8   0.4
 5. 209.85.252.80                          0.0%    31  100.3 108.0 100.0 210.4  24.3
 6. 209.85.243.114                         0.0%    31  111.9 112.6 111.7 118.6   1.2
 7. 64.233.174.87                          0.0%    31  119.8 112.7 111.6 119.8   1.9
    64.233.174.117
 8. 209.85.242.181                        16.1%    31  112.0 117.0 111.8 125.2   5.1
    209.85.253.185
    209.85.242.177
    209.85.253.181
 9. vx-in-f105.1e100.net                   0.0%    31  112.0 112.3 111.6 116.4   0.8

Whatmask (безкоштовно) від Laffey Computer Imaging - калькулятор підмережі IPv4

Завантажте OS X бінарний . Також в Інтернеті .

$ whatmask 192.168.5.6/22

------------------------------------------------
           TCP/IP NETWORK INFORMATION
------------------------------------------------
IP Entered = ..................: 192.168.5.6
CIDR = ........................: /22
Netmask = .....................: 255.255.252.0
Netmask (hex) = ...............: 0xfffffc00
Wildcard Bits = ...............: 0.0.3.255
------------------------------------------------
Network Address = .............: 192.168.4.0
Broadcast Address = ...........: 192.168.7.255
Usable IP Addresses = .........: 1,022
First Usable IP Address = .....: 192.168.4.1
Last Usable IP Address = ......: 192.168.7.254

приємно, але трохи поза темою, не дуже пов’язаною з OSX :)
Vincent

ого, ця річ дивовижна. thx для обміну
jupp0r

Як запустити mtr? Незалежно від того, чим я запускаюсь, навіть якщо хочу дізнатися допомогу чи версію, я не можу отримати
розроблені

Ви можете запустити його sudo mtr example.comабо встановити бінарний файл за допомогою chown root:admin /usr/local/sbin/mtr && chmod +s /usr/local/sbin/mtr.
Інгмар Хупп

16

Автоматичне підключення (безкоштовно)

Відмінна утиліта командного рядка, яка зберігає cdкоманди та автоматично створює ярлик швидкого заповнення до ваших найбільш доступних каталогів.

Ще краще, якщо кілька каталогів мають схожу назву (починаючи з однакових символів), Autojump просто вибере той, до якого ви найчастіше переходите. Вам не доведеться вводити ціле ім’я.

Приклад:

cd project1

j pтепер перенесе вас прямо до повного шляху project1 .

Тепер , що якщо створити подібну папку під назвою project2 який ви також отримати доступ до часто (але менше , ніж project1 ), Autojump призначатиме меншу вагу проекта2 і доставить вас прямо до project1 .

Якщо ви натиснете, наприклад, TABпісля введення тексту "pro", ваша оболонка відобразиться project__, натякаючи на те, що існує більше 1 відповідного каталогу. Ще один TABхіт відобразить список відповідних каталогів і дозволить вибрати той, який ви маєте на увазі.

Примітка. Нещодавно я встановив ZSH і відзначив певні перешкоди через функції автозаповнення. Autojump чудово працює на ванільному терміналі.


Під час використання zsh просто спробуйте cd -[TAB], щоб побачити, як ви дістаєтесь.
ocodo

@Slomojo Це інакше; стрибки переходять в ієрархію з виконаними проміжними кроками. Якщо немає функції zsh, я пропускаю це, що робить це (дуже можливо, я щось пропускаю).
Дейв Ньютон

15

Соляризований (безкоштовно)

Колірна схема для терміналу.

Lion підтримує кольори ANSI, тому такі речі, як SIMBL, більше не потрібні.

Для Snow Leopard та новіших версій вам знадобиться SIMBL, щоб максимально використовувати його, оскільки підтримка кольорів у Terminal.app обмежена.


fyi, його версія vim поставляється з janus;)
Вінсент

Соляризований для Lion Terminal для мене виглядає не зовсім правильно - кольори вимкнено порівняно з Vim та iTerm. Хтось із цим стикався?
yjsoon

3
@yjsoon забудьте Lion Terminal, використовуйте iTerm2 ...
Vincent

1
@Vincent Мені сподобалось iTerm2 ... поки Lion Terminal не вийшов, і не міг відкривати нові вкладки в тому самому каталозі, що і поточна вкладка, і сіріти історією. Чекаю, коли iTerm отримає їх.
yjsoon

@yjsoon, я не здивуюся, що ви можете отримати таку поведінку за допомогою плагінів oh-my-zsh ... або з трохи сценаріїв;) omz ftw!
Вінсент

14

MacPorts

Проект MacPorts - це ініціатива спільноти з відкритим кодом, щоб створити просту у використанні систему для компіляції, встановлення та оновлення програмного забезпечення з відкритим кодом на основі командного рядка, X11 або Aqua в операційній системі Mac OS X.

Багато людей скажуть, що ви не використовуєте макпорт, а замість нього використовуєте домашню. Це здебільшого вірно, домашній пиріг легший і простіший у використанні . Але макпорти пропонують набагато більше пакунків, і деякі з них ніколи не прийдуть до домашнього, через свою різну філософію. (Я використовую обидва, для різних потреб)

Наприклад, я рекомендую GTK в його кварцовому (рідному OSX) варіанті:

sudo port install gtk2 +no_x11+quartz

Потім, коли ви встановите пакет, який може отримати з нього користь, наприклад, wireshark ... Ви отримаєте власний інтерфейс OSX, швидший і виглядати набагато краще, ніж X11 ...


13

DTerm (безкоштовно) програмним забезпеченням Decimus

Схожий на Visor, але з деякими надзвичайними зручностями (також, здається, він активно працює)


12

Пошук срібла (безкоштовно)

Засіб пошуку коду, схожий на ack, але швидший.

Встановіть його заварити

brew install the_silver_searcher

8

Обід (безкоштовно)

Привітна обгортка для startctl. Запустіть своїх агентів та йдіть на обід!

Зручний інструмент для управління (запуск / зупинка / перезапуск) служб / демонів OSX ...

Ось дорогоцінний камінь: gem install lunchy


8

Бропажі :

Сторінки bro - це легко читається доповнення до чоловічих сторінок. На сторінках Bro показані стислі загальноприйняті приклади для команд Unix.

Приклад:

$ bro find
14 entries for find -- submit your own example with "bro add find"

# Executes a command on the files and folders matching a given pattern, in this case, output the last lines of each .foo file in the current folder and subfolders.
find . -name "*.foo" -exec tail {} \;

        bro thanks      to upvote (24)
        bro ...no       to downvote (0)

.......................................................................................................................................

# Outputs all the file names/paths that start with the name "Casey".  Searches recursively starting from my current directory (.)
# Throws out any error output by sending it to /dev/null
find . -name "Casey*" 2>/dev/null

        bro thanks 2    to upvote (16)
        bro ...no 2     to downvote (0)

.......................................................................................................................................

# Finds all files in and under the current directory that contain 'foo' in their name
find . -iname '*foo*'

        bro thanks 3    to upvote (13)
        bro ...no 3     to downvote (1)

7

Янус + маквім

Janus - це базовий розподіл плагінів vim та інструментів, призначених для роботи над останніми знімками MacVIM

встановіть macvim з домашньою мовою brew install macvim та дотримуйтесь (легких) інструкцій janus, і вам встановлено потужний текстовий редактор, який був попередньо налаштований для вас блискучими розумами. Крива навчання vim - це страшно на перший погляд, але коли вам це буде зручно, ви ніколи не повернетесь (або, можливо, до emacs ...) (fyi, TextMate відмовилися від свого прибутку багатьма кодерами)

Це може здатися дивним, але я вважаю за краще використовувати vim в iTerm2, ніж macvim ... (vim постачається в macvim, просто використовуйте brew install macvim --override-system-vim )


5

ProfontX (безкоштовно)

Мій улюблений шрифт програмування та терміналу на MacOS. (ProfontX - це виправлена ​​версія Profont, яка мала проблеми з деякими символами)


Хороший шрифт, спасибі, не знав цього, спробую, навіть якщо я думаю, що нарешті я відступлюсь від того старого доброго Монако (який чудово підходить в iTerm2)
Вінсент

Монако виграло, для кращої читабельності для моїх очей :), хотілося б перейти на сучасне Menlo, але його спеціальні символи UTF-8 типу too занадто малі для задоволення оболонок.
Вінсент

безумовно, справа смаку;), щось у Монако я просто не витримую, це занадто хрусткий на мій смак, я здогадуюсь
apouche

1
о так, безумовно, особистий вибір. Не знаю, якщо ще не існує, але вікі спільноти виключно про шрифти Dev фіксованого розміру для OSX було б непогано ...;)
Vincent

4

Boxen - Автоматизована конфігурація Mac OS та створення, встановлення / оновлення програмного забезпечення. Це допомагає заощадити багато часу, коли ви хочете точно таку саму настройку (програмне забезпечення, версію) в команді розробників, а також дозволити кожній особі встановити інші інструменти для підвищення продуктивності.


3

Козирок

- цікава утиліта. Він описує себе як:

загальносистемний термінал на гарячій клавіші

Досить круто. Він випадає з терміналу на натисканні комбінації клавіш.

Редагувати :

Visor було перейменовано на TotalTerminal ... (див. Іншу відповідь, це можна / слід видалити)


4
fyi, я перейшов з терміналу на iTerm2, який має функцію "рідного козирка" та багато іншого, як сплітпайн! :)
Вінсент

3

bash-it (безкоштовно)

Альтернатива oh-my-zsh (див. Вище). Дійсно корисна колекція сценаріїв, псевдонімів та функцій для bash. Також передбачена приємна плагінова система для додавання власних доповнень.


3

Go2Shell (безкоштовно)

Не термінальна утиліта, а утиліта для використання терміналу. Він кладе кнопку на панелі інструментів Finder, і при натисканні на неї створюється нове вікно терміналу, введене в цей каталог.

редагувати: Розробники кажуть, що версія програми, доступна безпосередньо у них, має більше функцій, ніж версія в App Store. Я оновив посилання, щоб перейти на їх сторінку, але версія App Store все ще доступна тут .


На сьогоднішній день не працює на Йосеміті.
jherran

@jherran Я ще не пробував цього, але розробники стверджують, що він працює на Yosemite. Якщо це не стосується вас, спробуйте зв’язатися з ними.
ThomasW

Я робив. І сказав мені те саме, вони над цим працюють, але відтепер не працює на Йосеміті.
jherran

Вони випустили версію 2.2 на своєму веб-сайті, на яку вони стверджують, що сумісний з Yosemite.
ThomasW

2

Бвана (безкоштовно)

Технічно не термінальна команда, але дуже зручна для швидкого пошуку сторінки, дозволяючи URL-адресу: "man: ls" показувати html-сторінку сторінки в своєму браузері.


1

Jodies.de ipcalc

 🍺  /usr/local/Cellar/ipcalc/0.41: 4 files, 40K, built in 2 seconds
 bash-3.2$ ipcalc 10.20.30.40/8
 Address:   10.20.30.40          00001010. 00010100.00011110.00101000
 Netmask:   255.0.0.0 = 8        11111111. 00000000.00000000.00000000
 Wildcard:  0.255.255.255        00000000. 11111111.11111111.11111111
 =>
 Network:   10.0.0.0/8           00001010. 00000000.00000000.00000000
 HostMin:   10.0.0.1             00001010. 00000000.00000000.00000001
 HostMax:   10.255.255.254       00001010. 11111111.11111111.11111110
 Broadcast: 10.255.255.255       00001010. 11111111.11111111.11111111
 Hosts/Net: 16777214              Class A, Private Internet

Він також доступний в HomeBrew:

 bash-3.2$ brew install ipcalc
 ==> Downloading http://jodies.de/ipcalc-archive/ipcalc-0.41.tar.gz

0

Мені подобається Color Maven

alias maven="command mvn"
color_maven() {
  maven $* | sed -e "s/\(\[INFO\]\ \-.*\)/[36;01m\1[m/g" \
               -e "s/\(\[INFO\]\ >>> .*\)/[32;01m\1[m/g" \
               -e "s/\(\[INFO\]\ <<< .*\)/[32;01m\1[m/g" \
               -e "s/\(\[INFO\]\ Building .*\)/[36;01m\1[m/g" \
               -e "s/\(\[INFO\]\ \[.*\)/01m\1[m/g" \
               -e "s/\(\[INFO\]\ BUILD SUCCESS\)/[01;32m\1[m/g" \
               -e "s/\(\[INFO\]\ BUILD FAILURE\)/[01;31m\1[m/g" \
               -e "s/\(\[WARNING\].*\)/[01;33m\1[m/g" \
               -e "s/\(WARN.*\)/[01;33m\1[m/g" \
               -e "s/\(DEBUG.*\)/[01;33m\1[m/g" \
               -e "s/\(\[ERROR\].*\)/[01;31m\1[m/g" \
               -e "s/Tests run: \([^,]*\), Failures: \([^,]*\), Errors: \([^,]*\), Skipped: \([^,]*\)/[32mTests run: \1[m, Failures: [01;31m\2[m, Errors: [01;31m\3[m, Skipped: [01;33m\4[m/g"
}
alias mvn=color_maven

Колір LS

alias ls='ls -FG'
export LSCOLORS=gxBxhxDxfxhxhxhxhxcxcx
-or-
echo export CLICOLOR >> ~/.bashrc
echo export CLICOLOR >> ~/.bash_profile
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.