小编Tom*_*m G的帖子

使用视口元标记实现最小宽度

我希望我的网页的视口宽度等于设备宽度,只要设备宽度 > 450px,否则450px(我的布局动态缩放,但在450px宽度以下看起来不太好).

以下两个元标记在平板电脑上运行良好,其中设备宽度> 450px:

<!-- uses device width -->
<meta name="viewport" content="width=device-width" />

<!-- use of initial-scale means width param is treated as min-width -->
<meta name="viewport" content="width=450, initial-scale=1.0" />
Run Code Online (Sandbox Code Playgroud)

但是,在手机上(例如设备宽度= 320px),前者对于内容来说太薄了; 后者导致浏览器放大,因此用户必须手动缩小才能看到内容.

或者,此元标记在手机上运行良好

<meta name="viewport" content="width=450" />
Run Code Online (Sandbox Code Playgroud)

但没有利用平板电脑上的额外宽度.

任何帮助/想法将非常感激(如果它有所作为,我正在使用GWT).

html meta gwt media-queries

59
推荐指数
4
解决办法
6万
查看次数

从Postgres中的json对象中提取键值

我有一个Postgres表,其内容与此类似:

id  | data

1   | {"a":"4", "b":"5"}
2   | {"a":"6", "b":"7"}
3   | {"a":"8", "b":"9"}
Run Code Online (Sandbox Code Playgroud)

第一列是整数,第二列是json列.

我希望能够扩展json中的键和值,所以结果如下所示:

id  | key  | value

1   | a    | 4
1   | b    | 5
2   | a    | 6
2   | b    | 7
3   | a    | 8
3   | b    | 9
Run Code Online (Sandbox Code Playgroud)

这可以在Postgres SQL中实现吗?


我试过的

鉴于原始表可以这样模拟:

select *
from 
(
values
(1, '{"a":"4", "b":"5"}'::json),
(2, '{"a":"6", "b":"7"}'::json),
(3, '{"a":"8", "b":"9"}'::json)
) as q (id, data)
Run Code Online (Sandbox Code Playgroud)

我可以使用以下方法获取密钥:

select id, json_object_keys(data::json) …
Run Code Online (Sandbox Code Playgroud)

postgresql json jsonb

11
推荐指数
2
解决办法
2万
查看次数

有没有可靠的方法从 postgres 间隔中提取年份?

在 Postgres 中,如果我执行以下操作:

select (now() - created_at) from my_table
Run Code Online (Sandbox Code Playgroud)

我得到这样的结果:

854 days 12:04:50.29658
Run Code Online (Sandbox Code Playgroud)

然而,如果我这样做:

select age(now(), created_at) fro my_table
Run Code Online (Sandbox Code Playgroud)

我得到这样的结果:

2 years 4 mons 3 days 12:04:50.29658
Run Code Online (Sandbox Code Playgroud)

根据pg_typeof(...)他们都是类型interval

但如果我尝试提取年份:

select extract(years from age(now(), created_at)) from my_table
Run Code Online (Sandbox Code Playgroud)

我得到:

2
Run Code Online (Sandbox Code Playgroud)

鉴于:

select extract(years from (now() - created_at)) from my_table
Run Code Online (Sandbox Code Playgroud)

我得到:

0
Run Code Online (Sandbox Code Playgroud)

是否有一致的方法从间隔值中提取年数(无论它是如何生成的)?

注意:我没有对数据库的写访问权限,因此无法定义存储过程等。需要是一个 select 语句。

- - -更新- - -

justify_interval(...)下面提出了建议,但不幸的是它的计算似乎不准确。

例如:

select age('2018-01-03'::timestamp, '2016-01-05'::timestamp);
Run Code Online (Sandbox Code Playgroud)

给出正确答案:

1 year 11 mons 29 days
Run Code Online (Sandbox Code Playgroud)

然而:

select justify_interval('2018-01-03'::timestamp - …
Run Code Online (Sandbox Code Playgroud)

postgresql

7
推荐指数
1
解决办法
3604
查看次数

使用Eclipse构建DSL时,增量编译的最佳方法是什么?

正如Eclipse文档所建议的那样,我有一个org.eclipse.core.resources.IncrementalProjectBuilder编译每个源文件的文件,我也有一个org.eclipse.ui.editors.text.TextEditor可以编辑每个源文件的文件.每个源文件都编译到自己的编译单元中,但它可以引用其他(已编译的)源文件中的类型.

这个重要的两项任务是:

  1. 编译(以确保我们使用的类型实际存在)
  2. 自动完成(查找类型,以便我们可以看到它上面有哪些属性/方法)

为了实现这一点,我想在内存中存储所有已编译类型的表示(以下称为"类型存储").

我的问题有两个:

  1. 上面的任务1由构建器执行,而任务2由编辑器执行.因此,他们都可以访问这种类型的商店,我应该创建一个他们都可以访问的静态存储,还是Eclipse提供了一种更简洁的方法来处理这个问题?请注意,在需要时实例化构建器和编辑器是eclipse,而不是我.

  2. 打开eclipse时,我不想重建整个项目,所以我可以重新填充我的类型存储.到目前为止,我最好的解决方案是将这些数据保存在某处,然后从那里重新填充我的商店(也许在项目打开时).这是其他增量编译器通常如何做到这一点的吗?我相信Java的方法是使用一个特殊的解析器,从类文件中有效地提取这些数据.

任何见解都会非常感激.这是我的第一个DSL.

eclipse-plugin incremental-linking incremental-build incremental-compiler

6
推荐指数
1
解决办法
553
查看次数

会话更新在请求之间不持久-node.js / express.js / redis / heroku

我正在使用redis将会话存储在expressjs中。在本地运行时,它运行良好,甚至在大多数情况下,在heroku上运行时,也可以运行。问题是定期(当部署在heroku上时)我会丢失会话更新。

例如,一个用户登录到我的网站,然后将其用户对象添加到会话中:

req.session.user = user;
Run Code Online (Sandbox Code Playgroud)

但是(有时)当我稍后尝试(在不同的请求中)检索对象时,它不存在

//sometimes this is empty, even though I've just set it
var currentUser = req.session.user;
Run Code Online (Sandbox Code Playgroud)

我初始化会话存储如下

if (process.env.REDISTOGO_URL) {
    console.log('Connecting to redis:' + process.env.REDISTOGO_URL);
    var rtg = require('url').parse(process.env.REDISTOGO_URL);
    var redis = require('redis').createClient(rtg.port, rtg.hostname);
    redis.auth(rtg.auth.split(':')[1]);
} else {
    console.log('Connecting to local redis');
    var redis = require('redis').createClient();
}

//sessions
app.use(express.cookieParser('secret key for cookie monster')); //used by session
var RedisStore = require('connect-redis')(express);
app.use(express.session({
    store: new RedisStore({
        client: redis
    })
}));
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我是否需要对会话数据进行某种刷新(或显式保存)?

session heroku redis node.js express

5
推荐指数
1
解决办法
604
查看次数

如何为运行测试设置默认的Spring Boot配置文件(不使用环境变量)?

我有一个Spring Boot项目,使用gradle,有三个Spring配置文件:

  • "发展"(因为我正在发展)
  • "测试"(当我正在运行测试时)
  • "生产"(当它在生产中部署时[到heroku])

因此,我有四个应用程序*.yml文件:

  • application.yml(包含所有共享默认值)
  • 应用development.yml
  • 应用test.yml
  • 应用production.yml

这些环境都很好.问题是当我将代码部署到heroku时,heroku运行'gradle build'(反过来运行'gradle test'),而heroku没有设置环境变量的选项.因此我无法设置有效的配置文件.因此,当它运行测试时,它使用的是application.yml而没有application-test.yml中的覆盖.因此测试显然失败了.

到目前为止,我唯一的解决方案是将所有application-test.yml默认值放入application.yml,然后在其他配置文件中再次覆盖它们,但这显然远非理想.

有办法:

  • 从gradle中设置活动的Spring配置文件(请注意,我没有'test'或'build'任务的编辑权限,因为它们来自'spring boot gradle plugin')?
  • 或者在Spring Boot中有一种方法可以在运行测试时设置默认的活动Spring配置文件吗?

spring heroku gradle build.gradle spring-boot

1
推荐指数
1
解决办法
2228
查看次数

如何从 PostgreSQL 查询中获取列名和类型(不运行它)?

对于任何给定的(Postgres)SQL 查询,我需要能够提取列名和列类型。我不需要查询的结果。而且我需要它快速(即我不想等待查询本身完成 - 特别是如果它需要几分钟或更长时间)。

我以为我有一个解决方案:

提取以下查询的列和类型:

with X as (
  select nationality, count(*)
  from customers group by nationality
)
select *
from X
Run Code Online (Sandbox Code Playgroud)

我会按如下方式包装它:

select *
from (
    with X as (
        select nationality, count(*)
        from customers group by nationality
    )
    select *
    from X
) q
where 1 = 0
limit 0
Run Code Online (Sandbox Code Playgroud)

并且where 1 = 0andlimit 0意味着它不会运行内容。

但它不起作用

如果customers表很大,那么上面的运行需要超过一分钟。然后返回 0 个结果(如预期)。

有任何想法吗?

有没有办法(不编写我自己的 PSQL 解析器)从任何任意 PSQL 查询中获取列名和类型(不运行它完成)?

注意:目标是使其适用于任何任意(用户输入的)SQL SELECT 查询。

postgresql jdbc amazon-redshift

0
推荐指数
1
解决办法
1705
查看次数