18 Matching Annotations
  1. Last 7 days
    1. This vision, the white of the ancient world, is a lie. Though the idea is not new to archaeologists, academics, artists, and critics, it remains unknown to the average viewer. The truth is that the ancient world was a colorful one. Polychromatic traces of black, red, green, blue, orange, and gold leaf have all been found on ancient Greek and Roman statues, meaning that the average sculpture from that period is much more likely to resemble a brightly dressed carnival attendee than a ghostly apparition. What does this mean for us today? That the association between whiteness (and its related shades of beige – a stand in for ‘neutral’), is not only culturally produced but also a fiction. It proves that no one color has an inherent quality – the meaning is in the eye of the beholder and the eye is influenced by all the things that culture is made up of like history, values, and symbols.

      culture and whiteness

  2. Mar 2025
    1. PNOL is proudly affiliated with City Life Vida Urbana, and directs people facing housing stability issues to weekly CLVU meetings to obtain free legal advice and band together with others facing the same issues.
    1. Renters are usually the last to learn about a foreclosure. “Tenants will get a letter from a bank offering them a few hundred dollars if they leave in two weeks, and threatening to evict them within a month if they refuse and give them nothing,” says Meacham. Those who leave usually lose their security deposits and any prepaid rent. “Most banks depend on people getting scared and leaving. When people resist, especially tenants and former owners, the banks don’t know what to do with that and back off.” Thanks to the group’s tactics, scores of tenants and former owners have stalled foreclosures, negotiated higher payout deals, and even forced banks to cut mortgages.
    1. Despite the best efforts of Grossman’s team, not all foreclosure victims win their courtroom battles. Increasingly, that’s when on-the-ground activists step in to stop people from getting kicked to the curb.
    2. “When we took up the foreclosure battle, we found a way to approach it from an organizing way rather than a casework way,” says 62-year-old Steve Meacham, a longtime community organizer who has worked for City Life for the past eleven years. “Casework is important but individualized. An organizing approach says we do it in a more collective way, that challenges the problem, doesn’t just stick the finger in the dike.”
    1. CLVU is a base-building organization
    2. The hundreds of people who attend our meetings each month regularly win victories farbeyond what they (or most social service agencies) think possible. The difference inoutcomes between someone who finds our meetings and someone who does not is dramatic.Those who commit to our sword and shield model ‘win.’ Those who don’t get evicted rightaway.
    3. Real estatecapitalism inevitably leads to displacement, and this has class, race, and gender effects.
    4. Because City Life has done this work for 46 years, we have experience and resources. Wehave a committed paid staff and a large number of volunteer staff, most of whom come fromCity Life’s base and have direct experience fighting for their homes. We are the oldest andthe main anti-displacement group in the Boston metropolitan area.
    5. City Life works to build the Housing Justice Movement. Our special emphasis withinthat broad current is anti-displacement, anti-eviction organizing. We focus on building ananti-displacement movement for several reasons:1. It is the front line of the housing crisis. It is the point where the drive for maximumreal estate profit confronts tenant resistance to no-fault eviction.2. Working class communities of color, who are directly targeted by the real estateindustry, can be effectively organized through anti-displacement work to play aleading role in housing and other social justice movement struggles.3. City Life’s anti-capitalist orientation, our willingness to challenge market orthodoxy,and our commitment to an intersectional approach, make it possible for us to do thiswork. For the same reason, few organizations can do it.4. Our political orientation helps create a new community of resistance, led by workingclass people of color, that attracts broad sections of the working class: students,homeowners, lawyers, activists from other movements and others drawn to ‘dosomething’ about the out of control housing crisis.5. New leaders rapidly emerge from this community and are trained to becomeorganizers. City Life’s organizing intentionally is structured to develop leaders whocome from our base and who have the skills to sustain radical base building and anti-displacement movement building over the long term.
    6. Organizing requires two other elements – a sense of righteousness and a sense ofcapacity or power. You can’t organize around your grievance if you think it was ‘your fault,’or even if you think it was nobody’s fault. You can’t think about organizing if you don’t thinkthere is any possibility of ‘winning.’ Part of feeling capacity and power is having anunderstanding of strategy.City Life documents have sometimes summed up these two elements with thisshorthand:1. There is a structural crisis of displacement.2. That crisis is not our fault, certainly not the fault of working class people of color.3. That crisis is the fault of people who are identifiable.4. We have the capacity to defeat those people.
    7. In any property wherethe owner doesn’t live in the building, the interest and principal on the mortgage have beenpaid by the tenants. Over time, the tenants buy the building over and over again for asuccession of landlords.
    8. he structural crisisof urban housing displacement requires organizing that, in stopping evictions and racialdispossession also produces grounded tenant-driven knowledge to better understand ourcitie
    9. City Life/Vida Urbana is a grassroots community organization committed to fightingfor racial, social and economic justice and gender equality by building working class power.We promote individual empowerment, develop community leaders and build collectivepower to effect systemic change and transform society.
    1. Docker setup Installation Install Docker on your system Install the required packages: Copied pip install 'smolagents[docker]' Setting up the docker sandbox Create a Dockerfile for your agent environment: Copied FROM python:3.10-bullseye # Install build dependencies RUN apt-get update && \ apt-get install -y --no-install-recommends \ build-essential \ python3-dev && \ pip install --no-cache-dir --upgrade pip && \ pip install --no-cache-dir smolagents && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* # Set working directory WORKDIR /app # Run with limited privileges USER nobody # Default command CMD ["python", "-c", "print('Container ready')"] Create a sandbox manager to run code: Copied import docker import os from typing import Optional class DockerSandbox: def __init__(self): self.client = docker.from_env() self.container = None def create_container(self): try: image, build_logs = self.client.images.build( path=".", tag="agent-sandbox", rm=True, forcerm=True, buildargs={}, # decode=True ) except docker.errors.BuildError as e: print("Build error logs:") for log in e.build_log: if 'stream' in log: print(log['stream'].strip()) raise # Create container with security constraints and proper logging self.container = self.client.containers.run( "agent-sandbox", command="tail -f /dev/null", # Keep container running detach=True, tty=True, mem_limit="512m", cpu_quota=50000, pids_limit=100, security_opt=["no-new-privileges"], cap_drop=["ALL"], environment={ "HF_TOKEN": os.getenv("HF_TOKEN") }, ) def run_code(self, code: str) -> Optional[str]: if not self.container: self.create_container() # Execute code in container exec_result = self.container.exec_run( cmd=["python", "-c", code], user="nobody" ) # Collect all output return exec_result.output.decode() if exec_result.output else None def cleanup(self): if self.container: try: self.container.stop() except docker.errors.NotFound: # Container already removed, this is expected pass except Exception as e: print(f"Error during cleanup: {e}") finally: self.container = None # Clear the reference # Example usage: sandbox = DockerSandbox() try: # Define your agent code agent_code = """ import os from smolagents import CodeAgent, HfApiModel # Initialize the agent agent = CodeAgent( model=HfApiModel(token=os.getenv("HF_TOKEN"), provider="together"), tools=[] ) # Run the agent response = agent.run("What's the 20th Fibonacci number?") print(response) """ # Run the code in the sandbox output = sandbox.run_code(agent_code) print(output) finally: sandbox.cleanup()

      docker e2b sandbox

    2. Running your agent in E2B: multi-agents To use multi-agents in an E2B sandbox, you need to run your agents completely from within E2B. Here is how to do it: Copied from e2b_code_interpreter import Sandbox import os # Create the sandbox sandbox = Sandbox() # Install required packages sandbox.commands.run("pip install smolagents") def run_code_raise_errors(sandbox, code: str, verbose: bool = False) -> str: execution = sandbox.run_code( code, envs={'HF_TOKEN': os.getenv('HF_TOKEN')} ) if execution.error: execution_logs = "\n".join([str(log) for log in execution.logs.stdout]) logs = execution_logs logs += execution.error.traceback raise ValueError(logs) return "\n".join([str(log) for log in execution.logs.stdout]) # Define your agent application agent_code = """ import os from smolagents import CodeAgent, HfApiModel # Initialize the agents agent = CodeAgent( model=HfApiModel(token=os.getenv("HF_TOKEN"), provider="together"), tools=[], name="coder_agent", description="This agent takes care of your difficult algorithmic problems using code." ) manager_agent = CodeAgent( model=HfApiModel(token=os.getenv("HF_TOKEN"), provider="together"), tools=[], managed_agents=[agent], ) # Run the agent response = manager_agent.run("What's the 20th Fibonacci number?") print(response) """ # Run the agent code in the sandbox execution_logs = run_code_raise_errors(sandbox, agent_code) print(execution_logs)

      using multi-agents in an E2B andbox. mono agent use might look like:

      from smolagents import HfApiModel, CodeAgent

      agent = CodeAgent(model=HfApiModel(), tools=[], executor_type="e2b")

      agent.run("Can you give me the 100th Fibonacci number?")

    3. The only way to run LLM-generated code securely is to isolate the execution from your local environment.

      When an AI (like an LLM) writes code and runs it, you don’t want it to have direct access to your personal files, computer, or sensitive data. Instead, you should run the code in a safe, separate space where it can’t harm your system if something goes wrong.

      Why is this important? 🛑 LLM-generated code might have bugs 🐞

      The AI isn’t perfect and can write code with mistakes that could crash your system. Security risks 🔓

      If the AI accidentally generates malicious code (like deleting files or accessing sensitive data), you don’t want it to touch your real files. Protection from infinite loops or crashes ⏳

      Bad code can get stuck running forever or use up all your computer’s power. How do you isolate execution? 🏰 To keep things safe, you can run AI-generated code in a controlled environment, such as:

      A Virtual Machine (VM) – A fake computer inside your real computer, which you can reset anytime. A Docker container – A lightweight, temporary environment for running code separately. A Cloud sandbox – A secure online space where code runs without touching your real computer. Restricted Execution Tools (like Pyodide or Firejail) – These limit what the code can do.

    4. To add a first layer of security, code execution in smolagents is not performed by the vanilla Python interpreter. We have re-built a more secure LocalPythonExecutor from the ground up. To be precise, this interpreter works by loading the Abstract Syntax Tree (AST) from your Code and executes it operation by operation, making sure to always follow certain rules: By default, imports are disallowed unless they have been explicitly added to an authorization list by the user.Even so, because some innocuous packages like re can give access to potentially harmful packages as in re.subprocess, subpackages that match a list of dangerous patterns are not imported. The total count of elementary operations processed is capped to prevent infinite loops and resource bloating. Any operation that has not been explicitly defined in our custom interpreter will raise an error.

      no additional imports, consider re