{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Michaël Ortali | Articles & Reflections",
  "home_page_url": "https://www.silent-strength.com/articles",
  "feed_url": "https://www.silent-strength.com/feed.json",
  "description": "Explore technical articles, career lessons, architectural analyses, and advice on high-scale systems by Michaël Ortali.",
  "author": {
    "name": "Michaël Ortali",
    "url": "https://www.silent-strength.com/"
  },
  "items": [
    {
      "id": "https://www.silent-strength.com/articles/getting-started-with-local-ai-on-your-mac",
      "url": "https://www.silent-strength.com/articles/getting-started-with-local-ai-on-your-mac",
      "title": "Getting Started with Local AI on Your Mac",
      "summary": "Running AI models locally on macOS ensures codebase privacy and eliminates reliance on third-party APIs. By understanding unified memory and quantization, developers can configure local environments to execute capable open-weight models directly on their own hardware.",
      "content_html": "<p><img src=\"/assets/images/articles/local_ai_mac.jpg\" alt=\"Local AI on Mac\"></p>\n<p>Over the past months, several engineers have reached out to ask about local development workflows. In our 1:1 conversations, the core concern is rarely about the capabilities of cloud-based APIs: it is about codebase privacy, our reliance on third-party services, and a shared curiosity to see what can run on our own hardware. Running models locally means we do not have to depend on subscriptions or deal with provider quotas.</p>\n<p>To address this, I have spent time tuning my own workstation setup. None of this is cheap: my own machine is a 16-inch M5 Pro Mac with 48 GB of unified memory. This capacity gives me the breathing room to run highly capable open models like Qwen or Gemma, without locking up the rest of my development tools. While running both simultaneously is out of the question, executing one at a time works seamlessly.</p>\n<p>Though, running open-weight models locally warrants caution: if a model can execute code or interact with the operating system, it can perform destructive actions on your machine. We recommend running local agentic tools inside containerized sandboxes to protect your host system. We plan on detailing the core concepts behind local execution and the open-source projects that bring it to life.</p>\n<h2 id=\"running-your-first-local-model\">Running Your First Local Model</h2>\n<p>We&#39;ll start by running a single model on your machine. If you want an accessible entry point with a solid UI, <a href=\"https://lmstudio.ai/download\">LM Studio</a> is the easiest way to test local models. You do not have to write configuration files or manage services in the terminal.</p>\n<p>While this guide focuses on macOS, the setup is similar on other operating systems. If you are developing on a different platform, several resources cover local setups for Windows and Linux. For instance: Windows developers can read the official announcement on <a href=\"https://ollama.com/blog/windows-preview\">Ollama for Windows</a>, and Linux users can follow the <a href=\"https://docs.ollama.com/linux\">Ollama Linux documentation</a> to configure GPU acceleration and service management.</p>\n<h3 id=\"running-a-local-model\">Running a Local Model</h3>\n<p>We start by downloading the LM Studio desktop application. Once installed, open the application, use the search bar to locate a lightweight, optimized community model like <code>lmstudio-community/gemma-4-E2B-it-MLX-4bit</code>, and click download to pull the model files onto your workstation.</p>\n<img src=\"/assets/images/articles/lmstudio_search.png\" alt=\"Searching for Gemma in LM Studio\" class=\"screenshot\" /><p>Once the download completes, navigate to the chat interface, select the model from the top dropdown menu, and start a chat. Typing &quot;hello!&quot; is enough to verify the setup. If your workstation runs low on unified memory, you will see a system warning. In this scenario, reducing the context size in the configuration settings will lower the memory allocation at launch.</p>\n<img src=\"/assets/images/articles/lmstudio_release.png\" alt=\"Testing the Loaded Model in LM Studio\" class=\"screenshot\" /><p>To use the model as a coding assistant in the terminal, we need to spin up the local API gateway. Click the Developer icon on the left sidebar, select &quot;Local Server&quot;, enable the server toggle, and load the model.</p>\n<img src=\"/assets/images/articles/lmstudio_server.png\" alt=\"Configuring Local Server in LM Studio\" class=\"screenshot\" /><h3 id=\"terminal-integration-through-opencode\">Terminal Integration Through OpenCode</h3>\n<p>Once the local server is running, we can integrate it with a command-line developer utility like <a href=\"https://opencode.ai\">OpenCode</a>. You can install OpenCode by running the following command in your terminal:</p>\n<pre><code class=\"hljs language-bash\">curl -fsSL https://opencode.ai/install | bash\n</code></pre>\n<p>After the installation completes, modify the configuration file at <code>~/.config/opencode/opencode.jsonc</code> to route requests to your local LM Studio instance:</p>\n<pre><code class=\"hljs language-json\"><span class=\"hljs-punctuation\">{</span>\n  <span class=\"hljs-attr\">&quot;provider&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">{</span>\n    <span class=\"hljs-attr\">&quot;lmstudio&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">{</span>\n      <span class=\"hljs-attr\">&quot;baseURL&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;http://localhost:1234/v1&quot;</span><span class=\"hljs-punctuation\">,</span>\n      <span class=\"hljs-attr\">&quot;apiKey&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;lmstudio&quot;</span>\n    <span class=\"hljs-punctuation\">}</span>\n  <span class=\"hljs-punctuation\">}</span><span class=\"hljs-punctuation\">,</span>\n  <span class=\"hljs-attr\">&quot;model&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;lmstudio-community/gemma-4-E2B-it-MLX-4bit&quot;</span>\n<span class=\"hljs-punctuation\">}</span>\n</code></pre>\n<p>Once saved, launch <code>opencode</code> in your terminal and say hello. When you watch the model generate a response, you have achieved a major milestone: a highly capable neural network running entirely offline on your Mac. There are no subscription fees, no network latency, and no code leaving your workstation. </p>\n<p>While a lightweight model like <code>gemma-4-E2B-it-MLX-4bit</code> is useful for testing your setup, it will not be great at complex coding tasks. For production workflows, you will eventually want to load larger open-weight models like Qwen or Gemma 4 31B to handle deep architectural reasoning. With this baseline established, we can explore the core mechanisms and settings that control how these models run.</p>\n<h2 id=\"key-concepts\">Key Concepts</h2>\n<p>Running advanced setups requires understanding a few core concepts. Modern local models are built on the Transformer architecture: a design that uses self-attention mechanisms to process tokens in relation to all other tokens in a sequence simultaneously. This parallel processing capability is what allows models to capture complex code syntax and context. That said, keeping billions of active parameters in memory requires substantial hardware resources.</p>\n<p>To run these models on a standard developer machine, we rely on quantization. Quantization is a compression technique that maps high-precision floating-point weights (typically 16-bit or 32-bit) to lower-precision representations (like 4-bit or 8-bit integers). While this reduces the overall file size and memory footprint, the model retains most of its original reasoning capability. As a result, we can run a 7-billion parameter model in under 6 GB of RAM, instead of the 14 GB it would require at full precision.</p>\n<p>There are other variables that can be controlled when a model is launched, such as the K/V cache size and temperature. For instance: adjusting the temperature lets you control whether the output is deterministic or creative. Some models have options for enabling thinking processes, and you will learn to tune these parameters as you experiment.</p>\n<p>We also need to consider the format of the model files. The industry has standard formats that optimize how weights are loaded and processed:</p>\n<ul>\n<li><strong>GGUF:</strong> a file format designed specifically for fast inference on consumer CPUs and GPUs. It packs the model metadata, hyperparameters, and tensor weights into a single file, making it highly portable.</li>\n<li><strong>MLX:</strong> a format optimized specifically for Apple&#39;s unified memory architecture. This allows the GPU to access the model weights directly, bypass translation layers, and maximize token generation speed.</li>\n</ul>\n<p>Choosing the right format and quantization level is critical. When selecting a model, we generally balance model size against available RAM:</p>\n<ul>\n<li><strong>4-bit Quantization (e.g. Q4_K_M):</strong> provides the optimal balance of speed and intelligence. It reduces memory usage by roughly 70% while maintaining near-baseline performance.</li>\n<li><strong>8-bit Quantization (e.g. Q8_0):</strong> provides slightly higher precision for complex coding tasks. However, it requires double the memory footprint and increases processing latency.</li>\n</ul>\n<h2 id=\"hardware-optimized-inference-ollama-and-mlx\">Hardware-Optimized Inference: Ollama and MLX</h2>\n<p>If you prefer a lightweight utility that runs in the background, <a href=\"https://ollama.com\">Ollama</a> is the standard for command-line model management. Ollama runs as a background service and exposes a clean CLI to fetch and run models. Because it is highly optimized for Apple Silicon, it handles the allocation of unified memory efficiently, allowing the CPU and GPU to share the model weights without redundant copies.</p>\n<p>To get the absolute best performance on a Mac, we can combine Ollama with MLX models. <a href=\"https://github.com/ml-explore/mlx\">MLX</a> is an open-source machine learning framework developed by Apple specifically for Apple Silicon. Models compiled for MLX are fully optimized for unified memory: they use Metal Performance Shaders to speed up matrix multiplication. This optimization dramatically increases token generation speeds, rendering local models virtually instantaneous.</p>\n<p>Unified memory is the secret weapon of Apple Silicon. Unlike traditional PCs where the CPU and GPU have separate memory pools, Macs share a single block of RAM. This means a 48 GB Mac can allocate up to 36 GB directly to a model&#39;s weights. The GPU processes these weights without copying them over a slow PCIe bus.</p>\n<blockquote class=\"pull-quote\">Unified memory is the secret weapon of Apple Silicon, allowing the GPU to process model weights directly without copying them over a slow PCIe bus.</blockquote><h2 id=\"memory-management-and-performance-tuning\">Memory Management and Performance Tuning</h2>\n<p>Running models locally eventually runs into physical constraints: when a model&#39;s size exceeds your free unified memory, macOS relies on swap memory on the SSD. This transition causes immediate performance degradation: token generation speeds drop from dozens of tokens per second to a crawl. Avoiding swap means keeping an eye on unified memory pressure: a quick check in Activity Monitor or a terminal utility will show if you are pushing the system too hard.</p>\n<p>We can also tune our configurations to stay within these boundaries. For instance: reducing the context window from 32,000 tokens to 8,000 tokens significantly cuts down memory usage during generation. The K/V cache stores past tokens to speed up multi-turn conversations, but a large cache can quickly consume several gigabytes of RAM. Keeping these configurations tight ensures the model remains fast without locking up the machine.</p>\n<h2 id=\"open-models-and-where-to-find-them-hugging-face\">Open Models and Where to Find Them: Hugging Face</h2>\n<p>For locating quantized, MLX, and open-weight models, <a href=\"https://huggingface.co\">Hugging Face</a> remains the central registry. New models are released daily, and the open-source community is highly active in optimizing them for consumer hardware.</p>\n<p>When downloading files, look for model names containing GGUF or MLX tags. By selecting the right quantization level on Hugging Face, we can guarantee that the model fits within our workstation&#39;s memory limits. Running models locally is no longer just a hobbyist experiment: it is a practical path to scaling developer velocity on our own terms.</p>\n",
      "date_published": "2026-08-11T12:00:00.000Z",
      "tags": [
        "AI",
        "Mac",
        "Open Source"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/dont-micromanage-roomba",
      "url": "https://www.silent-strength.com/articles/dont-micromanage-roomba",
      "title": "Don't Micromanage Roomba",
      "summary": "Hovering over AI prompts and micro-managing every line of code limits the productivity of automated tools. By treating AI agents like a Roomba (setting clear boundaries and building robust verification systems) engineering teams can focus on high-level goals and let the agent run on its own.",
      "content_html": "<p><img src=\"/assets/images/articles/dont_micromanage_roomba.jpg\" alt=\"Don&#39;t Micromanage Roomba\"></p>\n<p>In my recent 1:1 conversations with engineers across our team, I have noticed a pattern of frustration. Developers are spending their days hovering over AI prompts, watching terminal outputs scroll by line by line, and stepping in to correct minor syntax mistakes. There is a clear feeling that instead of making us more productive, AI tools have turned us into helicopter managers. As we discussed in my <a href=\"/articles/navigating-change-reflections-on-ai-leverage-and-the-evolving-engineering-craft\">previous reflections on navigating AI change</a>, this shift from writing code to delegating it requires building a different kind of trust.</p>\n<p>My boss, <a href=\"https://www.linkedin.com/in/ccunningham/\">Christopher Cunningham</a>, recently shared an analogy that captures this trap: the Roomba. When you buy a Roomba, the goal is not to follow it around the house, correcting its path every time it bumps into a chair leg. You could vacuum your house much faster yourself. The whole value of a Roomba is that it runs on its own in the background. If you spend your afternoon trailing it around the living room, buying it was pointless.</p>\n<p>Of course, exceptions exist. For example, my second floor has glass panels, and the Roomba spent its first day repeatedly bumping into them because its sensors could not see the transparent barrier. I had to pause the run and set up a digital no-go zone. Once that boundary was established, I could let it run unmonitored (unless it somehow figures out how to hack its way past the digital barrier).</p>\n<p>We are making the exact same mistake with AI agents today. We have delegated the work, but we are still trying to control every line of code. Trusting the system means setting clear boundaries (the equivalent of digital no-go zones) rather than hovering over the AI while it works.</p>\n<blockquote class=\"pull-quote\">Trusting the system means setting clear boundaries (the equivalent of digital no-go zones) rather than hovering over the AI while it works.</blockquote><h2 id=\"defining-the-boundary\">Defining the Boundary</h2>\n<p>To get past this, we need to understand two concepts: agentic loops and micro-interactions.</p>\n<ul>\n<li>An <strong>Agentic Loop</strong> is when you give an AI a goal, and it keeps working (planning, writing, testing, and fixing code) until it gets the job done without you stepping in. Industry pioneers have shown that these <a href=\"https://www.deeplearning.ai/the-batch/how-agents-can-improve-llm-performance/\">agentic design patterns</a> can significantly improve model performance compared to simple zero-shot prompting.</li>\n<li>A <strong>Micro-Interaction</strong> is when a developer jumps in to correct or guide the AI at every tiny step, rather than letting it finish on its own.</li>\n</ul>\n<p>Improving our craft means moving away from constant manual steering and letting these loops run on their own.</p>\n<h2 id=\"how-we-got-here\">How We Got Here</h2>\n<p>Our relationship with AI tools has evolved through a few clear stages, changing rapidly over the last twelve months:</p>\n<ul>\n<li><strong>The Prompt Era:</strong> We wrote long instructions to get the AI to output correct code. This was hard because we were still guessing how the AI would interpret our words. Most of the industry is still here today.</li>\n<li><strong>The Skills Era:</strong> We built reusable patterns and slash commands. This helped teams establish reliable, repeatable steps for the AI to follow.</li>\n<li><strong>The Workflows Era:</strong> We began combining multiple agents, skills, and commands to handle larger tasks.</li>\n<li><strong>The Loop Era:</strong> We now give the AI a broad goal and let it run, test, and fix its own work until it succeeds.</li>\n</ul>\n<p>Writing the actual code is no longer the hard part. Our focus must shift from writing the code ourselves to building the loops that verify the AI&#39;s output.</p>\n<h2 id=\"fix-the-system-not-the-code\">Fix the System, Not the Code</h2>\n<p>The friction today comes from how we interact with these tools. We often treat agents like smart autocomplete tools, stopping them the second they make a mistake.</p>\n<p>If the final output of a loop is wrong, do not micromanage the intermediate steps. Instead, look at the failure afterward and ask: <em>Why did the loop fail?</em></p>\n<p>Check if the prompt, the tools we gave it, or our testing rules were incomplete. For example, if the agent writes code that violates formatting rules, do not rewrite the file yourself. Instead, update the linter rules or the instructions so the agent fixes the code on its next try. When you fix the system instead of the individual mistake, you make sure the error never happens again.</p>\n<blockquote class=\"pull-quote\">When you fix the system instead of the individual mistake, you make sure the error never happens again.</blockquote><p>This shifts the engineer&#39;s role from manual coding to system design. The core of modern engineering is building the guardrails that make these loops reliable.</p>\n<p>Moving to autonomous loops helps us use AI speed safely. Research shows that introducing AI without proper controls can actually make software 7.2% less stable, because developers generate massive amounts of code that are hard to review (source: <a href=\"https://dora.dev/ai/gen-ai-report/report/\">DORA Gen AI Report</a>). To keep things reliable, we need to focus heavily on automated testing. However, productivity is not just about counting the number of pull requests. Treating code volume as a scoreboard only drains team morale. We need to focus on real results, not vanity metrics.</p>\n<h2 id=\"learning-to-delegate-to-machines\">Learning to Delegate to Machines</h2>\n<p>If you are early in your career, learning how to delegate is one of the most critical skills you can build. True delegation means giving someone a clear goal, setting the context upfront, making sure they have what they need to succeed, and letting them work. When they finish, they present completed work for your review.</p>\n<p>Delegating to an AI is no different. The rules of delegation are identical. The only change is that you are delegating to an AI agent rather than another engineer.</p>\n<p>If you don&#39;t provide a coworker the right context, you will get poor results. The same thing happens with an AI. In fact, learning how to prompt an AI is great practice for communicating with other engineers. Success in both cases requires clear scope, explicit criteria, and trust.</p>\n<p>For developers starting out, a simple rule of thumb applies: if the agent fails the same test twice, do not step in to write the code manually. Instead, look at the test rules or the prompt instructions to see where the boundaries need to be clarified.</p>\n<h2 id=\"how-to-audit-and-fix-the-loop\">How to Audit and Fix the Loop</h2>\n<p>Reviewing an agentic loop requires more than just checking the final output. When an agent runs through multiple steps, a small mistake early on can turn into a major failure later. To make the loop reliable, we need to inspect the entire path the AI took.</p>\n<p>We call this <strong>Tracing</strong>. Think of it as a flight data recorder for your code. When a run fails, we look at three distinct layers:</p>\n<ul>\n<li><strong>The Thinking Step:</strong> Did the AI break down the task correctly and choose the right tools?</li>\n<li><strong>The Action Step:</strong> Did the AI use its tools correctly, with the right options and settings?</li>\n<li><strong>The Result Step:</strong> Is the final output correct, safe, and formatted exactly the way you asked?</li>\n</ul>\n<p>To make these loops reliable, we must establish structured testing, secure environments, and deep observability.</p>\n<p>Testing AI agents requires automated <strong>Evaluations (Evals)</strong>. These are automated test suites that run your agent against a reference dataset of scenarios to make sure outcomes are accurate and safe. Both <a href=\"https://github.com/openai/evals\">OpenAI</a> and <a href=\"https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents\">Anthropic</a> have shown that these evaluations form the foundation of agent quality. Since AI behavior is unpredictable, these tests must check actual outcomes (like verifying a layout rule or an API status code) rather than asserting on exact text matches.</p>\n<p>Running these test loops also requires secure execution. Running untrusted, AI-generated code directly on your local machine is a safety hazard. Instead, these loops must execute inside isolated, temporary sandboxes like <a href=\"https://e2b.dev\">E2B</a> or Docker containers. This keeps the host system secure and prevents the agent from modifying local files.</p>\n<p>When a test fails, you need deep visibility to understand what went wrong. Teams can use tracing tools like <a href=\"https://www.langchain.com/langsmith\">LangSmith</a> or <a href=\"https://langfuse.com\">Langfuse</a> to record every step, tool call, and reasoning state. For instance, <a href=\"https://www.honeycomb.io/blog/improving-llms-production-observability\">Honeycomb</a> structured their logs using span-based tracing to make agent execution steps easier to debug. Much of this data is also captured directly in developer CLI logs. When using tools like <a href=\"https://docs.anthropic.com/en/docs/claude-code/overview\">Claude Code</a>, session logs record every step in structured JSON. If a run diverges, you can compare the logs against a successful execution to isolate the exact step that went off track.</p>\n<p>When a bug does slip into production, avoid patching the code manually. Instead, convert the bug into a new evaluation scenario, update the prompt or validation rules, and allow the agent to solve the task autonomously. This makes sure the error never happens again.</p>\n<h2 id=\"risks-and-trade-offs\">Risks and Trade-offs</h2>\n<p>Moving to fully autonomous loops comes with new challenges:</p>\n<ul>\n<li><strong>Token Costs:</strong> Cap loop execution (e.g., maximum five iterations), monitor token usage per task, and use techniques like <a href=\"https://platform.openai.com/docs/guides/prompt-caching\">OpenAI&#39;s prompt caching</a> to reduce redundant context costs;</li>\n<li><strong>Quality Drift:</strong> Run automated CI checks and visual gates before notifying reviewers to avoid PR fatigue;</li>\n<li><strong>Context Overload:</strong> Define clear workspace boundaries and file-level exclusions;</li>\n</ul>\n<p>Managing this shared infrastructure (the tools, skills, and test datasets) changes the role of platform engineering teams.</p>\n<p>Leaders also need to look at the costs and benefits. Spending a few dollars on API tokens to let an autonomous loop fix a complex bug is a huge win compared to paying for several hours of developer time. At the same time, we must prevent developers from falling into the trap of blindly approving code changes without understanding how they work. Reviewing AI-generated code requires us to focus more on system design, not less.</p>\n<blockquote class=\"pull-quote\">When you are used to controlling every character, letting an agent run in the background feels like letting go of the steering wheel.</blockquote><h2 id=\"the-path-forward\">The Path Forward</h2>\n<p>Stepping back from the console is uncomfortable. When you are used to controlling every character, letting an agent run in the background feels like letting go of the steering wheel.</p>\n<p>But the long game of software engineering has always been about focusing on the big picture rather than spelling out every line of code. As platforms like <a href=\"https://antigravity.google\">Google Antigravity</a> continue to mature, engineering success will be measured by how well developers define goals and how effectively they audit loops. Trust the process, build the verification systems, and let the Roomba clean. Stay curious, and <a href=\"/articles/be-fearless\">be fearless</a>.</p>\n",
      "date_published": "2026-08-06T12:00:00.000Z",
      "tags": [
        "AI",
        "Engineering",
        "Leadership"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/learning-in-the-age-of-ai-curiosity-feedback-loops-and-owning-your-growth",
      "url": "https://www.silent-strength.com/articles/learning-in-the-age-of-ai-curiosity-feedback-loops-and-owning-your-growth",
      "title": "Learning in the Age of AI: Curiosity, Feedback Loops, and Owning Your Growth",
      "summary": "Sustaining a career in software engineering during the rapid rise of AI requires curiosity, ownership of your growth, and strong feedback loops. Learning from unexpected career disruptions, such as outsourcing and major industry shifts, builds the resilience needed to master new systems.",
      "content_html": "<p><img src=\"/assets/images/articles/learning_in_the_age_of_ai.jpg\" alt=\"Learning in the Age of AI\"></p>\n<p>Early in my career, I moved from France to San Francisco for a job at <a href=\"https://yahoo.com\">Yahoo</a>. I had just signed a lease, unpackaged my life, and was thrilled to start. A few weeks later, my entire team&#39;s function was unexpectedly outsourced overseas.</p>\n<p>Finding yourself in that situation in a new country is surreal: uncertainty about your visa, anxiety about your career path, and the sudden loss of your project. Facing that disruption is daunting, but letting external circumstances define your trajectory is ultimately a choice. </p>\n<p>Taking control meant recognizing that I owned my destiny. I treated that crisis as a learning opportunity: reaching out to engineering leads across other teams, learning new internal frameworks on the fly, and expanding my technical network. I also spent time interviewing, using each conversation to reflect on where my gaps lay and what I could do better. That iterative loop of trial, feedback, and adjustment eventually led to a role at YouTube.</p>\n<blockquote class=\"pull-quote\">Taking control meant recognizing that I owned my destiny. I treated that crisis as a learning opportunity.</blockquote><p>That challenging period built far more resilience and engineering intuition than a smooth path ever could. It proved that while technical skills matter, adaptability and ownership sustain a career over the long game. True learning, after all, is experiential. Whether we are navigating an unexpected career pivot, mastering the timing of a multi-stage culinary reduction like craft ramen, or finding our way through unfamiliar cultures while traveling, we build mental models by engaging directly with ambiguity.</p>\n<p>The rapid rise of AI is pushing software engineering into a similar pivot today. Automated tools are shifting the ground beneath our feet, altering daily workflows, and redefining what it means to build software. </p>\n<p>When I published my <a href=\"/articles/navigating-change-reflections-on-ai-leverage-and-the-evolving-engineering-craft\">previous article on navigating AI change</a>, I was not expecting the volume of messages and follow-up questions that flooded my inbox. One question came up repeatedly: <em>How do we actually learn and grow in the age of AI?</em></p>\n<p>Delegating implementation to AI tools changes how we acquire knowledge. As autonomous agents generate more initial pull requests, our touchpoint shifts from manual typing toward reviewing output, setting boundaries, and auditing system behavior. In this environment, curiosity is the primary engine that keeps our technical judgment sharp. Automated speed is valuable, but merging code without understanding the logic trades long-term intuition for short-term output.</p>\n<h2 id=\"curiosity-as-the-primary-engine\">Curiosity as the Primary Engine</h2>\n<p>Probing code during review is just as essential today as when every line was written by a human. That curiosity aligns directly with our long-standing delivery philosophy: &quot;Think Big, Ship Small.&quot; Breaking requirements into small, verifiable iterations guarantees that autonomous models stay within architectural guardrails. It is easy for an agent to get off track when instructions are vague, and we should avoid asking a tool to refactor an entire service domain in an unmonitored attempt.</p>\n<p>In practice, interrogating an agent&#39;s work relies on turning code reviews into active learning conversations by:</p>\n<ul>\n<li><strong>Interrogating choices:</strong> asking <em>&quot;Why did you choose this state management hook over a simpler prop here?&quot;</em> or <em>&quot;Why choose a worker queue over a batch transaction?&quot;</em> when an agent introduces unexpected complexity.</li>\n<li><strong>Exploring alternative patterns:</strong> asking <em>&quot;What trade-offs were evaluated before settling on this approach?&quot;</em> to test whether a simpler, more maintainable option exists.</li>\n<li><strong>Evaluating failure modes:</strong> asking <em>&quot;How does this layout change affect Interaction to Next Paint (INP) or accessibility (a11y) standards?&quot;</em> to verify system quality.</li>\n</ul>\n<p>Consider a code review: an AI agent generates a pull request refactoring a UI component or a database call. Asking the agent to explain execution trade-offs forces a clear breakdown of design rationale. Following up by using the model as a tutor to explain unfamiliar concepts transforms a routine code review into an interactive lesson.</p>\n<p>That same curiosity needs to flow in the opposite direction, too: especially when an AI tool reviews code that we wrote. Taking agent feedback at face value misses a prime learning opportunity. When an automated review tool flags code or suggests a refactor, probing the model for context reveals whether guidance stems from a core architectural principle or a team convention.</p>\n<p>If an automated review agent recommends splitting a class into smaller modules, asking where that guidance originated or what <a href=\"https://learn.microsoft.com/en-us/visualstudio/code-quality/code-metrics-maintainability-index-range-and-values\">maintainability metric</a> is improved helps evaluate the suggestion. Distinguishing between deep design requirements and basic syntactic consistency prevents looking for complex answers where simple conventions apply. Formatting rules require straightforward consistency, whereas service boundary decisions require architectural debate.</p>\n<h2 id=\"harnessing-grounded-ai-tools\">Harnessing Grounded AI Tools</h2>\n<p>Beyond code reviews, learning in an AI-accelerated environment goes far beyond inline editor suggestions. Over the past year, a new generation of specialized tools has emerged that transforms how we digest, synthesize, and interrogate complex technical material.</p>\n<p>One tool that has fundamentally changed my research workflow is <strong><a href=\"https://notebooklm.google\">Google NotebookLM</a></strong>. Grounding an AI model directly in your chosen source materials allows you to digest technical specifications, architecture whitepapers, or unfamiliar API documentation interactively.</p>\n<p>Uploading technical documents into a grounded environment creates a personalized study partner by:</p>\n<ul>\n<li><strong>Synthesizing complex whitepapers:</strong> generating clear overviews of unfamiliar algorithms or consensus protocols.</li>\n<li><strong>Creating interactive audio summaries:</strong> generating conversational breakdowns of dense specifications to listen to during a commute.</li>\n<li><strong>Interrogating source materials directly:</strong> asking targeted queries like <em>&quot;What are the primary trade-offs between memory overhead and query latency in section three?&quot;</em> to extract specific insights.</li>\n</ul>\n<p>Using specialized tools allows us to build <a href=\"https://fs.blog/mental-models/\">mental models</a> significantly faster. Instead of passively reading static text, you actively engage with material through Q&amp;A and audio summaries. Combining grounded tools like NotebookLM with code-centric pair programmers accelerates comprehension while keeping accuracy grounded in original sources.</p>\n<h2 id=\"involving-subject-matter-experts-for-institutional-memory\">Involving Subject Matter Experts for Institutional Memory</h2>\n<p>Even as specialized AI tools accelerate research, there is a critical boundary they cannot cross on their own. While modern AI models index large codebases remarkably well, they suffer from a fundamental limitation: they lack institutional memory. An LLM can scan every repository in an organization and map out dependencies within seconds, but it cannot tell you why a legacy service was designed with specific constraints three years ago, what outage led to a particular workaround, or how historical business decisions shaped current database schemas.</p>\n<p>Subject matter experts hold institutional knowledge. Engineers who have operated systems over years possess context no codebase index can capture. Engaging directly with domain experts and reading historical design documents builds both technical understanding and long-term trust across an organization.</p>\n<p>Beyond the immediate technical context, these human connections form a durable professional network that outlasts any single project or codebase. Building strong relationships across different domains ensures we have trusted sounding boards when navigating architectural challenges or career transitions.</p>\n<p>Involving subject matter experts early in project lifecycles provides insights that automated tools consistently miss, such as:</p>\n<ul>\n<li><strong>Uncovering historical rationale:</strong> learning the business trade-offs and operational constraints that shaped current system boundaries.</li>\n<li><strong>Observing problem decomposition:</strong> studying how experienced engineering leads structure complex migrations and evaluate risk.</li>\n<li><strong>Building cross-team alignment:</strong> establishing strong working relationships and trust across domain owners.</li>\n</ul>\n<p>Imagine migrating a legacy user authentication service to a modern multi-location permission model. An AI agent scanning the codebase will see existing database tables, constraints, and current API routes. What the agent cannot see is that two years ago, a temporary schema patch was introduced to support an enterprise customer integration, creating an unwritten edge case in session validation. Sitting down with the domain expert who designed that original authentication layer reveals why that patch exists and how the edge case manifests during traffic spikes.</p>\n<p>These human relationships create a compounding feedback loop for automated workflows. AI agents excel at pattern matching and syntax generation, but struggle when faced with undocumented domain edge cases (a limitation highlighted by <a href=\"https://www.gitclear.com/research\">GitClear&#39;s longitudinal research on declining AI code quality</a>). When an agent gets stuck or generates an invalid approach for a complex service, the institutional context we gathered from subject matter experts allows us to prompt the agent effectively and unblock the system.</p>\n<p>Human domain experts do not become obsolete in an AI-augmented environment. Their value increases because their context becomes the highest-value input that keeps autonomous tools aligned with real-world requirements. Investing time in building rapport with experienced teammates guarantees that we bring the right context to the table when orchestrating AI workflows.</p>\n<h2 id=\"diversifying-experiences-to-reframe-intuition\">Diversifying Experiences to Reframe Intuition</h2>\n<p>While learning at work is essential, another realization has become clear to me over time: technical intuition expands fastest when you step outside your daily routine. This kind of cross-training draws on what educators call the <a href=\"https://fs.blog/knowledge-project-podcast/barbara-oakley/\">diffuse mode of thinking</a>, allowing the subconscious mind to synthesize complex problems while engaged in unrelated tasks. Diversifying your experiences across different domains prevents mental stagnation and sharpens how you approach complex systems.</p>\n<p>Stepping outside your primary stack to build a low-stakes side application for a friend (such as an inventory manager or event organizer) forces you back into the mindset of a beginner. You must navigate product decisions, deployment, and practical UX without corporate infrastructure safety nets, reinforcing product empathy and delivery discipline.</p>\n<blockquote class=\"pull-quote\">Stepping outside your primary stack to build a low-stakes side application forces you back into the mindset of a beginner.</blockquote><p>The same benefit applies to creative challenges outside technology. Mastering multi-stage culinary techniques like craft ramen or French gastronomy requires timing, temperature control, and multi-component assembly that mirror distributed pipeline design. Similarly, practicing macro photography or navigating unfamiliar cultures through travel trains your eye for detail and sharpens your comfort with ambiguity.</p>\n<p>Challenging yourself in non-engineering domains builds the exact mental muscle needed when debugging production systems or auditing AI output, and it keeps your attention to detail sharp. Diversifying your experiences reminds us that curiosity is a holistic trait: the more varied your experiences, the richer your perspective as a builder.</p>\n<h2 id=\"cultivating-real-world-feedback-loops\">Cultivating Real-World Feedback Loops</h2>\n<p>When evaluating all these avenues for growth, it becomes obvious that we cannot learn everything at once. Software engineering encompasses an immense landscape of tools and paradigms, and trying to master every emerging technology simultaneously leads directly to burnout. Similarly, the constant cognitive demand of auditing machine-generated output can quickly lead to <a href=\"https://hbr.org/2026/03/when-using-ai-leads-to-brain-fry\">severe fatigue</a> and <a href=\"https://www.fastcompany.com/91523806/how-ai-is-quietly-exhausting-you-and-what-to-do-about-it\">quiet exhaustion</a> (challenges explored in recent research on how AI usage drains mental resources). Staying effective requires pragmatism about where we spend our energy today and what we consciously defer until later.</p>\n<p>Setting intentional direction starts with self-reflection: asking <em>What role do I want to step into next?</em> (a theme we explored when discussing how to <a href=\"/articles/becoming-an-organizational-leader\">become an organizational leader</a>) or <em>What upskilling matters most for my current responsibilities?</em> But relying solely on self-reflection is incomplete without external data points.</p>\n<p>In a strong engineering culture, gathering a 360-degree view of your impact combines direct conversations with subtle micro-signals, including:</p>\n<blockquote class=\"pull-quote\">In a strong engineering culture, gathering a 360-degree view of your impact combines direct conversations with subtle micro-signals.</blockquote><ul>\n<li><strong>Engaging leadership:</strong> discussing technical strategy and career progression during regular 1:1s.</li>\n<li><strong>Partnering with peers:</strong> asking product managers and teammates where delivery friction occurs during execution.</li>\n<li><strong>Gathering informal micro-signals:</strong> observing where recurring project friction happens, tracking which pull request reviews generate pushback, or asking low-stakes, specific questions during casual check-ins.</li>\n</ul>\n<p>In addition to interpersonal feedback, we can also use AI tools to audit our own past pull requests, commit histories, and documentation. While we must watch out for automation bias (specifically avoiding using AI to audit AI-generated code), asking an interactive model to evaluate our own human-authored artifacts for clarity or missing edge cases provides an objective baseline for personal growth.</p>\n<p>AI tools like NotebookLM or interactive pair programmers can then synthesize these observations. Prompting the model interactively turns the AI into a facilitator that interviews you with targeted questions, one at a time, to draft a realistic 90-day learning plan. But this draft is only a starting point: true alignment requires sitting down with your manager to reconcile the plan with organizational priorities and delivery goals.</p>\n<h2 id=\"taking-control-of-your-own-growth\">Taking Control of Your Own Growth</h2>\n<p>Ultimately, whether you are building side projects, probing AI agents, or gathering feedback from peers, true personal growth requires a willingness to step into unfamiliar territory. Whether we intentionally seek out hard challenges or unexpected external events force a sudden change upon us, navigating uncertainty is where real capability is forged.</p>\n<p>The industry context is changing, but the fundamental principle remains unchanged: stay curious, embrace the unknown, and take full control of your own growth. Learn to be fearless, and own your path.</p>\n<div class=\"dive-deeper\">\n  <h4>Dive Deeper</h4>\n  <p>For additional perspectives on how automated tools shape our minds, read Rushabh Doshi's article on <a href=\"https://rushabhdoshi.com/posts/2026-02-17-cognitive-debt/\" target=\"_blank\" rel=\"noopener noreferrer\">Cognitive Debt</a>. He explores how outsourcing our thinking to AI models can substitute technical debt with cognitive debt, warning that we run the risk of building complex systems we do not fully understand.</p>\n</div><hr>\n<p><em>Thanks to <a href=\"https://www.roxanenadeau.com/blogue/\">Roxane Nadeau</a> and <a href=\"https://www.threads.com/@dignifiedpauper\">Michael James Toland</a> for pre-read and feedback.</em></p>\n",
      "date_published": "2026-08-02T18:43:00.000Z",
      "tags": [
        "AI",
        "Learning",
        "Engineering",
        "Leadership"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/journey-across-southern-africa-from-table-mountain-to-the-namib-desert",
      "url": "https://www.silent-strength.com/articles/journey-across-southern-africa-from-table-mountain-to-the-namib-desert",
      "title": "Journey Across Southern Africa: From Table Mountain to the Namib Desert",
      "summary": "Reflections on a four-week journey across Southern Africa, exploring Table Mountain, the Cape Peninsula, the Kalahari Desert, and the majestic red dunes of Sossusvlei. A narrative of travel, photography, and finding perspective away from the end-of-year engineering rush.",
      "content_html": "<p><img src=\"/assets/images/articles/sa_trip/photo_08.jpg\" alt=\"Southern Africa Safari\"></p>\n<p>I am sharing these notes a bit late, looking back now at a trip I took in December 2025. There is something transformative about trading the end-of-year rush for four weeks across Southern Africa. It begins with the dread of a sixteen-hour flight from Washington DC. Sitting on the tarmac at Dulles, you brace for an exhausting long haul across the Atlantic, but the flight was surprisingly smooth: a good book, a couple of movies, a long sleep, and before you know it, the dramatic peaks of the Western Cape appear below the wings.</p>\n<p>I touched down in Cape Town on a gusty, windswept day, the legendary Atlantic wind howling across the tarmac. Over four weeks, I traveled across four countries: South Africa, Zimbabwe, Botswana, and Namibia. Thousands of kilometers across landscapes that force you to slow down, look up, and listen: from cold coastal mists and roaring waterfalls to quiet river channels, desert oases, and deep crimson sand dunes that feel like the edge of the earth.</p>\n<p>When you pack for a month-long expedition across four border crossings, being able to vacuum seal your clothes is an essential hack for optimizing limited luggage space. Beyond the packing logistics, you quickly learn that travel is not about controlling every hour. It is about embracing the wind, the dust, the long drives, cold drinks at sundown, and spontaneous conversations along the way. In other words: I set out with a loose plan and an open mind. What I found was a region of raw beauty, extraordinary wildlife encounters, world-class wine, and people whose generosity made me feel at home wherever I pulled over.</p>\n<h2 id=\"cape-town-wind-fog-and-familiar-shores\">Cape Town: Wind, Fog, and Familiar Shores</h2>\n<p>Arriving in Cape Town on that windy December day, stepping out of the airport triggered an immediate, powerful wave of nostalgia. Having lived in San Francisco for years, Cape Town hit me with a striking geographic kinship.</p>\n<p>The resemblance is uncanny: steep mountain slopes plunging directly into crashing ocean waves, rolls of sea fog sweeping over the bay, Table Mountain brooding over the city skyline like a wilder, majestic version of Twin Peaks, and distinct microclimates around every bend.</p>\n<p><img src=\"/assets/images/articles/sa_trip/photo_26.jpg\" alt=\"Cape Town Landscape\"></p>\n<p>Cape Town combines natural drama with extraordinary food and culture. I spent my first days driving down the Cape Peninsula along Chapman&#39;s Peak Drive and visiting the penguin colony at Boulders Beach. Watching the penguins waddle along the sand up close is unforgettable, though nobody warns you about the distinctive, pungent smell that hangs over the colony on a warm afternoon.</p>\n<p>From the coast, I spent a day wandering through Kirstenbosch National Botanical Garden before heading into the winelands of Franschhoek and Stellenbosch. Sitting outside under ancient oak trees at historic wine estates, sipping world-class Pinotage and Chenin Blanc under the bright summer sun, it turned out to be the absolute perfect day to get sunburned. Throughout South Africa, the people were super friendly, welcoming me with genuine warmth from day one.</p>\n<h2 id=\"johannesburg-highveld-energy-and-braai\">Johannesburg: Highveld Energy and Braai</h2>\n<p>From the Cape, I traveled up to Johannesburg. I only had a single day in Joburg, but the city has a raw, electric pulse and a deep history. It is unpretentious, complex, and full of life.</p>\n<p>Knowing a local contact in the city made navigating my one day in Joburg substantially easier, giving me an insider perspective beyond standard tourist routes. I spent part of the afternoon exploring the Mall of Africa, which turned out to be surprisingly beautiful with its sleek, sweeping design and lively public spaces. The one thing I wished I had caught was a live stand-up show from Trevor Noah. Having watched him for years on <em>The Daily Show</em>, seeing him perform live in his home country would have been incredible.</p>\n<p><img src=\"/assets/images/articles/sa_trip/photo_01.jpg\" alt=\"Johannesburg Skyline\"></p>\n<p>Spending my single day in Joburg was an essential grounding experience. Sitting down for an authentic South African braai, sharing cold lagers, and listening to locals talk about food, music, and politics gave me a deeper appreciation for contemporary South African culture before I headed north across the border.</p>\n<h2 id=\"the-thunder-of-victoria-falls\">The Thunder of Victoria Falls</h2>\n<p>Flying into Zimbabwe to see Victoria Falls, you hear the river long before you see it. The locals call it Mosi-oa-Tunya: &quot;The Smoke That Thunders.&quot;</p>\n<p><img src=\"/assets/images/articles/sa_trip/photo_05.jpg\" alt=\"Victoria Falls\"></p>\n<p>Walking along the rainforest path opposite the precipice, the sheer power of the water hitting the Batoka Gorge is humbling. For instance: standing on the rocky outlook drenching your clothes in warm spray as rainbows slice through the rising mist is the kind of experience that stops your thoughts in their tracks. It is water and earth at their most primal.</p>\n<div class=\"photo-grid\">\n  <div class=\"photo-card\">\n    <img src=\"/assets/images/articles/sa_trip/photo_02.jpg\" alt=\"Zambezi River\" />\n  </div>\n  <div class=\"photo-card\">\n    <img src=\"/assets/images/articles/sa_trip/photo_03.jpg\" alt=\"Victoria Falls Mist\" />\n  </div>\n  <div class=\"photo-card\">\n    <img src=\"/assets/images/articles/sa_trip/photo_04.jpg\" alt=\"Victoria Falls Rainbow\" />\n  </div>\n  <div class=\"photo-card\">\n    <img src=\"/assets/images/articles/sa_trip/photo_06.jpg\" alt=\"Gorge Views\" />\n  </div>\n</div><h2 id=\"chobe-and-the-okavango-wildlife-on-river-time\">Chobe and the Okavango: Wildlife on River Time</h2>\n<p>From Zimbabwe, I crossed into northern Botswana to explore Chobe National Park and the Okavango Delta. Botswana treats conservation with deep respect, and it shows in every mile of pristine bushland.</p>\n<p>Deep in the Okavango Delta, more than two hours inland by boat and far from any hotels, I pushed deep into the wild backcountry. The traditional dugout canoes used here are called mokoros. Gliding silently along narrow water channels framed by tall papyrus reeds, you get impossibly close to the wild: massive herds of elephants wading into the river channels, using their trunks like snorkels while hippos grunt in the shallows.</p>\n<p>Out here, camping at night means being completely surrounded by untamed nature. In fact, I had wild hippos roaming right through my campground after dark. Out on the water, my guides shared a few eye-opening stories about previous tourists who made questionable decisions around angry elephants. I will skip the wilder details, but the core takeaway is clear: dress accordingly, respect the wildlife, and whatever you do, do not run. In other words, as the movie title puts it: <a href=\"https://en.wikipedia.org/wiki/Good_Luck,_Have_Fun,_Don%27t_Die\"><em>Good Luck, Have Fun, Don&#39;t Die</em></a>.</p>\n<div class=\"photo-grid\">\n  <div class=\"photo-card\">\n    <img src=\"/assets/images/articles/sa_trip/photo_08.jpg\" alt=\"Chobe River Boat Safari\" />\n  </div>\n  <div class=\"photo-card\">\n    <img src=\"/assets/images/articles/sa_trip/photo_09.jpg\" alt=\"River Bank Wildlife\" />\n  </div>\n  <div class=\"photo-card\">\n    <img src=\"/assets/images/articles/sa_trip/photo_11.jpg\" alt=\"Mokoro in Okavango\" />\n  </div>\n  <div class=\"photo-card\">\n    <img src=\"/assets/images/articles/sa_trip/photo_12.jpg\" alt=\"Backcountry Camp\" />\n  </div>\n</div><h2 id=\"etosha-the-quiet-drama-of-the-natural-basin\">Etosha: The Quiet Drama of the Natural Basin</h2>\n<p>Driving west into Namibia, the lush green waterways gave way to the vast, sun-bleached expanse of Etosha National Park. At the center of the park lies the Etosha Pan: a giant, blinding white salt flat stretching out to the horizon.</p>\n<p><img src=\"/assets/images/articles/sa_trip/photo_13.jpg\" alt=\"Etosha National Park\"></p>\n<p>The secret to Etosha in December is simple: pull up near a natural water basin, cut the engine, and wait. You do not need to chase sightings across the dusty tracks. Over an hour, you watch a natural drama unfold: giraffes bending their long legs awkwardly to reach the water, zebra herds moving together in synchronized stripes, and prides of lions lounging in the shade of acacia trees. Patience at the water&#39;s edge is always rewarded.</p>\n<div class=\"photo-grid\">\n  <div class=\"photo-card\">\n    <img src=\"/assets/images/articles/sa_trip/photo_14.jpg\" alt=\"Zebras in Etosha\" />\n  </div>\n  <div class=\"photo-card\">\n    <img src=\"/assets/images/articles/sa_trip/photo_15.jpg\" alt=\"Etosha Salt Pan\" />\n  </div>\n  <div class=\"photo-card\">\n    <img src=\"/assets/images/articles/sa_trip/photo_16.jpg\" alt=\"Lions Resting in Shade\" />\n  </div>\n</div><h2 id=\"swakopmund-where-desert-meets-ocean\">Swakopmund: Where Desert Meets Ocean</h2>\n<p>Reaching the Atlantic coast at Swakopmund brings a sudden, dramatic shift in climate. Here, the burning sands of the Namib Desert run straight into the freezing Benguela Current of the Atlantic Ocean.</p>\n<p>As a result, thick sea fog often rolls over the town in the morning, dropping the temperature by twenty degrees and giving the German coastal streets a cool, moody atmosphere. Swakopmund is a great place to recharge: eating fresh coastal oysters and cold beer, quad-biking up oceanfront sand dunes, and watching thousands of pink flamingos gather in the shallow lagoons of Walvis Bay.</p>\n<div class=\"photo-grid\">\n  <div class=\"photo-card\">\n    <img src=\"/assets/images/articles/sa_trip/photo_17.jpg\" alt=\"Swakopmund Dunes and Ocean\" />\n  </div>\n  <div class=\"photo-card\">\n    <img src=\"/assets/images/articles/sa_trip/photo_18.jpg\" alt=\"Walvis Bay Flamingos\" />\n  </div>\n</div><h2 id=\"sossusvlei-the-crimson-silence\">Sossusvlei: The Crimson Silence</h2>\n<p>Further south in the Namib-Naukluft National Park lies Sossusvlei, home to some of the oldest and tallest sand dunes in the world. The sand here is rich in iron, oxidized over millions of years into vivid shades of burnt orange, apricot, and deep red.</p>\n<p><img src=\"/assets/images/articles/sa_trip/photo_20.jpg\" alt=\"Deadvlei Sossusvlei\"></p>\n<p>Waking up at 4:30 AM in the dark to beat the desert heat and climbing Dune 45 before sunrise is an experience you feel in your lungs and legs. As the sun crests the horizon, razor-sharp shadows divide the dunes into glowing orange and ink-black slopes. Walking into Deadvlei reveals a stark, silent world: 900-year-old dead camel thorn trees preserved by the dry desert air, standing like sculptures against blinding white clay pans and towering red dunes under an intense blue sky.</p>\n<div class=\"photo-grid\">\n  <div class=\"photo-card\">\n    <img src=\"/assets/images/articles/sa_trip/photo_19.jpg\" alt=\"Pre-dawn Dune Climb\" />\n  </div>\n  <div class=\"photo-card\">\n    <img src=\"/assets/images/articles/sa_trip/photo_21.jpg\" alt=\"Michael at Deadvlei\" />\n  </div>\n  <div class=\"photo-card\">\n    <img src=\"/assets/images/articles/sa_trip/photo_22.jpg\" alt=\"Sossusvlei Sand Dune Sea\" />\n  </div>\n  <div class=\"photo-card\">\n    <img src=\"/assets/images/articles/sa_trip/photo_23.jpg\" alt=\"Namib Desert Night Sky\" />\n  </div>\n  <div class=\"photo-card\">\n    <img src=\"/assets/images/articles/sa_trip/photo_24.jpg\" alt=\"Endless Desert Road\" />\n  </div>\n</div><h2 id=\"full-circle-back-to-cape-town-and-the-concrete-jungle\">Full Circle: Back to Cape Town and the Concrete Jungle</h2>\n<p>My final stop brought me full circle back to Cape Town for a last night before taking the long flight home to the US.</p>\n<p>Stepping back into daily life, returning to the concrete jungle, overpriced croissants, and long days spent staring into illuminated screens, the contrast was sharp. Yet after four weeks of dirt roads, campfire nights under African skies, cold ocean winds, and deep desert silence, returning to routine felt lighter. The entire four-week journey was a profound, deeply needed break, leaving me refreshed, but with a desire to travel again. Once you get that bug, it never truly leaves you.</p>\n<p>Though, arguably, living in Miami, for many, this sounds like vacation.</p>\n",
      "date_published": "2026-07-31T12:00:00.000Z",
      "tags": [
        "Travel",
        "Photography",
        "Africa"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/navigating-change-reflections-on-ai-leverage-and-the-evolving-engineering-craft",
      "url": "https://www.silent-strength.com/articles/navigating-change-reflections-on-ai-leverage-and-the-evolving-engineering-craft",
      "title": "Navigating Change: Reflections on AI, Leverage, and the Evolving Engineering Craft",
      "summary": "Navigating the rapid integration of AI in software engineering requires addressing adaptation fatigue, building trust, and redefining the craft around high-level leverage. Rather than viewing AI as a replacement, engineering leaders can guide teams to transition from writing code to orchestrating systems.",
      "content_html": "<p><img src=\"/assets/images/articles/reachy_mini_modern_lib.jpg\" alt=\"Reachy Mini\"></p>\n<p>Over the past year, I have had many 1:1 conversations with engineers and peers across our organization. In almost every conversation, the topic of AI comes up.</p>\n<p>These concerns are real. While some engineers are genuinely excited about the speed boost, others feel an understandable sense of anxiety: wondering what these autonomous tools mean for the craft of software engineering, how their day-to-day work will change, and where their individual value lies in an increasingly automated environment. On top of that, there is real adaptation fatigue. The sheer pace of change across the industry can feel relentless, leaving developers exhausted as they continuously re-learn tools, frameworks, and workflows just to stay afloat.</p>\n<p>As the lead driving our agentic SDLC at Genius AI, my primary focus is helping our team build trust with these tools. Technology shifts fast, but navigating change effectively always starts with people. Here is how I approach AI, how it has transformed my own workflow, and how we can navigate this space together.</p>\n<h2 id=\"software-has-always-changed\">Software Has Always Changed</h2>\n<p>Historically, software engineering has been defined by constant evolution. The tools and abstractions that feel essential to our work today were nonexistent when many of us started. For instance: <a href=\"https://react.dev\">React</a> was not around 15 years ago, yet today it is the foundation for web applications everywhere. <a href=\"https://graphql.org\">GraphQL</a> followed a similar path, starting as a small internal experiment before becoming a familiar industry standard.</p>\n<p>Feeling uncertain during a major technical shift is completely natural. Every new wave raises the abstraction layer, forcing us to step outside our comfort zone and rethink how we build. Throughout my career, every meaningful leap forward required pushing past the discomfort of the unknown. The key is not mastering every tool overnight: it is staying curious and adapting as the stack evolves. Engineers who embrace new abstractions early build far more leverage over time.</p>\n<h2 id=\"redefining-our-value-from-implementation-to-delegation\">Redefining Our Value: From Implementation to Delegation</h2>\n<p>When I talk through these changes in 1:1s, I often frame AI not as a replacement for human engineering, but as a powerful new tool in our daily toolkit. AI helps us move faster, but more importantly, it gives us an opportunity to relearn how we structure our daily work.</p>\n<p>Our role as individual contributors is shifting in a meaningful way. Hands-on coding remains an essential foundation, not because we need to type every character manually, but because first-hand building experience builds the intuition required to be an effective reviewer. After all, can you truly evaluate systems or audit generated output if you have never wrestled with building them yourself? It might be possible, but it is substantially harder. With that experience under our belt, our highest value is increasingly moving toward upfront planning, architectural design, setting boundaries, and reviewing code with a sharp, critical eye.</p>\n<p>In other words: translating logic into syntax is essentially becoming a downstream step; our true craft lies in the architectural vision and the plan. When working alongside intelligent tools, our daily rhythm shifts from manual building to thoughtful delegation and orchestration.</p>\n<p>This transition is a fantastic opportunity for engineers to level up much earlier in their careers:</p>\n<ul>\n<li><strong>Delegation:</strong> learning how to break a large feature down into clear, well-scoped tasks with explicit acceptance criteria.</li>\n<li><strong>Leverage:</strong> relying on automated tools to handle routine boilerplate while keeping human energy focused on subtle edge cases and domain logic.</li>\n<li><strong>Review &amp; Verification:</strong> sharpening our technical judgment to audit generated code for correctness, security, and maintainability.</li>\n</ul>\n<p>This shift also transforms how we mentor each other. For junior engineers, AI pair programming creates a judgment-free space to ask questions, explore new paradigms, and unblock themselves quickly. For senior engineers, mentorship shifts from reviewing syntax to teaching how to decompose complex problems and audit generated outputs. As teams share custom prompts, workflows, and agentic skills, we build a compounding library of shared leverage.</p>\n<p>At the same time, AI tools do not replace computer science fundamentals. Understanding systems design, data structures, and domain logic is more critical today than ever before: you cannot effectively guide or audit an AI agent if you do not understand the underlying principles yourself.</p>\n<p>Our long-standing principle of &quot;Think Big, Ship Small&quot; is our best guide here. By breaking large goals into small, verifiable iterations, we guarantee that autonomous models stay within guardrails. It is easy to get off track when instructions are vague, and we do not want to boil the ocean by asking a tool to solve an entire domain in a single attempt.</p>\n<h2 id=\"personal-velocity-beyond-the-metrics\">Personal Velocity Beyond the Metrics</h2>\n<p>I have seen a noticeable change in my own daily output over the past year. Integrating AI tools directly into my workflow has given me a level of personal leverage that felt impossible just a few years ago.</p>\n<p>To put things into perspective: my <a href=\"https://github.com/xethorn\">GitHub contribution count</a> jumped from <strong>3,400 contributions a year to over 5,000</strong>, and my PR numbers have more than doubled. That leverage gave me the breathing room to focus on deeper, architectural problems rather than getting bogged down in boilerplate.</p>\n<p>That said, I always emphasize in my 1:1s that metrics are not everything. It is crucial for engineering leads to draw a clear line here: you can ship a massive amount of high-quality code in a few well-scoped PRs, or a lot of bad code spread across dozens of PRs. Organizations need to focus on real outcomes rather than performative outputs, especially since treating code volume as a scoreboard is a race to the bottom that ultimately drains team morale.</p>\n<p>The true measure of success is never commit volume or PR counts, but whether that added speed allows us to build cleaner systems, solve persistent technical debt, and deliver real value to the people using our software.</p>\n<h2 id=\"getting-started-taking-the-first-step\">Getting Started: Taking the First Step</h2>\n<p>Not everyone is using AI tools in their daily workflow today, and that is completely fine. Taking the first step does not require an overhaul of how you work overnight.</p>\n<p>If you are looking for a place to start, I recommend focusing on a few accessible tools:</p>\n<ul>\n<li><strong><a href=\"https://antigravity.google\">Google Antigravity (AGY)</a>:</strong> Google&#39;s agentic coding platform designed for deep pair programming and workflow automation;</li>\n<li><strong><a href=\"https://openai.com/index/openai-codex/\">OpenAI Codex</a>:</strong> reliable code generation integrated directly into modern developer environments;</li>\n<li><strong><a href=\"https://www.anthropic.com/claude\">Anthropic Claude</a>:</strong> exceptional for architectural reasoning, complex refactoring, and code reviews.</li>\n</ul>\n<p>The best way to experiment is to pick a pet project you have always wanted to build but never had the time for: a small CLI utility, a personal dashboard, or a fun side app. The goal here is not to produce a flawless, production-ready system on your first try. It is meant to be a low-stakes sandbox where you can build trust with the technology.</p>\n<p>As you get comfortable, your learning follows a natural progression: you start by familiarizing yourself with basic AI prompting. As you learn more, you begin building reusable skills, assembling automated workflows, constructing agentic harnesses, and eventually designing continuous execution loops.</p>\n<p>Of course, experimenting with AI requires responsibility around data privacy, security, and provider terms. Subscriptions can be cancelled at any time if a provider suspects malicious activity or abuse. Make sure to keep sensitive keys and personal data out of prompts, and verify license compliance before incorporating generated code into production systems. A simple rule of thumb applies: do not ask an AI tool to do something you would not do yourself.</p>\n<h2 id=\"building-confidence-with-open-models\">Building Confidence with Open Models</h2>\n<p><img src=\"/assets/images/articles/omlx_admin_dashboard.png\" alt=\"oMLX Admin Dashboard\"></p>\n<p>For engineers who feel anxious about relying entirely on proprietary cloud services, hands-on experimentation with open models is often the best way to regain a sense of control. Open-weight models have come a long way, and the open-source ecosystem has matured to the point where running capable tools locally on standard hardware is straightforward.</p>\n<p>If someone wants to get comfortable with AI tooling on their own terms, a simple local setup is a great way to start:</p>\n<ul>\n<li><strong><a href=\"https://huggingface.co\">Hugging Face</a>:</strong> provides a central repository for discovering and downloading fine-tuned open-weight models.</li>\n<li><strong><a href=\"https://ai.google.dev/gemma\">Gemma Models</a>:</strong> Google&#39;s open models deliver impressive performance at sizes small enough to run smoothly on personal laptops.</li>\n<li><strong><a href=\"https://github.com/QwenLM/Qwen\">Qwen Models</a>:</strong> Alibaba&#39;s open model family offers strong coding capabilities for local experimentation.</li>\n<li><strong><a href=\"https://github.com/ml-explore/mlx\">MLX</a> / <a href=\"https://github.com/jundot/omlx\">oMLX</a>:</strong> provides fast, hardware-optimized inference designed specifically for workstation chips.</li>\n</ul>\n<p>Combining these tools lets you experiment locally without latency, subscription costs, or privacy concerns. For instance: running a compact Gemma model through oMLX makes it easy to build custom helper scripts, experiment with local code indexing, or automate repetitive tasks right on your own machine.</p>\n<p>It is also important to keep hardware expectations realistic. Open-source models like Qwen provide strong results, but running them on local workstations requires substantial memory and feels noticeably slower than cloud APIs.</p>\n<h2 id=\"what-i-am-excited-about\">What I Am Excited About</h2>\n<p>Navigating change is an ongoing journey, but looking down the road, I am genuinely optimistic about where we are heading. I think we are still in the early chapters of learning how engineers and AI tools work together best, and the long game is about giving engineers higher leverage to focus on creative, high-impact problem solving.</p>\n<p>As open models improve and context windows expand, these tools will continue to chip away at routine maintenance, debugging test failures, and tedious framework upgrades. Tech has always evolved, and AI is simply the next abstraction layer: one that gives us the leverage to adapt, support each other, and build great software together. If there is one lesson I have learned through every wave of technical change, it is simple: be fearless.</p>\n",
      "date_published": "2026-07-27T20:25:00.000Z",
      "tags": [
        "AI",
        "Leadership",
        "Engineering"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/becoming-an-organizational-leader",
      "url": "https://www.silent-strength.com/articles/becoming-an-organizational-leader",
      "title": "Becoming an Organizational Leader",
      "summary": "An in-depth guide for individual contributors transitioning from team leaders to organizational leaders. This article details the shift in mindset, the expansion of influence, and how to scale technical and culture frameworks across an engineering organization.",
      "content_html": "<blockquote>\n<p><em>This article was originally published on Square&#39;s <a href=\"https://developer.squareup.com/blog/becoming-an-organizational-leader/\">The Corner</a> blog.</em></p>\n</blockquote>\n<p>As your career progresses, it can become increasingly difficult to understand how to move up the ladder as an individual contributor. Extending on our &quot;Square’s Growth Framework for Engineers&quot;, we are now sharing in depth what it means to grow from being a team leader (Level 6) to being an organizational leader (Level 7), specifically focused on the journey for individual contributors.</p>\n<p>While everyone’s career path is unique, we’ll navigate through ways you can become an organizational leader by partnering with your Engineering Manager (EM), Product Manager (PM), and peers within your organization. Keep in mind, this is focused on the journey, and is not necessarily a step-by-step guide or timeline.</p>\n<p>Each section will reflect a part of our engineering ladder, and will include questions to help you think about your own path, achievements, and personal goals.</p>\n<h2 id=\"personal-growth\">Personal Growth</h2>\n<p>Ultimately, you are responsible for your personal growth. Learning opportunities might be dependent on projects and teams, but it’s crucial to acknowledge that you are the driving force behind what you want to learn next. Growth can have many different destinations and it isn’t “one path fits all”.</p>\n<p>There are multiple avenues available for engineers to achieve personal growth, such as: coaching programs, employee communities, internal technical groups (Java, Ruby, Go), and meetings with your lead(s). Below are some questions to ask yourself as you start to consider leveling up.</p>\n<p><strong>Questions to assess:</strong></p>\n<ul>\n<li>What avenues are available to you and which ones can help you the most?</li>\n<li>When having a 1:1 with your manager, do you raise issues you have been personally struggling with or do you just do project updates? Do you ask them about team strategy and how they think about specific problems?</li>\n<li>Are you making use of your 1:1s with your managers to the fullest extent? Are you discussing topics that might make you feel uncomfortable but will help you grow?</li>\n<li>If you have a 1:1 with your skip-level manager, do you try to learn about the organization and where other teams are struggling? Or do you keep it informative and solely focus on your team’s current needs?</li>\n<li>Do you surface issues with your leads, skip-levels, GMs to help them identify gaps in your product and software?</li>\n<li>When discussing with adjacent teams about a project, do you only talk about said project, or do you try to learn more about some of their technical problems?</li>\n<li>When working, do you feel comfortable? If you do, what do you want to learn next?</li>\n</ul>\n<h3 id=\"myths-about-growth\">Myths about Growth</h3>\n<h4>Growth only happens in specific teams</h4>\n<p>As a team leader, your duties have several dimensions. For example, designing and implementing complex technical solutions that are scalable and maintainable, leading cross functional efforts to help refine project requirements, providing technical guidance to your team, and participating in hiring, onboarding, and leveling-up talent.</p>\n<p>By definition, looking beyond you and your team’s immediate needs to solve problems shared through the organization is one of the paths to identify work for leveling up. It is possible regardless of the kind of team you’re on. For instance, you could join cross-team working groups, create shared systems/APIs, or help drive technical communities, as these venues can surface opportunities (new frameworks, paradigms, or technologies).</p>\n<h4>Growth only happens when you do two jobs at once</h4>\n<p>There&#39;s a general misconception about growth: that at some point in time, you will have to do two jobs instead of one, basically doing the work of a team leader and doing extra hours to fit in organizational leader type work. While situations like this could happen for a myriad of reasons (e.g. an urgent project), the transition from one level to the other is gradual. It means your current role and responsibilities will slowly evolve. While learning takes time, time spent isn&#39;t necessarily an indication of learning. That means spending a long time as a team leader or working long hours isn&#39;t an indicator of growth and does not prompt a promotion.</p>\n<h2 id=\"self-reflection\">Self-Reflection</h2>\n<h3 id=\"assess\">Assess</h3>\n<p>Before looking to the next level, two of the most important steps are to self-reflect and assess where you are right now. Look at the ladder for where you are and see where you are currently meeting, or not meeting expectations. Look for elements you could improve on. While you will start this exercise on your own, engage with your manager to hear out their perspectives. Having you and your manager separately assess your gaps to the next level and then comparing notes can be a quick and effective way to align. Together, work on developing strategies and creating opportunities that will enable you to grow and demonstrate your capabilities as a team leader.</p>\n<p>For instance, if you aren&#39;t diffusing knowledge within your team because you’re focused on delivering a critical feature for the past months, your manager could encourage you to present your learnings to your peers. If these venues do not exist, discuss how to create them so your teammates can learn from your work.</p>\n<p>If you and your manager agree that you solidly meet expectations as a team leader, start a conversation on how to become an organizational leader. Do the same as above: look at each criterion and grade yourself, pulling out examples from your hype doc, and ask for feedback from peers when needed. If you have 1:1s with your skip-lead (your lead’s lead), ask what they think about your assessment and ask for general career advice.</p>\n<h3 id=\"personal-goals\">Personal Goals</h3>\n<p>As part of the reflection process, it&#39;s essential to be honest with yourself and assess what you would like to do more and what you would like to do less of as your career progresses. Defining this will help you understand the different paths that can lead to becoming an organizational leader and whether you&#39;d be interested in those paths. Since growth isn’t linear, keep an open mind about other types of adjacent roles you could potentially move into laterally (e.g. people management or product development) or skills/areas of expertise you could take on.</p>\n<p>Below are questions you can ask yourself to help assess this:</p>\n<ul>\n<li>What past impact have you found satisfying or are you most proud of?</li>\n<li>What past work felt the least satisfying and rewarding to you?</li>\n<li>On a day to day basis, what are some of the key responsibilities you really enjoy doing? What are the ones you would like to do less?</li>\n<li>Do you prefer to work on one project start to finish or be involved in N projects mostly just during the critical stages?</li>\n<li>Do you see yourself doing more strategy and planning, such as annual planning, quarterly prioritization, cross-team negotiations, scoping projects, doing task breakdowns and milestone definitions?</li>\n<li>Do you see yourself working with more teams across Square or would you prefer to work more closely with your current team?</li>\n<li>Have you considered managing a team, focusing on leveling-up engineers? Have you tried being a mentor? Do you find it rewarding?</li>\n</ul>\n<h2 id=\"scope-of-impact\">Scope of Impact</h2>\n<p>Technical team leaders are responsible for complex, medium-to-large projects, which often involve several engineers and require deep expertise in several systems and technologies. In this role, you are acting as a DRI (directly responsible individual) that collaborates closely with PMs, EMs, and adjacent teams; you write design docs, help refine the product requirements and enable your teammates to execute on the plan. All of this work is relatively constrained within your team&#39;s boundaries but, at times will involve others for things like integrations, handling deprecations, and migrations.</p>\n<p>The transition from a high-performing team leader to an organizational leader mostly lies in the scope and impact of your work. As a team leader, you mainly impact your team; As an organizational leader, you have an organization wide impact. Defining impact varies per organization, so while we will do our best to provide examples for most, it&#39;s unlikely we&#39;ll cover all of them.</p>\n<h3 id=\"team\">Team</h3>\n<p>The transition from team leader to organizational leader is first and foremost within the day-to-day work on your team — you need to continue leveling-up engineers around you by enabling them to take on more complex projects, which in turn enables you to think more about the organization’s needs. You can achieve this through mentorship and coaching. For example: if an engineer is working on a design doc, pair with them to guide them through the process, think about the different edge-cases, assess the technical risk properly, and involve the right set of reviewers. If you are working on a large initiative, are there complex projects within it that could be designed and developed by another engineer in your team if you provided enough support for them to thrive?</p>\n<p>Aside from leveling-up peers, there will be a gradual shift in how you think about projects and make decisions. You will have to balance tradeoffs between long-term goals and immediate short-term needs. In return, this will help inform and shape the technical strategy, by guaranteeing the right level of prioritization is done to enable long-term technical success of the team. For instance, if your team is about to start a new service, have you looked into cloud deployment? Have you talked with adjacent teams to understand what the current best practices are? Have you engaged with your EM and PM to allocate more time to do more due diligence?</p>\n<p>Within your team, and as your role continues to evolve, your EM will gradually become more of a peer as they need to extend themselves: they will tap into your knowledge of the system and technical challenges to refine key investment areas, collaborate on strategy and execution, and define rough timeline estimates. This collaboration becomes even more critical during quarterly and annual planning.</p>\n<p>During this transition, continue to keep an eye out for where your teammates are struggling, the types of problems they are trying to solve, and the types of trade-offs made. All of these can be early indicators of areas that need improvements at a technical, strategic, and operational level.</p>\n<h3 id=\"organization\">Organization</h3>\n<p>Organizations are less explicit about their struggles. They don&#39;t ask for support, they don&#39;t state the problems everyone faces, and they don&#39;t make requests. As a result, it is more challenging to identify improvement areas. To gain visibility into these issues, one strategy is to be more involved with cross-team efforts, to set recurring 1:1 with other tech leads in other parts of the org. This will help get broader context and connect the dots of common organizational problems.</p>\n<p>If you’re not on a team that collaborates with external teams, engage with your EM and PM to create these opportunities. Cross-team partnerships could be about building public APIs where you will need to work with other experts in your company and multiple functions to get the right feedback. They could also be about internal product integrations. It&#39;s a perfect time to discuss the architecture that spans across multiple platforms and systems, and it&#39;s a great venue to learn from one another.</p>\n<p>Being recognized for having an impact on the organization takes time and you will need to make sure your work is visible to your leads (through 1:1s, hype doc, yearly performance review, or direct callouts from other teams in weekly updates). The more your work is visible and appreciated by other teams, the more you will get involved in cross-team collaborations which, eventually, demonstrates organizational work.</p>\n<p><strong>Questions to assess:</strong></p>\n<ul>\n<li>What are some of the challenges teams you are working with have faced during this project? Is there something we could do to make this better next time? Could a framework, new service, or cloud solution help? Could new processes help?</li>\n<li>What are some of the disagreements that have occurred within the team recently? How did you identify the differences in perspective? Did you help resolve the conflict? What are some of the things you or your team will do differently next time?</li>\n<li>Are there gaps in your software that will block future integrations? Are your team APIs explicit and simple enough? Are they returning good error messages? Are they following Square API recommendations?</li>\n<li>What are some of the issues your organization is constantly facing? For instance, when migrating to the cloud, are all teams well-supported? Do they have the keys and support to start this process? If not, what are some of the missing pieces you could help with?</li>\n</ul>\n<h2 id=\"technical-execution\">Technical Execution</h2>\n<p>As a team leader, teammates recognize you as a technical lead (not to be confused with your manager). The projects you are directly responsible for are often complex, involve multiple engineers, and tackle some critical challenges (such as scalability and interoperability). In this role, you collaborate with EMs and PMs to help refine feature requirements and ask for resources when appropriate. When you are not directly involved in specific projects, you are participating in other initiatives through regular design reviews and early whiteboard sessions.</p>\n<p>As your expertise and visibility grows, other technical leads within your organization will reach out whenever they need guidance or support. The transition happens slowly across multiple dimensions: depth and breadth of knowledge (not always technical), demonstrating the ability to think long term and take principled risks, and helping your team execute on a shared vision by leveraging multiple initiatives to reach set goals.</p>\n<h3 id=\"project-management\">Project Management</h3>\n<p>As you progress to an organizational leader, you will continue to be directly responsible for projects of different scope, but the more complex they are, the more you will have to defer. In practical words, this means you won&#39;t be responsible for handling all the design docs, but you will have to provide direction and to mentor peers to write them. You will need to lead meetings that span across multiple disciplines and teams. You can think about this as growing into a role where you guide the tone and overall structure and others might execute on specific parts of the plan while you continuously provide support and ensure delivery.</p>\n<p>Another area that will change slowly: it becomes your responsibility to work with your PMs and EMs to guarantee the product development processes are setting the team up for success. For instance, if you are having issues tracking who is working on what: did you try setting project standups? What have been some of the takeaways? Is this something your team should adopt for all initiatives? Drive these with a growth mindset: identify the problem, try a potential solution, learn, adjust; continuously monitoring and assessing changes based on pre-established goals can help refine these processes.</p>\n<h2 id=\"expertise\">Expertise</h2>\n<h3 id=\"technical-depth\">Technical Depth</h3>\n<p>We all know that building expertise takes a significant amount of time. It can be about a given technology/framework (e.g. databases, frameworks, iOS, Android or hardware), but it can also be about architecture principles (SOA) or best practices (RPC, REST). As you develop more technical depth, you will be recognized within your team as the go-to-person for improving technical solutions, troubleshooting issues, collaborating with other engineers on adding features, and sharing knowledge.</p>\n<p>As you become more experienced, it&#39;s necessary to take additional steps along the way to guarantee your knowledge gets diffused across your team and your organization. Many venues are great channels to communicate and share knowledge: presentations, workshops, mentorships, write-ups of guides and readmes.</p>\n<p>Another dimension to building technical depth is to observe where others are struggling. It&#39;s an opportunity to provide abstractions, to create new frameworks, or invent new patterns. While some of these improvements could be small, keep in mind that some might be significantly larger and will require working closely with your EM to get these initiatives staffed and prioritized.</p>\n<p><strong>Questions to assess:</strong></p>\n<ul>\n<li>Are others in my team knowledgeable about the technologies we are using?</li>\n<li>Are your frameworks enabling you to build robust solutions on top of a given technology? What are some of the key missing elements?</li>\n<li>Do other engineers in your organization know how your system works? Are there elements we could share with them?</li>\n</ul>\n<h3 id=\"technical-breadth\">Technical Breadth</h3>\n<p>By working on multiple projects, you will gain technical breadth. Your exposure to several parts of the system (e.g. jobs, feeds, webhooks, APIs) will help you understand how it works and how consumers use it. An analogy to technical breadth is often the big picture. It means you might not know each part of the solution in detail, but you will know enough to facilitate projects and architectural discussions.</p>\n<p>Contributing to defining the big picture doesn&#39;t come overnight. It is a sustained effort to understand the foundational principles of your codebases and upcoming projects, future needs, and how they all fit together. Taking a principled approach here ensures that current projects in the roadmap fit within the long term vision.</p>\n<p>With breadth comes a focus on collaboration and leadership. As you grow in the role, you provide technical insights other leads might not know or might have overlooked (e.g. a simple change in a given system might require a full overhaul), and, when observing problems that would require engineering support, you work with your manager on how to help staff these initiatives, taking into account your peers’ strengths and area of interests.</p>\n<p><strong>Questions to assess:</strong></p>\n<ul>\n<li>Does the product requirements document outline only the immediate needs? Are future use-cases considered? How expensive will it be to adapt to future use-cases that aren’t quite known right now?</li>\n<li>If we build this system now, will we have to rewrite it soon after? Is this an MVP that we can easily deprecate? Or will the path to deprecation be long and slow?</li>\n<li>For the current application architecture, are there areas that require more investment than others for the team to continue to operate?</li>\n<li>Are the tools currently in place enough to provide a good understanding for the different user flows and how they are currently performing? For instance, finding the latency of when a payment is completed to when data is available to 3rd party developers via webhooks.</li>\n</ul>\n<h3 id=\"long-term-approach\">Long-Term Approach</h3>\n<p>The most challenging requirement of becoming an organizational leader is to take and demonstrate a principled long-term approach so that future maintainers are able to contribute effectively to your team&#39;s codebase, and add new features.</p>\n<p>For instance, when working on a new initiative: do the components of the system you are building have a clear and distinct responsibility? Are you discussing current and future use-cases, to navigate the balance between extensibility, maintainability, and simplicity? Have you assessed the different tradeoffs by seeking divergent opinions and perspectives?</p>\n<p>This long-term thinking also applies to legacy codebases. It&#39;s often a good exercise to identify the existing problems of a codebase, assess what the risk is if your team doesn&#39;t invest in resolving these issues, and come up with strategies on how to tackle them. While this fits slightly more into a team lead role, an organizational leader will apply similar principles with a larger scope and/or higher level view (e.g. across multiple services or multiple mobile platforms).</p>\n<p>For instance, are endpoints across multiple services providing enough information in case of errors? Are your error patterns standardized? How to create a standard and diffuse it across the organization (and company)?</p>\n<p>Thinking about the long-term is not just about software; it&#39;s also about customer experiences (products, APIs, libraries, frameworks, hardware, etc). As a senior engineer, you are a partner to your leads, and you should assess requirements, ask questions, raise concerns, and collaborate to refine them so it’s easier for junior engineers to build the right abstractions.</p>\n<p><strong>Questions to assess:</strong></p>\n<ul>\n<li>Did we think about how this new feature will impact your entire codebase? For instance, adding a new attribute on a Customer profile and adding a new endpoint to manipulate only this attribute, is this the right platform approach? Could this conflict with other endpoints?</li>\n<li>When someone asks how to do something that seems a bit surprising, do you ask more questions to understand why they&#39;re trying to do this? If it&#39;s because an EM / PM / other person said so (i.e. they didn&#39;t stop to really ask why / think for themselves), can you help them have that conversation or raise awareness?</li>\n<li>Does this belong to the operating principles of your codebase? For instance, if the codebase is scoped per user, does it make sense to add support for non-merchant scoped data? If so, how do we achieve this so it works across the board?</li>\n<li>Does this solution solve future use-cases? For instance, if adding support for lookups by emails using a Global Secondary Index in DynamoDB, can we guarantee uniqueness of emails and if not, what other patterns could help us achieve this?</li>\n</ul>\n<h2 id=\"ownership-and-strategy\">Ownership and Strategy</h2>\n<p>As a team leader, your role is about guaranteeing your projects are successful. It means managing timelines, expectations, assessing risk, collaborating with engineers to uncover blockers and unknowns, and ensuring your initiatives are on track.</p>\n<p>As an organizational leader, while you will still be owning complex projects, you will have to step up and contribute more to the technical and engineering strategy. Engineering strategy is about defining how the organization will meet its objectives, as well as defining new ones. You get to contribute beyond the technical implementation and work directly with other leads to shape the team&#39;s structure, help establish a project prioritization strategy, and collaborate on a long-term vision.</p>\n<p>In your current role, you&#39;re likely doing some of this without necessarily knowing it. For instance, you are contributing indirectly to the technical strategy when your EM mentions a future project and asks you to provide rough estimates and risk assessment; and, through exploration, to issue a recommendation on one of the identified solutions.</p>\n<h3 id=\"technical-strategy\">Technical Strategy</h3>\n<p>As you gain more experience, you can start having a small impact on the strategy by escalating to your manager and your peers opportunities and unsolved challenges. They might be related to making the software more scalable, more available, and more extensible. As you do so, a simple framework to follow is to always include risk: if the team doesn&#39;t start working on this opportunity within the next 12-24 months, what would be the short and long-term risk?</p>\n<p>As time passes, you will find yourself doing more and more of these. Sometimes, it will require writing a document to explain what you have in mind, why you believe it&#39;s essential, and what kind of benefits this would add to the team, organization, or company. Your manager might ask you to contribute directly to the team&#39;s yearly roadmap and annual planning, which is a great exercise to do as it helps you appreciate how projects fit within the overall company goals and strategy.</p>\n<p><strong>Below are additional questions to consider:</strong></p>\n<ul>\n<li>Do you know when your services will scale out (for instance, exceed storage capacity)? When should the team address it?</li>\n<li>Sometimes, it&#39;s about the state of software development: if it takes four weeks to add a new feature instead of the planned 1 week, what did we miss in the task break-down?</li>\n<li>Are there parts of the software that need refactoring? What can be changed in the process to provide better estimates?</li>\n</ul>\n<h3 id=\"engineering-strategy\">Engineering Strategy</h3>\n<p>While your primary focus might be more related to the technical aspect, you may start thinking about engineering strategy and act as a collaborator in helping shape the processes and the structure of your team and organization.</p>\n<p>For instance, if work often waits days for reviews, what can you do to make things better? Is the code review process working well? If your team has grown from 2 to 10 engineers, and it takes 45 minutes to do a daily standup, should the process be adjusted (e.g. only to include DRIs or do a slackup)? If the team is migrating the different codebases to the cloud, what would be the ideal way to achieve this while minimizing roadmap disruption?</p>\n<p>While the above examples are mostly practical (how to make the processes more effective), other parts of the engineering strategy are more tactical. For instance, if your team requires a general tokenization service, but nobody is building one, what are the available options? Another scenario is a reorg: your input might be solicited to help identify potential team structures that are technically well-balanced and provide room for engineers to grow.</p>\n<p>If you’re not sure how to get started here, be curious and start asking questions to your manager and PMs. They can be about the project prioritization for this year, about understanding the rationale behind a process change. Having these conversations will help you understand the why behind these decisions and how they landed on this particular outcome.</p>\n<h2 id=\"leadership-and-collaboration\">Leadership and Collaboration</h2>\n<p>As a team leader, you have demonstrated the ability to cross teams and service boundaries to solve complex problems and ensure on-time delivery. You’ve continuously shared knowledge with peers, and you’ve provided support to your leads on defining the strategic direction. As you move towards being an organizational leader, it becomes your responsibility to ensure roadmap execution and find opportunities to improve the team or organization through collaboration and leadership.</p>\n<p>As a collaborator, you need to support your peers in delivering features and products to customers. In practical terms, it means guiding them through the exploration of multiple design solutions, helping sequence the work (from a prioritization standpoint to breaking down tasks), and proactively seeking feedback from others to guarantee proper vetting, sometimes by being inclusive of multiple functions (design, PMM, analysts).</p>\n<p>For projects that span across multiple teams, organizations, and disciplines, disagreements can happen. You will have to help navigate the differences of opinions, guarantee the thorough documentation of alternative solutions, and find ways to reach consensus. These interactions provide an opportunity to outline your leadership abilities and be done either directly (you participate in the write up of SPADEs) or by mentoring/coaching peers on how to handle these situations.</p>\n<p>Through these collaborations, you will have opportunities to identify gaps in your products, un-owned technical work, and future challenges. Depending on the impact, these can be critical for the organization. For instance, if working on a project that introduces user reporting to your existing application, did you ask whether or not your current architecture can handle this workload? If not, what can? If you find a better solution, what can you do to make it more broadly available for the entire organization and company? It will become your responsibility to escalate this to your leads, assess and negotiate what can be done now versus later, and establish a path forward.</p>\n<p>These interactions will showcase your leadership and collaborative skills and how to impact the organization.</p>\n<p><strong>Questions to assess:</strong></p>\n<ul>\n<li>When disagreement occurs, do you contribute to the write-up of SPADEs and facilitate the decision-making process?</li>\n<li>Do you escalate to your manager to refine the process and try new things when the current approach doesn’t seem to lead to a resolution?</li>\n<li>Are you able to mentor, throughout these exercises, other engineers to understand how to address concerns and reach consensus?</li>\n</ul>\n<h2 id=\"team-building\">Team Building</h2>\n<p>As an individual contributor, team building fits into two main sections: contributing to your organization’s growth and thoughtful hiring.</p>\n<h3 id=\"organizational-growth\">Organizational Growth</h3>\n<p>As mentioned in other sections, you are responsible for your organization&#39;s long term success. One way to achieve this is to guarantee others around you learn, grow, and develop critical skills, and foster inclusivity. Another way is to help your manager refine the team structure (boundaries, charters, codebase ownership), navigate the hurdles around project prioritization and market needs, and provide cross-team support.</p>\n<p>One essential element to remember here is to be inclusive: continuously engage with everyone around you, help identify their struggles and opportunities for them to grow, and involve them as you seek solutions. Your time and attention are some of the highest leverages the team has to develop future leaders. Ensure you are investing in a diverse leadership pipeline in order to amplify the team’s growth and capabilities over the long term.</p>\n<h3 id=\"hiring-talent\">Hiring Talent</h3>\n<p>As your organization continues to grow, you will end up playing a crucial role in the hiring effort by sourcing, interviewing diverse candidates, and providing thoughtful feedback. The next steps are about identifying in your team and organization the unfilled gaps (whom should we hire next, which skill sets do we need), and contributing to selling/closing efforts.</p>\n<p>Identifying skill gaps can be done by observing unsolved challenges. Organizations have similar needs; for instance: if multiple EMs are struggling to find reviewers for their public API design docs, this might necessitate talking with your skip-level and prioritizing the hiring of a REST expert. You can contribute by being an active networker, interviewer, or member of a working group focused on level definition.</p>\n<h2 id=\"conclusion\">Conclusion</h2>\n<p>At the end of the day, everyone’s journey is unique and what’s important is to grow at your own pace, to understand in depth what the role means and find a path that makes sense to you and what you are trying to achieve – both from a career perspective but also from what you feel the most passionate about. We hope this advice can help you progress in your career at Square, or elsewhere.</p>\n<p><em>Thanks to Ben VandenBos, Enrique Patino-Daly, Krishnan Seshadrinathan, Lacey Lobenstein, Lindsay Verola, Mackenzie Ritter, Michele Titolo, Michelle Ngo, Mike Humaydan, Pierre-Yves Ricau, Richard Moot, Toby Reyelts, and Tom Carden for their collaboration throughout the writing of this document.</em></p>\n",
      "date_published": "2021-07-13T12:00:00.000Z",
      "tags": [
        "Leadership",
        "Career",
        "Engineering"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/concours-des-gobelins-l-ecole-de-l-image",
      "url": "https://www.silent-strength.com/articles/concours-des-gobelins-l-ecole-de-l-image",
      "title": "Concours des Gobelins, l’Ecole de l’Image",
      "summary": "Conseils et réflexions sur le processus de candidature et les entretiens d'admission pour la formation multimédia de la prestigieuse école de l'image Les Gobelins à Paris.",
      "content_html": "<p>L’évolution des réseaux sociaux est assez effrayante: les futurs étudiants aux Gobelins vous envoient des messages pour vous demander conseils sur la démarche à avoir lorsque vous passez un entretien pour une formation multimedia.</p>\n<p>De façon globale, la première chose à avoir avant même de franchir la porte: croire en soi.</p>\n<h2 id=\"pr-requis\">Pré-requis</h2>\n<p>A partir du moment où votre dossier a été accepté (certaines formations ont un concours écrit), vous allez être conviés à un entretien dans les locaux de l’école.</p>\n<h3 id=\"dossier-de-ralisations\">Dossier de réalisations</h3>\n<p>Il faut impérativement avoir avec vous un dossier disponible sur papier voire sur ordinateur sans pour autant avoir besoin d’Internet.</p>\n<p>Comme toutes écoles, certains sites ne sont pas accessibles depuis le réseau disponible, et naviguer sur la toile peut être lent. Avoir une version de votre travail et réalisations sur votre ordinateur ou imprimé va vous sauver du temps.</p>\n<p>Toujours au niveau du dossier, n’oubliez pas que vous êtes limités dans le temps. Montrez de préférence des thématiques proches de celles demandées dans la formation que vous souhaitez suivre. Sélectionnez également des réalisations qui montrent votre curiosité et envie d’apprendre.</p>\n<h3 id=\"tenue\">Tenue</h3>\n<p>Vous allez entrer dans une école créative. Cela ne veut pas dire la débauche. Le Jury est composé de plusieurs personnes dont souvent les chargés de formation. Soyez donc un minimum professionnel tout en étant créatif. Le costard cravate n’est pas nécessaire.</p>\n<h3 id=\"zen\">Zen</h3>\n<p>Un pré-requis indispensable pour tous les entretiens: allez-y confiant. Vous avez été sélectionné, vous avez donc encore toutes vos chances. Croyez dans vos réalisations, croyez dans vos compétences et tout se passera bien.</p>\n<h2 id=\"questions\">Questions</h2>\n<p>Suivant le profil du candidat, les questions sont assez différentes. La majorité est faite pour vous connaître, pour découvrir vos réalisation et pour comprendre en quoi vous avez besoin de la formation pour votre avenir.</p>\n<h3 id=\"qui-tes-vous\">Qui êtes-vous ?</h3>\n<p>Il faut être concis, dire exactement quel parcours vous avez suivi, les éventuelles entreprises dans lesquelles vous avez travaillé, si vous avez déjà fait de l’alternance ou non. N’hésitez pas à montrer par la même occasion des éléments de votre portfolio pour justifier vos expériences (amateurs comme professionnelles). Si vous avez eu une vie assez atypique (originaire d’un autre pays par exemple, n’hésitez pas à le mettre en avant).</p>\n<p>La question “Qui êtes-vous?” donne aussi une image de vous-même. Si vous avez un fort caractère, si vous êtes plutôt réservé, si vous avez une force de proposition ou si au contraire vous êtes plutôt timide et introverti. Là il n’y a pas de secret, il vaut mieux être soi-même.</p>\n<h3 id=\"quavez-vous-fait\">Qu’avez-vous fait ?</h3>\n<p>Dans cette partie, il faut présenter votre portfolio. Ne pas hésiter à justifier la cohérence de vos travaux, de décrire le contexte de réalisation, éventuellement la durée et la pérennité de vos projets. A quoi servent-ils une fois terminés? Où ont-ils été exposés?</p>\n<p>Etant donné que vous allez rentrer dans une formation qui demande du travail d’équipe, il faut aussi mettre en avant les projets de groupes même s’ils sont “moches” ou qu’ils ne vous “plaisent pas”. Ils montrent que vous avez des capacités à travailler en équipe. Elles sont indispensables durant votre cursus.</p>\n<h3 id=\"en-quoi-votre-profil-rejoint-la-formation\">En quoi votre profil rejoint la formation ?</h3>\n<p>Comprendre les motivations de votre choix est une étape essentielle lors d’un recrutement de profil. Si pour vous, c’est normal: vous allez profiter de la prestance des Gobelins sur un CV, pour l’intervenant ou le responsable qui se trouve en face de vous, il va falloir trouver plus d’arguments.</p>\n<p>C’est à ce moment qu’il faut rappeler sans hésitations les projets qui ont été présentés, de dire que c’est dans la suite logique de votre cursus que votre formation s’inscrit.</p>\n<p>Vous pouvez ici aussi justifier que la formation est en alternance et qu’elle pourra vous permettre d’avoir une expérience professionnelle sur votre CV.</p>\n<h3 id=\"que-savez-vous-de-la-formation\">Que savez-vous de la formation ?</h3>\n<p>Normalement si vous avez parfaitement réussi à répondre aux questions concernant votre profil et votre expérience, ils vont essayer de vérifier que vous connaissez la formation. C’est-à-dire que vous êtes théoriquement déjà venus aux portes ouvertes, vous avez déjà regardé les travaux d’anciens élèves. Si ce n’est pas le cas, consultez la galerie.</p>\n<p>Durant l’entretien, on m’a posé la question “que veut dire l’acronyme CRMA”. Et bêtement, je ne me souvenais plus du A (Apprentissage …) ce qui ne donne pas forcement une bonne impression.</p>\n<h2 id=\"cest-fini\">C’est fini ?</h2>\n<p>Non pas vraiment. Une fois que vous êtes acceptés dans l’école, une épreuve supplémentaire arrivera ensuite pour les formations en alternance: les entretiens pour trouver des entreprises.</p>\n<p>N’hésitez pas à consulter les articles sur <a href=\"http://silent-strength.com/carnet/270-Reussir-son-CV\">comment faire un cv</a>, <a href=\"http://silent-strength.com/carnet/279-Email-et-identite-professionnelle\">email et identité professionnelle</a> et <a href=\"http://silent-strength.com/carnet/401-Utiliser-les-Reseaux-Professionnels\">utiliser les réseaux professionnels</a> pour avoir des débuts d’informations.</p>\n<p>Votre visibilité est importante. N’hésitez pas à rejoindre des annuaires d’artistes, comme <a href=\"http://www.fllio.com/?from=medium\">Fllio</a>, pour commencer à créer votre nom dans la communauté locale.</p>\n<p><em>Looking for <em><a href=\"https://www.creativelist.io/search?q=UI%20Designer\"><em>UI designers</em></a></em>, <em><a href=\"https://www.creativelist.io/search?q=Copy%20Writer\"><em>copywriters</em></a></em>, <em><a href=\"https://www.creativelist.io/search?l=New%20York%20City%2C%20United%20States&q=Photographer\"><em>photographers</em></a></em>? Check out <em><a href=\"https://www.creativelist.io\"><em><strong>CreativeList</strong></em></a></em>, a platform fully dedicated to help you find the creative talent you need. Are you a creative yourself? <em><a href=\"https://www.creativelist.io/join\"><em>Join us</em></a></em>. Have a job for creatives? <em><a href=\"https://www.creativelist.io/jobs/create\"><em>List it</em></a></em>.</em></p>\n<p><img src=\"https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e94f6933d4d8\" alt=\"\"></p>\n",
      "date_published": "2015-06-27T20:41:06.000Z",
      "tags": [
        "Etudes",
        "Design"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/a-look-behind-garcon",
      "url": "https://www.silent-strength.com/articles/a-look-behind-garcon",
      "title": "A look behind Garcon",
      "summary": "An overview of Garcon, a lightweight Python library designed to simplify and reduce the complexity of writing distributed background jobs with Amazon Simple Workflow (SWF).",
      "content_html": "<h3 id=\"introducing-a-lightweight-library-for-aws-swf\">Introducing a lightweight library for AWS SWF.</h3>\n<p>We’ve recently open-sourced <a href=\"http://github.com/xethorn/garcon/\">Garcon</a>, a lightweight library that helps reduce the lengthy task of writing jobs with Amazon Simple Workflow to a few minutes. The library is available in Python 2.7 and 3.4. In this article, we give you a look behind Garcon.</p>\n<h2 id=\"amazon-swf\">Amazon SWF</h2>\n<p>Amazon Simple WorkFlow Service (SWF) makes it easy to build applications that coordinate units of work across distributed components. The service is based on the notion of <em>workflow</em>, which is a set of coordinated <em>activities</em> that carry out an objective.</p>\n<p>For instance, <em>booking an online ticket</em> requires: creating an invoice, checking availability and reserving the seat, verifying user information and processing payment; when all of them are successful, sending out a confirmation email to the user and marking the invoice as paid. Some activities can be run in parallel if needed (sending email, updating invoice state.)</p>\n<p>SWF works with <em>tasks</em> (small logical units of work), <em>activities</em> (runs specific list of tasks to perform), <em>deciders</em> (manage and orchestrate activities) and <em>executions</em> (start a workflow.) Except for start and completion of a workflow, each activity has a well-defined predecessor and successor.</p>\n<p>Workflow executions always happen within a domain, which defines its scope and restrains the activity tasks it can run. For each domain, the SWF management console provides the history of all executions (active and closed), which includes the list of events and activities launched.</p>\n<p>Entirely distributed and stateless, activities and tasks can be written in any language and distributed across many systems (on AWS and/or on premise). Parts of your workflow can be written in Java, while some others can be in go or Python, which allows you to use the language that performs best for a specific task. For a given workflow, you can also have as many activity workers and deciders as you need.</p>\n<p>To use Amazon SWF, you can use any SDKs (provide high level access to SWF), and for Java/Ruby developers, Flow framework.</p>\n<h2 id=\"workflows\"><strong>Workflows</strong></h2>\n<p>Building workflows using <a href=\"https://github.com/boto/boto\">boto</a> (AWS Python SDK)* *directly can take some time. You have at least 2 main components to create: one or more activities and a decider. Both are workers which continuously poll information from SWF.</p>\n<h3 id=\"the-activity\"><em>The activity</em></h3>\n<p>It executes a list of tasks which are small discrete logical units (going back to our earlier example of <em>booking a plane ticket</em>: an activity can process two tasks such as verifying user information and processing the payment.)</p>\n<p>The activity marks itself as completed or failed. If an activity takes longer to execute it can send a heartbeat to SWF to avoid timing out. Activities can take an input and return a value which will be recorded as the activity response.</p>\n<h3 id=\"the-decider\"><em>The decider</em></h3>\n<p>It schedules the different activities. If written manually, you need to find the next activities to execute which involves reading the execution event list (as shown in the example). If you add more features such as the ability to retry on activity failure, and/or running activities in parallel, your code gets quickly more complex.</p>\n<p>The decider can send additional information to the activity (as an input), and it can retrieve the response of each activity regardless of success or failure.</p>\n<h3 id=\"stepping-back\"><em>Stepping back</em></h3>\n<p>That’s how we’ve started to build Garcon, building a system that facilitates communication between the different components and taking in consideration the high-level requirements:</p>\n<ul>\n<li>Activities within a workflow can depend on other activities to be completed.</li>\n<li>Activities can require data as an input and can return a result.</li>\n<li>Tasks should be discrete, reusable components.</li>\n</ul>\n<h2 id=\"code-sample\">Code Sample</h2>\n<p>Before going onto the details, let’s take a quick look at Garcon’s implementation of Serial Activity Execution:</p>\n<p><a href=\"https://medium.com/media/87e719bbf8697f5318486b5427e36ad1/href\">https://medium.com/media/87e719bbf8697f5318486b5427e36ad1/href</a></p>\n<p>By way of comparison, check out the equivalent <a href=\"https://gist.github.com/xethorn/62695a072bb4f15726fd\">implementation</a> using only boto.</p>\n<blockquote>\n<p>***Notes: ***<em>Executing this code shows that the activity “<em>a_tasks</em>” returns a dictionary which hydrates the execution context. When the activity “<em>b_tasks</em>” is executed, the context passed for its execution contains the key/value previously passed as an output.</em></p>\n</blockquote>\n<p>More examples (including runners) are <a href=\"https://github.com/xethorn/garcon/tree/master/example\">available online</a>.</p>\n<h2 id=\"execution-context\"><strong>Execution context</strong></h2>\n<p>In Garcon, each execution has an execution context.</p>\n<p>The execution context is created at the initialization of the workflow, and is progressively hydrated by the response of each activity. When the decider is ready to schedule a new activity, it looks in the event history, gets all the activity responses, merges them into one and schedule the activity with the appropriate context (if you know SWF, we use the <em>input</em> field.)</p>\n<blockquote>\n<p><em><strong>Note</strong></em><em>: If you use <em>task.decorate</em> (see below) along with the <em>.fill</em> method, the decider will pluck all the information needed from the context and only send those to the activity. If you don’t: the full context is sent to the activity. Remember: SWF has a limit on input / result of 32k characters.</em></p>\n</blockquote>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-keyword\">from</span> garcon <span class=\"hljs-keyword\">import</span> activity\n<span class=\"hljs-keyword\">from</span> garcon <span class=\"hljs-keyword\">import</span> runner\n\n\ndomain = &amp;<span class=\"hljs-comment\">#39;dev&amp;#39;</span>\nname = &amp;<span class=\"hljs-comment\">#39;boto_tutorial&amp;#39;</span>\ncreate = activity.create(domain, name)\n\na_tasks = create(\n    name=&amp;<span class=\"hljs-comment\">#39;a_tasks&amp;#39;,</span>\n    run=runner.Sync(\n        <span class=\"hljs-keyword\">lambda</span> context, activity: <span class=\"hljs-built_in\">dict</span>(result=&amp;<span class=\"hljs-comment\">#39;Now don’t be givin him sambuca!&amp;#39;))</span>\n\nb_tasks = create(\n    name=&amp;<span class=\"hljs-comment\">#39;b_tasks&amp;#39;,</span>\n    requires=[a_tasks],\n    run=runner.Sync(\n        <span class=\"hljs-keyword\">lambda</span> context, activity: <span class=\"hljs-built_in\">print</span>(context)))\n\nc_tasks = create(\n    name=&amp;<span class=\"hljs-comment\">#39;c_tasks&amp;#39;,</span>\n    requires=[b_tasks],\n    run=runner.Sync(\n        <span class=\"hljs-keyword\">lambda</span> context, activity: <span class=\"hljs-built_in\">print</span>(context)))\n</code></pre>\n<p>Will be executed as follows:</p>\n<p><img src=\"https://cdn-images-1.medium.com/max/813/1*Eo34twD7Nh3fk3dfBUWBIg.gif\" alt=\"\"></p>\n<p><em>This graph illustrates information sent to activities and returned by activities. The decider is not represented here (to keep this illustration easy to understand.)</em></p>\n<p>All values sent and returned from the activities can be tracked directly in the SWF console. Each activity call displays an <em>input</em> field and a <em>result</em> field.</p>\n<p><img src=\"https://cdn-images-1.medium.com/max/1024/1*ozCCvlkiQvagjhypw1splQ.png\" alt=\"\"></p>\n<p><em>Run of an execution.</em></p>\n<h2 id=\"task-runners\">Task Runners</h2>\n<p>Garcon provides two task runners:</p>\n<ul>\n<li><em>Sync</em>: all tasks are launched in series. The task’s response hydrates the local context, which is then passed to the next task. The last task defines the response of the activity.</li>\n<li><em>Async</em>: each task will be ran asynchronously, each consumes the activity context . Each task response will be combined, and they define the response activity.</li>\n</ul>\n<p>In this system, collisions can easily happen: so it’s always good to namespace your responses as much as possible. Other point: always avoid returning the entire execution context in an activity’s response.</p>\n<h2 id=\"handling-failures\"><strong>Handling failures</strong></h2>\n<p>In a distributed architecture activities might fail for various reasons (network, resource timing out, etc) and cause failures. If this is the case, you may benefit from the retry param.</p>\n<p>This flag will look in the event history for activity failures and, until the count has been reached, the activity will keep trying to execute. One of our examples has <a href=\"https://github.com/xethorn/garcon/blob/master/example/test_flow.py\">random failures</a>, so your activity creation will look similar to this:</p>\n<p><a href=\"https://medium.com/media/b6da10be4fec34f310823584f36a8947/href\">https://medium.com/media/b6da10be4fec34f310823584f36a8947/href</a></p>\n<h2 id=\"activity-generators\">Activity Generators</h2>\n<p>Generators spawn one or more instances of an activity based on values provided in the context.</p>\n<p>One of our use case includes a job that calls an API each day to get metrics for all the countries in the world. If the API fails for one country, the entire activity fails — retrying it means we will have to restart the entire list of countries.</p>\n<p>Instead of having one activity to do all calls, it’s a lot more robust to have one activity per country and have a retry mechanism applied to it. Failures will only be contained for one country that has failed instead of all.</p>\n<p><a href=\"https://medium.com/media/a141b18dcfdcfa79fb9ab4d503055139/href\">https://medium.com/media/a141b18dcfdcfa79fb9ab4d503055139/href</a></p>\n<p>Example output:</p>\n<pre><code class=\"hljs language-python\">activity_1activity_2_country_id_1 has succeededactivity_2_country_id_2 has succeededactivity_2_country_id_4 has succeeded**activity_2_country_id_3 has failed**activity_2_country_id_5 has succeeded**activity_2_country_id_3 has succeeded**end of flow\n</code></pre>\n<p><strong>Note:</strong> *generators *takes a list of generators. If you have a flow that has a date range, list of countries, you can create activities that corresponds to one day and one specific countries. If you have 10 days in your range and 20 countries, you will run 200 activities.</p>\n<h2 id=\"workflow-registration\"><strong>Workflow registration</strong></h2>\n<p>One of the requirements to execute a workflow is the registration of the domain, workflow type and activity types. In order to make this part easier, when you launch the decider, all required information will be pre-filled so the execution can begin right away.</p>\n<h2 id=\"feedback-contributions\"><strong>Feedback / Contributions</strong></h2>\n<p>Garcon is at a very early stage.</p>\n<p>We’re currently using it for a few lightweight production processes (such as pulling data from Redshift, computing it and putting it into Dynamodb.)</p>\n<p>If you have feedback, questions, or simply want to contribute, we’d love to hear from you.</p>\n<p><em>Michael</em>Currently listening* *<em>Breaking Your Locks</em>, <em>Myback</em></p>\n<p><img src=\"https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8943fb0aa927\" alt=\"\"></p>\n",
      "date_published": "2015-03-05T20:44:25.000Z",
      "tags": [
        "Python",
        "AWS",
        "Tech"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/be-fearless",
      "url": "https://www.silent-strength.com/articles/be-fearless",
      "title": "Be fearless",
      "summary": "Un conseil simple destiné à la nouvelle génération de designers et de développeurs : surmonter l'appréhension du changement, oser prendre des risques et aborder chaque opportunité professionnelle avec audace.",
      "content_html": "<p><img src=\"https://miro.medium.com/v2/resize:fit:1200/1*pGoOSuay_CPRMQlTtkoc6A.jpeg\" alt=\"Be fearless\"></p>\n<p>Durant une interview avec TechMeUp, il m’a été demandé de donner un conseil pour la nouvelle génération. Ma réponse était courte et simple: “<em>be fearless</em>”. </p>\n<p>Depuis notre naissance, nous subissons des défis au quotidien, certains plus ou moins difficiles que d’autres. Ils apparaissent sous différentes formes et changent notre personnalité ainsi que la perception du monde qui nous entoure.</p>\n<p>La première chose que l’on apprend brutalement: la vie est courte, elle n’est de durée que très limitée et notre temps est compté dès notre naissance. Cette leçon m’a été apprise jeune, avec la mort de mon arrière-grand-mère qui de son vivant m’avait fait découvrir beaucoup de choses, comme l’amour des trains, la gastronomie française et la littérature. Sa mort a créé un sentiment de vide, un manque constant et l’absence d’autrui.</p>\n<p>Pourtant, le temps continue son chemin, il n’efface pas les difficultés, ni les douleurs, mais nous force à avancer et grandir.</p>\n<p>Puis progressivement, la culture dans laquelle nous évoluons nous éduque, et nous impose des limites ainsi que des contraintes. Les conventions nous obligent à être conformistes. Ces notions changent bien évidemment avec le temps, elles se réinventent mais existent toujours sur une certaine forme.</p>\n<p>J’ai appris cette leçon en ayant des difficultés à m’intégrer avec les autres élèves de la classe. Ils m’appelaient assez fréquemment le “sans amis”, ce qui n’était en soit pas loin de la vérité. Ma façon d’interagir était très différente de la normale, ainsi que ma façon de penser. Vu de loin, il s’agissait d’un défi supplémentaire: m’adapter pour rentrer dans la norme, ou trouver d’autres sources de divertissement.</p>\n<p>Comme toutes époques, les enfants dans ma situation trouvent des “mondes annexes” dans lesquelles ils peuvent se réfugier, comme l’univers des livres. C’est dans l’informatique que j’ai trouvé une opportunité. Il s’agissait d’un espace d’expression, qui, dans la fin des années 90, suscitait encore l’angoisse et l’anxiété auprès des adultes, surtout sur les notions d’identité (l’utilisation de son vrai nom par exemple). J’ai mis les préjugés de côté, probablement par ignorance, et je me suis lancé dans cette aventure — l’exploration d’un monde inconnu qui plus tard me permettra de m’épanouir pleinement dans l’univers professionnel.</p>\n<p>Pouvoir défier par soi-même ce que la société pense et impose permet de juger par soi-même. Il ne s’agit pas d’un livre ou d’une chaîne télévisée qui vous explique tout de A à Z, c’est vous qui, par expérience, forgez votre propre opinion.</p>\n<p>La peur de deux choses principales: ses propres limites, et bien évidemment de l’inconnu. En grandissant, notre expérience personnelle définit notre zone de confort: un espace dans lequel les défis sont limités et les dangers réduits. Nous avons tous cet espace privé.</p>\n<p>Après avoir passé un peu moins de deux ans sur Paris, ma routine était ancrée. Croissants le main, café avant d’aller en cours (ou en entreprise suivant la période), apéro le soir — je ne me voyais pas encore partir ailleurs du jour au lendemain .</p>\n<p>Et pourtant: en début 2009, je commençais à explorer l’idée de partir. Fin mars, j’avais un stage, un visa, et début juillet, j’étais dans l’avion direction la Floride. La peur de partir était évidemment présente. Les États-Unis sont loin de la famille, des amis, ainsi que des repères aussi bien culturels que personnels. Une vie est à reconstruire. Il s’agissait d’un choix que je voulais assumer.</p>\n<p>Chaque opportunité se présente avec un lot de difficultés et d’apprentissages. Une période dans laquelle il faut s’adapter, faire des erreurs, jusqu’au moment où un nouvel environnement est créé. Aller en Floride n’était au final pas une bonne décision. Au lieu de rentrer en France, j’ai tout simplement fait en sorte de continuer ma découverte. Quelques semaines plus tard, j’avais mon visa et un travail chez Yahoo!.</p>\n<p>Cette nouvelle opportunité commençait bien. L’entreprise m’hébergeait pour un mois dans un appartement de luxe en centre ville. Le rêve a vite changé lorsque mon manager m’a annoncé la délocalisation de l’équipe. En bon Français, la perte d’un job me paraissait à l’époque la fin du monde, l’idée de rentrer en France me terrorisait aussi.</p>\n<p>En moment de difficultés, il faut toujours pourtant trouver le courage de se relever. En persistant, j’ai trouvé un travail chez Google où je suis resté pendant 3 ans — avant de décider d’effectuer une transition chez Pinterest.</p>\n<p>Mon conseil pour les nouvelles générations?</p>\n<h3 id=\"be-fearless\">Be fearless.</h3>\n<p><a href=\"https://medium.com/french-startups-entrepreneurs/831c6477ec98\">Article publié sur Medium</a></p>\n",
      "date_published": "2014-04-19T12:51:08.000Z",
      "tags": [
        "Vie quotidienne"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/difference-between-french-and-us-companies",
      "url": "https://www.silent-strength.com/articles/difference-between-french-and-us-companies",
      "title": "Difference between French and US companies",
      "summary": "A comparison of corporate culture, communication styles, and workplace expectations between French and American companies, highlighting structural differences in decision-making and project management.",
      "content_html": "<p><img src=\"/upload/archives/2013/04/french-strike-retirement-2010.jpg\" alt=\"Strike\"></p>\n<p>Last friday, a journalist from Les Échos, a french newspaper, visited our office. During our casual conversation, a question came up: &quot;<em>What is the difference between French and American companies?</em>&quot; While this question appears very straightforward, there are many elements to consider.</p>\n<p>Everything is relative to your own experience and working environments you may have been exposed to, so whenever you generalize you tend to overlook the exceptions. Today, I qualify as &quot;software engineer&quot; which, in the big leagues, consists of building scalable and robust applications across platforms, environments and languages. I&#39;ve worked for three companies in Paris (Skyrock, Marathon Media, Mediaplazza) and four in the US (AgencyTen, Yahoo!, YouTube/Google and today Pinterest).</p>\n<p>Almost a year ago. during the inauguration of the Google office in Paris, Nicolas Sarkozy tentatively tried to reply to a similar question. He mentioned that Silicon Valley&#39;s success comes from extremely good weather and proximity with good universities (such as Stanford). While those facts are true, his answer wasn&#39;t really satisfying. </p>\n<p>The first difference between Paris and Silicon Valley? With no doubt: The free market. Talented engineers are really difficult to find, even worldwide, and there is an aggressive war between tech giants to acquire them. Companies as well as startups double their efforts to attract candidates: excellent product execution, friendly working environment, perks (free food, gym, swimming pool, transportation, discounts), good social benefits (great health care), and astonishing compensation packages along with good performance rewards.</p>\n<p>In France, there&#39;s absolutely no free market. The government imposes a lot of charges, reducing or totally blocking investments for the most part. In addition, HR departments have grids of salaries, taking into account your age, your academic degree and your school. So you could be a genius with no degree, but your compensation package would be less than someone good at school but capable of nothing. As an example: a French bank offered me a job in 2009 for a web developer position, the compensation (700€ monthly) was extremely below Paris median salary. Another thing: if you&#39;re a very high performer compared to your coworkers, you don&#39;t necessarly  get a reward for your hard work.</p>\n<p>The second difference: working laws. The American laws are very strict: you cannot discriminate a candidate based on their age, religion, social situation, ethnicity, gender and sexual orientation. Those rules make environment more friendly, more respectful with less conflicts of interest.</p>\n<p>Short example: at YouTube, I successfully managed for about nine months someone in her 40&#39;s (I was 24). In Paris in 2007, I conducted an interview for a university project. The interviewee made a joke: he wouldn&#39;t let someone younger manage him. In my career, I am surrounded by talented engineers and designers. Their capabilities and potential contributions to the company should only be the only thing that matters when making the call to hire, it shouldn&#39;t be a matter of age, gender, ethnicity or educational background. France has a lot of work to get done in this area.</p>\n<p>Another part of the law that&#39;s interesting: Unless you have a 6-12 months contract, most employment in the US is at will. The company can thus lay you off at any time for any reason – and you can also leave the company at any time for any reason. It initially was something I had doubts about it but it ends up being a good thing. In fact, even if a company can lay someone off, they rarely do. It&#39;s really difficult to find talent, and it takes a lot of time to train them and make them productive. So if you hire and lay off, it&#39;s not necessarily something you can afford. If your performance is low, big companies usually have programs to improve employees’ productivity and your focus.</p>\n<p>France is on the opposite side. Once you&#39;ve completed your probation period, it&#39;s a lot more difficult to lay someone off. Leaving has to come from an agreement between you and the company – which requires a lot more back and forth with HR and other departments (legal). The interaction could be very simple but some companies tend to make the process extremely hard. </p>\n<p>This painful situation never really happened to me since I had 12 months contracts but it happened to one of my friends – after expressing his intention to quit, the company required him to stay for more than six months in order to hire his replacement and transfer his knowledge. So the company he was supposed to work for had to wait.</p>\n<p>The third difference: Massive opportunities. American companies are really looking for people to contribute and be involved. If you feel passionate about a topic, you can focus on it. There&#39;s really a very open environment for feedback and assignment.</p>\n<p>With this perspective, I&#39;m really grateful to provide the technical leadership for two visual redesigns of YouTube. Those initiatives were successful because I was surrounded by highly skilled, genuine and smart co-workers. It was a collaborative and less hierarchical environment. We all worked toward the same goal, so it improved efficiency on all levels. </p>\n<p>Another example: I was able to build a multi-million dollar team within YouTube because people believed in my ideas and wanted to give it a try. It ended up being a successful experiment. In France, experimenting, building a team and hiring engineers is a lot more difficult due to the law. If the initiative fails, it&#39;s not easy to let them go. You also need to find people to believe in your initiatives – which is another story (in the French culture, the glass is half empty not half full.)</p>\n<p>While this is changing rapidly (thanks to internet?), French companies have a lot of protocols. Talking to the CEO of a small organization is as difficult as talking to the CEO of Google or even Eric Schmidt. You can&#39;t easily engage an open conversation.</p>\n<p>To conclude this (very long post): There are a lot more differences, but I believe they are all driven by these factors: Free market, working laws, protection against discrimination and absence of hierarchy. The American way allows people to really do what they love, to really not worry about a degree or a school, and if you want to do something, you can go ahead, take a risk, and try again until you succeed.</p>\n",
      "date_published": "2013-04-18T02:26:30.000Z",
      "tags": [
        "Vie quotidienne"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/hiring-talents",
      "url": "https://www.silent-strength.com/articles/hiring-talents",
      "title": "Hiring talents",
      "summary": "Reflections on the software engineering hiring process, focusing on how to evaluate candidates effectively during a 45-minute interview and match them with the right technical roles.",
      "content_html": "<p><img src=\"/upload/archives/2013/02/office-space8.jpeg\" alt=\"Office space\"></p>\n<p>At Google, I&#39;ve interviewed a lot of candidates. A normal interview lasts about 45 minutes. During this timeframe, you have to determine whether the candidate is qualified for the job or not. And if not, eventually suggest where he/she can be a better fit.</p>\n<p>The tech world is huge: there are many programming languages, many frameworks, and different working methodologies. Trying to identify perfect matches for the job description isn&#39;t easy, but one thing is sure: you want to hire the most talented individuals.</p>\n<p>Let&#39;s start with the job description. Your project is rapidly growing and you need to increase the size of your workforce. You need someone to be able to do the front-end as well as the backend of your project. So, like many CEOs, you ask a recruiter to write a job posting based on your requirements.</p>\n<p>Sadly, some recruiters don&#39;t know much of the technical part so they will just follow blindly your guidelines. It often ends up creating hilarious job description requiring engineers to have 5+ years of experience for a 3 year old framework. Or the candidate needs to be an expert in too many technologies. You will most likely find nobody.</p>\n<p>I received so many job descriptions where the requirements are unrealistic. For example: you can&#39;t be a front-end engineer, dealing with browser specificity, i18n issues, and at the same time be a backend engineer designing scalable high traffic databases along with managing the server farms and supervising their expansion. Unless you can time travel, <em>a restaurant cannot be run with one server doing everything</em>. It also damages your credibility.</p>\n<p>So how to avoid this uncomfortable situation? Ask a few engineers to review the requirements and give you feedback. You might end up learning that you will need to hire two people instead of one. And, if you want your project to be run properly, that&#39;s probably the right thing to do. The requirements are only one part of the job description but it&#39;s the most important part.</p>\n<p>I&#39;ve done interviews for a startup, initially on Skype, they then flew me to New York. After spending the day with them, they didn&#39;t extend to an offer, reason being I wasn&#39;t familiar enough with the service as a daily publisher/user. It would have saved a lot of time and money to emphasis on this requirement in the initial process.</p>\n<p>The other parts of the job posting are easy as long as you remember to be original. For instance: don&#39;t use common adjectives to describe your team(s) (e.g. &quot;smart&quot;), be unique (e.g. &quot;high 5ers&quot;). Too many recruiters talk about the &quot;Coolest and hottest startups in the valley&quot;.</p>\n<p>Emails to candidates should be realistic and straightforward. Give as much information as possible: name of the company, information about the founders, describe how they envision their company: &quot;We&#39;re hoping to make environment as attractive as Google, providing free lunch, good health care and a good work/life balance&quot;. There is no shame to start somewhere and be simple, no need to over emphase and overuse adjectives.</p>\n<p>Once the recruiter has identified a pool of candidates, how do you recognize the ones that will perfectly fit? Check their resume, they show how long they&#39;ve stayed in company, they show the projects they&#39;ve contributed to, along with their role and involvement. It gives you a good estimation about the candidate capability to work with one or more teams, his flexibility, his passion, and his ability to learn and to deal with new challenges. Take also some time to read recruiter notes, they can have important information. Then starts the interviews.</p>\n<p>I like to split them in 4 different parts. The first one, shorter, quickly introduces the conversation in which you should present yourself and explain briefly what you do in the company. It helps the candidate to understand why you are interviewing him for this position. The second step, slightly longer, retraces his/her current and past experiences, ask questions to see how he interacts with technology, projects and people. It adjusts the technical questions that follow. </p>\n<p>Third part, the most critical and relevant: technical questions and problem solving exercises. The questions shows how well he/she understands the technology and its specificity, and the problems should be here to demonstrate cognitive abilities. Remember: you&#39;re here to help the candidate, so if you see he/she is not going far enough, give hints. A good candidate acknowledges hints and proactively try to solve the problems. I personally prefer someone who is capable to solve a problem with a beautiful solution than someone who knows only the technology and its specificity. Always avoid targeted and ended questions such as &quot;have you worked in the past with x / y / z frameworks?&quot;, it should be on his resume.</p>\n<p>When I was looking for a job in London, I noticed most companies were asking targeted and ended questions. For instance they asked if I was working in an agile environment, or if I had worked with Django in the past. Those are boolean questions which aren&#39;t showing the candidates ability to either work in an agile environment or to be proficient in those frameworks.</p>\n<p>Q/A is done, time is almost running out: give some minutes to the candidate to ask you questions about yourself, the company, and the position. Talk about your work, why you think it&#39;s awesome to work here, give a sneak peek at the cool perks (free food, free micro kitchen). It will help him/her to make a wise choice if you extend an offer.</p>\n<p>At the end of the interviews, you should be able to know why you&#39;re hiring this candidate specifically. You should be able to reply to those questions: what value will he add to the company? Will he be happy here? Will he/she be an active contributor? Would you like to work with him? Even mentor him if necessary?</p>\n<p>Always remember: if a candidate doesn&#39;t fit the position he/she applied for, always feel free to suggest other openings. Talent is rare.</p>\n<p>Additional good read: How to manage smart people by Scott Berkun.</p>\n",
      "date_published": "2013-02-20T11:25:48.000Z",
      "tags": [
        "Vie quotidienne"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/install-android-sdk-on-mac",
      "url": "https://www.silent-strength.com/articles/install-android-sdk-on-mac",
      "title": "Install Android SDK on Mac",
      "summary": "A straightforward, step-by-step guide to installing and configuring the Android Software Development Kit (SDK) on macOS for mobile developers.",
      "content_html": "<p><img src=\"/upload/archives/2010/10/android.jpeg\" alt=\"Android developments\"></p>\n<p>Installing and setting up the SDK environment for Mac is quite easy. All you&#39;ll need is a good internet connection and some patience. Maybe a beer and a <a href=\"http://youtu.be/OQSNhk5ICTI\">double rainbow</a>. Yes, why not?  </p>\n<p>Before starting, I recommend you to favorite the Android Developer Website. A good amount of ressources, links and advices are referenced there. </p>\n<p>Downloading Eclipse Classic is your first step. Unzip and move the new folder into /Applications. </p>\n<p>Second step: download the  Android SDK.  Place the new folder wherever you feel comfortable. Since I develop sometimes with xcode, I&#39;m using the location /Developer/SDKs. Go to tools/ and launch <strong>android</strong>. Select <strong>Available Packages</strong> and install one of the SDK Platform (I personally installed v2.1). Close the application.  </p>\n<p>Third step: open a terminal and edit your .bash_profile, add in your PATH the directory of the Android SDK followed by /tools. You should have something like: </p>\n<pre><code class=\"hljs\">export <span class=\"hljs-title class_\">PATH</span>=<span class=\"hljs-variable\">${</span><span class=\"hljs-title class_\">PATH</span>}<span class=\"hljs-symbol\">:/Developer/SDKs/Android-SDK/tools</span>\n</code></pre>\n<p>Forth step: launch Eclipse. Go to Help &gt; Install new Software. Add the address: <strong><a href=\"https://dl-ssl.google.com/android/eclipse/\">https://dl-ssl.google.com/android/eclipse/</a></strong>. Install the Android Development Tools (ADT). After the restart, go to Preferences &gt; Android. Insert the address of the SDK (without tools). After clicking on &quot;Apply&quot;, it should display the Platform(s) you&#39;ve downloaded previously. </p>\n<p>You&#39;re ready to create your first Android project. There is a good <a href=\"/\">Hello World article</a> in the official documentation. Enjoy!</p>\n",
      "date_published": "2010-10-18T06:07:32.000Z",
      "tags": [
        "Programmation"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/how-to-crop-an-image-with-css",
      "url": "https://www.silent-strength.com/articles/how-to-crop-an-image-with-css",
      "title": "How to crop an image with CSS",
      "summary": "A handy CSS technique for cropping images within a fixed-size container while maintaining their aspect ratios and positioning.",
      "content_html": "<p><img src=\"/upload/archives/2010/05/butterflies.png\" alt=\"Butterlies\"></p>\n<p>You know the dimensions of your container but you don&#39;t know the size of your image: you will have to make a crop. My little trick will work with a container and the image inside. </p>\n<p>It&#39;s a small css trick where I am using the CSS2 property clip. Let&#39;s say: you want to have a container with defined proportions: 240x300, a 4-pixels padding and a light blue border around. One more time: you don&#39;t know the size of your image and it can varies. </p>\n<h3 id=\"html\">HTML</h3>\n<pre><code class=\"hljs\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">span</span>&gt;</span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">img</span> <span class=\"hljs-attr\">src</span>=<span class=\"hljs-string\">&quot;/upload/archives/2010/05/butterflies.png&quot;</span> <span class=\"hljs-attr\">alt</span>=<span class=\"hljs-string\">&quot;description&quot;</span> /&gt;</span><span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">span</span>&gt;</span>\n</code></pre>\n<h3 id=\"css\">CSS</h3>\n<pre><code class=\"hljs\"><span class=\"hljs-selector-tag\">span</span> {\n\t<span class=\"hljs-attribute\">display</span>: block;\n\t<span class=\"hljs-attribute\">position</span>: relative; \n\t<span class=\"hljs-attribute\">overflow</span>: hidden;\n\t<span class=\"hljs-attribute\">width</span>: <span class=\"hljs-number\">240px</span>; \n\t<span class=\"hljs-attribute\">height</span>: <span class=\"hljs-number\">300px</span>; \n\t<span class=\"hljs-attribute\">padding</span>: <span class=\"hljs-number\">4px</span>; \n\t<span class=\"hljs-attribute\">border</span>: <span class=\"hljs-number\">1px</span> solid lightblue;\n\t<span class=\"hljs-attribute\">background</span>: lightyellow;\n}\n\n<span class=\"hljs-selector-tag\">img</span> {\n\t<span class=\"hljs-attribute\">position</span>: absolute;\n\t<span class=\"hljs-attribute\">min-width</span>: <span class=\"hljs-number\">240px</span>; \n\t<span class=\"hljs-attribute\">min-height</span>: <span class=\"hljs-number\">300px</span>; \n\n\t// Parameters: \n\t// <span class=\"hljs-number\">4px</span>: padding-top \n\t// <span class=\"hljs-number\">232px</span>: width-<span class=\"hljs-number\">2</span>*padding (top+bottom)\n\t// <span class=\"hljs-number\">292px</span>: height-<span class=\"hljs-number\">2</span>*padding (top+bottom)\n\t// <span class=\"hljs-number\">4px</span>: padding-left \n\tclip: <span class=\"hljs-built_in\">rect</span>(<span class=\"hljs-number\">4px</span>, <span class=\"hljs-number\">232px</span>, <span class=\"hljs-number\">292px</span>, <span class=\"hljs-number\">4px</span>);\n\t_clip: <span class=\"hljs-built_in\">rect</span>(<span class=\"hljs-number\">4px</span> <span class=\"hljs-number\">232px</span> <span class=\"hljs-number\">292px</span> <span class=\"hljs-number\">4px</span>); // For IE6 \n}\n</code></pre>\n<p>If you know which side of your image will be wider, it&#39;s easier to scale then to crop. Here, we&#39;re just making sure the image will have at least the dimension of the container. This solution can be better, that&#39;s just a draft for now :)</p>\n",
      "date_published": "2010-05-13T03:14:02.000Z",
      "tags": [
        "css"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/2two-from-gobelins-to-yahoo",
      "url": "https://www.silent-strength.com/articles/2two-from-gobelins-to-yahoo",
      "title": "2Two (From Gobelins to Yahoo!)",
      "summary": "Reflections on a year of significant professional and personal growth, transitioning from studying at Gobelins in France to working as a software engineer at Yahoo! in California.",
      "content_html": "<p><img src=\"/upload/archives/2010/01/2two.jpg\" alt=\"2Two\"> </p>\n<p>52 weeks ago, I proudly announced my 21st birthday without knowing what the year ahead would bring. It has been full of surprises. Truly.</p>\n<p>In early 2009, my future was oriented towards 3 possible directions: another year at Les Gobelins school in the MPNI program (to become a Project Manager), an internship in Europe (England or Germany) or a traineeship in the US.</p>\n<p>Thanks to Isabelle Dauvergne, Marie-France Zumofen, and Laure Poulain, I passed the entrance tests and was accepted into the MPNI for 2010. Thanks to Mathieu Thouvenin and Nicolas Brousse, I had all the information needed to do a traineeship in the US, and thanks to Larissa Meek, I had a contact inside AgencyNet.</p>\n<p>At the same time, as part of my program at Les Gobelins, I joined the Mook-E project: an immersive installation in augmented reality where you move around within a space to discover a parallel universe. This project was a real challenge, technically, graphically and interpersonally, requiring intensive teamwork and the ability to persist in spite of conflict.  I am deeply appreciative of the support of my collaborators, Claire Simoes Grangeia (Flash Developer) and Emilie Huot (Project Manager). Overcoming the difficulties had its rewards: our project was judged the best of the year and received an award at Europrix (Quality Seal) and best of all: I graduated first in my class.</p>\n<p>I saw my family in early July and left the old continent on July 6th, 2009, headed towards Florida.  Adam L., a co-worker at AgencyNet, was waiting for me at Miami International Airport.  My <a href=\"http://silent-strength.com/carnet/441-Hello-Agencynet\">internship started</a> few days after my first steps on US soil.  I had a blast participating in a video shoot, published some articles on the agency&#39;s website, experienced my <a href=\"http://silent-strength.com/carnet/473-Festive-Spirit-in-America\">first Halloween</a> at their fantastic annual party.  Time passed, the weather stayed the same, welcome to Florida!</p>\n<p>By the end of October, I started feeling the need for more professional challenges. Was it time for a change?</p>\n<p>By November, I was ready to go back to France when Yahoo! contacted me: they were interested in my profile. I took the opportunity to make a turn in my life. It was an exceptional chance.  After several interviews, they asked me to perform a test. I did it very carefully.  They flew me out to California and I designed a special presentation during the flight. I landed close to midnight, and thanks to Mary, I arrived safely in my hotel near the Yahoo! headquarters. Several hours later, I woke up and was ready to give everything I had in this full day of interviews.  I did my best and, after an enjoyable weekend in San Francisco, flew back to Florida.  The next Saturday, I received a big purple box that yelled &quot;Yahoo!&quot; when I opened it and contained a wonderful job offer letter, lots of information, and some fun gifts.  Thanks to Minoo A., Maggie G.  and April K., I obtained my H1-B visa. They were continuously available and very helpful.  My application was sent 2 days before the annual H1 quota had been reached. That was frightening but everything worked out. </p>\n<p>In conclusion, this year has definitely been crazy. It also showed me that luck does not exist in the professional world. It all depends on you: you have to seize the opportunity when you see one. Even if your chances are small: if something can go well, it will. During this year, I feel the power of relationships and how important they are. It’s not a question of physical presence, it’s more spiritual because when you know you’re not alone, you can take that feeling to build your strength and move forward.</p>\n<p><em>The future is always in our hands, it’s time to make it yours!</em></p>\n",
      "date_published": "2010-01-20T04:12:39.000Z",
      "tags": [
        "Michael Ortali"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/effectuer-un-stage-post-etudes-a-l-etranger",
      "url": "https://www.silent-strength.com/articles/effectuer-un-stage-post-etudes-a-l-etranger",
      "title": "Effectuer un stage post-études à l'étranger",
      "summary": "Guide pratique pour planifier, organiser et réussir un stage professionnel à l'étranger après l'obtention de son diplôme universitaire.",
      "content_html": "<p><img src=\"/upload/archives/2010/01/plane.jpg\" alt=\"Plane\"> </p>\n<p>Partir à l’étranger demande du temps et surtout une bonne organisation. Vous êtes encore étudiant et vous souhaitez faire un stage après vos études, l’aventure commence maintenant.</p>\n<p>Nous sommes début Janvier, les entreprises — malgré ce climat de crise — sont en pleine phase de recrutement et surtout à la recherche de nouveaux talents. En sortant de vos études en Juillet, vous allez certainement avoir quelques propositions d’emploi et rentrer dans le monde du travail. Partir à l’étranger s’avère moins évident lorsque l’on est enrôlé dans le système, il est préférable d’avoir une expérience complémentaire en fin de parcours d’études supérieures.</p>\n<h2 id=\"pourquoi-partir\">Pourquoi partir</h2>\n<p>L’idée de partir soulève de nombreuses questions notamment sur votre vie actuelle. Partir signifie laisser derrière-vous votre famille, vos amis, vos habitudes et votre pays. Vous allez entamer une aventure dans un nouveau monde, apprendre de nouveaux repères et cohabiter avec une culture totalement différente. Gardez toujours en tête ces notions. </p>\n<p>Un stage à l’étranger vous démarque très souvent des autres candidats pour un poste donné. Vous avez une valorisation plus importante de votre expérience, vos compétences d’adaptation et d’intégration sont des atouts supplémentaires. Vous apporterez aussi dans toutes vos entreprises une autre culture du travail. Cette vision alternative peut être un atout indéniable dans les postes à responsabilités. </p>\n<p>Sur la partie personnelle, c’est une expérience enrichissante dans laquelle vous relevez des défis au quotidien et vous apprenez de nouveau à marcher. Il y a une différence énorme entre être visiteur et être en immersion totale. Les repères changent: si vous ne vous adaptez pas, vous êtes exclus. Vous allez aussi être devant une culture différente de vos habitudes. Votre objectif: vous y inclure pour survivre. Vous y gagnerez un esprit critique.   </p>\n<p>Cette chance de partir à l’étranger ne se présente pas trois fois dans une vie. Elle peut tourner au drame ou s’avérer être un élément booster pour votre carrière et votre vie personnelle. </p>\n<h2 id=\"dfinir-vos-envies\">Définir vos envies</h2>\n<p>Avant de partir à la recherche des entreprises, commencez par définir vos envies. Commencez par le type de stage que vous souhaitez effectuer: la durée (pour une bonne crédibilité, supérieure à 6 mois), le salaire (ne surtout pas tombez dans le piège d’un stage non payé, vous allez souffrir financièrement), le type d’entreprise (start-up, multinationale, petite taille) et les tâches que vous souhaitez effectuer. Viennent ensuite les choix de la localité: pays d’accueil. Vérifiez bien que les transports en communs existent et que vous avez toujours des commerces à proximité pour vous alimenter. C’est important: vous n’aurez pas forcement la possibilité de vous offrir une voiture.</p>\n<p>Une fois toutes ces idées réunies: essayez de justifier chaque point avec vos études, votre expérience professionnelle comme personnelle, vos motivations ainsi que vos attentes. Ne soyez pas trop demandant: à moins de maîtriser parfaitement la langue du pays d’accueil, vous devez revoir vos objectifs toujours à la baisse. Un profil Chef de Projet devrait plutôt postuler pour Assistant Chef de Projet, vous obtiendrez progressivement des responsabilités d’où la nécessité d’avoir un stage de durée correcte. </p>\n<p>Après, vous devez identifier un programme pour vous aider à partir. </p>\n<h2 id=\"les-programmes\">Les programmes</h2>\n<p>Dans la majeure partie du temps, les écoles comme les universités proposent des programmes post-études pour faire des stages à l’étranger. Par exemple les Gobelins proposent aux apprentis de participer à Movill’app: faire un stage dans l’Europe. Des bourses sont attribuées pour des cours de langue et pour participer au financement du déménagement. </p>\n<p>Si rien n’est proposé dans votre établissement, il est possible de partir avec des organismes non lucratifs. La CIEE permet, par exemple, de faire un stage en Australie et aux Etats-Unis (je suis passé par eux, leur office en France est à Paris et porte le nom de Parenthèses-Paris). Il en existe beaucoup d’autres, à vous de faire vos recherches. Les stages à l’étrangers ont un coût: celui des papiers et de l’assurance. J’ai payé 1500 euros pour mon stage d’un an aux USA. </p>\n<p>Les programmes ayant déjà plusieurs années d’existence, n’hésitez pas à vérifier la qualité du service en faisant quelques recherches. De même, gardez à l’esprit que dans certaines situations des aptitudes linguistiques sont pré-requises (test TOEIC, TOEFL). Si vous n’avez pas ces tests, il va falloir les passer. Ce sont des étapes supplémentaires dans la préparation des documents. </p>\n<p>Dans tous les cas de figure, vous devez obligatoirement avoir une assurance. Partir vivre à l’étranger ne donne pas accès à la sécurité sociale française. </p>\n<h2 id=\"trouver-lentreprise-idale\">Trouver l’entreprise idéale</h2>\n<p>Tout dépend de votre programme: certains sont destinés à des entreprises en particulier, donc vous devez utiliser le carnet d’adresse de l’organisme alors que d’autres vous laissent le choix de sélectionner l’entreprise de vos rêves. </p>\n<p>Si c’est le cas, il va falloir passer du temps sur les réseaux sociaux professionnels, refaire votre cv, votre portfolio. Surtout, évitez la fameuse vidéo-cv réalisée en une dizaine d’heures, c’est sympa mais les recruteurs impriment le curriculum qu’ils lisent ensuite en biais. Ils ne passent pas 5 minutes à regarder votre vidéo. </p>\n<p>Puis, utilisez les maps pour situer l’entreprise, regarder les loyers autours (pour faire une estimation de votre salaire), prenez aussi du temps pour vérifier les réseaux sociaux (comptes flickr etc). Il se peut que l’entreprise vous tente par le nom mais qu’au final vos recherches vous montrent que le cadre de travail ne correspond pas du tout à vos attentes. Ces démarches ne sont pas inutiles et évitent de faire un mauvais choix. </p>\n<h2 id=\"vendez-vous\">Vendez-vous!</h2>\n<p>Chercher un emploi dans un pays étranger arrête souvent les entreprises sur la lecture de la lettre de motivation. </p>\n<p>Il faut préciser au début que vous utilisez un programme d’échange qui ne nécessite le remplissage que de quelques documents. Les entreprises lient à tord le statut d’étranger à quantité exceptionnelle de formalités administratives. En complément, n’hésitez pas à demander des recommandations en anglais sur vos différents réseaux professionnels, elles pourront renforcer votre lettre de motivation. </p>\n<p>Vous aurez certainement, tout du moins pour les développeurs, un test à faire. Mettez-y les moyens. C’est la seule manière pour l’entreprise de voir vos compétences puisqu’il est peu probable que vous ayez la chance d’aller sur place rencontrer vos futurs collègues. </p>\n<h2 id=\"tips\">Tips</h2>\n<p>Vous avez réussi à avoir les documents pour effectuer votre stage en toute légalité, c’est bien. Maintenant en arrivant sur le territoire, participez à des activités sociales: sports, associations. Ils aident à vous insérer plus rapidement dans ce nouveau monde et surtout vous donne la possibilité de côtoyer des personnes hors du travail. </p>\n<p>Plus vous allez voir de monde et plus le temps passera rapidement. Avoir un emploi du temps chargé, c’est l’esprit occupé et donc vous “vivez”. N’oubliez pas non plus vos amis. Les cartes postales font toujours autant plaisir pour les anniversaires, les fêtes de fin d’années ou sur un coup de tête! :)</p>\n<p>Aussi pour éviter les réactions disproportionnées, ne faites jamais de blagues. Contentez-vous de rire en même temps que tout le monde — même si vous ne comprenez pas où se trouve l’humour — et utilisez votre accent pour faire rire ainsi que vos incompréhension. Jouer le naïf marche très bien — et pas que pour les blagues ... mais c’est une autre histoire interdite au moins de 18 ans :)</p>\n<h2 id=\"cas-compliqus\">Cas compliqués</h2>\n<p>Malheureusement, c’est 4 mois après avoir débuté mon stage que j’ai perdu ma grand-mère. N’ayant pas de congés payés, je n’ai pas pu rentrer en France soutenir ma famille. Les assurances pour les stages ne couvrent pas tout, faites des économies le plus vite possible. </p>\n<p>Autre cas de figure, si la personne qui vous a recruté s’est faite virée, l’entreprise ne changera pas nécessairement sa position sur votre embauche. Néanmoins, la personne qui vous prendra en charge ne sera pas forcement intéressée. Ce cas m’est arrivé: vous restez 8h par jour devant un écran à faire quelques petites tâches. Si un tel cas de figure se présente avant votre départ, ne faites pas comme moi: appelez de nouveau pour rediscuter les clauses du contrat et si quelque chose vous semble étrange, n’hésitez pas à stopper votre décision.</p>\n",
      "date_published": "2010-01-14T01:00:11.000Z",
      "tags": [
        "Etudes",
        "USA"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/moderer-les-commentaires",
      "url": "https://www.silent-strength.com/articles/moderer-les-commentaires",
      "title": "Modérer les commentaires",
      "summary": "Une réflexion sur l'importance, les défis et la responsabilité de la modération des commentaires sur un blog personnel ou un site communautaire.",
      "content_html": "<p><img src=\"/upload/archives/2009/10/mites.jpg\" alt=\"mites\"></p>\n<p>En tentant d&#39;avoir plus d&#39;informations sur la vie secrète des mites, j&#39;ai lu le commentaire de Guillaume qui m&#39;a laissé réfléchir.</p>\n<blockquote>\n<p>« Je trouve que la modération a posteriori des commentaires par les autres lecteurs est une solution séduisante »</p>\n</blockquote>\n<p>Dans un premier temps: l&#39;idée peut séduire, c&#39;est certain. Le blogger n&#39;a plus aucun effort à faire, les bons lecteurs vont se charger de policer les commentaires. Les spams sont ainsi rapidement supprimés et les commentaires inutiles effacés sur le champs. Mais d&#39;un autre côté ...</p>\n<p>Prenons le cas simple: vous êtes sur un blog qui met en avant les avantages de Firefox, dont l&#39;auteur est visiblement un fan inconsidéré. Un jour, vous décidez de changer de navigateur et d&#39;utiliser Safari. Après quelques mois d&#39;essais, vous allez sur son blog et vous y déposez un long commentaire sur les avantages / inconvénients de Firefox et vous démontrez pourquoi vous avez switché. Le problème: tous les Firefox Evangelistes, en voyant votre commentaire, vont avoir une réaction commune: il doit disparaître.</p>\n<p>Si à court terme un tel système peut paraître être une solution viable, sur le long terme, ce type de méthode pourrait rapidement se décliner en bulles/micro-communautés complètement hermétiques. Chaque blog avec ses lecteurs et les avis contrastés ne sont finalement pas les bienvenus. </p>\n<p>Pour éviter les réactions à chaud, plutôt brutales, mon concept est autre (même si je ne l&#39;applique pas ici vu les sujets abordés et le peu de visiteurs).</p>\n<p>La majorité d&#39;entre-nous avons un libre arbitre capable (théoriquement) de pouvoir peser le pour et le contre. Les commentaires étant une réaction à chaud, le concept est simple: ne pas afficher directement, attendre au moins une heure, envoyer un mail à l&#39;auteur pour lui demander s&#39;il veut vraiment publier le texte qu&#39;il vient d&#39;écrire. En se relisant, on évite de nombreux désastres. Cette idée suggère aussi que la personne fournisse un email fonctionnel. </p>\n<p>Le défaut: l&#39;instantané n&#39;a jamais été autant différé. Comme toute technique et solution, il y a le pour et le contre!</p>\n",
      "date_published": "2009-10-12T03:15:49.000Z",
      "tags": [
        "Web"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/css-best-practices-for-modern-designs",
      "url": "https://www.silent-strength.com/articles/css-best-practices-for-modern-designs",
      "title": "CSS Best Practices for Modern Designs",
      "summary": "A summary of essential CSS best practices, writing maintainable style sheets, and optimizing layout performance for web projects.",
      "content_html": "<p><img src=\"/upload/archives/2009/08/cssbestpractices.jpg\" alt=\"CSS Best Practices\"></p>\n<p><strong>In 2001, I discovered CSS and it changed my life.</strong></p>\n<p>Previously, I had used FrontPage before switching to Dreamweaver2 and both software packages required me to update the entire website every time a graphical element wasn’t working for me. For a 2-page site, this process was relatively quick and simple; but when I had more than 100, it started to become a hassle. CSS solved this problem by separating design from content.</p>\n<p>Like many developers, when I started programming, I coded in a linear way: the header, the content and the footer. Looking back at some of my older projects, that was almost certainly the worst practice possible: each section of the site was treated as if it were standalone, creating huge inefficiencies. It also tended to make your code look like it was dumped from a WYSIWYG editor.</p>\n<p>This article presents advice to help shift your thinking from linear code to CSS. Keep in mind that there are a lot of ways to develop in CSS— feel free to try this one and feel welcome to adopt it!</p>\n<p>Read more</p>\n",
      "date_published": "2009-08-25T00:00:00.000Z",
      "tags": [
        "css",
        "Technologie",
        "Web"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/vivre-aux-etats-unis",
      "url": "https://www.silent-strength.com/articles/vivre-aux-etats-unis",
      "title": "Vivre aux Etats-Unis",
      "summary": "Un retour d'expérience franc et pragmatique sur le coût de la vie, les services publics et le choc culturel lors d'une expatriation aux États-Unis.",
      "content_html": "<p><img src=\"/upload/archives/2009/08/fortlauderdale.jpg\" alt=\"Fort Lauderdale\"></p>\n<p>La vie à l&#39;Américaine n&#39;est pas donnée, elle est excessivement chère et sur beaucoup de points. Si vous pensez que Orange est une société de voleurs, vous n&#39;avez rien vu, si vous pensez que les transports publiques en France sont mauvais, vous risquez d&#39;avoir un arrêt cardiaque. </p>\n<p>Je suis parti de France avec <strong>3000$</strong>, ils sont partis en fumés au bout d&#39;un petit mois. Facture total fin juillet: <strong>6000$</strong>. Cet article va vous montrer comment, malgré une surveillance accrue de votre compte, une telle somme peut disparaître.</p>\n<h2 id=\"avant-dpart\">Avant départ</h2>\n<p>Lorsque vous partez à l&#39;étranger pour effectuer un stage, vous passez par un organisme si possible non lucratif pour avoir un coût réduit. Mon contrat comprend: une assistance et un suivi de mon stage, une <strong>assurance</strong> pour mon temps de présence sur territoire et l&#39;obtention du sponsor (obligatoire). La première facture s&#39;élève déjà à <strong>$2000</strong> et je n&#39;inclus pas les $140 qu&#39;il faut fournir au consulat pour l&#39;obtention du Visa.</p>\n<p>Ensuite il faut prendre le billet d&#39;avion. Si vous avez le choix de vos dates, ne partez surtout pas durant les vacances scolaires, l&#39;été est la période la plus chère. Mon stage débutant début juillet, l&#39;avion m&#39;a coûté plus de <strong>$1100</strong>.</p>\n<p><strong>Ainsi avant même d&#39;arriver sur le territoire, vous avez déjà $3000 de dépensé.</strong></p>\n<h2 id=\"un-logement\">Un logement</h2>\n<p>Vous venez d&#39;arriver sur le territoire et vous êtes généreusement hébergé par un collègue de bureau le temps de trouver un logement. Vous regardez les annonces sur Craiglist et vous découvrez que pour avoir l&#39;accord du propriétaire, il faut payer:</p>\n<ul>\n<li>Le premier loyer</li>\n<li>Un chèque de caution encaissé du même montant que le premier loyer</li>\n<li>Le dernier mois</li>\n</ul>\n<p>J&#39;ai eu de la chance: seulement deux de ces critères m&#39;ont été demandés. La facture reste quand même sucrée: <strong>1800$</strong>. L&#39;appartement étant vide, petit tour chez Ikea pour l&#39;achat du minimum: un lit. Nouvelle facture: <strong>800$</strong> pour des articles premiers prix. Coût total: 2600$.</p>\n<p>Il me semble aussi important de préciser que les prix varient suivant les villes et les taxes appliquées. New York pratique par exemple une taxe d&#39;environ 10% contre 8% à Fort Lauderdale.</p>\n<h2 id=\"foreigner-deposit\">Foreigner = Deposit</h2>\n<p>Vous êtes étranger, vous n&#39;avez donc pas de numéro de sécurité sociale et encore moins de <em>credit history</em>. Il vous sera donc demandé pour tous les services auxquels vous allez avoir recourt de laisser un <em>Deposit</em> ou de payer le prix fort.</p>\n<p>Exemple: vous voulez avoir un iPhone. Il est vendu 200$. Etant étranger, AT&amp;T vous demandera poliment de payer $750 supplémentaires. Pour l&#39;électricité, on vous demandera un deposit de 120$. </p>\n<p>Cet argent qui dort sort tout de même de votre compte. Pour mon forfait mobile chez T-Mobile, ma première facture a été de 290$. </p>\n<h2 id=\"communication-aux-etats-unis\">Communication aux Etats-Unis</h2>\n<p>Complètement retardés et obsolètes, vous avez au niveau des forfaits mobiles &quot;illimités&quot; pour au minimum $50 mensuels (à partir de 21h et weekend, texto, sms). Vous n&#39;avez pas le luxe d&#39;avoir un forfait data.</p>\n<p>Concernant l&#39;abonnement internet, pour bénéficier d&#39;un débit, vous devez payer le prix fort. Je paie $40 pour n&#39;avoir que le net. Pour avoir un pack comprenant: téléphonie non illimité, internet basic et télévision non hd, il faut compter 100$. Un service similaire à celui de Free coûterait ici environ 200$, et celui d&#39;Ideo de Bouygues environ 300$.</p>\n<p>Ainsi pour plus de 100$/mensuels, je me retrouve avec:</p>\n<ul>\n<li>Forfait mobile 300 minutes avec SMS / MMS illimités et appels illimités le soir et weekend.</li>\n<li>Internet 1.5MB/s</li>\n</ul>\n<p>Chose importante, toutes les communications sont dites partagées. Lorsque j&#39;étais chez AT&amp;T, je payais environ $0.20 à la <strong>réception</strong> de messages. Une simple conversation coûte donc au minimum $0.40. Lorsque quelqu&#39;un vous appelle, même si c&#39;est une erreur, vos minutes sont également décomptées.</p>\n<p>Ces pratiques aberrantes n&#39;existent heureusement pas en France.</p>\n<h2 id=\"autres-dtails\">Autres détails</h2>\n<h3 id=\"transports\">Transports?</h3>\n<p>Je pense qu&#39;il n&#39;est pas nécessaire de détailler cette section. Attendre un bus pendant une heure sous la chaleur écrasante de Floride n&#39;est pas du tout top. Le mieux: s&#39;acheter un vélo. Au moins vous faites du sport tous les matins!</p>\n<h3 id=\"rester-positif\">Rester Positif</h3>\n<p>La situation devient un peu plus confortable après le premier mois surtout si vous êtes payés toutes les deux semaines. Le premier mois est un peu difficile surtout que vous êtes bien souvent en attente de votre numéro de sécurité sociale pour pouvoir percevoir votre salaire.</p>\n",
      "date_published": "2009-08-19T12:49:32.000Z",
      "tags": [
        "USA",
        "Vie quotidienne"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/utiliser-les-reseaux-professionnels",
      "url": "https://www.silent-strength.com/articles/utiliser-les-reseaux-professionnels",
      "title": "Utiliser les Réseaux Professionnels",
      "summary": "Une analyse de l'importance d'utiliser des plateformes comme LinkedIn et les réseaux professionnels en ligne pour optimiser sa recherche d'emploi.",
      "content_html": "<p><img src=\"/upload/archives/2009/04/linkedin.png\" alt=\"Linkedin\"></p>\n<p>Créé en 2005, mon site internet manque d&#39;une cruelle visibilité sur la toile (articles peu intéressants et pertinents). Donc lorsqu&#39;il s&#39;agit de trouver un emploi, il ne faut pas hésiter à faire appel à des outils un peu plus sérieux (et plus intéressants que « Pôle Emploi »). </p>\n<p>Ainsi depuis plusieurs mois, j&#39;utilise deux réseaux sociaux: linkedin et viadeo. </p>\n<h3 id=\"le-profil\">Le profil</h3>\n<p>Remplir le profil est une étape obligatoire qui consiste à décrire en quelques mots les compétences, remplir l&#39;état civil et quelques autres formalités.</p>\n<p>En complément, il est possible de rajouter (aussi bien sur viadeo que sur linkedin) des mots clés. N&#39;hésitez pas à y glisser des termes techniques si vous êtes développeur, des tendances graphiques si vous êtes designer. On ne sait jamais! </p>\n<p>Après, je n&#39;hésite pas trop à mettre ma photographie. Elle n&#39;est heureusement pas obligatoire mais peut faire pencher (ou non) la balance en votre faveur. Pour une photo réussie: essayez simplement de rester le plus neutre possible. Un peu comme sur un CV papier. Donc évitez les photos prises lors d&#39;une soirée après 5 bières :)</p>\n<h3 id=\"les-expriences-professionnelles\">Les expériences professionnelles</h3>\n<p>Un peu comme le CV mais cette fois, détaillez au maximum votre rôle, participation au sein de l&#39;entreprise. N&#39;oubliez pas non plus de mettre en avant les compétences et si possible justifier leur présence, c&#39;est important. </p>\n<p>Si vos compagnies ont des sites internet ou que vous avez participé à la réalisation de sites actuellement visibles, rajoutez les urls (enfin, sauf <a href=\"http://twitter.com/xethorn/status/1573224371\">cas à part</a> …). </p>\n<h3 id=\"rajouter-des-connaissances\">Rajouter des connaissances</h3>\n<p>Là, nous entrons dans le vif du sujet et dans la partie sociale qui n&#39;existe pas vraiment sur le papier: la possibilité d&#39;ajouter des connaissances. Le principe est simple, il vous suffit de rechercher les personnes de vos anciennes entreprises et de les ajouter un par un en tant que collègues, de rechercher vos &quot;amis&quot;, de les ajouter également. Au final, vous créez ce que l&#39;on appelle des liens professionnels. </p>\n<p>L&#39;avantage de ce principe, si vous recherchez à rentrer dans une boite, vous pouvez dans un premier temps rechercher une personne de votre réseau qui aurait une connaissance y travaillant et lui demander à être présenté. </p>\n<p>A éviter sur les réseaux professionnels: l&#39;ajout de nombreux contacts. Avoir trop de connexion peut jouer en votre défaveur et nuire à la crédibilité. Les réseaux sociaux professionnels sont différents de facebook. </p>\n<h3 id=\"les-recommandations\">Les recommandations</h3>\n<p>Un autre point fort des réseaux sociaux professionnels sont les recommandations. Vous pouvez demander à tout instant à vos contacts des commentaires sur votre travail et, qui plus est, vous avez la possibilité d&#39;accepter ou de refuser ces ajouts à votre profil. </p>\n<p>Ces annonces peuvent facilement jouer en votre faveur pour trouver un emploi. Ils démontrent dans beaucoup de cas vos compétences, vos aptitudes non seulement de travail en groupe mais également d&#39;analyse et de compréhension des projets réalisés. </p>\n<p>Par contre, il faut que le commentaire soit suffisamment unique pour avoir un impact. Dire que ce fut un plaisir de travailler avec quelqu&#39;un n&#39;est pas une recommandation intéressante en soi. </p>\n<h3 id=\"adhrer-des-groupes\">Adhérer à des groupes</h3>\n<p>L&#39;autre avantage des réseaux sociaux sont les groupes. Ils existent sur Facebook, ils existent aussi sur Linkedin et viadeo. Ce sont bien évidement des &quot;groupes professionnels&quot; auxquels vous pouvez adhérer directement ou à travers un processus de &quot;vérification&quot;. </p>\n<p>Dans le cadre d&#39;une recherche d&#39;emploi, vous avez aussi y voir des alertes et annonces adaptées. N&#39;étant pas encore dans une phase de recherche de travail, cette particularité ne m&#39;a pas encore été utile. Si quelqu&#39;un à une expérience à partager, n&#39;hésitez pas à utiliser les commentaires.  </p>\n<h3 id=\"bien-choisir-son-rseau-social\">Bien choisir son réseau social</h3>\n<p>Pour le moment j&#39;ai noté (après ceci s&#39;applique probablement qu&#39;à l&#39;univers informatique) qu&#39;un français aura plus de propositions d&#39;emploi sur Viadeo plutôt que sur Linkedin. Ceci vient probablement du fait que le nombre de membres étant plus petit, la visibilité de chaque membre n&#39;est que plus grande. </p>\n<h3 id=\"points-ngatifs\">Points négatifs</h3>\n<p>Alors que je recherchais un stage aux Etats-Unis, il a fallu mettre à jour en parallèle toutes les informations sur les différents sites: le mien, linkedin et viadeo. Sans compter les mises à jours de la version papier, de la version anglaise.  </p>\n<p>Autant dire que le temps passé sur un site doit être passé sur un autre. Au lieu de ne mettre qu&#39;à jour une seule et unique place, il y en a de nombreuses. </p>\n<p>Donc au lieu de réduire au minimum, la présence sur plusieurs sites multiplies les heures de mise à jour.</p>\n",
      "date_published": "2009-04-23T07:32:41.000Z",
      "tags": [
        "Réseaux sociaux",
        "Web"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/hadopi-juridiquement-ridicule",
      "url": "https://www.silent-strength.com/articles/hadopi-juridiquement-ridicule",
      "title": "Hadopi : juridiquement ridicule",
      "summary": "Une critique acerbe de la loi Hadopi, soulignant son inefficacité technique, son absurdité juridique et son impact sur les libertés numériques des internautes.",
      "content_html": "<p>Si la bêtise humaine devait avoir un nom aujourd&#39;hui, elle devrait s&#39;appeler Hadopi. Les journaux en parlent, cette loi a pourtant soulevé du monde et les artichauts n&#39;auront pas eu (tristement) raison ...</p>\n<p>Depuis son initialisation, ce texte n&#39;a fait que susciter la méfiance des fournisseurs d&#39;accès à internet, son application technique est absurde : l&#39;installation d&#39;un parasite sur votre ordinateur. </p>\n<p>L&#39;intelligence de nos politiciens s&#39;est écrasée une fois de plus, ils ont forcement oublié les parachutes, et se contentent de penser. Mal certes, mais ils pensent. En attendant, cette loi a fait &quot;sourire&quot; énormément de monde qui pensent avoir trouvé le moyen de paralyser le suppositoire Hadopi avec 10 antidotes. </p>\n<p>Comme <a href=\"http://silent-strength.com/carnet/384-Recherche-francaise\">hier</a>, tout ceci se résume un un mot : navrant. </p>\n<p>Un passage de l&#39;article du monde : </p>\n<blockquote>\n<p>A plein régime, l&#39;Hadopi devrait envoyer chaque jour 10 000 courriels d&#39;avertissement et prononcer 1 000 coupures, selon des chiffres avancés par la ministre de la culture en février. Christine Albanel et une large partie de la majorité ont insisté sur l&#39;aspect pédagogique du texte, et les possibilités de recours offertes aux internautes.</p>\n</blockquote>\n<p>Pour une discussion plus complète, je vous propose de suivre cette lecture chez le journaldugeek dans son dernier billet.</p>\n",
      "date_published": "2009-04-03T07:56:50.000Z",
      "tags": [
        "Vie quotidienne"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/javascript-et-evenements",
      "url": "https://www.silent-strength.com/articles/javascript-et-evenements",
      "title": "Javascript et évènements",
      "summary": "Un cours technique expliquant la gestion des événements et des interactions utilisateurs en JavaScript via le Document Object Model (DOM).",
      "content_html": "<p>Dans le cadre de mon cursus aux Gobelins, nous avons eu des cours de javascript. N&#39;ayant pas envie de m&#39;attarder sur les bases en javascript, je vais ici uniquement parler des événements appliqués via le DOM. </p>\n<p>L&#39;ancienne méthode consistait à mettre dans un attribut <em>onclick</em> (ou autre) le nom de la fonction javascript à activer. </p>\n<h3 id=\"dfinition-des-vnements\">Définition des événements</h3>\n<p>Il est assez simple de définir des événements. Il suffit de faire appel au DOM: </p>\n<pre><code class=\"hljs\">document.getElementById(<span class=\"hljs-string\">&quot;lien&quot;</span>).onclick <span class=\"hljs-operator\">=</span> nomDeLaFonction<span class=\"hljs-comment\">;</span>\n</code></pre>\n<p>Le html correspondant étant : </p>\n<pre><code class=\"hljs\">&lt;a <span class=\"hljs-attribute\">href</span>=<span class=\"hljs-string\">&quot;adresse&quot;</span> <span class=\"hljs-attribute\">id</span>=<span class=\"hljs-string\">&quot;lien&quot;</span>&gt;Lien&lt;/a&gt;\n</code></pre>\n<p>La liste des événements disponibles sur le W3Schools.</p>\n<h3 id=\"erreurs-classiques\">Erreurs classiques</h3>\n<p>Comme tout ce qui touche au DOM, pour pouvoir modifier des éléments, il faut attendre que la page soit entièrement chargée. Pour cela, il suffit de créer un événement lorsque l&#39;objet <em>window</em> est considéré comme mis en mémoire. </p>\n<pre><code class=\"hljs\"><span class=\"hljs-variable language_\">window</span>.<span class=\"hljs-property\">onload</span> = <span class=\"hljs-keyword\">function</span>(<span class=\"hljs-params\"></span>) {\n    <span class=\"hljs-comment\">// Le contenu de la méthode. </span>\n}\n</code></pre>\n<p>La seconde erreur vient du fait de mettre des parenthèses derrière le nom de la fonction causant un appel immédiat de la fonction à la lecture du javascript. </p>\n<p>Exemple : </p>\n<pre><code class=\"hljs\">document.getElementById(<span class=\"hljs-string\">&quot;lien&quot;</span>).onclick <span class=\"hljs-operator\">=</span> alert(<span class=\"hljs-string\">&quot;Ne fonctionne pas&quot;</span>)<span class=\"hljs-comment\">;</span>\n</code></pre>\n<p>Le code fonctionnel sera : </p>\n<pre><code class=\"hljs\"><span class=\"hljs-variable language_\">document</span>.<span class=\"hljs-title function_\">getElementById</span>(<span class=\"hljs-string\">&quot;lien&quot;</span>).<span class=\"hljs-property\">onclick</span> = <span class=\"hljs-keyword\">function</span>(<span class=\"hljs-params\"></span>) {\n    <span class=\"hljs-title function_\">alert</span>(<span class=\"hljs-string\">&quot;Fonctionne&quot;</span>) \n};\n</code></pre>\n<h3 id=\"rcuprer-le-type-de-l39vnement\">Récupérer le type de l&#39;événement</h3>\n<p>Cette partie est un peu plus compliquée, elle dépend du navigateur. Le code ci-dessous est cross-browser. </p>\n<p>Via la propriété <em>type</em>, on récupère le type de l&#39;événement (exemple : <em>click</em>). </p>\n<pre><code class=\"hljs\">function eventCapture(<span class=\"hljs-built_in\">ev</span>) {\n    <span class=\"hljs-built_in\">var</span> <span class=\"hljs-built_in\">ev</span> = <span class=\"hljs-built_in\">ev</span> || window.event; \n    alert(<span class=\"hljs-built_in\">ev</span>.type); \n}\n</code></pre>\n<p>La récupération de l&#39;élément à l&#39;origine de l&#39;événement : </p>\n<pre><code class=\"hljs\">function eventCapture(<span class=\"hljs-built_in\">ev</span>) {\n    <span class=\"hljs-built_in\">var</span> <span class=\"hljs-built_in\">ev</span> = <span class=\"hljs-built_in\">ev</span> || window.event; \n    <span class=\"hljs-built_in\">var</span> element = <span class=\"hljs-built_in\">ev</span>.target || <span class=\"hljs-built_in\">ev</span>.srcElement; \n    alert(element); \n}\n</code></pre>\n<h3 id=\"exemple\">Exemple</h3>\n<p>Dans la structure d&#39;un document html classique, voici exemple de code fonctionnel. </p>\n<p>Partie header : </p>\n<pre><code class=\"hljs\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script</span> <span class=\"hljs-attr\">type</span>=<span class=\"hljs-string\">&quot;text/javascript&quot;</span>&gt;</span><span class=\"language-javascript\">\n<span class=\"hljs-variable language_\">window</span>.<span class=\"hljs-property\">load</span> = <span class=\"hljs-keyword\">function</span>(<span class=\"hljs-params\"></span>) {\n    <span class=\"hljs-variable language_\">document</span>.<span class=\"hljs-title function_\">getElementById</span>(<span class=\"hljs-string\">&quot;lien&quot;</span>).<span class=\"hljs-property\">onclick</span> = afficherPopup;\n};\n\n<span class=\"hljs-keyword\">function</span> <span class=\"hljs-title function_\">afficherPopup</span>(<span class=\"hljs-params\"></span>) {\n    <span class=\"hljs-title function_\">alert</span>(<span class=\"hljs-variable language_\">this</span>.<span class=\"hljs-property\">href</span>); \n};\n</span><span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">script</span>&gt;</span>\n</code></pre>\n<p>Dans la partie body : </p>\n<pre><code class=\"hljs\">&lt;a <span class=\"hljs-attribute\">href</span>=<span class=\"hljs-string\">&quot;http://google.com&quot;</span> <span class=\"hljs-attribute\">id</span>=<span class=\"hljs-string\">&quot;lien&quot;</span>&gt;Google&lt;/a&gt;\n</code></pre>\n<h3 id=\"plusieurs-vnements\">Plusieurs événements</h3>\n<p>La solution précédente ne permet d&#39;activer qu&#39;une seule fonction à un événement. Si l&#39;on en définit une ensuite de la même façon, elle écrasera l&#39;événement initialement prévu. </p>\n<p>Pour éviter ces collisions, il faut utiliser la méthode addEventListener (sous InternetExplorer : attachEvent). </p>\n<pre><code class=\"hljs\"><span class=\"hljs-comment\">/** Tous les navigateurs sauf IE **/</span>\n<span class=\"hljs-built_in\">window</span>.addEventListener(\n    <span class=\"hljs-string\">&quot;onload&quot;</span>, \n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">function</span>(<span class=\"hljs-params\"></span>) </span>{ \n        alert(<span class=\"hljs-string\">&quot;Hello&quot;</span>)\n    }, \n    <span class=\"hljs-literal\">false</span>\n);\n \n<span class=\"hljs-built_in\">window</span>.addEventListener(\n    <span class=\"hljs-string\">&quot;onload&quot;</span>, \n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">function</span>(<span class=\"hljs-params\"></span>) </span>{ \n        alert(<span class=\"hljs-string\">&quot;world !&quot;</span>)\n    }, \n    <span class=\"hljs-literal\">false</span>\n);\n</code></pre>\n<h3 id=\"pour-aller-plus-loin\">Pour aller plus loin</h3>\n<p>Il y a des frameworks qui existent en javascript. Leur connaissance est aujourd&#39;hui quasi-nécessaire pour accélérer tout ce qui touche aux traitements JS. </p>\n<p>En continuité de cet article, je conseille vivement la lecture des fonctions offertes par JQuery sur les événements. </p>\n<p>Pour tout ceux qui aiment le fait maison, documentation sur le DOM est largement suffisante pour avoir plus de détails sur les fonctions.</p>\n",
      "date_published": "2009-03-26T08:50:17.000Z",
      "tags": [
        "Javascript"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/rendu-de-texte-avec-javascript",
      "url": "https://www.silent-strength.com/articles/rendu-de-texte-avec-javascript",
      "title": "Rendu de texte avec Javascript",
      "summary": "Une présentation des techniques et des bibliothèques JavaScript permettant d'améliorer le rendu typographique et l'affichage de polices personnalisées sur le web.",
      "content_html": "<p><img src=\"/upload/archives/2009/03/typeface.png\" alt=\"Typeface\"></p>\n<p>Lorsque l&#39;on réalise un site internet à partir de linux, de mac os x, ou de windows nous avons un problème considérable qui se dégage lorsqu&#39;il faut tester sous les différents environnements : les fonts utilisées dans la présentation n&#39;existent pas systématiquement (voir la liste). </p>\n<p>L&#39;autre problème qui s&#39;ajoute à ces fonts inexistantes est leur lissage. ClearType activé ou non, la méthode utilisée par Redmond pour Windows n&#39;est que très peu satisfaisante quant au rendu souhaité.</p>\n<p>De ces constats, plusieurs méthodes de remplacement de texte ont alors vu le jour : le remplacement du texte par une image ou encore par un fichier flash.  A l&#39;heure actuelle, ce sont les seules transformations viables.</p>\n<p>Néanmoins, à ces solutions un projet s&#39;ajoute :  typeface de neocracy. Leur réponse à ce problème d&#39;écriture se base sur plusieurs technologies (javascript, vml et canvas) et fonctionne sur tous les navigateurs du marché (IE6 compris). </p>\n<p>Via leur site web ou directement depuis le script fourni en PERL, il est possible d&#39;augmenter la liste des fonts disponibles en encodant ses propres écritures. </p>\n<h3 id=\"les-plus-de-cette-mthode\">Les plus de cette méthode</h3>\n<ul>\n<li>Les fonts proposées par défauts sont suffisantes pour compléter la liste d&#39;écritures déjà présentes sous les OS</li>\n<li>Le lissage est assez réussi</li>\n<li>Pas besoin d&#39;inclure de fichier flash ou image</li>\n</ul>\n<h3 id=\"les-moins-de-cette-mthode\">Les moins de cette méthode</h3>\n<ul>\n<li>Les fonts personnelles encodées par leur système (perl) ne rend pas toujours bien</li>\n<li>Impossible de sélectionner le texte pour le copier / coller (possible sous flash)</li>\n</ul>\n",
      "date_published": "2009-03-11T10:17:41.000Z",
      "tags": [
        "css",
        "Design",
        "Javascript"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/librairie-ef-pour-as3",
      "url": "https://www.silent-strength.com/articles/librairie-ef-pour-as3",
      "title": "Librairie EF pour AS3",
      "summary": "Présentation de la librairie EF pour ActionScript 3 (AS3), conçue pour faciliter le développement d'applications riches et d'animations interactives sous Adobe Flash.",
      "content_html": "<p>Durant mon apprentissage de flash, j&#39;ai été frustré plus d&#39;une fois par la programmation lourde pour finalement réaliser peu de choses. J&#39;ai donc pris l&#39;initiative de réaliser une petite librairie qui a pour objectif de simplifier le code à la manière de JQuery. L&#39;intérêt : « <em>do more write less</em> ». </p>\n<p>Un des avantages : toutes les fonctions retournent l&#39;objet initial, il est donc possible d&#39;appeler plusieurs fonctions à la suite sans réécrire le nom de l&#39;objet. </p>\n<h3 id=\"exemple-de-code\">Exemple de code :</h3>\n<pre><code class=\"hljs\"><span class=\"hljs-comment\">// obj est un movieclip.</span>\nobj.<span class=\"hljs-variable language_\">x</span> = <span class=\"hljs-number\">100</span>; \nobj.<span class=\"hljs-variable language_\">y</span> = <span class=\"hljs-number\">200</span>; \nobj.width = <span class=\"hljs-number\">300</span>; \nobj.height = <span class=\"hljs-number\">400</span>;\nobj.alpha = <span class=\"hljs-number\">.4</span>; \n\nTweenMax.to(obj, <span class=\"hljs-number\">.5</span>, {<span class=\"hljs-variable language_\">x</span>:<span class=\"hljs-number\">4</span>, <span class=\"hljs-variable language_\">y</span>:<span class=\"hljs-number\">2</span>, scaleX:<span class=\"hljs-number\">4</span>});\n</code></pre>\n<p>On peut facilement remarquer que le code est surchargé … Avec EF (EnhancedFlash) et plus spécifiquement sa librairie : EnhancedClip : </p>\n<pre><code class=\"hljs\"><span class=\"hljs-selector-tag\">obj</span>\n    <span class=\"hljs-selector-class\">.set</span>({<span class=\"hljs-attribute\">x</span>:<span class=\"hljs-number\">100</span>, <span class=\"hljs-attribute\">y</span>:<span class=\"hljs-number\">200</span>, <span class=\"hljs-attribute\">width</span>:<span class=\"hljs-number\">300</span>, <span class=\"hljs-attribute\">height</span>:<span class=\"hljs-number\">400</span>, <span class=\"hljs-attribute\">alpha</span>: .<span class=\"hljs-number\">4</span>})\n    <span class=\"hljs-selector-class\">.animate</span>( .<span class=\"hljs-number\">5</span>, {<span class=\"hljs-attribute\">x</span>:<span class=\"hljs-number\">4</span>, <span class=\"hljs-attribute\">y</span>:<span class=\"hljs-number\">2</span>, <span class=\"hljs-attribute\">scaleX</span>:<span class=\"hljs-number\">4</span>});\n</code></pre>\n<p>J&#39;essaierai de faire un petit site dans les jours à venir pour détailler les différentes fonctions. En attendant, n&#39;hésitez pas à regarder le code source, vous y découvrirez plein de petites choses utiles ! </p>\n<h3 id=\"fonctions-disponibles\">Fonctions disponibles</h3>\n<h4>addChildren / removeChildren</h4>\n<p>Ajoute / supprime un ensemble d&#39;enfants du MovieClip courrant. </p>\n<p>Exemple : </p>\n<pre><code class=\"hljs\">obj.addChildren([MovieClip1, MovieClip2, MovieClip3](/MovieClip1, MovieClip2, MovieClip3));\n</code></pre>\n<h4>addEvents / removeEvents</h4>\n<p>Ajoute / supprime un ensemble d&#39;événements. </p>\n<p>Exemple : </p>\n<pre><code class=\"hljs\">obj.addEvents([\n    {<span class=\"hljs-type\">name</span>:MouseEvent.MOUSE_OUT, <span class=\"hljs-keyword\">call</span>:<span class=\"hljs-keyword\">out</span>},\n    {<span class=\"hljs-type\">name</span>:MouseEvent.MOUSE_OVER, <span class=\"hljs-keyword\">call</span>:<span class=\"hljs-keyword\">over</span>});\n</code></pre>\n<h4>animate</h4>\n<p>Cette fonction utilise TweenMax pour réaliser des animations visuelles. Si vous préférez une autre librairie n&#39;hésitez pas à modifier la fonction en question pour l&#39;adapter à vos envies. </p>\n<p>Exemple : </p>\n<pre><code class=\"hljs\">obj.animate(\n    <span class=\"hljs-number\">.4</span>, <span class=\"hljs-comment\">// durée de l&amp;#39;animation </span>\n    {<span class=\"hljs-variable language_\">x</span>:<span class=\"hljs-number\">30</span>, <span class=\"hljs-variable language_\">y</span>:<span class=\"hljs-number\">30</span>} <span class=\"hljs-comment\">// description TweenMax</span>\n);\n</code></pre>\n<h3 id=\"tlcharger\">Télécharger</h3>\n<p>Cette librairie est gratuite. Néanmoins, elle ne pourra pas être vendue, ni commercialisée. Merci aussi de bien vouloir faire remonter vos éventuelles améliorations ! </p>\n<ul>\n<li><a href=\"/upload/archives/2009/03/ef.zip\">Télécharger</a></li>\n</ul>\n",
      "date_published": "2009-03-10T18:17:08.000Z",
      "tags": [
        "AS3",
        "Flash"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/email-et-identite-professionnelle",
      "url": "https://www.silent-strength.com/articles/email-et-identite-professionnelle",
      "title": "Email et identité professionnelle",
      "summary": "L'importance de choisir une adresse e-mail professionnelle appropriée pour construire une identité en ligne crédible auprès des recruteurs.",
      "content_html": "<p>**Avoir un email, c&#39;est pratique : n&#39;importe qui peut vous contacter, n&#39;importe quand et vous pouvez répondre quand vous pouvez et quand vous voulez. Avec les amis, aucune règle ne s&#39;applique, avec le monde professionnel … C&#39;est tout autre. Deux paramètres sont à prendre en compte : le nom d&#39;utilisateur et la signature. **</p>\n<p>Le nom d&#39;utilisateur doit vous représenter. Il est donc essentiel que ce soit votre nom et votre prénom. Exemple : <code>nom.prenom@gmail.com</code>. Autre chose : choisissez bien le service auquel vous souscrivez. Regardez lesquels se présentent comme très utilisés dans le monde professionnel. En général, aujourd&#39;hui, j&#39;ai remarqué que les adresses <code>@gmail.com</code>, <code>@yahoo.fr</code> (<code>@ymail.com</code> prochainement ?), <code>@laposte.fr</code> et les adresses en <code>.name</code> sont très populaires. </p>\n<p>Il est indispensable d&#39;éviter d&#39;utiliser des adresses comme <code>@voila.fr</code>, <code>@caramail.fr</code>, <code>@hotmail.com</code> qui appartiennent plus à un univers personnel. </p>\n<p>Ensuite, lorsque vous envoyez un email, il faut toujours se dire que la personne ne veut pas nécessairement y répondre par mail mais plutôt par téléphone. Au lieu de mettre une phrase du type &quot;<code>Vous pouvez me contacter au +33 xxx xxx xxx</code>&quot;, mettez en signature votre numéro de téléphone, l&#39;adresse de votre site web, de votre curriculum vitae et de votre portfolio si vous en avez un. </p>\n<h3 id=\"heading-0\">=========================================================</h3>\n",
      "date_published": "2008-06-27T09:25:31.000Z",
      "tags": [
        "Career",
        "Reflections"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/reussir-son-cv",
      "url": "https://www.silent-strength.com/articles/reussir-son-cv",
      "title": "Réussir son CV",
      "summary": "Conseils pratiques pour structurer, rédiger et designer un curriculum vitae percutant, adapté aux attentes des recruteurs dans le domaine de la technologie.",
      "content_html": "<p><strong>Aujourd&#39;hui, la toile propose quantités d&#39;articles pour réaliser un CV réussi. Ils parlent des différentes rubriques obligatoires et des différentes techniques pour mettre en avant des compétences. C&#39;est gentil, mais le design dans tout ça ? Un Curriculum Vitae réussi correspond à un mélange harmonieux entre sa propre personne / compétences et sa faculté de s&#39;exprimer.</strong></p>\n<h2 id=\"les-rubriques-obligatoires\">Les rubriques obligatoires</h2>\n<p>Plus le CV peut être complet et en rapport avec les métiers envisagés et plus son impact sera grand. En général, les sections &quot;<code>profil</code>&quot;, &quot;<code>experiences professionnelles</code>&quot;, &quot;<code>diplômes</code>&quot;, &quot;<code>autres</code>&quot; sont toujours présentes. </p>\n<p>D&#39;autres catégories facultatives peuvent être utilisées suivant les cas. Par exemple : un étudiant qui n&#39;a aucune expérience professionnelle devra obligatoirement mettre une catégorie experiences personnelles dans laquelle il décrira l&#39;ensemble de ses projets universitaires. </p>\n<p>Pour les développeurs, il est toujours bon d&#39;avoir une rubrique <code>compétences</code>, dans laquelle les technologies maîtrisées sont triées, ordonnées et classées suivant les métiers souhaités. </p>\n<h3 id=\"le-profil\">Le profil</h3>\n<p>Le profil comprend l&#39;ensemble des informations utiles pour mieux connaître l&#39;auteur du curriculum vitae : </p>\n<p>&lt;&gt;</p>\n<blockquote>\n<p>le nom<br>le prénom<br>la date de naissance<br>le status marital<br>le status social et / ou professionnel (exemple : <code>Développeur web</code>)<br>le(s) numéro(s) de téléphone<br>l&#39;email (éviter d&#39;utiliser des emails @hotmail.fr, @voila.fr et autres ...).<br>une photograhie<br>&lt;&gt; </p>\n</blockquote>\n<p>Pour certains métiers comme développeur web, il ne faut pas hésiter à mentionner l&#39;adresse de son site inte<br>et (s&#39;il est professionnel, évitez de donner un site avec un copyright suivit d&#39;un pseudonyme). </p>\n<h3 id=\"experiences-professionnelles\">Experiences professionnelles</h3>\n<p>Elles doivent obligatoirement être ordonnées de façon chronologiques avec la mention d&#39;une date de début et d&#39;une date de fin (pour le travail actuel, mettre pour la date de fin &quot;<code>aujourd&#39;hui</code>&quot;). Pour chaque ligne, il faut écrire clairement le nom de l&#39;entreprise d&#39;accueil ainsi que le rôle que vous y avez tenu (petite description). </p>\n<p>D&#39;autres informations peuvent être mentionnées comme par exemple la localisation physique et / ou l&#39;adresse du site web de l&#39;entreprise. </p>\n<h3 id=\"diplmes\">Diplômes</h3>\n<p>En règle générale, la section diplôme comprend les diplômes d&#39;états (<code>brevet national des collèges) et les diplômes annexes (exemple : </code>TOEIC<code>, </code>TOEFL<code>). Tout comme les expériences professionnelles, il ne faut pas oublier de mentionner le lieu de passage, la date d&#39;obtention et l&#39;intitulé précis (</code>baccalauréat scientifique svt option mathématiques``).</p>\n<h3 id=\"autres\">Autres</h3>\n<p>La rubrique Autres est un peu une section dans laquelle nous pouvons tout mettre : les langues maîtrisées, les voyages effectués, les associations affiliées et les passes-temps favoris. </p>\n<p>Cette rubrique ne doit pas non plus faire office d&#39;un goût exotique : mettre un nom d&#39;un chanteur favoris n&#39;est absolument pas une bonne idée (surtout si c&#39;est Cindy Sanders) ...</p>\n<h2 id=\"aspect-graphique\">Aspect graphique</h2>\n<p>Maintenant passons à la partie graphique ... Nous avons un ensemble d&#39;éléments qu&#39;il faut organiser en suivant quelques règles comme la sobriété, l&#39;alignement, l&#39;originalité et la relecture.  </p>\n<p>Dans un premier temps, il faut se munir d&#39;un logiciel qui effectue des traitements de mise en page (et non du traitement de texte classique). Il me semble que OpenOffice.Org propose un tel système. Pour le moment, j&#39;ai toujours fait mes CV sous iWork en mode &quot;<code>Mise en page</code>&quot; et non &quot;<code>Traitement de texte</code>&quot;.  </p>\n<h3 id=\"sobre-avant-tout\">Sobre avant tout</h3>\n<p>Un curriculum vitae doit rester le plus sobre possible et non être extravageant ... Otez de votre esprit l&#39;envie même de mettre un texte clignotant ou d&#39;utiliser une écriture comme Comic Sans Ms. L&#39;objectif reste de convaincre le lecteur au premier coup d&#39;oeil que vous êtes la personne de la situation. </p>\n<p>Cependant, vous pouvez toujours utiliser de la couleur, des écritures peu utilisées (Optima, Futura) mais il faut obligatoirement conserver une cohérence graphique du document. Voici une petite liste de polices utiles : <code>Arial</code>, <code>Verdana</code>, <code>Trebuchet ms</code>, <code>Optima</code>, <code>Futura</code>. </p>\n<h3 id=\"alignez-les-lments\">Alignez les éléments</h3>\n<p>Lorsque l&#39;on utilise un système de mise en page, il y a souvent en accompagnement des règles ou marqueurs horizontaux et verticaux permettant de vérifier que les éléments sont bien alignés. </p>\n<p>Voici un cas de texte non aligné : </p>\n<p>{{<br>; lang=&quot;no&quot;<br>PHP : *<br>MYSQL : *<br>APACHE : ***<br>}}</p>\n<p>En aligné : </p>\n<p>{{<br>; lang=&quot;no&quot;<br>PHP     :   *<br>MYSQL   :   *<br>APACHE  :   ***<br>}}</p>\n<p>Plus les éléments peuvent être alignés et plus le curriculum vitae aura un côté professionnel tout en ayant de l&#39;originalité. Le lecteur doit pouvoir prendre une règle et constater l&#39;harmonie générale du document. </p>\n<h3 id=\"ayez-de-l39originalit\">Ayez de l&#39;originalité !</h3>\n<p>Le troisième et de<br>ier élément est de mettre une dose d&#39;originalité. Si vous arrivez à vous démarquer par un document à deux colonnes, par un papier particulier ou encore par une écriture spéciale, vous aurez davantage de crédit de la part de la personne qui lira votre curriculum vitae en démontrant votre différence. </p>\n<p>Ainsi, si vous aimez le vert, n&#39;hésitez pas à mettre une puce en forme de feuille ou utiliser plus d&#39;une fois la couleur (à travers les titres, les mots clefs). </p>\n<h2 id=\"se-faire-relire\">Se faire relire</h2>\n<p>Cette de<br>ière étape me paraît importante dans le sens où nous faisons tous des fautes d&#39;alignement, des choix douteux en graphisme. La relecture nous apporte souvent un oeil extérieur sur notre travail et ne peut que nous faire progresser. </p>\n<p><strong>Par contre ne jamais oublier : les goûts et les couleurs ... c&#39;est à chacun d&#39;aimer ou de détester ! Essayez donc de choisir des couleurs accessibles à tous. Cette petite recette à vérifier point par point n&#39;est pas applicable pour tous les types de CV. Certains doivent nécessairement être conformistes : pas de colonnes, en mode traitement de texte avec une écriture Times New Roman de 12 pixels ...</strong></p>\n<h3 id=\"heading-10\">=========================================================</h3>\n",
      "date_published": "2008-04-30T17:19:45.000Z",
      "tags": [
        "Etudes",
        "Career"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/trouver-l-inspiration",
      "url": "https://www.silent-strength.com/articles/trouver-l-inspiration",
      "title": "Trouver l'inspiration",
      "summary": "Une exploration des sources d'inspiration pour les designers et développeurs web, s'appuyant sur l'ouvrage de Patrick McNeil et les tendances de l'époque.",
      "content_html": "<p><strong>Décrire une méthode efficace pour trouver l&#39;inspiration n&#39;est pas une chose évidente à écrire et encore moins à dire. Elle peut venir de tout et de rien, elle peut être simple comme compliquée à déterrer. Les sources d&#39;inspiration sont généralement multiples et permettent de se retrouver en apesanteur pour laisser ensuite libre court à notre créativité !</strong></p>\n<h3 id=\"o-trouver-l39inspiration\">Où trouver l&#39;inspiration ?</h3>\n<p>L&#39;inspiration est un ensemble d&#39;idées, de concepts permettant à l&#39;esprit de réaliser des abstractions totales pour donner à une page blanche un sens et des valeurs. Il s&#39;agit généralement de prendre en considération le monde extérieur, de grappiller des brides d&#39;informations, à droite, à gauche pour finalement déclencher une étincelle créative dans notre fort intérieur. </p>\n<h4>L&#39;inspiration directe</h4>\n<p>Elle se qualifie d&#39;elle même comme accessible facilement et reproductible. Elle se trouve aussi bien dans les magasines de design, les journaux, les livres de typographie, les présentations (cartes de visites, menus) et dans les show cases (design flavor par exemple). </p>\n<p>Malgré sa facilité d&#39;accès, il faut la travailler continuellement,  la nourrir pour qu&#39;elle puisse se détacher naturellement de tout ce qui existe aujourd&#39;hui et devenir ainsi innovante. En suivant régulièrement, on notifie des éléments plaisants, des concepts amusants qui peuvent ensuite servir à notre créativité. </p>\n<h4>L&#39;inspiration indirecte</h4>\n<p>Elle est un peu moins facile d&#39;accès, elle se trouve dans les musées, dans l&#39;histoire de l&#39;art, dans les livres. Ensuite, il faut dégager des idées nouvelles (fresh ideas) à partir de proportions. Par exemple reprendre l&#39;évolution du nombre d&#39;or ou encore les nombres premiers pour structurer l&#39;évolution d&#39;un texte (commencer à une taille de font : 1px puis ligne suivante : 2px puis 3px, 5px, 7px, 11px, 13px, 17px etc). </p>\n<p>Les deux types d&#39;inspiration ne sont pas nécessairement suffisantes pour trouver matière à travailler, il faut également adopter une approche créative. Elle correspond à une rupture avec la monotonie, avec les éléments pour pouvoir s&#39;ouvrir à d&#39;autres horizons. Les rencontres sont également très propices à adopter une telle approche : les différences culturelles facilitent la découvertes de voies encore inutilisées. Les brainstormings (recherche d&#39;idées par associations d&#39;idées instantanées ensuite triées) orientent et permettent aussi de trouver des brides de pistes. </p>\n<h3 id=\"comment-viter-l39abus-d39inspiration\">Comment éviter l&#39;abus d&#39;inspiration ?</h3>\n<p>Il arrive très fréquemment que nos productions ressemblent traits pour traits à nos sources d&#39;inspiration. Les cas de duplications non volontaires reposent souvent sur un manque de travail, sur une inspiration directe ou indirecte insuffisante. Pour éviter de se retrouver dans ce genre de situation, il faut penser en terme d&#39;éléments et donc pratiquer au maximum le brainstorming. L&#39;inspiration sert de début, de lancement. Une fois capturée, saisie, elle transforme notre vision même du contenu, elle bouge les sections de pages, les images, les éléments multimédias pour façonner sa forme finale. </p>\n<p>Je reprends une citation même de Patrick McNeil qui me semble très clairement justifiée :</p>\n<blockquote>\n<p>« <em>Take practice never ending process, inspiration take practice</em> »</p>\n</blockquote>\n<h3 id=\"current-design-trends\">Current design trends</h3>\n<h4>Organisation des éléments</h4>\n<p>Les tendances actuelles sont très discutables : il existe aujourd&#39;hui des tendances européennes et des tendances américaines. Patrick McNeil considère comme tendance la répartition des éléments dans la page avec des fonts différentes. En d&#39;autre terme : savoir efficacement briser la monotonie tout en pouvant se vendre efficacement. </p>\n<p>Un site web sert aujourd&#39;hui de vitrine pour un développeur et / ou designer web (les deux étant actuellement encore très reliés). Ainsi, avoir son nom et prénom en haut de page avec un texte de dimension assez considérable (30 voire 40px) montre, à tout lecteur, qu&#39;il faut s&#39;en souvenir. Cette technique impose même implicitement au lecteur l&#39;enregistrement de l&#39;information : il n&#39;a de toute évidence pas d&#39;autre choix que la voir. </p>\n<p>Une image de l&#39;auteur placé en header n&#39;est pas non plus négligeable. Il faut toujours gargé à l&#39;idée que le haut de page est une zone vue en premier. Il correspond à un moyen d&#39;expression considérable et à une connexion inévitable avec le lecteur. </p>\n<h4>After web 2.0, I want my brownies !</h4>\n<p>J&#39;adore vraiment ces gateaux chocolatés avec des pépites réparties à droite et à gauche, ce ne sont pas des cookies, ils sont moins durs ... mais presque !  Le marron, contrairement aux couleurs et tendances actuelles, est plus reposant et rentre parfaitement dans la thématique de cette année : l&#39;environnement. Il donne un aspect très sobre aux pages avec un petit côté vintage et sépia. La mode post-web 2.0.</p>\n<h3 id=\"future-design-trends\">Future design trends</h3>\n<p>De quoi demain sera composé ? Quelles sont les tendances à venir ? Tout d&#39;abord, il s&#39;agit des couleurs : la mode Apple et son côté ultra-sobre envahissent la toile pour venir imposer des couleurs légères, sobres et simples enterrant définitivement le web 2.0 avec son côté désespérant. Les couleurs sobres apportent à toutes les robes graphiques un côté très professionnel, stylisé et améliorent significativement l&#39;utilisabilité des pages.  </p>\n<p>Cependant, un petit côté crazy commence à s&#39;immiscer dans les normes : le you should feel it weird. Certains designer commencent à créer des designs complètements destructurés pour justement contraster avec les présentations actuelles : carrées, structurées, ordonnées. Les normes sont jetées par les fenêtres pour laisser place à l&#39;expression même de la personne. </p>\n<p>Un site web reste avant tout un espace d&#39;expression de sa propre identité : <em>you should do what you want</em>. </p>\n<h3 id=\"medias-next-web-generation\">Medias, next web generation ?</h3>\n<p>Alors que le Web 3.0 se veut sémantique, les designers commencent à voir l&#39;évolution du web comme de plus en plus formatrice de médiathèque : des vidéos incorporées dans flash pour donner un côté animé, vivant et humain. J&#39;avais déjà noté quelques années plus tôt un design assez novateur en terme de contenu : Great Pockets (sur Withstyle). </p>\n<p>Cette façon de s&#39;exprimer est assez nouvelle : des vidéocasts directement incorporés créent une rupture avec la monotonie des pages web actuelles. Elles proposent un contenu aussi bien visuel que sonore (un peu plus &quot;accessible&quot;  — mais ça reste du flash). </p>\n<p><strong>L&#39;inspiration se puise donc de façon mesurée sur un ensemble de sites, de créations artistiques déjà produites, d&#39;oeuvres de l&#39;esprit aussi bien sous forme écrite que visuelle. Enrichir également son inspiration quotidiennement favorise la création artistique et diminue considérablement la reproduction ou la duplication.</strong></p>\n",
      "date_published": "2008-04-23T10:49:20.000Z",
      "tags": [
        "Art",
        "Technologie",
        "Future Of Webdesign",
        "Patrick McNeil"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/glincer",
      "url": "https://www.silent-strength.com/articles/glincer",
      "title": "Glincer",
      "summary": "Introduction à Glincer, une solution JavaScript/jQuery légère facilitant les transitions dynamiques et l'interactivité sur les pages web.",
      "content_html": "<blockquote>\n<p><a href=\"/upload/glincer/glincer.zip\">Télécharger</a><br><a href=\"/upload/glincer/\">Démo</a></p>\n</blockquote>\n<h3 id=\"prsentation\">Présentation</h3>\n<p>Cette petite application donne un peu de dynamisme à votre site grâce aux infobulles accolées sur les liens. Cet effet, issu du <a href=\"/?propos/portfolio\">thème Modern</a>, a été adapté de telle sorte à être plus fluide et, surtout, fonctionnel sur un large panel de navigateurs. </p>\n<h3 id=\"fonctionnement\">Fonctionnement</h3>\n<p>Pour utiliser ce script, vous allez avoir besoin de JQuery dans sa dernière version. Ensuite, il faudra rajouter le code suivant dans vos pages web : </p>\n<pre><code class=\"hljs\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script</span> <span class=\"hljs-attr\">src</span>=<span class=\"hljs-string\">&quot;jquery.js&quot;</span> <span class=\"hljs-attr\">type</span>=<span class=\"hljs-string\">&quot;text/javascript&quot;</span>&gt;</span><span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">script</span>&gt;</span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script</span> <span class=\"hljs-attr\">src</span>=<span class=\"hljs-string\">&quot;glincer.js&quot;</span> <span class=\"hljs-attr\">type</span>=<span class=\"hljs-string\">&quot;text/javascript&quot;</span>&gt;</span><span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">script</span>&gt;</span>\n</code></pre>\n<p>Dans la partie entête ou corps de votre document, il faudra créer un &quot;objet&quot; Glincer et effectuer des appels à la méthode addToGlincer (qui sera décrire dans la section documentation). </p>\n<pre><code class=\"hljs\"><span class=\"language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script</span> <span class=\"hljs-attr\">type</span>=<span class=\"hljs-string\">&quot;text/javascript&quot;</span>&gt;</span><span class=\"language-javascript\">\n$(<span class=\"hljs-variable language_\">document</span>).<span class=\"hljs-title function_\">ready</span>(<span class=\"hljs-keyword\">function</span>(<span class=\"hljs-params\"></span>) </span></span><span class=\"language-xquery\">{\n        var GlincerLoader = new Glincer();\n        GlincerLoader.addToGlincer(&amp;#<span class=\"hljs-number\">39</span>;a&amp;#<span class=\"hljs-number\">39</span>;,{}</span><span class=\"language-xml\"><span class=\"language-handlebars\"><span class=\"language-xml\">,<span class=\"hljs-symbol\">&amp;#39;</span>glincer<span class=\"hljs-symbol\">&amp;#39;</span>);\n});\n</span></span><span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">script</span>&gt;</span></span>\n</code></pre>\n<h3 id=\"documentation\">Documentation</h3>\n<h4>addToGlincer</h4>\n<blockquote>\n<p>Description : Ajoute des liens dans Glincer.</p>\n</blockquote>\n<ul>\n<li><ol>\n<li>Le sélecteur des liens (correspond à un sélecteur JQuery).</li>\n</ol>\n</li>\n<li><ol start=\"2\">\n<li>Les conditions d&#39;affichage (voir plus bas).</li>\n</ol>\n</li>\n<li><ol start=\"3\">\n<li>Le nom de la classe CSS à utiliser.</li>\n</ol>\n</li>\n</ul>\n<h4>Conditions d&#39;affichage</h4>\n<blockquote>\n<p>Description : ensemble de conditions autorisant ou non la création d&#39;une infobulle Glincer.</p>\n</blockquote>\n<p>Paramètre <em>link</em> : Crée une restriction sur le type des liens à afficher.</p>\n<ul>\n<li><em>external</em> : Afficher des infobulles Ginger sous tous les liens contenant http://.</li>\n<li><em>internal</em> : Afficher des infobulles Ginger sous tous les liens locaux.</li>\n<li><em>both</em> : Afficher des infobulles sous tous les liens.</li>\n</ul>\n<p>Paramètre <em>title</em> : Pose une restriction sur les liens suivant le contenu de la balise title. </p>\n<ul>\n<li><em>needed</em> : N&#39;afficher que les liens ayant une balise title.</li>\n</ul>\n<h4>Code xhtml généré</h4>\n<p>Les infobulles Glincer sont générées par le code Javscript. Voici leur arborescence : </p>\n<ul>\n<li>div#glincer</li>\n<li><blockquote>\n<p>div#d-{id} classe CSS définie par le troisième argument de addToGlincer</p>\n</blockquote>\n</li>\n<li><blockquote>\n<blockquote>\n<p>Texte de l&#39;infobulle (correspond à la balise title).</p>\n</blockquote>\n</blockquote>\n</li>\n<li><blockquote>\n<blockquote>\n<p>span</p>\n</blockquote>\n</blockquote>\n</li>\n<li><blockquote>\n<blockquote>\n<blockquote>\n<p>Url (correspond à la balise href).</p>\n</blockquote>\n</blockquote>\n</blockquote>\n</li>\n</ul>\n<h4>Style CSS</h4>\n<p>Ce code CSS doit impérativement apparaître dans votre feuille de style : </p>\n<pre><code class=\"hljs\"><span class=\"hljs-selector-tag\">div</span><span class=\"hljs-selector-id\">#glincer</span> <span class=\"hljs-selector-tag\">div</span> {\n<span class=\"hljs-attribute\">position</span>:absolute;\n<span class=\"hljs-attribute\">top</span>:<span class=\"hljs-number\">0</span>;\n<span class=\"hljs-attribute\">left</span>:<span class=\"hljs-number\">0</span>;\n}\n</code></pre>\n<h4>Exemple</h4>\n<p>Code html : </p>\n<pre><code class=\"hljs\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p</span> <span class=\"hljs-attr\">id</span>=<span class=\"hljs-string\">&quot;apple&quot;</span>&gt;</span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a</span> <span class=\"hljs-attr\">href</span>=<span class=\"hljs-string\">&quot;/?carnet/tag/apple&quot;</span> <span class=\"hljs-attr\">id</span>=<span class=\"hljs-string\">&quot;piuf&quot;</span> <span class=\"hljs-attr\">title</span>=<span class=\"hljs-string\">&quot;test&quot;</span>&gt;</span>Apple<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">a</span>&gt;</span> met à jour \nsa gamme de <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a</span> <span class=\"hljs-attr\">href</span>=<span class=\"hljs-string\">&quot;http://apple.fr/macbook&quot;</span>&gt;</span>Macbook<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">a</span>&gt;</span> \n    et <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a</span> <span class=\"hljs-attr\">href</span>=<span class=\"hljs-string\">&quot;http://apple.fr/macbookpro&quot;</span>&gt;</span>Macbook Pro<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">a</span>&gt;</span>. \n<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">p</span>&gt;</span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p</span> <span class=\"hljs-attr\">class</span>=<span class=\"hljs-string\">&quot;etalors&quot;</span>&gt;</span>\nEt les <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a</span> <span class=\"hljs-attr\">href</span>=<span class=\"hljs-string\">&quot;http://apple.fr/imac&quot;</span> <span class=\"hljs-attr\">title</span>=<span class=\"hljs-string\">&quot;Hein ?&quot;</span>&gt;</span>iMac<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">a</span>&gt;</span> ?\n<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">p</span>&gt;</span>\n</code></pre>\n<p>Code javascript : </p>\n<pre><code class=\"hljs\">&lt;script <span class=\"hljs-keyword\">type</span>=<span class=\"hljs-string\">&quot;text/javascript&quot;</span>&gt;\n$(document).ready(function() {\n        <span class=\"hljs-built_in\">var</span> GlincerLoader = <span class=\"hljs-literal\">new</span> Glincer();\n        GlincerLoader.addToGlincer(&amp;#39;p#apple a&amp;#39;,{<span class=\"hljs-keyword\">link</span>:&amp;#39;external&amp;#39;},&amp;#39;glincer&amp;#39;); (<span class=\"hljs-number\">1</span>)\n        GlincerLoader.addToGlincer(&amp;#39;p.etalors a&amp;#39;,{<span class=\"hljs-keyword\">link</span>:&amp;#39;external&amp;#39;, title:&amp;#39;needed&amp;#39;},&amp;#39;glincer&amp;#39;); (<span class=\"hljs-number\">2</span>)\n});\n&lt;/script&gt;\n</code></pre>\n<p><strong>(1)</strong> Tous les liens du paragraphe d&#39;id <em>apple</em> étant de type &#39;external&#39; auront une infobulle Glincer. Par conséquent le premier lien ne sera pas affiché.<br><strong>(2)</strong> Tous les liens du paragraphe de classe <em>etalors</em> étant de type &#39;external&#39; et ayant obligatoirement un titre seront affichés. </p>\n<h3 id=\"compatibilit\">Compatibilité</h3>\n<p>Jusqu&#39;à présent, l&#39;application a été testée sous Safari et Firefox. Il se peut qu&#39;elle ne fonctionne pas sous Internet Explorer. </p>\n<h3 id=\"tlcharger\">Télécharger</h3>\n<p><a href=\"/upload/glincer/glincer.zip\">Télécharger Glincer</a></p>\n",
      "date_published": "2006-03-01T12:00:00.000Z",
      "tags": [
        "Javascript",
        "jQuery"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/interview-de-denis-boudreau",
      "url": "https://www.silent-strength.com/articles/interview-de-denis-boudreau",
      "title": "Interview de Denis Boudreau",
      "summary": "Une interview exclusive avec Denis Boudreau, expert en accessibilité web, discutant de l'importance des standards du W3C et de l'inclusion numérique.",
      "content_html": "<h3 id=\"pourriez-vous-brivement-vous-prsenter\">Pourriez-vous brièvement vous présenter ?</h3>\n<p><img src=\"/upload/interview/denis-boudreau.png\" alt=\"Denis Boudreau\"> Mon nom est Denis Boudreau et je suis co-responsable de Cybercodeur.net, un carnet Web portant sur les enjeux reliés à la normalisation du Web. Depuis près de trois ans, j&#39;essaie avec plus ou moins de succès de sensibiliser les développeurs Web, mais surtout leurs patrons et leurs clients, aux avantages inhérents de l&#39;application des normes issues du W3C, dont les principes d&#39;accessibilité et le respect de la sémantique. Afin de tenter de créer un momentum au Québec autour de ces normes, j&#39;ai fondé le collectif W3Québec l&#39;année dernière et j&#39;y occupe depuis le rôle de président.</p>\n<p>Outre des sites comme OpenWeb, Pompage et Webmaster-Hub, j&#39;ai le privilège de participer à l&#39;élaboration d&#39;[Opquast, le premier référentiel de bonnes pratiques qualité pour les services en ligne (que mes partenaires et moi-même inaugurerons le 27 septembre prochain). D&#39;un point de vue professionnel, je suis consultant, partageant mon temps entre l&#39;architecture d&#39;information, la direction de production, le développement et l&#39;analyse de sites Web.</p>\n<h3 id=\"d39un-point-de-vue-professionnel-tes-vous-ce-que-l39on-peut-considrer-comme-freelance-ou-faites-vous-partie-d39une-entreprise-combien-d39annes-d39tudes-faut-il-pour-pouvoir-arriver-obtenir-autant-de-qualification\">D&#39;un point de vue professionnel, êtes-vous ce que l&#39;on peut considérer comme freelance ou faites-vous partie d&#39;une entreprise ? Combien d&#39;années d&#39;études faut-il pour pouvoir arriver à obtenir autant de qualification ?</h3>\n<p>Le moins que l’on puisse dire, c’est que ma situation est particulière puisque je suis à la fois employé (salarié), pigiste (freelance) et entrepreneur. Je conserve actuellement des liens avec une société de développement Web pour laquelle je travaille à titre de salarié occasionnel, mais en même temps, j’offre mes services à certains employeurs passés comme pigiste à raison d’un nombre variable d’heures par semaine. À travers cela, j’en suis à finaliser l’offre de service de ma petite société individuelle, qui se spécialise dans l’analyse de la qualité de sites Web, la formation et la direction de production. Cette société, que je dirigeais à temps perdu depuis 1999, vient tout juste de prendre un nouvel envol en août 2004 alors que j’ai décidé d’y converger la plupart de mes activités professionnelles. Il me reste encore à tout lancer officiellement, mais ce n’est plus qu’une question de semaines.</p>\n<p>Quant au nombres d’années d’études pour en arriver à ce point, il n’y a pas de réponses officielles. Dans mon cas, c’est beaucoup plus l’expérience de terrain et les opportunités qui m’ont permise d’acquérir les compétences nécessaires à relever les défis qui se présentent à moi. Toutefois, il est clair que les premières années, mes crédits universitaires (même si étrangers à mon secteur d’activité) m’ont toujours servi à titre d’enrichissement culturel. Dernièrement, avec l’entreprise d’une maîtrise universitaire en communications et médias interactifs, c’est surtout l’œil d’autrui qui a changé pour m’accorder plus de crédibilité, même si concrètement, la formation que je suis ne m’apporte rien de plus techniquement pour accomplir mes activités. C’est surprenant parfois ce qu’un petit bout de papier peut changer dans la perception des gens qui vous entourent. Morale : terminez vos études, ça finit toujours par servir (//rires//) !</p>\n<h3 id=\"en-quoi-le-web-vous-a-t-il-intress\">En quoi le web vous a-t-il intéressé ?</h3>\n<p>Pour la petite histoire, mon parcours universitaire me destinait principalement à une carrière en littérature et/ou en rédaction (rédacteur, auteur, dramaturge, scénariste ou dieu sait quoi encore). Depuis toujours, j’ai su que je voulais écrire, scénariser, produire, créer, etc. Seulement, je ne m’étais jamais senti l’inspiration ou la détermination de pousser une de ces disciplines à fond, conscients qu’elles étaient toutes également invitantes à mes yeux. Le multimédia m’a permis très rapidement de satisfaire toutes ces envies, à petite échelle, sans en subir les désagréments : développer des plateformes pour m’exprimer, faire avancer mes idées, réunir des gens, réaliser des productions, des animations, etc. mais toujours sans avoir à faire le moindre compromis quant au contenu ou à la forme.</p>\n<p>De par la nature même du Web, j’ai senti que je pouvais devenir auteur, rédacteur, scénariste, réalisateur ou encore, producteur et ainsi me créer de toutes pièces. C’est d’ailleurs ce qui est arrivé avec Cybercodeur ; d’une simple liste de favoris, ce site est devenu un carnet Web ou je lançais quelques pistes de réflexions et par la suite, dans une certaine mesure, un site reconnu pour la promotion des normes du W3C. C’est donc cet aspect un peu chaotique du Web ou tout est permis qui m’a immédiatement intéressé. Par la suite, à tous les niveaux, ce ne fut qu’un tourbillon d’opportunités plus excitantes les unes que les autres.</p>\n<h3 id=\"pensez-vous-que-le-site-que-vous-maintenez-cybercodeurnet-apporte-un-rel-appui-lorsqu39il-s39agit-de-sensibiliser-en-quoi-avez-vous-pu-constater-son-utilit\">Pensez-vous que le site que vous maintenez (Cybercodeur.net) apporte un réel appui lorsqu&#39;il s&#39;agit de sensibiliser ? En quoi avez-vous pu constater son utilité ?</h3>\n<p>Avec toute l’énergie que Bleizig et moi investissons dans ce projet, j’espère que le site fait au moins une petite différence au niveau de l’évangélisation des bonnes pratiques de développement Web ! À la lumière des commentaires positifs nous étant envoyés régulièrement, j’ai lieu de croire que oui. Je suis toutefois sous l’impression que cybercodeur.net ne figure pas du tout au nombre des sites réellement importants dans la blogosphère, du moins d’un point de vue technique. Qui plus est, seulement dans la dernière année, une armée de nouveaux bloggueurs drôlement intéressants sont venus gonfler les rangs des promoteurs des normes et de l’accessibilité, tout en sachant injecter du sang neuf et de nouvelles idées au discours déjà vieillissant des évangélistes de première vague.</p>\n<p>En fait, si je devais identifier ce sur quoi l’intérêt de cybercodeur.net repose (chose difficile à faire compte tenu que je ne me lis pas avec le même œil), ce serait plutôt sur les prises de positions, les remises en question naïves et les réflexions de fond, portées sur les enjeux et les technologies reliées au monde du Web. Ce sont ces interventions, mises en mot selon le point de vue d’individus évoluant à travers cette industrie au jour le jour qui révèlent le véritable intérêt du site…</p>\n<h3 id=\"vous-parlez-souvent-d39-avantages-des-normes-quels-en-sont-les-principaux-et-en-quoi-une-entreprise-doit-elle-porter-un-intrt-particulier-leur-utilisation\">Vous parlez souvent d&#39; « avantages des normes », quels en sont les principaux et en quoi une entreprise doit-elle porter un intérêt particulier à leur utilisation ?</h3>\n<p>Quiconque dirige une entreprise ayant des visées de performance et de rentabilité sur le Web se doit de comprendre d’emblée que la promesse de succès passe d’abord et avant tout par des stratégies éprouvées de mises en marché, basées (entre autres choses) sur des méthodes de conception conformes à des normes ouvertes et évolutives telles que celles édictées par le W3C. Google nous démontre que la question des avantages des normes est de mieux en mieux documentée d’un point de vue technique, mais le discours collectif est encore immature et trop orienté vers des publics conquis d’avance, vers des communautés souvent fermées et inaccessibles à la moyenne des ours. Rarissimes sont les documents efficacement destinés aux décideurs, dans un langage capable de les interpeller. À mon sens, c’est ce qui expliquerait la faiblesse actuelle de l’engouement de la part des preneurs de décisions. Comme la documentation existe abondamment pour convaincre le codeur, il faut dorénavant intervenir en amont pour éduquer les décideurs. Il faut parvenir à transcender notre langage technique pour traduire, dans les mots de ceux-ci, toute la portée de notre discours.</p>\n<p>Parmi les avantages les plus alléchants, notons simplement les promesses d’économies en temps et argent pour la maintenance et l’exploitation du site, une plus grande disponibilité des contenus pour le public, une flexibilité accrue dans la gestion quotidienne, une optimisation significative des temps de téléchargements des pages, une meilleure visibilité dans les moteurs de recherche, etc. Si ces décideurs sont de plus en plus conscients qu’il est possible pour eux d’exiger des sites Web durables par opposition aux sites Web jetables que les agences leur ont jusqu’à ce jour vendu, ils ne disposent toujours pas d’outils fiables pour les aider à discuter d’égal à égal avec leurs fournisseurs. C’est justement le défi qu’une association comme W3Québec entend relever ; outiller les décideurs afin de les aider à faire des choix plus éclairés, tout en apprenant à communiquer d’égal à égal avec les armées de technologues.</p>\n<h3 id=\"l39association-que-vous-maintenez-quelles-sont-ses-perspectives-d39avenir-a-t-elle-quelques-influences-directes-ou-indirectes-sur-d39ventuels-choix-du-w3c\">L&#39;association que vous maintenez, quelles sont ses perspectives d&#39;avenir ? A-t-elle quelques influences directes ou indirectes sur d&#39;éventuels choix du W3C ? ?</h3>\n<p>Compte tenu de sa mission première qui est de promouvoir la qualité du développement Web dans l’industrie, les perspectives d’avenir de W3Québec sont excellentes, puisque le marché québécois est en train d’atteindre un premier degré de maturité. Les décideurs s’éveillent tranquillement à une volonté de mesurer concrètement la qualité des services qui leur sont offerts par les divers acteurs de l’industrie. De plus en plus conscients que l’industrie du Web, contrairement à celles du cinéma, de la télévision ou de la radio ne repose concrètement sur aucune norme à proprement parler, les décideurs exercent une pression de plus en plus tangible pour que soit appliqués des standards visant à corriger et prévenir les abus dont ils sont souvent victimes.</p>\n<p>En ce sens, nos activités et celles du W3C sont intrinsèquement liées, mais pour le moment, là s’arrêtent toutes relations. Outre le fait de compter parmi nos rangs un employé du Consortium en la personne de Karl Dubost et de prévoir dans un plan quinquennal l’inauguration d’un centre de formation couplé d’un premier bureau officiel du W3C au Québec, W3Québec n’entretient aucune relation privilégiée avec le W3C, pas plus qu’elle ne joue un rôle d’influence auprès des décisions prises par celui-ci.</p>\n<h3 id=\"opquast-a-dj-t-mentionn-dans-l39une-de-vos-publications-sur-cybercodeur-quels-sont-vos-souhaits-personnels-concernant-l39volution-et-l39utilisation-de-ce-site\">Opquast a déjà été mentionné dans l&#39;une de vos publications sur Cybercodeur. Quels sont vos souhaits personnels concernant l&#39;évolution et l&#39;utilisation de ce site ?</h3>\n<p>J’ai le privilège d’avoir été approché pour faire partie de l’équipe qui est à mettre sur pied le projet Opquast, qui se veut un référentiel de quelques 200+ bonnes pratiques documentées en matière de conception de sites Web. Allant du respect des normes aux principes d’ergonomie cognitive, en passant par les rouages du commerce électronique et la saine gestion des hyperliens, ce projet est voué à rapidement devenir une référence en la matière puisqu’à ma connaissance, il ne lui existe aucun égal. Je crois honnêtement qu’Opquast sera à 2004 ce que OpenWeb aura été à 2003 ; un point tournant fondamental dans la quête de la gestion de la qualité sur le Web, le couteau suisse de la qualité sur Internet que tous les webmestres voudront traîner dans leur poche. Difficile pour le moment de formuler un souhait précis quant à l’évolution ou l’utilisation du projet, si ce n’est qu’il continue d’avoir si bonne presse (malgré sa nature temporairement imparfaite), le lancement officiel n’étant prévu que pour le 27 septembre prochain. C’est bien évidemment un projet à suivre et à adopter, que je n’hésiterais pas à qualifier comme étant le projet le plus stimulant de ma carrière. Je lui souhaite évidemment longue vie, et tout le succès qu’il mérite.</p>\n<h3 id=\"vous-parlez-beaucoup-de-vos-projets-actuels-participation-active-chez-webmaster-hub-pompage-openweb-cybercodeur-mais-quel-tait-votre-premier-projet-votre-premire-cration-ou-votre-premire-participation-sur-la-toile-et-depuis-quand-connaissez-vous-et-avez-vous-accs-au-net\">Vous parlez beaucoup de vos projets actuels : participation active chez Webmaster-hub, Pompage, Openweb, Cybercodeur ... Mais quel était votre premier projet ? Votre première création ou votre première participation sur la toile ? Et depuis quand connaissez-vous et avez-vous accès au Net ?</h3>\n<p>Comme la plupart des concepteurs Web, c’est avec une certaine dose de gratitude pleinement assumée que je remercie les services d’hébergements gratuits qui existaient dans les années 90 de ne pas avoir survécu au tournant du millénaire et d’avoir entraîné dans leur descente aux enfers les sites qu’ils hébergeaient sur leurs serveurs (du moins les miens). Ainsi, en 2004, il ne reste heureusement presque plus aucune trace de ses sites sur le Web qui, évidemment, brillaient par la non qualité de leur production. Comme la plupart des gens qui cherchent un prétexte pour aligner leurs premières balises HTML, mes premiers sites furent dirigés vers mes intérêts de l’époque. Dans mon cas, ces sites portèrent sur les arts martiaux et la littérature française.</p>\n<p>Je me rappelle encore apprendre à faire des recherches avec Yahoo à l’époque pour nourrir mes contenus et créer mes premières pages Web. Ma première rencontre avec le Web fut déterminante ; nous étions en fin 1997, l’année ou j’ai réellement découvert les ordinateurs… parce que contrairement à ce qui semble être une perception répandue (et qui m’amuse toujours beaucoup), je ne suis pas du tout un expert en informatique ayant codé ses premiers programmes à 6 ans. Si je devais me qualifier, je parlerais plus d’un autodidacte qui a toujours limité ses apprentissages aux choses qui l’intéressaient particulièrement (ce qui implique un profil forcément imparfait).</p>\n<h3 id=\"tout-en-restant-dans-le-sujet-des-sites-que-pensez-vous-des-sites-la-chane-raliss-sur-des-sites-de-services-pensez-vous-qu39une-telle-banalisation-puisse-nuire-aux-actions-menes-par-le-w3c-et-votre-propre-collectif\">Tout en restant dans le sujet des sites, que pensez-vous des sites à la chaîne (réalisés sur des sites de services) ? Pensez-vous qu&#39;une telle banalisation puisse nuire aux actions menées par le W3C et votre propre collectif ?</h3>\n<p>Si je crois aux vertus de l’automatisation dans un projet Web pour éliminer les actions répétitives et coûteuses en temps, je ne crois pas encore entièrement aux sites produits à la chaîne tels que vous l’entendez. D’une part, je reconnais leur importance indéniable, puisqu’ils permettent à des millions d’utilisateurs de s’exprimer sur le Web sans avoir à traverser un processus d’apprentissage difficile. En ce sens, ils sont essentiels à la prolifération des idées. Mais d’autre part, je condamne le désintéressement des producteurs de ces outils à offrir à ces mêmes utilisateurs des produits de qualité, capables d’assurer une portabilité, une interopérabilité et une accessibilité exemplaire de leurs productions. J’espère que nous verrons rapidement le jour ou ces outils s’affaireront à produire du contenu conformément structuré, parce qu’il est clair qu’ils sont de plus en plus populaires…</p>\n<p>À mon sens, si la responsabilité de voir à ces préoccupations revient à tout le monde, il n’en demeure pas moins qu’elle repose essentiellement sur les épaules de ceux qui ont la prétention d’offrir des outils professionnels de publication pour les gens non techniques. Les utilisateurs de ces outils sont, pour la plupart, désintéressés par la technique ; les outils qu’ils utilisent devraient donc se charger de ces préoccupations en leur nom. D’ailleurs, là repose tout l’intérêt de militer pour le respect des standards Web : afin de faire en sorte qu’un jour, plus personne n’ait besoin d’en entendre parler puisqu’ils seront intrinsèquement liés à tous les documents publiés sur le Web, comme c’est la cas pour tous les films produits par l’industrie du cinéma.</p>\n<h3 id=\"vous-parlez-de-l39-analyse-de-site-web-quels-en-sont-les-principaux-lments\">Vous parlez de l&#39; « analyse de site web », quels en sont les principaux éléments ?</h3>\n<p>Comme je collabore étroitement avec des spécialistes de la gestion de la qualité sur une base quotidienne, je me penche principalement sur les aspects techniques reliés aux sites Web : qualité du code, respect des normes, principes d’accessibilité, optimisation des documents, visibilité dans les moteurs de recherche, application de bonnes pratiques, etc. Dans le cadre de ces analyses, j’évalue ces différents points selon des grilles et des outils précis, afin d’établir des diagnostics sur l’état de qualité des sites Web évalués. Contrairement à la plupart des services du même ordre qui se contentent de mesurer certains indices d’efficacité basés sur la performance en surface (utilisabilité ou ergonomie des interfaces par exemple), je m’efforce de dépasser ce qu’un utilisateur peut voir pour m’intéresser à ce qu’un utilisateur peut vivre. Ainsi, en me permettant de pousser mes analyses jusque sous le capot des sites Web, celles-ci permettent de dresser des diagnostics de santé beaucoup plus complexes et complets que de simples analyses ergonomiques. Une fois ces constats dressés, il devient possible d’intervenir auprès des décideurs pour les aider à mettre en place des stratégies efficaces visant à rectifier les problématiques avec lesquelles ils sont aux prises.</p>\n<h3 id=\"ne-connaissant-pas-l39architecture-d39information-pourriez-vous-nous-en-dire-d39avantage\">Ne connaissant pas « l&#39;architecture d&#39;information », pourriez-vous nous en dire d&#39;avantage ?</h3>\n<p>L’architecture d’information est un domaine crucial du développement Web et curieusement, c’est probablement un des domaines les plus méconnus et les moins populaires de notre industrie. En effet, les tâches de l’architecte sont souvent réparties avec plus ou moins d’efficacité entre le chargé de projet et les membres de son équipe. Concrètement, la pratique consiste à organiser et structurer les contenus d’un site Web pour optimiser la teneur du message qui permettra de bien cibler le public auquel le site s’adresse ; combien de sections le site comportera t-il, quels en seront les libellés et les contenus, quel sera le niveau de langage utilisé, comment sera organisée l’arborescence, que retrouvera t-on dans la navigation, y aura t-il différents niveaux de navigation, si oui, comment seront-ils organisés, etc.</p>\n<p>C’est sur les épaules de l’architecte d’information que repose bien souvent la charge de scénariser les sites Web, de planifier l’interaction entre l’interface et l’utilisateur, d’élaborer les procédures transactionnelles, de rédiger les storyboards, d’évaluer le degré d’ergonomie et de convivialité ainsi que plusieurs autres tâches connexes permettant d’élaborer les cahiers de charge qui renseigneront les équipes de développement lors de la réalisation de leur travail et ce, toujours d’un point de vue conceptuel. À la jonction entre le designer, l’intégrateur et le programmeur, l’architecte d’information est celui qui, de mon point de vue, tient les ficelles et permet aux projets de réellement prendre forme.</p>\n<h3 id=\"une-dernire-dclaration\">Une dernière déclaration ?</h3>\n<p>En fait, pour le verbomoteur que je suis, il y aurait énormément de choses à ajouter, en commençant par discuter plus en détails de l&#39;évolution des projets W3Québec et Opquast ! (rires)</p>\n<p>Mais par respect pour tous ces patrons qui perdent présentement une fortune alors que leurs employés lisent ces lignes, je me contenterai de remercier la dynamique équipe de JustBreathe de m&#39;avoir donné la chance de m&#39;exprimer sur certains des points composant cette entrevue. Bien que je sois habitué à livrer mes opinions sur C², il est plutôt rare que ma motivation à m&#39;exprimer soit générée de l&#39;extérieur... D&#39;ailleurs, les réflexions amorcées dans cette entrevue se poursuivront inévitablement sur cybercodeur.net alors si des lecteurs souhaitent réagir à mes propos, ils sauront où me trouver !</p>\n",
      "date_published": "2005-11-20T12:00:00.000Z",
      "tags": [
        "Standards",
        "Accessibility",
        "Interview"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/securisation-des-trackbacks",
      "url": "https://www.silent-strength.com/articles/securisation-des-trackbacks",
      "title": "Sécurisation des trackbacks",
      "summary": "Analyse des problèmes de spam liés aux trackbacks de blogs et présentation des méthodes de sécurisation et de filtrage pour s'en prémunir.",
      "content_html": "<p><img src=\"https://images.unsplash.com/photo-1558494949-ef010cbdcc31?q=80&w=1200&auto=format&fit=crop\" alt=\"Les trackbacks\"></p>\n<p>Les trackbacks posent aujourd’hui de nombreux problèmes à leurs utilisateurs. Malheureusement, de nombreux systèmes de spam ont vu le jour ces derniers temps. Ils agissent certainement comme des engines, comme des araignées qui captent les adresses et vérifient s’il ne s’agit pas d’une adresse de trackback (de la même manière que les adresses emails). Enfin, dire que ce problème est uniquement actif sur les trackbacks est faux puisque les commentaires passent aussi au peigne fin.</p>\n<p>La difficulté d’une mise en place d’un système de sécurité pour les trackbacks réside essentiellement dans l’automatisation de la tâche. Ainsi, la méthode qui semblerait être la plus fiable serait une liste des sites autorisés à publier des trackbacks par une vérification de l’adresse contenue dans url. Une liste noire semble être adapté, mais il faut y voir des limites : si votre site commence progressivement à être démarqué des autres et si vos visiteurs augmentent, le nombre d’utilisateurs de cette fonction risque fort d’accroître de la même manière. L’idée, qui semble alléchante, a en fait des limites.</p>\n<p>La seconde idée est en fait l’ajout d’une étape : l’affichage d’une image contenant un texte qu’il faut retaper (de la même manière qu’une zone d’inscription, de commentaire etc.). Il faut donc ajouter au trackback une sorte de préliminaire dans lequel un ID sera attribué au futur trackbacks et une image sera affichée. L’auteur tape les informations, recopie le texte vu sur l’image puis valide le formulaire. Du côté serveur, les données seront triées, le script se chargera de vérifier la correspondance ID / clef. Si, et uniquement si, toutes les informations sont correctes, le script enregistrera la demande, dans le cas inverse, elle sera refusée.</p>\n<p>Toutes ces idées n’ont qu’un seul et unique objectif : éviter la présence de spam. Après, il faut voir comment le système se débrouille lorsqu’il est autonome pour voir quelle solution semble être la plus adaptée.</p>\n",
      "date_published": "2005-10-31T13:43:28.000Z",
      "tags": [
        "Logiciels"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/les-trackbacks",
      "url": "https://www.silent-strength.com/articles/les-trackbacks",
      "title": "Les trackbacks",
      "summary": "Une introduction au fonctionnement des trackbacks, un mécanisme de communication inter-blog permettant de notifier la création de liens entre articles.",
      "content_html": "<h2 id=\"introduction\">Introduction</h2>\n<h3 id=\"prsentation\">Présentation</h3>\n<p>Les trackbacks ont été créés par Benjamin et Mena Trott en Août 2002. Suite à cela, une spécification a été écrite et est disponible sur le site de movabletype.</p>\n<p>Ce système correspond à du <em>peer-to-peer</em> entre sites web puisque des informations sont échangées sous le protocole <em>HTTP</em> (en méthode <em>POST</em>). Il y aura donc deux serveurs (ou deux sites) qui entreront en communication et qui échangeront des données.</p>\n<h3 id=\"ide-des-trackbacks\">Idée des trackbacks</h3>\n<p>L&#39;idée des trackbacks est de relier des sites web entre eux, ou plus particulièrement des pages de sites web avec d&#39;autres pages d&#39;un autre site web qui ont le même sujet.</p>\n<p>On va prendre l&#39;exemple de deux blogs : A et B qui parlent d&#39;un sujet C (la LEN par exemple). Le blog B va envoyer des requêtes au blog A. Le blog A va enregistrer les données envoyées par le blog B et affichera dans une zone l&#39;adresse du sujet présent sur le blog B.</p>\n<p>L&#39;interêt à retenir, c&#39;est que les visiteurs du blog A auront une liste de liens à suivre si le sujet les intéresse. Il y a également le fait que c&#39;est un système automatique qui peut dans certains cas s&#39;avérer très utile (référant permanent ...).</p>\n<p>Un système de trackbacks peut se réduire à un formulaire en HTML. Seulement dans ce cas, il faudra un navigateur web.</p>\n<h3 id=\"exemples\">Exemples</h3>\n<p>Concept datant de 2002, les trackbacks sont aujourd&#39;hui très répandus sur la toile. Dans la plus grande majorité des cas, ce sont les blogs qui dominent cette technologie (exemple de système de gestion de blog : DotClear).</p>\n<p>Les exemples ne manquent donc pas, mettez simplement : dotclear dans google ou alors, visitez le blog de l&#39;auteur de DotClear et observez les zones appellées trackbacks. </p>\n<h2 id=\"ct-serveur-local\">Côté serveur local</h2>\n<h3 id=\"prsentation\">Présentation</h3>\n<p>Le serveur local est le serveur qui envera les informations et recevra un listing des éventuelles erreurs (elles seront retournées en XML et proviendront du serveur distant). Ensuite, il traitera les informations pour afficher le message de réussite ou d&#39;échec.</p>\n<h3 id=\"principe\">Principe</h3>\n<p>Les informations envoyées au serveur distant utilisent le protocole HTTP en méthode POST.</p>\n<p>La méthode GET a été supprimé de la spécification depuis janvier 2003.</p>\n<p>Dans notre cas, nous allons utiliser le php (testé avec apache2) pour faire fonctionner le système (donc les sources présentes dans la suite de cet article sont uniquement disponibles pour php).</p>\n<p>L&#39;envoi des informations par le protocole HTTP (suivant le système de socket pour établir une connexion à un serveur distant) est plus simplement appellé <strong>Requêtes HTTP</strong>. Les requêtes seront la base de la communication entre les deux serveurs.</p>\n<p>Plusieurs données (aussi appellés paramètres) seront envoyées par l&#39;intermédiaire des requêtes dont la plus importante est <strong>l&#39;url</strong>.</p>\n<h3 id=\"les-diffrents-paramtres\">Les différents paramètres</h3>\n<p>La liste des paramètres n&#39;est pas extrêmement longue :</p>\n<ul>\n<li><strong>title</strong> : définit le titre de l&#39;entrée (bien souvent ce qui sera entre la balise title de votre page web)</li>\n<li><strong>excerpt</strong> : un extrait de votre page web et il ne doit pas dépasser 250 caractères. Ce procédé permet de pouvoir stocker le texte dans un champs SQL de type varchar dont la longueur ne peut pas dépasser le nombre de caractères aloués.</li>\n<li><strong>url</strong> : l&#39;adresse permanente (du ticket dans le cas d&#39;un blog)</li>\n<li><strong>blog_name</strong> : le nom du blog ou du site qui envoi le ping (par exemple : xethorn.net)</li>\n</ul>\n<p>L&#39;ensemble des paramètres (ou arguments) mis ci-dessus, ne sont pas obligatoires sauf url qui est celle demandé par la majorité des systèmes de trackbacks.</p>\n<h3 id=\"requtes-http-en-mthode-post\">Requêtes HTTP en méthode POST</h3>\n<p>Dans un premier temps, la requête HTTP va verifier si le serveur distant est disponible, ensuite, elle ouvrira la page appropriée en méthode <em>POST</em> envoyant, par la même occasion, les différents arguments/paramètres (les un après les autres).</p>\n<blockquote>\n<p>Le format dans lequel les arguments seront envoyés correspond à <em>application/x-www-form-urlencoded</em>.</p>\n<p>Il faudra donc penser à mettre en place une fonctionnalité qui se charge de convertir. Pour les personnes utilisant php, la fonctionnalité à utiliser est urlencode.</p>\n</blockquote>\n<p>N&#39;oubliez pas de séparer les paramètres en utilisant l&#39;esperluette (le <strong>&amp;</strong>).</p>\n<blockquote>\n<p>N&#39;encodez pas le caractère de séparation avec votre fonction, sinon, le langage que vous utilisez ne saura pas détecter la différence entre le <em>nom de l&#39;argument</em> et <em>sa valeur</em>. De plus vos arguments peuvent être considérés comme invalides ou manquants.</p>\n</blockquote>\n<p>Au final, votre requête aura comme aspect (d&#39;un point de vue protocole HTTP) :</p>\n<pre><code class=\"hljs\"><span class=\"hljs-keyword\">POST</span> http:<span class=\"hljs-comment\">//www.foo.com/mt-tb.cgi/5</span>\nContent-<span class=\"hljs-keyword\">Type</span>: application/x-www-<span class=\"hljs-keyword\">form</span>-urlencoded\ntitle=Foo+Bar&amp;url=http:<span class=\"hljs-comment\">//www.bar.com/&amp;excerpt=My+Excerpt&amp;blog_name=Foo</span>\n</code></pre>\n<h3 id=\"exemples\">Exemples</h3>\n<p>Pour illustrer l&#39;envoi, je vous propose d&#39;analyser un exemple de code source en php que j&#39;ai réalisé pour l&#39;occasion (et qui est libre de droit, vous pouvez le réutiliser comme bon vous semble).</p>\n<pre><code class=\"hljs\"><span class=\"hljs-meta\">&lt;?php</span>\n<span class=\"hljs-comment\"># Données</span>\n<span class=\"hljs-variable\">$donnees</span> =  &amp;<span class=\"hljs-comment\">#39;title=&amp;#39;.urlencode(&amp;#39;Le titre du message&amp;#39;)</span>\n        .&amp;<span class=\"hljs-comment\">#39;&amp;url=&amp;#39;.urlencode(&amp;#39;http://www.adresse.com/du/message.php&amp;#39;)</span>\n        .&amp;<span class=\"hljs-comment\">#39;&amp;excerpt=&amp;#39;.urlencode(&amp;#39;L\\&amp;#39;extrait : sans code HTML&amp;#39;)</span>\n        .&amp;<span class=\"hljs-comment\">#39;&amp;blog_name=&amp;#39;        .urlencode(&amp;#39;Nom du blog&amp;#39;);</span>\n\n<span class=\"hljs-comment\"># Ouverture du socket</span>\n<span class=\"hljs-comment\">// Pas de http:// dans le premier argument</span>\n<span class=\"hljs-comment\">// fsockopen(&amp;#39;http://www.votresite.org&amp;#39;,  80, $errno, $errstr) sera considéré comme invalide</span>\n<span class=\"hljs-variable\">$sock</span> = <span class=\"hljs-title function_ invoke__\">fsockopen</span>(&amp;#<span class=\"hljs-number\">39</span>;www.votresite.org&amp;#<span class=\"hljs-number\">39</span>;, <span class=\"hljs-number\">80</span>, <span class=\"hljs-variable\">$errno</span>, <span class=\"hljs-variable\">$errstr</span>);\n\n<span class=\"hljs-comment\"># Requetes</span>\n<span class=\"hljs-comment\">// On ouvre la page en méthode POST</span>\n<span class=\"hljs-comment\">// Dans le cas où il se trouve ailleur qu&amp;#39;a la racine du site</span>\n<span class=\"hljs-comment\">// mettez : /le_dossier/url.php</span>\n<span class=\"hljs-title function_ invoke__\">fputs</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-string\">&quot;POST /url.php HTTP/1.0\\r\\n&quot;</span>);\n\n<span class=\"hljs-comment\">// On définit l&amp;#39;host</span>\n<span class=\"hljs-title function_ invoke__\">fputs</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-string\">&quot;Host:www.votresite.org \\r\\n&quot;</span>);\n\n<span class=\"hljs-comment\">// On définit le format des données</span>\n<span class=\"hljs-title function_ invoke__\">fputs</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-string\">&quot;Content-type: application/x-www-form-urlencoded\\r\\n&quot;</span>);  <span class=\"hljs-comment\">// définition du format</span>\n\n<span class=\"hljs-comment\">// On définit la taille des données envoyés par l&amp;#39;intermediaire</span>\n<span class=\"hljs-comment\">// de la fonction strlen()</span>\n<span class=\"hljs-title function_ invoke__\">fputs</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-string\">&quot;Content-length: &quot;</span> . <span class=\"hljs-title function_ invoke__\">strlen</span>(<span class=\"hljs-variable\">$donnees</span>) . <span class=\"hljs-string\">&quot;\\r\\n&quot;</span>); <span class=\"hljs-comment\">// taille</span>\n\n<span class=\"hljs-comment\">// On définit les différents langages acceptés</span>\n<span class=\"hljs-comment\">// Ici, tout est défini de telle manière que l&amp;#39;on accepte tout</span>\n<span class=\"hljs-title function_ invoke__\">fputs</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-string\">&quot;Accept: */*\\r\\n&quot;</span>); <span class=\"hljs-comment\">// données acceptés par le navigateur</span>\n\n<span class=\"hljs-comment\">// On envoi les données</span>\n<span class=\"hljs-title function_ invoke__\">fputs</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-string\">&quot;\\r\\n&quot;</span>); <span class=\"hljs-comment\">// Ligne de séparation</span>\n<span class=\"hljs-title function_ invoke__\">fputs</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-string\">&quot;<span class=\"hljs-subst\">$donnees</span>\\r\\n&quot;</span>); <span class=\"hljs-comment\">// Envoi des données</span>\n<span class=\"hljs-title function_ invoke__\">fputs</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-string\">&quot;\\r\\n&quot;</span>); <span class=\"hljs-comment\">// Ligne de séparation</span>\n\n<span class=\"hljs-comment\">// Fermeture du socket</span>\n<span class=\"hljs-title function_ invoke__\">fclose</span>(<span class=\"hljs-variable\">$sock</span>);\n<span class=\"hljs-meta\">?&gt;</span>\n</code></pre>\n<p>Le code est structuré en 3 grandes parties :</p>\n<h4>L&#39;ouverture du socket puis de la page appropriés</h4>\n<p>Les sockets, avec php, sont ouverts grâce à la fonction fsockopen. Cette fonction ne doit en aucun cas contenir de &quot;http://&quot; dans son premier argument (sinon, php ne comprendra pas à quoi cela correspond).</p>\n<p>Ensuite, on commence à envoyer des données grâce à la fonction fputs. La première donnée envoyée est l&#39;adresse du fichier sur le serveur distant. Dans l&#39;exemple situé au dessus, nous sommes sur la page <em>/url.php</em> qui est présente sur <em><a href=\"http://www.votresite.org/url.php\">http://www.votresite.org/url.php</a></em>.</p>\n<h4>Envoi d&#39;informations pour le traitement</h4>\n<p>Puis, il faut envoyer (toujours par fputs) les informations qui permettront à Apache (ou un autre serveur distant) de comprendre les informations envoyées en URL telles que le format des données (<em>application/x-www-form-urlencoded</em>) mais aussi la taille de ses paramètres destinés au système de trackbacks (<em>Content-length</em>).</p>\n<h4>Envoi des paramètres</h4>\n<p>Les paramètres sont également envoyés par fputs. Par contre, observez bien lorsque la variable $donnees est définie. Vous verrez que la fonction urlencode est utilisée uniquement pour la partie valeur des <em>arguments</em> et non <em>le nom des arguments</em>.</p>\n<p>Maintenant, il reste à voir la lecture des informations côté serveur distant ainsi que la réception des éventuelles erreurs sur le serveur local.</p>\n<h2 id=\"ct-serveur-distant\">Côté serveur distant</h2>\n<h3 id=\"prsentation\">Présentation</h3>\n<p>Le serveur distant aura pour rôle de recevoir les informations envoyées par le serveur local. Il sera chargé de répondre aux requêtes envoyées, d&#39;analyser les données puis de retourner un fichier xml qui affichera les éventuelles erreurs.</p>\n<h3 id=\"principe\">Principe</h3>\n<h4>Récéption des données</h4>\n<p>Les informations étant en POST, il faut utiliser la variable adéquate ou la fonctionnalité adéquate du langage que vous utilisez. Dans le cas du php, la variable <em>$_POST</em> fera parfaitement l&#39;affaire.</p>\n<p>Les données seront analysées pour être validées ou être déclarées comme invalide. Ensuite, une page xml sera générée (ce fichier sera parsé pour afficher dans le format souhaité les différentes erreurs).</p>\n<h4>Fichier de retour</h4>\n<p>Le fichier de retour est écrit sous le format XML et comprend deux branches principales :</p>\n<ul>\n<li><strong>error</strong> : dans le cas où il n&#39;y a pas d&#39;erreur, elle devra avoir pour valeur 0 et dans le cas inverse (une ou plusieurs erreurs) elle retournera comme valeur 1</li>\n<li><strong>message</strong> : cette partie là est à remplir uniquement si la valeur de error est 1. Elle retournera un message d&#39;erreur (par exemple : l&#39;adresse n&#39;est pas mentionnée ou est invalide).</li>\n</ul>\n<p>Donc, dans le cas où il n&#39;y a pas d&#39;erreur, votre fichier xml aura cette allure :</p>\n<pre><code class=\"hljs\"><span class=\"hljs-meta\">&lt;?xml version=<span class=\"hljs-string\">&quot;1.0&quot;</span> encoding=<span class=\"hljs-string\">&quot;iso-8859-1&quot;</span>?&gt;</span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">response</span>&gt;</span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">error</span>&gt;</span>0<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">error</span>&gt;</span>\n<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">response</span>&gt;</span>\n</code></pre>\n<p>Dans le cas inverse :</p>\n<pre><code class=\"hljs\"><span class=\"hljs-meta\">&lt;?xml version=<span class=\"hljs-string\">&quot;1.0&quot;</span> encoding=<span class=\"hljs-string\">&quot;iso-8859-1&quot;</span>?&gt;</span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">response</span>&gt;</span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">error</span>&gt;</span>1<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">error</span>&gt;</span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">message</span>&gt;</span>Le message d<span class=\"hljs-symbol\">&amp;#39;</span>erreur<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">message</span>&gt;</span>\n<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">response</span>&gt;</span>\n</code></pre>\n<h4>Exemple</h4>\n<p>Pour la récupération des informations, vérifiez bien que dans le fichier de configuration de php (<em>php.ini</em>) la variable register_globals est bien sur <strong>Off</strong> et non sur <strong>On</strong>. Les informations seront récupérées par l&#39;intermédiaire de la variable <strong>$_POST</strong>.</p>\n<p>Dans un premier temps, autant faire un test qui permette d&#39;afficher les données envoyées par le serveur local :</p>\n<pre><code class=\"hljs\">&lt;?php\necho\n    &amp;<span class=\"hljs-string\">#39</span>;Nom du blog : &amp;<span class=\"hljs-string\">#39</span>;.<span class=\"hljs-number\">$_</span>POST[&amp;<span class=\"hljs-string\">#39</span>;blog_name&amp;<span class=\"hljs-string\">#39</span>;](/&amp;<span class=\"hljs-string\">#39</span>;blog_name&amp;<span class=\"hljs-string\">#39</span>;).&amp;<span class=\"hljs-string\">#39</span>;&lt;br /&gt;&amp;<span class=\"hljs-string\">#39</span>;.\n    &amp;<span class=\"hljs-string\">#39</span>;Titre du <span class=\"hljs-keyword\">message</span> : &amp;<span class=\"hljs-string\">#39</span>;.<span class=\"hljs-number\">$_</span>POST[&amp;<span class=\"hljs-string\">#39</span>;title&amp;<span class=\"hljs-string\">#39</span>;](/&amp;<span class=\"hljs-string\">#39</span>;title&amp;<span class=\"hljs-string\">#39</span>;).&amp;<span class=\"hljs-string\">#39</span>;&lt;br /&gt;&amp;<span class=\"hljs-string\">#39</span>;.\n    &amp;<span class=\"hljs-string\">#39</span>;Adresse du <span class=\"hljs-keyword\">message</span> : &amp;<span class=\"hljs-string\">#39</span>;.<span class=\"hljs-number\">$_</span>POST[&amp;<span class=\"hljs-string\">#39</span>;url&amp;<span class=\"hljs-string\">#39</span>;](/&amp;<span class=\"hljs-string\">#39</span>;url&amp;<span class=\"hljs-string\">#39</span>;).&amp;<span class=\"hljs-string\">#39</span>;&lt;br /&gt;&amp;<span class=\"hljs-string\">#39</span>;.\n    &amp;<span class=\"hljs-string\">#39</span>;Extrait : &amp;<span class=\"hljs-string\">#39</span>;.<span class=\"hljs-number\">$_</span>POST[&amp;<span class=\"hljs-string\">#39</span>;excerpt&amp;<span class=\"hljs-string\">#39</span>;](/&amp;<span class=\"hljs-string\">#39</span>;excerpt&amp;<span class=\"hljs-string\">#39</span>;);\n?&gt;\n</code></pre>\n<p>Voyant qu&#39;il vous est impossible de recevoir la réponse du serveur distant, rajoutez ce petit code en bas du fichier qui envoit les données :</p>\n<pre><code class=\"hljs\"><span class=\"hljs-meta\">&lt;?php</span>\n<span class=\"hljs-comment\">// Message de réponse</span>\n<span class=\"hljs-keyword\">while</span> (!@<span class=\"hljs-title function_ invoke__\">feof</span>(<span class=\"hljs-variable\">$sock</span>))\n    <span class=\"hljs-variable\">$body</span> .= @<span class=\"hljs-title function_ invoke__\">fgets</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-number\">4096</span>);\n<span class=\"hljs-keyword\">echo</span> <span class=\"hljs-variable\">$body</span>;\n<span class=\"hljs-meta\">?&gt;</span>\n</code></pre>\n<p>Normalement, vous devriez obtenir quelque chose de similaire à ceci :</p>\n<pre><code class=\"hljs\"><span class=\"hljs-attribute\">HTTP</span>/<span class=\"hljs-number\">1</span>.<span class=\"hljs-number\">1</span> <span class=\"hljs-number\">200</span> OK\n<span class=\"hljs-attribute\">Date</span>: Sun, <span class=\"hljs-number\">06</span> Jun <span class=\"hljs-number\">2004</span> <span class=\"hljs-number\">07</span>:<span class=\"hljs-number\">36</span>:<span class=\"hljs-number\">49</span> GMT\n<span class=\"hljs-attribute\">Server</span>: Apache/<span class=\"hljs-number\">2</span>.<span class=\"hljs-number\">0</span>.<span class=\"hljs-number\">49</span> (Unix) DAV/<span class=\"hljs-number\">2</span> PHP/<span class=\"hljs-number\">5</span>.<span class=\"hljs-number\">0</span>.<span class=\"hljs-number\">0</span>RC2\n<span class=\"hljs-attribute\">X</span>-Powered-By: PHP/<span class=\"hljs-number\">5</span>.<span class=\"hljs-number\">0</span>.<span class=\"hljs-number\">0</span>RC2\n<span class=\"hljs-attribute\">Connection</span>: close\n\n<span class=\"hljs-attribute\">Content</span>-Type: text/html; charset=ISO-<span class=\"hljs-number\">8859</span>-<span class=\"hljs-number\">1</span>\n<span class=\"hljs-attribute\">Nom</span> du blog : Nom du blog\n<span class=\"hljs-attribute\">Titre</span> du message : Le titre du message\n<span class=\"hljs-attribute\">Adresse</span> du message : http://www.adresse.com/du/message.php\n<span class=\"hljs-attribute\">Extrait</span> : L&amp;#<span class=\"hljs-number\">39</span>;extrait : sans code HTML\n</code></pre>\n<p>Si vous avez bien cela, vous allez pouvoir commencer à faire des vérifications concernant le contenu. Voici un début de code source :</p>\n<pre><code class=\"hljs\"><span class=\"language-php\"><span class=\"hljs-meta\">&lt;?php</span>\n<span class=\"hljs-variable\">$post</span> = <span class=\"hljs-keyword\">array</span>(\n                &amp;<span class=\"hljs-comment\">#39;blog_name&amp;#39;    =&gt;    &amp;#39;Le nom du blog n\\&amp;#39;est pas défini&amp;#39;,</span>\n                &amp;<span class=\"hljs-comment\">#39;url&amp;#39;        =&gt;    &amp;#39;L\\&amp;#39;adresse n\\&amp;#39;est pas définie&amp;#39;,</span>\n                &amp;<span class=\"hljs-comment\">#39;title&amp;#39;        =&gt;    &amp;#39;Le titre n\\&amp;#39;est pas défini&amp;#39;,</span>\n                &amp;<span class=\"hljs-comment\">#39;excerpt&amp;#39;    =&gt;    &amp;#39;L\\&amp;#39;extrait n\\&amp;#39;est pas défini&amp;#39;</span>\n            );\n\n<span class=\"hljs-variable\">$erreurs</span> = <span class=\"hljs-keyword\">array</span>();\n\n<span class=\"hljs-keyword\">foreach</span>(<span class=\"hljs-variable\">$post</span> <span class=\"hljs-keyword\">as</span> <span class=\"hljs-variable\">$nom</span> =&gt; <span class=\"hljs-variable\">$valeur</span>) {\n    <span class=\"hljs-keyword\">if</span>(<span class=\"hljs-keyword\">empty</span>(<span class=\"hljs-variable\">$_POST</span>[<span class=\"hljs-variable\">$nom</span>](/<span class=\"hljs-variable\">$nom</span>))) <span class=\"hljs-variable\">$erreurs</span>[](/) = <span class=\"hljs-variable\">$valeur</span>;\n}\n<span class=\"hljs-keyword\">echo</span> &amp;<span class=\"hljs-comment\">#39;&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot;?&gt;</span></span><span class=\"language-xml\"><span class=\"hljs-symbol\">&amp;#39;</span>;\n\n// Comptabilisation des erreurs\n// Si des erreurs ont été détéctés\nif(count($erreurs) &gt; 0) {\n?&gt;\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">response</span>&gt;</span>\n   <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">error</span>&gt;</span>1<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">error</span>&gt;</span>\n   <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">message</span>&gt;</span></span><span class=\"language-php\"><span class=\"hljs-meta\">&lt;?php</span> <span class=\"hljs-keyword\">echo</span> <span class=\"hljs-title function_ invoke__\">implode</span>(<span class=\"hljs-string\">&quot;\\n\\t\\t&quot;</span>,<span class=\"hljs-variable\">$erreurs</span>) <span class=\"hljs-meta\">?&gt;</span></span><span class=\"language-xml\"><span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">message</span>&gt;</span>\n<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">response</span>&gt;</span>\n\n</span><span class=\"language-php\"><span class=\"hljs-meta\">&lt;?php</span>\n    }\n<span class=\"hljs-comment\">// Si aucune erreur n&amp;#39;est détéctée</span>\n<span class=\"hljs-keyword\">else</span> {\n<span class=\"hljs-meta\">?&gt;</span></span><span class=\"language-xml\">\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">response</span>&gt;</span>\n   <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">error</span>&gt;</span>0<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">error</span>&gt;</span>\n<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">response</span>&gt;</span>\n\n</span><span class=\"language-php\"><span class=\"hljs-meta\">&lt;?</span> } <span class=\"hljs-meta\">?&gt;</span></span><span class=\"language-xml\">\n</span></code></pre>\n<p>Ce script ne montre qu&#39;une ébauche de ce que peut représenter la vérification des données reçues (il doit donc être amélioré : vérification du format de l&#39;url, de la taille de l&#39;extrait ...).</p>\n<p>Maintenant que nous avons vu l&#39;intégralité de la communication entre les deux serveurs (le principe de peer-to-peer) penchons-nous sur le parsing du fichier xml retourné par le serveur distant.</p>\n<h2 id=\"rception-des-ventuelles-erreurs\">Réception des éventuelles erreurs</h2>\n<h3 id=\"rle-des-rponses\">Rôle des réponses</h3>\n<p>Les erreurs permettent de signaler qu&#39;un trackback n&#39;a pas été enregistré, que l&#39;adresse est déjà enregistrée dans la base de données (système permettant d&#39;éviter les doubles posts) ...</p>\n<p>Donc, les réponses sont là pour prévenir des éventuelles erreurs permettant ainsi au webmaster ou au bloggeur d&#39;effectuer les modifications nécessaires afin de pouvoir remplir toutes les conditions demandées.</p>\n<h3 id=\"rception-des-erreurs-transformations-des-erreurs\">Réception des erreurs / transformations des erreurs</h3>\n<p>Pour la transformations des erreurs, le choix est misé sur un parseur de fichiers XML. Il suffira simplement d&#39;utiliser des regex pour extraire les informations souhaitées et afficher les messages de réussite ou d&#39;erreurs.</p>\n<p>Dans un premier temps, il faut faire une différence entre le header et le contenu. Pour cela, et après analyse du premier résultat de test, on voit facilement une séparation entre le header et le contenu (par un retour à la ligne vide).</p>\n<p>Donc, il faut rajouter dans le code php : </p>\n<pre><code class=\"hljs\"><span class=\"hljs-meta\">&lt;?php</span>\n<span class=\"hljs-comment\">// Lecture des informations</span>\n<span class=\"hljs-comment\">// En header</span>\n<span class=\"hljs-keyword\">while</span> (<span class=\"hljs-variable\">$str</span> = @<span class=\"hljs-title function_ invoke__\">trim</span>(@<span class=\"hljs-title function_ invoke__\">fgets</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-number\">4096</span>)))\n    <span class=\"hljs-variable\">$headers</span> .= <span class=\"hljs-string\">&quot;<span class=\"hljs-subst\">$str</span>\\n&quot;</span>;\n<span class=\"hljs-meta\">?&gt;</span>\n</code></pre>\n<p>Avant le code :</p>\n<pre><code class=\"hljs\"><span class=\"hljs-meta\">&lt;?php</span>\n<span class=\"hljs-comment\">// Message de réponse</span>\n<span class=\"hljs-keyword\">while</span> (!@<span class=\"hljs-title function_ invoke__\">feof</span>(<span class=\"hljs-variable\">$sock</span>))\n    <span class=\"hljs-variable\">$body</span> .= @<span class=\"hljs-title function_ invoke__\">fgets</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-number\">4096</span>);\n<span class=\"hljs-keyword\">echo</span> <span class=\"hljs-variable\">$body</span>;\n<span class=\"hljs-meta\">?&gt;</span>\n</code></pre>\n<p>Nous allons donc commencer à analyser le texte issu de <em>$body</em>.</p>\n<p>Pour résumer, le fichier xml généré contient une balise <strong><error></strong> et une balise <strong><message></strong> si <strong><error></strong> à pour valeur <strong>1</strong>. Une regex va donc récupérer la valeur de la balise error et la comparera à deux résultats, dans le cas où une/ou plusieurs erreurs sont détectées, il prendra le contenu provenant de la balise <strong>message</strong>.</p>\n<p>Un code source sera plus parlant :</p>\n<pre><code class=\"hljs\"><span class=\"hljs-meta\">&lt;?php</span>\n<span class=\"hljs-comment\">// Detection des éventuelles erreurs</span>\n<span class=\"hljs-comment\">// Utilisation de ereg</span>\n<span class=\"hljs-keyword\">if</span>(<span class=\"hljs-title function_ invoke__\">ereg</span>(&amp;#<span class=\"hljs-number\">39</span>;&lt;error&gt;<span class=\"hljs-number\">1</span>&lt;/error&gt;&amp;#<span class=\"hljs-number\">39</span>;,<span class=\"hljs-variable\">$body</span>)) {\n    <span class=\"hljs-comment\">// Affichage du message d&amp;#39;erreur</span>\n    <span class=\"hljs-keyword\">echo</span> &amp;<span class=\"hljs-comment\">#39;L\\&amp;#39;envoi du trackbacks a échoué pour la ou les raisons suivantes : &lt;br /&gt;&amp;#39;;</span>\n\n    <span class=\"hljs-comment\">// Prise du contenu dans la balise &lt;message&gt;</span>\n    <span class=\"hljs-comment\">// On retourne les resultats dans $text</span>\n    <span class=\"hljs-title function_ invoke__\">preg_match</span>(&amp;#<span class=\"hljs-number\">39</span>;#&lt;message&gt;(.*)&lt;/message&gt;<span class=\"hljs-comment\">#is&amp;#39;,$body,$text);</span>\n\n    <span class=\"hljs-comment\">// Affichage des erreurs</span>\n    <span class=\"hljs-comment\">// Et mise en place du retour à la ligne</span>\n    <span class=\"hljs-keyword\">echo</span> <span class=\"hljs-title function_ invoke__\">nl2br</span>(<span class=\"hljs-variable\">$text</span>[<span class=\"hljs-number\">1</span>](/blog/posts/<span class=\"hljs-number\">1</span>));\n}\n<span class=\"hljs-keyword\">else</span> {\n    <span class=\"hljs-comment\">// Affichage du message de réussite</span>\n    <span class=\"hljs-keyword\">echo</span> &amp;<span class=\"hljs-comment\">#39;L\\&amp;#39;envoi du trackback a réussi&amp;#39;;</span>\n}\n<span class=\"hljs-meta\">?&gt;</span>\n</code></pre>\n<p>Voilà, maintenant, vous avez un début de gestionnaire de trackbacks. Une zone envoi et une zone réception - donc, le B.A.B.A de ce système.</p>\n<h3 id=\"codes-sources\">Codes sources</h3>\n<p>Pour ceux qui n&#39;auraient pas suivit l&#39;intégralité du dossier et qui n&#39;auraient pris que les codes sources, voici ce que vous devriez avoir à la fin :</p>\n<h4>Serveur local</h4>\n<p>Voici le code source du fichier qui vous permettra d&#39;envoyer des trackbacks vers des serveurs distants :</p>\n<pre><code class=\"hljs\"><span class=\"hljs-meta\">&lt;?php</span>\n<span class=\"hljs-comment\"># Données</span>\n<span class=\"hljs-variable\">$donnees</span> =  &amp;<span class=\"hljs-comment\">#39;title=&amp;#39;.urlencode(&amp;#39;Le titre du message&amp;#39;)</span>\n       <span class=\"hljs-comment\">// .&amp;#39;&amp;url=&amp;#39;.urlencode(&amp;#39;http://www.adresse.com/du/message.php&amp;#39;)</span>\n        .&amp;<span class=\"hljs-comment\">#39;&amp;excerpt=&amp;#39;.urlencode(&amp;#39;L\\&amp;#39;extrait : sans code HTML&amp;#39;)</span>\n        .&amp;<span class=\"hljs-comment\">#39;&amp;blog_name=&amp;#39;        .urlencode(&amp;#39;Nom du blog&amp;#39;);</span>\n\n<span class=\"hljs-comment\"># Ouverture du socket</span>\n<span class=\"hljs-variable\">$sock</span> = <span class=\"hljs-title function_ invoke__\">fsockopen</span>(&amp;#<span class=\"hljs-number\">39</span>;localhost&amp;#<span class=\"hljs-number\">39</span>;, <span class=\"hljs-number\">80</span>, <span class=\"hljs-variable\">$errno</span>, <span class=\"hljs-variable\">$errstr</span>);\n\n<span class=\"hljs-comment\"># Requetes</span>\n<span class=\"hljs-comment\">// On ouvre la page en m?thode POST</span>\n<span class=\"hljs-title function_ invoke__\">fputs</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-string\">&quot;POST /test/test.php HTTP/1.0\\r\\n&quot;</span>);\n\n<span class=\"hljs-comment\">// On définit l&amp;#39;host</span>\n<span class=\"hljs-title function_ invoke__\">fputs</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-string\">&quot;Host:localhost \\r\\n&quot;</span>);\n\n<span class=\"hljs-comment\">// On définit le format des données</span>\n<span class=\"hljs-title function_ invoke__\">fputs</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-string\">&quot;Content-type: application/x-www-form-urlencoded\\r\\n&quot;</span>);  <span class=\"hljs-comment\">// définition du format</span>\n\n<span class=\"hljs-comment\">// On définit la taille des données envoyées par l&amp;#39;intermediaire</span>\n<span class=\"hljs-comment\">// de la fonction strlen()</span>\n<span class=\"hljs-title function_ invoke__\">fputs</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-string\">&quot;Content-length: &quot;</span> . <span class=\"hljs-title function_ invoke__\">strlen</span>(<span class=\"hljs-variable\">$donnees</span>) . <span class=\"hljs-string\">&quot;\\r\\n&quot;</span>); <span class=\"hljs-comment\">// taille</span>\n\n<span class=\"hljs-comment\">// On définit les diférents langages acceptés</span>\n<span class=\"hljs-comment\">// Ici, tout est défini de telle manière que l&amp;#39;on accepte tout</span>\n<span class=\"hljs-title function_ invoke__\">fputs</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-string\">&quot;Accept: */*\\r\\n&quot;</span>); <span class=\"hljs-comment\">// données acceptées par le navigateur</span>\n\n<span class=\"hljs-comment\">// On envoi les données</span>\n<span class=\"hljs-title function_ invoke__\">fputs</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-string\">&quot;\\r\\n&quot;</span>); <span class=\"hljs-comment\">// Ligne de séparation</span>\n<span class=\"hljs-title function_ invoke__\">fputs</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-string\">&quot;<span class=\"hljs-subst\">$donnees</span>\\r\\n&quot;</span>); <span class=\"hljs-comment\">// Envoi des données</span>\n<span class=\"hljs-title function_ invoke__\">fputs</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-string\">&quot;\\r\\n&quot;</span>); <span class=\"hljs-comment\">// Ligne de séparation</span>\n\n<span class=\"hljs-keyword\">while</span> (<span class=\"hljs-variable\">$str</span> = @<span class=\"hljs-title function_ invoke__\">trim</span>(@<span class=\"hljs-title function_ invoke__\">fgets</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-number\">4096</span>)))\n    <span class=\"hljs-variable\">$headers</span> .= <span class=\"hljs-string\">&quot;<span class=\"hljs-subst\">$str</span>\\n&quot;</span>;\n\n<span class=\"hljs-comment\">// Corp du document</span>\n<span class=\"hljs-keyword\">while</span> (!@<span class=\"hljs-title function_ invoke__\">feof</span>(<span class=\"hljs-variable\">$sock</span>))\n    <span class=\"hljs-variable\">$body</span> .= @<span class=\"hljs-title function_ invoke__\">fgets</span>(<span class=\"hljs-variable\">$sock</span>, <span class=\"hljs-number\">4096</span>);\n\n<span class=\"hljs-comment\">// Detection des éventuelles erreurs</span>\n<span class=\"hljs-comment\">// Utilisation de ereg</span>\n<span class=\"hljs-keyword\">if</span>(<span class=\"hljs-title function_ invoke__\">ereg</span>(&amp;#<span class=\"hljs-number\">39</span>;&lt;error&gt;<span class=\"hljs-number\">1</span>&lt;/error&gt;&amp;#<span class=\"hljs-number\">39</span>;,<span class=\"hljs-variable\">$body</span>)) {\n    <span class=\"hljs-comment\">// Affichage du message d&amp;#39;erreur</span>\n    <span class=\"hljs-keyword\">echo</span> &amp;<span class=\"hljs-comment\">#39;L\\&amp;#39;envoi du trackbacks a échoué pour la ou les raisons suivantes : &lt;br /&gt;&amp;#39;;</span>\n\n    <span class=\"hljs-comment\">// Prise du contenu dans la balise &lt;message&gt;</span>\n    <span class=\"hljs-comment\">// On retourne les resultats dans $text</span>\n    <span class=\"hljs-title function_ invoke__\">preg_match</span>(&amp;#<span class=\"hljs-number\">39</span>;#&lt;message&gt;(.*)&lt;/message&gt;<span class=\"hljs-comment\">#is&amp;#39;,$body,$text);</span>\n\n    <span class=\"hljs-comment\">// Affichage des erreurs</span>\n    <span class=\"hljs-comment\">// Et mise en place du retour à la ligne</span>\n    <span class=\"hljs-keyword\">echo</span> <span class=\"hljs-title function_ invoke__\">nl2br</span>(<span class=\"hljs-variable\">$text</span>[<span class=\"hljs-number\">1</span>](/blog/posts/<span class=\"hljs-number\">1</span>));\n}\n<span class=\"hljs-keyword\">else</span> {\n    <span class=\"hljs-comment\">// Affichage du message de réussite</span>\n    <span class=\"hljs-keyword\">echo</span> &amp;<span class=\"hljs-comment\">#39;L\\&amp;#39;envoi du trackback a réussi&amp;#39;;</span>\n}\n<span class=\"hljs-comment\">// Fermeture du socket</span>\n<span class=\"hljs-title function_ invoke__\">fclose</span>(<span class=\"hljs-variable\">$sock</span>);\n<span class=\"hljs-meta\">?&gt;</span>\n</code></pre>\n<h4>Serveur distant</h4>\n<p>Voici le fichier qui vous servira à recevoir des trackbacks à partir de serveurs externes</p>\n<pre><code class=\"hljs\"><span class=\"language-php\"><span class=\"hljs-meta\">&lt;?php</span>\n<span class=\"hljs-variable\">$post</span> = <span class=\"hljs-keyword\">array</span>(\n                &amp;<span class=\"hljs-comment\">#39;blog_name&amp;#39;    =&gt;    &amp;#39;Le nom du blog n\\&amp;#39;est pas défini&amp;#39;,</span>\n                &amp;<span class=\"hljs-comment\">#39;url&amp;#39;        =&gt;    &amp;#39;L\\&amp;#39;adresse n\\&amp;#39;est pas définie&amp;#39;,</span>\n                &amp;<span class=\"hljs-comment\">#39;title&amp;#39;        =&gt;    &amp;#39;Le titre n\\&amp;#39;est pas défini&amp;#39;,</span>\n                &amp;<span class=\"hljs-comment\">#39;excerpt&amp;#39;    =&gt;    &amp;#39;L\\&amp;#39;extrait n\\&amp;#39;est pas défini&amp;#39;</span>\n            );\n\n<span class=\"hljs-variable\">$erreurs</span> = <span class=\"hljs-keyword\">array</span>();\n\n<span class=\"hljs-keyword\">foreach</span>(<span class=\"hljs-variable\">$post</span> <span class=\"hljs-keyword\">as</span> <span class=\"hljs-variable\">$nom</span> =&gt; <span class=\"hljs-variable\">$valeur</span>) {\n    <span class=\"hljs-keyword\">if</span>(<span class=\"hljs-keyword\">empty</span>(<span class=\"hljs-variable\">$_POST</span>[<span class=\"hljs-variable\">$nom</span>](/<span class=\"hljs-variable\">$nom</span>))) <span class=\"hljs-variable\">$erreurs</span>[](/) = <span class=\"hljs-variable\">$valeur</span>;\n}\n<span class=\"hljs-keyword\">echo</span> &amp;<span class=\"hljs-comment\">#39;&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot;?&gt;</span></span><span class=\"language-xml\"><span class=\"hljs-symbol\">&amp;#39;</span>;\n\n// Comptabilisation des erreurs\n// Si des erreurs ont été détéctés\nif(count($erreurs) &gt; 0) {\n?&gt;\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">response</span>&gt;</span>\n   <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">error</span>&gt;</span>1<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">error</span>&gt;</span>\n   <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">message</span>&gt;</span></span><span class=\"language-php\"><span class=\"hljs-meta\">&lt;?php</span> <span class=\"hljs-keyword\">echo</span> <span class=\"hljs-title function_ invoke__\">implode</span>(<span class=\"hljs-string\">&quot;\\n\\t\\t&quot;</span>,<span class=\"hljs-variable\">$erreurs</span>) <span class=\"hljs-meta\">?&gt;</span></span><span class=\"language-xml\"><span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">message</span>&gt;</span>\n<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">response</span>&gt;</span>\n\n</span><span class=\"language-php\"><span class=\"hljs-meta\">&lt;?php</span>\n    }\n<span class=\"hljs-comment\">// Si aucune erreur n&amp;#39;est détéctée</span>\n<span class=\"hljs-keyword\">else</span> {\n<span class=\"hljs-meta\">?&gt;</span></span><span class=\"language-xml\">\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">response</span>&gt;</span>\n   <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">error</span>&gt;</span>0<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">error</span>&gt;</span>\n<span class=\"hljs-tag\">&lt;/<span class=\"hljs-name\">response</span>&gt;</span>\n\n</span><span class=\"language-php\"><span class=\"hljs-meta\">&lt;?</span> } <span class=\"hljs-meta\">?&gt;</span></span><span class=\"language-xml\">\n</span></code></pre>\n",
      "date_published": "2005-10-15T12:00:00.000Z",
      "tags": [
        "Logiciels"
      ]
    },
    {
      "id": "https://www.silent-strength.com/articles/elections-americaines-de-2004",
      "url": "https://www.silent-strength.com/articles/elections-americaines-de-2004",
      "title": "Elections américaines de 2004",
      "summary": "Une analyse rétrospective des enjeux politiques et du déroulement de l'élection présidentielle américaine de 2004 opposant George W. Bush à John Kerry.",
      "content_html": "<blockquote>\n<p>Ce dossier a été réalisé dans le cadre d&#39;un projet de cours en histoire / géographie. Il est issu de mon cursus scolaire de première.</p>\n</blockquote>\n<h2 id=\"editorial\">Editorial</h2>\n<blockquote>\n<p><em>Comment Bush a colonisé l&#39;Amérique ?</em></p>\n</blockquote>\n<p>Les élections américaines ont un aspect différent des élections françaises. C&#39;est pourquoi, avant de les décortiquer, il faut en analyser le fonctionnement, aller fouiller dans les dédalles du net des brides d&#39;informations qui permettront au final de mieux les appréhender.</p>\n<p>Ensuite, les présidentielles rassemblent de multiples informations : les principaux candidats, leurs campagnes, les résultats provisoires. Cependant, se reposer uniquement là-dessus n&#39;apporte qu&#39;une partie de réponse. Il faut aussi voir les facteurs qui ont permis au candidat de remporter des voix.</p>\n<p>L&#39;ensemble des analyses portées, des critiques émises de la part d&#39;une correspondante américaine, m&#39;ont permis de mieux comprendre les Etats-Unis. Et même si la victoire de Bush reste flou et assez incompréhensible : les américains en eux-mêmes n&#39;arrivent pas forcement à l&#39;expliquer.</p>\n<p>Pour mieux comprendre l&#39;Amérique et ne pas rester uniquement sur les clichés : il est essentiel, voire primordial de chercher un contact sur le terrain : qu&#39;il soit pro-Kerry ou pro-Bush.</p>\n<p>Sur ceux, bonne lecture.</p>\n<h2 id=\"les-candidats\">Les candidats</h2>\n<p>Sur la liste des candidats, seuls deux ont réussi à représenter l&#39;Amérique : George Walker Bush (le président sortant) et John Kerry (sénateur américain du Massachusetts).</p>\n<h3 id=\"john-forbes-kerry\">John Forbes Kerry</h3>\n<p>John Forbes Kerry naît un 11 décembre 1943 dans le Colorado. Son enfance mouvementée lui permet de voyager, surtout en Europe où il passe des étés dans une maison familiale située en Allemagne. Puis à l&#39;âge de 11 ans, il part étudier en Suisse. Ce n&#39;est qu&#39;en 1956 et grâce au soutien financier de sa tante Clara Winthrop, qu&#39;il s&#39;inscrit à l&#39;école Saint Paul située dans le New Hampshire.</p>\n<p>Bien qu&#39;isolé, comme le souligne l&#39;article de Patrick Jarreau, il arrive néanmoins à s&#39;imposer avec le Hockey sur glace dont son équipe est dirigée par Robert Mueller, futur directeur du FBI. Durant ses quatre ans d&#39;étude, il développera son goût pour la politique et ses facultés d&#39;orateur.</p>\n<p>Quatre ans plus tard, il part étudier dans l&#39;Université de Yale où, prit par l&#39;engouement des discours, il obtient la place du président du Yale Political Union (association étudiante organisatrice de débats politiques). Cette opportunité lui permet de s&#39;impliquer dans le mouvement des droits civiques et le programme de Nouvelle frontière de Kennedy. Il remporte, en mars 1965, il remporte le prix Ten Eyck du meilleur orateur pour un discours critique à l&#39;encontre de la politique étrangère américaine. Grâce à son talent, il est choisi pour le discours de fin d&#39;année de sa promotion.</p>\n<p>Ainsi, il obtient de la part de John Shattuck, une invitation pour participer au club privé Skull and Bones Society où George Bush et G.W. Bush y sont également membres.</p>\n<p>Suite au refus de son report pour des études à Paris, il se voit contraint de s&#39;inscrire au service militaire. Il le commence le 19 août 1967 et s&#39;engage dans les forces armées américaines pour combattre au Viêt Nam. Mais, en mars 1969, peu de temps après sa troisième blessure, l&#39;armée signe le retour de John Kerry aux États-Unis. Il rentre au pays en avril et est officiellement déchargé de ses obligations militaires en mars 1970.</p>\n<p>De retour, et suite à son expérience militaire, il décide de rejoindre le groupe des Vétérans du Viêt Nam opposés à la guerre : le VVAW. Il y participe activement : le 22 avril 1971, il témoigne devant des sénateurs sur les conditions de la guerre qu&#39;il clôture par une célèbre réplique : </p>\n<blockquote>\n<p>« Comment pouvez-vous demander à un homme d&#39;être le dernier à mourir pour une erreur ? »</p>\n</blockquote>\n<p>Il prend part à l&#39;Opération POW du dernier week-end de mai 1971. Cependant, et malgré son activisme au sein du VVAW, ainsi que son désir de faire évoluer ses actions dans un cadre de non-violence et de légalité, Kerry ne parvient pas à empêcher la radicalisation de l&#39;organisation et la quitte pour divergence de point vue.</p>\n<p>Après des débuts difficiles dans le monde politique, John Kerry décroche une place en tant que Sénateur Démocrate du Massachusetts en 1985. Lors de son discours d&#39;intronisation, il souligne le fait que sa victoire implique que cet état :</p>\n<blockquote>\n<p>« Rejette la politique de l&#39;égoïsme et la notion que les femmes puissent être traitées comme des citoyens de seconde classe ».</p>\n</blockquote>\n<p>John Kerry ne s&#39;est pas arrêté ici, il a continué à militer avec plus ou moins d&#39;ardeur, soutenant que</p>\n<blockquote>\n<p>« Je suis clair, sur ma volonté d&#39;employer la force, si nécessaire, pour protéger nos intérêts dans le monde et, évidemment, la sécurité de notre pays.»</p>\n</blockquote>\n<p>Ainsi, il se place contre les actions dernièrement menées en Irak et en Afghanistan, espérant que les erreurs commises seront réparées le plus rapidement possible. Mais avec les attentats du 11 septembre 2001, son opinion quant à l&#39;avenir des États-Unis et de la politique étrangère reste mitigée.</p>\n<blockquote>\n<p><strong>Compléments</strong></p>\n<ul>\n<li>Bibliographie officielle</li>\n<li>John Kerry, aristocrate de gauche</li>\n</ul>\n</blockquote>\n<h3 id=\"george-walker-bush\">George Walker Bush</h3>\n<p>George Walker Bush (né le 6 juillet 1946) est depuis 2001 le président des Etats-Unis : son mandat sera probablement renouvelé suite à la victoire des élections présidentielles du 2 novembre 2004.</p>\n<p>Né dans une famille de poids politique, son père était le 41e président des Etats-Unis, il étudie dans le célèbre pensionnat pour garçon de la Phillips Academy à Andover (ville située dans le Masschusetts). Il en garde de bons souvenirs puisqu&#39;il dit :</p>\n<blockquote>\n<p>« À Andover, dit-il, j&#39;ai appris à réfléchir. J&#39;ai appris à lire et à écrire comme je ne l&#39;avais jamais fait auparavant. Et je me suis découvert un nouvel intérêt, un que j&#39;ai gardé toute ma vie. Je le dois à un professeur de première qualité, Tom Lyons, qui enseignait l&#39;histoire. Passionné par cette matière, il savait aussi communiquer son enthousiasme à ses élèves. Il m&#39;a appris que l&#39;histoire fait revivre le passé et ses enseignements, lesquels peuvent souvent aider à prédire l&#39;avenir. »</p>\n</blockquote>\n<p>Puis, grâce à l&#39;influence de son grand-père, il se voit admis à l&#39;université de Yale. Durant ses études, il participe, comme John Kerry, à une confrérie secrète (devenue célèbre par la suite) : les Skull and Bones.</p>\n<p>Il fait son service militaire en s&#39;engageant dans la Garde Nationale en 1968 où il devient pilote d&#39;un F-102, ce qui lui permet d&#39;éviter d&#39;aller faire la guerre au Viêt Nam. Pendant son incorporation, il bénéficie d&#39;un nombre exceptionnel de congés, ce qui lui permet de participer à des campagnes électorales. Après une condamnation pour possession de cocaïne en 1972. Il est tout de même admis, lorsque son service militaire se termine, à la prestigieuse université de Harvard où il obtient, en 1975, sa maîtrise en administration. Pour lui, cette maîtrise a été un tournant dans sa vie.</p>\n<p>Dès 1979, il commence à s&#39;intéresser au monde économique et décide de fonder sa propre entreprise : la Arbusto Energy qui fera faillite quelques années plus tard.</p>\n<p>En 1988, son père élu à la présidence. Et durant cette même année, George W. Bush entend parler que l&#39;équipe Texas Rangers cherche un propriétaire. Il réunit un groupe d&#39;investisseurs fortunés, qui achètent l&#39;équipe pour environ soixante-quinze millions de dollars. Désigné comme représentant de l&#39;équipe, il participe à de nombreuses interviews, de nombreux discours, sa célébrité augmente de plus en plus au Texas. Dans ce contexte, il décide d&#39;essayer d&#39;obtenir un poste électif : celui de gouverneur du Texas.</p>\n<p>Pour atteindre ce poste, il bat la démocrate Ann Richards. Il devient le premier gouverneur de cet État à remplir deux mandats complets de quatre ans. Sa politique est très remarquée pour l&#39;utilisation prononcée de la peine de mort : il signe l&#39;ordre d&#39;exécution de la sentence judiciaire pour 152 condamnés.</p>\n<p>A la fin de son second mandat, il décide de se porter candidat , obtient l&#39;investiture de son parti en août 2000 et l&#39;emporte sur le candidat démocrate et vice-président Albert Gore, le bras droit de Bill Clinton huit années durant, aux élections de novembre.</p>\n<p>Le 11 septembre 2001, des attentats ont lieu sur les <em>Twins Towers</em> et sur le Pantagone, George W. Bush décide de réprimer les actes terroristes. Il instaure une politique sécuritaire (incarnée par le Patriot Act) aux États-Unis et désigne un Axe du Mal : Corée du Nord, Irak, Iran et plus tard la Syrie. Pour lutter contre le terrorisme, il entame des procédures de guerres en Irak pour renverser le régime de Sadam Hussein soupçonné de détenir des « armes de destruction massives ». Malgré les oppositions affichées par l&#39;ONU : les troupes américaines débarquent en Irak le 20 mars 2003.</p>\n<p>Dès lors, de nombreuses manifestations ont eu lieux, de nombreux débats ont été suscités. Mais le président reste unanime dans ses paroles : </p>\n<blockquote>\n<p>« Our Nation - this generation - will lift a dark threat of violence from our people and our future. We will rally the world to this cause by our efforts, by our courage. We will not tire, we will not falter, and we will not fail. »</p>\n</blockquote>\n<p>Pendant les élections présidentielles commencées le 2 novembre 2004, il a de nouveau été désigné par la population (51%) apte à diriger leur pays une seconde fois ...</p>\n<blockquote>\n<p><strong>Compléments</strong></p>\n<ul>\n<li>Bibliographie officielle</li>\n<li>Biographie française de George Walker Bush</li>\n</ul>\n<p><strong>Buisson inaccessible</strong><br>Le site américain de George W. Bush a été inaccessible par toutes les personnes ne résidant pas en Amériques. Une erreur Forbiden : access denied était affiché sur l&#39;intégralité du site.</p>\n</blockquote>\n<h2 id=\"les-campagnes-lectorales\">Les campagnes électorales</h2>\n<p><img src=\"/upload/dossiers/usa-election-2004/kerry_cartoon.jpg\" alt=\"Kerry Cartoon\"> </p>\n<p>Cette affiche publicitaire est loin d&#39;être fausse : John Kerry est opposé de son rival, George W. Bush. Déjà de parties politiques opposés, leurs choix politiques portent des termes différents et très contrastés.</p>\n<p>Leurs opinions politiques ont été clairement affichées lors de débats, où les deux candidats s&#39;affrontaient mutuellement : </p>\n<ul>\n<li>30 septembre : à l&#39;Université de Miami</li>\n<li>5 octobre : à l&#39;Université de Case Western Reserve</li>\n<li>8 octobre : à l&#39;Université de Washington</li>\n<li>13 octobre : à l&#39;Université de l&#39;Etat d&#39;Arizona</li>\n</ul>\n<p>Par ailleurs, il faut noter que les projets sont des souhaits ou des leurres pour attirer les électeurs. Donc, il faut garder à l&#39;esprit que les candidats ne sont en aucun cas obligés de suivre l&#39;ensemble de leur programme.</p>\n<p>Voici leurs campagnes présidentielles sur les principaux thèmes des élections présidentielles.</p>\n<h3 id=\"politique-trangre\">Politique étrangère</h3>\n<h4>Lutte contre le terrorisme</h4>\n<p>Bush : La politique offensive sera poursuivie grâce au budget de 417 milliards de dollars alloué à la défense (12% de plus que pendant la Guerre Froide).</p>\n<p>Kerry : Une &quot; nouvelle ère d&#39;alliance &quot; avec la communauté internationale sera inaugurée, et la CIA sera chargée de déstabiliser les États voyous.</p>\n<h4>Irak</h4>\n<p>Bush : Les troupes américaines resteront en poste &quot; jusqu&#39;à ce que leur travail soit terminé &quot;.</p>\n<p>Kerry : Les troupes seront rapatriées dans quatre ans. Soutenues par 40 000 nouveaux soldats, elles se limiteront au maintien de la paix. L&#39;ONU veillera à la reconstruction.</p>\n<h4>Israël</h4>\n<p>Bush : La &quot; feuille de route &quot; adoptée en avril 2003, sera suivie jusqu&#39;à la création d&#39;un état palestinien.</p>\n<p>Kerry : Le processus de paix sera relancé avec l&#39;aide des leaders modérés du Moyen-Orient, donc sans Arafat. La légitimité de la barrière de sécurité ne sera pas remise en cause.</p>\n<h4>Cuba</h4>\n<p>Bush : La ligne dure sera maintenue : embargo commercial et visites dans l&#39;île restreintes pour les citoyens américains.</p>\n<p>Kerry : L&#39;embargo ne sera pas levé, mais la libre circulation des visiteurs sera tolérée.</p>\n<h3 id=\"scurit-intrieure\">Sécurité intérieure</h3>\n<h4>Bouclier anti-missile</h4>\n<p>Bush : Le déploiement des missiles intercepteurs débutera cette année.</p>\n<p>Kerry : Le programme sera mis en veilleuse pour permettre l&#39;embauche de nouveaux soldats.</p>\n<h4>Patriot act</h4>\n<p>Bush : Toutes les dispositions de cette loi, qui autorise une surveillance accrue des citoyens, seront renouvelées.</p>\n<p>Kerry : Cette loi sera rescindée, parce qu&#39;elle viole les libertés civiles. En revanche, 100 000 nouveaux policiers seront déployés dans les rues.</p>\n<h4>Justice</h4>\n<p><em>Peine de mort</em></p>\n<p>Bush : Son application ne sera pas modifiée.</p>\n<p>Kerry : Virage pour les démocrates, en faveur de la peine de mort depuis Clinton : elle sera abolie, sauf pour les terroristes.</p>\n<p><em>Armes à feu</em></p>\n<p>Bush : Les fabricants d&#39;armes à feu seront protégés contre les recours légaux.</p>\n<p>Kerry : Les fabricants seront passibles de poursuites civiles. Ils devront installer des dispositifs de sécurité sur toute nouvelle arme. Les armes semi-automatiques seront interdites.</p>\n<p><em>Droit à l&#39;avortement</em></p>\n<p>Bush : Les nouveaux juges à la Cour Suprême devront être contre l&#39;avortement, sauf dans les cas de viol ou d&#39;inceste.</p>\n<p>Kerry : Les nouveaux juges à la Cour Suprême devront être favorables à l&#39;avortement, même pour les adolescentes.</p>\n<p><em>Droits des homosexuels</em></p>\n<p>Bush : La définition du mariage comme étant exclusivement l&#39;union d&#39;un homme et d&#39;une femme sera préservée par tous les moyens.</p>\n<p>Kerry : L&#39;union civile entre homosexuels sera laissée à la discrétion des États. La définition des crimes haineux s&#39;étendra aussi aux crimes commis envers les homosexuels.</p>\n<h3 id=\"nergie-et-environnement\">Énergie et environnement</h3>\n<h4>Pétrole</h4>\n<p>Bush : La production intérieure sera augmentée grâce à l&#39;exploitation pétrolière de la Réserve faunique nationale de l&#39;Arctique, en Alaska.</p>\n<p>Kerry : Dans 10 ans, l&#39;Amérique n&#39;importera plus de pétrole du Moyen-Orient, grâce au développement des énergies propres financé par les redevances sur le pétrole et le gaz naturel.</p>\n<h4>Réchauffement de la planète</h4>\n<p>Bush : La réduction des gaz à effets de serre sera volontaire, encouragée par des avantages fiscaux plutôt que par des menaces d&#39;amendes.</p>\n<p>Kerry : Le protocole de Kyoto ne sera pas ratifié, mais l&#39;industrie automobile se verra imposée des standards d&#39;efficacité énergétique plus sévères et les usines devront réduire leurs émissions de mercure sous peine d&#39;amendes.</p>\n<h3 id=\"conomie\">Économie</h3>\n<h4>Déficit</h4>\n<p>Bush : Le déficit record de 422 milliards de dollars sera réduit de moitié en cinq ans.</p>\n<p>Kerry : Il sera réduit de moitié en quatre ans.</p>\n<h4>Impôt</h4>\n<p>Bush : Les réductions d&#39;impôt de 1 700 milliards de dollars déjà accordées deviendront permanentes.</p>\n<p>Kerry : Les contribuables dont le revenu est supérieur à 200 000 dollars ne bénéficieront plus de réduction d&#39;impôt.</p>\n<h3 id=\"commerce-extrieur\">Commerce extérieur</h3>\n<h4>Traités de libre-échange</h4>\n<p>Bush : Ils seront multipliés pour ouvrir de nouveaux marchés aux produits américains.</p>\n<p>Kerry : Ils seront révisés selon une politique de commerce équitable en matière de main-d&#39;oeuvre et d&#39;environnement.</p>\n<h4>Ouverture des frontières aux produits canadiens</h4>\n<p>Bush : Une entente serait conclue sous peu pour le bétail, mais aucun assouplissement des tarifs sur le bois de main-d&#39;?uvre n&#39;est en vue.</p>\n<p>Kerry : Ouverture incertaine, car les syndicats, plus protectionnistes que les républicains, forment une part importante de la coalition démocrate. Les déchets domestiques canadiens ne pourront plus être enfouis en sol américain.</p>\n<h3 id=\"travail\">Travail</h3>\n<h4>Création d&#39;emploi</h4>\n<p>Bush : De nouveaux avantages fiscaux encourageront la croissance des entreprises. Le salaire minimum ne sera pas augmenté.</p>\n<p>Kerry : Les entreprises qui exportent des emplois à l&#39;étranger perdront leurs avantages fiscaux. Le salaire minimum sera augmenté.</p>\n<h4>Régime de rentes</h4>\n<p>Bush : L&#39;âge de la retraite passera à 67 ans. Conformément à la politique du droit de propriété, ceux qui désirent sortir du régime public pourront investir une somme équivalent à leurs cotisations dans un régime privé d&#39;épargne-retraite.</p>\n<p>Kerry : Le fonds de retraite ne sera pas privatisé. L&#39;âge de la retraite restera à 65 ans.</p>\n<h3 id=\"ducation\">Éducation</h3>\n<h4>No Child Left Behind</h4>\n<p>Bush : Cette politique visant l&#39;excellence scolaire sera bonifiée par un programme de bons d&#39;études permettant aux élèves de fréquenter l&#39;école publique, privée ou confessionnelle de leur choix.</p>\n<p>Kerry : Le décrochage sera éliminé en cinq ans grâce à une réforme qui récompensera la performance, et non l&#39;ancienneté des professeurs. Des crédits d&#39;impôts faciliteront l&#39;accès aux études supérieures.</p>\n<h4>Religion dans les écoles</h4>\n<p>Bush : La prière quotidienne sera encouragée dans les écoles.</p>\n<p>Kerry : L&#39;éducation et la religion resteront séparées.</p>\n<h3 id=\"sant\">Santé</h3>\n<h4>Assurance maladie</h4>\n<p>Bush : Des crédits d&#39;impôt faciliteront l&#39;accès à l&#39;assurance privée aux 40 millions d&#39;Américains toujours non couverts. L&#39;augmentation des primes sera contrôlée par des mesures limitant les recours légaux contre les médecins et les hôpitaux. Tout travailleur pourra cotiser à un régime individuel d&#39;épargne-santé plutôt que de participer au régime de son employeur.</p>\n<p>Kerry : Une injection de 76 milliards de dollars par année dans le régime fédéral Medicare permettra d&#39;assurer 27 millions d&#39;Américains à faibles revenus (y compris tous les enfants qui sont encore sans assurance). Les petites entreprises pourront se regrouper pour négocier des taux avantageux.</p>\n<h4>Recherche sur les cellules souches</h4>\n<p>Bush : Le financement public se limitera à la recherche sur les cellules souches adultes (prélevées sur le corps des patients). Tout clonage humain à des fins médicales sera interdit.</p>\n<p>Kerry : Le financement de la recherche sur les cellules souches provenant d&#39;embryons surnuméraires sera autorisé.</p>\n<h4>Lutte contre le sida</h4>\n<p>Bush : Seules les campagnes pour l&#39;abstinence sexuelle seront subventionnées.</p>\n<p>Kerry : Un programme d&#39;éducation, d&#39;information et de sensibilisation à toutes les méthodes de prévention sera créé.</p>\n<blockquote>\n<p><strong>Sources</strong></p>\n<ul>\n<li>John Kerry for President</li>\n<li>George W. Bush</li>\n<li>Campagnes Américaines sur TV5 (animation flash)</li>\n</ul>\n</blockquote>\n<h2 id=\"les-rsultats-provisoires\">Les résultats provisoires</h2>\n<p>Bien que John Kerry ai déclaré sa défaite de manière précoce, les résultats des élections américaines restent provisoires jusqu&#39;à la fin novembre.</p>\n<p>Voici la carte, provenant du site Aol News Elections 2004, montrant les résultats par Etats. Les Etats en rouge représentent ceux où George W. Bush a été déclaré gagnant, et ceux en bleu sont pour Kerry. </p>\n<p><img src=\"/upload/dossiers/usa-election-2004/resultats.png\" alt=\"Les résultats\"></p>\n<p>Sur l&#39;ensemble des électeurs (soit plus de 110 millions), Bush est le président sortant avec 51% des votes et 286 &quot;Grands électeurs&quot;. Son rival démocrate, John Kerry, en obtient 48% et 252 des 538 Grands Electeurs.</p>\n<p>Les Etats-Unis se divisent cependant en plusieurs parties : ceux pour Kerry et ceux pour Bush.</p>\n<h3 id=\"l-es-etats-quotkerryquot\">L es Etats &quot;Kerry&quot;</h3>\n<p>Ils correspondent aux états situés à l&#39;Ouest (la Californie, l&#39;Oregon, Washington), près des grands lacs (Maine, Pennsylvanie, Minnesota, Wisconsin, Michigan, Illinois, New Hampshire, New York, Vermont), près de la côte Nord-Ouest (New Jersey, Massachusetts, Connecticut, Delaware, Maryland).</p>\n<p>Kerry a également remporté sur les îles d&#39;Hawaii.</p>\n<h3 id=\"les-etats-quotbushquot\">Les Etats &quot;Bush&quot;</h3>\n<p>Il n&#39;y a pas à discuter, les Etats, où Bush s&#39;est imposé, sont beaucoup plus nombreux que son rival.</p>\n<p>Ils se situent dans les régions montagnardes (Nevada, Idaho, Montana, Wyoming, Utah, Arizona, Colorado, Nouveau-Mexique), dans le Centre (Dakota du Nord, Dakota du Sud, Nebraska, Kansas, Oklahoma, Texas, Louisiane, Arkansas, Missouri, Iowa), vers l&#39;Est (Indiana, Ohio, Kentucky, Tennessee, Alabama,Mississippi), vers la côte Est (Géorgie, Floride, Caroline du Nord, Caroline du Sud, Virginie, Virginie Occidentale) et l&#39;Alaska.</p>\n<h3 id=\"dfaite-de-kerry\">Défaite de Kerry ?</h3>\n<p>Le soir même des élections, lors des premiers résultats, Kerry qui se voulait optimiste, déclare prématurément sa défaite. Ecrasé par les statistiques, il préfère s&#39;avouer vaincu que d&#39;entamer, comme Bush lors des élections de 2000, des procès pour déterminer le futur président. Le républicain qualifie le geste de Kerry d&#39;élégant.</p>\n<p>Cependant, cette déclaration arrive avant le dépouillement des bulletins provisoires de l&#39;Ohio. De nombreuses rumeurs se mettent donc à parcourir le network et l&#39;actualité américaine. Ainsi le journaliste Greg Palast, travaillant parfois pour la BBC, énonce une démonstration, un peu légère, sur « <em>Kerry Won</em> ».</p>\n<p>Toutes sortes de théories de complots paraissent donc quotidiennement (Evidence Mounts That The Vote May Have Been Hacked etc.). Il est néanmoins correcte de concevoir de telles thèses puisque de nombreux sondages, principalement menés par la CNN, ont révélé que Kerry allait l&#39;emporter. Or lors des élections présidentielles, les Etats les plus convoités (la Floride, et l&#39;Ohio) ont voté Bush.</p>\n<p>Par ailleurs, en tant que Français, le système de vote américain ne fonctionne pas sous le même principe, il a des particularités qui, normalement, permettent de représenter le choix des minorités.</p>\n<blockquote>\n<p><strong>Sources</strong></p>\n<ul>\n<li>Elections 2004 suivies par AOL</li>\n<li>Carte Flash avec les résultats par Etats</li>\n</ul>\n</blockquote>\n<h3 id=\"diviser-le-territoire\">Diviser le territoire</h3>\n<p>En tant qu&#39;information complémentaire : diviser le territoire américain entre les Etats Bush et ceux de Kerry ne relate pas toute la réalité. En effet, les scrutins peuvent montrer que le président non sortant à reçu un nombre considérable de voix.</p>\n<p>Les Etats les plus disputés entre les candidats portent le nom de Etat à cause. Lors des élections de 2000, il s&#39;agissait de la Floride. Cette année, c&#39;est l&#39;Ohaio.</p>\n<p>Sur les élections de cette année, de nombreux journaux n&#39;hésitent pas à publier des cas de fraudes :</p>\n<blockquote>\n<p>« Saviez-vous que, dans un bureau de vote de l&#39;Ohio, dans lequel il y avait 638 électeurs d&#39;inscrits, la machine électronique a compté approximativement 4300 votes pour Bush. C&#39;est le petit Jésus qui doit être content! »</p>\n<p>Journal étudiant Le MotDit, édition du 11 novembre 2003 (vol. 30, n° 5), p. 12</p>\n</blockquote>\n<blockquote>\n<p><strong>Compléments</strong></p>\n<ul>\n<li>Article de Mark Morford sur pourquoi les grandes cités et les villes universitaires des Etats-Unis ont voté bleu (Kerry).</li>\n</ul>\n</blockquote>\n<h2 id=\"le-principe-d39lection-aux-usa\">Le principe d&#39;élection aux USA</h2>\n<p>Les élections présidentielles au USA se déroulent en plusieurs étapes. Elles commencent au début de l&#39;année pour finir au mois de janvier de l&#39;année suivante. Durant cette année, des délégués seront désignés lors des caucus et des primaires, poursuivie par l&#39;élection des candidats lors des conventions nationales. Enfin, le Président et le Vice-Président sont élus sur le mode du suffrage universel indirect par le Collège des Grands Electeurs.</p>\n<h3 id=\"primaires-et-caucus\">Primaires et caucus</h3>\n<p>Pour participer aux conventions des Délégués doivent être élus au sein de chaque parti politique (démocrate ou républicain) lors de conventions locales : les caucus ou les primaires. Elles se déroulent durant le mois de Février.</p>\n<blockquote>\n<p><strong>Note</strong><br>    On appelle Super Tuesday le mardi où se tiennent le plus de primaires et de caucus dans le pays le même jour.</p>\n</blockquote>\n<p>Les caucus réunissent les membres d&#39;un parti politique, ils y choisissent leurs délégués. Ces élus désignent les candidats estimés capables de représenter leur parti.réunissent les membres d&#39;un parti politique, ils y choisissent leurs délégués. Ces élus désignent les candidats estimés capables de représenter leur parti.</p>\n<p>Quant aux primaires, il s&#39;agit d&#39;un nouveau mode de sélection des candidats. Il apparaît au début du 20ème siècle et il en existe deux sortes :</p>\n<p>Les primaires fermées : elles concernent toutes les personnes inscrites sur les listes électorales comme appartenant au parti politique concernée. Toutes les autres personnes ne se verront pas admises à participer. La plupart des primaires organisées sont fermées.</p>\n<p>Les primaires ouvertes : toutes les personnes, sans distinctions, peuvent prendre part au vote. Les primaires ouvertes sont néanmoins plus rare que les primaires fermées.</p>\n<h3 id=\"conventions-nationales\">Conventions nationales</h3>\n<p>A Chicago, Les Conventions Nationales des deux partis majeurs (Démocrates et Républicains) se déroulent durant l&#39;été de l&#39;année de la présidentielle. Elles désignent les candidats aptes à la présidence et à la vice-présidence de chaque parti.<br>En voici leur déroulement :</p>\n<blockquote>\n<p>1er jour : Présentation<br>Le &quot;leader&quot; du parti préside et donne un discours de présentation du programme</p>\n<p>2ème jour : Adoption du programme<br>On détermine l&#39;éligibilité des membres qui siègeront et seront amenés à voter après le rapport du comité. Les délégués à la convention votent sur le programme (plate-forme) de leur parti .</p>\n<p>3ème jour : La nomination<br>Nomination de chaque candidat par les délégués, suivie d&#39;un discours de présentation de l&#39;élu par le porte-parole.</p>\n<p>4ème jour : Sélection du Vice-Président<br>Le nominé doit choisir un Vice-Président de telle manière à unir toutes les tendances du parti.</p>\n<p><em>La convention se termine par les discours des nominés à la Présidence et à la Vice-Présidence.</em></p>\n</blockquote>\n<h3 id=\"grands-electeurs\">Grands Electeurs</h3>\n<p>Les citoyens américains votent en faveur des candidats de leur choix à la présidence et à la vice-présidence, le vote débute le premier mardi suivant le premier lundi de novembre.</p>\n<p>Les candidats obtenant le plus grand nombre de suffrages reçoivent la totalité des voix dont bénéficie cet Etat au sein du Collège des Grands Electeurs.</p>\n<p>Le nombre des Grands Electeurs dont dispose chaque Etat est égal au nombre des élus de cet Etat au Congrès de Washington (soit deux sénateurs et un nombre de députés proportionnel à la population de l&#39;Etat considéré). Le nombre total des grands électeurs correspond à 538 et est composé de 100 Sénateurs et 438 Représentants.</p>\n<p>Les Grands Electeurs se réunissent pour élire officiellement le Président et le Vice-Président le premier lundi qui suit le deuxième mercredi de décembre. Les listes des votes des Grands Electeurs sont transmises au Président du Sénat, qui les ouvre le 6 janvier en présence des Représentants et des Sénateurs.</p>\n<p>Le 20 janvier, date fixée par le 20ème Amendement en 1933, le Président présente son discours d&#39;investiture au peuple américain. Ce jour s&#39;appelle Inauguration Day.</p>\n<h3 id=\"systme-erreur\">Système à erreur</h3>\n<p>Malgré une organisation rigoureuse, ce système a montré des failles lors des élections présidentielles de l&#39;an 2000. Le nombre des Grands Electeurs ne représentaient pas la majorité des Américains, le président ayant eu le moins de voix (en l&#39;occurrence, Bush), s&#39;est vu obtenir le poste de Président.</p>\n<p>Dès lors, de nombreuses contestations sont apparues sur les lacunes du système. Mais on peut également se poser la question de &quot;Comment vote un Américain ?&quot; pour savoir si l&#39;erreur n&#39;est pas tout simplement humaine.</p>\n<blockquote>\n<p><strong>Sources</strong></p>\n<ul>\n<li>Insite the USA : article sur les grands électeurs</li>\n</ul>\n</blockquote>\n<h2 id=\"un-lecteur-aux-urnes\">Un électeur aux urnes</h2>\n<p>Un électeur, lorsqu&#39;il se rend vers les urnes, s&#39;est préalablement renseigné sur les campagnes électorales des deux candidats. La majorité des informations qu&#39;il détient proviennent essentiellement de la presse écrite ou télévisé. De nombreux journaux n&#39;hésitent pas à publier des éditions spéciales (par exemple : BBC).</p>\n<p>Par ailleurs, un candidat peut trouver dans les deux campagnes des points qu&#39;il accepte et d&#39;autres qu&#39;il refuse. Lorsque les deux campagnes tentent : laquelle choisir ?</p>\n<h3 id=\"diffrents-partis\">Différents partis</h3>\n<p>Lorsqu&#39;un candidat se présente pour les élections présidentielles, il représente l&#39;intégralité d&#39;un partis politique : démocrate ou républicain. La séparation, bien que peut inexistante, démarque un choix politique : quelqu&#39;un qui se voudra pro-républicain élira le républicain, il en est de même pour le parti démocrate. Ainsi des électeurs arrivent pour voter les <em>yeux fermés</em> sur les différentes campagnes des deux candidats.</p>\n<p>Bien que cette technique soit de moins en moins utilisée elle existe toujours puisque certains américains affirmaient : </p>\n<blockquote>\n<p><strong>Pour Bush</strong><br><em>« If I vote for Bush, it&#39;s because he&#39;s republican ! »</em>.<br>(BBC - 1 novembre 2004)</p>\n<p><strong>Pour Kerry</strong><br><em>« I totaly agree with Kerry, because, i&#39;m always agree with all off democrates »</em>.<br>(BBC - 1 novembre 2004)</p>\n</blockquote>\n<p>Cependant, et heureusement, d&#39;autres personnes se basent sur des faits un peu plus concrets qu&#39;un simple parti.</p>\n<blockquote>\n<p><strong>A lire</strong></p>\n<ul>\n<li>Pourquoi les <em>Underwood</em> votent Bush</li>\n</ul>\n</blockquote>\n<h3 id=\"l39influence-des-clbrits\">L&#39;influence des célébrités</h3>\n<p>Elle est aussi contestée, voir considérée comme inexistante par certaines personnes, mais l&#39;influence des célébrités joue un grand rôle lors des élections.</p>\n<p>Lorsqu&#39;un électeur ne sait pas quel candidat choisir, il passe son temps à lire, à écouter les médias, les commentaires des célébrités (...) <em>considérés comme fiables</em>, afin de peaufiner leur opinion, pour arriver à décider qui il choisira.</p>\n<p>Les personnes, ayant un poids politique ou un rôle pouvant influer, se divisent en deux groupes : ceux pour Bush et ceux pour Kerry.  </p>\n<p>Cependant, les personnalités soutenant le Démocrate sont beaucoup plus nombreuses, et beaucoup plus en vogue aux USA.<br>On y trouve : Steven Spielberg, Michael Moore, Cameron Diaz, John Travolta, Justin Timberlake, William Rood (journaliste du Chicago Tribune et lui aussi vétéran du Vietnam), Jonathan Chait (journaliste The New Republic ), Paul Krugman (éditorialiste au New York Times), David Corn (journaliste à The Nation), Howard Stern (un des animateurs radio les plus écoutés des Etats-Unis), Steve Jobs (président d&#39;Apple) etc.</p>\n<p>Alors que Bush n&#39;en a que très peu : Bruce Willis, Ricky Martin, Britney Spears, la chaîne Fox News,  Bill Gates, Arnold Schwarzenegger. </p>\n<p>Donc, du point de vue soutien de personnalités, Kerry disposait d&#39;une longueur d&#39;avance sur son rival George W. Bush.</p>\n<blockquote>\n<p><strong>Compléments</strong></p>\n<ul>\n<li>Qui soutenait qui ?</li>\n<li>People : Qui vote qui ?</li>\n</ul>\n</blockquote>\n<h3 id=\"autres-sources\">Autres sources</h3>\n<h4>Les lobbies</h4>\n<p>Entre les stars, les revues, il existe une source d&#39;influence qui est bien plus importante et bien plus présente aux Etats-Unis : « les lobbies ».</p>\n<p>Les lobbies peuvent tout aussi bien être de l&#39;ordre religieux, social voire économique. Leurs influences auprès de la population peuvent être multiples : organisation de manifestations, de grève, financement de publicités. Ils utilisent plusieurs techniques pour faire réagir la population de telle manière à ancrer dans la tête des citoyens leurs idéaux.</p>\n<p>Par ailleurs, et contrairement aux pays de l&#39;Union Européenne, les lobbies américains sont répertoriés afin de limiter leurs champs d&#39;action.</p>\n<h4>Le <em>feeling</em> des candidats</h4>\n<p>L&#39;autre problème des élections présidentielles correspond aux impacts que les candidats peuvent avoir sur le peuple. Les images, les clichés que l&#39;on en donne ont pour but d&#39;amadouer l&#39;électeur. Ainsi, Bush affiche lors de sa campagne tout ce qu&#39;il a fait pour l&#39;environnement, tout ce qu&#39;il a fait pour la paix, pour le chômage : il donne aux électeurs une vision d&#39;homme terre-à-terre, très populiste, très <em>cowboy</em>, très Texan, très ordinaire ... Ce qui vu, de l&#39;Europe s&#39;avère faux.</p>\n<p>Quant à Kerry, le simple fait qu&#39;il fasse partie d&#39;une élite, il est considéré comme froid, hautain, aristocrate et pour ça, beaucoup de gens le déteste. Or, en Europe, il s&#39;avère que Kerry favorise les contacts, fait preuve de modestie, d&#39;indulgence, de simplicité, et de volonté quant au maintient de la paix et des relations internationales. </p>\n<p>Nous avons donc deux visions totalement opposées entre celles qui se sont imposées aux Etats-Unis, et celles qui ont vu le jour en Europe.</p>\n<p>On a donc dans l&#39;ensemble des cas, de multiples variantes qui tendent à faire choisir Bush et d&#39;autres qui tendent à choisir Kerry.</p>\n<h2 id=\"les-lobbies\">Les lobbies</h2>\n<p>Un lobby est un groupe de pression ou groupe d&#39;intérêt ayant pour dessein d&#39;influencer un pouvoir public ou privé afin de refléter un point de vue.</p>\n<p>L&#39;origine du mot anglais lobby date du XIXe siècle et désignait les couloirs de la Chambre des communes britannique où les membres de groupes de pression discutaient avec les députés afin de les influencer.</p>\n<p><strong>En France</strong>, ce terme a une signification essentiellement péjorative, signifiant un groupe de pression plus ou moins secret voulant contraindre les décisions politiques de façon non démocratique.</p>\n<p><strong>Aux États-Unis</strong>, les lobbies sont institutionnalisés et permettent l&#39;identification des différentes « factions » lors d&#39;un débat. Différents acteurs se regroupent alors pour constituer un lobby. </p>\n<p>Les lobbies utilisent souvent la pression du vote ou les dons aux campagnes électorales pour arriver à leurs fins. Ce système des lobbies est lui-même un débat aux État-Unis où des tentatives de régulation ont été faites pour limiter son aspect financier, accusé selon certains de favoriser une forme de corruption.</p>\n<p>Il existe don de nombreux lobbies réparties dans différentes catégories : on peut aussi bien trouver le lobby des armes, que celui des cigarettes ou de l&#39;informatique (microsoft par exemple).</p>\n<p>L&#39;importance des lobbies ne peut être ignoré mais comment fonctionnent-ils pour influencer ou renverser des élections ? </p>\n<blockquote>\n<p><strong>Compléments</strong></p>\n<ul>\n<li>Définition du lobby</li>\n<li>A propos des lobby</li>\n</ul>\n</blockquote>\n<h2 id=\"du-lobby-au-pouvoir\">Du lobby au pouvoir</h2>\n<p>On a découvert au fil du temps que les lobbies pouvaient changer le nombre de voix pour un candidat de manière importante. Les rassemblements de personnes ont des idées précisent qu&#39;elles tentent d&#39;affirmer ... même si pour cela, il faut corrompre le système politique américain. </p>\n<p>Les lobbies apparaissent donc dans plusieurs parties des élections présidentielles :</p>\n<ul>\n<li>Le financement des élections</li>\n<li>La promulgation du candidat</li>\n</ul>\n<p>Il en résulte une modification des campagnes électorales. Pour qu&#39;un candidat soit sûr d&#39;obtenir un maximum de vote, il ira jusqu&#39;à modifier sa campagnes électorales pour <em>séduire</em> et <em>obtenir</em> l&#39;adhésion d&#39;un lobby. </p>\n<p>Sur ce sujet, Jérôme Bellay, lors d&#39;une interview publiée sur France5, affirme : </p>\n<blockquote>\n<p>« Le lobbying est une affaire typiquement américaine. Ces groupes d&#39;intérêt se déploient pour tenter de faire basculer le vote d&#39;un côté ou de l&#39;autre, par un soutien financier ou des promesses de vote, qui serviront ensuite leurs intérêts. »</p>\n</blockquote>\n<p>Leur participation dans les élections ne s&#39;éloigne pas du désintérêt. Cependant, ils n&#39;attendent pas les présidentielles pour montrer qu&#39;ils existent : ils affichent, chaque année, leurs positions sur des projets de lois. Par ailleurs, les lobbies cherchent à influencer les politiciens, et ensuite, ils essaient de rallier le peuple à leurs causes. Ainsi, dès que des campagnes électorales sont terminées, les candidats continuent à nouer des liens avec des lobbies.</p>\n<h3 id=\"financement-des-lections\">Financement des élections</h3>\n<p>Les lobbies disposent de nombreux fonds financiers. Par exemple, les lobbies sponsorisés par Microsoft ont déversé plus de 6 millions de dollars à des candidats, des partis et des groupes d&#39;action politique.</p>\n<p>Les fonds servent à differents projets. Le principal est d&#39;organiser la médiatisation du candidats, pour cela, il va devoir se déplacer dans plusieurs états, organiser des discours, participer à des débats politiques (pouvant être retransmis à la télévision ou la radio).</p>\n<p>Ensuite, vient tout ce qui concerne la publicité : distribution de tractes, on placarde des affiches sur les murs, on envoie par la poste des lettres présentant les programmes électoraux, on crée également des centres d&#39;informations sur les supports modernes (sites web, minitel, informations par téléphone ...).</p>\n<h3 id=\"promulguer-le-candidat\">Promulguer le candidat</h3>\n<p>L&#39;intérêt d&#39;un lobby à promulguer un candidat à deux objectifs.</p>\n<p>Le premier est de donner plus de poids à un candidat : plus le lobby est important (dans le sens d&#39;approuvé par la majorité de la population), plus le poids donné au candidat sera grand.</p>\n<p>Le second correspond aux promesses du <em>protégé</em>. Pour qu&#39;un lobby accepte d&#39;aider un candidat, il faut que celui-ci lui fasse des promesses quant à d&#39;éventuels décrets le concernant. Si ses dernières s&#39;avèrent incorrectes voire non satisfaisantes, le lobby menacera le candidat en question de changer les votes, de réduire les fonds ... il s&#39;agit, en effet, de chantage.</p>\n<p>Le troisième est beaucoup plus subtile : dès qu&#39;un lobby prend sous son aile un candidat, il doit en assurer sa publicité et des fonds financiers sur lesquels il appose sa signature. Donc, toutes les personnes étant partisantes du candidat sont considérées comme membres potentiels.</p>\n<h3 id=\"exemple\">Exemple</h3>\n<p>A titre de rappel, nous savons que les Etats-Unis continuent jour après jour à contrôler l&#39;ensemble de sa population, à surveiller les moindres conversations téléphoniques (...) cet ensemble de procédures à pour but de &quot;protéger le pays du terrorisme&quot;. Les Américains se sentent donc dans un pays insécurisé, c&#39;est pourquoi, beaucoup se munissent d&#39;armes.</p>\n<blockquote>\n<p><strong>Note</strong><br>Il n&#39;y a pas que le terrorisme qui a favorisé l&#39;achat d&#39;armes. L&#39;histoire du pays fait que l&#39;individualisme est prôné, par conséquent, les fusils servent également à se protéger des dangers domestiques : voleurs, criminels, gangs ... Michaël Moore en parle dans Bowling for Columbine.</p>\n</blockquote>\n<p>La NRA, un lobby signifiant <em>National Rifle Association</em>, a vu le jour en 1871. Elle a pour objectif de sécuriser les armes à feu. Depuis, ce lobby a évolué, et aujourd&#39;hui, il participe activement à la vie politique. </p>\n<p><strong>En 2003</strong>, la NRA concentre ses effeorts au niveau fédéral sur :</p>\n<ul>\n<li>Encourager le Congrès à voter une loi qui protégerait les fabricants d&#39;armes de certains types de procès. La proposition « <em>Protection of Lawful Commerce in Arms Act</em> » (« *Acte sur la protection du commerce légal des armes * ») est aussi soutenue par la Chambre de Commerce des États-Unis, la National Association of Manufacturers (Association nationale des fabricants), et la National Association of Wholesaler-Distributors (Association nationale des distributeurs de détail). Il a trouve l&#39;opposition de nombreux groupes favorables au contrôle des armes. La proposition a été repoussée le 2 Mars 2004, après que le Sénat y ait ajouté des amendements pour étendre l&#39;interdiction des fusils d&#39;assaut et refermer une faiblesse de la loi connue comme le « gun-show loophole » (« faiblesse de l&#39;exposition des armes »). La NRA a modifié sa position et s&#39;est opposé à la proposition après l&#39;ajout de ces deux amendements. Ils doivent encore être présentés au vote au Sénat pour pouvoir avoir force de loi.</li>\n<li>S&#39;opposer au lobby du contrôle des armes qui essaye d&#39;élargir et d&#39;autoriser à nouveau une loi de 1994 qui interdisait de nombreux fusils semi-automatiques et certains types de chargeurs (qui retiennent les cartouches qui n&#39;ont pas été tirées). Cette loi de 1994 doit expirer en 2004. Au contraire, le lobby du contrôle des armes tient à étendre ces interdictions et à les rendre permanentes.</li>\n</ul>\n<p>Les lobby ont donc des influences aussi bien politiques (par leurs méthodes de pression) que lors des élections (par le soutien apporté aux candidats).</p>\n<blockquote>\n<p><strong>Compléments</strong></p>\n<ul>\n<li>Liste des lobbies (avec leur appartenance politique)</li>\n</ul>\n</blockquote>\n<h2 id=\"pourquoi-bush\">Pourquoi Bush ?</h2>\n<p>Pourquoi George Walker Bush a été nommé une seconde fois en tant que Président des Etats-Unis ? De cette question, il faut entamer une procédure de décryptage sur quels sont les facteurs qui lui ont permis d&#39;obtenir un nouveau mandat.</p>\n<p>En tentant d&#39;y répondre, il fallait bien sûr faire la biographie des deux principaux candidats, afficher leurs campagnes électorales, et comprendre le système politique américain tout en essayant de comprendre ce que pouvais voir un américain.</p>\n<h3 id=\"un-peuple-divis\">Un peuple divisé</h3>\n<p><img src=\"/upload/dossiers/usa-election-2004/sorry.png\" alt=\"Sorry\"></p>\n<p>Les résultats des élections sont formels : la population se présente comme divisée. Certains affichent sur des sites tels que Sorry Everybody des messages d&#39;excuses quant à l&#39;issue des présidentielles.</p>\n<p>Durant les années où Bush gouvernait, l&#39;amérique s&#39;était vu se fractionner, se diviser sur les choix politique du pays : la guerre en Irak, la construction d&#39;un mur en Israël (...). Pendant ce temps, au sein même du pays de nombreuses crises sont apparues : chômage en hausse, développement de la pauvreté.</p>\n<p>De plus, la déclaration émise par les USA a développé une hostilité avec les pays membres de l&#39;ONU hormis l&#39;Angleterre. Le pays se voit divisé de nouveau.</p>\n<p>Pour renforcer la sécurité, de nombreux programmes de &quot;crise&quot; ont lieu : contrôle des conversations téléphoniques, vérification systématique des affaires personnelles, des arrestations intempestives ont lieu ... toutes ses mesures rendent le pays impopulaire par le peuple lui-même mais aussi par les étrangers. </p>\n<p>Le peuple se veut donc de plus en plus divisé sur l&#39;ensemble des politiques : aussi bien sur la politique intérieure que la politique étrangère, économique, industrielle, militaire ...</p>\n<h3 id=\"comment\">Comment ?</h3>\n<p>Aucune personne dispose de la faculté d&#39;expliquer comment Bush a fait pour obtenir un nouveau mandat, qui plus est, avec autant de grands électeurs. La difficulté de cette entreprise, c&#39;est que le network, les journaux, n&#39;ont pas encore eu le temps de publier des éditions permettant de mieux comprendre les élections. Seules des bases hypothétiques peuvent être émises. </p>\n<p>Les résultats provisoires nous montrent simplement que le républicain dispose de plus de voix, et de plus de grands électeurs que Kerry. Les statistiques ne permettent pas de donner ou de mentionner les lobbies ayant eu un rôle important, les personnalités ayant eu un poids politique, des appartenances religieuses, politiques ou sociales. </p>\n<p>Un Européen aura tendance à dire que si Bush a gagné, c&#39;est uniquement parce que le peuple américain le souhaitait. Si les chiffres sont arrondis, une partie de l&#39;Amérique est pour Kerry l&#39;autre est pour Bush. </p>\n<p>Comme le mentionne le magasine <em>Daily Mirroir</em> avec &quot;<em>How can 59,017,382 people so be DUMB ?</em>&quot;, la critique de la part des pays européens provoque ouvertement les élections américaines.</p>\n<p>De plus, en tant qu&#39;étranger à l&#39;ensemble du fonctionnement américain, comprendre demande chercher et non interpréter de manière évasive avec comme support quelques articles à tendance polémique. Une compréhension, ne serait-ce que globale demande la synthétisation d&#39;une dizaine de publications. Sans cela, le décryptage des élections présidentielles ne peut avoir lieu. </p>\n<p>Un américain même avancé, ne saura jamais dire quelles sont les causes exactes qui ont permis à un candidat de gagner. Pour ceux qui pense qu&#39;il faut se reposer sur les sondages, un contre-exemple suffira amplement : en Floride, le président sortant aurait, d&#39;après les sondages, dû être Kerry. Il en a été de même pour de nombreux états. </p>\n<p>Les portions de populations interrogées ne représentent donc nullement l&#39;ensemble. D&#39;où la complexité d&#39;un décryptage. Cependant, et d&#39;après les campagnes électorales, quelques hypothèses peuvent être émises.</p>\n<h3 id=\"des-hypothses\">Des hypothèses</h3>\n<p>Pour les hypothèses, j&#39;ai fais appel à une correspondante américaine Mary. M. Sylvia qui a bien voulu répondre à mes quelques questions.</p>\n<p>Aux Etats-Unis, on peut émettre 4 grandes hypothèses.</p>\n<h4>Les riches</h4>\n<p>Les riches ainsi que les capitalistes fortunés pensent qu&#39;ils vont pouvoir garder et faire fructifier leurs fortunes grâce à Bush.</p>\n<h4>Les Conservateurs, républicains</h4>\n<p>L&#39;ensembles des personnes conservatrices, républicaines n&#39;apprécient pas les changements brutaux : ils adhèrent parfaitement à l&#39;idéologie de Bush. Ils sont pour les valeurs traditionnelles : ce qui inclus les gens de la droite religieuse (les chrétiens fondamentalistes, les catholiques), des gens placés contre l&#39;avortement, contre la liberté sexuelle ... </p>\n<blockquote>\n<p><strong>Compléments</strong></p>\n<ul>\n<li>Retro VS Metro</li>\n</ul>\n</blockquote>\n<h4>Les américains banalysés</h4>\n<p>Beaucoup d&#39;américains reçoivent une éducation minimale, les laissant ignorant devant la politique. Ils ont peur du terrorisme, du changement (économique, politique, social) et ils lèguent leurs votes à celui qui leur semble le plus adapté, le plus proche d&#39;eux.</p>\n<blockquote>\n<p>Q : **Comment Bush fait-il pour  que les américains votent pour lui ? **</p>\n<p>R : Je pense que les européens ne peuvent imaginer à quel point beaucoup d&#39;américains sont mal éduqués, ignorant, et a qui on a fait &quot;lavage de cerveau&quot;. Bush, comme beaucoup de républicains, fait appel aux émotions et fait croire au gens qu&#39;avec lui tout va aller mieux, comme avant, même si ce n&#39;est pas la réalité. L&#39;évolution économique ne va pas faire marche &quot;arrière&quot;, mais beaucoup d&#39;ouvriers et agriculteurs sont pommés : ils ne comprennent pas que la globalisation et les autres changements économiques ont changé leurs vies pour toujours.</p>\n</blockquote>\n<h4>Idéologie extrémiste</h4>\n<p>Il s&#39;agit de l&#39;ensemble des gens qui ne pensent que par l&#39;<em>idéologie conservatrice américaine</em> : chaque individu doit être responsable de lui-même. </p>\n<blockquote>\n<p>Q : <strong>Que pouvez-vous nous dire sur l&#39;idéologie conservatrice américaine ?</strong></p>\n<p>R : Les gens croient que c&#39;est une faiblesse et même immorale de recevoir de l&#39;aide ou des bénéfices, qui sont pour la liberté et qui pensent que le gouvernement c&#39;est quelque chose de mauvais : les impôts sont un vol d&#39;argent. Il leur impose des contraintes, soit au niveau individuel ou au niveau entreprise (<em>free enterprise</em>).</p>\n</blockquote>\n<h4>Mais</h4>\n<p>Mais tout ceci ne sont que des hypothèses, nous ne pouvons à l&#39;heure actuelle ni les justifier totalement ni les rejeter. Un manque cruel d&#39;informations (puisque les bulletins sont normalement secrets) ne permettra jamais de savoir qui a voté qui et d&#39;en expliquer les éventuelles raisons.</p>\n<p><em>On ne pourra donc, qu&#39;éternellement, supposer</em> ...</p>\n<h2 id=\"sorry-world\">Sorry World</h2>\n<p>Aujourd&#39;hui, de nombreux américains affichent leurs positions faces aux élections aux Etats-Unis : aussi bien leur mécontentement que leur honte. </p>\n<h3 id=\"sorry-everybody\">Sorry Everybody ...</h3>\n<p>[<a href=\"http://www.sorryeverybody.com/%5D\">http://www.sorryeverybody.com/]</a>(/Sorry Everybody) affiche des photos d&#39;Américains tenant dans leurs mains des panneaux : </p>\n<blockquote>\n<p>« Everybody : Half of Ohio really, really sorry. Don&#39;t hate us. » (Photo 7)</p>\n<p>« Dear World. I&#39;m sorry, just so you know 49% of US are not retarded » (Photo 4572)</p>\n</blockquote>\n<h3 id=\"correspondance\">Correspondance</h3>\n<p>Mary Silva, correspondante américaine habitant depuis 1982 à Berkeley en Californie, travaille dans //the Evaluation Unit, Office of Undergraduate Advising , College of Letters and Science, University of California, Berkeley//. Actuellement, elle s&#39;occupe des dossiers des étudiants : elle décide ou détermine si les élèves sont aptes à avoir leur diplôme. </p>\n<p>Elle m&#39;a fait parvenir une partie d&#39;un email envoyé à un français lors des élections présidentielles de 2004. Avant de lire, elle tient à vous informer qu&#39;elle n&#39;est pas experte en politique, qu&#39;elle peut faire des erreurs. L&#39;orthographe et la grammaire de l&#39;extrait ont été corrigés.</p>\n<blockquote>\n<p>« On se pose la question si notre pays est devenu si différent que l&#39;on s&#39;y sent étranger. </p>\n<p>On cherche des raisons : le puritanisme et le christianisme fondamentaliste pour soulager le fait d&#39;être perdu dans un monde trop moderne et inhumain (surtout dans un pays manquant de services sociaux, comme le notre, basé sur le matérialisme et la dure concurrence du capitalisme ). Ou bien, des gens qui croient bêtement dans le mythe américain : n&#39;importe qui peut devenir riche, donc ils votent pour les intérêts des riches et contre ceux qui leurs sont propres. Ou, l&#39;ignorance profonde de beaucoup d&#39;américains.</p>\n<p>On raconte également que de nombreux citoyens ont voté Bush pour des raisons de &quot;moralité&quot; et des &quot;valeurs (morales)&quot; : parce qu&#39;il est là pour la vie (donc contre l&#39;avortement), pour les valeurs familiales (contre les mariages homosexuels). Il s&#39;agit d&#39;une réaction très émotionnelle et ces gens ressentent un besoin psychologique de la &quot;religion&quot; dans leurs vies que l&#39;on ne peut agir contre.</p>\n<p>Quelques fois, il nous semble que nous habitons dans un pays fasciste avec une conservation importante du &quot;social&quot; et du &quot;religieux&quot; très militarisé et autoritaire. </p>\n<p>Je pense que Kerry n&#39;a pas assez de charisme pour motiver le peuple émotionnellement - j&#39;espère que dans 4 ans, nous aurons un candidat démocrate qui puisse gagner.</p>\n<p>Un ami de John va partir vivre en Italie. Je ne pense pas que nous émigrons, mais nous nous questionnons sur l&#39;avenir pour savoir ce qu&#39;il faut faire pour améliorer le pays.</p>\n<p>Je pense que ça va s&#39;en dire, mais nous (mon mari et moi), et beaucoup d&#39;autres americains, demandons pardon aux français et aux autres peuples pour la politique menée au sein de notre pays. De plus, je pense avoir choqué plusieurs personnes hier soir quand nous étions chez des amis, qui ont travaillé pour Kerry, en disant que tous les humains doivent avoir le droit de voter lors des présidentielles américaines. Le president americain a un si grand pouvoir sur le monde ... et les étrangers n&#39;en ont aucun. J&#39;ai bien appris la leçon à l&#39;école primaire : à Boston, on a jeté dans la baie le thé des bateaux anglais pour manifester qu&#39;ils n&#39;avaient pas le droit d&#39;imposer des taxes si l&#39;on n&#39;avait pas de représentants politiques (&quot;No taxation without representation&quot;). »</p>\n</blockquote>\n<h4>Libre arbitre</h4>\n<p>Partageant l&#39;opinion politique de Mary, concernant l&#39;intervention d&#39;autres pays lors d&#39;élections présidentielles, je dirais que cette idée s&#39;avère utopique ... tout comme l&#39;était la notion de république il y a quelques siècles.</p>\n<p>Nous avons vu dans le cadre des élections américaines que le peuple s&#39;était retrouvé <strong>conditionné</strong> : par des techniques de bourrage de crâne (+600% de reportages sur le terrorisme alors que les homicides reculaient de 20%), par de la publicité mensongère (Bush affiche tout ce qu&#39;il a fait pour l&#39;environnement durant un spot télévisé - sur Fox News) ... Ce conditionnement ne permet pas d&#39;émettre un jugement objectif.</p>\n<p>Voici pourquoi, rechercher l&#39;objectivité dans les pays étrangers s&#39;avère nécessaire. Ils occuperont donc un rôle de libre arbitre. Cependant, il faut y ajouter des limites : on ne peut pas demander à chaque citoyen étranger d&#39;élire le président des Etats-Unis. Pour cela, il faut que des juges soient nommés par les pays pour savoir si le candidat en question est apte à remplir sa fonction. </p>\n<p>Un regroupement des juges aura lieu dans la même année et aura pour objectif d&#39;autoriser ou de rejeter la demande de candidature. Ce système permettra en effet d&#39;avoir des pays plus puissant, une amélioration des relations internationales, on évitera les dictatures, les pressions. </p>\n<p>Cependant, il montre une faille : si l&#39;on part du principe que la balance judiciaire n&#39;est jamais équilibrée, l&#39;impartialité des juges pourra toujours être remise en cause. Et pour y palier, un système à point sera loin d&#39;être suffisant.</p>\n",
      "date_published": "2004-11-10T12:00:00.000Z",
      "tags": [
        "Histoire",
        "Politique"
      ]
    }
  ]
}