text:
The URL of duplicate strategy is very long and probably contains unneeded info

The URL when duplicating a strategy contains a base64 encoded search param called 'strategy' with the following type of data:
{
   "id":"340282366920938463463374607431768211457",
   "idDisplay":"1",
   "base":{
      "symbol":"ETH",
      "address":"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
      "logoURI":"https://d1wmp5nysbq9xl.cloudfront.net/ethereum/tokens/0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee.svg",
      "decimals":18,
      "name":"Ethereum"
   },
   "quote":{
      "chainId":1,
      "address":"0x6B175474E89094C44Da98b954EedeAC495271d0F",
      "name":"Dai",
      "symbol":"DAI",
      "decimals":18,
      "logoURI":"https://d1wmp5nysbq9xl.cloudfront.net/ethereum/tokens/0x6b175474e89094c44da98b954eedeac495271d0f.svg"
   },
   "order0":{
      "balance":"1.054950903769487627",
      "startRate":"1799.999999999990486394388497496028313238358720127507694996893405914306640625",
      "endRate":"1799.999999999990486394388497496028313238358720127507694996893405914306640625",
      "marginalRate":"1799.999999999990486394388497496028313238358720127507694996893405914306640625"
   },
   "order1":{
      "balance":"0.000537835017279437",
      "startRate":"1945.000000000134993102932750245637127047919646653228833706819444502760467212806615894706226293932838",
      "endRate":"1945.000000000134993102932750245637127047919646653228833706819444502760467212806615894706226293932838",
      "marginalRate":"1945.000000000134993102932750245637127047919646653228833706819444502760467212806615894706226293932838"
   },
   "status":"active",
   "encoded":{
      "id":"340282366920938463463374607431768211457",
      "token0":"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
      "token1":"0x6B175474E89094C44Da98b954EedeAC495271d0F",
      "order0":{
         "y":"537835017279437",
         "z":"1080226227443660",
         "A":"0",
         "B":"6382340776412"
      },
      "order1":{
         "y":"1054950903769487627",
         "z":"1937048429517186009",
         "A":"0",
         "B":"1875443170982464"
      }
   },
   "roi":"-1.290593073734033",
   "fiatBudget":{
      "base":"8.95899217868239462187",
      "quote":"7.4901514167633621517",
      "total":"16.44914359544575677357"
   }
}

It should actually only have the minimal data needed to create a strategy:
{
   "base":"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
   "quote":"0x6B175474E89094C44Da98b954EedeAC495271d0F",
   "order0":{
      "balance":"1.054950903769487627",
      "startRate":"1799.999999999990486394388497496028313238358720127507694996893405914306640625",
      "endRate":"1799.999999999990486394388497496028313238358720127507694996893405914306640625",
      "marginalRate":"1799.999999999990486394388497496028313238358720127507694996893405914306640625"
   },
   "order1":{
      "balance":"0.000537835017279437",
      "startRate":"1945.000000000134993102932750245637127047919646653228833706819444502760467212806615894706226293932838",
      "endRate":"1945.000000000134993102932750245637127047919646653228833706819444502760467212806615894706226293932838",
      "marginalRate":"1945.000000000134993102932750245637127047919646653228833706819444502760467212806615894706226293932838"
   },
}

Even this one is pretty long - both like this and as base64.
We can consider encoding the numbers in an efficient way.
A number such as "1945.000000000134993102932750245637127047919646653228833706819444502760467212806615894706226293932838"
can be converted to a much shorter representation by using a base much larger than 10 - but it needs to be applied to fractional part (after the dot) and the integer part separately, while addressing the leading 0s in the fractional part.
Just an idea.
This can convert the number above to "eZ:9:RX0M1rPTdO4ij4hlkGcvKUZTZQFRmiabMROAV2A6JVMlkIMm" in the format of  <base64(integer)>::<base64(fractional)> or just <base64(integer)> if there's no fractional part.
Here's the code to achieve this:
const base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

function intToBase64(num: BigInt): string {
    let result = '';
    while (num > 0n) {
        result = base64Chars[Number(num % 64n)] + result;
        num /= 64n;
    }
    return result || "0";  // Handle the case when num is 0
}

function processNumberString(numberString: string): string {
    // Split into integer and fractional parts
    let [integerPartStr, fractionalPartStr] = numberString.split('.');
    let integerPart = BigInt(integerPartStr);
    let fractionalPart = fractionalPartStr || '';

    // Count leading zeros in the fractional part
    let leadingZeros = fractionalPart.length - fractionalPart.replace(/^0+/, '').length;

    // Convert integer part to base64
    let integerBase64 = intToBase64(integerPart);

    // If fractional part exists, convert it to base64
    if (fractionalPart) {
        // Remove leading zeros and convert the rest as BigInt
        let nonZeroFractionalPart = BigInt(fractionalPart.replace(/^0+/, ''));
        let fractionalBase64 = nonZeroFractionalPart > 0n ? intToBase64(nonZeroFractionalPart) : '';

        return `${integerBase64}:${leadingZeros}:${fractionalBase64}`;
    } else {
        return integerBase64;
    }
}

// -- the reverse direction

function base64ToInt(base64Str: string): BigInt {
    let result = BigInt(0);
    for (let char of base64Str) {
        result = result * 64n + BigInt(base64Chars.indexOf(char));
    }
    return result;
}

function reverseProcess(encodedStr: string): string {
    // Split the encoded string
    let parts = encodedStr.split(':');
    let integerBase64 = parts[0];
    let leadingZerosCount = parts.length > 1 ? parseInt(parts[1]) : 0;
    let fractionalBase64 = parts.length > 2 ? parts[2] : '';

    // Decode the integer part
    let integerPart = base64ToInt(integerBase64).toString();

    // Decode the fractional part and add leading zeros
    let fractionalPart = fractionalBase64 ? base64ToInt(fractionalBase64).toString() : '';
    fractionalPart = fractionalPart.padStart(leadingZerosCount + fractionalPart.length, '0');

    // Combine the parts to form the original number
    return fractionalPart ? `${integerPart}.${fractionalPart}` : integerPart;
}

By giving up on json style, shortening param names and not doing encode to base64 we can get it down to 340 chars:
"base":"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", "quote":"0x6B175474E89094C44Da98b954EedeAC495271d0F", "b0":"1:1:1P3O", "sR0":"GJ:15:1P3O0O1ME11BBH2C7", "eR0":"GJ:15:1P3O0O1ME11BBH2C7", "mR0":"GJ:15:1P3O0O1ME11BBH2C7", "b1":"0:3:PPP", "sR1":"GJ:15:1P3O0O1ME11BBH2C7", "eR1":"GJ:15:1P3O0O1ME11BBH2C7", "mR1":"GJ:15:1P3O0O1ME11BBH2C7"

An alternative solution by @ashachaf is to achieve shorter numbers simply by cutting the number after the first 6 non 0 digits.

repo: bancorprotocol/carbon-app


text:
更新到1.0后defineClass失败

defineClass('NVMHomeViewController', {
})

没看出失败
On Thu, May 12, 2016 at 6:29 PM, PhilCai notifications@github.com wrote:

[image: image]
https://cloud.githubusercontent.com/assets/6828315/15211687/4a629878-186f-11e6-8177-5edde84841cd.png
defineClass('NVMHomeViewController',{})
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub
https://github.com/bang590/JSPatch/issues/359

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'js exception,
msg: undefined is not an object (evaluating 'superCls.length'),
stack:
 defineClass@JSPatch.js:226:17
global code@hotfix-2.nvmjs:2:12'

这是报错的地方

奇怪，我执行defineClass('NVMHomeViewController',{})后没有crash，superCls 是NSObject
运行demo有问题吗
On Thu, May 12, 2016 at 6:50 PM, PhilCai notifications@github.com wrote:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'js exception,
msg: undefined is not an object (evaluating 'superCls.length'),
stack:
defineClass@JSPatch.js:226:17
global code@hotfix-2.nvmjs:2:12'
这是报错的地方
—
You are receiving this because you commented.
Reply to this email directly or view it on GitHub
https://github.com/bang590/JSPatch/issues/359#issuecomment-218723495

我试了下就只写了defineClass
defineClass('NVMHomeViewController', {
})

js里面没写方法，就做了上面👆的声明
NVMHomeViewController是ViewController子类，ViewController是UIViewController的子类。
是用ObjC写的，但是里面有一点地方引用了Swift的代码（应该没有影响吧）

你可以先排查
1.试试demo工程有没有问题
2.试试define另一个Class看有没有问题
3.试试define ViewController看有没有问题
On Thu, May 12, 2016 at 7:02 PM, PhilCai notifications@github.com wrote:

我试了下就只写了defineClass
defineClass('NVMHomeViewController', {
})
js里面没写方法，就做了上面👆的声明
NVMHomeViewController是ViewController子类，ViewController是UIViewController的子类。
是用ObjC写的，但是里面有一点地方引用了Swift的代码（应该没有影响吧）
—
You are receiving this because you commented.
Reply to this email directly or view it on GitHub
https://github.com/bang590/JSPatch/issues/359#issuecomment-218725834

4.断点到 JPEngine.m 的defineClass里，看看superCls为什么是undefined
2016-05-12 19:09 GMT+08:00 bang chan bang590@gmail.com:

你可以先排查
1.试试demo工程有没有问题
2.试试define另一个Class看有没有问题
3.试试define ViewController看有没有问题
On Thu, May 12, 2016 at 7:02 PM, PhilCai notifications@github.com wrote:

我试了下就只写了defineClass
defineClass('NVMHomeViewController', {
})
js里面没写方法，就做了上面👆的声明
NVMHomeViewController是ViewController子类，ViewController是UIViewController的子类。
是用ObjC写的，但是里面有一点地方引用了Swift的代码（应该没有影响吧）
—
You are receiving this because you commented.
Reply to this email directly or view it on GitHub
https://github.com/bang590/JSPatch/issues/359#issuecomment-218725834

谢谢啦👌

我在JPEngine的static NSDictionary *defineClass(......)打了断点，没有跑到这里。。。

可能你没有调用 startEngine ?

在didfinishlaunching 调用了startEngine，然后之后的某个时机手动调用了evaluateScriptWithPath

发现我是用AirDrop触发evaluateScript就有问题，其它情况都可以。。。

我现在也遇到一样的问题，只不过我在模拟器上出现，也是superCls.length为undefined。真机运行是OK的

而且_OC_defineProtocol在模拟器上永远返回{"cls":xxx},缺少了"superCls":xxx，写死了返回{"cls":xxx,"superCls":xxx}，居然还是只返回了cls，还没找到什么原因

source: gharchive/issue

license: MIT

license_type: permissive

license_source: github-api


text:
Cleanup for new devs

Resolves https://github.com/bankyadam/not-so-bigquery/issues/5 and a number of other problems with trying to use this project.
Thanks for creating this; pretty clever concept!

Hi @ZimbiX,
Sorry for the late response, did not notice your PR earlier. I'm really happy that you contribute to the project, thanks for all your effort. I'll review the changes tomorrow. Thanks for your patience.
BR,
Adam

Also, I've already applied some of your changes on the master

Hey mate, just fyi, it feels a bit rude to have incorporated (some of) our changes without giving us the credit. The commits are very small, so if I were wanting to fast-track some, I'd have cherry-picked. We had to sink a couple of hours into getting the project running at all, and with this act now, I don't feel like donating any more of our time. Best of luck to you with it all.

Hi ZimbiX,
Thanks for sharing your feelings! I'm totally agree with you on all what you just mentioned. This is my first big project since a while and this is my first open-source project.
I'll revert all my related changes in the project and will cherry-pick your commits.
So I want to apologize for my rude actions.
I hope that in the future, I'll act better and I can see more PRs and/or issue reports/requests from you and your colleagues.
All the best and all your effort,
Adam

source: gharchive/pull-request

authors: ZimbiX bankyadam

repo: bankyadam/not-so-bigquery


text:
账户认证失败

问题描述
配置海尔智家账户认证失败，已确认用户名及密码正确无误。
环境信息:
Home Assistant 2023.9.3
Supervisor 2023.09.2
Operating System 10.4
前端版本： 20230911.0 - latest
设备信息
若是设备无法识别或控制错误则此项必填。
以下信息开启debug模式后可在Device Info部分的日志中找到。日志可在配置 > 系统 > 日志 > 加载完整日志中查看。
Logger: custom_components.haier.config_flow
Source: custom_components/haier/config_flow.py:33
Integration: Haier ([documentation](https://github.com/banto6/haier), [issues](https://github.com/banto6/haier/issues))
First occurred: 20:47:16 (3 occurrences)
Last logged: 20:58:16

bad_credentials

错误日志

see https://github.com/banto6/haier/issues/58


text:
关于最新版本BUG(已确定存在) 使用queryWrapper查询select指定枚举属性和typeHandler的属性 它们值为NULL的问题!!!

当前使用版本(必填,否则不予处理)
3.3.2
该问题是如何引起的？(确定最新版也有问题再提!!!)
在service中使用lambdaQuery().select(XXX)出现的问题.枚举值和typeHandler类型处理的字段值都为NULL
重现步骤(如果有就写完整)
实体的字段:
//枚举字段
private PointTypeEnum pointType;
//数据库存的是varchar的一串数字, 是毫秒时间戳, 通过typeHandler将它的值转成LocalDateTime
@TableField(value = "ctime", typeHandler = BigintToDateTimeTypeHandler.class, fill = FieldFill.INSERT)
private LocalDateTime createTime;
service的操作:
lambdaQuery()
.select(PointRecord::getUserId,PointRecord::getPointType,PointRecord::getCreateTime)
.page(page);
问题描述:
service中查询如果指定select字段查询, 那么枚举类型的值为NULL,  有typeHandler的字段也为NULL  并且没有走进类型处理器里(打断点没进去),    但是去掉select, 也就是查全部字段, 枚举类型的值就有了  typeHandler的处理器也会进去
报错信息
数据为空 null

那你看执行的sql呢

执行的SQL是正常的 没啥问题

我是指两种sql的select时指定的字段

正常service的操作:
lambdaQuery()
.page(page);
不正常service的操作:
lambdaQuery()
.select(PointRecord::getUserId,PointRecord::getPointType,PointRecord::getCreateTime)
.page(page);

也就是说 不能使用.select() 去指定字段去查询   只能不写.select(),查全部字段就正常

是执行的sql！！！

SELECT user_id,ptype AS pointType,begin_points,points,end_points,ctime AS createTime FROM hhz_point_record  DESC LIMIT 0,10

没明白你要看执行的sql有啥用的  因为这个原因很明显是执行完sql之后没走处理  这个sql在数据库执行 都是有数据的
也就是枚举类型的字段值是1     typeHandler字段的值是1595655196481     在service中执行完返回的page的records列表数据中的枚举类型是null   typeHandler字段值也是null

不明白你就知道一定是没走处理了？把你两种方式的select的sql都发一下

正常service的操作:
lambdaQuery()
.page(page);
执行sql语句:
SELECT * FROM hhz_point_record DESC LIMIT 0,10
不正常service的操作:
lambdaQuery()
.select(PointRecord::getUserId,PointRecord::getPointType,PointRecord::getCreateTime)
.page(page);
执行sql语句:
SELECT user_id,ptype AS pointType,begin_points,points,end_points,ctime AS createTime FROM hhz_point_record DESC LIMIT 0,10

我打断点测试过  service中lambdaQuery如果指定select查询字段  确实不会走进处理器

用 3.3.3.7-SNAPSHOT,仓库: https://oss.sonatype.org/content/repositories/snapshots/

好的 测试可以了

启动报错
nested exception is java.lang.NoClassDefFoundError: net/sf/jsqlparser/expression/Function

这个快照版本
PaginationInnerInterceptor文件缺少net.sf.jsqlparser包
启动项目报错:
Factory method 'mybatisPlusInterceptor' threw exception; nested exception is java.lang.NoClassDefFoundError: net/sf/jsqlparser/expression/Function

检查 jsqlparser 版本冲突

并没有什么冲突的

用maven helper查看只有mybatis-plus-core中有依赖关系

extension 是依赖 core的, https://gitee.com/baomidou/mybatis-plus-samples/blob/master/mybatis-plus-sample-pagination/src/test/java/com/baomidou/mybatisplus/samples/pagination/PaginationTest.java

是啊 那现在是什么原因呢?

没找到有冲突的jar

我换回3.3.2版本是正常的net.sf.jsqlparser包
换回你说的快照版本就不行 启动报错
PaginationInnerInterceptor文件缺少net.sf.jsqlparser包是报红的 未引入

@miemieYaho 确认遇到类似问题，QueryWrapper在select()指定字段(包含枚举)的时候，枚举转换器他不工作。

@VeChar 你升级版本就行 最新3.3.3.7-SNAPSHOT是可以的 这个3.3.3应该正式版应该还没发布

@VeChar 你升级版本就行 最新3.3.3.7-SNAPSHOT是可以的 这个3.3.3应该正式版应该还没发布

好的，谢谢。

@miemieYaho 这个问题解决了 但是我发现主键ID又是NULL了  主键ID使用了@TableId("XX")  这样会导致查出来的ID为NULL

用 3.3.3.8-SNAPSHOT

3.4.2 同问

authors: VeChar abc136609517 miemieYaho sabrinawen

repo: baomidou/mybatis-plus

license_source: bigquery


text:
mybatis plus现在支持sybase 分页吗

当前使用版本(必填,否则不予处理)
3.4.3
该问题是如何引起的？(确定最新版也有问题再提!!!)
重现步骤(如果有就写完整)
报错信息

这里面标记的都支持 https://github.com/baomidou/mybatis-plus/blob/3.0/mybatis-plus-annotation/src/main/java/com/baomidou/mybatisplus/annotation/DbType.java

authors: huanfion qmdx


text:
Create Mozafar6611

Mozi65

@Mozafar2024
Bro WTH


text:
Update onboarding.md

What changed? Why?

Fixed the Privy home url
added some links to relevant docs and repos

Notes to reviewers
How has it been tested?

Review Error for wbnns @ 2023-12-01 19:55:22 UTC
User cannot review their own commit

authors: cb-heimdall sternhenri

repo: base-org/web


text:
Call request_fields with the current request

Prefer yielding the controller's request object over evaluating the Proc in the controller context, which seems broad and unnecessary.

/cc @anoldguy

repo: basecamp/rackstash


text:
Return 500 error codes on user error.

Please see the tech spec for the full details on this project.
Summary
Return 500 error when there's an error in the user's code. This has the following effect:

For errors in the user's predict function, the status code that comes back from the model pod will now be 500, instead of 200, as it is today. This won't have any user-facing implications until beefeater is changed. The content is the same
Errors in pre- and post- process are now handled exactly the same as predict. Previously, exceptions were bubbling through the whole stack, and stacktraces are very hard to read.
No changes for streaming trusses

Testing
Wrote integration tests, and checked the logs:
@squidarth ➜ /workspaces/truss/examples/truss-public-gh-repo-test (main) $ docker logs 1e0eb9181cc1
{"asctime": "2023-08-11 01:14:10,484", "levelname": "INFO", "message": "starting uvicorn with 1 workers"}
{"asctime": "2023-08-11 01:14:10,518", "levelname": "INFO", "message": "Executing model.load()..."}
{"asctime": "2023-08-11 01:14:10,518", "levelname": "INFO", "message": "Application startup complete."}
{"asctime": "2023-08-11 01:14:10,527", "levelname": "INFO", "message": "Completed model.load() execution in 9 ms"}
{"asctime": "2023-08-11 01:14:11,642", "levelname": "ERROR", "message": "Exception while running predict", "exc_info": "Traceback (most recent call last):\n  File \"/app/model_wrapper.py\", line 377, in inner\n    func(*args, **kwargs)\n  File \"/app/model/model.py\", line 7, in postprocess\n    raise ValueError(\"error\")\nValueError: error"}
{"asctime": "2023-08-11 01:14:11,644", "levelname": "INFO", "message": "172.17.0.1:33876 - \"POST /v1/models/model%3Apredict HTTP/1.1\" 500"}

Looks good in general but I don't think we should return the stacktrace. Let's chat about it at standup.

Cool -- I'm happy to remove it

@bolasim re: exception handling, I really wanted to wrap the whole predict route (including preprocess & postprocess), so we don't have to repeat this code all over the place.
I also should add tests for the async cases which I realize aren't handled here.

My main worry is still the traceback here. Up to you and @pankajroark. Happy to approve if you think it's best to return the stacktrace, but I think we should just log it and return a classic 500

yeah, let's remove the stacktrace, will do that here

@bolasim  this is worth another look

authors: bolasim squidarth

repo: basetenlabs/truss


text:
Fix /explore/clusters/$cluster/nodes/$node endpoint

The /explore/clusters/$cluster/nodes/$node endpoint is currently broken, just returns a 404.
curl localhost:9000/explore/clusters/default/nodes
{
    "links": {
        "self": "/explore/clusters/default/nodes"
    },
    "nodes": [
        {
            "id": "riak@127.0.0.1"
        }
    ]
}

but
curl localhost:9000/explore/clusters/default/nodes/riak@127.0.0.1
404 Not Found

The /config endpoint for that node works, though:
curl localhost:9000/explore/clusters/default/nodes/riak@127.0.0.1/config
200 OK, long effective config json

I wonder if what I added for the config endpoint broke this.  I'll look into it.
Definite motivation for the integration tests I've started working on today. :)

Hahaha, yea, I was just thinking that, re integration tests :)

authors: dmitrizagidulin travisbhartwell


text:
Implement a 'forget bucket type' API endpoint (dev mode only)

Currently, Riak does not allow users to clear/remove Bucket Types in any way (via command-line or API).
The reasoning is understandable -- if a bucket type was to be removed from the cluster metadata, all of the buckets and keys that "live" under it would be orphaned, and would no longer be accessible.
However, this is also very annoying while in development mode (or when testing anything related to bucket types) -- bucket types get created, and then stay forever. (Unless you completely clear and re-build the cluster).
How difficult would it be to implement an API call to "forget"/remove a bucket type from cluster metadata, while in Dev mode?
This operation would have several levels of safeguards:

It would only be available in dev mode, as mentioned.
On the GUI-side, pressing the 'Forget Bucket Type' button would pop up a warning, saying "Performing this operation is going to orphan all of the data that belongs to this bucket type -- all the buckets and keys under it will become inaccessible."
Optionally, we can leverage our convenience devmode-only "Delete Bucket" method (that performs batch deletes of all the keys in a bucket's key list cache) to actually clear out all the data from a bucket type before erasing it from metadata.

I don't see a problem with utilizing the list buckets, then delete each bucket, then adding a bucket-type to an "ignore" or "tombstone" list that would just filter it from the results when listing types.

That's a great idea (the delete list). Although it would only affect people looking at the bucket type list through the Explorer interface, but hey, that's still a huge win.
I'll see if I can make sense of the Riak cluster metadata system that stores the bucket types. to see what's involved.

authors: dmitrizagidulin drewkerrigan


text:
creation of datetime objects in riak ts record sets should be optional [JIRA: CLIENTS-832]

When returning record sets from Riak TS queries, the client automatically converts [Riak TS timestamps] (https://github.com/basho/riak-python-client/blob/ce5901fdde37efa2d3f576ac895b63457fe9a025/riak/transports/pbc/codec.py#L749) into datetime objects and vice versa.
For many applications where Python is an intermediate layer, converting into a datetime is not required.
Additionally there are some timestamps that do not roundtrip properly.
The first of which is 1001 (code taken from https://github.com/basho/riak-python-client/blob/2.4.2/riak/transports/pbc/codec.py#L86 )
In [69]: d._unix_time_millis(d._datetime_from_unix_time_millis(1001))
Out[69]: 1000

It would be nice if the conversion to datetime objects as optional.

What version of Python are you using? I found that some versions have a bug that prevent correct conversion:
https://github.com/basho/riak-python-client#riak-ts-timeseries

All on OSX (10.10.5), I can repro the 1001 case using non-system Python versions
Python 2.7.11
Python 3.5.1
PyPy 5.0.1 (2.7.10 compatible)

import datetime

epoch = datetime.datetime.utcfromtimestamp(0)

def _unix_time_millis(dt):
    td = dt - epoch
    return int(td.total_seconds() * 1000.0)

def _datetime_from_unix_time_millis(ut):
    return datetime.datetime.utcfromtimestamp(ut / 1000.0)

print("1001",_unix_time_millis(_datetime_from_unix_time_millis(1001)))

That's just super, thanks Python. I'll figure out a place to put in that option, unless you have suggestions.

Yes, love hate. Python has never done a great job of insulating the underlying platform away. I don't know of a good place to put the option. That is the conundrum.
for an interface how about
client = RiakClient(transport_opts = { 'ts_datetime_conversion' : False })

how that makes it down to codec.py I am not sure.

Great, that's exactly what I was thinking. Do you think it should "convert by default"?

I would prefer if the client did not convert by default.

Some folks might want to use  Arrow
In my case, conversion is unnecessary and a little wasteful as the middle tier service can use the raw timestamps just fine.

Thoughts from other Python Riak TS users?

I'm pretty sure I can fix the conversion by using Decimal objects, since float is the devil's type.
@rcgenova - what do you think?

That code passes both python2 and python3 on my machine. Not that it matters much but it fails on pypy
(x.env) basho:riak-ts-client-time-bug basho$ pypy test1.py
Traceback (most recent call last):
  File "test1.py", line 25, in <module>
    dt_1001 = datetime_from_unix_time_millis(1001)
  File "test1.py", line 21, in datetime_from_unix_time_millis
    rv = datetime.datetime.utcfromtimestamp(d)
  File "/usr/local/Cellar/pypy/5.0.1/libexec/lib_pypy/datetime.py", line 1472, in utcfromtimestamp
    return cls._from_timestamp(_time.gmtime, t, None)
  File "/usr/local/Cellar/pypy/5.0.1/libexec/lib_pypy/datetime.py", line 1479, in _from_timestamp
    us = _round(frac * 1e6)
TypeError: unsupported operand type(s) for *: 'Decimal' and 'float'

+1 to returning epoch millis by default (i.e., not converting)

@seanjensengrey - can you try this on pypy?
import datetime
import decimal
import platform

is_cpython = platform.python_implementation() == 'CPython'
epoch = datetime.datetime.utcfromtimestamp(0)

def unix_time_millis(dt):
    td = dt - epoch
    # print('unix_time_millis td: {}'.format(td))
    ts = td.seconds
    tm = td.microseconds // 1000
    # print('td.seconds: {} td.milliseconds: {}, types: {} {}'.format(ts, tm, type(ts), type(tm)))
    rv = decimal.Decimal((ts * 1000) + tm)
    # print('unix_time_millis rv: {} type: {}'.format(rv, type(rv)))
    return rv

def datetime_from_unix_time_millis(ut):
    # print('datetime_from_unix_time_millis ut: {} type ut: {}'.format(ut, type(ut)))
    d = decimal.Decimal(ut) / 1000
    #print('ut / 1000: {} type: {}'.format(d, type(d)))
    if is_cpython:
        rv = datetime.datetime.utcfromtimestamp(d)
    else:
        rv = datetime.datetime.utcfromtimestamp(float(d))
    #print('datetime_from_unix_time_millis rv: {} type rv: {}'.format(rv, type(rv)))
    return rv

dt_1001 = datetime_from_unix_time_millis(1001)
print('dt_1001:', dt_1001)
utm_1001 = unix_time_millis(dt_1001)
print('utm_1001:', utm_1001)

$ pypy test2.py
('dt_1001:', datetime.datetime(1970, 1, 1, 0, 0, 1, 1000))
('utm_1001:', Decimal('1001'))

Excellent

@seanjensengrey - if you don't mind testing this simplified version, that would be great:
import datetime

epoch = datetime.datetime.utcfromtimestamp(0)

def unix_time_millis(dt):
    td = dt - epoch
    ts = td.seconds
    tm = td.microseconds // 1000
    return (ts * 1000) + tm

def datetime_from_unix_time_millis(ut):
    d = ut / 1000
    return datetime.datetime.utcfromtimestamp(d)

dt_1001 = datetime_from_unix_time_millis(1001)
print('dt_1001:', dt_1001)
utm_1001 = unix_time_millis(dt_1001)
print('utm_1001:', utm_1001)

The previous, unsimplified version doesn't exhibit the bug
$ pypy test2.py
('dt_1001:', datetime.datetime(1970, 1, 1, 0, 0, 1, 1000))
('utm_1001:', Decimal('1001'))
(x.env) basho:riak-ts-client-time-bug basho$ python2 test2.py
('dt_1001:', datetime.datetime(1970, 1, 1, 0, 0, 1, 1000))
('utm_1001:', Decimal('1001'))
(x.env) basho:riak-ts-client-time-bug basho$ python3 test3.py
dt_1001: 1970-01-01 00:00:01.001000
utm_1001: 1001

The above simplified version fails on pypy and python2, passes on python3.
$ pypy test3.py
('dt_1001:', datetime.datetime(1970, 1, 1, 0, 0, 1))
('utm_1001:', 1000)
(x.env) basho:riak-ts-client-time-bug basho$ python2 test3.py
('dt_1001:', datetime.datetime(1970, 1, 1, 0, 0, 1))
('utm_1001:', 1000)
(x.env) basho:riak-ts-client-time-bug basho$ python3 test3.py
dt_1001: 1970-01-01 00:00:01.001000
utm_1001: 1001

OK, thanks for checking. I'll figure something out and will make translation optional.

Related to #430

@lukebakken @alexmoore nice feature. will the riak-java-client get the same?
(cc @srgg)

@mdigan the Java client only converts Date / Calendar objects to Long timestamp values to be stored in Riak TS, it does not convert the other direction for you when data is retrieved from Riak TS.

thanks for clarifying @lukebakken

There's also a static initializer method that takes a raw timestamp, since the Long ctor is already used by the SInt64 ctor :)
Thanks,
Alex

On Apr 29, 2016, at 4:31 PM, Matt Digan notifications@github.com wrote:
thanks for clarifying @lukebakken
—
You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub

@seanjensengrey - OK final version for datetime conversion, if you have a sec to test in your env:
import datetime

epoch = datetime.datetime.utcfromtimestamp(0)

def unix_time_millis(dt):
    td = dt - epoch
    tdms = ((td.days * 24 * 3600) + td.seconds) * 1000
    ms = td.microseconds // 1000
    return tdms + ms

def datetime_from_unix_time_millis(ut):
    if isinstance(ut, float):
        raise ValueError('unix timestamp must not be a float, \
                it must be total milliseconds since epoch as an integer')
    utms = ut / 1000.0
    return datetime.datetime.utcfromtimestamp(utms)

dt_1001 = datetime_from_unix_time_millis(1001)
print('dt_1001:', dt_1001)
utm_1001 = unix_time_millis(dt_1001)
print('utm_1001:', utm_1001)

Fixed, or closed via GitHub issues.
[posted via JIRA by Alexander Moore]

authors: Basho-JIRA alexmoore lukebakken mdigan rcgenova seanjensengrey

repo: basho/riak-python-client


text:
Brand image is missing

Currently the checks are failing for adaptive lighting, since there's no brand image stored here for it.
adaptive_lighting is not added to https://github.com/home-assistant/brands (more-info: https://hacs.xyz/docs/publish/include#check-brands )

I added a PRs for this:

https://github.com/home-assistant/brands/pull/2727
https://github.com/home-assistant/wheels-custom-integrations/pull/466

Should be fixed now. :)

repo: basnijholt/adaptive-lighting


text:
Synchronize brightness with sun position

I'm not sure if this has been asked before as I couldn't find anything in a search and this is how I assumed adaptive lighting actually worked without really reading the the readme.
Effectively, I would like my lights to turn on to min brightness at sunrise and rise to max brightness at solar noon. Optionally, keeping the lights at min brightness all night or turning them off.
I'm not sure if this "mode" would be better added directly in or if a fork would be preferred.

So I figured out a poor mans way of doing this using some custom helpers, sensors and automations. Note, I have a night time sensor that's basically inverted so I can control my patio lights. I'm also very new to home assistant so excuse me if there is a better way to even do this workaround.
The major problem with this implementation is the lack of override controls as well as the lights not consistently being updated as the automation doesn't seem to run all the time for me.
Custom helpers
input_number.lights_max_brightness
input_number.lights_min_brightness
Custom sensors
- platform: template
  sensors:
    solar_lighting_brightness:
      unit_of_measurement: "%"
      value_template: >
        {{ (states('input_number.lights_max_brightness')|int - states('input_number.lights_min_brightness')|int) * (max(0, min(100, states('sensor.adaptive_lighting_sun_position')|float)) / 100) + states('input_number.lights_min_brightness')|int }}

- platform: template
  sensors:
    solar_lighting_brightness_night:
      unit_of_measurement: "%"
      value_template: >
        {{ (states('input_number.lights_max_brightness')|int - states('input_number.lights_min_brightness')|int) * (max(0, min(0, (states('sensor.adaptive_lighting_sun_position')|float) * -1)) / 100) + states('input_number.lights_min_brightness')|int }}

Day Time Automation
alias: Solar Light Brightness
description: ''
trigger:
  - platform: state
    entity_id: sensor.solar_lighting_brightness
condition: []
action:
  - service: light.turn_on
    data:
      brightness_pct: '{{ states(''sensor.solar_lighting_brightness'')|float }}'
    target:
      device_id:
        - xxx
        - yyy
mode: single

Night Time Automation
alias: Solar Light Brightness Night
description: ''
trigger:
  - platform: state
    entity_id: sensor.solar_lighting_brightness_night
condition:
  - condition: sun
    before: sunrise
    after: sunrise
    before_offset: '3599'
    after_offset: '2599'
action:
  - service: light.turn_on
    data:
      brightness_pct: '{{ states(''sensor.solar_lighting_brightness_night'')|float }}'
    target:
      device_id:
        - zzz
mode: single

I really like this idea of having two different curves...one for daytime and one for nighttime, that can be adjusted. Adaptive lighting currently only has one curve input: the circadian rhythm sun curve, but it is not really adaptable or modified by the user.

I'd also love to see this. I have a few rooms in my house where the natural light is very good and during the daytime I essentially don't need light but in the evening I'd like the light value to be at 100%. Essentially I'd love to see an option that does 100 - $StandardAdaptiveBrightnessValue and sends that brightness value to the light instead.

@bnason Can you implement this yourself by swapping the positions of sunrise_time and sunset_time? Once #443 is implemented you should be able to do this with automations/scripts.


text:
Fix #19 RuntimeError with dict key deletion

Could also be fixed by this equivalent:
    for k in list(config):
        if k in self._internal_only:
            del config[k]

Might fix #18 as well, with a change in the support matrix.

repo: batisteo/djangocodemirror


text:
feat: sets pdd badge

Closes #24

Codecov Report

Merging #25 (aeec06d) into master (0fcbb5b) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff            @@
##             master     #25   +/-   ##
========================================
  Coverage      7.81%   7.81%
  Complexity        3       3
========================================
  Files            13      13
  Lines           128     128
  Branches          2       2
========================================
  Hits             10      10
  Misses          118     118

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 0fcbb5b...aeec06d. Read the comment docs.

@rultor merge

@rultor merge

@baudoliver7 OK, I'll try to merge now. You can check the progress of the merge here

@rultor merge

@baudoliver7 Done! FYI, the full log is here (took me 2min)

authors: baudoliver7 codecov-commenter rultor


text:
Improve CI

At the moment, there are no implementations that enforce continuous integration. Some things which come to mind are:

[x] Protect the main branch - no merging straight into main
[x] Lint checks
[ ] Automated testing
[ ] Build automation

Some of what has been mentioned can and should be implemented later as the project matures, but there are definitely things that should be put into place now.

Probably best to leave the remaining tasks either unresolved or for later as to not overengineer this relatively small project


text:
Add support for xcconfigs that use conditions & default values

This... isn't ideal. But given the inability to infinite loop or recurse in starlark, we need to generate boilerplate to evaluate these expressions.
The trickiest bit of this PR is the tracking over whether any user values have been used for a particular xcconfig -- we do this tracking to ensure that we don't blindly add in Xcode's defaults (i.e. if a user passes in an empty xcconfig, no copts will be added).
This allows using a much broader range of xcconfig options, such as those that are used only inside conditions for other options.

One question though... does this mean we are somewhat loosely tied to an Xcode release now? Since we are checking in the generated files...

We already were checking in a generated file, now we're checking in a second


text:
scala_repl takes common_attrs but never does any compilation

scala_repl takes common_attrs, which includes a bunch of stuff like srcs, deps, resources, etc. but only looks at deps and runtime_deps. There is no invocation of _lib or _scala_binary_common to actually compile the sources.
I can think of two paths I can think of depending on what do you think scala_repl should be:

scala_repl only takes deps and runtime_deps (where both are treated as runtime deps) as things to load into the resulting REPL environment.
scala_repl uses _scala_binary_common to actually do a compile of those sources similar to how scala_binary and scala_test can compile sources.

it might be nice to have some scratch code to do some testing with, so option 2 might be nice. Although, you can also solve the problem with an additional library target.

I'll try unifying with scala_binary_common.
It also would avoid having to change common_attrs while still allowing scala_repl to use it.

authors: johnynek sdtwigg


text:
ts_web_test needs a way to bootstrap with TypeScript file(s)

Currently, if you include a ts_library in the bootstrap of a ts_web_test, the d.ts is delivered to the browser, which does nothing. If the ts_library is added to the deps, the file is included in the karma manifest, but never imported by anything, so the module "side effects" never happen.
The workaround is to ensure that any file you want to run like this ends with spec so that it gets included along with the rest of the tests. This convention is pretty non-obvious, so having a more explicit API would improve ergonomics.

I thought we determined that the ts_library could still be in the bootstrap, so long as the name ends with spec. Did you have to add it to deps as well?

It has to go in deps and end in spec. Bootstrap always gets the d.ts

authors: alexeagle jelbourn


text:
Update Documentation

@simonsinclair spotted that documentation for the 'Output Configuration' variables was incorrect/missing.

Looks good to me. :+1: :+1:

Looks good, @shaunbent.

Cheers guys! :smile:

authors: azizur shaunbent simonsinclair

repo: bbc/gel-typography

license: mit


text:
Including ngtcp2 as Submodule

Is it possible to include ngtcp2 as submodule? I think that will make installation and using the application much simpler.

Given that nghq no longer relies on ngtcp2, I'm going to close this old issue.

authors: rafee samhurst

repo: bbc/nghq


text:
ayuda para la traduccion de summer clover al español

quiero traducir summer clover a español pero no puedo

Read the readme carefully.

where is??

where is??

You're not a child, right?
because this tool is not for children and no one will spoon-feed you
If you haven't seen it yet, here's the guide:
https://github.com/bbepis/XUnity.AutoTranslator/blob/master/README.md
there, the authors explain everything about how to connect the translator and what is needed for this
From what I see in your screenshot, the option you are using works with a 50% chance. You need either
Bepinex loader
or
Melon Loader
Read the instructions!

lo llegaste a solucionar?

disculpa pudiste encontrar una solucion?

Well I tried everything and it's not working.
I tried with Reipatcher, BepInEx and MelonLoader.
With Reipatcher, the tools doesn't create the translation files.
With BepInEx, the tool don't create the config files after the first run.
But in this case I assume this game use IL2CPP, so I used the BepInEx 6 in the bleeding edge page. When I use this version, the game doesn't even start (if I delete the BepInEx files, it works again). I tried several builds, including the 704, which the readme say is the more recent working with the current autotraslation tool (5.4.0). Neither of this works.
With MelonLoader, the problem is the same as BepInEx, the game doesn't even start. I also tried several builds, auto and manual.
So, I run out of ideas.
All I wrote is only for info.
The problem is not the autoranslation tools, but MelonLoader or BepInEx, which are not compatible at this moment with the game.

The game is clearly using mono not il2cpp, you probably messed up the install by using wrong patchers. Reinstall the game and use the correct version of BepInEx5 for the bitness of the game, together with BepInEx5 AutoTranslator.

I already tried the mono version. The il2cpp was just a last attempt.
I used a clean install with every version.
With BepInEx, the tool don't create the config files after the first run.

Probably you picked the wrong bitness version then.

I picked the 64bits version. Just in case I tried with de 32bits too, with the same problem.
And Melon Loader auto install also detect the game as an 64 bits application.
And also I tried all of this in a fresh install windows environment in another PC just in case.

pudieron traducirlo ?? ayudaaaaa

Se pudo?


text:
View Debugging in Xcode 6

推荐理由：超酷的Xcode6中DEBUG View方法
原文链接：http://www.raywenderlich.com/98356/view-debugging-in-xcode-6

@bboyfeiyu 认领

authors: Lollypo bboyfeiyu

repo: bboyfeiyu/iOS-tech-frontier


text:
scatter42: columnar-staggeredのズレの量を検討する

小指の運指をもっと楽にしたい。

小指は人差し指よりも0.5u分くらい短いので、それに伴い、小指列を下げる必要がありそう

同時に親指も検討の余地あり？
相対的に中指と人差し指・薬指の間は1/8u下げて、薬指と小指の間は3/8u下げるとかでもいいかも。そうすれば外形デザインは変えなくても良さそう

相対的にしか変わらないのは微妙な気もする。。。もう少し打鍵しながら様子を見てみる。。。

repo: bbrfkr/keyboards


text:
Run Lumpy structural variant calling within BCBio with prior evidence BED/VCF file.

Hi,
The Lumpy paper mentions that it's possible to feed "prior knowledge" about SV's to Lumpy to increase sensitivity.
https://genomebiology.biomedcentral.com/articles/10.1186/gb-2014-15-6-r84
Is is possible to run Lumpy from within BCBio with a prior evidence BED file or VCF file?
On our test data Lumpy currently misses some known deletion SV's that we would like to have called and typed over a small cohort of a couple of hundred samples.
Running Lumpy together with CNVKit would be another option, but I am afraid the computational cost of running CNVKit on a couple of hundred WGS samples is too high. Therefore it would be nice to have Lumpy working with the prior evidence signal, so that CNVKit only needs to be run on a few samples for discovery and Lumpy can be used for typing those SV's on larger cohorts.
I looked in the bcbio SV calling documentation but I did not see a generic option for providing a prior evidence BED/VCF file.
http://bcbio-nextgen.readthedocs.io/en/latest/contents/configuration.html#structural-variant-calling
Thank you.

Neill -- thanks for the suggestion. We don't have a way to provide a prior evidence file for Lumpy right now, but could include this. Right now we support CNVkit as evidence to Lumpy, as you mention, but no generic mechanism. Thanks again for starting this discussion.

Hi Brad. Thank you for considering adding this feature.
I still need to test running with Lumpy with CNVKit to see what the actual compute cost is and if it solves the missing deletion.
In the end we would like to have 1 VCF with the called structural variants, even if multiple SV calling tools are used.
Do I understand it correctly that only CNVKit is currently passed on to Lumpy?
Manta SV calls are for instance not passed on to Lumpy.
On our data Lumpy is much more sensitivity than Manta for all types of known SVs, except that Manta is more sensitive for known insertions.  So it would be nice if all or just the insertion calls of Manta can be passed on to Lumpy.
Another question that I have is if MetaSV is still part of bcbio? It is not mentioned in the SV calling documentation but can be found in the code.
http://bcbio-nextgen.readthedocs.io/en/latest/contents/configuration.html#structural-variant-calling
https://github.com/chapmanb/bcbio-nextgen/blob/master/bcbio/structural/metasv.py
MetaSV can do something similar to Lumpy, aggregate SV and type SV calls from different SV callers? Has MetaSV been replaced by Lumpy?
Thank you.

Neill;
Thanks for the questions, you're right we only pass CNVkit calls to Lumpy. I'd have a lot of interest in your evaluation of if this is worthwhile. It entails a run cost since CNVkit needs to run before Lumpy, rather than in parallel, and we've not yet evaluated how much it helps resolve missing calls. If it helps we could look at incorporating other callers, but it's a pretty big time investment to re-work and test so would like to make sure it seems worthwhile.
Practically we've had good luck calling with multiple callers and using a prioritization-based approach to look at these together, rather than trying to merge into a single VCF:
http://biorxiv.org/content/early/2016/11/04/084640
http://bcbio-nextgen.readthedocs.io/en/latest/contents/configuration.html#structural-variant-calling
metasv may still work in bcbio but we've not used it recently so removed it from the documentation. It provided some benefit but was slow and required work to maintain so we switched over to the prioritization based approach which in our hands did a better job of identifying useful variants.
On the SV side our current focus is on trying out linked read technologies to 10x to see if they help with resolution of events. We're hoping this, or long reads like PacBio or Oxford Nanopore, might help with resolving better truth sets to be able to further explore short-read only algorithms. Hope this helps.

Hi Brad,  I'll let you know if including CNVKit fixes the missing deletion call and what I think about the run time.
I am also not sure if passing the VCF's from other callers on to Lumpy is worth the effort.
Thank you for the link and the paper, I will check them out.
We are also interested in the use of synthetic and actual long read technology for more sensitive and specific SV discovery.
That also fits with this feature request, it would be nice if the SV's discovered with long read tech can be typed on larger cohorts with short read data and callers.

Closing this out as its old and seems like the discussion has run its course. Thanks everyone!

authors: NeillGibson chapmanb roryk

repo: bcbio/bcbio-nextgen


text:
Option for enabling vt decompose on any snp pipeline?

Hi guys,
Just wondering if there is a way to switch on "vt decompose" on a snp pipeline (without enabling the ensembl calling) ? I noticed when I was still running the ensemble caller the final VCF file was decomposed using vt however once I removed the ensemble calling the pipeline no longer runs the function. Is it possible to include this as an optional flag to ensure all vcfs are always decomposed?
Thanks!

Hi @waemm,
Sure, that's a good request!

authors: roryk waemm


text:
Kids v2: Front page UI core

This includes:

[ ] Page fetching and card style
[x] Settings and search button
[x] Adaptive iPad/iOS
[x] Forced landscape

Does not include reward flames
Does not include games and navbar

blocked by #265, waiting for the playlist type

repo: bcc-code/bcc-media-app


text:
BC error with this PBES2 PKCS12 file

When BC has higher priority than SUN there is an error when reading a PBES2 PKCS12 file:
# use BCPKCS12
java -cp ../lib/bcprov-jdk18on-172.jar -Djava.security.properties=../lib/java.security.test sun.security.tools.keytool.Main \
-list -keystore testks.p12 -storepass changeit -storetype BCPKCS12

Keystore type: BCPKCS12
Keystore provider: BC

Your keystore contains 1 entry

naverglobalrootcertificationauthority, 30 Nov 2022, trustedCertEntry,
Certificate fingerprint (SHA-256): 88:F4:38:DC:F8:FF:D1:FA:8F:42:91:15:FF:E5:F8:2A:E1:E0:6E:0C:70:C3:75:FA:AD:71:7B:34:A4:9E:72:65
keytool error: java.io.IOException: keystore password was incorrect

# use PKCS12
java -cp ../lib/bcprov-jdk18on-172.jar -Djava.security.properties=../lib/java.security.test sun.security.tools.keytool.Main \
-list -keystore testks.p12 -storepass changeit

keytool error: java.io.IOException: keystore password was incorrect

# java.security.test
security.provider.1=sun.security.provider.Sun
security.provider.2=org.bouncycastle.jce.provider.BouncyCastleProvider
security.provider.3=sun.security.rsa.SunRsaSign
security.provider.4=sun.security.ec.SunEC
security.provider.5=com.sun.net.ssl.internal.ssl.Provider
security.provider.6=com.sun.crypto.provider.SunJCE
security.provider.7=sun.security.jgss.SunProvider
security.provider.8=com.sun.security.sasl.Provider
security.provider.9=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.10=sun.security.smartcardio.SunPCSC
security.provider.11=sun.security.pkcs11.SunPKCS11 ${java.home}/lib/security/nss.cfg

[UPDATE] SunJCE / BC have different behaviour wrt PBEParameterSpec, and SunJSSE is hardcoded to expect SunJCE.
testks.zip

OpenSSL info
$ openssl pkcs12 -in testks.p12 -passin pass:changeit  -info -noout
MAC: sha256, Iteration 10003
MAC length: 32, salt length: 20
PKCS7 Encrypted data: PBES2, PBKDF2, AES-256-CBC, Iteration 10002, PRF hmacWithSHA256
Certificate bag

I have narrowed the issue down to this in PBES2:
The SunJSSE PCKS12 Provider explicitly uses a string like "PBEWithHmacSHA256AndAES_256" to instantiate the Cipher.
Since this is not implemented by BC the provider is SunJCE... however the SecretKeyFactory of BC and Sun generate a different intermediate PBE key:

BC has done the (add zero byte at the end) + UTF-16BE encoding of the passphrase
SunJCE uses the password raw

// SunJCE / BC return different values here
private SecretKey getPBEKey(char[] password) throws IOException {
        SecretKey skey = null;

        try {
            PBEKeySpec keySpec = new PBEKeySpec(password);
            SecretKeyFactory skFac = SecretKeyFactory.getInstance("PBE");
            System.out.println(String.format("skFac provider = %s", skFac.getProvider()));
            skey = skFac.generateSecret(keySpec);
            keySpec.clearPassword();
        } catch (Exception e) {
            throw new IOException("getSecretKey failed: " + e.getMessage(), e);
        }
        return skey;
    }

TL;DR: don't mix SunJSSE with BC has SunJSSE has certain hardcoded behaviour expecting SunJCE.

repo: bcgit/bc-java


text:
Special History - Change history for Project Proponent

As a user
I want change the history of Proponents on the project
so that I can track it
Acceptance Criteria
Scenario 1:
GIVEN Project Tab within List Management is open
WHEN I click on any Project's Name
THEN I see the modal window with the following changes to the fields:

Name greyed out with the lock symbol to the right
Proponent dropdown greyed out with the lock symbol to the right

Screenshot for Scenario 1:
Private Zenhub Image
Scenario 2:
GIVEN Project Edit Modal Window is open
WHEN I click the Lock button next to the Proponent dropdown
THEN lock button changes to unlock button
THEN the Proponent History modal opens with the following information:

'Proponent History' title
Explanation text - 'Update the Proponent of this Project. Click this link for detailed instructions.'
'+ New Entry' button (primary)
Table with the fields: Proponent Name (dropdown list), From (date picker), To (date picker OR 'Today' for the last entry) and Actions (edit button by default)
THEN all other fields on the modal window
are greyed out

Screenshot for Scenario 2:
Private Zenhub Image
Private Zenhub Image
Scenario 3:
GIVEN The Modal window with Proponent History is open
WHEN I click on 'Cancel' button
THEN The modal windown closes as no changes have been made

corresponding icons:
lock - locked - Private Zenhub Image
lock - unlocked - Private Zenhub Image
edit button - default - Private Zenhub Image
edit button - on hover - Private Zenhub Image

Hey team! Please add your planning poker estimate with Zenhub @jadmsaadaot @saravanpa-aot @TomChapmanGov

Please add your planning poker estimate with Zenhub @dinesh-aot

I think this has been done by @salabh-aot here https://app.zenhub.com/workspaces/epictrack-63891ea941d309001fa292cf/issues/gh/bcgov/epic.track/1359

authors: Connor1892 jadmsaadaot maria-kuzmenko


text:
#1692 - Ministry overaward part 1

Ministry overaward part 1

[x] Create ministry API to get overaward balance

[x]  Create ministry API to get overawards for a student

[x] Create ministry API to add manual overaward deduction

[x] Created test cases for all the APIs created

[x] Migration to modify the values of disbursement overaward origin types to match UI and removed Pending award cancelled

Great job. Left a comment.

On the comment, it still must return promise because it is an async method.

repo: bcgov/SIMS


text:
Disable GH pages for OCA Explorer

The settings for the GH pages need to be disabled for the OCA Explorer on this repo. This needs admin privileges.

Disabled.

authors: amanji swcurran

repo: bcgov/aries-oca-bundles


text:
Manage AWS Security Review of AWS ECF Prod ProServe Engagement

Describe the issue
AWS Proserve will require access to AWS ECF Prod in order to study the configuration and repeat the security review from 2020.
Additional context
Add any other context, attachments or screenshots
Definition of done

Organize kickoff with ProServe and minimal CPF team members
Provide ProServe the access they need
Manage the scope to keep ProServe focused on MVP

Kickoff booked, agenda set

repo: bcgov/cloud-pathfinder


text:
CTHUB - backend tests for upload script

Describe the task
Write unit tests for the upload scripts in CTHUB.
Purpose
This is the core functionality of CTHUB and currently there aren't any tests for it.
Acceptance Criteria

[ ] Test for wrong cell types
[ ] Test for missing columns
[ ] Test for missing worksheet
[ ] Test for wrong number of rows for headers
[ ] Test for user doesn't have permission

Additional context

Hey team! Please add your planning poker estimate with Zenhub @emi-hi @JulianForeman @tim738745

authors: emi-hi kcabhar

repo: bcgov/cthub


text:
Amalgamate Central and Business Team Keycloak group and Ministrys Mapped

Description
In September, the business team Ministries (LBR, JER, MMA, TAC, TRA, TIC) will be merged into the Central Team's Portfolio.
The Business team will no longer exist, and will fall under the Central Team.
Timing for this change should occur at the same time as the change in the organization, or shortly thereafter. Expected date for the change is September 12th
Dependencies
Are there any dependencies?
DOD

[x] Amalgamate Ministry mapping for Business Team Ministries to move to Central Team
[x] Migrate Business Team users to Central Team
[x] Delete/Remove Business Team as a user group

@lmullane - created this task so we don't lose sight of this ahead of the org change.
cc: @KaraBeach @arielleandrews

Works as expected - thank you @divyav-aot

repo: bcgov/foi-flow


text:
Revert "Merge pull request #196 from bcgov/dev-AA-20"

This reverts commit 9088760c47b05ec88ca101987bd9584c1315753b, reversing
changes made to fa230b4e8e763890bfbd76f440214cf85100b459.
Looks like the above reverts broke OpenShift build.

This is no longer needed, Divya knew fix to dev branch.  Closing w/o merging.


text:
DESENG-502: Upgrading flask version

Issue #: https://apps.itsm.gov.bc.ca/jira/browse/DESENG-502
Description of changes:

Upgrading flask version to 2.2.5 for met api

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of the met-public license (Apache 2.0).

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Comparison is base (75687cd) 71.25% compared to head (cd5cdc4) 71.25%.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #2389   +/-   ##
=======================================
  Coverage   71.25%   71.25%
=======================================
  Files         509      509
  Lines       17074    17074
  Branches     1289     1289
=======================================
  Hits        12166    12166
  Misses       4669     4669
  Partials      239      239

Flag
Coverage Δ

metapi
85.00% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

authors: VineetBala-AOT codecov-commenter

repo: bcgov/met-public


text:
[L] Public - Hold Timer exit or time out

Description:
As a park visitor, when I try to navigate away from the DUP booking page with a timer, I see a warning so that I know my pass hold will be lost when I leave the page.
Mural link reference of workflow/notes: https://app.mural.co/t/dds5274/m/dds5274/1702399466586/47a2e83a2dc605bac12a96c89a02bdcafcfa3932?wid=0-1712264093757
Acceptance Criteria:
ARE YOU SURE
Given that I am a parks visitor
When I am on the registration page (Contact Information) and I exit or click back mid-way
Then I see a warning message that tells me my hold pass will no longer be held when I leave.
Given that I am a parks visitor
When I am on the registration page (Contact Information) and I refresh the page
Then I see a warning message that tells me my hold pass will no longer be held when I leave.
Note: Not sure if this is what we decided for Refreshing the page. Might have a different thing for Mobile view since the pull down from the top automatically refreshes
TIME'S UP
Given that I am a parks visitor
When I am on the registration page (Contact Information) and I don't complete the form within the time limit
Then I see a message that the timer has run out and my pass has been put back into the booking pool and I need to try and make a new booking.
Development Checklist:

[x] Warning message displayed upon:

[x] user canceling mid-way because they no longer want the pass
[x] user clicks the back button

[x] Note: browser back button takes them back to the home page

[x] If timer times out before user clicks submit the will be sent back to the parks select a pass type page, item being held will return to inventory, a notice will display telling them they were not successful in booking their pass in the allotted time and have lost their pass

[x] text will display - You have not completed your booking within the time allowed, please try again.

[x] they will be returned to the parks select a pass page

[x] if user is successful booking a pass within the allotted time they will be taken to the check out screen and pass is removed from bookable inventory

Figma link: https://www.figma.com/file/2lQW8InOa0lEiUiMeGmeNC/Day-Use-Pass?type=design&node-id=4077%3A6877&mode=design&t=YbmeWNjWNn9tCaMc-1

[x] If user refreshed page during timed session, timer will be cancelled, user will be sent back to parks select a pass page, item being held will be returned to inventory
[x] if user click back button during timed session, a warning will display, if user selects OK they will be returned to the parks select a pass type page, timer will be cancelled and item being held will return to inventory
[x] if user click back in browser during a timed session,  a warning will display, if user selects OK they will be returned to the parks select a pass type page, timer will be cancelled and item being held will return to inventory
[x] Text will display - If you leave this page, you will lose any passes currently being held for you. Are you sure you want to leave?

Figma link: https://www.figma.com/file/2lQW8InOa0lEiUiMeGmeNC/Day-Use-Pass?type=design&node-id=4077%3A7280&mode=design&t=YbmeWNjWNn9tCaMc-1
Dependencies

Blocked by
Blocking

Wireframe(s):
Workflows:
Definition of Ready (Note: If any of these points are not applicable, mark N/A)

[ ] User story is included
[ ] User role and type are identified
[ ] Acceptance criteria are included
[ ] Wireframes are included
[ ] Design / Solution is accepted by Product Owner
[ ] Dependencies are identified (technical, business, regulatory/policy)
[ ] Story has been estimated (under 13 pts)

Definition of Done

In progress:

[ ] Acceptance criteria are tested (Functionality meets the acceptance criteria defined in the ticket)
[ ] UI meets accessibility requirements
[ ] Unit tests are written
[ ] Work is traceable in GitHub
[ ] PR linked to ticket number
[ ] If needed/required - Dev adds flag/label to highlight any migration steps necessary prior to PROD deployment

Code review:

[ ] Code is peer reviewed and has passed CI/CD tests

QA:

[ ] Acceptance criteria are tested (Functionality meets the acceptance criteria defined in the ticket)
[ ] Code is potentially shippable to the production environment
[ ] Functional features have been tested and passed by QA
[ ] UI components tested by designer
[ ] Code is deployed to PROD when moved to 'done' column (unless requested otherwise by PO)

PO Review:

[ ] Acceptance criteria are tested (Functionality meets the acceptance criteria defined in the ticket)
[ ] Reviewed and approved by Product Owner

Notes:

Tested on TEST: Pending

verified that when I click the back option from the Contact information page, I get an alert with the error message "If you leave this page, you will lose any passes currently being held for you. Are you sure you want to leave?".
Verified if I use the browser back option to navigate away from the Contact Information page, I get an alert with the error "If you leave this page, you will lose any passes currently being held for you. Are you sure you want to leave?".
Verified when the user runs out of the time allocated, an alert is displayed to let the user know about it.
Refer to the issues below

I don't get the alert with the confirmation message "If you leave this page, you will lose any passes currently being held for you. Are you sure you want to leave?" when I refresh the page while being on the Contact Information page.

The user message displayed when I try to navigate away from the booking page shows quotations -> Figma has no quotes beside the alert message.
Figma:

Test environment:

The timer starts from 7:12 instead of 7 minutes. if the system clock isn't set to update automatically resulting extra time for some users.

https://github.com/bcgov/parks-reso-public/assets/65190263/b6c3249d-d44e-44ff-a84c-66bfb9699214

When a booking process is cancelled during the 7 minute window, the passes won't revert back to the pool, instead it is held in the background even after user releases them from the booking process.

https://github.com/bcgov/parks-reso-public/assets/65190263/17a2ac74-28e6-4807-8058-68134c49d656

@manuji @meyerdarcie @Dianadec I can answer these:

I don't get the alert with the confirmation message "If you leave this page, you will lose any passes currently being held for you. Are you sure you want to leave?" when I refresh the page while being on the Contact Information page.

Based on what I can find, JavaScript doesn't allow you to change the prompt text when you are performing a navigation away from somewhere within your current site, so whether you type in a new url, close the window, or reload the page, the browser thinks you are navigating away from (and back to) the current site. In these cases the browser has default text that displays, such as 'Changes you have made will not be saved".
Alternatively, when you click 'back', the browser recognizes that the previous page also belongs to the same website, so we are able to intercept that navigation with an Angular guard and display the custom text in that scenario.
TL;DR: this issue isn't impossible to fix but it would require significantly more effort than it's worth to solve (custom guard logic, custom modals, etc).
https://stackoverflow.com/questions/3221161/how-to-pop-up-an-alert-box-when-the-browsers-refresh-button-is-clicked

The user message displayed when I try to navigate away from the booking page shows quotations -> Figma has no quotes beside the alert message.

Again, a browser limitaion. JavaScript alert() may show the text in quotations based on the browser.

The timer starts from 7:12 instead of 7 minutes. if the system clock isn't set to update automatically resulting extra time for some users.

This has been solved - a user can manually set their system time (and by extension their browser) any time. It doesn't change our timeouts, which are synced to UTC. The pass will expire at the correct time whether the front end correctly displays the time or not. If the user has manually set their system clock, that is not something we can control.

When a booking process is cancelled during the 7 minute window, the passes won't revert back to the pool, instead it is held in the background even after user releases them from the booking process.

This is functioning as intended. To prevent slamming our API, we don't listen for events where the user leaves the page or otherwise does not book a pass. Rather, every time a user tries to book a pass, the total number of available passes is decremented. If the pass is not booked, there is a cronjob that looks for expired passes and returns them to the pool. The cron runs about every 10 minutes (I think), so the longest a pass will exist in a state where it needs to be returned to the pool is ~17 minutes, but it will likely be much less than that.
The 17 minute scenario:

(t=0:00) cron fires, returns unclaimed passes to the pool. (t=0:00)
(t=3:03) 3 minutes and a few seconds later, someone puts a pass in the hold timer and then immediately navigates away, losing the held pass. At this point, the pass cannot be booked by anyone.
(t=10:00) 10 minutes after the first cron fires, the cron fires again and returns unclaimed passes to the pool. The pass that was booked in the previous step is not included in the collection of unclaimed passes because the JWT it was held with has not yet hit its 7m expiry.
(t=10:03) a few seconds later, the held pass JWT hits the 7m expiry.
(t=20:00) the cron fires a third time, this time as the held pass is expired, it is returned to the pool. At this point the pass can now be booked again.

@cameronpettit , thank for the detailed explanations, but the 4th issue gives false information to the users. Assume we only have 4 passes remaining and someone try to book 3 passes but then cancels it (won't put back right away to the pool), then the another person comes in and try to book the reming pass and he completes the booking process, to the other users who are looking for a pass will show the user message as "Full" even the facility is not fully booked.
FYI @JLWade  any thoughts about this? In my opinion, I would like to get this fixed so we don't show false information to a user at any point.

Sounds like the pass will be put back into the pool once that 7m timer runs out on it, is that correct? Or does the cancellation action put it back into the pool faster?
@meyerdarcie what do you think?

The design intentionally requires 7 minutes to reinstate a pass. This was deliberated in several meetings, highlighting the reasons we cannot rely on the front-end to reinstate passes. Beyond the 'happy path', we must also take security considerations into account.

I will leave this ticket in QA until a decision is made. Thank everyone!

Thanks @manuji and @cameronpettit - based on the security considerations that @marklise mentions, as well as confirmation that this feature is working as designed, let's move this forward. We can keep close eyes on it with ParkInfo to ensure we're not getting any related feedback from users.

Thank you @meyerdarcie , this ticket is ready for PO review.

Working as intended - moving to done.

authors: Dianadec JLWade cameronpettit manuji marklise meyerdarcie

repo: bcgov/parks-reso-public


text:
Add programming languages icons

This also adds a new REST APIs section with (for now) rest.Bitcoin.com and GetBlock.io

'm not sure if C:\ Is the best icon for terminal

Yes, definitely. I am not using Windows myself, but that was the only decent icons I found on ICONS8. I'll try something else.

@emergent-reasons CLI icon updated, let me know if you prefer this ;)

@emergent-reasons CLI icon updated, let me know if you prefer this ;)

Noice.


text:
Freezes in MacOS

Sometimes ctop is freeing when I stop a container from ctop TUI. I use last version of ctop in last version of MacOS.

I have some problem

authors: alexpts egorgam

repo: bcicen/ctop


text:
Cache file generator auto delete

My ci application on development enviroment dont create cache file.
On production auto generator cache file and can't delete.
Can i set this to generate with another permition and auto destroy;;

This is a bug tracker, please ask your questions on our forums instead.

repo: bcit-ci/CodeIgniter


text:
Session_database_driver reading in query WHERE condition

Seems to be a possible regression for issue #4373 in 3.1.10/3.1.11
I have attempted to migrate to database session this evening and am intermittently receiving below error on XHR calls.

A Database Error Occurred
Error Number: 1054Unknown column 'name' in 'where clause'UPDATE `ci_sessions` SET `timestamp` = 1585573353, `data` = '[Omitted Session Data]'
WHERE (`name` LIKE '%%' OR `number` LIKE '%%') AND `type` IN (21,22,23,24,25) AND `corp` = '90'
AND `id` = 'cgf2sr8akmucvetcs5sn4kupvhpni28u'Filename: libraries/Session/drivers/Session_database_driver.phpLine Number: 261

Was running 3.1.10, but tested the same on 3.1.11 also.
The additional WHERE argument is used in the XHR query immediately before the one that returns the above error.

The session library doesn't generate these WHERE conditions and #4373 has nothing to do with sessions ... Whatever the issue is, it's your own doing.

Sorry it was regression of #4374, I made a typo.
If you read my OP again, you will see that I mentioned the WHERE argument comes from the query immediately before the session query, and it is clearly the Session_database_driver throwing this error by using the additional WHERE arguments from the previous query.

#4374 is a 3.0.3 issue fixed in 3.0.4 ... If there was a regression there it would've been noticed in the 4 years since that patch, but even double checking it now - a regression is impossible.

So the issue turned out to be query caching on previous queries affecting the session query.
While we could ensure to flush the cache after every function that calls it, adding into the Session_database_driver would act as a safeguard.
To ensure this, I added $this->_db->flush_cache(); to Session_database_driver.php under $this->_db->reset_query();

I see ... that's a problem number 546841231844651651 caused by that query caching feature. I'll get rid of it the first chance I have, you shouldn't rely on it.

authors: mrjemson narfbg


text:
Added STRAIGHT_JOIN and NATURAL JOIN types

supported the STRAIGHT_JOIN and NATURAL JOIN of mysql join types.

Sorry, we don't accept MySQL-only extensions like STRAIGHT_JOIN.
We could accept NATURAL, but it won't really work with your patch (there's an extra space where you check for it) and it is incomplete - you can prefix any type of join with the NATURAL keyword, it's not a stand-alone type.

authors: jvyyuie narfbg


text:
normalize compoer.json

Normalize composer.json using ergebnis/composer-normalize

Why do this? What's the benefit?

sorted and neater so it's easy to read

Yeah, no ... this is just moving things around, a change for the sake of change.


text:
Getting the following error suddenly  - Error: Command failed: convert: not authorized

Hello,
Suddenly from yesterday I am getting the below error, I have a scenario in which I add watermark on the image and upload its 4 different version on S3. The watermark image is also on s3 and its public.
Any help will be appreciated.
{ [Error: Command failed: convert: not authorized //static.spotboye.com/images/watermark_updated/thumbnail/exclusiveL.png' @ error/constitute.c/ReadImage/454. convert: no images defined /tmp/tmp-8716GKhghGfSkb7n.jpg' @ error/convert.c/ConvertImageCommand/3046.
] killed: false, code: 1, signal: null }
Thanks

@kumarkrati 👋 hey! I haven't touched this project in a few years (I should add a deprecate notice to the README).
Are you still bumping into this issue, I'd happily land a patch if you find a fix.

authors: bcoe kumarkrati

repo: bcoe/thumbd


text:
Switch to JS-based which command

Version 3.0.1 of which is the latest that supports Node 14. Version 4 requires Node 16 and version 5 requires Node 18. So I'm sticking with 3.0.1 to avoid bumping the engines range in this PR.
which is built and maintained by npm: https://github.com/npm/node-which
And is tested across multiple environments: https://github.com/npm/node-which/blob/b8d11c791296a3baf44703352619621215189b0e/.github/workflows/ci.yml#L54-L65
Fixes #153

Sorry for the delay, thanks for fixing this.

authors: bcomnes voxpelli


text:
🛑 Zingst is down

In 9a9559d, Zingst (https://www.zingst.de) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Zingst is back up in dcbbd18.

repo: bdrops-GmbH/upptime


text:
アバターのルートが Editor Onlyな場合にプラグインのほとんどの処理でMissing Reference Exceptionが発生する

アバターのルートが Editor Only な物がある際に Play モードに入るとRemove EditorOnly Objectsパスでアバター本体が削除される影響で、Missing Reference Exceptionが発生します。
アバターのルートが Editor Only の場合はプラグインの処理しないなどを行なって欲しいです。
実際のエラー https://gist.github.com/eai04191/57bcd407c20e702099b3aafc22d43a68

triage: https://github.com/bdunderscore/ndmf/blob/d86e1b5aae64f03c91fa340074478c26fb50e3d9/Runtime/ApplyOnPlayGlobalActivator.cs#L122-L126
この辺りでEditorOnlyのチェックを行う必要がある?

チェックを入れてエラーを起こすのがベストですが、1.5.0には間に合わないので1.5.1に回します。

もしくはルートのEditorOnlyを外すとか。

authors: Sayamame-beans anatawa12 bdunderscore

repo: bdunderscore/ndmf


text:
Replace workspaces with a bidirectional syncing folder (WIP)

One of the chief UX struggles has been finding a tool which lets developers build Dat sites while simultaneously controlling what they publish.
Anything written to a Dat can be downloaded by other users. Since dev involves making lots of little changes, we didn't want to pollute the history with each change.
Old solution
The "staging area" and "workspaces" were an attempt to solve that. They created a sort of draft version. The draft version would read directly from a folder, giving the user the chance to do their dev-work. Then, when ready, the user could publish to the dat.
This worked okay, but it had a problem once other apps started writing to dats with the DatArchive API. Basically it forced other apps to be aware of the draft. Sometimes this meant doing extra work, like writing commit() after a set of writes, which was a pain. Other times the app wanted access to the draft, but didn't have enough tools to handle them well. It felt like both the "staging area" and "workspaces" were inviting too much complexity.
Re-approaching the problem
We stepped back and decided to write out our requirements:

Users need a draft version to do their development
Users need to control what's in the final "published" version
Apps sometimes need to write/read the draft version
Apps sometimes need to ignore the draft version and write directly to the "published" version. (Related: sometimes a draft version isnt needed.)
Users sometimes want automatic bidirectional sync of dats to a folder, whether they're working on it or just saving/viewing their data.
Users sometimes want to share their draft versions with other users

New solution
With these requirements in mind, we came up with a new idea which this PR starts. This is the "syncing folder" approach. It works like this:

Get rid of workspaces and the staging area.
Every dat can have a "syncing folder." UX-wise this will be similar to setting the workspace folder; you do it in the library during a new dat's setup.
The syncing folder will bi-directionally sync the dat with its folder. The user can change the files and the changes will automatically publish.

This new solution solves requirements 1, 3, 5, and 6, but it needs a solution for handling the "published" version. To do that:

Dats will be able to diff and merge between each other.
The user will be able to set a dat as the "publish target" of another dat.
As a result, the user will get a diffing UI that's similar to the current workspaces UI, but it will be from the "draft dat" to the "published dat" instead of from a workspace folder to the published dat.
(Possibly) there will be metadata indicating when a dat is a draft or the publish target.

This new approach will hopefully eliminate a lot of the complexity. It's dats all the way down. Users can easily setup the automatic bidrectional sync. The publish target is then an optional extra step. When apps want to differentiate between where they're publishing, they just have the user tell them which dat to write to (the draft or the published version). Hopefully this will be much clearer to users as a result.
This PR will only include the syncing folder. The publish target controls need a little more thought, and so we'll handle them in a subsequent PR.

Important note --
This update creates a new DB field for the syncing folder and does not try to migrate over your old paths.
... kind of sucks but it was the only safe path, since the behaviors are changed from workspaces.

This PR also introduces a "default .datignore" setting so that you can prepopulate the datignore on all your projects. (Important to help us avoid accidentally publishing node_modules all the time.)

👍 We're moving forward with this

This PR also introduces a "default .datignore" setting so that you can prepopulate the datignore on all your projects. (Important to help us avoid accidentally publishing node_modules all the time.)

Might also be an idea to include those OS specific files, like .DS_Store or Thumbs.db, that we will always want to avoid publishing. Though this might be better done with a global datignore

@pfrazee Heads up, I tried this out and it seems that if you sync with an existing folder, some of the files in that folder can be inexplicably wiped out. I think it might be that the contents of a folder that does not yet exist in the dat are wiped. I'll try to reproduce later.

Dats will be able to diff and merge between each other.
The user will be able to set a dat as the "publish target" of another dat.
As a result, the user will get a diffing UI that's similar to the current workspaces UI, but it will be from the "draft dat" to the "published dat" instead of from a workspace folder to the published dat.
(Possibly) there will be metadata indicating when a dat is a draft or the publish target.

For a draft dat the user should be able to set a "publication target", any linking back from the "published" dat to a "draft" must be private. When we get multi-writer support this provides a hint on where we look for changes that need reflecting back into our draft, via the diffing UI.
Having metadata to indicate a draft dat, together with something in the UI to help prevent it being inadvertently shared would be nice. That is not to say, with multi-writer support, that having the draft on multiple devices should not be possible.
It would be desirable to support having a more restrictive .datignore on the published dat. An example might be to prevent sharing notes, or files associated with an editing/development environment, that we want to keep with the "draft" dat.

@webdesserts huh ok I'll beef up my automated tests around this. I ran a fair amount of tests myself; sorry that I missed some cases.
@paul90 good thoughts. Agree about the draft dat staying private and having UI help. Differing .datignores would make sense.

authors: paul90 pfrazee webdesserts

repo: beakerbrowser/beaker


text:
⚠ Beamable Announcements (Object) has degraded performance

In cf5eedc, Beamable Announcements (Object) (https://api.beamable.com/object/announcements/platform/docs) experienced degraded performance:

HTTP code: 503
Response time: 12793 ms

Resolved: Beamable Announcements (Object) performance has improved in 17be315 after 11 minutes.

repo: beamable/status