我有一个需要为多个平台构建的程序.现在我做的事情如下:
matrix:
include:
env: PLATFORM=foo
env: PLATFORM=bar
env: PLATFORM=baz
before_install:
- install foo toolchain
- install bar toolchain
- install baz toolchain
script:
- make PLATFORM=$PLATFORM
Run Code Online (Sandbox Code Playgroud)
我宁愿不安装所有三个工具链,因为我只会使用一个; 当上游可怕的工具链分发站点出现故障时,它会浪费资源并打破所有构建.
但是,我无法想出一种在构建矩阵中获得before_install的方法---文档对于精确的语法非常不清楚.这是可能的,如果是的话,怎么样?
在Android上使用套接字进行异步I/O是否有适当的机制?
我知道nio频道的存在,但它们对我不起作用,因为我需要能够使用MulticastSockets和BluetoothSockets,它们都不支持频道.
我知道答案可能是没有一个,但由于这是一项相当大的工作,我认为我首先要确定.如果有人知道一个体面的第三方库我可能会使用...
我正在尝试在github项目上开始使用git.(我多年来一直在使用CVS,SVN和hg; git很难让我理解).我尽可能地按照说明操作,根本无法使其正常工作.
克隆我的分叉项目:
git clone git@github.com:davidgiven/linux-allwinner.git
Run Code Online (Sandbox Code Playgroud)
按照建议,我添加一个"上游"遥控器,用于跟踪我的分支项目:
git remote add upstream https://github.com/amery/linux-allwinner.git
Run Code Online (Sandbox Code Playgroud)
我从中取出:
git fetch upstream
Run Code Online (Sandbox Code Playgroud)
这一切都很好.但是,自从我分叉项目以来,它已经过了一周左右,上游已经进行了改变.所以我想引入这些变化.我目前在正确的分支--- allwinner-v3.0-android-v2 ---所以我从上游合并到我的分支:
git merge upstream/allwinner-v3.0-android-v2
Run Code Online (Sandbox Code Playgroud)
......我得到了合并冲突.
CONFLICT (add/add): Merge conflict in arch/arm/mach-sun5i/pm/standby/common.h
CONFLICT (add/add): Merge conflict in arch/arm/mach-sun5i/pm/standby/Makefile
CONFLICT (add/add): Merge conflict in arch/arm/mach-sun5i/pm/standby.S
CONFLICT (add/add): Merge conflict in arch/arm/mach-sun5i/pm/Makefile
[etc]
Run Code Online (Sandbox Code Playgroud)
现在,我什么都没检查过; 我还没有开始工作,我的项目完全没有动过,因为我分叉了.因此,不应该有任何冲突.但也有一些; 发生了什么,我该如何解决?
更新:
git show-branch HEAD upstream/allwinner-v3.0-android-v2 显示了这一点,我不得不说我不明白一句话:
! [HEAD] arm: sun3i: add getioaddr macro
! [upstream/allwinner-v3.0-android-v2] arm: sun3i: updated irq handling and machine_desc to 3.0
--
+ [upstream/allwinner-v3.0-android-v2] …Run Code Online (Sandbox Code Playgroud) 我想在网络浏览器中运行一些Javascript代码,在用户的Google帐户中写入Google电子表格.
Javascript API有点啰嗦,涉及很多往返,但似乎确实有效.我可以成功登录,创建新的电子表格,从中读取值,更新单元格等.但是,我还没有弄清楚如何写入空单元格.(通过空,我的意思是那个没有写入任何值的单元格.)
问题是:为了更新单元格的值,我需要知道单元格的id.为了获得单元格的id,我读取了单元格feed,它显示了所有非空单元格的内容(和id).但是它不会向我显示空单元格,因此我不知道它们的id,因此我无法写入它们.我已经尝试根据其他单元格的命名模式编写自己的id,但这不起作用.
这一定有一个简单的方法.它是什么?
(上下文:我实际上正在尝试将用户首选项存储在用户的Google帐户中.电子表格API似乎是唯一可以在纯Javascript环境中使用的.如果有人可以建议任何更容易的替代方案使用比电子表格,我将不胜感激.)
我正在尝试用gcc反汇编为ARM构建的对象.不幸的是,objdump试图猜测代码是否是ARM和Thumb,并且错了:它认为我的代码是Thumb,而它实际上是ARM.
我看到objdump有一个选项可以强制它将所有指令解释为Thumb(-Mforce-thumb),但它没有强制ARM模式!
这对我来说似乎是一个非常奇怪的遗漏,它严重妨碍了我完成工作的能力(我在嵌入式设备上,我唯一的调试方法是查看反汇编).我尝试了各种方法,包括尝试告诉objdump使用不支持Thumb的ARM架构,但似乎没有任何工作.有任何想法吗?
(是的,我知道指令真的是 ARM ...)
C标准不允许对结构进行某些优化:例如,重新排列字段,合并字段,丢弃从未读取的字段,如果可以将字段转换为自动变量,则将字段提升出结构等.这是需要的各种原因,包括编译单元之间的一致结构布局以及允许与流兼容的结构.
做任何现代编译器(如GCC,铛,视觉C)支持扩展,让我告诉它是好做这些的优化?
当然,它们只对单个编译单元本地的定义有意义,因此编译器可以看到结构的所有可能用途; 某些事情(如上述与演员兼容的结构定义)将变得无法使用.但对于某些任务,这可能是一个非常有价值的优化.
我知道gcc 曾经有一个-fipa-struct-reorg选项可以准确地允许这个,但它从来没有很好地工作,有点腐烂,最终被取出.但我不知道它是否被任何东西所取代.而且我一直没能在clang中找到任何东西,这让我感到惊讶,因为我认为这正是clang将会遍布的那种优化......
我正在将一个非常古老的AWT游戏移植到一个非常简洁的新设备上.
游戏中有一大堆错误,包括一个非常松懈的线程安全方法:游戏引擎试图使用从UI线程获得的图形上下文直接在其引擎线程中绘制到屏幕上.这在设备上不起作用.
通过让引擎线程绘制到屏幕外缓冲区然后让UI线程周期性地调用显示组件上的repaint()和显示组件将缓冲区blit到屏幕上,我已经设法破解它的工作,但是性能糟透了 - 鉴于所有上下文切换和双缓冲,这并不奇怪.
我实际上并不是一个特别知识渊博的AWT程序员; 到目前为止,我已经完全避免它了,这是非常可恶的.但是这个问题---有一个引擎线程想要画在屏幕上---必须是一个普通的问题.有没有人知道如何以安全的方式做到这一点的任何体面的策略(最好是示例代码!),尽可能多地挤出系统性能?
(我特别喜欢的是一个安全的快捷方式,允许引擎线程在感觉准备好时直接渲染到屏幕图形上下文中,因此避免告诉UI线程请求重绘.这将让我拿出一整层双缓冲.但我不知道这样的事情是否可能......)
这都是关于PBP 1.1.2 ---是的,既不是完整的Java也不是诚实的MidP ......
我正在尝试使用 ES6 类进行热代码重载。我需要能够修改类的构造函数,而不需要用新的类替换该类(因为其他人可能会引用它)。
然而,我发现类对象看起来好像有一些对其最初定义的构造函数的内部引用;用 实例化该类new不会查找该类 constructor 或prototype.constructor该类。
例子:
class OldC { constructor() { console.log("old"); } }
class NewC { constructor() { console.log("new"); } }
OldC.prototype.constructor = NewC.prototype.constructor;
OldC.constructor = NewC.constructor;
new OldC();Run Code Online (Sandbox Code Playgroud)
--->“旧”
(更新所有其他方法都可以正常工作;这只是我遇到问题的构造函数。)
考虑到可以通过 找到构造函数[[prototype]],我还添加了以下内容:
Object.setPrototypeOf(OldC, Object.getPrototypeOf(NewC));
Object.setPrototypeOf(OldC.prototype, Object.getPrototypeOf(NewC.prototype));
Run Code Online (Sandbox Code Playgroud)
这也没有帮助(鉴于没有发生子类化,我不会期望它会发生)。
毕竟,检查 OldC 表明原型属性完全符合我的预期,OldC.prototype.constructor是新的。但是,构造 OldC 的实例仍然会调用原始构造函数。
这是怎么回事?我该如何解决?
Java用于解析点分标识符的规则是什么?
例如:
import Foo.Bar;
class Foo
{
public static class Bar
{
};
};
Run Code Online (Sandbox Code Playgroud)
现在,Foo.Bar可以引用导入的类Bar或源代码中定义的类.这种模糊性是如何解决的?
我试过这个案例,所以我知道在实践中会发生什么,但我正在寻找更多; 我想知道基本规则.例如,如果Foo.Bar源文件中存在,我仍然可以引用导入的类Foo.Bar.Baz吗?如果Foo.Bar是一个包还是一个类怎么办?如果编译器找不到Foo.Bar最近的Foo,它只是放弃,还是继续寻找其他的Foos,直到它用完或找到匹配的?
(顺便说一下,我在语言规范中找到了相关的一点.它没有多大帮助......)
npm文档说明了这一点:
- 如果您要在程序中安装要使用的东西,请使用require('whatever'),然后在项目的根目录下在本地安装.
- 如果您要在shell中安装要在shell中使用的东西,请在命令行或其他东西上安装它,以便全局安装它,以便它的二进制文件最终位于PATH环境变量中.
我目前正在编写---或者,至少尝试编写---一个真正的命令行程序,该程序用于从shell中使用.因此,根据以上所述,我的依赖项应该作为全局模块安装.
如何在节点中实际使用与npm一起安装的全局模块?require()当然,调用不起作用,因为/usr/local/lib/node_modules默认情况下npm全局模块目录()不在路径上.我可以通过明确地将它添加到程序顶部的路径来使其工作,但这是一个非常糟糕的解决方案,因为它不可移植 - 它需要知道npm的全局模块目录在任何给定系统上的位置.
为了让生活更加恶化,我通过dpkg安装了一些全局模块.这些已被放入/usr/lib/nodejs,他们只是工作.这让我感到困惑,因为如果全局模块不应该用于普通应用程序,我会期望它们不会在路径上; 或者我希望他们都在路上,并要求全球模块在任何地方工作.拥有一个而不是另一个似乎很奇怪.这里发生了什么?
更新:我应该指出,这个程序只是一个脚本,#!/usr/bin/env nodejs位于顶部; 它不是一个正式的节点模块,这对于一些非常微不足道的东西来说太过分了.由于Debian模块都需要这样的脚本,我觉得npm的全局模块也应该是必需的,但我觉得这是一个Debianism ...