<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>paulshu (paulshu)</title>
    <link>https://ruby-china.org/paulshu</link>
    <description/>
    <language>en-us</language>
    <item>
      <title>如何按模板生成 PPT</title>
      <description>&lt;p&gt;最近有一个项目需要按规定的模板生成 PPT，查了一下资料，发现没有太详细的资料，不知有没有好的解决方案或 gem，找了几个之前的 gem，都很久没有维护了。&lt;/p&gt;</description>
      <author>paulshu</author>
      <pubDate>Mon, 04 Jun 2018 21:54:04 +0800</pubDate>
      <link>https://ruby-china.org/topics/36895</link>
      <guid>https://ruby-china.org/topics/36895</guid>
    </item>
    <item>
      <title>请问在 Ruby 中怎么用 ffi Gem 接收一个数组或多个值</title>
      <description>&lt;h3 id="1. 请问，如果我要用ffi 传一个数组进来，Go语言写的，输出为数组类型"&gt;1. 请问，如果我要用 ffi 传一个数组进来，Go 语言写的，输出为数组类型&lt;/h3&gt;
&lt;p&gt;调用时就会报这样的错，无法正常读取&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;panic: runtime error: cgo result has Go pointer

goroutine 17 &lt;span class="o"&gt;[&lt;/span&gt;running, locked to thread]:
main._cgoexpwrap_fd0f1cf0a105_GoAdd.func1&lt;span class="o"&gt;(&lt;/span&gt;0xc420040e98&lt;span class="o"&gt;)&lt;/span&gt;
    command-line-arguments/_obj/_cgo_gotypes.go:46 +0x6e
main._cgoexpwrap_fd0f1cf0a105_GoAdd&lt;span class="o"&gt;(&lt;/span&gt;0x4028000000000000, 0x4041333333333333, 0xc4200a2020, 0x3, 0x4&lt;span class="o"&gt;)&lt;/span&gt;
    command-line-arguments/_obj/_cgo_gotypes.go:48 +0x9d
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="2.  请问，如果我要用ffi 同时传多个值进来呢？"&gt;2.  请问，如果我要用 ffi 同时传多个值进来呢？&lt;/h3&gt;
&lt;p&gt;我试了很多方法，每次只能收到第一个值。我估计我的方法不对，各位有类似应用的经验吗？&lt;/p&gt;</description>
      <author>paulshu</author>
      <pubDate>Sun, 15 Oct 2017 12:38:05 +0800</pubDate>
      <link>https://ruby-china.org/topics/34377</link>
      <guid>https://ruby-china.org/topics/34377</guid>
    </item>
    <item>
      <title>Parallel gem 实现从 3 个数组中分别取值进行科学计算的问题</title>
      <description>&lt;h3 id="背景情况："&gt;背景情况：&lt;/h3&gt;
&lt;p&gt;本人新人一枚，最近在做一个项目，需要从三个数组中（每个数组 4.6-6 万组数据），每个数组分别代表直角坐标中的 X，Y，Z，这里以 x_arr，y_arr，z_arr 说明。需要一次同时遍历三个数组，分别按顺序取出相应的 X，Y，Z 值后，代入到另一个函数进行计算。完成这样一次遍历要 1 分钟左右。&lt;/p&gt;
&lt;h3 id="问题："&gt;问题：&lt;/h3&gt;
&lt;p&gt;因时间花的比较多，为提高效率，想利用好计算机的多核 CPU 的能力。因此，我找到了&lt;strong&gt;Parallel&lt;/strong&gt;这个 Gem， &lt;a href="https://github.com/grosser/parallel" rel="nofollow" target="_blank"&gt;https://github.com/grosser/parallel&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="单线程我是这样写的"&gt;单线程我是这样写的&lt;/h4&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;x_arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y_arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;z_arr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;z&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="n"&gt;calculation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后我使用了&lt;strong&gt;Parallel&lt;/strong&gt;，但无论如何也只能实现从其中一个数组中取值，首先将 x_arr 拆分成：x_arr1, x_arr2, x_arr3&lt;/p&gt;
&lt;h4 id="多线程我是这样写的"&gt;多线程我是这样写的&lt;/h4&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Parallel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;x_arr1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x_arr2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x_arr3&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="n"&gt;calculation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;实测，会自动用到到三个核去计算，时间确实缩短了。但是问题来了
&lt;strong&gt;前面只取到了一个数组的值，但“y_arr，z_arr”没有取到，怎么试也不行&lt;/strong&gt;，难道要重写 GEM 吗？还请大家分享一下经验，有什么办法可以解。十分感谢！&lt;/p&gt;</description>
      <author>paulshu</author>
      <pubDate>Wed, 27 Sep 2017 18:29:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/34274</link>
      <guid>https://ruby-china.org/topics/34274</guid>
    </item>
  </channel>
</rss>
