kernel panic in userspace

my own self destruction
  • Blog
  • about
  • articles
    • Virtualbox bridge
    • linux blogging
    • Gentoo on Acer Extensa 5630Z
  • code
    • @unfollowr
    • WordPress
      • WordPress-bbPress syncronization
      • IE Warning
      • PostAds
    • Callisto overlay
    • @listwatcher
  • CV
  • belarusian
  • russian
  • english

Hide Mentions in Twitter Web Interface

Jan 24 2010
Deftones – Deathblow
  • belarusian
  • russian

Во время сессии вечно хочется сделать что-нибудь эдакое совсем бесполезное, лишь бы только не готовиться к экзаменам. Внезапно последний экзамен получился автоматом (был целиком на одной лекции), так что я решил попрактиковаться в JavaScript, вместо того, чтобы заниматься полезными делами.

Некоторые тви-фашисты (вроде меня) не слишком любят читать реплаи чужим людям. Порой хочется открыть веб-интерфейс, открыть чью-нибудь ленту и просто почитать. Благо, букв немного. А там закрадутся 100500 реплаев, которые вообще ну никак в картину мира не вписываются. Так вот, давно хотелось их выпилить. Сначала я хотел сделать расширение для Chromium, но не вышло потом подумалось, что недурно было бы сделать что-нибудь более универсальное, например закладку. Пользователь на неё клац — и реплаи исчезли/появились. Ну не чудесно ли? :)

Этот большой и сташный кусок непостигшие дао могут пропустить, листайте ниже. Написался следующий скрипт (лицензирую под GPL v3, к слову):

if (typeof toggleTwitterUserMentions == "undefined")
{
  toggleTwitterUserMentions = function()
  {
    self = this;
    if (self.knowSettings == undefined)
    {
      self.knowSettings = true;
      self.hideMentions = true;
      self.getTweetsWithMentions = function()
      {
        return $('#timeline>li.status>span.status-body>span.entry-content>a.username').parent().parent().parent();
      }
      self.toggle = function()
      {
        if (self.hideMentions)
        {
          self.getTweetsWithMentions().slideUp();
        } else
        {
          self.getTweetsWithMentions().slideDown();
        }
        self.hideMentions = !self.hideMentions;
      }
      self.onPageChange = onPageChange;
      self.calledInternalOnPageChange = false;
      onPageChange = function()
      {
        if (!self.calledInternalOnPageChange)
        {
          self.calledInternalOnPageChange = true;
          self.onPageChange();
        } else
        {
          self.hideMentions = !self.hideMentions;
          self.toggle();
        }
      }
    }
    this.toggle();
  }
}
toggleTwitterUserMentions();

После долгих и мучительных попыток его минимизировать и при этом оставить в рабочем состоянии осталось только первое требование. Видимо, я слишком хитро написал, чтобы обфускатор правильно всё разбрал и потом собрал обратно. Ну и ладно. Тем не менее, всё, что нужно для использования — добавить на панель следующую ссылку:

javascript:if(typeof toggleTwitterUserMentions=="undefined"){toggleTwitterUserMentions=function(){self=this;if(self.knowSettings==undefined){self.knowSettings=true;self.hideMentions=true;self.getTweetsWithMentions=function(){return $("#timeline>li.status>span.status-body>span.entry-content>a.username").parent().parent().parent()};self.toggle=function(){if(self.hideMentions){self.getTweetsWithMentions().slideUp()}else{self.getTweetsWithMentions().slideDown()}self.hideMentions=!self.hideMentions};self.onPageChange=onPageChange;self.calledInternalOnPageChange=false;onPageChange=function(){if(!self.calledInternalOnPageChange){self.calledInternalOnPageChange=true;self.onPageChange()}else{self.hideMentions=!self.hideMentions;self.toggle()}}}this.toggle()}}toggleTwitterUserMentions();

Потом можно в веб-интерфейсе твиттере этой кнопочкой пользоваться. Что стоит учесть:

  • Повторное нажатие вернёт все реплаи
  • При использовании кнопки «more» настройка сохраняется и реплаи прячутся
  • При переходе в DM, replies или другие меню реплаи тоже прячутся
  • При появлении новых твиттов вверху страницы реплаи не прячутся, что логично (?)

Enjoy, как говорится. Распространение в твиттере приветствуется %)

Парфюмерия для вас и ваших любимых

Услуги colocation для тех, кто хочет иметь полный контроль за сервером за умеренные деньги

Бесплатные курсы Linux — красные глаза, бессонные ночи :)

  • belarusian
  • russian

Падчас сэсіі пастаянна хочацца зрабіць што-небудзь гэтакае зусім бессэнсоўнае, толькі б не рыхтавацца да іспытаў. Нечакана апошні экзамен атрымаўся аўтаматам (быў на адной лекцыі цалкам), так што я вырашыў папрактыкавацца ў JavaScript, замест таго, каб займацца патрэбнымі справамі.

Некаторыя тві-фашысты (кшталту мяне) ня дужа любяць чытаць рэплаі іншым людзям. Час ад часу хочацца адкрць вэб-інтэрфейс, адкрыць чыю-небудзь ленту і проста пачытаць. Добра, што літар няшмат. А там закрадуцца 100500 рэплаяў, якія ну ніяк не ўпісваюцца ў сьветаўленьне. Спачатку я хацеў напісаць пашырэньне для Chromium, але ня выйшла потым падумалася, што няблага было б і што-небудзь больш універсальнае зрабіць, напрыклад закладку. Карыстач на яе клац — і рэплаі зьніклі/зьявіліся. Ну не цуд, га? :)

Гэты вялікі і страшэнны кусок можна прапусьціць, калі вы дао не спасьціглі яшчэ. Напісаўся наступны скрыпт (ліцэнзірую пад GPL v3, дарэчы):

if (typeof toggleTwitterUserMentions == "undefined")
{
  toggleTwitterUserMentions = function()
  {
    self = this;
    if (self.knowSettings == undefined)
    {
      self.knowSettings = true;
      self.hideMentions = true;
      self.getTweetsWithMentions = function()
      {
        return $('#timeline>li.status>span.status-body>span.entry-content>a.username').parent().parent().parent();
      }
      self.toggle = function()
      {
        if (self.hideMentions)
        {
          self.getTweetsWithMentions().slideUp();
        } else
        {
          self.getTweetsWithMentions().slideDown();
        }
        self.hideMentions = !self.hideMentions;
      }
      self.onPageChange = onPageChange;
      self.calledInternalOnPageChange = false;
      onPageChange = function()
      {
        if (!self.calledInternalOnPageChange)
        {
          self.calledInternalOnPageChange = true;
          self.onPageChange();
        } else
        {
          self.hideMentions = !self.hideMentions;
          self.toggle();
        }
      }
    }
    this.toggle();
  }
}
toggleTwitterUserMentions();

Пасьля доўгіх і беспасьпяховых спроб яго мінімізаваць і пры гэтым заставіць у працоўным стане засталося толькі першае патрабаваньне. Напэўна, я дужа хітра напісаў, каб абфускатар правільна ўсё разабраў і потым сабраў зноў. Ну і ладна. Тым не менш, усё, ўто трэба для карыстаньня — дадаць на панэльку наступную спасылку:

javascript:if(typeof toggleTwitterUserMentions=="undefined"){toggleTwitterUserMentions=function(){self=this;if(self.knowSettings==undefined){self.knowSettings=true;self.hideMentions=true;self.getTweetsWithMentions=function(){return $("#timeline>li.status>span.status-body>span.entry-content>a.username").parent().parent().parent()};self.toggle=function(){if(self.hideMentions){self.getTweetsWithMentions().slideUp()}else{self.getTweetsWithMentions().slideDown()}self.hideMentions=!self.hideMentions};self.onPageChange=onPageChange;self.calledInternalOnPageChange=false;onPageChange=function(){if(!self.calledInternalOnPageChange){self.calledInternalOnPageChange=true;self.onPageChange()}else{self.hideMentions=!self.hideMentions;self.toggle()}}}this.toggle()}}toggleTwitterUserMentions();

Потым можна будзе ў уэб-інтэрфейсе твітэра гэтай кнопкай карыстацца. Але варта ўлічваць:

  • Паўторнае націсканьне верне ўсе рэплаі
  • Пры выкарыстаньні кнопкі «more» наладка захоўваецца і рэплаі хаваюцца
  • Пры пераходзе ў DM, replies ці іншыя меню рэплаі таксама хаваюцца
  • Пры зьяўленьні новых твітаў уверсе старонкі рэплаі не хаваюцца, што лягічна (?)

Enjoy, як кажуць. Распаўсюд у твітэры вітаецца %)

Парфюмерия для вас и ваших любимых

Услуги colocation для тех, кто хочет иметь полный контроль за сервером за умеренные деньги

Бесплатные курсы Linux — красные глаза, бессонные ночи :)

{ Comments : 2 Comments » }
{ Tags: chromium, javascript, jquery, twitter }

jQuery val() & change() tricks

Oct 24 2009
Uniquetunes – Disconnecting People
  • belarusian
  • russian

Начал понемногу оживать блог, как вы уже, наверное, заметили :) Практика программирования и последующего рефакторинга хорошего кода даёт благодатные плоды для размышлений. Плохой код и его сопровождение такой радости не принесут, особенно если работать одному. На сей раз про jQuery, WYSIWYG и onChange event.
Read the rest of this entry »

Спортивное питание — креатин, dynamize и другое

  • belarusian
  • russian

Пачаў паціху ажываць блёг, як вы ўжо, напэўна, заўважылі :) Практыка праграмаваньня і далейшага рэфакторынгу добрага коду дае сваю добрую садавіну й гародніну. Благі код і ягонае суправаджэньне такой радасьці не прынясуць, асабліва калі працаваць аднаму. На гэта раз пра jQuery, WYSIWYG і onChange event.
Read the rest of this entry »

Спортивное питание — креатин, dynamize и другое

{ Comments : No Comments » }
{ Tags: ajax, ckeditor, events, javascript, jquery, null, onchange, sql, tinymce, wysiwyg }

i hate wp plugins developers

Oct 21 2009
Dolphin – Дверь
  • belarusian
  • russian

Это пост ненависти. Нет, правда, я уже не могу терпеть. Раньше мне было всё равно и я толком не разбирался в JavaScript, но тут уж как-то всё совпало и я решил немножко оптимизировать загрузку блога.

И что вы думаете? Загружалось аж 3 или даже 4 копии jQuery из разных источников. Каждый плагинописатель сам себе безголовый всадник и решает к своему плагину обязательным образом приложить Prototype или jQuery. Если вам не повезло и вы пользуетесь многими плагинами от такого рода авторов, то опасность того, что блог будет тормознутый как Windows XP после года использования детьми, весьма велика.

Ну неужели сложно догадаться, что раз такая насущная проблема с подключением одной и той же библиотеки, то должен быть какой-то простой и изящный путь? Ведь WordPress версию далеко не 0.2beta имеет. И есть же специальная функция, которой скармливается имя JS библиотеки, после чего WordPress сам высчитывает всё что нужно и подключает только нужные библиотеки, причём даже зависимости отследит как нужно. И имя у сей волшебной функции wp_enqueue_script. Это разработчику надо обязательно знать.

Ну а простому пользователю надо знать, что можно включение всех дублирующихся библиотек отключать, можно даже простым закомментированием, но лучше всё же заменить (при наличии должных знаний в php) все подключения библиотек через wp_enqueue_script. Главное — быть осторожным, а если ты девочка — быть осторожной. Adios.

Купить пингвина — порадуй любимого сисадмина %)

Ветеринарная лечебница для котов, собак и не только

  • belarusian
  • russian

Гэта пост нянавісьці. Не, насамрэч я ўжо не магу трываць. Раней мне было ўсё роўна і я дужа ў JavaScript не разьбіраўся, але тут неяк усё супала і я вырашыў трошкі аптымізаваць загрузку блога.

І што вы думаеце? Загружалася аж 3 ці нават 4 копіі jQuery з розных крыніц. Кодны плягінапісацель сам сабе безгаловы конны і вырашае да свайго плягіна абавязковым чынам падключыць Prototype ці jQuery. Калі вам не пашчасьціла і вы карыстаецеся шматлікімі плягінамі ад такога кшталту аўтараў, то верагоднасьць таго, што блог будзе працаваць як Windows XP пасьля году карыстаньня дзецьмі, вельмі вялікая.

Ну няўжо цяжка здагадацца, што калі такая праблема з падключэньнем адной і той жа бібліятэкі, то павінен быць нейкі просты і элегантны шлях? Ну і WordPress ужо даўне не ў вэрсіі 0.2beta, павінен умець. І насамрэч жа ёсьць спецыяльная функцыя, якой скармліваецца імя JS бібліятэкі, пасьля чаго WordPress сам вылічвае ўсё што трэба, прычым нават залежнасьці ўлічвае як трэба. І імя той чароўнай функцыі wp_enqueue_script. Гэта распрацоўшчыку абавязкова ведаць.

Ну а простаму карыстачу трэба ведаць, што можна ўключэньне ўсіх дублюючыхся бібліятэк адключаць, можна нават прастым каментаваньнем, але ўсё ж лепей замяняць (калі маюцца адпаведныя навыкі) усе падключэньні бібліятэк на wp_enqueue_script. Галоўнае — быць асьцярожным, а калі ты дзяўчынка, то быць асьцярожнай. Adios.

Купить пингвина — порадуй любимого сисадмина %)

Ветеринарная лечебница для котов, собак и не только

{ Comments : 3 Comments » }
{ Tags: development, javascript, jquery, optimization, prototype, wordpress }

negative remainder

Oct 02 2009
Торба-на-Круче – Марьюшка
  • belarusian
  • russian

Делая домашнее задание по Javascript (рукотворный календарик) столкнулся с проблемой определения дня недели для первого дня текущего месяца. Сначала всплыло то, что в буржуинском языке Sunday (воскресенье) — первый день недели, т.е. день недели с нулевым индексом. Ничего умнее того, чтобы доделать ещё один метод к классу Date, я не придумал.

Date.prototype.wDay = function ()
{
  // sunday must be the last day of the week
  if (this.getDay() == 0)
    return 6;
  return this.getDay()-1;
}

Дальше надо было получать сам первый день недели. С подозрением на то, что стандартной функции нет (да и искать было лень, хотелось поупражняться), я засел за это дело. Ковырялся-ковырялся, получилось нечто типа следующего:

Date.prototype.getFirstDay = function()
{
  return (7*5+this.wDay()-this.getDate()+1)%7;
}

7*5 гарантированно больше числа дней в месяце, с учётом того, что календарь делался на третью от Солнца планету, так что мы всегда получали целое число для получения остатка от деления на 7. Только вот magick numbers не есть хорошо, как известно. Дальнейшие ковыряния с получением остатка от деления отрицательных чисел привели к неожиданным результатам.

Между делом я использовал в соседней консоли Python как калькулятор, который мне выдавал, что (4-16)%7 == 2. В то же время javascript делал нечто необъяснимое, что я сначала сбрасывал на счёт не самых естественных индексов для дней недели, всё же люди с 1 привыкли считать их. Wikipedia же говорит нам, что по-своему прав каждый, ведь -12 = 7*(-2)+2, равно как и -12 = 7*(-1)+(-5). Workaroud для такого делается следующим образом:

Date.prototype.getFirstDay = function()
{
  var firstDay = (this.wDay()-this.getDate()+1)%7;
  if (firstDay < 0)
  {
    return firstDay+7;
  }
  return firstDay;
}

Такая вот коварная, хоть и примитивная математика.

samsay.ru — народная медицина и кулинария

Выделенные сервера в аренду. Поставил что надо и вперёд

Спецтехника из Китая — продажа и прямые поставки. Тягачи, бульдозеры

  • belarusian
  • russian

Робячы хатняе заданьне па Javascript (рукатворны каляндарык) сутыкнуўся з праблемай атрыманьня першага дня тыдню для бягучага месяца. Спачатку ўсплыла тое, што ў буржуйскай мове Sunday (нядзеля) — першы дзень тыдня, т.б. дзень тыдню з нулявым індэксам. Нічога разумней за тое, каб дарабіць яшчэ адзін метад для класа Date, я не прыдумаў.

Date.prototype.wDay = function ()
{
  // sunday must be the last day of the week
  if (this.getDay() == 0)
    return 6;
  return this.getDay()-1;
}

Далей трэба было атрымаць сам першы дзень тыдню. З падазронасьцю, што стандартнай функцыі няма (ды й шукаць было лянота, хацелася папрактыкавацца), я засеў за гэтую справу. Калупаўся-калупаўся, атрымалася нешта кшталту наступнага:

Date.prototype.getFirstDay = function()
{
  return (7*5+this.wDay()-this.getDate()+1)%7;
}

7*5 гарантавана больш ліку дней у месяца, з улікам таго, што каляндарык рабіўся на трэцюю ад Сонца плянэту, так што мы гарантавана атрымлівалі цэлае чысло для атрыманьня астатку ад дзяленьня на 7. Толькі вось magick numbers ня ёсьць добра, як вядома. Далейшыя калупаньні з атрыманьнем астатку ад дзяленьня на мінусавыя чысла прывялі да нечаканых рэзультатаў.

Між справай я выкарыстоўваў у суседняй кансолі Python як калькулятар, які мне выдаваў, што (4-16)%7 == 2. У той жа час javascript рабіў нешта неаб’ясняльнае, што я спачатку ськідаў на не самыя натуральныя індэксы для дней тыдню, усё ж людзі з 1 прывыклі лічыць іх. Wikipedia ж кажа нам, што кожны па-свойму правы, бо -12 = 7*(-2)+2, як і -12 = 7*(-1)+(-5). Workaroud для такога робіцца наступным чынам:

Date.prototype.getFirstDay = function()
{
  var firstDay = (this.wDay()-this.getDate()+1)%7;
  if (firstDay < 0)
  {
    return firstDay+7;
  }
  return firstDay;
}

Такая вось хітрая, хоць і прымітыўная матэматыка.

samsay.ru — народная медицина и кулинария

Выделенные сервера в аренду. Поставил что надо и вперёд

Спецтехника из Китая — продажа и прямые поставки. Тягачи, бульдозеры

{ Comments : No Comments » }
{ Tags: calendar, javascript, math, negative remainder, prototype, weekday }

jLanguage javascript tweaks

Jul 27 2009
Club Des Belugas – Unsaleble Strings
  • belarusian
  • russian

Ня так даўно камрад tridento ухваляў мой маленькі блог-запаведнік, схіляючыся да таго, што не было б лішнім прыкруціць фішку, каб у пастоў паштучна зьмяняць мову. Бяссоньніца бярэ сваё, так што я узяўся за такі непад’ёмны труд. Адразу варта прызнацца, зрабіў я не адзіным правільным метадам, у якога ёсьць свае недахопы. Адразу скажу, што гэта толькі няпоўна рэалізаваны канцэпт :)
Read the rest of this entry »

Обновления программ – весьма актуальная для Windows тема

Бесплатные программы – тоже будет полезно

Buy viagra online – прямо как в детстве, правда? :)

  • belarusian
  • russian

Намедни камрад tridento изволил хвалить мой маленький блог-заповедник, намекая на то, что не мешало бы прикрутить рюшечку, чтобы у постов поштучно менять язык. Бессонница берёт своё, так что я взялся за такой непосильный труд. Сразу стоит признаться, сделал я не единственно правильным способом, у которого есть свои недостатки. Сразу скажу, что это только неполностью реализованный концепт :)
Read the rest of this entry »

Обновления программ – весьма актуальная для Windows тема

Бесплатные программы – тоже будет полезно

Buy viagra online – прямо как в детстве, правда? :)

{ Comments : 4 Comments » }
{ Tags: blog, concept, div height, javascript, jLanguage, js, multilanguage, scriptaculous, twitter }

« Previous Entries

RSS antisocial feeling

  • Ворачиваться в страну шпрот собираешься?
  • (via priskorbno) хочу. давно хотел. где купить?
  • ??
  • "((foldl (+) 0 [1..100]) ^ 2) - (foldl (+) 0 (map (^ 2) [1..100]))"
  • ?

Tags

bash belarus blog blogs bugs coding concerts download friends fun gentoo google images internet javascript kde language life links linux livejournal me money music overlays perl photos php plugins portage projects rss school shell social social networks ssh studying tests twitter ubuntu univer vkontakte wifi wordpress

links

  • asocial feeling
  • Callisto overlay
  • daThumbs
  • last.fm
  • twitter
  • Vkontakte
  • ~idioteque

Recent Comments

  • neagaoleg on Hide Mentions in Twitter Web Interface
  • neagaoleg on about
  • Martina Bella on @unfollowr
  • gamersroute.com on WordPress-bbPress syncronization
  • gamersroute.com on WordPress-bbPress syncronization
  • JohnnyBCool on @unfollowr
  • bobrik on @listwatcher
  • Alper on @listwatcher
  • itomi on WordPress-bbPress syncronization
  • Candy on @unfollowr

Archives

  • January 2010 (1)
  • November 2009 (2)
  • October 2009 (5)
  • September 2009 (2)
  • August 2009 (2)
  • July 2009 (3)
  • June 2009 (1)
  • April 2009 (2)
  • March 2009 (1)
  • February 2009 (1)
  • January 2009 (2)
  • December 2008 (12)
  • November 2008 (17)
  • October 2008 (20)
  • September 2008 (13)
  • August 2008 (25)
  • July 2008 (18)
  • June 2008 (15)
  • May 2008 (7)
  • March 2008 (1)
  • February 2008 (9)
  • January 2008 (11)
  • December 2007 (24)
  • November 2007 (27)
  • October 2007 (21)

Meta

  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org

Creative Commons License rss comments rss valid xhtml