Как стать автором
Обновить
166
0
Phil Pirozhkov @philpirj

Пользователь

Отправить сообщение
Не знаю, почему никто не заметил, но это просто шикарно!
А чем не устроил вариант использования текстового, например, виджета, текст которого меняется вызовом функции из какого-нибудь shell скрипта через awesome-client?

Хорошая идея выпилить список окон. Можно добавить какую-нибудь пометку к тэгу, говорящую о том, что на текущем тэге больше двух окон открыто, да и то не обязательно.
На reddit есть раздел unixporn, на котором вывешивают скриншоты своих десктопов. Одно время awesome был там самым популярным wm, до прихода новой волны: bspwm, herbstluftwm, 2bwm.
image
Стоит ещё заметить, что в wayland не будет такой вещи, как оконный менеджер, будет некий плагин оболочки. И со временем от любимого awesome, возможно, придётся отказаться.
не требует использования какого-либо определённого сервера.

Только thin, passenger, rainbows, puma и goliath.
Поправка: оказывается это та самая история и есть.
Не могут пропасть платежи? А разве на корр. Счетах они не могут вечно висеть, пока отправитель не укажет точные реквизиты получателя? А если получатель не знает, отправил что-то отправитель или нет, как то в случае с пожертвованиями? Это теория, а на практике как раз недавно была ругань именно в сторону Сбера, дама обнаружила, что её регулярные пожертвования ни разу за годы не доходили до адресата.
Паразиты не хотят умирать, по крайней мере ищут лазейки, чтобы это произошло не сразу.
Виноват, всё верно, это я ошибся.
После печальной неразберихи с MtGox — нет.
Вы ошиблись на 3 порядка, и промахнулись комментарием.
В том смысле, что не используется ли в нём SkypeKit. Посмотрел, вижу, что не используется.
С последними обновлениями скайпа внешний вид изменился, теперь окно с контактами и окно сообщений — два разных окна, но всё равно гораздо лучше, чем голый skype. Спасибо за него.
А skypetab-то будет развиваться? Без него вообще никак уже.
Исправил в топике, ошибочно было указано, что a и code>A — разные регистры, на самом деле один и тот же, а при использовании дозаписи нужно брать тот, который в верхнем регистре, работает это как с [y]ank, так и с записью [q].
Вы из Москвы?
Вы знаете, на чём выстрелил Ruby on Rails? Всё стандартно. Один фреймворк, и в нём всё делается одним способом. Ушли одни разработчики — пришли другие. В PHP десятки разных фреймворков, и если ушли одни разработчики, и потом пришли другие, последним очень долго разбираться, что там и как делали прошлые, это ещё повезёт, если не навелосипедили. То же самое и с JS. Этот код на Morearty мне уже не понятен, какие-то коллбеки, рутинг, явно привязанный к #, и, кстати, отсутствие связи с сервером. Добавить туда в модель связь с сервером и fallback'ом на localStorage, и всё будет ещё более запутанно.
А вот, к примеру, d3js работает с shadow dom или с самим dom? Делал богатые графики с добавлением и удалением элементов, ленивыми загрузками, zoom'ом, особых тормозов при добавлении элементов не замечал. Стоит ли заморачиваться? Где реальное сравнение скорости этого подхода с diff?
Можно посмотреть в сторону более быстрого шаблонизатора, например из riot.js.
И вообще, зачем эти велосипеды, если грядёт Web Components?
Ещё видел, что для shadow dom в одном из этой сотни js mv* фреймворков был один, который был сделан модульно, и в том числе отдельный модуль для обновлений по diff'у. Ссылку найти не могу.

В общем, пока я остаюсь при своём мнении — код, написанный с использованием большинства js mv* фреймворков нечитаем, не подлежит повторному использованию, громоздок, содержит кучу boilerplate, а принципы его работы зачастую понятны только авторам. Но это моё личное мнение, исходит которое в основном из воспоминаний о простоте написания приложений на Java Swing и NextApp Echo2 (тот же Swing, но для веб).

Я влёгкую могу накидать DSL для JS UI, который бы меня устроил.
var total = JSDSL.addElement('#total')
var list = JSDSL.addList('#list', {source: '/todos', template: '#todo'})
  .updateOn({title: 'blur', priority: 'change'})
  .on('update', function() { total.total = query('item').length }) # Обновление отображения количества по фильтру

Вот это компактненько. Может ещё как попроще можно.
Я делал todo, но без фильтра и без пометки сделанным или не сделанным. Зато с выставлением приоритета. С размашистым форматированием 88 строк js. Думаю, что до 220 всё равно не дотянет, если сделать всё остальное. Использован html.js, чуть более декларативный и компактный сородич jquery.

Скрытый текст
// Utility
function xhr(method, url, data, success) {
  var xhr = new XMLHttpRequest()
  xhr.open(method, url, true)
  xhr.addEventListener('load', function() { success(xhr) }, false)
  xhr.addEventListener('error', function() { warn('Connection error') }, false)
  xhr.send(data)
}

// Update item
function update(item) {
  xhr('post', '/item', new FormData(item), function(request) {
    var id = request.response
    item.query('input[name=id]').value = id
  })
}

// Listen to edits
function listen_to_edits(item) {
  item.query('input[name=title]').addEventListener('blur', function() {
    update(item)
  })
  item.query('[name=priority]').addEventListener('change', function() {
    update(item)
  })
  item.query('a[name=delete]').addEventListener('click', function() {
    var id = item.query('input[name=id]').value
    xhr('delete', '/item?id='+id, null, function(request) {
      item.remove()
    })
  })
}

// Load all todos
function load_todos() {
  xhr('get', 'items', null, function(request) {
    JSON.parse(request.response).forEach(function(item) {
      added_todo(item.id, item.title, item.priority)
    })
  })
}

function show_actions() {
  html('.actions').classList.remove('hidden')

  // Add new todo item on click
  html('input[name=add]').each(function(button) {
    button.addEventListener('click', function() {
      added_todo(null, '', 20)
    })
  })
}

function added_todo(id, title, priority) {
  var item = html('.proto').cloneNode(true)
  item.classList.remove('proto')
  html('.list').appendChild(item)
  item = html('.list .item:last-child') // Hack, HTML.js doesn't wrap cloned/added nodes
  item.query('input[name=id]').value = id
  item.query('input[name=title]').value = title
  item.query('select[name=priority]').value = priority
  listen_to_edits(item)
  item.query('input[name=title]').focus()
}

window.addEventListener('load', function() {
  window.html = HTML.query.bind(HTML)

  // Post sign in/up form with xhr
  html('.signin-signup form').each(function(form) {
    form.addEventListener('submit', function(event) {
      xhr('post', document.activeElement.name, new FormData(form), login_callback)
      event.preventDefault()
    })
  })

  load_todos()
  show_actions()
})



И пару «шаблонов» в html (slim):
Скрытый текст
.todos
  .invisible
    form.proto.item method='post' action='/item'
      span.hidden
        input type='hidden' name='id'
      span.title
        input type='text' name='title' placeholder='Buy some milk'
      select.priority name='priority'
        option value='10' Low
        option value='20' Normal
        option value='30' High
      a href='#' name='delete' Delete

  .list

  .actions.hidden
    input name='add' type='button' value='Add todo item'



PS Я тоже бекендщик.
Я имел в виду TodoMVC. И что голый реакт, что 99% его сородичей.
cat любите, а перенаправление вывода ненавидите? Почему?
wc -l? А опция -c в grep почему не?

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность