So, it’s that time of year again. I went home early, lightened up some candles, opened a bottle of wine (thanks dad, even if you don’t know it yet), sat on my ledge my guitar in my arms and doing the thing that I’d like to call practicing.
Then the clock turned midnight: my birthday. Again. [...]
Some consider 666 the number of the devil (it was also the price Apple sold its first computer for, the Apple 1: $666,66). Many web designers and developers of web applications think Internet Explorer 6 is a bit devilish…(and they’re right ). Well by now at least 2 big names dropped support for IE 6 : [...]
“We clutter the earth with our inventions, never dreaming that possibly they are unnecessary—or disadvantageous. We devise astounding means of communication, but do we communicate with one another? We move our bodies to and fro and incredible speeds, but do we really leave the spot we started from? Mentally, morally, spiritually, we are fettered.”
I've had a pile of unused but relatively powerful (one Athlon 1333, one Athlon XP 2100+ and two Athlon XP 2800+) computers sitting around not doing anything for the last little while. I've been meaning to hook them all up together, along with the various laptops in the house, into some sort of cluster to play around with for a while. Finally got around to installing Hadoop on a couple of yesterday, so now I have a little mini-cluster here.
Hadoop is interesting; my initial expectation was that it would be a general distributed task/job handling system that happens to handle Map/Reduce type workflows, but from the looks of things it's more the other way around - it's completely built to run Map/Reduce jobs (in particular ones which handle large numbers of records from log files or databases) and can possibly be hacked to handle general distributed jobs.
The one distributed job I want to try to run on it doesn't quite fit the Map/Reduce model, but that's probably just because of how it's structured right now. It's an "embarrassingly parallel" type problem with lots of brute-force testing (machine learning stuff) that boils down to something like average { map { evaluate(best_of(map { test_candidate } find_candidates)) } (split $input) }.
I guess the way to do it is to run it as three consecutive Map/Reduce jobs.
An interesting observation is that while the model is named Map/Reduce, the initial step, splitting the data up, is really important too. I get the impression that much of the work that's gone into Hadoop has been in the area of intelligently dividing data between workers.
The first thing to come out of githorde is full support for individual topics from Digg, along with some nice speed improvements too. I uploaded the improvements last night so lets check them out.
Topics
If you go to the Topics Page you’ll see a list of all the topics that are currently on Digg, this is [...]
Недавно помітив, що на зупинці навпроти кооперативного становили об'єкт типу зупинка. Лавочки під навісом, з усіх сторін прикрашений атрибутикою DJuice. Нічого дивного... Сьогодні ввечері почув там музику. Пише шось типу "Інтерактивний Bluetooth портал". Спробував пошукати доступні bluetooth пристрої... - тиша. Хтось в курсі шо то таке і як його юзати? Пошук в гуглі нікуди не привів...
We got more than a few drops of rain in Prescott AZ today. Finally. Yesterday I saw a movie in Prescott Valley, when I got out of the theater it was clear that significant rain had fallen. I saw “Wanted”, it was pretty good with lots of Matrix like special effects. Here’s some rain images, [...]
Privnote is a new web app making the rounds on Digg and other social networking sites. It allows you to post a note at a unique URL which you can then share with someone. The note is deleted once the URL is viewed. It’s a simple premise that, if used for sending love notes or other inconsequential messages, is cute and harmless. However, the developer of Privnote has irresponsibly crossed into dangerous territory by claiming on his blog that Privnote is secure enough to be used for sending “credit card information and root passwords”.
He goes on to claim that not even Privnote’s developers can read your secret notes:
What about the site administrators, you may ask, those ones who always seem to have “full power” over your data. Well, with Privnote, those cannot read your note either. The explanation is a bit more technical, but here it goes: When the note is received by the server, a note ID is created (the same ID you see in the link to read the note). The note contents is then encrypted and saved in the database but (and here’s the magic) the salt to encrypt the note is not the note ID but a hash of the note ID. Hashes “one way” so you cannot go back to the note ID from the hash. So the note gets stored in the DB encrypted with a token that only the person which has the note link can read it. Oh, and we also have web server access logs disabled which makes impossible for any administrator to decrypt the note contents. So, as you can see, the only person who has the key to decrypt it is the one who has the link to the note.
These are the excited hand-wavings of someone who either has a very poor understanding of logic or is maliciously trying to trick people into disclosing sensitive information. Either way, it’s a big red flashing warning that Privnote is a toy and should not be used for anything even remotely sensitive.
According to the developer’s description, each note has a unique id. The contents of the note are encrypted using a salt consisting of a one-way hash of this id. The id is also used in the URL to identify the note. Here’s where the hand-waving comes in: he claims that, since Privnote doesn’t store access logs and can’t see the URLs, they can’t figure out the decryption key and thus can’t decrypt the notes.
Unfortunately, this is nonsense for the following reasons:
If a URL containing only a note id can be used to retrieve a note, then that note id must be stored in the database in order to be used for lookups.
Since the note id is stored in the database, anyone with access to the database and knowledge of the hashing algorithm used can recreate the hash value used to encrypt a note and can then decrypt that note.
The claim that Privnote doesn’t keep access logs is puzzling; why would access logs even matter if the notes are deleted once they’re accessed?
In other words, anyone with access to both the Privnote database (to retrieve note ids and encrypted contents) and the Privnote source code (to know which hashing algorithm is used) has full access to the decrypted contents of any note sent via Privnote, regardless of the developer’s claims.
It’s one thing for someone to provide a service like Privnote and say, “Your notes are secure as long as you trust us.” It’s another thing entirely for them to claim that even they can’t read your notes when, in fact, they can.
I had a hard time putting this post in a category. Was it a post on Social Software? Or a post on Social Change? I like to think it was a post on Social Change. You see last Thursday I...
J’ai mis en ligne, hier, une nouvelle version des plugins iUI’s tent et Tooltip. J’ai également publié le nouveau plugin Reflection’s tent. Ce dernier utilise reflection.js.
Ces trois plugins fonctionnement avec les versions 0.2.x et la future version 0.3.0 de Bivouac.
We’re reorganizing the closet, and I had the chance to get down all of the boxes of CDs that I’ve accumulated over the years. The question is, what do I do with them? I never touch them any more, because I’ve ripped them all. I have a copy on my laptop, a backup on [...]
Nos dias 19 e 20 de julho teremos no Rio de Janeiro a I Ultra Maratona How To de Software Livre! um evento com 20 tutoriais prticos de 4 horas cada. Tero desde cursos de utilizao de BrOffice e Inkscape, passando por segurana de servidores, hardening e desenvolvimento. Para ver a grade completa acesse. Os preos so bem convidativos.
Eu serei tutor de dois. O primeiro, com nome de "XP Game e o Jogo da comunicao", ser em conjunto com o Tapajos e a galera do Lucidus. No segundo estarei sozinho e ser uma "Introduo ao Ruby on Rails".
Thanks to Franz Schwartau who noticed a bug in the Rubystats gem, and after four hours of debugging, I’ve released Rubystats 0.2.3 which fixes the bug* Franz found in the beta distribution calculations.
Thanks again, Franz.
* By bug I mean bugs, and by bugs I mean stupid mistakes in my code and lack of sufficient test [...]
I talked to the reporter over the phone three weeks ago. A week later, they decided to get the story ready for press and sent out a photographer. I happened to be at my father's home in Northern Virginia on a trip back to the DC area. Hence the wallpaper.
I'm happy with my place in the story, but part of me wishes it was a project I was more passionate about. I made downforeveryoneorjustme.com for a friend on a whim, utterly unconnected to my work at Twitter. I've spent maybe six hours on the site, total, ever. Most of that was setting up the domain and hosting and doing the original Ruby implementation. I then spent a couple hours moving it over to Python for Google App Engine with the idea that I wouldn't have to think about uptime. As the story mentions, that didn't exactly work out, but it's been better than futzing with a VPS or three.
It's good that a conversation about the cultural and business implications of downtime is starting, or perhaps continuing and deepening. It's certainly something I've been forcibly immersed over the last year and a half of helping to keep Twitter afloat. But it's also a conversation I'm weary of.
Of late, I've tried as much as possible to focus my time at Twitter on building a new system that works at scale and does so predictably and measurably. That's not easy when the current system is still on fire. So much of the last year of my professional life has been spent reaching for buckets of water that it's hard to stop myself from trying to stomp out every new blaze. If I don't, though, the new components that we hope will make the system work get pushed out further and further.
Figuring out how to work on version 2.0 while part of the team is maintaining the 1.x series is a classic software development management problem, and one that's only become more complicated in the web application development space. The web offers incredible freedom to see if an idea will succeed in the marketplace. The trade-off is that once you have a successful idea, you only have so long to make it as dependable as death and taxes.
At Twitter, we're well aware that we have essentially the most patient and forgiving set of users we could ever hope for. I don't intend to test their patience a moment longer than we have to. In the meantime, seeing our site occasionally float to the top of the request patterns for downforeveryoneorjustme.com is a stark reminder of all the work we have left to do.
I am all about knowing how to survive a zombie invasion and I am also a firm believer of using
the right tool for the right job. It can not be argued that killing zombies with a shotgun to
the head is as natural a fit as peanut butter to chocolate. They simply just go together.
I am all about knowing how to survive a zombie invasion and I am also a firm believer of using
the right tool for the right job. It can not be argued that killing zombies with a shotgun to
the head is as natural a fit as peanut butter to chocolate. They simply just go together.
La edición venezolana del portal estadounidense Google celebró este 5 de Julio, el día de la independencia venezolana, con un logo personalizado mostrando a un líder independentista a caballo, con una bandera venezolana de 8 estrellas.
Prensa Web RNV/YVKE Mundial/Agencias
Google, el motor de búsqueda, se unió a la celebración del Día de nuestra Independencia con una imagen que remite a nuestros próceres. Es la primera vez que Venezuela es referenciada en el portal del monopolio internáutico transnacional, aun cuando la imagen sólo se muestra en el portal venezolano.
La empresa crea logos personalizados (que denomina "doodles") desde 1999, mostrando todos los años logos especiales para celebrar el día de la independencia estadounidense, el día de Canadá, el Día Nacional de Suiza o el día de la toma de La Bastilla en Francia.
Dennis Hwang, descendiente de coreanos, es el diseñador gráfico quien realiza, desde el año 2000, los logos personalizados que Google muestra en días especiales. Además de los antes señalados, Google también muestra logos especiales en el Día de la Tierra, el Día del Padre o de la Madre, las Olimpiadas, los mundiales de fútbol, celebraciones estadounidenses como el Halloween o el Día de Acción de Gracias, el Día de la Mujer, el nacimiento de Picasso, Luther King, Miguel Angel, Braille, Hitchcock, Gagarín, Da Vinci, Munch (el pintor de El Grito), Diego Velásquez (el pintor de Las Meninas) Mozart, Einstein o Ray Charles, entre muchos otros.
También han celebrado el día del ADN, los cien años del primer vuelo, el primer ascenso al Everest, los 50 años del Lego, el tránsito de Venus a través del sol, el año nuevo chino y el persa, y sus logos decembrinos intentan ser neutrales y no estar apegados a ninguna religión.
Sin embargo, diseñar los logos es apenas 20 por ciento de su trabajo: con apenas 30 años, Hwang es el jefe de los webmasters de Google.
Обнаружил проблему при переходе на рельсы 2.1 не работает всем известный плагин exception_notifier
Большая просьба к трудящимся если вы уже пофиксили сей баг выложить для всех.
Зарание благодарен. rails 2.1 exception_notifier, exception_notifier
Those of us that came from the Java and .NET world, these framworks had 2 choices for sending the users browser to differnt places. Java has Redirect and Forward. Generally we preferred to use Forward in most cases because it...
Here are some useful scripts with mechanize, hpricot, and htmldoc
First, install mechanize and hpricot and htmldoc (pdfs)
gem install hpricot
gem install mechanize
gem install htmldoc
Save web page as pdf with mechanize and htmldoc
require 'rubygems'
require 'mechanize'
require 'htmldoc'
agent = WWW::Mechanize.new
agent.user_agent_alias = 'Mac FireFox'
agent.redirect_ok = true
page = agent.get('http://scottmotte.com/archive')
pdf = PDF::HTMLDoc.new
pdf.set_option :outfile, "~/Desktop/outfile.pdf"
pdf.set_option :bodycolor, :white
pdf.set_option :links, true
pdf positions)
f.set_fields( ‘fund_value[cash]‘ => [...]
I love 37signals. I think they set a great example of what a company should be and how a company should treat their employees. Getting Real was a fantastic read and I wish more organizations would adopt it. That said, what the hell are they doing in Chicago? I mean besides ample amounts of blogging. [...]
So it’s awesome Ruby snippet time, and in particular I’m going to look at the ability to evaluate statements against a block, specifically to find out where the particular block came from.
The “eval” command not only takes in the command to be executed, but can also optionally take in a binding to run against. This means that instead of evaluating a command against the current, local binding, a specific binding can be used, and for our example, we are going to use the binding on a Proc object, to allow us to evaluate a statement as if it was running within the block itself.
Let’s setup a module that allows us simply to register a block to an array:
module TestApp
class << self
# Adds a block to our global array
def add_block(&block)
@@blocks ||= []
@@blocks << block
end
# This just returns our block array so we can iterate through it
def blocks
@@blocks
end
end
end
Within this same file (let’s call it test1.rb), we can also register a test block. The execution of the block isn’t really important, so let’s just do:
TestApp::add_block { puts "test1" }
Now let’s setup a second script (called test2.rb) that’ll also register a block, and that will iterate through the blocks and use the “eval” command to show where each block originated from:
# Reference our first script
require File.join(File.dirname(__FILE__), "test1")
# Add a second block
TestApp::add_block { puts "test2" }
# For each block we have, run a statement that will return the "__FILE__" variable for each block, against the blocks own binding
TestApp::blocks.each do |blk|
puts "Block from: #{eval('__FILE__', blk.binding)}"
end
If we run the test2.rb script now, we should see output similar to the following:
Block from: ./test1.rb
Block from: test2.rb
So we can now differentiate between our blocks, by investigating the blocks own binding! Something to bear in mind is that obviously the paths shown are relative – if you were executing the test2.rb script using an absolute path (for example, “ruby /path/to/test2.rb”), you’d see that the absolute paths were shown instead. Either way, the information should be useful in determining the origin of a block.
Now you may be asking, what’s the use case for something like this? Our block registration code above does nothing useful, and in fact we don’t even execute the blocks themselves! Well, within Feather we use this code to find out which plugin registered a particular block – in this way, we can check at runtime (before executing the registered block) whether the plugin is active or not. If it isn’t, it won’t be executed, if it is, it will.
This is just one of those cool things you can do when you have a reference to a specific binding – there’d be nothing to stop you from interacting with the blocks bindings in other ways too.
Acabamos de migrar las páginas de netFlux a WordPress. Abandonamos al querido sistema de blog Typo basado en RubyOnRails que estuvimos usando este último tiempo en favor del WordPress.
Básicamente la razón se debe a que en la actualidad estamos manteniendo las páginas de netFlux en un servidor de desarrollo, el cual cada vez requiere más [...]
這一章是 Delivering What Users Want。我們總是幻想客戶一開始就確切告訴我們需要什麼,然後做完收工拿錢即可。不過事實總是中途加入一開始沒有提到的功能跟規格變更。敏捷開發不去試圖”擊敗”這些變更,而是把重點放在如何快速辨認及適應這些改變,並在時程及預算內做出真正符合用戶需求的軟體。
Let Customers make decisions (讓金主做決策)
當碰到設計上的決策時,尤其是 business-critical 決策,例如有兩個解決方案,一個複雜耗時長,另一個較簡單花較少時間。這時不要自己先決定,而是準備好資料(優缺點跟耗時估算)向金主(客戶)並用他們聽的懂的語言,讓他們決定。我自己的經驗是常常你打算做的沒有客戶想要的這麼複雜唷,這時候就可以省下這些時間去做真正客戶要的。
記得紀錄下來每個決定跟理由,當然你的問題也不能太技術細節,而是要有關係到 business。當然客戶也有可能說不知道,那麼你只好說出你覺得最好的建議。
Let Design Guide. Not Dictate (讓設計引導,而非鉅細靡遺)
設計文件不要細節到告訴你怎麼實做,而是一張地圖告訴你方向。
傳統作法特別強調設計階段,希望設計文件盡可能詳盡,但是 agile 則建議你盡早進入開發(development)階段,這不代表忽略 design 的意思,基本的 key diagrams 仍是一開始就必須先思考。
agile 建議盡早開始的理由是,再多的設計也只是基於你對當前的需求了解,一旦開始 coding,一切都會變化,不需要把時間浪費在詳盡的設計。
“There’s no sense being exact about something if you don’t even know what you’re talking about.” -John von Neumann” 馮曼紐大師如是說
當 designer 要求 coder 必須按照設計實做,但是系統現實和已經存在的程式告訴 coder 這並不會是最好的設計,真是糟糕,設計的時間已經花了,沒有時間重來。於是 coder 在有壓力的情況下只好實做出他明知不對的程式。這種嚴格要求 requirements-design-code-test 流程的瀑布式開發已經落伍了。
而 [...]
I know “Scratch” is an old movie but I just watched it again and came across this great quote by DJ Shadow.
“The (Invisibl Skratch Piklz) Picklz were the first to take out the secrecy of dj’ing. Because a lot of hip hop dj’ing was based on covering the labels so [...]
A algumas semanas atrás a Ruby Association, entidade responsável pelo suporte e a divulgação da linguagem de programação Ruby, anunciou a primeira de um trio de certificações: a Ruby Association Certified Ruby Programmer Silver (para seguir a tradição, vou me referir a ela com uma sigla bem complicada e não legível, RACRP-S), que em breve [...]
It’s a busy day for me today, so I’ll just redirect you over to Courier & Press for all the details.
The track, which was to open a 44-day meet on the Fourth of July, will start racing on Friday. Thirty-nine days are scheduled, ending on Labor Day. Some lost races could be recouped by expanding [...]
James Turrell, amerikanischer Künstler, plant seit über 30 Jahren das größte Kunstprojekt aller Zeiten. Er installiert im sogenannten Roden Crater, ein 380.000 Jahre alter Meteoritenkrater in den USA, sein Kunstprojekt. Der Roden Crater liegt im westlichen Teil des Painted Desert nahe San Francisco und wurde von Turrell aufgekauft. Turrells Spezialität ist die Arbeit mit Licht. Diese sehr spezielle Kunstrichtung findet im Roden Crater seine Vollendung. Satellite view of Roden Crater, the site of an earthwork in progress by James Turrell outside Flagstaff, Arizona. Er hat im laufe der Jahre einzelne Gänge und Räume in den Krater hineingebaut um Licht aufzufangen. Inspiriert von der Lichtarbeit wurde Turrell als er Interviews von Menschen gelesen hatte, die dem Tode begegnet waren und immer das Licht am Ende des Tunnels beschreiben hatten. Hier wurde Licht immer Zentral und in unterschiedlicher Ausprägung beschrieben. Licht wird in unserer Zeit nicht mehr so Zentral gesehen, da es Allgegenwärtig ist. Man benutzt es zum lesen und wir beschäftigen uns eigentlich nicht mit der Abwesenheit von Licht. In der Kindheit haben Licht und Schatten eher noch eine zentralere Rolle gespielt und Turrell möchte dies uns wieder nahebringen. Durch astronomisch berechnete, zum Himmel ausgerichtete Öffnungen, am Kraterrand dringt das Licht...
Pencil Project: A Gecko-powered, open source, cross-platform GUI prototyping tool. Not quite an OmniGraffle killer, but it looks like it could be decent for quick sketches.
Dr Nic Williams has been busy playing with iPhone and Objective C development lately and, unsurprisingly, has found a way to bring Ruby into the mix. He has developed rbiphonetest, a Ruby-based testing framework for iPhone / Objective C applications that uses RubyCocoa to provide the necessary bridge. As well as producing an in-depth 20 [...]
Imagine que você tenha um hash cujos atributos serão chamados muitas vezes durante um trecho de código.
user = {
:name => 'John Doe',
:blog => 'http://bleedingfromtheinside.com',
:style => 'from uk'
}
puts user[:name]
puts user[:blog]
puts user[:style]
O hash, embora útil, ainda não é a forma mais prática.
Seria muito mais conveniente se você pudesse acessar cada um [...]
Disclaimer: This is a publicly accessible database. The views and opinions of originators and contributors expressed on this site do not necessarily state or reflect those of DSC Limited. No representation or warranty is given as regards to any applicability of any suggestion, its accuracy or completeness.