<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Home on Lanfeng Pan&#39;s Random Walk</title>
    <link>https://lanfeng.me/</link>
    <description>Recent content in Home on Lanfeng Pan&#39;s Random Walk</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 14 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://lanfeng.me/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>AgenticR: Unifying R Console and AI Agent</title>
      <link>https://lanfeng.me/post/2026/05/14/agenticr-unifying-r-console-and-ai-agent/</link>
      <pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate>
      <guid>https://lanfeng.me/post/2026/05/14/agenticr-unifying-r-console-and-ai-agent/</guid>
      <description>&lt;p&gt;I recently created a new R package called &lt;a href=&#34;https://github.com/panlanfeng/AgenticR&#34;&gt;&lt;strong&gt;AgenticR&lt;/strong&gt;&lt;/a&gt; that unifies the R console and an AI agent into a single prompt. You type R code and natural language in the same place. The router decides which path to take — code executes directly, natural language goes to an LLM agent that generates and executes R code in your current session. Unlike coding agents that put you inside their product and treat the console as a secondary channel, AgenticR makes normal code execution the default and the AI agent the fallback — no mode switch needed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Load C library in Julia</title>
      <link>https://lanfeng.me/post/2016/02/23/load-c-library-in-julia/</link>
      <pubDate>Tue, 23 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://lanfeng.me/post/2016/02/23/load-c-library-in-julia/</guid>
      <description>&lt;p&gt;It is very convenient to load C or C++ library in julia. It is no more than just run a &lt;code&gt;ccall&lt;/code&gt; function. There is no need to write any additional C code to wrap it up as long as the C library is sharable. Here we use the &lt;code&gt;Yeppp&lt;/code&gt; package as an illustration.&lt;/p&gt;&#xA;&lt;p&gt;First download the C++ library Yeppp! and make sure that libyeppp.so (or .dylib or .dll) file is available on the system library search path or in the current directory.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nonparametric Kernel Estimation and Regression in Julia</title>
      <link>https://lanfeng.me/post/2016/02/22/nonparametric-kernel-estimation-and-regression-in-julia/</link>
      <pubDate>Mon, 22 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://lanfeng.me/post/2016/02/22/nonparametric-kernel-estimation-and-regression-in-julia/</guid>
      <description>&lt;p&gt;In term of Nonparametric density estimation and local regression, I would strongly recommend the package &lt;code&gt;KernelEstimator&lt;/code&gt; because I developed it.&lt;/p&gt;&#xA;&lt;p&gt;Comparing to the &lt;code&gt;KernelDensity&lt;/code&gt; from JuliaStat group, &lt;code&gt;KernelEstimator&lt;/code&gt; provides more flexible kernels. In &lt;code&gt;KernelEstimator&lt;/code&gt;, kernel is just a function but in &lt;code&gt;KernelDensity&lt;/code&gt; kernel has to be of type &lt;code&gt;Distribution&lt;/code&gt; with a closed form character function. &lt;code&gt;KernelDensity&lt;/code&gt; use Fourier transformation to reduce the computing complexity and it is much more efficient. However the price to pay is it can only be used in very limited situations. It is not wise to equal kernel with density function.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Statistics using Julia</title>
      <link>https://lanfeng.me/post/2016/02/20/statistics-using-julia/</link>
      <pubDate>Sat, 20 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://lanfeng.me/post/2016/02/20/statistics-using-julia/</guid>
      <description>&lt;p&gt;Although still in alpha stage, Julia is already quite usable. It does not have so many packages as R yet but the basic recipes, such as distributions and optimization, are ready. This is enough for research usage because most of time the existing packages does not fit into the purpose. We need to reimplement our own methods any way.&lt;/p&gt;&#xA;&lt;p&gt;In this post I will introduce some packages and features essential for statistical research.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Naughty Gaussian Mixture Model</title>
      <link>https://lanfeng.me/post/2016/02/19/the-naughty-gaussian-mixture-model/</link>
      <pubDate>Fri, 19 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://lanfeng.me/post/2016/02/19/the-naughty-gaussian-mixture-model/</guid>
      <description>&lt;p&gt;Usually the convergence rate of maximum likelihood estimation is $n^{-1/2}$. And the log-likelihood ratio between two nested model is $\chi^2$ with degree of freedom corresponding to the difference in length of parameter. However the proof of these two results requires Fisher regularity conditions being satisfied. We tend to ignore those conditions, pretending they are always satisfied. Most of time this is not an issue since most conventional models are well behaved. However naughty models always exist, for example Gaussian mixture model. This fact is surprising because Gaussian mixture model is such simple and conventional.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Build lyx from source with qt5 on Mac</title>
      <link>https://lanfeng.me/post/2015/07/11/build-lyx-from-source-with-qt5-on-mac/</link>
      <pubDate>Sat, 11 Jul 2015 00:00:00 +0000</pubDate>
      <guid>https://lanfeng.me/post/2015/07/11/build-lyx-from-source-with-qt5-on-mac/</guid>
      <description>&lt;p&gt;The stable lyx release looks terrible on retina screen. The on working version 2.2 will support high resolution display but it will not be available in a short time. Building from source is the only option if one cannot bear with the blurry font.&lt;/p&gt;&#xA;&lt;p&gt;Download the lyx source and install qt5.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git clone git://git.lyx.org/lyx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ brew install qt5&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Some other library may be needed, such as libmagic, automake, autoconf and gettext.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Some ideas about grammar of statistics language</title>
      <link>https://lanfeng.me/post/2013/03/16/some-ideas-about-grammar-of-statistics-language/</link>
      <pubDate>Sat, 16 Mar 2013 00:00:00 +0000</pubDate>
      <guid>https://lanfeng.me/post/2013/03/16/some-ideas-about-grammar-of-statistics-language/</guid>
      <description>&lt;p&gt;Many problems, such as some in Philosophy, are difficult because it is hard to state them clearly. A powerful language system improves people&amp;rsquo;s ability to solve complicated problems.&lt;/p&gt;&#xA;&lt;p&gt;R is almost a statistics language. Sometimes it helps to think in R commands. For example, &lt;code&gt;pnorm(2.5, 2, 4)&lt;/code&gt;, &lt;code&gt;qt(.975, 20)&lt;/code&gt; is more intuitive than mathematical notations. And &lt;code&gt;by&lt;/code&gt;, &lt;code&gt;*ply&lt;/code&gt; functions will help to think about matrix computations.&lt;/p&gt;&#xA;&lt;p&gt;It is a good idea to melt programming language and mathematical language together. Sentences, or code can help to understand and can be run at the same time. This requires a programming language to be very expressive. R is far from enough.&lt;/p&gt;</description>
    </item>
    <item>
      <title>最简单的方法制作分形图形</title>
      <link>https://lanfeng.me/post/2012/03/28/%E6%9C%80%E7%AE%80%E5%8D%95%E7%9A%84%E6%96%B9%E6%B3%95%E5%88%B6%E4%BD%9C%E5%88%86%E5%BD%A2%E5%9B%BE%E5%BD%A2/</link>
      <pubDate>Wed, 28 Mar 2012 00:00:00 +0000</pubDate>
      <guid>https://lanfeng.me/post/2012/03/28/%E6%9C%80%E7%AE%80%E5%8D%95%E7%9A%84%E6%96%B9%E6%B3%95%E5%88%B6%E4%BD%9C%E5%88%86%E5%BD%A2%E5%9B%BE%E5%BD%A2/</guid>
      <description>&lt;p&gt;记得之前在 &lt;a href=&#34;https://www.matrix67.com/blog/archives/3913&#34;&gt;Matrix67 的博客&lt;/a&gt;上看过一个用三台摄影机制作分形图形的视频。原理很简单，每台摄影机都拍摄同一块大屏幕的内容，而大屏幕分三块，每块都显示摄像机拍摄的内容。这个想法太巧妙了，不用任何复杂的数学推导和编程就能画出复杂的图形。视频的原目的是为了不编程画分形，可惜三台摄影机比一台笔记本电脑贵多了。利用这个原理，用 R 能模拟实现这样的过程。&lt;/p&gt;&#xA;&lt;p&gt;首先用 &lt;code&gt;grid&lt;/code&gt; 包的 &lt;code&gt;viewport&lt;/code&gt; 函数把一块屏幕分成三份，然后每份按照同样的方法再分成三份，如此递归下去，在最后一层放一个最简单的三角形或任何小图形。这样就可以跟视频中一样的方法在 R 里画出分形图形。还可以把图形或者是屏幕进行旋转得到更炫的图。&lt;/p&gt;&#xA;&lt;p&gt;直接看图。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://imgur.com/Q7mIqh2&#34; alt=&#34;&#34; title=&#34;摄像头正对着屏幕&#34;&gt;&#xA;&lt;img src=&#34;https://imgur.com/CGNtUrR&#34; alt=&#34;&#34; title=&#34;摄像头旋转一下&#34;&gt;&#xA;&lt;img src=&#34;https://imgur.com/NkMb2O6&#34; alt=&#34;&#34; title=&#34;多旋转一点&#34;&gt;&#xA;&lt;img src=&#34;https://imgur.com/nYwdE3c&#34; alt=&#34;&#34; title=&#34;颠倒过来是完全不一样的图&#34;&gt;&#xA;&lt;img src=&#34;https://imgur.com/ZUy8Ux8&#34; alt=&#34;&#34; title=&#34;试试五台摄像&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;代码&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-R&#34; data-lang=&#34;R&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;library&lt;/span&gt;(grid)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;re&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(k, vp.list, el){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  k&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;k&lt;span style=&#34;color:#ae81ff&#34;&gt;-1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(k&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;el&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt;(vp &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; vp.list){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;pushViewport&lt;/span&gt;(vp)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;re&lt;/span&gt;(k&lt;span style=&#34;color:#ae81ff&#34;&gt;-1&lt;/span&gt;, vp.list, el)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;upViewport&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 模拟三台摄影机&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vp1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;viewport&lt;/span&gt;(x&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, y&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, w&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, h&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, angle&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;170&lt;/span&gt;)    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vp2 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;viewport&lt;/span&gt;(x&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, y&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, w&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, h&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, angle&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;70&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vp3 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;viewport&lt;/span&gt;(x&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, y&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, w&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, h&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, angle&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;110&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;grid.newpage&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;re&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;13&lt;/span&gt;, vp.list &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;list&lt;/span&gt;(vp1, vp2, vp3), &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;()&lt;span style=&#34;color:#a6e22e&#34;&gt;grid.polygon&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;.5&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;), gp&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gpar&lt;/span&gt;(col&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;green&amp;#34;&lt;/span&gt;)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 五台摄影机&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vp1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;viewport&lt;/span&gt;(x&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;, y&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;, w&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, h&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vp2 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;viewport&lt;/span&gt;(x&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;, y&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;, w&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, h&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vp3 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;viewport&lt;/span&gt;(x&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;, y&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;, w&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, h&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vp4 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;viewport&lt;/span&gt;(x&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;, y&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;, w&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, h&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vp5 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;viewport&lt;/span&gt;(x&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, y&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, w&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, h&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;grid.newpage&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;re&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;13&lt;/span&gt;, vp.list &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;list&lt;/span&gt;(vp1, vp2, vp3, vp4,vp5), &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;()&lt;span style=&#34;color:#a6e22e&#34;&gt;grid.polygon&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;.5&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;), gp&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gpar&lt;/span&gt;(col&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;green&amp;#34;&lt;/span&gt;)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>这两天与Github的斗争</title>
      <link>https://lanfeng.me/post/2012/03/05/%E8%BF%99%E4%B8%A4%E5%A4%A9%E4%B8%8Egithub%E7%9A%84%E6%96%97%E4%BA%89/</link>
      <pubDate>Mon, 05 Mar 2012 00:00:00 +0000</pubDate>
      <guid>https://lanfeng.me/post/2012/03/05/%E8%BF%99%E4%B8%A4%E5%A4%A9%E4%B8%8Egithub%E7%9A%84%E6%96%97%E4%BA%89/</guid>
      <description>&lt;p&gt;虽然我不怎么写博客，为了附庸风雅还是特想玩一下静态博客。好多&lt;a href=&#34;https://github.com/mojombo/jekyll/wiki/sites&#34;&gt;静态博客&lt;/a&gt;都好好看哪，比如&lt;a href=&#34;https://julialang.org/&#34;&gt;Julia&lt;/a&gt;，本博客直接抄袭了人家的劳动成果。&#xA;这里总结一下无历史负担的人快速搭建静态博客的过程。如果有历史负担，比如需要把以前的博客导入，请等待&lt;a href=&#34;https://yixuan.github.com/&#34;&gt;著名网友&lt;/a&gt;的终极教程出炉。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;首先你要了解下&lt;a href=&#34;https://daringfireball.net/projects/markdown/&#34;&gt;markdown&lt;/a&gt;，简单来说就是一套方便的用文本文件排版出网页的语法。&#xA;搭建好博客后就可以用这套语法方便的写东西了。其实如果你愿意用HTML直接写的话也是可以的。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;注册&lt;a href=&#34;https://github.com&#34;&gt;Github&lt;/a&gt;，在网站上创建目录 USERNAME.github.com(记住这里必须是你的用户名 + &amp;ldquo;github.com&amp;rdquo;)。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;安装github，设置ssh key等。参加github的&lt;a href=&#34;https://help.github.com/&#34;&gt;帮助&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;打开github bash，转到某个目录下，比如E:/blog，用下面命令把别人的网站架构偷过来。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git clone https://github.com/plusjade/jekyll-bootstrap.git USERNAME.github.com  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cd USERNAME.github.com  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git remote set-url origin git@github.com:USERNAME/USERNAME.github.com.git  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git push origin master  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果顺利，到这里网站已经搭好了，稍等一会就可以访问了。不过内容完全是山寨的。等熟悉了网站的架构与内容之间的关系，就可以随心所欲的定制自己的博客了。&lt;/p&gt;&#xA;&lt;p&gt;发表博客的方式如下：在&lt;code&gt;blog/_post/&lt;/code&gt;目录下，新建一个名字类似&lt;code&gt;yyyy-mm-dd-somename.md&lt;/code&gt;文件。该文件的开头需要遵循一定的格式，参考该目录下已有文件。&#xA;在修改了文件开头后就可以在后面写属于自己的内容，然后用下面的命令发布&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git add blog/_posts/yyyy-mm-dd-somename.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git commit -am &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;my 10000th blog&amp;#34;&lt;/span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git push origin master&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这时一篇博客就发表了。如果本地安装了jekyll，在发表之前可以运行&lt;code&gt;jekyll serve&lt;/code&gt;在本地打开网站，检查是否一切如预期。&lt;/p&gt;&#xA;&lt;p&gt;如果在windows下使用的还要注意文件要用utf-8编码，切记切记！&lt;/p&gt;&#xA;&lt;h2 id=&#34;注意&#34;&gt;注意&lt;/h2&gt;&#xA;&lt;p&gt;复制了我的博客的同学们，请一定要记得修改&lt;code&gt;_layouts/common.html&lt;/code&gt;中的Google Analysis代码部分和&lt;code&gt;_layouts/post.html&lt;/code&gt;中disqus代码部分。要不然别人在你网站上发表的评论就跑到我的这里来了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;参考文献&#34;&gt;参考文献&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://jekyllbootstrap.com/&#34;&gt;jekyllbootstrap&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>传说中的你好，世界！</title>
      <link>https://lanfeng.me/post/2012/03/03/%E4%BC%A0%E8%AF%B4%E4%B8%AD%E7%9A%84%E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C/</link>
      <pubDate>Sat, 03 Mar 2012 00:00:00 +0000</pubDate>
      <guid>https://lanfeng.me/post/2012/03/03/%E4%BC%A0%E8%AF%B4%E4%B8%AD%E7%9A%84%E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C/</guid>
      <description>&lt;p&gt;HI!&lt;/p&gt;&#xA;&lt;p&gt;编码终于正常！&lt;/p&gt;</description>
    </item>
    <item>
      <title>About Lanfeng Pan</title>
      <link>https://lanfeng.me/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://lanfeng.me/about/</guid>
      <description>&lt;p&gt;I am a Senior Applied Science Manager in Amazon, working on the Agentic AI and LLM. My team shipped an Amazon scale AI Agent to production, generating creative video/image/audio for advertisers. I also lead LLM fine tuning (GRPO, SFT) for verifiable tasks such as classification and non-verifiable tasks such as creative idea generation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;work-experience&#34;&gt;Work experience&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Senior Applied Science Manager at Amazon, 2024 &amp;ndash; now.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Sr./ Applied Scientist at Amazon, 2018 &amp;ndash; 2021.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
