<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[石头的博客]]></title> 
<description><![CDATA[真正的大师永远怀着一颗学徒的心]]></description>
<link>https://blog.wenxk.top/</link>
<language>zh-cn</language>
<generator>www.emlog.net</generator>
<item>
    <title>PHP SSE实时推流 apache服务不能实时推流问题</title>
    <link>https://blog.wenxk.top/post-258.html</link>
    <description><![CDATA[<p><strong>重要: 需要开启HTTPS, 需要开启HTTPS, 需要开启HTTPS</strong></p>
<pre><code class="language-php">&lt;?php

// 关闭输出缓存
// ini_set('zlib.output_compression', 'Off'); // 关闭gzip压缩

// 设置响应头
header('Content-Type: text/event-stream'); // 告诉浏览器，这是一个服务器推送事件
header('Cache-Control: no-cache'); // 告诉浏览器不要缓存
header('Connection: keep-alive'); // 保持长连接
header('X-Accel-Buffering: no'); // 关闭Nginx的gzip压缩
header('Content-Encoding: none'); // 关闭gzip压缩

// 禁用输出缓冲
ob_implicit_flush(true);
ob_end_clean();  // 清除现有的输出缓冲

for ($i = 0; $i &lt; 5; $i++) {
    // 模拟服务器推送数据
    $data = array(
        'text' =&gt; 'Hello World!',
    );
    returnEventData($data);
    // 确保每个事件之间有换行
    flush(); // 强制输出缓冲区内容
    sleep(1); // 模拟数据推送延迟
}
returnEventData("done");
function returnEventData($returnData, $event = 'message', $id = 0, $retry = 1000)
{
    $str = '';
    if ($id &gt; 0) {
        $str .= "id: {$id}\n";
    }
    if ($event) {
        $str .= "event: {$event}\n";
    }
    if ($retry &gt; 0) {
        $str .= "retry: {$retry}\n";
    }
    if (is_array($returnData)) {
        $returnData = json_encode($returnData);
    }
    $str .= "data: {$returnData}\n\n";
    echo $str;
}</code></pre>]]></description>
    <pubDate>Thu, 14 Nov 2024 10:55:11 +0800</pubDate>
    <author>wen</author>
    <guid>https://blog.wenxk.top/post-258.html</guid>
</item>
<item>
    <title>C++基础</title>
    <link>https://blog.wenxk.top/post-257.html</link>
    <description><![CDATA[<p>C++是一种通用编程语言，是C语言的扩展。它支持面向对象编程（OOP）和过程式编程，同时具有高性能和灵活性。C++由Bjarne Stroustrup于20世纪80年代初开发，旨在提供C语言的功能，并引入面向对象的概念。这使得C++既适用于系统级编程，又适用于应用程序开发。它广泛用于游戏开发、嵌入式系统、操作系统等领域。<br />
<a href="https://blog.wenxk.top/post/229" title="1 C++基础入门">1 C++基础入门</a><br />
<a href="https://blog.wenxk.top/post/230" title="2 数据类型">2 数据类型</a><br />
<a href="https://blog.wenxk.top/post/231" title="3 运算符">3 运算符</a><br />
<a href="https://blog.wenxk.top/post/232" title="4 程序流程结构">4 程序流程结构</a><br />
<a href="https://blog.wenxk.top/post/233" title="5 数组">5 数组</a><br />
<a href="https://blog.wenxk.top/post/234" title="6 函数">6 函数</a><br />
<a href="https://blog.wenxk.top/post/235" title="7 指针">7 指针</a><br />
<a href="https://blog.wenxk.top/post/236" title="8 结构体">8 结构体</a><br />
<a href="https://blog.wenxk.top/post/237" title="1 内存分区模型">1 内存分区模型</a><br />
<a href="https://blog.wenxk.top/post/238" title="2 引用">2 引用</a><br />
<a href="https://blog.wenxk.top/post/239" title="3 函数提高">3 函数提高</a><br />
<a href="https://blog.wenxk.top/post/240" title="4 类和对象">4 类和对象</a><br />
<a href="https://blog.wenxk.top/post/241" title="5 文件操作">5 文件操作</a><br />
<a href="https://blog.wenxk.top/post/242" title="1 模板">1 模板</a><br />
<a href="https://blog.wenxk.top/post/244" title="2 STL初识">2 STL初识</a><br />
<a href="https://blog.wenxk.top/post/245" title="3 STL-常用的容器">3 STL-常用的容器</a><br />
<a href="https://blog.wenxk.top/post/246" title="4 STL-函数对象">4 STL-函数对象</a><br />
<a href="https://blog.wenxk.top/post/247" title="5 STL-常用算法">5 STL-常用算法</a></p>]]></description>
    <pubDate>Wed, 31 Jan 2024 11:15:53 +0800</pubDate>
    <author>wen</author>
    <guid>https://blog.wenxk.top/post-257.html</guid>
</item>
<item>
    <title>修改vim的配置</title>
    <link>https://blog.wenxk.top/post-256.html</link>
    <description><![CDATA[<p>vimrc 是 Vim 的配置文件，用于自定义 Vim 的行为和外观。在 Unix-like 系统中，它通常位于用户的主目录下，文件名为 .vimrc。在 Windows 系统上，它可能位于用户主目录下，也可以是 _vimrc。</p>
<p>你可以使用文本编辑器打开该文件，然后在其中添加或修改配置项，以便满足你的需求。以下是一些可能包含在 .vimrc 中的常见配置项和示例：</p>
<pre><code class="language-bash">syntax on
set number
set autoindent
set smartindent
set expandtab
set tabstop=4
set shiftwidth=4
set ruler
set hlsearch
set mouse=i
set paste</code></pre>
<p>设置行号和语法高亮：</p>
<pre><code class="language-bash">set number
syntax enable</code></pre>
<p>启用自动缩进和智能缩进：</p>
<pre><code class="language-bash">set autoindent
set smartindent</code></pre>
<p>使用空格代替制表符：</p>
<pre><code class="language-bash">set expandtab
set tabstop=4
set shiftwidth=4</code></pre>
<p>显示当前行和列：</p>
<pre><code class="language-bash">set ruler</code></pre>
<p>启用搜索时高亮显示：</p>
<pre><code class="language-bash">set hlsearch</code></pre>
<p>设置配色方案：</p>
<pre><code class="language-bash">colorscheme desert</code></pre>
<p>启用鼠标支持：</p>
<pre><code class="language-bash">set mouse=a</code></pre>
<p>设置粘贴模式：</p>
<pre><code class="language-bash">set paste</code></pre>
<p>这会启用鼠标支持，并允许在 Normal 模式下选择文本，使用鼠标滚轮进行滚动等。<br />
只在插入模式下启用鼠标：<br />
如果你只想在插入模式下启用鼠标，可以使用以下设置：</p>
<pre><code class="language-bash">set mouse=i</code></pre>
<p>在 Visual 模式下启用鼠标：<br />
如果你只想在 Visual 模式下启用鼠标，可以使用以下设置：</p>
<pre><code class="language-bash">set mouse=v</code></pre>
<p>这允许你在 Visual 模式下使用鼠标选择文本。</p>
<p>确保在 .vimrc 文件中添加这些设置，并保存文件。重新启动 Vim 或在已打开的 Vim 中执行 :source ~/.vimrc 来使更改生效。</p>
<p>请注意，鼠标支持的实际效果可能会受到终端仿真器的支持程度的影响。在某些终端中，如 xterm 或 gnome-terminal，鼠标支持通常良好。在其他终端中，可能需要特定的设置或插件来实现更好的鼠标交互。</p>]]></description>
    <pubDate>Fri, 26 Jan 2024 11:49:42 +0800</pubDate>
    <author>wen</author>
    <guid>https://blog.wenxk.top/post-256.html</guid>
</item>
<item>
    <title>Linux 开启root远程链接</title>
    <link>https://blog.wenxk.top/post-255.html</link>
    <description><![CDATA[<p>修改root用户的远程登录设置同样涉及到SSH配置。请注意，为了系统的安全性，强烈建议不直接允许root用户通过SSH远程登录。相反，您应该使用普通用户登录，然后通过sudo提升权限。</p>
<p>打开SSH配置文件：<br />
使用文本编辑器（例如nano、vi等）打开SSH服务器配置文件 /etc/ssh/sshd_config：</p>
<pre><code class="language-bash">sudo nano /etc/ssh/sshd_config</code></pre>
<p>查找PermitRootLogin行：</p>
<pre><code class="language-bash">PermitRootLogin yes
PasswordAuthentication yes</code></pre>
<p>这允许root用户通过密码进行远程登录。确保启用密码身份验证时密码强度足够。</p>
<p>保存并关闭编辑器。</p>
<p>重新启动SSH服务：<br />
保存文件后，重新启动SSH服务以应用更改：</p>
<pre><code class="language-bash">sudo service ssh restart</code></pre>
<pre><code class="language-bash">sudo systemctl restart ssh</code></pre>]]></description>
    <pubDate>Fri, 26 Jan 2024 11:46:35 +0800</pubDate>
    <author>wen</author>
    <guid>https://blog.wenxk.top/post-255.html</guid>
</item>
<item>
    <title>使用conda管理python的版本</title>
    <link>https://blog.wenxk.top/post-254.html</link>
    <description><![CDATA[<pre><code class="language-bash">conda create -n modelscope python=3.8
conda activate modelscope</code></pre>
<p>conda create: 这是 Conda 工具的命令，用于创建新的环境。</p>
<p>-n modelscope: 使用 -n 标志指定创建的环境的名称为 modelscope。这是一个自定义的环境名称，你可以根据需要选择不同的名称。</p>
<p>python=3.8: 使用 python 参数指定所需的 Python 版本。在这里，指定使用 Python 3.8 版本。Conda 将下载并安装指定版本的 Python，然后在新创建的环境中使用它。</p>
<blockquote>
<p>Conda 虚拟环境的默认位置是：<code>/path/to/miniconda3/envs/modelscope</code><br />
<code>/path/to/miniconda3</code> 是你安装 Miniconda 的路径。</p>
</blockquote>]]></description>
    <pubDate>Thu, 25 Jan 2024 16:37:41 +0800</pubDate>
    <author>wen</author>
    <guid>https://blog.wenxk.top/post-254.html</guid>
</item>
<item>
    <title>安装Anaconda</title>
    <link>https://blog.wenxk.top/post-253.html</link>
    <description><![CDATA[<h2>先决条件</h2>
<p>要在Linux中使用GUI（图形用户界面）软件包，您需要为Qt安装以下扩展依赖项：</p>
<pre><code class="language-bash">apt-get install libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1 libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6</code></pre>
<h2>安装</h2>
<p>要下载安装程序，请打开终端并使用以下命令，具体取决于您的 Linux 体系结构：</p>
<pre><code class="language-bash">curl -O https://repo.anaconda.com/archive/Anaconda3-&lt;INSTALLER_VERSION&gt;-Linux-x86_64.sh</code></pre>
<ul>
<li>最新安装程序 - <a href="https://www.anaconda.com/download#downloads">https://www.anaconda.com/download#downloads</a></li>
<li>安装程序存档 - <a href="https://repo.anaconda.com/archive/">https://repo.anaconda.com/archive/</a></li>
</ul>
<p>若要安装，请运行以下命令，具体取决于您的 Linux 体系结构：</p>
<pre><code class="language-bash">bash ~/Downloads/Anaconda3-&lt;INSTALLER_VERSION&gt;-Linux-x86_64.sh</code></pre>
<p>按 Enter 键查看许可协议。然后按住 Enter 滚动。</p>
<p>输入以同意许可协议。<code>yes</code></p>
<p>使用 Enter 接受默认安装位置，使用 CTRL+C 取消安装，或输入其他文件路径指定备用安装目录。如果接受默认安装位置，安装程序将显示并继续安装。可能需要几分钟才能完成。<code>PREFIX=/home/&lt;USER&gt;/anaconda3</code></p>
<blockquote>
<p>Anaconda 建议您接受默认安装位置。不要选择 Anaconda/Miniconda 安装的路径。<code>/usr</code></p>
</blockquote>
<p>Anaconda 建议您输入“yes”以通过运行 来初始化 Anaconda Distribution。conda init</p>
<p>如果输入“no”，则 conda 根本不会修改 shell 脚本。要在安装过程完成后初始化 conda，请运行以下命令：</p>
<pre><code class="language-bash">source &lt;PATH_TO_CONDA&gt;/bin/activate
conda init</code></pre>
<p>安装程序完成并显示：“感谢您安装 Anaconda3！</p>
<p>关闭并重新打开终端窗口以使安装生效，或输入命令以刷新终端。<code>source ~/.bashrc</code></p>
<p>您还可以控制 shell 在每次打开时是否激活了基础环境。</p>
<pre><code class="language-bash">conda config --set auto_activate_base True

conda config --set auto_activate_base False
</code></pre>]]></description>
    <pubDate>Thu, 25 Jan 2024 16:28:48 +0800</pubDate>
    <author>wen</author>
    <guid>https://blog.wenxk.top/post-253.html</guid>
</item>
<item>
    <title>浏览器怎么录音</title>
    <link>https://blog.wenxk.top/post-252.html</link>
    <description><![CDATA[<p>在浏览器中使用JavaScript开启麦克风通常涉及到使用WebRTC（Web实时通信）技术。以下是一个简单的示例代码，演示如何使用JavaScript在浏览器中录音：</p>
<pre><code class="language-javascript">// 检查浏览器是否支持WebRTC
if (navigator.mediaDevices &amp;&amp; navigator.mediaDevices.getUserMedia) {
    // 获取麦克风权限
    navigator.mediaDevices.getUserMedia({ audio: true })
        .then(function (stream) {
            // 使用MediaRecorder开始录音
            const mediaRecorder = new MediaRecorder(stream);
            const chunks = [];

            mediaRecorder.ondataavailable = function (event) {
                if (event.data.size &gt; 0) {
                    chunks.push(event.data);
                }
            };

            mediaRecorder.onstop = function () {
                // 将录音数据整合为Blob对象
                const blob = new Blob(chunks, { type: 'audio/wav' });

                // 这里可以将Blob对象发送到服务器保存，或者进行其他操作
                console.log('录音完成');
            };

            // 开始录音
            mediaRecorder.start();

            // 录制一定时间后停止录音（例如10秒后停止）
            setTimeout(function () {
                mediaRecorder.stop();
            }, 10000);
        })
        .catch(function (error) {
            // 用户未授予麦克风权限或发生其他错误
            console.error('无法启用麦克风:', error);
        });
} else {
    console.error('浏览器不支持WebRTC');
}
</code></pre>
<p>此代码创建了一个MediaRecorder实例，通过监听ondataavailable事件将录音数据存储在chunks数组中。当录音停止时，通过onstop事件将chunks中的数据整合为Blob对象。你可以根据需要将Blob对象发送到服务器保存或进行其他处理。请确保用户已授予麦克风权限，并根据实际需求调整录音时长等参数。</p>]]></description>
    <pubDate>Fri, 19 Jan 2024 10:21:40 +0800</pubDate>
    <author>wen</author>
    <guid>https://blog.wenxk.top/post-252.html</guid>
</item>
<item>
    <title>Web Speech API</title>
    <link>https://blog.wenxk.top/post-251.html</link>
    <description><![CDATA[<p>Web Speech API是一个提供浏览器语音识别和语音合成功能的API。该API允许开发者通过JavaScript在网页中实现语音识别和合成，为用户提供更多的交互方式。</p>
<p>Web Speech API包括两个主要组件：</p>
<h2>SpeechRecognition（语音识别）：</h2>
<p>通过SpeechRecognition对象，你可以在浏览器中启用语音识别功能。以下是一些常用的SpeechRecognition属性和方法：</p>
<ul>
<li>lang: 设置语言，例如'en-US'表示英语（美国）。</li>
<li>start(): 启动语音识别。</li>
<li>stop(): 停止语音识别。</li>
<li>onresult: 语音识别结果的事件处理程序。</li>
</ul>
<p>例子：</p>
<pre><code class="language-javascript">const recognition = new SpeechRecognition();
recognition.lang = 'en-US';

recognition.onresult = function(event) {
    const transcript = event.results[0][0].transcript;
    console.log('识别结果:', transcript);
};

recognition.start();
</code></pre>
<h2>SpeechSynthesis（语音合成）：</h2>
<p>通过SpeechSynthesis对象，你可以在浏览器中启用语音合成功能。以下是一些常用的SpeechSynthesis属性和方法：</p>
<ul>
<li>speak(utterance): 开始语音合成。</li>
<li>cancel(): 取消当前正在进行的语音合成。</li>
<li>onend: 语音合成结束时的事件处理程序。</li>
</ul>
<p>例子：</p>
<pre><code class="language-javascript">const utterance = new SpeechSynthesisUtterance('Hello, how are you?');

utterance.lang = 'en-US';

utterance.onend = function() {
    console.log('语音合成结束');
};

speechSynthesis.speak(utterance);
</code></pre>
<p>请注意，浏览器的支持程度可能有所不同，而且用户需要在使用这些功能时授予相应的权限。在实际应用中，你可能需要进行一些额外的逻辑来处理用户授权和浏览器兼容性。</p>]]></description>
    <pubDate>Fri, 19 Jan 2024 10:17:34 +0800</pubDate>
    <author>wen</author>
    <guid>https://blog.wenxk.top/post-251.html</guid>
</item>
<item>
    <title>ios中safari浏览器中window.open()无效的问题</title>
    <link>https://blog.wenxk.top/post-250.html</link>
    <description><![CDATA[<p>safari浏览器为了避免弹出广告影响用户，禁用了通过代码调用超链接在新标签打开页面的功能。所以在接口返回中调用<code>window.open()</code>打开链接无效。<br />
解决方法：接口返回中，把<code>window.open</code>放到setTimeout里运行即可，因为setTimeout是在主线程运行的，因此该操作不会被浏览器认定为代码操作的，所以不会拦截。</p>
<pre><code class="language-javascript">setTimeout(()=&gt;window.open(res.data.url))</code></pre>]]></description>
    <pubDate>Tue, 16 Jan 2024 15:49:55 +0800</pubDate>
    <author>wen</author>
    <guid>https://blog.wenxk.top/post-250.html</guid>
</item>
<item>
    <title>python 用virtualenv创建指定版本的虚拟环境</title>
    <link>https://blog.wenxk.top/post-249.html</link>
    <description><![CDATA[<p><strong>注意：</strong>这个版本管理需要先安装对应的python版本</p>
<p>如果你想使用 virtualenv 创建一个指定版本的虚拟环境，你可以按照以下步骤操作：</p>
<ol>
<li>安装 virtualenv： 如果你还没有安装 virtualenv，可以使用以下命令进行安装：</li>
</ol>
<pre><code class="language-bash">pip install virtualenv</code></pre>
<ol start="2">
<li>创建虚拟环境： 在你的项目目录下，运行以下命令创建指定版本的虚拟环境：</li>
</ol>
<pre><code class="language-bash">virtualenv -p python3.8 venv</code></pre>
<p>替换 python3.8 为你想要的Python版本。上述命令中的 venv 是虚拟环境的名称，你可以根据需要修改。</p>
<ol start="3">
<li>激活虚拟环境：</li>
</ol>
<ul>
<li>在 Windows 上：</li>
</ul>
<pre><code class="language-bash">.\venv\Scripts\activate</code></pre>
<ul>
<li>在 macOS/Linux 上：</li>
</ul>
<pre><code class="language-bash">source venv/bin/activate
</code></pre>
<ol start="4">
<li>验证Python版本： 在虚拟环境中运行以下命令验证Python版本：</li>
</ol>
<pre><code class="language-bash">python --version
</code></pre>
<p>确保它显示的是你指定的Python版本。</p>
<ol start="5">
<li>退出虚拟环境： 当你完成工作后，可以通过以下命令退出虚拟环境：</li>
</ol>
<pre><code class="language-bash">deactivate</code></pre>
<p>这样，你就成功创建了一个指定版本的Python虚拟环境。请注意，确保你的系统中已经安装了指定版本的Python。</p>]]></description>
    <pubDate>Mon, 08 Jan 2024 17:32:00 +0800</pubDate>
    <author>wen</author>
    <guid>https://blog.wenxk.top/post-249.html</guid>
</item></channel>
</rss>