Microsoft Xbox Uygulaması güncelledi: İşte yeni özellikler
Microsoft, Xbox uygulamasını sessiz sedasız güncelledi. Yeni sürümle birlikte özellikle taşınabilir cihazlara yönelik görüntü ayarları ve performans iyileştirmeleri geliyor.Robotlar, çölün ortasında 100 MW’lık güneş paneli kurdu
ABD’nin Mojave Çölü’nde Maximo robotları, AES’in Bellefield tesisinde 100 MW’lık güneş paneli kurulumunu tamamladı. Robotlar sayesinde kurulum süreci 2 kat hızlandı.Toyota’dan tarihi karar: Hayatta kalmak için kalite standartlarını gevşetiyor
Toyota’nın üst yönetimi, yüzlerce tedarikçiye şirketin küresel pazarda varoluşsal bir tehditle karşı karşıya olduğu uyarısı yaptı. Japon marka hayatta kalabilmek için kalite standartlarını esnetecek.Google Maps’ten elektrikli araçlara yeni özellik: Akıllı rota ve şarj planlama
Google Maps, Android Auto destekli 350’den fazla araç için yeni akıllı rota planlama özelliklerini kullanıma sunuyor. Bu sayede uzun yolculuklar daha az stresli hale gelirken,Bluesky akış sayfanızı yapay zekâ ile belirleyecek
Bluesky girişiminin açık kaynak protokoller üzerinde geliştirdiği Attie adlı yapay zekâsı yavaş yavaş platforma entegre olmaya başladı. İlk görevi ise akış sayfasını şekillendirmek.Mobil cihazlarda 5G’yi aktif hale getirme [Nasıl yapılır?]
Türkiye’de mobil internet deneyiminde yeni bir dönem başlıyor. 1 Nisan 2026 itibarıyla ülke genelinde 5G hizmeti resmi olarak aktif hale gelecek. 5G, 4,5G’ye göre çok daha yüksek hız ve düşük gecikme süresi sunarak video akışlarından online oyunlara, bulut uygulamalardan akıllı cihazlara kadar pek çok alanda fark yaratacak. Yeni nesil mobil bağlantıdan yararlanmak için hem cihazınızın hem de operatörünüzün 5G desteği sunması gerekiyor. 5G uyumlu telefonlar ve SIM kartlar, kullanıcıların bu yüksek hızdan anında faydalanmasını mümkün kılıyor. Telefonunuzun 5G desteği olup olmadığını kontrol edin. Yeni çıkan Android modeller ve iPhone’ların büyük kısmı 5G’yi destekliyor. Ayarlardan 5G’yi Açın Android için: Ayarlar – Bağlantılar – Mobil Ağ – Ağ Modu- ”5G/4G/3G/2G (otomatik)” seçeneğini işaretleyin. iPhone için: Ayarlar – Hücresel – Hücresel Veri Seçenekleri – Ses ve Veri- ”5G Açık” veya ”5G Otomatik” seçeneğini aktif edin. 5G sinyali Kontrol Edin Telefonunuzda “5G” işaretini görmeniz, bağlantının yeni nesil 5G altyapısı üzerinden gerçekleştiğini gösterir. 5G teknolojisinin […]
Mobil cihazlarda 5G’yi aktif hale getirme [Nasıl yapılır?] yazısı ilk olarak Teknoloji haberleri – LOG üzerinde yayınlandı.
Deploy Apps to Samsung Smart TV: The Bash Script That Saves Hours
If you’ve ever deployed a web app to a Samsung Smart TV, you know the pain. Connect via sdb, resolve the device name, package the .wgt file with the right certificate, uninstall the old version, install the new one, run it, pray it doesn’t crash. Every. Single. Time.
After 9+ years of doing this across dozens of OTT projects — including platforms serving 80M+ viewers — I finally snapped and wrote a script that automates the entire thing.
I’m sharing it here because I wish someone had shared something like this with me years ago.
What You Need Before Starting
Before the script can do its magic, you need three things set up on your machine and your TV.
1. Install Tizen Studio. Download it from the official Tizen Studio page. You need the CLI tools — specifically sdb and the tizen command-line utility. The script expects them at ~/tizen-studio/tools/. After the base installation, open Package Manager, go to the Extension SDK tab, and install TV Extensions and Samsung Certificate Extension. The full process is described in the Samsung TV SDK installation guide.
2. Create a Samsung certificate. This is the part that trips most people up. You need a signing certificate to package and install apps on a physical TV. Follow the Samsung certificate guide: open Certificate Manager in Tizen Studio, create a Samsung certificate profile (not a Tizen one), authenticate with your Samsung Developer account, and register your TV’s DUID as the target device. Keep the certificate backed up — future updates must use the same author certificate or the TV treats them as a completely new app.
3. Enable Developer Mode on the TV. On the TV itself, go to the Apps panel, open App Settings, and enter the code 12345. This opens the Developer Mode popup. Toggle it on, enter your computer’s IP address, and reboot the TV. After restart you’ll see “Develop Mode” at the top of the Apps panel. The full walkthrough is in the Samsung device setup guide.
Also required: Java 8. Tizen CLI tools still depend on Java 8, not newer versions. On macOS, install it with brew install --cask temurin8. The script automatically detects and switches to Java 8 for the session, so it won’t mess with your system Java.
What the Script Does
The script gives you an interactive menu powered by gum (a terminal UI toolkit that it auto-installs if missing). You get 8 options:
- Run All Steps — connect, resolve device, package, uninstall old version, install, and run. One selection, done.
- Connect to TV — establishes sdb connection to your TV’s IP.
- Resolve device name — reads the device identifier from sdb, needed for all Tizen CLI commands.
- Package app — signs your build directory as a .wgt file with your certificate. Handles filename sanitization automatically.
- Uninstall app — removes the existing version from the TV (gracefully ignores if not installed).
- Install app — pushes the .wgt to the TV.
- Debug app — launches a debug session and forwards the debug port so you can attach Chrome DevTools.
- Run app — launches the app in non-debug mode.
You can also pass a pre-built .wgt file directly, and the script skips the packaging step entirely.
Config Persistence: Set Once, Deploy Forever
On first run, the script asks you four things: TV IP address, certificate name, package ID, and the path to your build directory (or .wgt file). The package ID comes from your project’s config.xml — it’s the combination of the tizen:application package attribute, in the format AbCdEf1234.MyApp. The script saves all of this to ~/.tizen_deploy_config, so every subsequent run just works — no re-entering values.
Working on a different project or switched TVs? Run the script with --clear-config to reset everything:
./tizen_deploy.sh --clear-config
This wipes the saved config and prompts you fresh.
The Full Script
Here’s the complete source. Save it as tizen_deploy.sh, make it executable with chmod +x tizen_deploy.sh, and run it.
#!/bin/bash
# PLATFORM DETECTION
OS_TYPE="$(uname -s)"
IS_MAC=false
IS_LINUX=false
IS_WIN=false
case "$OS_TYPE" in
Darwin*) IS_MAC=true ;;
Linux*) IS_LINUX=true ;;
MINGW*|MSYS*|CYGWIN*) IS_WIN=true ;;
esac
# CONFIG PATH
CONFIG_PATH="$HOME/.tizen_deploy_config"
$IS_WIN && CONFIG_PATH="$HOME/_tizen_deploy_config"
# --clear-config ARG HANDLING
if [[ "$1" == "--clear-config" ]]; then
echo "Clearing config at $CONFIG_PATH"
rm -f "$CONFIG_PATH"
fi
# INSTALL GUM IF NOT FOUND
install_gum() {
if command -v gum &>/dev/null; then return; fi
echo "'gum' is not installed. Installing..."
if $IS_MAC; then
if ! command -v brew &>/dev/null; then
echo "Homebrew is required on macOS." >&2
exit 1
fi
brew install charmbracelet/tap/gum
elif $IS_LINUX; then
if command -v apt &>/dev/null; then
sudo apt update && sudo apt install -y gum
elif command -v dnf &>/dev/null; then
sudo dnf install -y gum
elif command -v pacman &>/dev/null; then
sudo pacman -Sy gum
else
echo "Unsupported package manager." >&2
exit 1
fi
elif $IS_WIN; then
echo "On Windows, install gum manually:"
echo " scoop install gum"
read -p "Press Enter when installed..."
fi
}
if ! command -v tizen &>/dev/null; then
echo "Tizen CLI not found. Install Tizen Studio first."
exit 1
fi
install_gum
# FORCE JAVA 8 FOR TIZEN
if command -v /usr/libexec/java_home &>/dev/null; then
JAVA_8_HOME=$(/usr/libexec/java_home -v 1.8 2>/dev/null)
if [[ -z "$JAVA_8_HOME" ]]; then
echo "Java 8 is required. Install: brew install --cask temurin8"
exit 1
fi
export JAVA_HOME="$JAVA_8_HOME"
export PATH="$JAVA_HOME/bin:$PATH"
fi
# LOAD / PROMPT CONFIGURATION
prompt_or_load() {
local var_name=$1
local prompt_msg=$2
local current_value=$(grep "^$var_name=" "$CONFIG_PATH" 2>/dev/null | cut -d'=' -f2-)
if [ -n "$current_value" ]; then
eval "$var_name="$current_value""
else
read -p "$prompt_msg: " user_input
echo "$var_name="$user_input"" >> "$CONFIG_PATH"
eval "$var_name="$user_input""
fi
}
prompt_or_load TV_IP "Enter TV IP address"
prompt_or_load CERTIFICATE_NAME "Enter Certificate/Profile name"
prompt_or_load PACKAGE_ID "Enter PACKAGE_ID (e.g., abc123.MyApp)"
prompt_or_load INPUT_PATH "Enter build dir or .wgt file path"
# Derive behavior based on INPUT_PATH
if [[ "$INPUT_PATH" == *.wgt ]]; then
BUILD_DIR="$(dirname "$INPUT_PATH")"
APP_NAME="$(basename "$INPUT_PATH")"
SKIP_PACKAGE=true
else
BUILD_DIR="$INPUT_PATH"
APP_NAME="$(echo "$PACKAGE_ID" | cut -d. -f2).wgt"
SKIP_PACKAGE=false
fi
SDB="$HOME/tizen-studio/tools/sdb"
TIZEN_CLI="$HOME/tizen-studio/tools/ide/bin/tizen"
TV_PORT="26101"
DEVICE_NAME=""
DEBUG_PORT=""
# STEP FUNCTIONS
connect() {
echo "Connecting to $TV_IP:$TV_PORT..."
CONNECT_OUTPUT=$($SDB connect "$TV_IP:$TV_PORT" 2>&1)
echo "$CONNECT_OUTPUT" | grep -Eq "connected to|is already connected"
&& echo "Connected." || { echo "Failed."; echo "$CONNECT_OUTPUT"; exit 1; }
}
resolve_device() {
DEVICE_NAME=$($SDB devices | grep "$TV_IP:$TV_PORT" | awk '{print $3}')
[[ -z "$DEVICE_NAME" ]] && { echo "Could not resolve device."; exit 1; }
echo "Device: $DEVICE_NAME"
}
package_app() {
$SKIP_PACKAGE && { echo "Skipping packaging (.wgt provided)"; return; }
PACKAGE_OUTPUT=$($TIZEN_CLI package -s "$CERTIFICATE_NAME" -t wgt -- "$BUILD_DIR" 2>&1)
if echo "$PACKAGE_OUTPUT" | grep -q "Package File Location"; then
PKG_FILE=$(echo "$PACKAGE_OUTPUT" | grep "Package File Location" | sed -E 's/.*:s*//' | xargs)
NEW_BASENAME=$(basename "$PKG_FILE" | tr -d ' ')
mv "$PKG_FILE" "$(dirname "$PKG_FILE")/$NEW_BASENAME" 2>/dev/null
APP_NAME="$NEW_BASENAME"
echo "Packaged: $APP_NAME"
else
echo "Packaging failed."; echo "$PACKAGE_OUTPUT"; exit 1
fi
}
uninstall_app() {
$TIZEN_CLI uninstall -t "$DEVICE_NAME" -p "$PACKAGE_ID" 2>&1 |
grep -q "uninstall completed" && echo "Uninstalled." || echo "Not installed, skipping."
}
install_app() {
INSTALL_OUTPUT=$($TIZEN_CLI install --name "$APP_NAME" -t "$DEVICE_NAME" -- "$BUILD_DIR" 2>&1)
echo "$INSTALL_OUTPUT" | grep -q "successfully installed"
&& echo "Installed." || { echo "Install failed."; echo "$INSTALL_OUTPUT"; exit 1; }
}
debug_app() {
DEBUG_OUTPUT=$($SDB shell 0 debug "$PACKAGE_ID" 2>&1)
DEBUG_PORT=$(echo "$DEBUG_OUTPUT" | grep -oE "port: [0-9]+" | awk '{print $2}')
[[ -z "$DEBUG_PORT" ]] && { echo "Debug failed."; echo "$DEBUG_OUTPUT"; exit 1; }
$SDB forward "tcp:$DEBUG_PORT" "tcp:$DEBUG_PORT" 2>&1
echo "Debug on port $DEBUG_PORT"
}
run_app() {
RUN_OUTPUT=$($TIZEN_CLI run -t "$DEVICE_NAME" -p "$PACKAGE_ID" 2>&1)
echo "$RUN_OUTPUT" | grep -q "successfully launched"
&& echo "Launched." || { echo "Launch failed."; echo "$RUN_OUTPUT"; exit 1; }
}
run_all() { connect; resolve_device; package_app; uninstall_app; install_app; run_app; }
# INTERACTIVE MENU
choice=$(gum choose
"Run All Steps (1-5, 7)"
"1. Connect to TV"
"2. Resolve device name"
"3. Package app"
"4. Uninstall app"
"5. Install app"
"6. Debug app + forward port"
"7. Run app (non-debug)"
"8. Disconnect from TV")
case "$choice" in
"Run All Steps (1-5, 7)") run_all ;;
"1. Connect to TV") connect ;;
"2. Resolve device name") resolve_device ;;
"3. Package app") package_app ;;
"4. Uninstall app") resolve_device && uninstall_app ;;
"5. Install app") resolve_device && install_app ;;
"6. Debug app + forward port") resolve_device && debug_app ;;
"7. Run app (non-debug)") resolve_device && run_app ;;
"8. Disconnect from TV") disconnect ;;
*) echo "Invalid selection." && exit 1 ;;
esac
echo "Done."
How to Debug Your App with Chrome DevTools
One of the most useful features of the script is remote debugging. Here’s how to connect Chrome DevTools to your app running on the TV.
Step 1: Close the app on the TV. If the app is already running, close it first. The debug session needs to launch the app itself — it won’t attach to an already running instance.
Step 2: Run the debug command. Launch the script and select “Debug app + forward port” from the menu. The script will output a port number — copy it.
Step 3: Open Chrome DevTools for devices. In Chrome, go to chrome://inspect/#devices. Make sure “Discover network targets” is checked, then click Configure…
Step 4: Add the debug port. In the Target discovery settings dialog, add localhost:{port} where {port} is the number the script returned. Click Done.
Step 5: Inspect. Your TV app should appear under Remote Target. Click inspect on the first item in the list — a full Chrome DevTools window opens, connected to your app on the TV. You can inspect DOM, debug JavaScript, profile performance, and see network requests just like you would on a regular web page.
Important Notes and Limitations
A few things to keep in mind:
- Tested on macOS. The script has platform detection for Linux and Windows (Git Bash), but I’ve only battle-tested it on macOS. Linux should work with minor adjustments. Windows via Git Bash/MSYS is experimental — your mileage may vary.
-
Java 8 is mandatory. Tizen CLI refuses to work with Java 11+. The script handles this by temporarily switching
JAVA_HOMEfor the session only — your system Java stays untouched. - Certificate issues are the #1 problem. If install fails with a signing error, check three things: the certificate profile name must match exactly, the TV’s DUID must be registered in the distributor certificate, and the certificate type matters — you need a Samsung certificate (not Tizen), and the privilege level must be correct (Partner for apps using privileged APIs, Public for basic apps).
- gum is auto-installed. The interactive menu uses gum from Charm. If it’s not installed, the script installs it via Homebrew (macOS), apt/dnf/pacman (Linux), or asks you to install it manually (Windows).
About Me
I’m Aleksandr Sakov — a full-stack developer with 9+ years of experience building OTT streaming platforms, mobile apps, and web products. The platforms I’ve built serve 80M+ viewers across 15+ device types including Samsung Tizen, LG WebOS, Android TV, Roku, and more.
If you’re building a Smart TV app or any streaming product and want someone who’s already solved the hard problems — book a free 30-minute call or try the project calculator for a quick estimate.
Courts Will Soon Judge Your Face Match Workflow, Not Just Your Results
How regulatory shifts are rewriting the biometric dev’s roadmap
The regulatory landscape for computer vision is shifting from “does it work?” to “is it defensible?” Brazil’s recent Digital ECA guidelines and the impending enforcement of the EU AI Act are moving the goalposts for developers working with biometric data. If you are building or maintaining facial comparison tools, the “Definition of Done” for your next sprint just got much more complex. It is no longer enough to return a similarity score; you must now return an audit trail.
For developers working with facial comparison, the technical implications are immediate. We have historically focused on optimizing the Euclidean distance analysis—the mathematical backbone that measures the similarity between two facial embeddings in N-dimensional space. However, as synthetic media becomes more sophisticated, a low Euclidean distance score is no longer a definitive result; it is a potential liability. If your API returns a high-confidence match without first verifying that the source image isn’t a GAN-generated deepfake, your software is creating a forensic blind spot for the investigator using it.
The Shift from Matching to Provenance
In the next 24 months, the “standard” biometric pipeline will likely evolve. We are moving away from a simple two-step process (Input -> Match) toward a multi-stage auditable workflow:
- Input Validation: Checking for synthetic artifacts or deepfake markers before the embedding is even generated.
- Euclidean Analysis: Running the core comparison logic to determine side-by-side similarity.
- Metadata Logging: Stamping the result with a legal basis flag and a timestamped audit log.
As engineers, this means our JSON responses need to do more than just spit out a confidence float. We need to build systems that can reconstruct every decision point in the chain of analysis. If a private investigator presents your tool’s results in court, can your database prove why that match was made and that the source material was verified as real?
Scaling Enterprise Logic for the Solo Investigator
At CaraComp, we prioritize facial comparison—the targeted, side-by-side analysis of specific photos within a case—rather than mass surveillance. The technical challenge we’ve solved is delivering that same high-level Euclidean distance analysis used by federal agencies at a fraction of the cost. For the solo investigator, the friction isn’t usually the math; it’s the accessibility and the reporting.
We’ve focused on building batch processing capabilities that allow users to upload once and compare many, but the real “feature” is the court-ready report. From a development perspective, this means our backend isn’t just a comparison engine; it’s a document generator that translates complex algorithmic outputs into a format that a judge or an insurance adjuster can understand.
Why Your Codebase Needs a “Legal Basis” Layer
Whether you are using TensorFlow, PyTorch, or a custom wrapper, you need to start thinking about “compliance-by-design.” Brazil’s $9.4 million fine potential for non-compliance isn’t just a business risk; it’s a technical requirement. Your database schema should already be accounting for fields like consent_status and media_provenance.
The investigators who win cases in 2028 will be the ones whose tools didn’t just find the match, but proved the process. As developers, it is our job to ensure the math holds up under cross-examination.
How are you handling deepfake pre-processing in your computer vision pipelines—are you integrating it as a gated check or as an asynchronous metadata flag in your results?
Designing a Practical IIoT Architecture
Introduction
Industrial IoT (IIoT) architectures often look clean in diagrams but become messy when implemented in real systems.
While exploring this space, I tried to structure a more practical reference architecture that balances clarity with real-world concerns like scalability, reliability, and multi-tenancy.
This is a work in progress, and I’d love feedback from others building similar systems.
The Problem with Typical IoT Architectures
Most reference architectures:
- stay too high-level
- don’t separate concerns clearly (telemetry vs command)
- ignore multi-tenancy
- don’t address edge vs cloud trade-offs
This creates challenges when moving from POC → production.
Proposed Architecture Overview
At a high level, the system is divided into four layers:
1. Device & Controller Layer
- Sensors, controllers, PLCs
- Communicate via MQTT or similar lightweight protocols
- Separate channels for telemetry and command
2. Edge Layer
- Local processing and filtering
- Handles intermittent connectivity
- Reduces latency for critical operations
3. Cloud Ingestion Layer
- MQTT broker → event streaming pipeline
- Separation of:
- telemetry (data ingestion)
- command (control path)
4. Application Layer
- Multi-tenant SaaS architecture
- Monitoring dashboards
- Command and control APIs
Key Design Considerations
Telemetry vs Command Separation
Combining both leads to complexity. Keeping them separate improves scalability and clarity.
Edge vs Cloud Responsibilities
- Edge: real-time, low-latency decisions
- Cloud: aggregation, analytics, orchestration
Multi-Tenancy
Needs to be built-in from the start (not bolted on later).
Open Questions / Trade-offs
Some areas I’m still exploring:
- How to design reliable command execution (ACK/NACK, retries, idempotency)
- Where to draw the boundary between edge and cloud
- Best approaches for tenant isolation at scale
Reference
I’ve put together a more detailed version (with diagrams) here:
👉 https://gauravs19.github.io/iiot-reference-architecture/
Looking for Feedback
If you’ve worked on IoT/IIoT systems:
- What patterns have worked well for you?
- Where do architectures typically break?
- What would you change here?
Open to suggestions and alternative approaches.


