並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 164件

新着順 人気順

shell script done commandの検索結果1 - 40 件 / 164件

  • なぜ今シェルスクリプトを学ぶのか・シェルスクリプトのTips - 理系学生日記

    会社の中でシェルスクリプトについての話をすることにしたので、このエントリはそのためのものです。 個人的な好みとかもいろいろ入ってしまっているので、そのあたりは取捨選択してください。 なぜ今シェルスクリプトを学ぶのか 公開されているSRE本をマルっとPDF化する SpotBugsのViolationレポートをMerge Requestのコメント投稿する ぼくの互換性についての考え方 何で書くか シェルスクリプトをうまく書くには ShellCheckを使う バッドパターンとその修正 line-by-lineの処理が多い lsを使う ls /directory | grep mystring ls | grep -v 'log$' lsの結果をループさせる 良いシェルスクリプトを書くためのTIPS set -euする 文字列は基本的にクオートする 局所変数にはlocalを使う 定数は読み取り専用

      なぜ今シェルスクリプトを学ぶのか・シェルスクリプトのTips - 理系学生日記
    • 【2020年】CTF Web問題の攻撃手法まとめ - こんとろーるしーこんとろーるぶい

      はじめに 対象イベント 読み方、使い方 Remote Code Execution(RCE) 親ディレクトリ指定によるopen_basedirのバイパス PHP-FPMのTCPソケット接続によるopen_basedirとdisable_functionsのバイパス JavaのRuntime.execでシェルを実行 Cross-Site Scripting(XSS) nginx環境でHTTPステータスコードが操作できる場合にCSPヘッダーを無効化 GoogleのClosureLibraryサニタイザーのXSS脆弱性 WebのProxy機能を介したService Workerの登録 括弧を使わないXSS /記号を使用せずに遷移先URLを指定 SOME(Same Origin Method Execution)を利用してdocument.writeを順次実行 SQL Injection MySQ

        【2020年】CTF Web問題の攻撃手法まとめ - こんとろーるしーこんとろーるぶい
      • VSCodeのDevContainer入門&Claude Codeのリファレンス実装を見てみる - くらげになりたい。

        この記事を読んで、Cline / RooCodeなどを使うなら、 ちゃんと使えるようにしたいなと思い、いろいろ調べてみたときの備忘録(*´ω`*) Cline / RooCodeを安全に使うためにDevContainerを使い始めた 環境は、macOS+OrbStack DevContainerとは Dev Containerは、Dockerコンテナ上で開発するための拡張機能。 環境構築をコンテナとして用意でき、ローカル環境も汚さないですむ Dev Containers - Visual Studio Marketplace Developing inside a Container また、開いたフォルダをコンテナ上にマウントして、コンテナ内で実行するので、 それ以外のファイルにアクセスできなくすることができるので、AIエージェントを使うときにも安全 コンテナへの接続方法はいくつかあり、そ

          VSCodeのDevContainer入門&Claude Codeのリファレンス実装を見てみる - くらげになりたい。
        • Chromium にコントリビュートするための周辺知識 | blog.jxck.io

          Intro Chromium にコントリビュートするためには、ソースコードを理解する以外にも、もろもろ必要な周辺知識がある。 ドキュメントはかなり整備されている方ではあるが、そのドキュメントにたどり着くのが難しい場合もある。 レビュアーなどが親切に教えてくれるものをローカルにメモしているが、それも散らばってきたため、ここにまとめることにする。 まずは初期状態で公開するが、どんどん更新していき、長くなっても分割しないで追記を繰り返そうと考えている。 関連サイト 初めて取り組もうとすると、まずどこを見ればいいかわからないところから始まる。 似たようないくつかのサイトがあり、使い分けがされているからだ。 code search https://source.chromium.org/chromium/chromium/src コードをインタラクティブに検索するためのサイト Workspace 風

            Chromium にコントリビュートするための周辺知識 | blog.jxck.io
          • Building a tiny Linux from scratch

            Last week, I built a tiny Linux system from scratch, and booted it on my laptop! Here’s what it looked like: Let me tell you how I got there. I wanted to learn more about how the Linux kernel works, and what’s involved in booting it. So I set myself the goal to cobble together the bare neccessities required to boot into a working shell. In the end, I had a tiny Linux system with a size of 2.5 MB,

              Building a tiny Linux from scratch
            • ぼくのMac環境 ver.のんピ | DevelopersIO

              何年後かの自分へ こんにちは、のんピ(@non____97)です。 業務で使用する新しいMacが届きました。 新しいMacを初期セットアップするにあたって「今の設定どうだったっけ...」と調べる時間が結構かかってしまいました ということで何年後かの自分がまた新しいMacに乗り換える際に手間取らないように、設定した内容を書き記しておきます。 移行先のMacの情報は以下の通りです。M1 Max、嬉しい。 # OSのバージョンの確認 > sw_vers ProductName: macOS ProductVersion: 12.4 BuildVersion: 21F79 # カーネルのバージョン確認 > uname -r 21.5.0 # CPUのアーキテクチャの確認 > uname -m arm64 # CPUの詳細確認 > sysctl -a machdep.cpu machdep.cpu.

                ぼくのMac環境 ver.のんピ | DevelopersIO
              • Confusing git terminology

                November 1, 2023 Hello! I’m slowly working on explaining git. One of my biggest problems is that after almost 15 years of using git, I’ve become very used to git’s idiosyncracies and it’s easy for me to forget what’s confusing about it. So I asked people on Mastodon: what git jargon do you find confusing? thinking of writing a blog post that explains some of git’s weirder terminology: “detached HE

                • Ansible の SSH の通信をデバッグする - 赤帽エンジニアブログ

                  レッドハットの杉村です。Ansible のテクニカルサポートをしています。 今回は以前のお問い合わせいただいた事例から、SSH (Secure Shell Protocol) について一つ紹介しようと思います。Ansible は Linux サーバを制御対象とするときは SSH で接続して処理を実行しますので、SSH の通信についてのトラブルは問題に直結します。 RHEL 8.6 + Ansible Core 2.13 で確認しています。 Ansible の基本的な動作原理 まずは Ansible はどうやって動いているのかというのを軽く振り返ってみます。 Ansible が動作するサーバをコントロールノード、制御対象をマネージドノードと呼びます。流れを大まかに説明しますと、この図のようになります。 ① YAMLで書かれたプレイブックからタスクごとに小さなプログラムを生成する ② ①で生成

                    Ansible の SSH の通信をデバッグする - 赤帽エンジニアブログ
                  • The Linux Kernel Module Programming Guide

                    5.4 Name Space When you write a small C program, you use variables which are convenient and make sense to the reader. If, on the other hand, you are writing routines which will be part of a bigger problem, any global variables you have are part of a community of other peoples’ global variables; some of the variable names can clash. When a program has lots of global variables which aren’t meaningfu

                    • GitHub Actions Workflow 作成 Tips - NTT docomo Business Engineers' Blog

                      はじめに こんにちは、クラウド&ネットワークサービス部で SDPF のベアメタルサーバー・ハイパーバイザーの開発をしている山中です。 先日 GitHub Actions self-hosted runners のオートスケーリング構成の紹介(クラウドサービス開発を支える CI の裏側) の記事で、自作の runner controller と Docker を用いた、オンプレミスでの CI 環境構成についてご紹介しました。 今回の記事では、構築した CI 環境上で動かしている workflow の紹介をしながら、workflow 作成についての Tips をいくつかご紹介したいと思います。 engineers.ntt.com 記事を書いたモチベーション 実際の業務で GitHub Actions を使用するにあたって、ありがちな悩みを解決するための workflow の作成事例や工夫などの

                        GitHub Actions Workflow 作成 Tips - NTT docomo Business Engineers' Blog
                      • EKSでKubernetes DaemonSetを用いたロギング:Fluent-bitの運用とトラブル事例 - MonotaRO Tech Blog

                        モノタロウのプラットフォームエンジニアリング部門 コンテナ基盤グループの宋 明起です。 私たちは、アプリケーション開発者からコンテナシステムの認知負荷を取り除き、アプリ開発に専念できるコンテナ基盤の構築と基盤を改善し、開発者はより楽に、より安全にアプリケーションのデプロイと運用できるように支援しています。 背景 基本設計 方針 構成 サンプル モニタリング サンプル 障害 障害1. Memory overflowエラーが発生 障害2. 大量のログが欠損になっている (refresh_interval) 障害3. まだ一部ログが欠損になっている (Prestop) [FAQ] 背景 モノタロウでは以下の記事にあるようにバックエンドのAPIをコンテナ化から始め様々なレイヤーの様々なアプリケーションをEKSの上で運用しています。 EKSコンテナ移行のトラブル事例:ALBの設定とPodのライフサイ

                          EKSでKubernetes DaemonSetを用いたロギング:Fluent-bitの運用とトラブル事例 - MonotaRO Tech Blog
                        • Mini Shai-Hulud の概要と対応指針(2026年4月末 連続パッケージ侵害) - GMO Flatt Security Blog

                          2026年4月29日から30日にかけて、複数の主要パッケージが連続して侵害されました。npm 上では SAP CAP の @cap-js/sqlite / @cap-js/postgres / @cap-js/db-service および SAP の mbt、加えて intercom-client が、PyPI 上では PyTorch Lightning(lightning)が標的となりました。 これら一連の侵害は、攻撃者がデータ持ち出しに用いるリポジトリの description が A Mini Shai-Hulud has Appeared であることから、コミュニティで Mini Shai-Hulud と呼ばれています。 本記事は、各社の公開分析および手元での検証を踏まえ、日本のコミュニティ向けに事象と対応を整理するものです。 TL;DR - 対応指針 はじめに タイムライン 侵害

                            Mini Shai-Hulud の概要と対応指針(2026年4月末 連続パッケージ侵害) - GMO Flatt Security Blog
                          • An Opinionated Guide to xargs

                            Preliminaries What Is xargs? It's an adapter between text streams and argv arrays, two essential concepts in shell. You pass it flags that specify how to split stdin. Then it generates arguments and invokes processes. Example: $ echo 'alice bob' | xargs -n 1 -- echo hi hi alice hi bob What's happening here? xargs splits the input stream on whitespace, producing 2 arguments, alice and bob. We passe

                            • dotfilesのこだわりを晒す - エムスリーテックブログ

                              Unit4の永山です。 dotfiles弄りを趣味にしています。 世にdotfilesを題材とした記事は数多く存在していますがその大半は「dotfilesを作ってみた」「こうやって管理しています」などの表層的な部分の紹介に留まり、その奥にあるべき細部のこだわりや個人の思想にまで踏み込んだ記事は数えるほどしかありません。 そこで、本記事では私のdotfilesを題材にその各構成要素についてオススメ, TIPS, こだわりに分類し、可能な限り詳細に紹介します。 github.com 本記事は筆者の関心の都合上、Zshに関する項目に大きく比重を置いています。ご承知おきください。 dotfilesとは dotfilesを作成することの利点 記事の構成 Zsh編 [オススメ] プラグインの管理にZinitを使う 注釈: Zinitについて [オススメ] Zshプラグインは非同期読み込みする [オスス

                                dotfilesのこだわりを晒す - エムスリーテックブログ
                              • 第861回 systemdの開発者が作ったmkosiで、お手軽にルートファイルシステムを構築する | gihyo.jp

                                Ubuntu Weekly Recipe 第861回systemdの開発者が作ったmkosiで⁠⁠、お手軽にルートファイルシステムを構築する ソフトウェアの作成時における悩ましい問題のひとつが「動作確認環境の構築」です。今回はこの動作確認環境をCI等から作成・利用しやすい「mkosi」について紹介しましょう。 mkosiとは 「mkosi」とはさまざまなディストリビューションの起動可能なOSツリーやイメージを作成するツールです。URLからもわかるように、systemdの開発者たちがsystemdの動作確認用に作ったツールでもあります。その名前の由来は「Make Operating System Image」であり、次のような機能を備えています。 UbuntuやFedoraを含むさまざまなディストリビューションのルートファイルシステムに対応 個々のリリースやCPUアーキテクチャーを指定できる

                                  第861回 systemdの開発者が作ったmkosiで、お手軽にルートファイルシステムを構築する | gihyo.jp
                                • DockerDesktopの代替になるかも?と巷で話題の「Finch」を使ってみた - NRIネットコムBlog

                                  本記事は NRIネットコム Advent Calendar 2022 18日目の記事です。 🎁 17日目 ▶▶本記事 ▶▶ 19日目 🎄 ども、尾澤です。めっきり寒くなりました。 Techブログ登場は2回目です。 このブログが公開される頃には決勝進出チームが決まり、 3位決定戦が終わっている頃でしょう。 私の決勝予想はFRA or BRZ ... と、予想していましたが、 BRZはベスト8で姿を消しました。。。がんばれFRA。 Finch とは 近年ライセンス料金改定によって経営陣の頭を悩ませている(?)Docker Desktopですが、 その代替になりうるツールと呼ばれているのが「Finch」です。(読み方わからん) 2022年11月にAWSからオープンソースとして公開されました。 https://github.com/runfinch ちょっとドキュメント読んでみる というわけで

                                    DockerDesktopの代替になるかも?と巷で話題の「Finch」を使ってみた - NRIネットコムBlog
                                  • Hypershell: A Type-Level DSL for Shell-Scripting in Rust | Context-Generic Programming

                                    Discuss on Reddit, Lobsters, and Hacker News. Summary I am thrilled to introduce Hypershell, a modular, type-level domain-specific language (DSL) for writing shell-script-like programs in Rust. Hypershell is powered by context-generic programming (CGP), which makes it possible for users to extend or modify both the language syntax and semantics. Table of Contents Estimated reading time: 1~2 hours

                                      Hypershell: A Type-Level DSL for Shell-Scripting in Rust | Context-Generic Programming
                                    • React Server Confusion

                                      A couple weeks ago Michael Jackson, one of the authors of React Router, dropped this bomb on Twitter (emphasis mine): React Server Components are nice in theory, but 5 years in, it just isn’t working out. It’s been fun, React. You taught me a lot. Have fun with your react-server-dom-esm-vite-client/server bundles. I’m done. ✌️ To which Evan You, author of Vue, followed up with (emphasis also mine)

                                        React Server Confusion
                                      • How we contain Claude across products

                                        Published May 25, 2026 As agents grow more capable, so does their potential blast radius. The engineering question is how to cap it. Here’s what we’ve learned building containment for claude.ai, Claude Code, and Cowork. Twelve months ago, we'd have rejected out of hand the idea of granting Claude access sufficient to take down an internal Anthropic service. Today that level of access is routine, a

                                          How we contain Claude across products
                                        • GitHub Copilot CLI is now generally available - GitHub Changelog

                                          Menu. Currently selected: Agentic development in your terminal GitHub Copilot CLI—the terminal-native coding agent that brings the power of GitHub Copilot directly to your command line—is now generally available for all Copilot subscribers. Editor’s note (February 27, 2026): Updated the text to accurately indicate that Copilot CLI is available to all Copilot subscribers. Since launching in public

                                            GitHub Copilot CLI is now generally available - GitHub Changelog
                                          • 防衛省サイバーコンテスト 2025 Writeup - はまやんはまやんはまやん

                                            [PG] 縮めるだけじゃダメ [PG] 暗算でもできるけど? [PG] formjacking [PG] loop in loop [NW] 頭が肝心です [NW] 3 Way Handshake? [NW] さあ得点は? [NW] decode [WE] 簡単には見せません [WE] 試練を乗り越えろ! [WE] 直してる最中なんです [WE] 直接聞いてみたら? [WE] 整列! [CY] エンコード方法は一つじゃない [CY] File Integrity of Long Hash [CY] Equation of ECC [CY] PeakeyEncode [FR] 露出禁止! [FR] 成功の証 [FR] 犯人はこの中にいる! [FR] chemistry [FR] InSecureApk [PW] CVE-2014-7169他 [PW] 認可は認証の後 [PW] formerL

                                              防衛省サイバーコンテスト 2025 Writeup - はまやんはまやんはまやん
                                            • Notes by djb on using Fil-C (2025)

                                              Notes by djb on using Fil-C (2025) I'm impressed with the level of compatibility of the new memory-safe C/C++ compiler Fil-C (filcc, fil++). Many libraries and applications that I've tried work under Fil-C without changes, and the exceptions haven't been hard to get working. I've accumulated miscellaneous notes on this page regarding usage of Fil-C. My selfish objective here is to protect various

                                              • March 2025 (version 1.99)

                                                Update 1.99.1: The update addresses these security issues. Update 1.99.2: The update addresses these issues. Update 1.99.3: The update addresses these issues. Downloads: Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap Welcome to the March 2025 release of Visual Studio Code. There are many updates in this version that we hope you'll like, some of the key highligh

                                                  March 2025 (version 1.99)
                                                • A Shell for the Container Age: Introducing Dagger Shell | Dagger Blog

                                                  The Unix shell is over 50 years old, but it still defines how programmers use their computers. We type a few words in a terminal, and milliseconds later an ephemeral factory comes online: the Unix pipeline. Data streams through a network of simple programs working concurrently, like robots on the factory floor, executing a computational choreography we composed seconds ago. Its job done, the facto

                                                  • April 2022 (version 1.67)

                                                    Join a VS Code Dev Days event near you to learn about AI-assisted development in VS Code. Update 1.67.1: The update addresses this security issue. Update 1.67.2: The update addresses these issues. Downloads: Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap Welcome to the April 2022 release of Visual Studio Code. There are many updates in this version that we hope

                                                      April 2022 (version 1.67)
                                                    • May 2025 (version 1.101)

                                                      Version 1.108 is now available! Read about the new features and fixes from December. Release date: June 12, 2025 Security update: The following extension has security updates: ms-python.python. Update 1.101.1: The update addresses these issues. Update 1.101.2: The update addresses these issues. Downloads: Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap Welcome t

                                                        May 2025 (version 1.101)
                                                      • research!rsc: The xz attack shell script

                                                        Introduction Andres Freund published the existence of the xz attack on 2024-03-29 to the public oss-security@openwall mailing list. The day before, he alerted Debian security and the (private) distros@openwall list. In his mail, he says that he dug into this after “observing a few odd symptoms around liblzma (part of the xz package) on Debian sid installations over the last weeks (logins with ssh

                                                        • Running Google Gemma 4 Locally With LM Studio’s New Headless CLI & Claude Code

                                                          Why run models locally?Cloud AI APIs are great until they are not. Rate limits, usage costs, privacy concerns, and network latency all add up. For quick tasks like code review, drafting, or testing prompts, a local model that runs entirely on your hardware has real advantages: zero API costs, no data leaving your machine, and consistent availability. Google’s Gemma 4 is interesting for local use b

                                                            Running Google Gemma 4 Locally With LM Studio’s New Headless CLI & Claude Code
                                                          • Open Interpreterで開かれた未来像 RPAツールをAIで作る

                                                            清水 亮 ryo_shimizu 新潟県長岡市生まれ。1990年代よりプログラマーとしてゲーム業界、モバイル業界などで数社の立ち上げに関わる。現在も現役のプログラマーとして日夜AI開発に情熱を捧げている。 OpenInterpreter(オープンインタープリター)が話題だ。 これはChatGPTの「Code Interpreter」をローカルで動かすというもの。 しかも、GPT-3/GPT-4のAPI以外にも、Llama2やFalconなどのローカル動作のLLMのエンジンにも容易に切り替えることができる。 筆者も早速試してみたが、これが非常に面白い。ChatGPT出現時くらいのインパクトがある。 筆者は最近、平日はほぼ毎日「教養としてのAI講座 / デイリーAIニュース」という有料番組を配信している。 この中で先週とりあげたのがOpen Interpreterだったのだが、この反響がすごい

                                                              Open Interpreterで開かれた未来像 RPAツールをAIで作る
                                                            • June 2023 (version 1.80)

                                                              Update 1.80.1: The update addresses these issues. Update 1.80.2: The update addresses this security issue. Downloads: Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap Welcome to the June 2023 release of Visual Studio Code. There are many updates in this version that we hope you'll like, some of the key highlights include: Accessibility improvements - Accessible V

                                                                June 2023 (version 1.80)
                                                              • My Approach to Building Large Technical Projects

                                                                Whether it's building a new project from scratch, implementing a big feature, or beginning a large refactor, it can be difficult to stay motivated and complete large technical projects. A method that works really well for me is to continuously see real results and to order my work based on that. We've all experienced that feeling of excitement starting a new project. The first few weeks you can't

                                                                • So you've installed `fzf`. Now what? |

                                                                  Add me on LinkedIn! You can cite this post as a reason if you're shy.💬 Software engineers are, if not unique, then darn near unique in the ease with which we can create tools to improve our own professional lives; this however can come at a steep cost over time for people who constantly flit back and forth between different tools without investing the time to learn their own kit in depth. As some

                                                                  • Emacs 29 is nigh! What can we expect?

                                                                    Some random rambling by a linguistics nerd about Emacs, Linux, and conlanging It was announced a couple of hours ago, Emacs 29’s branch is now cut from the master branch! This means the emacs-29 branch will from now no longer receive any new feature, but only bug fixes. So, what’s new with this new major release? I skimmed over the NEWS file, and here are the changes which I find interesting and e

                                                                    • Build AI-powered scripts with the fm CLI and Python SDK - WWDC26 - Videos - Apple Developer

                                                                      Explore all the new ways to leverage Apple Foundation Models on macOS. The Foundation Models SDK for Python lets you integrate with popular tooling and evaluation packages in the Python ecosystem. Find out how to use the brand new fm command introduced in macOS 27 to streamline scripting, automate model workflows, and accelerate your development process. Chapters 0:00 - Introduction 1:22 - Introdu

                                                                        Build AI-powered scripts with the fm CLI and Python SDK - WWDC26 - Videos - Apple Developer
                                                                      • Nx Console VS Code Extension Compromised - StepSecurity

                                                                        Update: On May 19, 2026, GitHub publicly disclosed that approximately 3,800 of its internal source code repositories were exfiltrated after an employee's device was compromised by a poisoned VS Code extension. While GitHub did not officially name the extension, Nx CEO Jeff Cross confirmed that Nx is working with Microsoft and GitHub on the impact of the malicious Nx Console version 18.95.0, and no

                                                                          Nx Console VS Code Extension Compromised - StepSecurity
                                                                        • Microservices Are a Tax Your Startup Probably Can’t Afford

                                                                          Let’s unpack why microservices often backfire early on, where they genuinely help, and how to structure your startup’s systems for speed and survival. Monoliths Are Not the EnemyIf you’re building some SaaS product, even a simple SQL database wrapper eventually may bring a lot of internal complexity in the way your business logic works; additionally, you can get to various integrations and backgro

                                                                            Microservices Are a Tax Your Startup Probably Can’t Afford
                                                                          • How to improve Python packaging, or why fourteen tools are at least tw

                                                                            There is an area of Python that many developers have problems with. This is an area that has seen many different solutions pop up over the years, with many different opinions, wars, and attempts to solve it. Many have complained about the packaging ecosystem and tools making their lives harder. Many beginners are confused about virtual environments. But does it have to be this way? Are the current

                                                                            • You Don't Love systemd Timers Enough

                                                                              Figure 1: Plato's Cave by Jan Pietersz Saenredam; 24 hour clock licensed under CC3 from Wikimedia; systemd logo by the systemd project licensed under CC-BY-SA 4.0 My favorite metonymic technology term is "cron job": even though cron may not literally be the daemon that executes actions on a schedule, we apply the term to anything that walks like a cron and quacks like a cron. As Patrick McKenzie l

                                                                                You Don't Love systemd Timers Enough
                                                                              • Real-world gen AI use cases from the world's leading organizations | Google Cloud Blog

                                                                                AI is here, AI is everywhere: Top companies, governments, researchers, and startups are already enhancing their work with Google's AI solutions. Published April 12, 2024; last updated April 22, 2026. We first published this list two years ago at Next ‘24, as the agentic era was just dawning. Watching this list grow — propelled by our customer’s enthusiastic commitment to AI — proves we are now fir

                                                                                  Real-world gen AI use cases from the world's leading organizations | Google Cloud Blog
                                                                                • dax - Cross-platform shell tools for Node.js

                                                                                  In July 2022, I released dax for Deno providing a cross-platform shell for JavaScript written in JavaScript: const data = $.path("data.json").readJsonSync(); await $`git add . && git commit -m "Release ${data.version}"`; This is similar and inspired by zx, but because it uses a cross-platform shell with common built-in cross-platform commands, more code is going to work the same way on different o