text:
Project funding and growth

this project is a huge effort of huge importance. it depends on the heroic efforts of one person for now. and everybody knows: men pass, institutions remain. save for unlikely regulation changes in the EU, this low key project might now be the one chance the world has to have a free but usable mobile platform in its future.
and unfortunately, things have been looking grim for a long while now. (#420, #752, etc.) i've come to believe that this project will fail unless an institution seriously backs and funds it, and AFAIK little if any work has been done on this front.
i imagine mavin would like getting competitively payed for his time on this project, and might like to devote more to it then. he might like leading a couple of professional, talented, hand picked devs working by his side instead of working in solitude. but he might not like politics and working for funding; yet he might benefit enormously from it.
but why would someone do something one doesn't like for a hobby? this might be why marvin hasn't seriously tried -i think- getting funding so far. and i also think this is obvious: if marvin has to do too much stuff he dislikes, he'll quit.
as it stands: 1) the project is hugely important for online freedom. 2) the project is in danger because it depends on the will and availability of a single person, marvin. 3) marvin is unlikely to fix  # 2 by himself.
so can we help?
yes, marvin might not like strings attached to some offers of help, and it's absolutely his project. but nonetheless i say let's try getting the offers first. and strings? we'll cross that bridge when we get there (or actually, marvin would).
to market this project, we ourselves have to have a clear idea of its value. what is it? google has been proprietarizing Android for years and has been hugely successful. today it's hard to participate in online life without carrying a PC around and having google exclusively controlling your devices. some of us find that totally unacceptable and pay the price of rooting and become superuser of our devices too. the key word here being "too": yes, we control our devices, but so does google.
this was an utterly unthinkable situation 10 years ago: you can't use your computer unless you have a remote root account for some USA company in there available at all times.
even if you trust google not to do evil, would you trust the USA gov? what would it take for the DoJ to ask google to remotely hack your phone and download a copy of your decrypted signal/telegram/whatsapp local message database just because google can? would they do it? have they done it?
having google and indirectly the USA gov as an always connected, all accessing superuser in our computing devices is a huge problem for the world that seems to go largely unnoticed. and the options? apple? ok, switch bullcrap for cow crap.
i don't mind running google's proprietary software; i just don't want google to be root. that's microg's value for me. for others its value is different: maybe Richard Stallman would hate me for thinking this way. but if it was up to me, this is how i would sell microg.
who'd be likely interested in backing this?
we can compile a list and try to contact everyone on it, see how it goes. i'll start with a few names.
these two tried and failed to compete with Android:

Mozilla Foundation with Firefox OS
Canonical with Ubuntu Touch

whatever moved them to create those projects might move them to back microg.

Mark Shuttleworth: maybe Ubuntu doesn't want microg, but this man might throw some bucks at it anyway.

FSF, EFF, etc: all free software-related foundations might be interested in helping microg, but unfortunately their budgets are often limited. still worth trying, they might hook us up with something.

governments: the EU, as well as many non-USA friendly governments might be interested in helping. even the USA gov itself might.

phone vendors: vendors producing Android phones cannot bundle microg without breaching contract. and even Tizen is gone. but that doesn't mean they don't want to help, maybe though some foundation, because...

all of Google enemies are our potential friends: this even includes Apple, Microsoft, Samsung, etc, and of course the killer of the list...

Amazon! they have no contract blocking them from bundling microg on their platforms. but they don't need to! they can just ready their platform for it and let us publish it on Amazon market. or at least the bits that interact with google's services. how much is a fully functional microg worth to Amazon?

google is making headway
google is advancing technologies that will further block competition. everyone here knows what safety net is all about: blocking competing platforms. it requires opt-in by app developer.
here's another of their gimmicks: app bundles. marketed as a way to ease app deployment and improve user experience, and also requiring dev opt-in, the technology is really about devs surrendering their signing keys to google. everything that this technology claims to do can be done without such a bold requirement. but what this technology achieves without stating it is inhibiting sideloading and blocking competing markets. and how long before google starts to inject their code inside all apps? what about their code failing unless running on a googlephone rendering in-the-wild apps unusable for "compatible" android platforms?
devs won't realize about these issues and will fall into google's traps unless there is a real userbase having these issues. and when enough apps are poisoned, the world won't be able to make a free android anymore; we need degoogleized androd devices in the wild ASAP.
so what now?
hopefully some of us will feel bold enough to reach out to some of the entities on this post. and please also add more names you can think of. the value of this project is huge, but i think that the entities that would benefit from it are unaware of its existence.
thanks!

I'm not sure if funding is the real issue here. Of course it would be awesome if this project had some funding to motivate talented developers (especially marvin) to work on this project.
But currently this project also has a really bad bus factor. Currently, when marvin is not available to work on this project, there is no progress at all.
I'd thus suggest to slowly introduce new team members, maybe with initially very limited capabilities.
For example, in my opinion, @ale5000-git has been very helpful with managing issues in the past. To tackle the ever growing list of open issues, I'd propose to give him at least rights to manage (close, tag, ...) issues.
Likewise @Nanolx has been managing a quite successful fork for a while and @voidstarstar has been making some good code contributions recently. While I'd understand if marvin would not want to allow them to commit code without his review for now, I'd still suggest to add them as project members and encourage them to review pull-requests, request changes etc (and of course open their own pull-requests), thus further reducing the work for marvin. Eventually it would of course be great if there was at least a second developer with commit rights. GitHub nowadays also allows settings that would require e.g. approval of at least two team members before a pull request can be merged.

you are right on spot when you mention bus factor. and also right on this aspect of funding: paying marvin will not improve it.
and although all of your suggestions merit review, this issue is not about them. (i also think those were more or less argued before elsewhere without much action resulting from it, but that's irrelevant here.)
here is what this issue is about: finding an entity with some $$$ that will consider microg to be a strategic project for them and is willing to invest. this would result at least in some project manager's job to include keeping an eye on microg with the aim of making it survive independently of marvin's involvement. this would entail having at least someone else on the project who marvin would have to trust and train to replace him, even if marvin is boss.
this would probably involve marvin interviewing some pre-selected candidates and finding someone he thinks has enough reversing and programming experience for the job and with whom he thinks he'd enjoy working. this person would probably start with some feature: investigating, reversing, reporting, planning and coding it, with help from marvin. then, if it feels right to marvin, he'd start training them to the rest of the code base. with some luck, the project would have two marvins after a while, or more. think about how Firefox does not depend on any one dev: mozilla knows how to achieve that, and if they think microg would be valuable to them, they can easily pull it off again.
you could shuffle commit rights around, etc, and that could help a lot. but i'll quote myself on what this particular issue is about:

i've come to believe that this project will fail unless an institution seriously backs and funds it

Ultimately it's Marvin's project, so we should make sure to respect whatever decision he makes.  Developing and maintaining an open source project can be time consuming, thankless, and exhausting, so it may not just be a funding issue.  It's also worth mentioning that he set up Bountysource for the project, but this obviously would not compare to the resources that a large organization could potentially bring.
If you're goal is to attract more developers, I can try to give some insight as to my motivations.  My (relatively small) contributions so far tend to fall into at least one of three categories:

Personal Interest - I worked on features that I personally wanted to use.  Dogfooding tends to be quite common for developers and aligns with selfish incentives.
Utilitarian - I tried to find issues that would help the most people (e.g. related to GCM push notifications) for the least amount of effort to maximize the value my time can provide to the community.  This includes issues with apps or android versions that I don't personally use, but I know will still benefit many users.
Bounties - I worked on a couple issues with a bounty (which I haven't yet actually claimed).  It's typically "beer money" (below a minimum wage if you calculate the hours worked), but every bit helps.  If I earn enough, I might be able to buy new phones to make testing easier.

It's also important to note that while I consider myself proficient with Java, I would consider myself a beginner with Android development and mostly clueless when it comes to the protocols that are reverse engineered.

phone vendors: vendors producing Android phones cannot bundle microg without breaching contract.

There are also tons of generic tablets from companies that may not want to or be able to get certified by Google to run Play Services.
Also something that is probably overlooked is that as this project becomes bigger and starts making noise, Google will undoubtedly take notice and may even want to shut it down.  If a large organization funds this project, then it will probably be necessary to make more serious efforts toward an independent push service.  There are some open source alternatives that exist (and some discussions about a possible microG version), but so far none have really become widely used.

Thanks for all your comments.
To make it short: microG is well funded.

Donations cover all operational costs (servers, etc)
I currently receive funding through a grant of PrototypeFund (German government) to work on microG.
Several organizations have in the past supported my development of microG and I am certain there will be funding for the time after PrototypeFund as well.
Additionally, some organizations also announced willingness to financially support additional contributors, for example in form of a paid summer internship. Unfortunately there haven't been any good candidates for such funding yet. (Please let me know if you think you are one)

The reason why from time to time I am off of working on microG is not financial, I am just not that kind of person to work all time on a single project.
I totally understand there is an issue with me being the only person managing the main code repositories, especially as it means there is huge delays from time to time when I am working on something else. While I very much like the contributions of "outside contributors" into microG, I don't feel very comfortable yet with any of them committing to the main repository without further review.
Also I think that many outside contributors struggle to do their first commit, so any feedback on possible reasons for that would be super helpful for longterm success (for example I considered reorganizing the code base so that it becomes easier to grasp).
PS: I am currently working on a full rewrite of the maps implementation to finally solve all the issues around it (with apps for public transport, car/bike sharing, taxi, ...)

Thanks for all your comments.
To make it short: microG is well funded.
Donations cover all operational costs (servers, etc)
I currently receive funding through a grant of PrototypeFund (German government) to work on microG.
Several organizations have in the past supported my development of microG and I am certain there will be funding for the time after PrototypeFund as well.
Additionally, some organizations also announced willingness to financially support additional contributors, for example in form of a paid summer internship. Unfortunately there haven't been any good candidates for such funding yet. (Please let me know if you think you are one)
The reason why from time to time I am off of working on microG is not financial, I am just not that kind of person to work all time on a single project.
I totally understand there is an issue with me being the only person managing the main code repositories, especially as it means there is huge delays from time to time when I am working on something else. While I very much like the contributions of "outside contributors" into microG, I don't feel very comfortable yet with any of them committing to the main repository without further review.
Also I think that many outside contributors struggle to do their first commit, so any feedback on possible reasons for that would be super helpful for longterm success (for example I considered reorganizing the code base so that it becomes easier to grasp).
PS: I am currently working on a full rewrite of the maps implementation to finally solve all the issues around it (with apps for public transport, car/bike sharing, taxi, ...)

Maybe Patreon? Many people will support it monthly and for android developer, maybe some big people from xda will.

I agree with voidstarstar on this. The original microg is Marvins project and it is his decision to decide what to do with it.
That said, I can't see a setup in which the style of Marvin would work with a backed, structured setup.
To have a strong supporter/additional developers and a goal of microg (e.g. cover certain API functionality within certain timeframe), the project needs management. This will require constant attention, responsiveness and decisions. The "on and off" style Marvin prefers is suited for developing as part of a group when someone manages and balances this, but not as the centerpiece steering it as a bigger project.
Out of my view, if anyone thinks about that "funding and growth" setup, you would need Marvin to give up control of microg or move it to a fork.
This is by no means an accusation or negative part towards Marvin. He is free to do and handle things as he wants to. Certain ideas and goals might just require different prerequisites.

@mar-v-in

Also I think that many outside contributors struggle to do their first commit, so any feedback on possible reasons for that would be super helpful for longterm success (for example I considered reorganizing the code base so that it becomes easier to grasp).

For me personally, a large hurdle was (and still is) the lack of documentation.  I think the code is actually well written, but like many projects, it lacks enough comments/Javadoc.  This project is also somewhat unique in that it could greatly benefit from documentation of any gathered knowledge on the reverse engineered protocols.
For example, in #737 I think I narrowed down the problem to this delete flag, but I don't fully understand what it does, so I would not feel comfortable changing it blindly.  It was clearly added for a reason, but I can only infer what that reason is.

@benyaminl

Maybe Patreon? Many people will support it monthly and for android developer, maybe some big people from xda will.

That might help attract new developers, but it sounds like it may not be the main issue:

To make it short: microG is well funded.

The reason why from time to time I am off of working on microG is not financial, I am just not that kind of person to work all time on a single project.

I might add to @voidstarstar that not just the developer, but also the user related information is scattered around and the Wiki here is pretty much outdated and installation instructions kinda incomplete Nougat-onwards.
For example in @ale5000-git microG unofficial installer thread over at XDA my NanoDroid thread over at XDA, signature spoofing XDA thread, official microG XDA thread and several others (either from specific users like Oswald Boelke or device specifc threads like modded stock ROMs with microG support)...
I've compiled a list of known issues and fixes/work-arounds at the NanoDroid documentation#issues, as a starting point.
It's not better for signature spoofing, Tingle, Haystack, LOS for microG, pre-patched ROMs, vdexextractor, smali/baksmali...
A mid-term project I had in mind for a few weeks now is to find one or two others and update the wiki here, turning it into the first place to look for information AND finding it.
snip
Many issues reported here are either duplicates of pre-existing ones or already fixed but still open. Unless I'm mistaken you can grant someone the ability to close or modify (read: adding tags/label to, change titles to be more descriptive) issues, without granting un-reviewed commits? If so I'd be willing to do some clean-up in the issues section (got a few days off from 26.04 - 01.05.). Related and likely useful #639

I plan to document some functions/workaround, it will be in the project microG unofficial installer (but available directly online) and it will cover many microG related things.

this thread has morphed into something off-topic of my first post. we are again discussing how best to help marvin and that is great, just not in the context of this thread.

some organizations also announced willingness to financially support additional contributors, for example in form of a paid summer internship. Unfortunately there haven't been any good candidates for such funding yet. (Please let me know if you think you are one)

The reason why from time to time I am off of working on microG is not financial, I am just not that kind of person to work all time on a single project.

that is exactly the point. this project seems to require more time than you are willing to put in it, for whatever reason. it needs more time, put in by whoever. you are probably already putting more time that you'd like to into this project, but you want the results (and not necessarily the tediousness of 90% of the work). wouldn't you like to manage a team of one or two hand picked programmers who are paid, maybe part-time, to follow your command on this project? "reverse this service and tell me how it works", "try making a prototype clean room implementation of it, structure it sort of in this way". some entity could pay for those guys. or they could share some employees part time on your project. some entity could find candidates in your area for you to interview. and they could pay you for all the hours you put in.

I can't see a setup in which the style of Marvin would work with a backed, structured setup.
To have a strong supporter/additional developers and a goal of microg (e.g. cover certain API functionality within certain timeframe), the project needs management. This will require constant attention, responsiveness and decisions. The "on and off" style Marvin prefers is suited for developing as part of a group when someone manages and balances this, but not as the centerpiece steering it as a bigger project.

and some entity could provide a part time project manager, who would still be under marvin's command.
my point is that: 1) all projects eventually die, but this one could live much longer with a serious backer. 2) a serious backer might be found (see the list in my first post to begin with) if we look for it, because this project is REALLY important.

as this project becomes bigger and starts making noise, Google will undoubtedly take notice and may even want to shut it down.

i couldn't care less. in fact, that would be the definition of this project's success. i'd like google to keep on crossing the line of anticompetitive practices: NDA contract for play store to lock in device manufacturers, safetynet to lock out competing devices, app bundles to lock out competing stores, closing down cloud messaging to lock out competing app stacks, etc. Android is perfectly capable of having a play store as a non-privileged regular app. i want the EU to force google to end all this crap and make them offer the play store as a regular app for any device, for free or the same price to use if it comes pre-installed in phones. want them to split the play store into a company separate from that which develops android. the more crap Google keeps on doing the better now, because they are waaaay past any reasonable line.

There are also tons of generic tablets from companies that may not want to or be able to get certified by Google to run Play Services.

it's not that easy. the contract goog makes OEM sign have them transitively apply the restrictions on manufacturing partners. if Foxconn manufactures for any google-signed OEM, they must say no to every non-signed OEM that wants to contract them. otherwise the breach contract with the signed-in OEM; and also google can go after said OEM (and i think this has happened). and what about supply chain restrictions? i have no idea, but there could be some too.
that's why it was sort of a miracle when Amazon could pull off the first non-google devices. nobody thought they would find chinese manufacturers that weren't under transitive contract.
regarding the tons of generic tablets you mention, i guess most of them probably google could shut down, but they don't care or want to. BTW, i believe none of this crap would withstand serious anti-trust scrutiny.

this thread has morphed into something off-topic of my first post. we are again discussing how best to help marvin and that is great, just not in the context of this thread.

I disagree. Every comment in here was about project funding and growth. I think most of us are just taking a different viewpoints on how growth could look like and how funding could be needed.
I fully follow you in your enthusiasm for microg. I think it is a wonderful project and it would deserve to be something big:
If you look on the smartphone market for a widely available system that you can tinker with, there is only Android. iOS is closed and other alternatives are just marginal. Microg is the only option to live in that - with using as little as possible from google frameworks  but being able to integrate. With Fuchsia coming, it might be even more important to have an independent option. Microg is basically the little gaulish village.
What I tried to say in my post before and now: Jumping from a one person project with part time involvement to a managed project setup with professionally hired participants, management and funding is quite something. With microg only being fully understand by @mar-v-in  himself, you will need him to take part in that transformation (to not start all over).
I don't think that can be ignored if you want to go forward. It is good to have a vision and target, but that also can be quite intimidating if the step is too big. Fundamentally the vision and target needs to be shared by marvin.

To leave the theoretic realm and put something out there to think about for marvin and anyone participating here. Some small practical steps:
Development

Include 2 already known developers (e.g., voidstarstar, nanolx, amills) into the project. Do a few sessions with them running through the existing code, explaining what it is about and where work is needed.
Plan small improvement steps in which the new ones can get comfortable with microg and learn.
marvin support, help and oversee them (and can do his own development parts)
marvin does final commits

I think this is possible, as marvin stated he would be willing to get an intern (above mentioned are probably way more than that) and it would keep control with him.
Issues

Include others to help do support (e.g., voidstarstar, nanolx, ale5000, myself) and sort issues
Timer on all existing issues to retest and update if still relevant, otherwise close and cleanup
Connect with development above to show what is being worked on

This should be possible, as most of us already do support on issues. It would just give us some structured way to sort and clean up
Documentation and ancillary

Create some guideline on what is needed, e.g., API status, documentation updates, installer
Have community wiki the documentation (think that is possible already, but I think no one dares to touch)

As said above, I think this is possible, just some guideline is needed where to work on.
This could be a first low risk, light touch start of growing and creation of structures that probably would be needed for further steps. All without investor search, hiring, contracting, etc. Of course all depending on the individual willingness. But of course it increases the level of responsibility.
Just food for thought

well, i'm not any good at this organizational work you are trying to do here. with this thread i wanted to discuss if there's a chance of some entity the likes of Amazon could do it for us. regarding volunteers, i think marvin needs someone local with whom he can physically meet; that's why employees seem more feasible to me. anyway, if someone can reach some entity that could help, maybe take the plunge.

From reading this thread, it sounds like funding and motivation are not the primary stumbling blocks for this project, but it sounds like there is agreement that structured organizational support could be valuable.
One option I didn't see mentioned above would be joining an umbrella organization like the Apache Foundation (I notice microG is already under the Apache license). An advantage of this approach (as opposed to trying to get a Samsung or an Amazon interested in contributing to MicroG) is that there is already a well-defined path to apply and join, and they would be familiar with the issues faced by scrappy FLOSS software projects.
Thanks again to marvin for producing such a useful piece of software!

@bjmc the problem with larger umbrella organizations is that most of them are at least partially funded by Google. While Google is not actively working against anything microG related, they might not be happy to directly or indirectly fund its development. Even if Google is not against an inclusion of microG in the umbrella org, the umbrella org might see a conflict of interest and a future risk of funding.
I don't know how ASF thinks about this, but I certainly don't want them to be in the position to decide about having Google as a platinum sponsor (>$125k/year) or accepting microG under their umbrella

@mar-v-in That's a good point. On the other hand, Google funds other nominal competitors like Mozilla. I assume a massive company like Google isn't all that concerned about a threat from microG, and I'd be surprised if it was worth the bad PR for them to give ASF a hard time about it. Still, I see your point about not wanting to put a foundation in the position of having to make a difficult choice.
There's also the https://e.foundation/ that has similar goals to microG, and I believe uses microG in their distribution. Certainly, they're not going to be seeking Google sponsorship any time soon! At a bare minimum, it seems like it would be fair to ask them to highlight the contributions of the microG project more prominently in their own marketing.

BTW regarding:

vendors producing Android phones cannot bundle microg without breaching contract

That should be a thing of the past, because of the recent EU anticompetitive/antitrust fine. AFAIK they are not allowed to disallow this, anymore.

That should be a thing of the past, because of the recent EU anticompetitive/antitrust fine. AFAIK they are not allowed to disallow this, anymore.

that's absolutely great. but who does it affect and when? there's an appeal. all the OEMs and their supply chain signed agreements that they wouldn't do forks. if the EU's decision stands the appeals, where is it in force? who does it affect? does it affect a supplier in china with which Google never had direct contact, but which signed a contract in S.Korea with some OEM? if it does, will the supplier go against Samsung or Google and breach contract on the grounds that the contract is illegal... in the EU? even if the supplier would prevail, does it want to embark in an endless legal battle or just keep supplying? is it even possible, does it have the resources?
i imagine it's just as hard today to build an android fork device in this world as it was a year ago.
given that android fork devices are hard to build everywhere due to google's obstruction, and that to market and android fork in the EU you first have to build it somewhere, the EU regulators should make google take legal steps to proactively annul all those contracts they signed or forced entities to sign in order to keep doing business in the EU.
besides that, they should open the play store to access (including paid apps) 1) via a public API or website or 2) via a downloadable play store client that works on any phone. they shouldn't be allowed to force the sale of a product (a googlephone) to sell another (an app) when there is no technical need.
and similarly, safety net shouldn't be allowed as it artificially requires a googlephone. they purportedly market safety net as a data safeguard for users but it ends up being an device lockout mechanism. the EU should force google to 1) make users opt-in to google's "protection" before running remote attestation (spyware) in their devices, and 2) provide users with an opt-out to google's oh so generous protection, meaning that for those users, google will attest what the user chooses to 3rd parties without running any spyware and without alerting 3rd parties of the situation.

BTW, anyway, I also doubt many hardware vendors would even want to ship microG. They rather want to ship their own app stores, think of Amazon or Chinese vendors or so. (and those already do so)

It might be a good idea to open two issues in which we could build a list of what documentation work is needed, one for user-facing documentation, and one for developer-facing documentation. I would open them myself but I've barely interacted with the project, having only become a user a couple months ago. But I agree that the scattershot documentation is very problematic.

Maybe time to consider a proposal with Huawei. Hahaha..
Regards,
Benyamin Limanto
Send via Outlook for Androidhttps://aka.ms/ghei36 from my ASUS Pegasus X005

From: Deutrino notifications@github.com
Sent: Friday, May 24, 2019 6:00:54 AM
To: microg/android_packages_apps_GmsCore
Cc: Benyamin Limanto; Mention
Subject: Re: [microg/android_packages_apps_GmsCore] Project funding and growth (#753)
It might be a good idea to open two issues in which we could build a list of what documentation work is needed, one for user-facing documentation, and one for developer-facing documentation. I would open them myself but I've barely interacted with the project, having only become a user a couple months ago. But I agree that the scattershot documentation is very problematic.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://github.com/microg/android_packages_apps_GmsCore/issues/753?email_source=notifications&email_token=AAVP2NHNVY2JWLFEPGRGPUTPW4O2NA5CNFSM4HFZGU42YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODWDWYUQ#issuecomment-495414354, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AAVP2NDKBFXAQUBEXJIVENTPW4O2NANCNFSM4HFZGU4Q.

Could the new https://github.com/sponsors be an option?

Maybe time to consider a proposal with Huawei. Hahaha.. Regards, Benyamin Limanto Send via Outlook for Androidhttps://aka.ms/ghei36 from my ASUS Pegasus X005
…
________________________________ From: Deutrino notifications@github.com Sent: Friday, May 24, 2019 6:00:54 AM To: microg/android_packages_apps_GmsCore Cc: Benyamin Limanto; Mention Subject: Re: [microg/android_packages_apps_GmsCore] Project funding and growth (#753) It might be a good idea to open two issues in which we could build a list of what documentation work is needed, one for user-facing documentation, and one for developer-facing documentation. I would open them myself but I've barely interacted with the project, having only become a user a couple months ago. But I agree that the scattershot documentation is very problematic. — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub<#753?email_source=notifications&email_token=AAVP2NHNVY2JWLFEPGRGPUTPW4O2NA5CNFSM4HFZGU42YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODWDWYUQ#issuecomment-495414354>, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AAVP2NDKBFXAQUBEXJIVENTPW4O2NANCNFSM4HFZGU4Q.

Is actually not a bad idea but I don't think they will

I second @rugk's question. In particular, I'm donating through BountySource right now and would rather do that through GitHub if it meant that they double the amount.

@rugk @codethief I already joined their waitlist.

Kinda on-topic: congratulions @ale5000-git
(in case someone missed it, he's (I suppose /he/ is correct) now the second member of the microG project)

Additionally, some organizations also announced willingness to financially support additional contributors, for example in form of a paid summer internship. Unfortunately there haven't been any good candidates for such funding yet. (Please let me know if you think you are one)

Maybe we could put up some kind of notice about this on https://microg.org/ or in wiki or in README? Just a thought.

authors: Lanchon MrDodojo Nanolx ale5000-git benyaminl bjmc chris42 codethief deutrino julienschmidt mar-v-in notpushkin rugk voidstarstar


text:
Is the YoutubeDL exec updated when running youtubedl() function or when importing youtube-dl-exec

Title explains it all but is there a seperate function to update the youtubeDL exec. Does it happen everytime the youtubedl() function is called or does it happen when youtube-dl-exec is imported.

Hello,
The library has a postinstall script. It's called every time you perform a npm install and youtube-dl-exec is declared as dependency or devDependency.
The postinstall script will download the latest binary version available 🙂

source: gharchive/issue

repo: microlinkhq/youtube-dl-exec

license: MIT

license_type: permissive

license_source: github-api


text:
Suggest printf usage in README

2 less concatenation operator.

Good call, I'm a fan of these functions :)

Good call, I'm a fan of these functions :)

source: gharchive/pull-request

authors: Kubitomakita szepeviktor

repo: micropackage/filesystem


text:
Add circuitbreaker

Add go-kit circuitbreaker using handy breaker

Fixes #21

Coverage increased (+0.3%) to 71.905% when pulling 03b35f891af2a19589b68d85e2d70461b9c49dbe on add-circuitbreaker into 982de775ed1b04d55898bf34b0f72c5c241d7d4c on master.

authors: coveralls vlal

repo: microservices-demo/payment


text:
Possibility to deploy from selected branches - fix

CI/CD pipline creates packages with modified branch name. Get-Artifacts function also requires this modified name for artifactPattern

Thanks

This fix is now in preview

authors: andrzejkokoszka freddydk

repo: microsoft/AL-Go


text:
Cue Setup table suffix issue

When selecting a Cue in the Que Setup there’s a filter on the Table name, it’s only possible to select tables with a name ending with *Cue.
Because all our objects end with our ISV specific suffix we cannot select our Cues in this Setup.
I’ve found a GitHub request on this subject, the proposed solution for this scenario is to remove the suffix and use a prefix instead for Cue Table names.
See also: []https://github.com/microsoft/AL/issues/1028
We would like to propose a design change instead of using a prefix for only cues:
AllObjWithCaption."Object ID" WHERE (Object Type=CONST(Table),Object Name=FILTER(*Cue*))

Hi @hhout! This is not an issue with our compiler or dev environment, but a design change suggestion. Let me transfer you to the appropriate repository. Thanks!

repo: microsoft/AL


text:
Report OnOpenPage Trigger Executed Twice with Preview Option

Describe the bug
Set a breakpoint on any report that has an OnOpenPage trigger that has report output that can be "Previewed".  If selecting preview the OnOpenPage trigger will run before the Request Page is shown and again before output is shown.
Added an example report to demonstrate.
We set some variables to a default that are exposed on the Request Page.  For example "Hide Bill-to Address" on a document.  By default we'll set this to false but a user can set the variable and display the address.  If the "Preview" option is selected to view the report, the OnOpenPage() trigger is run AGAIN before preview output is displayed and when this happens the variable that was set on the Request Page = true is "initialized" back to false.
To Reproduce
Steps and to reproduce the behavior:

Publish this report
Execute and set the fldGlobalBoolean = true on the request page
Preview Report, GlobalBoolean will be equal to false during preview execution.

report 50100 OnOpenPageTriggerReport
{
    UsageCategory = Administration;
    ApplicationArea = All;
    DefaultLayout = RDLC;
    RDLCLayout = './src/Reports/OnOpenPageTriggerReport.rdl';
    Caption = 'OnOpenPageTriggerReport';

    requestpage
    {
        SaveValues = true;

        layout
        {
            area(Content)
            {
                group(GroupName)
                {
                    field(fldGlobalBoolean; GlobalBoolean)
                    {
                        ApplicationArea = All;
                    }
                }
            }
        }

        actions
        {
            area(processing)
            {
                action(ActionName)
                {
                    ApplicationArea = All;

                }
            }
        }

        trigger OnOpenPage();
        begin
            GlobalBoolean := false;
        end;

    }

    trigger OnPostReport()
    begin
        Message(Format(GlobalBoolean));
    end;

    var
        GlobalBoolean: Boolean;
}

Expected behavior
OnOpenPage should only run once before output is generated in preview.
Screenshots
If applicable, add screenshots to help explain your problem.
5. Versions:

AL Language: 7.0.361779

Business Central:  US Business Central 18.0 (Platform 17.0.18466.0 + Application 18.0.19068.0)

Hi @eknraw ! Thank you for the good quality repository. As this mentions runtime behavior, I do not think it is the appropriate repository. Could you help me understand how this relates to the developer tools?

None!  Sorry!

Hi, Same problem
Have you solved it?
How not repeat OnOpenPage trigger after Preview?
Thankyou

Hello there,
I had the same problem. To resolve this problem, remove the savevalues property in your request page.
Have a good day,
Alexis.

The savevalues trick is not a solution. It is a work around. This is still a problem on platform 20. No real solution found so far.

With single instance codeunit we can run our code only in "first" OnOpenPage
`trigger OnOpenPage()
begin
if not SingleInstanceCu.GetOnOpenRequestPageAlreadyRun() then begin
//Set default vaues and filters
    SingleInstanceSKCGPO.SetOnOpenRequestPageAlreadyRun(true);
end;

end;`

authors: RichardJ70 aengrand atoader eknraw jaumebarbosa nikolajovicic


text:
When using a boolean to set visibilities on a page field, this only works for the first record you open, the second record is still visible/invisible based on the previous value

Describe the bug
When using a boolean to set visibilities op a page field, this only works for the first record you open, the second record is still visible/invisible based on the previous value
To Reproduce
If the first letter of a project starts with the G, the visibility of the 2 fields should be set to true.
This works for the first record with a G that I open. If I open another record where the No. starts with another letter the visibility is set to false but still shows the fields.
AL Code to reproduce the issue
trigger OnOpenPage()
begin
    ActivateFields;
end;

local procedure ActivateFields()
begin
    FirstLetterProjectNo := Text.CopyStr("No.", 1, 1);
    if FirstLetterProjectNo = 'G' then
        FirstLetterGBoolean := true
    else
        FirstLetterGBoolean := false;
end;

Also tried this in the OnAfterGetRecord()
Expected behavior
Make the fields (in)visible based on the current value and not the first value.
As seen on the screenshot below I first opened a project that starts with G, after that, I opened a project that starts with F, I expect the 2 fields ("Gekoppeld project" and "Project omschrijving") to be invisible now.
Screenshots

5. Versions:

AL Language: v6.1.381323
Business Central: v. 16.0.11240.12076

You need to update the boolean in OnAfterGetRecord(), so that it is set for every record... you are only currently doing it for the first one in OnOpenPage(), so of course that'll happen! This is not new, rather ancient behaviour.
Also, on a Card, you'll need to put those fields in a Group and set Visible on it, not on the fields directly - not that we can see whatever you're currently doing.

@dtkb I also tried the OnAfterGetRecord(), same issue.

You probably need to show a minimal complete example for MS to be able to diagnose it

You probably need to show a minimal complete example for MS to be able to diagnose it

What is incomplete?

You don't show nearly any of the page definition, e.g. what table it's on, how the fields are declared, how their visibility is controlled, etc.
Doing that in OnOpenPage() definitely seems wrong to me. If it still doesn't work after setting the boolean in OnAfterGetRecord() (or OnAfterGetCurrRecord(), but that shouldn't be needed), then something subtle is wrong, and people need info to figure it out.

        field("Project Description"; "Project Description")
        {
            ApplicationArea = all;
            Visible = FirstLetterGBoolean;

Hello,
have you tried to set the InDataSet attributes?
Normally it should work with the attribute.
https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/methods/devenv-indataset-attribute

Dynamic visibility does not work directly on page fields. You need to put the field in question into a new field group and assign the Visible property to the group instead.
https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/properties/devenv-visible-property#dynamic-visibility-of-controls

Cheers @jthoerner-tso and @NKarolak I will try this soon!

I said that already too...

Also, on a Card, you'll need to put those fields in a Group and set Visible on it, not on the fields directly - not that we can see whatever you're currently doing.

I said that already too...

Also, on a Card, you'll need to put those fields in a Group and set Visible on it, not on the fields directly - not that we can see whatever you're currently doing.

Please be salty somewhere else.

Sorry, I didn't remember that, so deleted my silly comment.

Closing the issue as it seems a resolution was found within the community. The issue was outside of the scope of this repository.

authors: NKarolak atoader dtkb jthoerner-tso midego1


text:
TableExtension BlankZero

Please include the following with each issue:
1. Describe the bug
When creating a table extension, you are able to modify an existing field, and change the value of the BlankZero property. You can build, and receive no errors. When you go to publish, you receive the following error:

2. To Reproduce

Create a new table extension like the code provided below

tableextension 70100 "TBM_PurchaseLine" extends "Purchase Line"
{
    fields
    {
        modify(Quantity)
        {
            BlankZero = true;
        }
    }
}

Build your app. You don't receive any errors.
Attempt to deploy your app. You should receive an error.

3. Expected behavior
When compiling / building, I would expect to receive the error (if you cannot change the BlankZero property)
4. Actual behavior
I do not receive any sort of indication that I cannot modify the BlankZero property on a table extension
5. Versions:

AL Language: v12.6.936426
Visual Studio Code: 1.86.2
Business Central: 23.3.14876.15103
List of Visual Studio Code extensions that you have installed: AL Language Extension for Microsoft Dynamics 365 Business Central

Duplicate of #6555

The fix for this issue has been checked in to the master branch. It will be available in the bcinsider.azurecr.io/bcsandbox-master Docker image starting from platform build number 25.0.16995.0 and VS Code Extension Version 14.0.953267.
If you don’t have access to these images you need to become part of the Ready2Go program: aka.ms/readytogo
For more details on code branches and docker images please read:
https://blogs.msdn.microsoft.com/nav/2018/05/03/al-developer-previews-multiple-releases-and-github/
https://freddysblog.com/2020/06/25/working-with-artifacts/

authors: JesperSchulz dannoe tonyabriccomeske


text:
Tooltips on tableextension are not translated

1. Describe the bug
Tooltips on tableextension are not translated
2. To Reproduce

Add a new field to a table extension and create a tooltip for this field.
Produce the XLIFF file and translate the tooltip into a different language.
Upon opening the client, the field's tooltip remains in English.

Note: if you do the same with a tooltip on page level it still works as expected
3. Expected behavior
The tooltip should be in the translation specified in the XLIFF File.
4. Actual behavior
The tooltip remains always in English
5. Versions:

AL Language: 13.0.1027618
Visual Studio Code: 1.87.2
Business Central: 24.02

We have the same issue! Any news on this? Now we still have to add the tooltip on the page.

Factboxes have the same issue

Any news on this? This shouldnt be that hard to fix?

Sorry for the lack of update on this. Is the tableextension and table in the same app? If so, this is an issue that we've just got a fix for.
We'll be backporting the fix to BC24 and BC25 to address this issue. Since it's a server-side fix, it won't be dependent on a new version of the compiler. I'll close this issue once the hotfix of BC24 is rolled out.
If the table and tableextension are not in the same app, then this is likely a different issue. Let us know if this is the case, since it would need to be looked into.

The table and table extension are not in the same table.
Create a Table extension on the Purchase Line for instance and put the Tooltip on the table field.
When you now use this new field on a page extension of the Purchase Order it always remains English and doesn't use the translated xliff value

Indeed, the table and table extension are not in the same App.

So we are getting close to 25. Will this be fixed in 25.0?

So we are getting close to 25. Will this be fixed in 25.0?

Tested this in BC25.0 still not working in there.
When can we expect a fix for this?
Since the introduction of this functionality in BC24 it's not working.

Ok, so this will nog be fixed in 25.0. Will this be on the roadmap for 25.1?

@thloke Could you please give us any feedback on this?  It's a bit frustrating that, 6 months later, we can't fully migrate our apps to use tooltips on tables because of this bug.

All I can say is that the bug is in our backlog of bugs, it's just a long backlog at the moment. :(
I'll bump its priority at least so this gets picked up before the other github bugs. Sorry for how long it's taken to get to this bug.

Any more news on this?

When will this issue be fixed? Everytime I create a pageextension I now have to make sure that I also add the ToolTip there as otherwise it wont be translated.

Can you Bump it again?!

authors: KoenLagerwaard guidorobben salgiza sybrenwille thloke


text:
Report dataset field request

I need in the report 1307 the field "Corrected Invoice No." (10705) for an rdlc personalization

Is this related to local functionality?

Yes, is functionality for ESP location

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. We will update this issue with information about availability. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.

repo: microsoft/ALAppExtensions


text:
[EVENTREQUEST] New Events report 5754 "Create Pick"

Could we get these events in report 5754 "Create Pick"
...
            OnAfterSetQuantityToPick(PickWhseWkshLine, PickQty, PickQtyBase);
            if (PickQty > 0) and
               (PickWhseWkshLine."Destination Type" = PickWhseWkshLine."Destination Type"::Customer)
            then begin
                PickWhseWkshLine.TestField("Destination No.");
                Cust.Get(PickWhseWkshLine."Destination No.");
                // >>> HERE
                IsHandled := false;
                OnBeforeCheckBlockedCustOnDocs(PickWhseWkshLine, IsHandled);
                If not IsHandled then
                // <<< HERE
                    case PickWhseWkshLine."Source Document" of
                        PickWhseWkshLine."Source Document"::"Sales Order":
                            Cust.CheckBlockedCustOnDocs(Cust, DummySalesHeader."Document Type"::Order, false, false);
                        PickWhseWkshLine."Source Document"::"Sales Return Order":
                            Cust.CheckBlockedCustOnDocs(Cust, DummySalesHeader."Document Type"::"Return Order", false, false);
                    end;
            end;

            CreatePick.SetCalledFromWksh(true);

            // >>> HERE
            OnCreateTempLine(PickWhseWkshLine, FromBinCode);
            // <<< HERE

            with PickWhseWkshLine do
                CreatePick.CreateTempLine("Location Code", "Item No.", "Variant Code",
                  "Unit of Measure Code", '', "To Bin Code", "Qty. per Unit of Measure", PickQty, PickQtyBase);
...
          [IntegrationEvent(false, false)]
          local procedure OnBeforeCheckBlockedCustOnDocs(PickWhseWkshLine: Record "Whse. Worksheet Line"; var IsHandled: Boolean)
          begin
          end;

          [IntegrationEvent(false, false)]
          local procedure OnCreateTempLine(PickWhseWkshLine: Record "Whse. Worksheet Line"; var FromBinCode: Code[10])
          begin
          end;

Hi @AlexCeg .
What is it FromBinCode parameter you asked for second event? I cannot find such variable, please clarify.

Hi @RomanZanizdra
My bad. This is only a variable in our cloned object. We do not need this variable in the event.

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.

authors: AlexCeg JesperSchulz RomanZanizdra


text:
[Event Parameter change] codeunit 99000836 "Transfer Line-Reserve" - OnTransferTransferToItemJnlLineTransferFields

            //OnTransferTransferToItemJnlLineTransferFields(OldReservEntry, TransLine, ItemJnlLine, TransferQty, Direction); A109F0006.Event.o

            //A109F0006.Event.ns
            IsHandled := false;
            OnTransferTransferToItemJnlLineTransferFields(OldReservEntry, TransLine, ItemJnlLine, TransferQty, Direction, IsHandled);
            if Not IsHandled then
                //A109F0006.Event.ne
                TransferQty :=
                  CreateReservEntry.TransferReservEntry(DATABASE::"Item Journal Line",

Event Signature:
[IntegrationEvent(false, false)]
local procedure OnTransferTransferToItemJnlLineTransferFields(var ReservationEntry: Record "Reservation Entry"; var TransferLine: Record "Transfer Line"; var ItemJournalLine: Record "Item Journal Line"; TransferQty: Decimal; Direction: Enum "Transfer Direction"; var IsHandled: Boolean)
begin
    //A109F0006.Event Parameter IsHandled
end;

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.


text:
[Event Request] Table 5405 "Production Order" - OnInsertOnBeforeStatusCheck

Hi, would it be possible to get an OnInsertOnBeforeStatusCheck event in table 5405 (Production Order), like this:
    trigger OnInsert()
    var
        InvtAdjmtEntryOrder: Record "Inventory Adjmt. Entry (Order)";
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeOnInsert(Rec, xRec, InvtAdjmtEntryOrder, IsHandled);
        if IsHandled then
            exit;

        MfgSetup.Get();
        if "No." = '' then begin
            TestNoSeries;
            NoSeriesMgt.InitSeries(GetNoSeriesCode, xRec."No. Series", "Due Date", "No.", "No. Series");
        end;

        // New Event begin
        IsHandled := false;
        OnInsertOnBeforeStatusCheck(Rec,IsHandled);
        if not IsHandled then
        // New Event end
        if Status = Status::Released then begin
            if ProdOrder.Get(Status::Finished, "No.") then
                Error(Text007, Status, TableCaption, ProdOrder."No.", ProdOrder.Status);
            InvtAdjmtEntryOrder.SetRange("Order Type", InvtAdjmtEntryOrder."Order Type"::Production);
            InvtAdjmtEntryOrder.SetRange("Order No.", "No.");
            if not InvtAdjmtEntryOrder.IsEmpty() then
                Error(Text007, Status, TableCaption, ProdOrder."No.", InvtAdjmtEntryOrder.TableCaption);
        end;

        InitRecord;

        if MfgSetup."Normal Starting Time" <> 0T then
            Rec."Starting Time" := MfgSetup."Normal Starting Time";
        if MfgSetup."Normal Ending Time" <> 0T then
            Rec."Ending Time" := MfgSetup."Normal Ending Time";
        "Creation Date" := Today;
        UpdateDatetime;
        if MfgSetup."Normal Starting Time" = 0T then
            Rec."Starting Time" := DT2Time("Starting Date-Time");
        if MfgSetup."Normal Ending Time" = 0T then
            Rec."Ending Time" := DT2Time("Ending Date-Time");
    end;

    [IntegrationEvent(false, false)]
    local procedure OnInsertOnBeforeStatusCheck(var ProductionOrder: Record "Production Order"; var IsHandled: Boolean)
    begin
    end;

Thanks!

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.


text:
[Exposure Request] Table 36 "Sales Header" - SynchronizeForReservations

Please make function SynchronizeForReservations in table 36 "Sales Header" externally available.

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.
Build ID: 42678.

authors: JesperSchulz miljance


text:
Implement CheckDirectPosting on table 210 "Job Journal Line"

On table 81 "Gen. Journal Line" we have CheckGLAcc-functionality:
local procedure CheckGLAcc(GLAcc: Record "G/L Account")
begin
GLAcc.CheckGLAcc();
if GLAcc."Direct Posting" or ("Journal Template Name" = '') or "System-Created Entry" then
exit;
if "Posting Date" <> 0D then
if "Posting Date" = ClosingDate("Posting Date") then
exit;
    CheckDirectPosting(GLAcc);
end;

The call of CheckDirectPosting makes it possible to skip the check for "Direct Posting" on the GL Acc:
local procedure CheckDirectPosting(var GLAccount: Record "G/L Account")
var
    IsHandled: Boolean;
begin
    IsHandled := false;
    OnBeforeCheckDirectPosting(GLAccount, IsHandled, Rec);
    if IsHandled then
        exit;

    GLAccount.TestField("Direct Posting", true);

    OnAfterCheckDirectPosting(GLAccount, Rec);
end;

Could this funktionality be implemented on the Job Journal Line to? Right now, the check on GLacc is part of the proccedure:
local procedure CopyFromGLAccount()
var
    IsHandled: Boolean;
begin
    IsHandled := false;
    OnBeforeCopyFromGLAccount(Rec, GLAcc, CurrFieldNo, IsHandled);
    if not IsHandled then begin
        GLAcc.Get("No.");
        GLAcc.CheckGLAcc();
        GLAcc.TestField("Direct Posting", true);
        Description := GLAcc.Name;
        "Gen. Bus. Posting Group" := GLAcc."Gen. Bus. Posting Group";
        "Gen. Prod. Posting Group" := GLAcc."Gen. Prod. Posting Group";
        "Unit of Measure Code" := '';
        "Direct Unit Cost (LCY)" := 0;
        "Unit Cost (LCY)" := 0;
        "Unit Price" := 0;
    end;

    OnAfterAssignGLAccountValues(Rec, GLAcc);
end;

With no possiblity for skipping the check on "Direct Posting"

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.
Build ID: 53798.

authors: JesperSchulz jensthomsenEV


text:
[Request-For-External] codeunit 5402 "Unit of Measure Management" ValidateQtyIsBalanced

Describe the request
Can you remove internal from procedure ValidateQtyIsBalanced in codeunit 5402 "Unit of Measure Management"
Additional context
I want to avoid duplication of the procedure
Internal work item: AB#545259

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.
Build ID: 23634.

authors: JesperSchulz auzhhv


text:
what if the receiver want to query an item not included in the receiver's set which was preprocessed in the offline phase?

As descripted in the paper and the README doc, all the items the receiver wants to query are needed to be preprocessed (encrypted by OPRF) in the offline phase. Does it mean that the receiver can only query the items that showed up in the preprocessing phase? If the receiver has a new item to query, how does the algorithm solve it? or it's just not supported?

Not sure I understand what you mean. The receiver can query whatever it wants, but unless the sender had inserted that item in its SenderDB it won't obviously show up as a match (found item). The sender can also append items to its SenderDB at a later point, but this is not supported by the simple example CLI. You'll have to write your own program and can use the SenderDB::insert_or_assign and SenderDB::remove functions to add and remove stuff whenever you want.

repo: microsoft/APSI


text:
The Adaptive cards designer let you create adaptive cards version 1.2 but with version tag 1.0

The designer let you add new elements like ActionSet while leaving the version tag on "1.0".
(Moreover, it would be amazing to be able to design adaptive cards by selecting the version and so be able to add only elements available on that version).

That is by design. You can include 1.2 elements in a 1.0 card so as to make it possible for a host that only supports 1.0 to still render it minus the 1.2-specific features.
There could however (and there will be) an easier way to set the card version (better than having to set it in the JSON editor)

repo: microsoft/AdaptiveCards


text:
[Visual Requirements - Upload Card Structure]: Luminosity ratio of "Scrollbar" is 1.8:1 which is less than 3:1.

https://microsoft.visualstudio.com/OS/_workitems/edit/30642873

This issue is not repro, hence closing this issue.
Snippet:

authors: carlos-zamora vagpt


text:
Update Microsoft Defender For Cloud workbook

PR Checklist

[x] Explain your changes, so people looking at the PR know what and why, the code changes are the how.

If adding or updating templates:

[ ] post a screenshot of templates and/or gallery changes
[x] ensure your template has a corresponding gallery entry in the gallery folder
[ ] If you are adding a new template, add your team and template/gallery file(s) to the CODEOWNERS file. CODEOWNERS entries should be teams, not individuals
[x] ensure all steps have meaningful names
[x] ensure all parameters and grid columns have display names set so they can be localized
[x] ensure that parameters id values are unique or they will fail PR validation (parameter ids are used for localization)
[x] ensure that steps names are unique or they will fail PR validation (step names are used for localization)
[x] grep /subscription/ and ensure that your parameters don't have any hardcoded resourceIds or they will fail PR validation
[x] remove fallbackResourceIds and fromTemplateId fields from your template workbook or they will fail PR validation

Updating MDC pricing estimation to work using ARG
with the bellow plans
Servers
App Services
SqlDB
OSS DBs
Containers
Storage


text:
[BUG] tslib should be listed under "dependencies" not "peerDependencies"

The TypeScript transpiler emits function calls like __assign and __extends that need a runtime implementation. When the --importHelpers flag is supplied to the transpiler, the expectation is that those functions are made available at runtime through the tslib library instead of having the implementations injected into each file.
However, the version of tslib needed at runtime is tightly coupled to the version of the TypeScript transpiler used. TypeScript 3.8.4 or earlier, for example, needs tslib 1.x while TypeScript 3.9.2 or later needs tslib 2.x.
By specifying tslib as a "peerDependency", AppInsights will be consuming whatever version of tslib is injected by the downstream consuming application. That may be incompatible with the JS code made available in the AppInsights npm package.
AppInsights should instead list tslib under dependencies with a version compatible with the TypeScript version. This will ensure that, at runtime, compatible implementations of the helper functions are available to AppInsights code. If the downstream app is using a different version of tslib, both versions of tslib will be loaded into the app's memory and the appropriate version used in each case. If the downstream app is using the same tslib version as AppInsights, npm will dedupe and only a single copy of tslib will be loaded into the application.

peerDependency is the correct location for Application Insights as during the build / bundling process we re-write the default tslib __asssign, __extends with the applicationinsights-shim implementation, so the final package does not include or use the tslib version.
The reason for including as a peerDependency is for users that consume the *.ts files rather than the bundled *.js versions that we use.

Gotcha. Sorry for the noise!

authors: MSNev aschultz

repo: microsoft/ApplicationInsights-JS


text:
How can I update the traceparent after the operation was started?

I have the following setup:

node v16
applicationinsights v2.3.3
auto collection fully enabled (requests, dependencies, etc.)
expressjs v4

My app runs behind a proxy that I cannot configure differently, which alters the header names, including the traceparent header.
If the AI sdk doesn't see this header, it starts with a clean context -- and this is what I want to fix.
Questions:

Is there a way to configure the header name containing the traceparent ID ? (guess not, so next question)
Is there a method (even a private one) that I can update the context with the traceparent that I will provide? (even a hack would work for me in this case)

Thank you

@johnib there is no way to update the header name to use to maintain the correlation in the SDK, you can manually track the requests and create the context using startOperation method, you can also get a reference to the current correlation context using getCurrentContext method and update it, never tried that, definitely hacky but maybe it works in your scenario, disabling automatic tracking and manually handling the request and the context should be better in this case.

Was a bit tricky, but made it work eventually.
Had to:

Extract the traceparent value from the custom header and use it to override the appInsights.getCorrelationContext().operation fields

as soon as possible (first middleware set on the express app)
at this point, the request telemetry item is already created and initialized with random correlation IDs (hence the second bullet)
however it is necessary for all subsequent telemetry items that will be created once the actual flow is executed (dependencies, traces, exceptions, etc.)

Add a telemetryProcessor that specifically handles request telemetry items to override the following envelope fields:

envelope.tags['ai.operation.parentId'] = context.correlationContext.operation.traceparent.parentId;
envelope.tags['ai.operation.id'] = context.correlationContext.operation.traceparent.traceId;
envelope.data.baseData.id = context.correlationContext.operation.parentId;

authors: hectorhdzg johnib


text:
Export Rules to JSON does not work

Clicking on Export Rules to JSON causes an error message on Web client GUI and in the CLI terminal.
To Reproduce

Start the Web client GUI:
...\ASA_win_2.3.290> .\asa gui

In the Web client, navigate to Author page:
http://localhost:5000/author

Click on the button Load Embedded Rules
--> Embedded rules have been loaded successfully.

Click on the button Export Rules to JSON
-->
A) The message
An error has occurred. This application may no longer respond until reloaded. _Reload_
appears in the Web client GUI,
B) and this message appears in the CLI terminal:

fail: Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost[111]
Unhandled exception in circuit 'p4BsKfPK25Bu9LGOEuXw8ilCX45HWStSLsQm5VXtCco'.
Microsoft.JSInterop.JSException: Could not find 'FileSaveAs' ('FileSaveAs' was undefined).
Error: Could not find 'FileSaveAs' ('FileSaveAs' was undefined).
at http://localhost:5000/_framework/blazor.server.js:1:497
at Array.forEach ()
at i.findFunction (http://localhost:5000/_framework/blazor.server.js:1:465)
at E (http://localhost:5000/_framework/blazor.server.js:1:2606)
at http://localhost:5000/_framework/blazor.server.js:1:3494
at new Promise ()
at kt.beginInvokeJSFromDotNet (http://localhost:5000/_framework/blazor.server.js:1:3475)
at http://localhost:5000/_framework/blazor.server.js:1:72077
at Array.forEach ()
at kt._invokeClientMethod (http://localhost:5000/_framework/blazor.server.js:1:72063)
at Microsoft.JSInterop.JSRuntime.InvokeAsync[TValue](Int64 targetInstanceId, String identifier, Object[] args)
at Microsoft.CST.AttackSurfaceAnalyzer.Cli.Pages.Author.DownloadRules() in D:\a\1\s\Cli\Pages\Author.razor:line 84
at System.Threading.Tasks.Task.<>c.b__128_0(Object state)
at Microsoft.AspNetCore.Components.Rendering.RendererSynchronizationContext.ExecuteSynchronously(TaskCompletionSource`1 completion, SendOrPostCallback d, Object state)
at Microsoft.AspNetCore.Components.Rendering.RendererSynchronizationContext.<>c.<.cctor>b__23_0(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at Microsoft.AspNetCore.Components.Rendering.RendererSynchronizationContext.ExecuteBackground(WorkItem item)

Note: If you click on the Reload, the same issue is coming.
Expected behavior
A working feature of exporting rules to a JSON file (with a possibility of specifying the output file name and location).
System Configuration:

OS: Windows
OS Version: Windows 10 Pro 21H2
Application Version: ASA_win_2.3.290
CLI or GUI: GUI

Thanks for the report. I have a fix that is working locally in #673 which I expect to merge shortly.

Should be fixed in the latest for the zip releases.

After repeating the steps described above,
at the step "4. Click on the button Export Rules to JSON",
the result is a small file named "Asa-Rules.json" containing only the text "data:text/plain;charset=utf-8,".
Thus, it seems the function FileSaveAs gets the filename only and an empty fileContent, even the Rules were loaded before in step 3.

authors: gfs lacyvar

repo: microsoft/AttackSurfaceAnalyzer


text:
Fail to sort blob versions by the column 'Version ID'

Storage Explorer Version: 1.34.0-dev (98)
Build Number: 20240319.1
Branch: main
Platform/OS: Windows 10/Linux Ubuntu 22.04/MacOS Sonoma 14.4(Apple M1 Pro)
Architecture: x64/x64/x64
How Found: From running test cases
Regression From: Not a regression
Steps to Reproduce

Expand one storage account -> Blob Containers (Make sure blob version is enabled).
Create a blob container -> Upload one blob.
Modify its properties to generate several blob versions.
Switch to the versions view -> Sort the items by the column 'Version ID'.
Check whether succeeds to sort the items by the column 'Version ID'.

Expected Experience
Succeed to sort the items by the column 'Version ID'.
Actual Experience
Fail to sort the items by the column 'Version ID'.
Additional Context
If the current blob version is located at the top, will succeed to sort the items by the column 'Version ID' for one time.
Here is the record:

Verified this issue on the main build 20240320.3. Fixed. So, we are going to close it.

repo: microsoft/AzureStorageExplorer


text:
[Accessibility][Keyboard -Flow Chart]: Multiple node can't be selected by keyboard.

User Experience
The keyboard dependent user will not be able to use the available functionality of select multiple nodes which can be accessed by mouse.
Test Environment
Browser: Microsoft Edge Canary Version: 82.0.425.0 (Official build)
OS build: 2004 (19564.1005)
Screen Reader: Narrator
URL: Bot Framework Composer
Prerequisite Here
Repro Steps:

Open the above mentioned URL in EDGE.
Select 'Design Flow' from left navigation.
Now, navigate to the flow chart and try to select multiple nodes.
Observe the issue in the flow chart area.

Actual:
With the help of keyboard, the user will not be able to select multiple nodes where as same can be done by mouse.
Expected:
The functionality which is accessible by mouse should be accessible by keyboard.
MAS Impacted: MAS2.1.1
Attachment:
MAS2.1.1_multiple selcetion is not allowed by keyboard.zip

It's a feature, possible solutions:

Shift + ArrowKeys
Ctrl + A

Let's go with Shift + ArrowKeys to expand the selected region and map to the behavior of the mouse-based multi-selection today.

As checked on the below environment, still we are not able to select multiple nodes with keyboard.
Test Environment
Browser: Microsoft Edge Canary Version: 85.0.531.1 (Official build)
OS build: 2004 (19635.1)
Screen Reader: Narrator
URL: Bot Framework Composer
Prerequisite Here
Master folder downloaded on 05-06-2020

#Nonbenchmark;

repo: microsoft/BotFramework-Composer


text:
Composer nearly unusably slow for editing dialogs after updating to 1.3.0

Describe the bug
After updating the composer from 1.1.1 to 1.3.0 editing a complicated bot is so slow that actions (such as editing a sendresponse) take 5-10 seconds, and occasionally fail.
Simpler dialogs can be edited okay, more complicated ones not at all.
We have been building an advisory bot since composer early betas. Our bot has 30+ dialogs. Simple dialogs have a few activities. Complex dialogs have a few hundred. We support three languages.
Most recently we were using version 1.1.1 and that worked quite well for this.
Version
Release: 1.3.0
Browser

[X] Electron distribution
[ ] Chrome
[ ] Safari
[ ] Firefox
[ ] Edge

OS

[X] macOS
[X] Windows
[ ] Ubuntu

Screenshots
Here is an example of the edit operation failing (editing Finnish version of the dialog that hasn't yet been properly translated from English):

Additional context
The process is taking just under 1G of memory on my laptop. I would be happy to give it more, if that helps, if I knew how.
It does not seem to matter whether the local bot is running or not. Editing is very slow and occasionally fails regardless.

Some testing results:

Release 1.2.1 is a bit faster than 1.3.0, but still way slower than 1.1.1 (tested on Windows and MacOS, same bot)
Removing our extra languages (Finnish and Swedish) – leaving only English – does not make 1.3.0 much faster; maybe a little

Thank you @ttur, we will address this issue in an upcoming release.

Thank you @ttur, we will address this issue in an upcoming release.

This will be addressed in an upcoming patch (1.3.1)

This will be addressed in an upcoming patch (1.3.1)

authors: cwhitten gabog ttur


text:
Pubish target name gets truncated so two targets with similar names are hard to distinguish

Found in R13 bug bash but is an R14 task


text:
New message is announced when a reorder of messages happens

Is it an issue related to Adaptive Cards?

[ ] Yes, this is an Adaptive Card issue but it is specific to Web Chat.

Do you have any screenshots?

What version of Web Chat are you using?
I am not using latest
Which distribution are you using Web Chat from?
Bundle (webchat.js)
Which hosting environment does this issue primarily affect?
Dynamics 365 Omnichannel
Which browsers and platforms do the issue happened?
Browser: Edge (latest), Browser: Chrome (latest), Browser: Safari (latest), Platform: Windows, Platform: macOS
Which area does this issue affect?
Notification
Is this an accessibility issue?

[ ] Yes, this is an accessibility issue.

Please describe the bug
Adaptive cards are being sorted according to the time stamp in the activity, if the scroll of the chat is in the middle of the chat while the reorder happens, it will announce as new message ,
this is a problem when one of the adaptive cards contains a set of suggested actions, because once the ordering happens , the suggested actions dissapear.
this was reported by a customer by scrolling up and down multiple times.
Do you see any errors in console log?
No response
How to reproduce the issue?
1.- use  a PVA bot which send at least 3 messages , one after other , the last message should contain a set of suggested actions
2.- start the chat, and wait for the suggested actions to show up
3.- scroll up and down
4.- once the suggested actions dissapear corroborate the order of the messages
this is not an easy bug to reproduce, since the re-order doesnt always happen,
What is the expected and actual behavior?
Expected:
to do not throw a new message notification under the scenario described
Actual:
is throwing a new message notifiation
Adaptive Card JSON
No response
Additional context
NA

Please give repro in the format of transcript, or HTTP traffic.

evidence_2.txt
evidence2.zip

here you can find the HAR files, the transcript and the screen shot of how it looks the chat after reorder the messages,
evidence5_12am.zip
ChatTranscripts (33).zip

Per our offline discussion:

authors: compulim elopezanaya

repo: microsoft/BotFramework-WebChat


text:
hyperv-daemons/hypervkvpd.service: fix service ordering

No instances of Mariner 2 are currently emitting KVP telemetry for cloud-init.
Summary

What does the PR accomplish, why was it needed?
kvpd must start before cloud-init-local which comes before network.target.

Add ConditionVirtualization=microsoft to only start under Hyper-V.

Remove After=network.target dependency.

Add After=sys-devices-virtual-misc-vmbus\x21hv_kvp.device which
should be combined with BindTo=.

Signed-off-by: Chris Patterson cpatterson@microsoft.com
Merge Checklist

All boxes should be checked before merging the PR (just tick any boxes which don't apply to this PR)

[ ] The toolchain has been rebuilt successfully (or no changes were made to it)
[ ] The toolchain/worker package manifests are up-to-date
[ ] Any updated packages successfully build (or no packages were changed)
[ ] Packages depending on static components modified in this PR (Golang, *-static subpackages, etc.) have had their Release tag incremented.
[ ] Package tests (%check section) have been verified with RUN_CHECK=y for existing SPEC files, or added to new SPEC files
[ ] All package sources are available
[ ] cgmanifest files are up-to-date and sorted (./cgmanifest.json, ./toolkit/tools/cgmanifest.json, ./toolkit/scripts/toolchain/cgmanifest.json, .github/workflows/cgmanifest.json)
[ ] LICENSE-MAP files are up-to-date (./SPECS/LICENSES-AND-NOTICES/data/licenses.json, ./SPECS/LICENSES-AND-NOTICES/LICENSES-MAP.md, ./SPECS/LICENSES-AND-NOTICES/LICENSE-EXCEPTIONS.PHOTON)
[ ] All source files have up-to-date hashes in the *.signatures.json files
[ ] sudo make go-tidy-all and sudo make go-test-coverage pass
[ ] Documentation has been updated to match any changes to the build system
[ ] Ready to merge

Change Log

Ensure hypervkvpd.service starts prior to cloud-init-local.service.

Test Methodology

Mariner 2 Azure image rebooted multiple times with changes

Just want to add that no instances of Mariner 2 are currently emitting KVP telemetry for cloud-init.

Change itself looks good! Please increment the release number and add a changelog entry in hyperv-daemons.spec so our tooling can pick up the change and publish it.

Good point! Done, thanks!

repo: microsoft/CBL-Mariner


text:
自动漏洞修复

Can this model be used to detect logic vulnerabilities in code, such as unauthorized access vulnerabilities, Horizontal Escalation Vulnerabilities, etc.

If you have labeled data to fine-tune model, the model can be used to detect.

repo: microsoft/CodeBERT


text:
fix: show SET_ENTITY actions in entity required for list

Ensure those actions are included in the getRequiredActions filter.
There is seeming large issue of how we have many different calculations for "required" based on different criteria.

getRequiredActions
isRequiredForActions
isEnumRequiredForActions
isInUse

Seems like there should be consolidations
Fixes ADO#2179

:tada: This PR is included in version 0.365.4 :tada:
The release is available on:

npm package (@next dist-tag)
GitHub release

Your semantic-release bot :package::rocket:

repo: microsoft/ConversationLearner-UI


text:
Use MemorySize metadata attribute to remove parameters from friendly overloads

The SHGetFileInfoW method takes SHFILEINFOW* and a uint that describes the size of that struct. The friendly overload should omit the latter of these and infer it via sizeof(SHFILEINFOW). This should be done in a generalized way so all friendly overloads may be better/shorter/easier for it.

See also #271

Duplicate of #271