Skip to content
View in the app

A better way to browse. Learn more.

hosang I.T.

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

reporter

Members
  • Joined

  • Last visited

    Never

Everything posted by reporter

  1. Apple increasingly has to compete with other companies for chips made by Taiwan Semiconductor Manufacturing Co. (TSMC), as surging demand for artificial intelligence reshapes capacity and customer priority. According to a detailed report published by semiconductor analyst Tim Culpan on his blog Culpium, Apple is no longer guaranteed preferential access to leading-edge manufacturing capacity at TSMC, marking a notable change after more than a decade in which Apple's chips were central to the foundry's expansion strategy. Apple is now competing directly with AI-focused customers such as Nvidia and AMD for supply, particularly at the most advanced process nodes. AI accelerators consume substantially more wafer area per unit than smartphone system-on-chips, meaning that even a smaller number of AI customers can absorb a disproportionate share of advanced manufacturing output. As a result, Apple's chip designs are no longer automatically prioritized across TSMC's two dozen fabrication plants. Nvidia likely surpassed Apple as TSMC's largest customer by revenue in at least one or two quarters in 2025, but exact customer rankings are unknown. Apple ceased to be the primary driver of TSMC's revenue growth about five years ago. The report suggests that Apple may face higher silicon costs for future chip generations as it competes with AI customers willing to pay premiums for priority access. While Apple is unlikely to be unable to ship products due to insufficient wafers, sustained pricing pressure with advanced nodes could influence product margins or pricing strategies over the next several years.Tag: TSMC This article, "Apple Now Facing Unprecedented Competition for Chip Supply" first appeared on MacRumors.com Discuss this article in our forums View the full article
  2. Last year, the Unicode Consortium previewed some of the new emoji that are expected to be added to the iPhone with iOS 26.4 in March or April. Here are nine of the new emoji:Trombone Treasure Chest Distorted Face Hairy Creature (aka Bigfoot or Sasquatch) Fight Cloud Apple Core Orca Ballet Dancers LandslideNotably, Distorted Face is a popular emoji in Discord servers. It is essentially a distorted version of the embarassed face emoji. Apple most recently added new emoji to the iPhone with iOS 18.4, an update that came out in March last year. iOS 17.4, iOS 16.4, and iOS 15.4 also introduced new emoji over the years, so the timing has become predictable by this point. On the iPhone 15 Pro and newer, there is an Apple Intelligence feature called Genmoji that allows you to create your own emoji, or combine existing ones. The new emoji listed above would be added directly to the iPhone's emoji keyboard.Related Roundups: iOS 26, iPadOS 26Tag: EmojiRelated Forum: iOS 26 This article, "iOS 26.4 Will Add These 9 New Emoji to Your iPhone" first appeared on MacRumors.com Discuss this article in our forums View the full article
  3. It's not just you: X is down right now for many users across the iPhone, web, and other platforms. The social media platform, formerly known as Twitter, is failing to display posts due the outage. It is unclear how long the issues will last. Not everyone is affected, and posts might load sporadically. We will update this story when the outage is fully resolved. This article, "X is Down: Twitter Not Working Across iPhone and Web" first appeared on MacRumors.com Discuss this article in our forums View the full article
  4. This week's best Apple deals include big discounts on AirTag, AirPods Max, and Mac mini. We're also tracking great sitewide sales at Satechi, Samsung, and Best Buy, with discounts on everything from Mac-compatible monitors to TVs, headphones, and more. Note: MacRumors is an affiliate partner with some of these vendors. When you click a link and make a purchase, we may receive a small payment, which helps us keep the site running. AirTag What's the deal? Take $34 off AirTag 4-Pack Where can I get it? Amazon Where can I find the original deal? Right here $34 OFFAirTag 4-Pack for $64.98 Apple's AirTag 4-Pack is within $2 of its all-time low price this week on Amazon, matching the best price we've seen so far in 2026. You can get the accessory for $64.98, down from $99.00, and right now we're not seeing any notable discounts on the 1-Pack. AirPods Max What's the deal? Take $99 off AirPods Max Where can I get it? Amazon and Best Buy $99 OFFAirPods Max for $449.99 You can get $99 off every USB-C AirPods Max color at Amazon and Best Buy right now. Although this is a second-best price, it's the best one we've tracked so far in 2026, and this is one of the few times we've seen every color on sale. Mac Mini What's the deal? Take up to $130 off M4 Mac mini Where can I get it? Amazon Where can I find the original deal? Right here $100 OFFM4 Mac mini (256GB) for $499.00 $110 OFFM4 Mac mini (16GB/512GB) for $689.00 $109 OFFM4 Mac mini (24GB/512GB) for $889.99 $130 OFFM4 Pro Mac mini (24GB/512GB) for $1,269.00 Amazon this week has a few models of Apple's M4 Mac mini on sale at low prices, starting at $499.99 for the model with 16GB RAM/256GB SSD, down from $599.00. Discounts reach up to $130 off in these sales, and this time around there is also a discount on the M4 Pro model. Satechi What's the deal? Take 20% off Satechi's new products Where can I get it? Satechi Where can I find the original deal? Right here Note: Use code CES2026 to see this discount. UP TO 20% OFFSatechi's CES 2026 Sale Satechi announced a few products at CES last week, and to mark the launch it's providing a 20 percent discount on these devices for early adopters. You can use the code CES2026 at checkout to get 20 percent off all five of Satechi's newest products. Additionally, Satechi is hosting a "last chance" sale this week, with up to 30 percent off accessories with a limited supply remaining. In this sale you'll find discounts on MagSafe-compatible wireless charging pads, Thunderbolt docks, and more. Slim EX Wireless Mouse - $24.00, down from $29.99 Thunderbolt 5 Pro Cable - $32.00, down from $39.99 Slim EX1 Wireless Keyboard - $40.00, down from $49.99 Slim EX3 Wireless Keyboard - $56.00, down from $69.99 Thunderbolt 5 CubeDock - $320.00 (pre-order), down from $399.99 Samsung What's the deal? Save on Samsung monitors and TVs Where can I get it? Samsung Where can I find the original deal? Right here $300 OFF32-inch Smart Monitor M9 for $1,299.99 $600 OFF65-inch The Frame for $1,199.99 Samsung this week introduced a new batch of discounts across its most popular monitors and TVs, with notable markdowns on products like The Frame and the Smart Monitor series. Best Buy What's the deal? Save sitewide during Best Buy's winter sale Where can I get it? Best Buy Where can I find the original deal? Right here SITEWIDE SALEBest Buy Winter Sale Best Buy kicked off a new Winter Sale this week, with notable markdowns on Apple devices, TVs, headphones and speakers, monitors, appliances, and much more. This sale is set to last through January 19, and you don't need to be a My Best Buy Plus or Total member to see the deals. In terms of Apple devices, you can find solid deals on MacBook Air, AirPods Max, iPad Pro, MacBook Pro, Beats accessories, and more. In most cases Best Buy is offering same day pick-up on these products, and there are several free shipping options as well. If you're on the hunt for more discounts, be sure to visit our Apple Deals roundup where we recap the best Apple-related bargains of the past week. Deals Newsletter Interested in hearing more about the best deals you can find in 2026? Sign up for our Deals Newsletter and we'll keep you updated so you don't miss the biggest deals of the season! Related Roundup: Apple Deals This article, "Best Apple Deals of the Week: Take Up to $130 Off M4 Mac Mini, Plus Deals on AirTag, AirPods Max, and More" first appeared on MacRumors.com Discuss this article in our forums View the full article
  5. Hello, I’m Philippe, and I am a Principal Solutions Architect helping customers with their usage of Docker. I started getting seriously interested in generative AI about two years ago. What interests me most is the ability to run language models (LLMs) directly on my laptop (For work, I have a MacBook Pro M2 max, but on a more personal level, I run LLMs on my personal MacBook Air M4 and on Raspberry Pis – yes, it’s possible, but I’ll talk about that another time). Let’s be clear, reproducing a Claude AI Desktop or Chat GPT on a laptop with small language models is not possible. Especially since I limit myself to models that have between 0.5 and 7 billion parameters. But I find it an interesting challenge to see how far we can go with these small models. So, can we do really useful things with small LLMs? The answer is yes, but you need to be creative and put in a bit of effort. I’m going to take a concrete use case, related to development (but in the future I’ll propose “less technical” use cases). (Specific) Use Case: Code Writing Assistance I need help writing code Currently, I’m working in my free time on an open-source project, which is a Golang library for quickly developing small generative AI agents. It’s both to get my hands dirty with Golang and prepare tools for other projects. This project is called Nova; there’s nothing secret about it, you can find it here. If I use Claude AI and ask it to help me write code with Nova: “I need a code snippet of a Golang Nova Chat agent using a stream completion.” The response will be quite disappointing, because Claude doesn’t know Nova (which is normal, it’s a recent project). But Claude doesn’t want to disappoint me and will still propose something which has nothing to do with my project. And it will be the same with Gemini. So, you’ll tell me, give the “source code of your repository to feed” to Claude AI or Gemini. OK, but imagine the following situation: I don’t have access to these services, for various reasons. Some of these reasons could be confidentiality, the fact that I’m on a project where we don’t have the right to use the internet, for example. That already disqualifies Claude AI and Gemini. How can I get help writing code with a small local LLM? So as you guessed, with a local LLM. And moreover, a “very small” LLM. Choosing a language model When you develop a solution based on generative AI, the choice of language model(s) is crucial. And you’ll have to do a lot of technology watching, research, and testing to find the model that best fits your use case. And know that this is non-negligible work. For this article (and also because I use it), I’m going to use hf.co/qwen/qwen2.5-coder-3b-instruct-gguf:q4_k_m, which you can find here. It’s a 3 billion parameter language model, optimized for code generation. You can install it with Docker Model Runner with the following command: docker model pull hf.co/Qwen/Qwen2.5-Coder-3B-Instruct-GGUF:Q4_K_M And to start chatting with the model, you can use the following command: docker model run hf.co/qwen/qwen2.5-coder-3b-instruct-gguf:q4_k_m Or use Docker Desktop: So, of course, as you can see in the illustration above, this little “Qwen Coder” doesn’t know my Nova library either. But we’re going to fix that. Feeding the model with specific information For my project, I have a markdown file in which I save the code snippets I use to develop examples with Nova. You can find it here. For now, there’s little content, but it will be enough to prove and illustrate my point. So I could add the entire content of this file to a user prompt that I would give to the model. But that will be ineffective. Indeed, small models have a relatively small context window. But even if my “Qwen Coder” was capable of ingesting all the content of my markdown file, it would have trouble focusing on my request and on what it should do with this information. So, 1st essential rule: when you use a very small LLM, the larger the content provided to the model, the less effective the model will be. 2nd essential rule: the more you keep the conversation history, the more the content provided to the model will grow, and therefore it will decrease the effectiveness of the model. So, to work around this problem, I’m going to use a technique called RAG (Retrieval Augmented Generation). The principle is simple: instead of providing all the content to the model, we’re going to store this content in a “vector” type database, and when the user makes a request, we’re going to search in this database for the most relevant information based on the user’s request. Then, we’re going to provide only this relevant information to the language model. For this blog post, the data will be kept in memory (which is not optimal, but sufficient for a demonstration). RAG? There are already many articles on the subject, so I won’t go into detail. But here’s what I’m going to do for this blog post: My snippets file is composed of sections: a markdown title (## snippet name), possibly a description in free text, and a code block (golang … ). I’m going to split this file by sections into chunks of text (we also talk about “chunks”), Then, for each section I’m going to create an “embedding” (vector representation of text == mathematical representation of the semantic meaning of the text) with the ai/embeddinggemma:latest model (a relatively small and efficient embedding model). Then I’m going to store these embeddings (and the associated text) in an in-memory vector database (a simple array of JSON objects). If you want to learn more about embedding, please read this article:Run Embedding Models and Unlock Semantic Search with Docker Model Runner Diagram of the vector database creation process: Similarity search and user prompt construction Once I have this in place, when I make a request to the language model (so hf.co/qwen/qwen2.5-coder-3b-instruct-gguf:q4_k_m), I’m going to: Create an embedding of the user’s request with the embedding model. Compare this embedding with the embeddings stored in the vector database to find the most relevant sections (by calculating the distance between the vector representation of my question and the vector representations of the snippets). This is called a similarity search. From the most relevant sections (the most similar), I’ll be able to construct a user prompt that includes only the relevant information and my initial request. Diagram of the search and user prompt construction process: So the final user prompt will contain: The system instructions. For example: “You are a helpful coding assistant specialized in Golang and the Nova library. Use the provided code snippets to help the user with their requests.” The relevant sections were extracted from the vector database. The user’s request. Remarks: I explain the principles and results, but all the source code (NodeJS with LangchainJS) used to arrive at my conclusions is available in this project To calculate distances between vectors, I used cosine similarity (A cosine similarity score of 1 indicates that the vectors point in the same direction. A cosine similarity score of 0 indicates that the vectors are orthogonal, meaning they have no directional similarity.) You can find the JavaScript function I used here: And the piece of code that I use to split the markdown snippets file: Warning: embedding models are limited by the size of text chunks they can ingest. So you have to be careful not to exceed this size when splitting the source file. And in some cases, you’ll have to change the splitting strategy (fixed-size chunk,s for example, with or without overlap) Implementation and results, or creating my Golang expert agent Now that we have the operating principle, let’s see how to put this into music with LangchainJS, Docker Model Runner, and Docker Agentic Compose. Docker Agentic Compose configuration Let’s start with the Docker Agentic Compose project structure: services: golang-expert: build: context: . dockerfile: Dockerfile environment: TERM: xterm-256color HISTORY_MESSAGES: 2 MAX_SIMILARITIES: 3 COSINE_LIMIT: 0.45 OPTION_TEMPERATURE: 0.0 OPTION_TOP_P: 0.75 OPTION_PRESENCE_PENALTY: 2.2 CONTENT_PATH: /app/data volumes: - ./data:/app/data stdin_open: true # docker run -i tty: true # docker run -t configs: - source: system.instructions.md target: /app/system.instructions.md models: chat-model: endpoint_var: MODEL_RUNNER_BASE_URL model_var: MODEL_RUNNER_LLM_CHAT embedding-model: endpoint_var: MODEL_RUNNER_BASE_URL model_var: MODEL_RUNNER_LLM_EMBEDDING models: chat-model: model: hf.co/qwen/qwen2.5-coder-3b-instruct-gguf:q4_k_m embedding-model: model: ai/embeddinggemma:latest configs: system.instructions.md: content: | Your name is Bob (the original replicant). You are an expert programming assistant in Golang. You write clean, efficient, and well-documented code. Always: - Provide complete, working code - Include error handling - Add helpful comments - Follow best practices for the language - Explain your approach briefly Use only the information available in the provided data and your KNOWLEDGE BASE. What’s important here is: I only keep the last 2 messages in my conversation history, and I only select the 2 or 3 best similarities found at most (to limit the size of the user prompt): HISTORY_MESSAGES: 2 MAX_SIMILARITIES: 3 COSINE_LIMIT: 0.45 You can adjust these values according to your use case and your language model’s capabilities. The models section, where I define the language models I’m going to use: models: chat-model: model: hf.co/qwen/qwen2.5-coder-3b-instruct-gguf:q4_k_m embedding-model: model: ai/embeddinggemma:latest One of the advantages of this section is that it will allow Docker Compose to download the models if they’re not already present on your machine. As well as the models section of the golang-expert service, where I map the environment variables to the models defined above: models: chat-model: endpoint_var: MODEL_RUNNER_BASE_URL model_var: MODEL_RUNNER_LLM_CHAT embedding-model: endpoint_var: MODEL_RUNNER_BASE_URL model_var: MODEL_RUNNER_LLM_EMBEDDING And finally, the system instructions configuration file: configs: - source: system.instructions.md target: /app/system.instructions.md Which I define a bit further down in the configs section: configs: system.instructions.md: content: | Your name is Bob (the original replicant). You are an expert programming assistant in Golang. You write clean, efficient, and well-documented code. Always: - Provide complete, working code - Include error handling - Add helpful comments - Follow best practices for the language - Explain your approach briefly Use only the information available in the provided data and your KNOWLEDGE BASE. You can, of course, adapt these system instructions to your use case. And also persist them in a separate file if you prefer. Dockerfile It’s rather simple: FROM node:22.19.0-trixie WORKDIR /app COPY package*.json ./ RUN npm install COPY *.js . # Create non-root user RUN groupadd --gid 1001 nodejs && \ useradd --uid 1001 --gid nodejs --shell /bin/bash --create-home bob-loves-js # Change ownership of the app directory RUN chown -R bob-loves-js:nodejs /app # Switch to non-root user USER bob-loves-js Now that the configuration is in place, let’s move on to the agent’s source code. Golang expert agent source code, a bit of LangchainJS with RAG The JavaScript code is rather simple (probably improvable, but functional) and follows these main steps: 1. Initial configuration Connection to both models (chat and embeddings) via LangchainJS Loading parameters from environment variables 2. Vector database creation (at startup) Reading the snippets.md file Splitting into sections (chunks) Generating an embedding for each section Storing in an in-memory vector database 3. Interactive conversation loop The user asks a question Creating an embedding of the question Similarity search in the vector database to find the most relevant snippets Construction of the final prompt with: history + system instructions + relevant snippets + question Sending to the LLM and displaying the response in streaming Updating the history (limited to the last N messages) import { ChatOpenAI } from "@langchain/openai"; import { OpenAIEmbeddings} from '@langchain/openai'; import { splitMarkdownBySections } from './chunks.js' import { VectorRecord, MemoryVectorStore } from './rag.js'; import prompts from "prompts"; import fs from 'fs'; // Define [CHAT MODEL] Connection const chatModel = new ChatOpenAI({ model: process.env.MODEL_RUNNER_LLM_CHAT || `ai/qwen2.5:latest`, apiKey: "", configuration: { baseURL: process.env.MODEL_RUNNER_BASE_URL || "http://localhost:12434/engines/llama.cpp/v1/", }, temperature: parseFloat(process.env.OPTION_TEMPERATURE) || 0.0, top_p: parseFloat(process.env.OPTION_TOP_P) || 0.5, presencePenalty: parseFloat(process.env.OPTION_PRESENCE_PENALTY) || 2.2, }); // Define [EMBEDDINGS MODEL] Connection const embeddingsModel = new OpenAIEmbeddings({ model: process.env.MODEL_RUNNER_LLM_EMBEDDING || "ai/embeddinggemma:latest", configuration: { baseURL: process.env.MODEL_RUNNER_BASE_URL || "http://localhost:12434/engines/llama.cpp/v1/", apiKey: "" } }) const maxSimilarities = parseInt(process.env.MAX_SIMILARITIES) || 3 const cosineLimit = parseFloat(process.env.COSINE_LIMIT) || 0.45 // ---------------------------------------------------------------- // Create the embeddings and the vector store from the content file // ---------------------------------------------------------------- console.log("========================================================") console.log(" Embeddings model:", embeddingsModel.model) console.log(" Creating embeddings...") let contentPath = process.env.CONTENT_PATH || "./data" const store = new MemoryVectorStore(); let contentFromFile = fs.readFileSync(contentPath+"/snippets.md", 'utf8'); let chunks = splitMarkdownBySections(contentFromFile); console.log(" Number of documents read from file:", chunks.length); // ------------------------------------------------- // Create and save the embeddings in the memory vector store // ------------------------------------------------- console.log(" Creating the embeddings..."); for (const chunk of chunks) { try { // EMBEDDING COMPLETION: const chunkEmbedding = await embeddingsModel.embedQuery(chunk); const vectorRecord = new VectorRecord('', chunk, chunkEmbedding); store.save(vectorRecord); } catch (error) { console.error(`Error processing chunk:`, error); } } console.log(" Embeddings created, total of records", store.records.size); console.log(); console.log("========================================================") // Load the system instructions from a file let systemInstructions = fs.readFileSync('/app/system.instructions.md', 'utf8'); // ---------------------------------------------------------------- // HISTORY: Initialize a Map to store conversations by session // ---------------------------------------------------------------- const conversationMemory = new Map() let exit = false; // CHAT LOOP: while (!exit) { const { userMessage } = await prompts({ type: "text", name: "userMessage", message: `Your question (${chatModel.model}): `, validate: (value) => (value ? true : "Question cannot be empty"), }); if (userMessage == "/bye") { console.log(" See you later!"); exit = true; continue } // HISTORY: Get the conversation history for this session const history = getConversationHistory("default-session-id") // ---------------------------------------------------------------- // SIMILARITY SEARCH: // ---------------------------------------------------------------- // ------------------------------------------------- // Create embedding from the user question // ------------------------------------------------- const userQuestionEmbedding = await embeddingsModel.embedQuery(userMessage); // ------------------------------------------------- // Use the vector store to find similar chunks // ------------------------------------------------- // Create a vector record from the user embedding const embeddingFromUserQuestion = new VectorRecord('', '', userQuestionEmbedding); const similarities = store.searchTopNSimilarities(embeddingFromUserQuestion, cosineLimit, maxSimilarities); let knowledgeBase = "KNOWLEDGE BASE:\n"; for (const similarity of similarities) { console.log(" CosineSimilarity:", similarity.cosineSimilarity, "Chunk:", similarity.prompt); knowledgeBase += `${similarity.prompt}\n`; } console.log("\n Similarities found, total of records", similarities.length); console.log(); console.log("========================================================") console.log() // ------------------------------------------------- // Generate CHAT COMPLETION: // ------------------------------------------------- // MESSAGES== PROMPT CONSTRUCTION: let messages = [ ...history, ["system", systemInstructions], ["system", knowledgeBase], ["user", userMessage] ] let assistantResponse = '' // STREAMING COMPLETION: const stream = await chatModel.stream(messages); for await (const chunk of stream) { assistantResponse += chunk.content process.stdout.write(chunk.content); } console.log("\n"); // HISTORY: Add both user message and assistant response to history addToHistory("default-session-id", "user", userMessage) addToHistory("default-session-id", "assistant", assistantResponse) } // Helper function to get or create a conversation history function getConversationHistory(sessionId, maxTurns = parseInt(process.env.HISTORY_MESSAGES)) { if (!conversationMemory.has(sessionId)) { conversationMemory.set(sessionId, []) } return conversationMemory.get(sessionId) } // Helper function to add a message to the conversation history function addToHistory(sessionId, role, content) { const history = getConversationHistory(sessionId) history.push([role, content]) // Keep only the last maxTurns conversations const maxTurns = parseInt(process.env.HISTORY_MESSAGES) // Adjust this value based on your needs if (history.length > maxTurns * 2) { // *2 because each turn has user & assistant message history.splice(0, 2) // Remove oldest turn (user + assistant messages) } } You can find it here: All that’s left is to launch to verify my hypotheses In the project folder, run the following command: docker compose up --build --no-log-prefix -d Then connect to the container and launch the application: docker compose exec golang-expert /bin/bash node index.js Nova Chat Agent with streaming completion Once the application started, it’s time to ask our question to our Golang expert agent in development with the Nova library: ======================================================== Embeddings model: ai/embeddinggemma:latest Creating embeddings... Number of documents read from file: 4 Creating the embeddings... Embeddings created, total of records 4 ======================================================== ? Your question (hf.co/qwen/qwen2.5-coder-3b-instruct-gguf:q4_k_m): › I need a code snippet of a Golang Nova Chat agent using a stream completion After a quick similarity search, our agent found two relevant snippets in the vector database. And it was able to provide me with complete, functional, and commented code to answer my request: Certainly! Below is a complete, working Go code snippet for a Nova Chat agent that uses streaming completion. This example demonstrates how to set up an agent with the necessary configurations and generate a stream completion response. ```go package main import ( "context" "fmt" "github.com/snipwise/nova/nova-sdk/agents" "github.com/snipwise/nova/nova-sdk/agents/chat" "github.com/snipwise/nova/nova-sdk/messages" "github.com/snipwise/nova/nova-sdk/messages/roles" "github.com/snipwise/nova/nova-sdk/models" ) func main() { ctx := context.Background() // Create a new chat agent with streaming capabilities agent, err := chat.NewAgent( ctx, agents.Config{ EngineURL: "http://localhost:12434/engines/llama.cpp/v1", SystemInstructions: "You are Bob, a helpful AI assistant.", KeepConversationHistory: true, }, models.Config{ Name: "ai/qwen2.5:1.5B-F16", Temperature: models.Float64(0.8), }, ) if err != nil { panic(err) } // Generate a stream completion response result, err := agent.GenerateStreamCompletion( []messages.Message{ {Role: roles.User, Content: "Who is James T Kirk?"}, }, func(chunk string, finishReason string) error { // Simple callback that receives strings only if chunk != "" { fmt.Print(chunk) } if finishReason == "stop" { fmt.Println() } return nil }, ) if err != nil { panic(err) } // Print the final response and finish reason fmt.Println("Final Response:", result.Response) fmt.Println("Finish Reason:", result.FinishReason) } ### Explanation: 1. **Imports**: The code imports necessary packages from the Nova SDK to interact with chat agents. 2. **Context**: A context is created using `context.Background()` to manage the lifecycle of requests. 3. **Agent Creation**: - An agent is created using `chat.NewAgent` with specified configurations: - `EngineURL`: The URL of the engine to use for generating text. - `SystemInstructions`: Instructions for the AI assistant, such as who Bob is. - `KeepConversationHistory`: Whether to keep a history of previous messages. 4. **Model Configuration**: - A model configuration is provided with: - `Name`: The name of the model to use. - `Temperature`: Controls the randomness of the output (higher values make responses more random). - `MaxTokens`: Limits the maximum number of tokens in the response. 5. **Stream Completion Generation**: - The `GenerateStreamCompletion` method is called with a list of messages and a callback function that processes each chunk of text as it arrives. - The callback prints chunks to the console until the finish reason is "stop", indicating the completion has been reached. 6. **Output**: - The final response and finish reason are printed after the stream completes. This code snippet demonstrates how to set up a streaming chat agent using Nova, allowing you to receive text responses incrementally as they become available. I then asked other questions. Nova Structured Agent This time, I asked for a structured agent: “I need a code snippet of a Nova Structured Agent.” And the result was conclusive: Extract from the response: Certainly! Below is a complete, working example of a Nova Structured Agent in Go. This agent will generate structured data about a specified country based on the user's input. ```go package main import ( "context" "fmt" "github.com/snipwise/nova/nova-sdk/agents" "github.com/snipwise/nova/nova-sdk/agents/structured" "github.com/snipwise/nova/nova-sdk/messages" "github.com/snipwise/nova/nova-sdk/messages/roles" "github.com/snipwise/nova/nova-sdk/models" ) type Country struct { Name string `json:"name"` Capital string `json:"capital"` Population int `json:"population"` Languages []string `json:"languages"` } func main() { ctx := context.Background() // Create a new Structured Agent agent, err := structured.NewAgent[Country]( ctx, agents.Config{ EngineURL: "http://localhost:12434/engines/llama.cpp/v1", SystemInstructions: ` Your name is Bob. You are an assistant that answers questions about countries around the world. `, }, models.Config{ Name: "hf.co/menlo/jan-nano-gguf:q4_k_m", Temperature: models.Float64(0.0), }, ) if err != nil { panic(err) } // Generate structured data about Canada response, finishReason, err := agent.GenerateStructuredData([]messages.Message{ {Role: roles.User, Content: "Tell me about Canada."}, }) if err != nil { panic(err) } // Print the generated country information fmt.Println("Country Name:", response.Name) fmt.Println("Capital:", response.Capital) fmt.Println("Population:", response.Population) fmt.Println("Languages:", strings.Join(response.Languages, ", ")) } ### Explanation: 1. **Imports**: The code imports necessary packages from the Nova SDK to interact with agents and models. 2. **Country Struct**: A simple struct `Country` is defined to represent the data structure expected by the agent. 3. **Main Function**: - A context is created using `context.Background()`. - A new Structured Agent is created for generating structured data about countries. - The system instructions are set to provide a friendly greeting and instruction on answering questions about countries. - The model configuration specifies the engine URL, temperature, and other parameters. 4. **GenerateStructuredData Method**: This method generates structured data based on the user's input. It takes an array of messages as input, where each message has a role (e.g., `User`) and content (e.g., "Tell me about Canada"). 5. **Error Handling**: The code includes error handling to ensure that any issues during agent creation or data generation are properly caught and reported. 6. **Output**: The generated country information is printed, including the name, capital, population, and languages. This example demonstrates how to use a Nova Structured Agent to generate structured data about countries based on user input. You can modify the system instructions and model configuration as needed for your specific use case. Then, I moved on to the next question. Nova RAG Agent with vector store. Be careful with your similarity settings! This time, I asked for a “RAG” agent: “I need a snippet of a Nova RAG agent with a vector store.” And once again, I got a relevant response. However, when I tried with this question (after restarting the agent to start from a clean base without conversation history): “I need a snippet of a Nova RAG agent.” The similarity search returned no relevant results (because the words “vector store” were not present in the snippets). And the agent responded with generic code that had nothing to do with Nova or was using code from Nova Chat Agents. There may be several possible reasons: The embedding model is not suitable for my use case, The embedding model is not precise enough, The splitting of the code snippets file is not optimal (you can add metadata to chunks to improve similarity search, for example, but don’t forget that chunks must not exceed the maximum size that the embedding model can ingest). In that case, there’s a simple solution that works quite well: you lower the similarity thresholds and/or increase the number of returned similarities. This allows you to have more results to construct the user prompt, but be careful not to exceed the maximum context size of the language model. And you can also do tests with other “bigger” LLMs (more parameters and/or larger context window). In the latest version of the snippets file, I added a KEYWORDS: … line below the markdown titles to help with similarity search. Which greatly improved the results obtained. Conclusion Using “Small Language Models” (SLM) or “Tiny Language Models” (TLM) requires a bit of energy and thought to work around their limitations. But it’s possible to build effective solutions for very specific problems. And once again, always think about the context size for the chat model and how you’ll structure the information for the embedding model. And by combining several specialized “small agents”, you can achieve very interesting results. This will be the subject of future articles. Learn more Check out Docker Model Runner Learn more about Docker Agentic Compose Read more about embedding in our recent blog Run Embedding Models and Unlock Semantic Search with Docker Model Runner View the full article
  6. Development of Apple's rumored OLED MacBook Pro took another forward step this month when the next-generation production line responsible for manufacturing its displays commenced operation. Samsung Display is expected to make the panels for Apple's MacBook Pro, and has invested heavily in an 8.6-generation OLED production line located at its Asan campus in South Korea. An 8.6G fab uses much larger glass substrates than the OLED lines used for smartphones, which allows multiple laptop-sized panels to be cut from a single sheet. This improves yields and lowers costs, which is just what Apple needs if OLED is to replace mini-LED in the MacBook Pro. The line is designed around rigid OLED panels with oxide TFT backplanes and advanced tandem OLED structures. These are better suited to laptops, and offer higher brightness, improved power efficiency, and longer lifespan compared with conventional single-stack OLED panels. According to the account yeux1122 on the Naver blog, Samsung has now begun producing panels from the line, suggesting Apple and other customers have completed qualification and reliability testing. Apple's first OLED MacBook Pro will also feature a touchscreen display, according to analyst Ming-Chi Kuo. The claim has been corroborated by Bloomberg reporter Mark Gurman, who also said the laptops will have "thinner and lighter frames." Apple is apparently focusing on delivering the thinnest possible device without compromising on battery life or major new features. The redesigned 14-inch and 16-inch MacBook Pro models are also expected to have a hole-punch camera at the top of the display, and it could potentially be housed in a pill-shaped cutout similar to the iPhone's Dynamic Island, rather than the notch MacBook Pro owners are accustomed to. Gurman says the machines will be powered by M6 chips and are being readied for a late 2026 or early 2027 launch, following the expected introduction of 14-inch and 16-inch MacBook Pro models with M5 Pro and M5 Max chips in the next month or so. Apple Is Expected to Launch These Four MacBooks in 2026 It would be unusual for Apple to introduce two ‌MacBook Pro‌ refreshes in the same year, but there is precedent for it: Apple updated the MacBook Pro lineup twice in 2023, first with M2 Pro/M2 Max chips in January and then with M3/M3 Pro/M3 Max chips in late October.Related Roundup: MacBook ProBuyer's Guide: MacBook Pro (Caution)Related Forum: MacBook Pro This article, "Apple's OLED MacBook Pro Moves Closer With Panel Production" first appeared on MacRumors.com Discuss this article in our forums View the full article
  7. Apple's foldable iPhone will share the same next-generation A20 Pro chip as the iPhone 18 Pro and iPhone 18 Pro Max models when it debuts this September, according to industry analyst Jeff Pu. In his latest investor note, Pu outlined the projected specifications for all three premium devices that will take center stage this fall, with the regular iPhone 18 and more affordable iPhone 18e models not expected to debut until spring 2027 as part of Apple's new split-launch strategy. Powered by the A20 Pro chip, the iPhone Fold and iPhone 18 Pro models will showcase TSMC's new 2nm process, N2, boasting performance improvements that could be up to 15 percent faster and 30 percent more efficient than A19 chips. Moreover, the A20 Pro chips will be packaged with TSMC's Wafer-Level Multi-Chip Module (WMCM) technology. With WMCM, the chips will have RAM integrated directly onto the same wafter as the CPU, GPU, and Neural Engine, rather than the RAM being adjacent to the chip and connected via silicon interposer. The update to WMCM is expected to bring faster performance for Apple Intelligence and longer battery life, while also cutting down on the size of the A20 chip to allow more space inside the iPhone for other components. This packaging change for the A20 chip has been rumored previously. Pu's note outlined other specs that the Pro and Fold models are expected to share, including 12GB of LPD5 RAM, 48-megapixel rear cameras, and Apple's C2 modem. Apple's first foldable ‌iPhone‌ is rumored to feature a wide, book-style folding design with a 7.8-inch inner display and a 5.5-inch outer display, a crease-free screen, Touch ID, and a front-facing camera in both folded and unfolded states. The device could measure just 4.5mm thick when opened, and between 9mm and 9.5mm when closed. For more details, see our dedicated foldable iPhone roundup.Tags: Foldable iPhone, Jeff Pu This article, "Foldable iPhone Set to Debut A20 Pro Chip With 2nm Performance Leap" first appeared on MacRumors.com Discuss this article in our forums View the full article
  8. Apple's Beats brand is no stranger to collaborations with big-name celebrities on marketing campaigns, and the brand's latest effort involves Los Angeles Dodgers superstar Shohei Ohtani. The new campaign created in collaboration with photographer Daniel Sannwald features a massively oversized Ohtani sporting Beats products in various Los Angeles settings.Against iconic LA backdrops, each image amplifies Ohtani's scale—not just physically, but metaphorically. He becomes an elevated figure of pride, strength, and aspiration. Through dramatic scale and surreal energy, the campaign transforms LA into Ohtani's playground—a cityscape where sport and culture intersect. Beats' choice to pair its most iconic products with Ohtani in this visual story was deliberate. As an LA-born brand rooted in sports, music, and entertainment, Beats shares both its home and its spirit with Ohtani—a journey defined by ambition, performance, and unmistakable boldness. Back to back champion. 4-time MVP. Shohei Ohtani is larger than life. 歴史に残る2連覇。4度目のMVP。大谷翔平、想像を超えたその先へ。 pic.twitter.com/JLHizt5eKO — Beats by Dre (@beatsbydre) January 14, 2026 In the images, Ohtani wears several of the latest Beats products, including Beats Studio Pro, Powerbeats Pro 2, and Powerbeats Fit."Los Angeles is a city of energy, culture, and ambition," says Shohei Ohtani. "Wearing Beats and seeing myself rise above the skyline feels symbolic of the connection I have with this city and our fans. We rise high together."Ohtani has won four Major League Baseball MVP awards in Los Angeles, including two American League awards with the Los Angeles Angels in 2021 and 2023 and two National League awards with the Los Angeles Dodgers in 2024 and again in 2025 as the Dodgers won back-to-back World Series titles.Tag: Beats This article, "Beats' Latest Ad Campaign Features Baseball Superstar Shohei Ohtani" first appeared on MacRumors.com Discuss this article in our forums View the full article
  9. Apple today updated its trade-in values for select iPhone, iPad, Mac, and Apple Watch models. Trade-ins can be completed on Apple's website, or at an Apple Store. The charts below provide an overview of Apple's current and previous trade-in values in the United States, according to the company's website. Most of the values declined slightly, but some of the Mac values increased. iPhone iPhone Model New Values Old Values iPhone 16 Pro MaxUp to $650Up to $670 iPhone 16 ProUp to $530Up to $550 iPhone 16 PlusUp to $440Up to $450 iPhone 16Up to $410Up to $420 iPhone 15 Pro MaxUp to $450Up to $470 iPhone 15 ProUp to $380Up to $400 iPhone 15 PlusUp to $320Up to $330 iPhone 15Up to $300Up to $310 iPhone 14 Pro MaxUp to $350Up to $370 iPhone 14 ProUp to $280Up to $300 iPhone 14 PlusUp to $230Up to $240 iPhone 14Up to $210Up to $220 iPhone SE (3rd generation)Up to $80Up to $80 iPhone 13 Pro MaxUp to $280Up to $300 iPhone 13 ProUp to $230Up to $230 iPhone 13Up to $180Up to $180 iPhone 13 miniUp to $140Up to $150 iPhone 12 Pro MaxUp to $210Up to $220 iPhone 12 ProUp to $160Up to $160 iPhone 12Up to $120Up to $130 iPhone 12 miniUp to $80Up to $90 iPhone SE (2nd generation)Up to $50Up to $50 iPhone 11 Pro MaxUp to $140Up to $150 iPhone 11 ProUp to $120Up to $130 iPhone 11Up to $100Up to $100 iPhone XS MaxUp to $90Up to $100 iPhone XSUp to $70Up to $70 iPhone XRUp to $80Up to $80 iPhone XUp to $60Up to $60 iPhone 8 PlusUp to $50Up to $50 iPhone 8Up to $40Up to $40 iPad iPad Model New Values Old Values iPad ProUp to $685Up to $695 iPad AirUp to $400Up to $415 iPadUp to $170Up to $175 iPad miniUp to $255Up to $255 Mac Mac Model New Values Old Values MacBook ProUp to $2,515Up to $760 MacBook AirUp to $900Up to $540 iMacUp to $875Up to $375 iMac ProUp to $325Up to $240 Mac miniUp to $340Up to $380 Mac StudioUp to $1,030Up to $1,030 Mac ProUp to $3,215Up to $2,520 It is unclear why many of the previous Mac trade-in values were so low. The current values seem more realistic. Apple Watch Apple Watch Model New Values Old Values Apple Watch Series 10Up to $150Up to $160 Apple Watch Ultra 2Up to $335Up to $335 Apple Watch Series 9Up to $115Up to $125 Apple Watch UltraUp to $225Up to $245 Apple Watch Series 8Up to $85Up to $95 Apple Watch SE (2nd generation)Up to $55Up to $60 Apple Watch Series 7Up to $60Up to $65 Apple Watch Series 6Up to $45Up to $50 Apple Watch SE (1st generation)Up to $30Up to $30 Apple Watch Series 5Up to $25Up to $25 Apple also adjusted its trade-in values for select Android smartphones.Tag: Apple Trade-In This article, "Apple Adjusts Trade-In Values for iPhones, Macs, and More" first appeared on MacRumors.com Discuss this article in our forums View the full article
  10. While the iPhone 18 Pro and iPhone 18 Pro Max are not expected to launch for another eight months, there are already plenty of rumors about the devices. Below, we have recapped 12 features rumored for the iPhone 18 Pro models, as of January 2026: The same overall design is expected, with 6.3-inch and 6.9-inch display sizes, and a "plateau" housing three rear cameras Under-screen Face ID (rumored by multiple sources) Front camera in top-left corner of the screen Variable aperture for at least one rear camera A20 Pro chip manufactured with TSMC's 2nm process and new packaging technology A simplified Camera Control button with no swipe gestures Design changes to the rear Ceramic Shield for MagSafe charging, potentially including a more frosted glass appearance Apple-designed C1X or C2 modem for 5G/LTE cellular connectivity Apple-designed N1 chip or newer for Wi-Fi 7, Bluetooth 6, and Thread Web browsing via satellite New color options under consideration: burgundy, brown, or purple iPhone 18 Pro Max may be slightly thicker than the iPhone 17 Pro Max, perhaps to accommodate a larger batteryApple will likely release the iPhone 18 Pro models in September. Bookmark our iPhone 18 roundup to stay on top of future rumors. This article, "iPhone 18 Pro Launching Later This Year With These 12 New Features" first appeared on MacRumors.com Discuss this article in our forums View the full article
  11. Air France today announced that passengers can now watch select Apple TV shows for free during its long-haul flights, with more than 45 hours of content available. This is referring to the streaming service known as Apple TV+ until last year. The complimentary in-flight selection includes the first three episodes of Ted Lasso, The Morning Show, Severance, Prehistoric Planet, The Snoopy Show, and more. The shows are accessible on each passenger's individual screen, in French and English. Air France has also started offering one week of free access to Apple TV content via its new high-speed Wi-Fi portal, for streaming on your own devices. The airline will roll out this new Wi-Fi portal across its entire fleet by the end of the year. American Airlines and United are among the other airlines that offer free Apple TV streaming.Tag: Apple TV Plus This article, "Air France Announces New Apple TV Perks" first appeared on MacRumors.com Discuss this article in our forums View the full article
  12. An unreleased Apple display with the model number A3350 surfaced in a Chinese regulatory database today, according to a filing viewed by MacRumors. The filing is likely for Apple's next-generation Studio Display or Pro Display XDR, but there is not enough information to determine which one it will be. The listing does reveal that the new model will be equipped with a high-performance LCD display. The existing Studio Display and Pro Display XDR both have an LCD panel, so unfortunately this information does not help to pinpoint things. However, it does seemingly rule out an OLED display for this new model in particular. There have been reports about a new Studio Display being in the works, with rumored features including ProMotion support for up to a 120Hz refresh rate, HDR support, and either an A19 or A19 Pro chip. A new Studio Display with mini-LED backlighting would still have an LCD panel, so the filing does not rule out that possibility. The current Studio Display was filed in the same database around three months before it launched in March 2022, so perhaps the next Studio Display will be released around March or April this year, if that is what the filing is for. It would make sense for Apple to unveil a new Studio Display alongside the next Mac Studio with M5 chips. There have been fewer rumors about a new Pro Display XDR, but that model was released in December 2019, so it is certainly due for an update. If the next Studio Display receives mini-LED backlighting and HDR support, its maximum brightness and contrast ratio would be higher than the current model. And a newer A19 or A19 Pro chip — up from the A13 Bionic currently — should contribute to performance improvements, camera-related enhancements, and more. The current Studio Display features a 27-inch LCD screen with 5K resolution, a 60Hz refresh rate, up to 600 nits brightness, a built-in camera and speakers, one Thunderbolt 3 port, and a trio of USB-C ports. In the U.S., it starts at $1,599. Thanks, Aaron!Related Roundups: Apple Pro Display XDR, Apple Studio DisplayRelated Forum: Mac Accessories This article, "New Studio Display or Pro Display XDR Spotted in Regulatory Database" first appeared on MacRumors.com Discuss this article in our forums View the full article
  13. Spotify today announced a price increase in the United States, Estonia, and Latvia, marking the company's third U.S. price increase in less than three years. The company revealed the changes in a post published on its website earlier today, stating that Premium subscribers in the affected markets will receive an email over the coming month explaining how the new pricing will apply to their accounts. Spotify said that the revised prices will take effect on subscribers' next billing date, while new customers will see the updated pricing immediately when signing up on spotify.com/premium. In the United States, Spotify is increasing the cost of every major Premium tier. The Individual Premium plan will rise from $11.99 to $12.99 per month. The Student plan will increase from $5.99 to $6.99 per month. Multi-user plans are seeing larger increases, with the Duo plan, which supports two accounts, moving from $16.99 to $18.99 per month, and the Family plan increasing from $19.99 to $21.99 per month. Spotify attributed the changes to what it described as periodic adjustments across its markets: Occasional updates to pricing across our markets reflect the value that Spotify delivers, enabling us to continue offering the best possible experience and benefit artists. This latest increase is the third time Spotify has raised U.S. subscription prices since mid-2023. In July 2023, Spotify implemented its first U.S. price hike since launching in the country in 2011, increasing the Individual Premium plan from its long-standing $9.99 monthly price. A second increase followed in June 2024, bringing the Individual plan to $11.99 per month. The January 2026 change moves that price another dollar higher, continuing a pattern of more frequent adjustments after more than a decade of unchanged pricing. Outside the United States, Spotify has also raised prices in recent years. The company increased subscription costs in multiple international markets in August 2025, and previously raised prices in regions including the United Kingdom and Switzerland. Tags: Estonia, Spotify, United States This article, "Spotify Increasing Subscription Prices in the US Again" first appeared on MacRumors.com Discuss this article in our forums View the full article
  14. Opera has updated its flagship browser, introducing a rebuilt AI engine and expanded multitasking features, as well as an animated UI theme that reacts to music playing in the browser. The browser's AI assistant now uses architecture borrowed from Opera's experimental Neon browser, which the company says delivers 20% faster responses. Notably, the AI can now operate within the context of specific tabs or tab groups, so it doesn't mix up information across different browsing sessions. There's also a new YouTube integration that lets the AI analyze videos to find specific moments or summarize content. Meanwhile, split-screen mode has been expanded from two tabs to four, with horizontal and grid layout options for users with larger displays. Elsewhere, Opera's Tab Islands feature, which automatically groups related tabs, can now be color-coded and named for easier identification. The sidebar has also gained Gmail and Google Calendar integration alongside existing support for messaging apps and music services. The company is also retiring its separate beta browser build in favor of an "early bird mode" toggle within the main browser. Lastly, there are three new animated themes in this release, including one developed with Spotify that reacts to music playing in Opera's built-in player. Opera One R3 is available now as a free update and can be downloaded from the company's website.Tag: Opera Browser This article, "Opera One R3 Gains Music-Reactive UI Theme and 4-Way Split Screen" first appeared on MacRumors.com Discuss this article in our forums View the full article
  15. Verizon today announced it will be offering customers a $20 account credit after a major outage on Wednesday, and action is required to receive it. The carrier said affected customers can accept the credit by logging into the My Verizon app, but it might take some time before this option shows up in the app. Affected customers will receive a text message when the credit is available. On average, Verizon says the $20 credit covers multiple days of service. "This credit isn't meant to make up for what happened," it said. "But it's a way of acknowledging your time and showing that this matters to us." Verizon once again apologized for the outage. "We are sorry for what you experienced and will continue to work hard day and night to provide the outstanding network and service that you expect from Verizon," it said. Yesterday, we did not meet the standard of excellence you expect and that we expect of ourselves. To help provide some relief to those affected, we will give you a $20 account credit that can be easily redeemed by logging into the myVerizon app. You will receive a text message… — Verizon News (@VerizonNews) January 15, 2026 Verizon said that customers who are still experiencing issues should restart their device, as a quick way of reconnecting to the network following the outage. The outage began mid-day on Wednesday, and Verizon was finally able to fully resolve it around 10 p.m. Eastern Time. The downtime affected the ability to make and receive phone calls, send and receive text messages, and use mobile data. AT&T offered customers a lower $5 credit after it experienced a major outage in February 2024.Tag: Verizon This article, "Verizon Explains How to Receive $20 Bill Credit Following Major Outage" first appeared on MacRumors.com Discuss this article in our forums View the full article
  16. Apple's AirTag 4-Pack has dropped to $64.98 this week on Amazon, down from the original price of $99.00. Free shipping options have a delivery estimate around January 20, while Prime members should be able to get it delivered a few days sooner. Note: MacRumors is an affiliate partner with Amazon. When you click a link and make a purchase, we may receive a small payment, which helps us keep the site running. Overall, this is a solid second-best price on the AirTag 4-pack that's within $2 of the Amazon all-time low price, which we last tracked during the holiday season. We're not tracking any notable deals on the AirTag single pack right now. $34 OFFAirTag 4-Pack for $64.98 If you're on the hunt for more discounts, be sure to visit our Apple Deals roundup where we recap the best Apple-related bargains of the past week. Deals Newsletter Interested in hearing more about the best deals you can find in 2026? Sign up for our Deals Newsletter and we'll keep you updated so you don't miss the biggest deals of the season! Related Roundup: Apple Deals This article, "Get an AirTag 4-Pack for Just $64.98 on Amazon" first appeared on MacRumors.com Discuss this article in our forums View the full article
  17. Apple's newly announced partnership with Google to use Gemini models for Siri and Apple Intelligence could be worth as much as $5 billion, according to one analyst's estimate. The deal is structured as a cloud computing contract that will see Apple pay "several billion dollars to Google over time," according to the Financial Times (paywalled), citing a person familiar with the agreement. Gene Munster at Deepwater Asset Management puts the value at $5 billion for Google. Apple said it determined that Google's technology provides the "most capable foundation" for its Apple Foundation Models. However, the Gemini partnership raises questions about the future of Apple's existing ChatGPT integration, which has been part of Apple Intelligence since 2024. Apple said the Google deal does not affect the ChatGPT integration, but Munster expressed skepticism about its long-term prospects. "I think that the ChatGPT integration is going to die on the vine... having two large models, given the economies of scale, wouldn't make a ton of sense for Apple," he told FT. A person close to OpenAI told the newspaper that the company had taken "a conscious decision to not become the custom model provider for Apple" last autumn to focus on building its own AI device. That hardware effort is being led by former Apple design chief Jony Ive, who was hired by OpenAI in May 2024 – a move Munster suggested may have soured Apple on a deeper OpenAI partnership. Despite the $5 billion figure, Apple's Gemini deal is comparatively conservative compared to other companies' AI infrastructure spending. Google, Microsoft, Amazon, and Meta have all committed hundreds of billions of dollars to new AI data centers since ChatGPT launched in 2022, but Apple has kept its investment in physical infrastructure at roughly 3 percent of revenue, according to FT's analysis. For fiscal 2025, Apple's spending on property, plant, and equipment was $12.7 billion. Compare that to the roughly $90 billion Google is expected to spend this year. One former Apple executive told the FT that the Google deal was "a necessary byproduct of Apple's decision not to 'go big' on its AI investments like its competitors." The next-generation version of Siri is expected to be introduced with iOS 26.4, which will likely be released to the general public in March or April.Tags: Apple Intelligence, Financial Times, Gemini, Google This article, "Apple's Google Gemini Deal Could Be Worth $5 Billion" first appeared on MacRumors.com Discuss this article in our forums View the full article
  18. We use GenAI in every facet of technology now – internal knowledge bases, customer support systems, and code review bots, to name just a few use cases. And in nearly every one of these, someone eventually asks: What stops the model from returning something the user shouldn’t see?” This is a roadblock that companies building RAG features or AI Agents eventually hit – the moment where an LLM returns data from a document that the user was not authorized to access, introducing potential legal, financial, and reputational risk to all parties. Unfortunately, traditional methods of authorization are not suited for the hierarchical, dynamic nature of access control in RAG. This is exactly where modern authorization permissioning systems such as SpiceDB shine: in building fine-grained authorization for filtering content in your AI-powered applications. In fact, OpenAI uses SpiceDB to secure 37 Billion documents for 5 Million users who use ChatGPT Connectors – a feature where you bring your data from different sources such as Google Drive, Dropbox, GitHub etc. into ChatGPT. This blog post shows how you can pair SpiceDB with Testcontainers to give you the ability to test your permission logic inside your RAG pipeline, end-to-end, automatically, with zero infrastructure dependencies.The example repo can be found here. Quick Primer on Authorization Before diving into implementation, let’s clarify two foundational concepts: Authentication (verifying who a user is) and Authorization (deciding what they can access). Authorization is commonly implemented via techniques such as: Access Control Lists (ACLs) Role-Based Access Control (RBAC) Attribute-Based Access Control (ABAC) However, for complex, dynamic, and context-rich applications like RAG pipelines, traditional methods such as RBAC or ABAC fall short. The new kid on the block – ReBAC (Relationship-Based Access Control) is ideal as it models access as a graph of relationships rather than fixed rules, providing the necessary flexibility and scalability required. ReBAC was popularized in Google Zanzibar, the internal authorization system Google built to manage permissions across all its products (e.g., Google Docs, Drive). Zanzibar systems are optimized for low-latency, high-throughput authorization checks, and global consistency – requirements that are well-suited for RAG systems. SpiceDB is the most scalable open-source implementation of Google’s Zanzibar authorization model. It stores access as a relationship graph, where the fundamental check reduces to: Is this actor allowed to perform this action on this resource? For a Google Docs-style example: definition user {} definition document { relation reader: user relation writer: user permission read = reader + writer permission write = writer } This schema defines object types (user and document), explicit Relations between the objects (reader, writer), and derived Permissions (read, write). SpiceDB evaluates the relationship graph in microseconds, enabling real-time authorization checks at massive scale. Access Control for RAG RAG (Retrieval-Augmented Generation) is an architectural pattern that enhances Large Language Models (LLMs) by letting them consult an external knowledge base, typically involving a Retriever component finding document chunks and the LLM generating an informed response. This pattern is now used by businesses and enterprises for apps like chatbots that query sensitive data such as customer playbooks or PII – all stored in a vector database for performance. However, the fundamental risk in this flow is data leakage: the Retriever component ignores permissions, and the LLM will happily summarize unauthorized data. In fact, OWASP has a Top 10 Risks for Large Language Model Applications list which includes Sensitive Information Disclosure, Excessive Agency & Vector and Embedding Weaknesses. The consequences of this leakage can be severe, ranging from loss of customer trust to massive financial and reputational damage from compliance violations. This setup desperately needs fine-grained authorization, and that’s where SpiceDB comes in. SpiceDB can post-filter retrieved documents by performing real-time authorization checks, ensuring the model only uses data the querying user is permitted to see. The only requirement is that the documents have metadata that indicates where the information came from.But testing this critical permission logic without mocks, manual Docker setup, or flaky Continuous Integration (CI) environments is tricky. Testcontainers provides the perfect solution, allowing you to spin up a real, production-grade, and disposable SpiceDB instance inside your unit tests to deterministically verify that your RAG pipeline respects permissions end-to-end. Spin Up Real Authorization for Every Test Instead of mocking your authorization system or manually running it on your workstation, you can add this line of code in your test: container, _ := spicedbcontainer.Run(ctx, "authzed/spicedb:v1.47.1") And Testcontainers will: Pull the real SpiceDB image Start it in a clean, isolated environment Assign it dynamic ports Wait for it to be ready Hand you the gRPC endpoint Clean up afterwards Because Testcontainers handles the full lifecycle – from pulling the container, exposing dynamic ports, and tearing it down automatically, you eliminate manual processes such as running Docker commands, and writing cleanup scripts. This isolation ensures that every single test runs with a fresh, clean authorization graph, preventing data conflicts, and making your permission tests completely reproducible in your IDE and across parallel Continuous Integration (CI) builds. Suddenly you have a real, production-grade, Zanzibar-style permissions engine inside your unit test. Using SpiceDB & Testcontainers Here’s a walkthrough of how you can achieve end-to-end permissions testing using SpiceDB and Testcontainers. 1. Testing Our RAG For the sake of simplicity, we have a minimal RAG and the retrieval mechanism is trivial too. We’re going to test three documents which have doc_ids (doc1 doc2 ..) that act as metadata. doc1: Internal roadmap doc2: Customer playbook doc3: Public FAQ And three users: Emilia owns doc1 Beatrice can view doc2 Charlie (or anyone) can view doc3 This SpiceDB schema defines a user and a document object type. A user has read permission on a document if they are the direct viewer or the owner of the document. definition user {} definition document { relation owner: user relation viewer: user | owner permission read = owner + viewer } 2. Starting the Testcontainer Here’s how a line of code can start a test to launch the disposable SpiceDB instance: container, err := spicedbcontainer.Run(ctx, "authzed/spicedb:v1.47.1") require.NoError(t, err) Next, we connect to the running containerized service: host, _ := container.Host(ctx) port, _ := container.MappedPort(ctx, "50051/tcp") endpoint := fmt.Sprintf("%s:%s", host, port.Port()) client, err := authzed.NewClient( endpoint, grpc.WithTransportCredentials(insecure.NewCredentials()), grpcutil.WithInsecureBearerToken("somepresharedkey"), ) This is now a fully-functional SpiceDB instance running inside your test runner. 3. Load the Schema + Test Data The test seeds data the same way your application would: _, err := client.WriteSchema(ctx, &apiv1.WriteSchemaRequest{Schema: schema}) require.NoError(t, err) Then: rel("document", "doc1", "owner", "user", "emilia") rel("document", "doc2", "viewer", "user", "beatrice") rel("document", "doc3", "viewer", "user", "emilia") rel("document", "doc3", "viewer", "user", "beatrice") rel("document", "doc3", "viewer", "user", "charlie") We now have a predictable, reproducible authorization graph for every test run. 4. Post-Filtering With SpiceDB Before the LLM sees anything, we check permissions with SpiceDB which acts as the source of truth of the permissions in the documents. resp, err := r.spiceClient.CheckPermission(ctx, &apiv1.CheckPermissionRequest{ Resource: docObject, Permission: "read", Subject: userSubject, }) If SpiceDB says no, the doc is never fed into the LLM, thereby ensuring the user gets an answer to their query only based on what they have permissions to read. This avoids: Accidental data leakage Overly permissive vector search Compliance problems Traditional access controls break down when data becomes embeddings hence having guardrails prevents this from happening. End-to-End Permission Checks in a Single Test Here’s what the full test asserts: Emilia queries “roadmap” → gets doc1 Because they’re the owner. Beatrice queries “playbook” → gets doc2 Because she’s a viewer. Charlie queries “public” → gets doc3 Because it’s the only doc he can read, as it’s a public doc If there is a single failing permission rule, the end-to-end test will immediately fail, which is critical given the constant changes in RAG pipelines (such as new retrieval modes, embeddings, document types, or permission rules). What If Your RAG Pipeline Isn’t in Go? First, a shoutout to Guillermo Mariscal for his original contribution to the SpiceDB Go Testcontainers module. What if your RAG pipeline is written in a different language such as Python? Not to worry, there’s also a community Testcontainers module written in Python that you can use similarly. The module can be found here. Typically, you would integrate it in your integration tests like this: # Your RAG pipeline test def test_rag_pipeline_respects_permissions(): with SpiceDBContainer() as spicedb: # Set up permissions schema client = create_spicedb_client( spicedb.get_endpoint(), spicedb.get_secret_key() ) # Load your permissions model client.WriteSchema(your_document_permission_schema) # Write test relationships # User A can access Doc 1 # User B can access Doc 2 # Test RAG pipeline with User A results = rag_pipeline.search(query="...", user="A") assert "Doc 1" in results assert "Doc 2" not in results # Should be filtered out! Similar to the Go module, this container gives you a clean, isolated SpiceDB instance for every test run. Why This Approach Matters Authorization testing in RAG pipelines can be tricky, given the scale and latency requirement and it can get trickier in systems handling sensitive data. By integrating the flexibility and scale of SpiceDB with the automated, isolated environments of Testcontainers, you shift to a completely reliable, deterministic approach to authorization. Every time your code ships, a fresh, production-grade authorization engine is spun up, loaded with test data, and torn down cleanly, guaranteeing zero drift between your development machine and CI. This pattern can ensure that your RAG system is safe, correct, and permission-aware as it scales from three documents to millions. Try It Yourself The complete working example in Go along with a sample RAG pipeline is here: https://github.com/sohanmaheshwar/spicedb-testcontainer-rag Clone it. Run go test -v. Watch it spin up a fresh SpiceDB instance, load permissions, and assert RAG behavior. Also, find the community modules for the SpiceDB testcontainer in Go and Python. View the full article
  19. AI-powered coding assistants are becoming a core part of modern development workflows. At the same time, many teams are increasingly concerned about where their code goes, how it’s processed, and who has access to it. By combining OpenCode with Docker Model Runner, you can build a powerful AI-assisted coding experience while keeping full control over your data, infrastructure and spend. This post walks through how to configure OpenCode to use Docker Model Runner and explains why this setup enables a privacy-first and cost-aware approach to AI-assisted development. What Are OpenCode and Docker Model Runner? OpenCode is an open-source coding assistant designed to integrate directly into developer workflows. It supports multiple model providers and exposes a flexible configuration system that makes it easy to switch between them. Docker Model Runner (DMR) allows you to run and manage large language models easily. It exposes an OpenAI-compatible API, making it straightforward to integrate with existing tools that already support OpenAI-style endpoints. Together, they provide a familiar developer experience backed by models running entirely within infrastructure you control. Modifying the OpenCode Configuration OpenCode can be customized using a configuration file that controls how providers and models are defined. You can define this configuration in one of two places: Global configuration: ~/.config/opencode/opencode.json Project-specific configuration: opencode.json in the root of your project When a project-level configuration is present, it takes precedence over the global one. Using OpenCode with Docker Model Runner Docker Model Runner (DMR) exposes an OpenAI-compatible API, which makes integrating it with OpenCode straightforward. To enable this integration, you simply need to update your opencode.json file to point to the DMR server and declare the locally available models. Assuming Docker Model Runner is running at: http://localhost:12434/v1 your opencode.json configuration could look like this: { "$schema": "https://opencode.ai/config.json", "provider": { "dmr": { "npm": "@ai-sdk/openai-compatible", "name": "Docker Model Runner", "options": { "baseURL": "http://localhost:12434/v1", }, "models": { "qwen-coder3": { "name": "qwen-coder3" }, "devstral-small-2": { "name": "devstral-small-2" } } } } } This configuration allows OpenCode to utilize locally hosted models through DMR, providing a powerful and private coding assistant. Note for Docker Desktop users: If you are running Docker Model Runner via Docker Desktop, make sure TCP access is enabled. OpenCode connects to Docker Model Runner over HTTP, which requires the TCP port to be exposed: docker desktop enable model-runner --tcp Once enabled, Docker Model Runner will be accessible at http://localhost:12434/v1. Figure 1: Enabling OpenCode to utilize locally hosted models through Docker Model Runner Figure 2: Models like qwen3-coder, devstral-small-2, gpt-oss are good for coding use cases. Benefits of using OpenCode with Model Runner Privacy by Design Using OpenCode with Docker Model Runner enables a privacy-first approach to AI-assisted development by keeping all model inference within the infrastructure you control. Docker Model Runner runs models behind an OpenAI-compatible API endpoint. OpenCode sends prompts, source code, and context only to that endpoint, and nowhere else. This means: No third-party AI providers are involved No external data sharing or vendor-side retention No training on your code by external services From OpenCode’s perspective, the provider is simply an API endpoint. Where that endpoint runs, on a developer machine, an internal server, or a private cloud, is entirely up to you. Cost Control Beyond privacy, running models with Docker Model Runner provides a significant cost advantage over hosted AI APIs. Cloud-hosted coding assistants, can become expensive very quickly, especially when: Working with large repositories Passing long conversational or code context Running frequent iterative prompts during development With Docker Model Runner, inference runs on your own hardware. Once the model is pulled, there are no per-token fees, no request-based pricing, and no surprise bills. Teams can scale usage freely without worrying about escalating API costs. Recommended Models for Coding When using OpenCode with Docker Model Runner, model choice has a direct impact on both quality and developer experience. While many general-purpose might models work reasonably well, coding-focused models are optimized for long context windows and code-aware reasoning, which is especially important for real-world repositories. The following models are well suited for use with OpenCode and Docker Model Runner: qwen3-coder devstral-small-2 gpt-oss Each of these models can be served through Docker Model Runner and exposed via its OpenAI-compatible API. You can pull these models by simply running: docker model pull qwen3-coder Pulling Models from Docker Hub and Hugging Face Docker Model Runner can pull models not only from Docker Hub, but also directly from Hugging Face and automatically convert them into OCI artifacts that can be run and shared like any other Docker model. For example, you can pull a model directly from Hugging Face with: docker model pull huggingface.co/unsloth/Ministral-3-14B-Instruct-2512-GGUF This gives teams access to the broader open model ecosystem without sacrificing consistency or operability. Context Length Matters For coding tasks, context length is often more important than raw parameter count. Large repositories, multi-file refactors, and long conversational histories all benefit from being able to pass more context to the model. By default: qwen3-coder → 128K context devstral-small-2 → 128K context gpt-oss → 4,096 tokens The difference comes down to model intent. qwen3-coder and devstral-small-2 are coding-focused models, designed to ingest large amounts of source code, project structure, and related context in a single request. A large default context window is critical for these use cases. gpt-oss, on the other hand, is a general-purpose model. Its default context size reflects a broader optimization target, where extremely long inputs are less critical than they are for code-centric workflows. Increasing Context Size for GPT-OSS If you want to use gpt-oss for coding tasks that benefit from a larger context window, Docker Model Runner makes it easy to repackage the model with an increased context size. For example, to create a version of gpt-oss with a 128K context window, you can run: docker model pull gpt-oss # In case it's not pulled docker model package --from gpt-oss --context-size 128000 gpt-oss:128K This creates a new model artifact with an expanded context length that can be served by Docker Model Runner like any other model. Once packaged, you can reference this model in your opencode.json configuration: { "$schema": "https://opencode.ai/config.json", "provider": { "dmr": { "npm": "@ai-sdk/openai-compatible", "name": "Docker Model Runner", "options": { "baseURL": "http://localhost:12434/v1" }, "models": { "gpt-oss:128K": { "name": "gpt-oss (128K)" } } } } } Sharing Models Across Your Team Packaging models as OCI Artifacts has an additional benefit: the resulting model can be pushed to Docker Hub or a private registry. This allows teams to: Standardize on specific model variants (including context size) Share models across developers without local reconfiguration Ensure consistent behavior across environments Version and roll back model changes explicitly Instead of each developer tuning models independently, teams can treat models as first-class artifacts, built once and reused everywhere. Putting It All Together: Using the Model from the CLI With Docker Model Runner configured and the gpt-oss:128K model packaged, you can start using it immediately from OpenCode. This section walks through selecting the model and using it to generate an agents.md file directly inside the Docker Model project. Step 1: Verify the Model Is Available First, confirm that the packaged model is available locally: docker model ls You should see gpt-oss:128K listed among the available models. If not, make sure the packaging step is completed successfully. Step 2: Configure OpenCode to Use the Model Ensure your project’s opencode.json includes the packaged model: { "$schema": "https://opencode.ai/config.json", "provider": { "dmr": { "npm": "@ai-sdk/openai-compatible", "name": "Docker Model Runner", "options": { "baseURL": "http://localhost:12434/v1" }, "models": { "gpt-oss": { "name": "gpt-oss:128K" } } } } } This makes the model available to OpenCode under the dmr provider. Step 3: Start OpenCode in the Project From the root of the Docker Model project, start OpenCode: opencode Select the model from the list by running: /models Figure 3: Selecting gpt-oss model powered by Docker Model Runner in OpenCode Step 4: Ask OpenCode to Generate agents.md Once OpenCode is running, prompt the model to generate an agents.md file using the repository as context: Generate an agents.md file in the project root following the agents.md specification and examples. Use this repository as context and include sections that help an AI agent work effectively with this project, including: - Project overview - Build and test commands - Code style guidelines - Testing instructions - Security considerations Base the content on the actual structure, tooling, and conventions used in this repository. Keep the file concise, practical, and actionable for an AI agent contributing to the project. Because OpenCode is connected to Docker Model Runner, it can safely pass repository structure and relevant files to the model without sending any data outside your infrastructure. The expanded 128K context window allows the model to reason over a larger portion of the project, resulting in a more accurate and useful agents.md. Figure 4: The resulting agents.md file Step 5: Review and Contribute to Docker Model Runner Once the file is generated: cat agents.md Make any necessary adjustments so it accurately reflects the project, then commit it like any other project artifact: git add agents.md git commit -m "Add agents documentation" At this point, you’re ready to open your first Docker Model Runner pull request. Using OpenCode with Docker Model Runner makes it easy to contribute high-quality documentation and project artifacts, while keeping all model inference and repository context within the infrastructure you control. How You Can Get Involved The strength of Docker Model Runner lies in its community and there’s always room to grow. We need your help to make this project the best it can be. To get involved, you can: Star the repository: Show your support and help us gain visibility by starring the Docker Model Runner repo. Contribute your ideas: Have an idea for a new feature or a bug fix? Create an issue to discuss it. Or fork the repository, make your changes, and submit a pull request. We’re excited to see what ideas you have! Spread the word: Tell your friends, colleagues, and anyone else who might be interested in running AI models with Docker. We’re incredibly excited about this new chapter for Docker Model Runner, and we can’t wait to see what we can build together. Let’s get to work! Learn more Check out the Docker Model Runner General Availability announcement Visit our Model Runner GitHub repo! Docker Model Runner is open-source, and we welcome collaboration and contributions from the community! Get started with Docker Model Runner with a simple hello GenAI application View the full article
  20. Ukraine-based developer MacPaw is set to close Setapp Mobile, its alternative app store for iOS devices in the European Union, next month. The service will officially cease operating on February 16, 2026. Setapp Mobile launched in open beta in September 2024. In a support page, MacPaw said Setapp Mobile is being closed because of Apple's "still-evolving and complex business terms that don't fit Setapp's current business model," suggesting it was not profitable for the company. For users in the EU who accessed iOS apps through Setapp's subscription store, those apps will be removed from the platform after the shutdown date. Setapp advises users to back up any important data before then, as the apps will no longer be available once the service ends. Setapp's separate subscription-based Mac app store will continue to operate as normal. MacPaw is not alone in trying its hand in the EU market for alternative app stores, which came in the wake of the Digital Markets Act (DMA) that mandates support for third-party app marketplaces on iOS in the EU. There are a handful of alternative marketplaces, but the most prominent is the Epic Games Store. These alternative app marketplaces, as Apple calls them, are a relatively new frontier for app distribution on iOS, but they face hefty challenges, such as navigating Apple's controversial Core Technology Fee and competing with its established ‌App Store‌ ecosystem. Epic Games currently pays the Apple fees that EU developers incur when distributing their apps through the ‌Epic Games‌ Store. However, Epic CEO Tim Sweeney has said it is "not financially viable" for ‌Epic Games‌ to pay Apple's fees in the long term, but it plans to do so while it waits to see if the European Union requires Apple to further tweak its rules for third-party marketplaces under the DMA. Sweeney has criticized Apple's Core Technology Fee and app distribution guidelines many times, and has described the fee as "ruinous for any hopes of a competing store getting a foothold." In that regard, Setapp Mobile may well have been its first major victim.Tags: European Union, Setapp This article, "MacPaw Pulls Plug on Setapp Mobile iOS Store, Blames Apple's 'Still-Evolving and Complex Business Terms' for Alternative EU Marketplaces" first appeared on MacRumors.com Discuss this article in our forums View the full article
  21. Apple today announced expanded cross-border Apple Pay support for users in mainland China, allowing them to use Visa credit and debit cards issued by local banks to make contactless payments both in-store and online while traveling abroad. Eight major Chinese banks now support the feature, including the Industrial and Commercial Bank of China, Bank of China, Agricultural Bank of China, and China Merchants Bank. Additional banks including Shanghai Pudong Development Bank and China Construction Bank will add support in the coming months. Mastercard is also preparing to launch similar support for select cardholders. "With this expansion of cross-border Apple Pay capabilities in mainland China, we're making travel more seamless and secure, giving users confidence in their payments wherever they go," said Jennifer Bailey, Apple's vice president of Apple Pay and Apple Wallet. Apple first launched ‌Apple Pay‌ in 2014, and has expanded it to dozens of countries and territories around the world.Tags: Apple Pay, China This article, "Apple Expands Cross-Border Apple Pay Support in China" first appeared on MacRumors.com Discuss this article in our forums View the full article
  22. Apple's upcoming iPhone 17e will feature a Dynamic Island instead of a notch at the top of the screen, but unlike the rest of the iPhone 17 lineup, the display itself will still refresh at 60Hz, according to a known Weibo leaker. Apple made major improvements to the iPhone 17's display last year, introducing ProMotion display technology with up to a 120Hz refresh rate, similar to recent iPhone Pro models. 120Hz maximum refresh rates allow for smoother scrolling when viewing webpages and improvements for video, but it looks like the iPhone 17e is not getting the upgrade to keep costs down. In a new post on the Chinese social media platform, "Digital Chat Station" said that the iPhone 17e will retain a 6.1-inch OLED display with a 60Hz refresh rate, but this time it will have a Dynamic Island. The Dynamic Island would add the interactive area at the top of the screen that displays ongoing activities, incorporating the camera and other front-facing sensors. The iPhone 16e features a "notch" at the top of the display, similar to the ‌iPhone‌ 13 and ‌iPhone‌ 14. That's because the ‌iPhone 16e‌ is based on the design of 2022's ‌iPhone‌ 14, so it could be that the ‌iPhone‌ 17e is based on 2023's ‌iPhone‌ 15, which gained the ‌Dynamic Island‌ and a more rounded frame. Reiterating a previous claim, the leaker also said the second version of Apple's more affordable iPhone will feature an A19 chip, replacing the A18 used in the current iPhone 16e. The A19 chip is based on TSMC's third-generation 3nm process, N3P, and is around 5-10% faster than the A18 chip in terms of raw CPU performance. Another Weibo leaker has claimed Apple will use a downclocked A19 chip in the iPhone 17e. If so, aside from Neural Engine improvements, it would be roughly comparable to Apple's A17 Pro chip. Meanwhile, other rumors suggest the iPhone 17e will gain a magnetic ring so it can connect to MagSafe chargers, which is not an option with the iPhone 16e. To cut down on costs, the device may also be equipped with either the older C1 or C1X modem, but no N1 wireless chip, based on leaked Apple code. Otherwise, the device is expected to retain a front-facing 12-megapixel camera, Face ID, and a rear 48-megapixel camera. The iPhone 17e could launch as soon as February, as the iPhone 16e did last year, but it could come later in the spring. The $599 starting price is not expected to change.Related Roundup: iPhone 16eTag: Digital Chat StationBuyer's Guide: iPhone 16e (Caution)Related Forum: iPhone This article, "iPhone 17e to Gain Dynamic Island But Display Still Stuck at 60Hz" first appeared on MacRumors.com Discuss this article in our forums View the full article
  23. Verizon today experienced a major outage, which it is still working to fully resolve. In response, the carrier has promised that all affected customers will be credited an unspecified amount, with more details to be shared soon. "Today, we let many of our customers down and for that, we are truly sorry," said Verizon. "We are working non-stop and making progress," the carrier assured. "Our teams will continue to work through the night until service is restored for all impacted customers." iPhone users with Verizon service are or were generally unable to make phone calls, send text messages, or use data over 5G or LTE due to the outage. iPhone users typically see "SOS" in the status bar when a carrier experiences an outage. Apple explains what "SOS" means in a support document:If you see SOS or "SOS only" in the status bar, your device isn't connected to your cellular network, but you can still make emergency calls through other carrier networks. This feature is available in Australia, Canada, and the United States.Stay tuned for further updates. Today, we let many of our customers down and for that, we are truly sorry. They expect more from us. We are working non-stop and making progress. Our teams will continue to work through the night until service is restored for all impacted customers. We will make this right -… — Verizon News (@VerizonNews) January 15, 2026 Tag: Verizon This article, "iPhone SOS: Verizon Apologizes for Outage, Promises Customer Credits" first appeared on MacRumors.com Discuss this article in our forums View the full article
  24. Hold onto your butts, Australia – Parkway Drive are coming home to Byron Bay. After more than a decade away from their hometown stage, Byron’s most successful band ever have just been announced as headliners for Bluesfest 2026, marking their first ever major festival appearance in Byron and their first hometown show since their high school gigs back in 2014 (!!!) “This is going to be iconic” Sharing the news on socials, Parkway wrote: “It’s been more than a decade since we last took the stage in our hometown of Byron Bay. Coming back as one of the headliners of the legendary Bluesfest this April feels like a true homecoming. This is going to be iconic.” And tbh? They’re not wrong. The addition of Parkway Drive is a massive left turn for Bluesfest in the best possible way – the festival throwing its arms wide open to heavy music and welcoming one of Australia’s biggest global metal exports back to where it all began. Festival Director Peter Noble OAM called it a historic moment, reminding fans that Parkway now operate at full arena scale after their 2024 Australian run, adding “That tells you everything you need to know about the scale… This is a major addition to the Bluesfest lineup, and something we are incredibly proud of”. And for any metal-haters, he added: “We have always believed at Bluesfest that great music is great music, no matter the genre. If metal is not your thing, there are three other stages offering everything else you could want. But I will say this very clearly. Parkway Drive are not to be missed.” And while Parkway’s hometown return is the headline-grabber, the latest lineup drop is stacked across the board. Neo-soul royalty Erykah Badu will make her first Bluesfest appearance since 2012, and for the first time ever she’ll play back-to-back on the same stage as Earth, Wind & Fire on Good Friday – which honestly sounds like spiritual repair work for the soul. Meanwhile, reggae icons The Wailers are locked in for a special three-night residency celebrating 50 years of Rastaman Vibration, performing three completely different sets across the festival weekend. All of this lands on top of an already wild Bluesfest 2026 lineup featuring legends like Split Enz, Sublime, The Black Crowes, Buddy Guy, Counting Crows, The Pogues, Marcus King Band, Xavier Rudd, The Living End and a huge wave of Aussie faves. Bluesfest 2026 will take over the Byron Events Farm across the Easter long weekend from April 2–5, rising from the ashes after originally intending to shut up shop after its 2025 event. And with the mighty Parkway Drive now locked and loaded, it’s shaping up to be a big’n. Cop the full lineup and details down below. Bluesfest 2026 Lineup Parkway Drive Erykah Badu The Wailers Bluesfest Busking Competition Joining… Split Enz Earth, Wind & Fire Sublime The Black Crowes Buddy Guy Counting Crows The Pogues Marcus King Band Jerry Harrison & Adrian Belew “Remain In Light” Xavier Rudd The Living End Kenny Wayne Shepherd Band Mark Seymour Mental As Anything Skegss The Dreggs South Summit Robert Randolph Taj Farrant The Southern River Band 19-Twenty Chain Backsliders Pierce Brothers Áine Tyrrell Ray Beadle Steve Poltz Daniel Champagne Nik West (exclusive) Roshani Angelique Francis (exclusive) Jovin Webb (exclusive) Z-Star Ben Catley Laid Back Country Picker (exclusive) Bluesfest 2026 Dates Thursday, 2nd April – Sunday, 5th April 2026 – Byron Events Farm, Tyagarah NSW Early bird tickets on sale now here Further Reading Aussie Festival Prices Are Rising Twice As Fast As Inflation, New Study Finds Bluesfest Rescinds Farewell, Announce Dates For 2026 Parkway Drive Release Statement On Park Waves Cancellation: “It Hurts” The post Holy Sh*t! Parkway Drive Are Headlining Bluesfest 2026 appeared first on Music Feeds. View the full article
  25. After a 14-year drought between Aussie headline tours (we checked), UK rock shapeshifters The Horrors are finally coming back down under this April, and they’re doing it in their boldest new form yet. Fresh off the release of their sixth studio album Night Life, the band will hit Brisbane, Sydney, Melbourne, Adelaide and Perth, bringing their shadowy new era to local stages for the very first time. Music Feeds caught up with frontman Faris Badwan for a yarn ahead of the trip, who revealed that Night Life wasn’t just another album – it was a full-blown band reset. The Horrors – ‘LA Runaway’ “With this album we kind of reorganised the band,” Faris told us. “It was basically just me and Rhys in his bedroom for a long time, with no outside input. Writing with fewer people meant I could go deeper emotionally – it was a completely different way of working.” That stripped-back approach has resulted in a record that trades nightclub hedonism for something heavier, moodier and more introspective – a late-night head-trip as opposed to a dancefloor banger. And while Night Life is the first Horrors album not to feature all five OG members, Faris reckons the new lineup – featuring Amelia Kidd on keys and Telegram’s Jordan Cook on drums – has slotted in effortlessly. “Amelia can play such a range of things – I’d worked with her years ago and always knew how talented she was,” the band leader added. “Jordan’s played with Telegram and has toured with us before. Bringing in new people after 20 years is hard, but honestly, they’re the perfect additions.” “Australia feels like the part of the world that hasn’t quite gone bad yet” The Horrors last touched down in Australia in 2025 for Tassie’s carnival of shadows Dark Mofo and a special 3RRR set, and Faris still can’t stop talking about it. “Dark Mofo might be the best festival I’ve ever played,” he swooned. “The attention to detail, the unpredictability – I’ve never really experienced anything like it.” He also recalled meeting fans who’d been there since the very beginning, reflecting: “Someone came to see us who’d been at our very first Australian show in 2007. I love seeing people grow up with you – maybe they’ve got kids now… or maybe they’ve named their dog Faris.” As for what he’s most excited about this time around? “We just really enjoy being there. Australia feels like the part of the world that hasn’t quite gone bad yet,” he says. Honestly? So fair. Rom-coms, writing on planes & what’s next While the long-haul flight down under might be br00tal, Faris has turned these dreaded timezone-crossing air schleps into a creative sweet spot. “Flying puts me in a really particular headspace – it’s great for writing,” he said. “Also, whenever I’m on a plane I suddenly get the urge to watch romantic comedies. No idea why.” His go-to: “When Harry Met Sally. Classic.” Between tours, the band are already writing again – and even dropping a David Bowie double cover of ‘Weeping Wall’ and ‘Heroes’ in the coming weeks. So yeah – if you thought Night Life was just a one-off reinvention, think again. You can take The Horrors’ new record for a spin here, or grab tickets to their forthcoming Aussie headline tour down below! The Horrors 2026 Australian Tour Dates Friday 10th April – Princess Theatre – Brisbane Saturday 11th April – Manning Bar – Sydney Sunday 12th April – Northcote Theatre – Melbourne Tuesday 14th April – Lion Arts Factory – Adelaide Wednesday 15th April – Rosemount – Perth Tickets on sale now via thephoenix.au Further Reading Love Letter To A Record: The Horrors On SOPHIE’s ‘PRODUCT’ “It’s Beyond Time”: CKY On Coming Back To Australia After 14 Long Years ‘We, The Weirdos, Unite’: The Rasmus Talk Outsider Power Ahead Of Their First-Ever Australian Shows The post “A Part Of The World That Hasn’t Gone Bad Yet”: The Horrors On Returning To Australia In 2026 appeared first on Music Feeds. View the full article

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.