Google, Android Auto temelli elektrikli araçlar için Maps temelli bir şarj güncellemesi yayımladı

Google, Android Auto temelli elektrikli araçlar için Maps temelli bir şarj güncellemesi yayınladı

Google, Android Auto temelli elektrikli araçlar için Maps temelli bir şarj güncellemesi yayınladıGoogle, Android Auto işletim sisteminin kullanıldığı tamamen elektrikli araçlar için Maps (Haritalar) temelli bir şarj güncellemesi yayımladı. “Google Maps’in elektrikli araç şarjına yönelik yapay zeka destekli özelliklerini Android Auto temelli 350’den fazla araç modeline getiriyoruz.” diyen Google, bu konuda yaptığı resmi açıklamada, “Artık Haritalar, elektrikli araç modelinize ve batarya doluluk oranınıza göre ne zaman ve nerede şarj etmeniz gerektiğini söyleyecek; böylece hem yolda kalma korkunuz bitecek hem de farklı uygulamalarla uğraşmak zorunda kalmayacaksınız.” ifadelerine yer verdi. 15’ten fazla markaya ait yüzlerce elektrikli araç modeline açılan altyapı, ilk olarak ABD’de sunuluyor. “Yüzlerce aracın batarya tüketimini doğru tahmin edebilmek adına yapay zekayı gelişmiş enerji modelleriyle birleştiriyoruz. Bu modeller; aracın ağırlığı ve batarya boyutu gibi teknik özelliklerin yanı sıra haritalardan gelen trafik, yol eğimi ve hava durumu gibi gerçek zamanlı verileri de analiz ediyor.” diyen Google, sistemi önümüzdeki dönemde küresel olarak da kullanıma alabilir.

Google, Android Auto temelli elektrikli araçlar için Maps temelli bir şarj güncellemesi yayımladı yazısı ilk olarak Teknoloji haberleri – LOG üzerinde yayınlandı.

Microsoft 365 Copilot’un Researcher aracı “Critique” ve “Council” özellikleriyle güçlendirildi

Microsoft 365 Copilot

Microsoft 365 Copilot'un Researcher aracı "Critique" özelliğiyle güçlendirildiMicrosoft 365 Copilot’un doğrudan kompleks görevlere odaklanan Researcher aracı, “Critique” ve “Council” adı verilen yeni özelliklerle güçlendirildi. Microsoft CEO’su Satya Nadella tarafından yapılan paylaşıma göre yeni çok modelli derin araştırma sistemi Critique, birden fazla yapay zeka modelinin (GPT ve Claude) bir arada çalıştırılarak olabilecek en ideal sonuçların/raporların elde edilmesine aracılık ediyor. Council ise kullanıcıların aynı istem (prompt) üzerinde birden fazla modeli eş zamanlı olarak çalıştırmasına imkan tanıyor. Bu özellik farklı modellerin hangi noktalarda birleştiğini, hangi noktalarda ayrıştığını ve her bir modelin sonuca katkısını gözler önüne seriyor. Introducing Critique, a new multi-model deep research system in M365 Copilot. You can use multiple models together to generate optimal responses and reports. pic.twitter.com/m4RlQmCKzs — Satya Nadella (@satyanadella) March 30, 2026 New in M365 Copilot: Council. You can run multiple models on the same prompt at the same time, so you can see where they align and diverge, and understand what each adds. pic.twitter.com/2p7O14OLFp […]

Microsoft 365 Copilot’un Researcher aracı “Critique” ve “Council” özellikleriyle güçlendirildi yazısı ilk olarak Teknoloji haberleri – LOG üzerinde yayınlandı.

Building a Face Authentication System for Linux (Using PAM, systemd, and ONNX)

GitHub logo

Linux still lacks a reliable, native biometric authentication system.

While platforms like Windows and macOS have tightly integrated face authentication, Linux users typically rely on passwords — or experimental tools that often break under real-world conditions.

I wanted something:

  • fully offline
  • predictable under PAM
  • extensible and debuggable

So I built AstraLock.

GitHub logo

shekh-2810
/
AstraLock

AstraLock is a lightweight face-authentication system designed for Linux. It replaces legacy camera pipelines with modern deep-learning models, optimized preprocessing, and a clean, modular architecture. The goal is simple: reliable face-based login on Linux without the sluggishness, low-light failures, or angle sensitivity seen in older tools.

AstraLock

AstraLock is a Linux biometric authentication system that enables face-based login through PAM and systemd, designed to be offline, auditable, and hackable, offering a native Linux alternative to projects like Howdy and closed platforms such as Windows Hello without cloud dependencies.

It runs a local daemon that performs facial verification and integrates directly with system authentication flows such as sudo, login, display managers, and polkit.

AstraLock banner

What AstraLock Is

  • A system daemon that performs face verification

  • A PAM module (pam_facelock.so) for system authentication

  • A CLI tool for enrollment, verification, and testing

  • A local-only LBPH model (no cloud, no network)

No external services.
No telemetry.
No vendor lock-in.

Features

  • 🔐PAM authentication (login, sudo, polkit, display managers)
  • 🧠Offline facial recognition (LBPH, OpenCV)
  • ⚙️systemd-managed daemon lifecycle
  • 📷 Webcam support via OpenCV
  • 🧪Built-in testing via pamtester
  • Simple CLI for users and admins

Architecture

…

The Problem with Existing Approaches

Most existing solutions (like Howdy) work — until they don’t.

Common issues:

  • PAM inconsistencies across sudo, login, and display managers
  • unreliable camera handling
  • fragile integration with system components
  • limited control over the authentication pipeline

The biggest issue wasn’t the ML part — it was system integration.

Design Goals

Before writing code, I defined strict constraints:

  • No cloud dependencies
  • No telemetry
  • Deterministic PAM behavior
  • Clean separation between authentication logic and ML
  • Works across CLI and GUI authentication flows

High-Level Architecture

Instead of embedding everything inside PAM, I separated concerns:

Application (sudo / login / GUI)
        ↓
       PAM
        ↓
pam_facelock.so
        ↓
facelockd (systemd service)
        ↓
UNIX socket IPC
        ↓
Face recognition pipeline

Why this design?

PAM modules should stay minimal and predictable.

Heavy operations like:

  • camera access
  • model inference
  • image processing

are handled by a separate daemon.

This avoids blocking PAM and improves reliability.

Recognition Pipeline

The pipeline uses modern ONNX-based models:

  1. Face detection (RetinaFace)
  2. Face alignment (landmark-based)
  3. Embedding generation (ArcFace, 512-dim)
  4. Cosine similarity for matching

Everything runs locally.

No external APIs. No network calls.

Key Challenges

1. PAM Behavior is Subtle

The biggest issue was handling:

  • auth sufficient vs required
  • fallback to password authentication
  • inconsistent behavior across services

Small changes in PAM configuration can completely change outcomes.

2. Display Managers Are Inconsistent

GDM, SDDM, and others:

  • handle authentication differently
  • sometimes retry unexpectedly
  • may break assumptions about flow

This required testing across environments.

3. Camera Reliability

Accessing /dev/video* sounds simple — but:

  • permissions vary
  • devices differ
  • latency can affect authentication timing

4. Avoiding Lockouts

Biometric authentication is probabilistic.

So:

  • password fallback is always preserved
  • PAM is configured as sufficient, not exclusive

Current Capabilities

  • Works with sudo, login, and GUI prompts (polkit)
  • Fully offline inference
  • Local model storage per user
  • systemd-managed daemon
  • CLI for enrollment and verification

Security Considerations

This is not meant to replace passwords entirely.

Important points:

  • biometric matching is probabilistic
  • spoofing is a real concern
  • fallback authentication is required

The system is designed for:

convenience + controlled risk, not absolute security

What I Learned

  • System integration is harder than ML
  • PAM is powerful but unforgiving
  • Reliability matters more than accuracy
  • Simplicity in design reduces failure cases

Looking for Feedback

I’m particularly interested in input on:

  • PAM edge cases in real-world deployments
  • failure modes I might be missing
  • biometric authentication tradeoffs on Linux
  • ways to improve reliability without sacrificing usability

Project

AstraLock is open source and still evolving.

If you’ve worked with PAM, Linux auth, or system-level tooling, I’d appreciate your perspective.

Stop Scraping Bayut – Build a Dubai Property App in 48 Hours

Your Bayut scraper just broke again.

They updated their HTML. Your regex is wrong. The IP got blocked. You’re debugging at midnight instead of shipping.

Sound familiar?

I’ve been there. I built a scraper for Dubai property data. It worked for two months. Then Bayut updated their site. I spent a week fixing it. Then it broke again.

That’s when I found a better way.

The Problem with Scraping Bayut

Web scraping Bayut is painful for a few specific reasons:

  1. Aggressive bot detection – Bayut uses Cloudflare and fingerprinting. Your scraper gets blocked fast.
  2. Frequent HTML changes – The site structure changes regularly. Your selectors break.
  3. Proxy costs – To scrape at scale, you need rotating proxies. That’s $200-500/month minimum.
  4. Legal grey area – Scraping violates Bayut’s terms of service. It’s a real risk.
  5. Maintenance hell – Every site update means debugging time. Time you could spend building.

The Solution: Bayut API

The Bayut API on RapidAPI gives you programmatic access to Bayut’s data without any of those problems.

  • No proxies needed
  • No scraping
  • Clean JSON responses
  • UAE-wide coverage
  • Fast (sub-400ms)

Here’s what you can access:

  • Property listings (sale + rent)
  • Off-plan development projects
  • Agent profiles and listings
  • Agency data
  • Transaction history
  • Location search and IDs

Building the App: Step by Step

Let’s build a Dubai property search app. I’ll use Node.js and Express for the backend.

Step 1: Get Your API Key

Sign up on RapidAPI and subscribe to the Bayut API:

https://rapidapi.com/happyendpoint/api/bayut14/

Step 2: Location Search

First, implement location autocomplete so users can search by area.

const axios = require('axios');

async function searchLocations(query) {
  const response = await axios.get(
    'https://bayut14.p.rapidapi.com/autocomplete',
    {
      params: { query, langs: 'en' },
      headers: {
        'x-rapidapi-host': 'bayut14.p.rapidapi.com',
        'x-rapidapi-key': process.env.RAPIDAPI_KEY
      }
    }
  );
  return response.data.data.locations;
}

// Returns: [{ id, externalID, name, slug, adCount }]
// Use externalID for property search

Step 3: Property Search

Now the core search functionality:

async function searchProperties(params) {
  const response = await axios.get(
    'https://bayut14.p.rapidapi.com/search-property',
    {
      params: {
        purpose: params.purpose || 'for-sale',
        location_ids: params.locationId,
        property_type: params.type || 'apartments',
        rooms: params.bedrooms,
        price_min: params.minPrice,
        price_max: params.maxPrice,
        sort_order: 'popular',
        page: params.page || 1,
        langs: 'en'
      },
      headers: {
        'x-rapidapi-host': 'bayut14.p.rapidapi.com',
        'x-rapidapi-key': process.env.RAPIDAPI_KEY
      }
    }
  );

  const { properties, total, totalPages } = response.data.data;
  return { properties, total, totalPages };
}

Each property in the response includes:

  • Title, price, bedrooms, bathrooms
  • Area in sqm
  • Location details
  • Cover photo
  • Agent info
  • Amenities
  • Completion status (ready vs off-plan)

Step 4: Property Details

When a user clicks a listing, fetch full details:

async function getPropertyDetails(externalId) {
  const response = await axios.get(
    'https://bayut14.p.rapidapi.com/property-details',
    {
      params: { external_id: externalId, langs: 'en' },
      headers: {
        'x-rapidapi-host': 'bayut14.p.rapidapi.com',
        'x-rapidapi-key': process.env.RAPIDAPI_KEY
      }
    }
  );
  return response.data.data;
}

Step 5: Off-Plan Projects

Add a section for new developments:

async function searchOffPlan(locationId) {
  const response = await axios.get(
    'https://bayut14.p.rapidapi.com/search-new-projects',
    {
      params: {
        location_ids: locationId,
        property_type: 'residential',
        sort_order: 'latest',
        page: 1
      },
      headers: {
        'x-rapidapi-host': 'bayut14.p.rapidapi.com',
        'x-rapidapi-key': process.env.RAPIDAPI_KEY
      }
    }
  );
  return response.data.data.properties;
}

What I Built in 48 Hours

Using this API, I built a working property search app with:

  • Location autocomplete (powered by /autocomplete)
  • Property search with filters (powered by /search-property)
  • Property detail pages (powered by /property-details)
  • Off-plan project listings (powered by /search-new-projects)
  • Agent profiles (powered by /agent-details)

Total development time: 48 hours.

With a scraper, this would have taken 3-4 weeks – and it would break every month.

The Numbers

Scraper Bayut API
Setup time 3-4 weeks 2 days
Monthly cost $300-500 (proxies) $10-50
Uptime ~70% 99.9%
Maintenance 10+ hrs/month 0 hrs/month
Legal risk High None

What to Build Next

Once you have the basics working, here are some features to add:

  • Price alerts – notify users when a property drops in price
  • Saved searches – let users save their filters
  • Market analytics – use /transactions to show price trends
  • Agent comparison – rank agents by listing count and area

Get Started

The Bayut API is available on RapidAPI with a free plan:

🔗 https://rapidapi.com/happyendpoint/api/bayut14/

Full documentation:

📖 https://bayutapi.dev/

Questions? Reach out: [email protected]

Built by Happy Endpoint – developer-friendly APIs for real-world data.

🌐 https://happyendpoint.com | 🐦 https://x.com/happyendpointhq

Inside AIO Sandbox (Part 1): Files & Shell — The Foundations of Agent Execution

Modern AI agents are no longer just generating text—they are expected to write files, modify code, and execute commands.
But doing this directly on your local machine or production systems is risky and hard to control.
This is where AIO Sandbox comes in.
It provides an isolated, programmable environment where agents can safely:

  • create and manipulate files

  • run shell commands

  • execute code

  • produce artifacts

In this first post, we’ll focus on the two most fundamental capabilities:

🧩 Filesystem (state)
⚙️ Shell (execution)

By the end, you’ll see how these combine into a complete runtime for agents.

🌐 Multi-language SDK Support

While this tutorial uses Python, AIO Sandbox is not limited to Python developers.
The agent-sandbox SDK also supports:

  • TypeScript / JavaScript

  • Go (Golang)

👉 This makes it easy to integrate AIO Sandbox into a wide range of agent frameworks, backend services, and developer stacks.

🛠️ Prerequisites

  • Python 3.12+

  • A running AIO Sandbox instance at http://localhost:8080

  • Python SDK installed

pip install agent-sandbox

🧠 Mental Model

Think of AIO Sandbox as a remote, disposable Linux machine that your agent controls via APIs.

  • Filesystem → where data and artifacts live

  • Shell → how actions are executed

Simple Flow:
Agent → API → Sandbox → Filesystem + Shell

📁 Part 1 — Working with Files

Let’s start by treating the sandbox like a filesystem.

1.Hello Sandbox Files

Goal: introduce write_file, read_file, and list_path.

from agent_sandbox import Sandbox

client = Sandbox(base_url="http://localhost:8080")

home_dir = client.sandbox.get_context().home_dir

notes_file = f"{home_dir}/hello.txt"

# Write a text file
write_result = client.file.write_file(
    file=notes_file,
    content="Hello from AIO Sandbox!nThis file lives inside the sandbox.",
)

print("Wrote bytes:", getattr(write_result.data, "bytes_written", None))

# Read it back
read_result = client.file.read_file(file=notes_file)
print("File content:")
print(read_result.data.content)

# List files in the sandbox home directory
list_result = client.file.list_path(
    path=home_dir,
    include_size=True,
    sort_by="name",
)

items_to_list = getattr(list_result.data, 'files', getattr(list_result.data, 'entries', []))

for item in items_to_list:
    print(f"- {item.path} ({getattr(item, 'size', 'unknown')} bytes)")

2.Edit a Config File

Goal: show replace_in_file and search_in_file.
💡 Agents often follow a loop:

modify → verify → proceed

from agent_sandbox import Sandbox

client = Sandbox(base_url="http://localhost:8080")

home_dir = client.sandbox.get_context().home_dir
config_file = f"{home_dir}/app.env"

# Create a simple config file
client.file.write_file(
    file=config_file,
    content="MODE=devnPORT=8000nDEBUG=truen",
)

# Replace one value
client.file.replace_in_file(
    file=config_file,
    old_str="MODE=dev",
    new_str="MODE=prod",
)

# Search to verify
search_result = client.file.search_in_file(
    file=config_file,
    regex=r"MODE=.*",
)

print("Search result:")
print(search_result)

# Read final content
final_file = client.file.read_file(file=config_file)
print("nUpdated config:")
print(final_file.data.content)

3.Write and Export an Artifact

Goal: show download_file.

  • sandbox outputs can be streamed out cleanly

  • useful for logs, reports, generated code, screenshots, notebooks, datasets

home_dir = client.sandbox.get_context().home_dir
report_file = f"{home_dir}/report.txt"

# Create an artifact inside the sandbox
client.file.write_file(
    file=report_file,
    content="Run completenStatus: successnArtifacts generated: 1n",
)

# Download it from the sandbox to the local machine
with open("downloaded_report.txt", "wb") as f:
    for chunk in client.file.download_file(path=report_file):
        f.write(chunk)

print("Downloaded sandbox artifact to ./downloaded_report.txt")

4.Discover files

result = client.file.find_files(
    path=home_dir,
    glob="*.txt",
)

print(result)

⚙️ Part 2 — Executing Commands (Shell)

Now let’s make the sandbox do work.

⚠️ Important Notes

  • Shell commands must be passed as keyword arguments:
exec_command(command="...")
  • Output is available at:
result.data.output
  • Exit status:
result.data.exit_code

1. Basic shell command execution (Hello World)

from agent_sandbox import Sandbox

client = Sandbox(base_url="http://localhost:8080")

result = client.shell.exec_command(
    command="echo 'Hello from sandbox shell'"
)

print("Output:", result.data.output)
print("Exit code:", result.data.exit_code)

2. Inspect the sandbox environment

result = client.shell.exec_command(command="pwd")
print("PWD:", result.data.output)

result = client.shell.exec_command(command="ls -la")
print(result.data.output)

👉 The sandbox behaves like a real Linux environment.

3. Execute a Python script

home_dir = client.sandbox.get_context().home_dir
script_path = f"{home_dir}/hello.py"

client.file.write_file(
    file=script_path,
    content="""
print("Running inside sandbox")
print("Computation:", 10 * 5)
""",
)

result = client.shell.exec_command(
    command=f"python3 {script_path}"
)

print(result.data.output)

🔥 This is an important pattern:

Agent writes code → executes it → observes output

4. Install and use a package

# Install package
client.shell.exec_command(command="pip install requests")

# Verify installation
result = client.shell.exec_command(
    command='python3 -c "import requests; print(requests.__version__)"'
)

print("Requests version:", result.data.output)

💡 Shows:

  • sandbox is mutable

  • supports dynamic dependencies

5. Chain commands

result = client.shell.exec_command(
    command="mkdir -p demo && echo 'hello' > demo/file.txt && cat demo/file.txt"
)

print(result.data.output)

6. Check exit codes

result = client.shell.exec_command(command="ls non_existent_file")

print("Output:", result.data.output)
print("Exit code:", result.data.exit_code)

Agents should check exit codes, not just output.

🧩 Bringing It Together

At this point, we’ve seen:

Filesystem (state)

Core primitives to showcase:

  • create

  • read

  • modify

  • search

  • list

  • discover

Shell (execution)

Core primitives to showcase:

  • run commands

  • execute scripts

  • inspect environment

🎯 Key Insight

AIO Sandbox gives agents a safe, programmable runtime:

  • Files → memory/state

  • Shell → actions

Together, they enable real-world workflows like:

  • code generation and execution

  • data processing

  • automation pipelines

  • tool orchestration

🚀 What’s Next

Thanks for reading! Hope it was helpful! This is just the beginning. In upcoming posts, we’ll dive into topics such as:

  • 🌐 Browser automation (CDP-based)

  • 🔌 MCP tool integration

  • 📓 Jupyter / notebook execution

  • 🤖 OpenClaw integration

  • 🎯 Reinforcement learning inside sandbox

💬 Final Thoughts

AIO Sandbox bridges the gap between:

  • “LLM that generates text”

  • and

  • “Agent that can actually do things”

And it does so safely, reproducibly, and programmatically.