text:
An effort to improve documentation across the Piston ecosystem.

@Gankro mentioned this in this reddit thread:

Admittedly, Piston has a serious documentation issue beyond unwraps in examples. I seem to recall finding some unwraps and being unable to identify what could cause them to fail (because the docs are crazy). At that point, I'm not really empowered to do anything other than leave the unwrap in, or map it to my application's equivalent of "something bad, I dunno!".

I haven't had a good look myself yet, but it might be a nice idea to scan through the crates and see where we can improve! Some ideas:

If a function/method returns a Result explain when and why it might return an Err.
If a function/method might panic! explain when and why it might do so. Even just something like:

/// This function does this and that.
///
/// **Panics** if X happens.
pub fn this_and_that() { ... }

Add the #![deny(missing_docs)] lint to all crates. This has been a great help in conrod and forces the developer to take the time to explain themselves. For foo-sys crates (low level C bindings) this probably isn't necessary, but I think it would be a good idea for high-level binding APIs to do this and perhaps link to the original documentation if possible (here's an example of how we do it in coreaudio-rs).
For low-level and high-performance crates, attempt to document the complexity and cost of the function (perhaps using big O notation where practical).
Add step-by-step comments to examples to explain why you're doing what you're doing, what other kinds of options there are, etc.
Write a guide for each crate (whether it's just a well commented example, a separate markdown file or a link elsewhere).
Ensure the README contains a link to the rendered docs.

I think this could benefit us greatly by making it easier for contributors to approach, contribute and maintain libraries while reducing the number of issues that are posted due to unexplained things.

Another idea is to try and link to other types when you reference them within comments, i.e. you can link to another type in the same module like this
/// Blah blah blah and it uses a [**Foo**](./struct.Foo) internally to do this.
///
/// If you need such and such, [**Bar::other_method**](./struct.Bar#method.other_method) might be a better alternative.

Part of the problem is that everything is really generic and it's unclear how anything has anything. For instance, if you look at any PistonWindow example
You will see e.draw_2d, e.update, etc being invoked. e is a PistonWindow, so I would expect to find update in its docs: http://docs.piston.rs/piston_window/piston_window/struct.PistonWindow.html
Nope. Try to find how a PistonWindow has an update method, because I still am honestly unclear.

In my experience, requiring documentation on everything tends to produce
documentation of the form
/// This function does this and that.
pub fn this_and_that() {
To the point where people who get used to it start needlessly
transliterating function declarations even in codebases that don't require
it.
Unfortunately, I don't think there's any lint to require useful
documentation.
On Mon, Nov 30, 2015 at 2:29 AM, Mitchell Nordine notifications@github.com
wrote:

@Gankro https://github.com/Gankro mentioned this in this reddit thread
https://en.reddit.com/r/rust/comments/3ur9co/announcing_diesel_a_safe_extensible_orm_and_query/cxhhow2
:
Admittedly, Piston has a serious documentation issue beyond unwraps in
examples. I seem to recall finding some unwraps and being unable to
identify what could cause them to fail (because the docs are crazy). At
that point, I'm not really empowered to do anything other than leave the
unwrap in, or map it to my application's equivalent of "something bad, I
dunno!".
I haven't had a good look myself yet, but it might be a nice idea to scan
through the crates and see where we can improve! Some ideas:

If a function/method returns a Result explain when and why it might
return an Err.
If a function/method might panic! explain when and why it might do
so. Even just something like:

/// This function does this and that.////// Panics if X happens.pub fn this_and_that() { ... }

Add the #![deny(missing_docs)] lint to all crates. This has been a
great help in conrod and forces the developer to take the time to explain
themselves. For foo-sys crates (low level C bindings) this probably
isn't necessary, but I think it would be a good idea for high-level binding
APIs to do this and perhaps link to the original documentation if possible (here's
an example
https://github.com/RustAudio/coreaudio-rs/blob/master/src/audio_unit/audio_format.rs#L336
of how we do it in coreaudio-rs).
For low-level and high-performance crates, attempt to document the
complexity and cost of the function (perhaps using big O notation where
practical).
Add step-by-step comments to examples to explain why you're doing
what you're doing, what other kinds of options there are, etc.
Write a guide for each crate (whether it's just a well commented
example, a separate markdown file or a link elsewhere).
Ensure the README contains a link to the rendered docs.

I think this could benefit us greatly by making it easier for contributors
to approach, contribute and maintain libraries while reducing the number of
issues that are posted due to unexplained things.
—
Reply to this email directly or view it on GitHub
https://github.com/PistonDevelopers/piston/issues/1013.

@Gankro See https://github.com/PistonDevelopers/piston-examples. All event traits are implemented on top of GenericEvent, so you import UpdateEvent and then use:
if let Some(args) = e.update_args() {
    ...
}

@aij Good point! Still, the docs are bad in many places so we'll have to work on it.
Perhaps we should write a wiki page that describes how to write a good docs?

I think there is a problem with understanding how the libraries work from just looking at the generic functions. We could add module level documentation to explain how things are connected.

I have an idea: What if we make a policy that every PR should improve docs at least a little if possible? We could have a "whitelist" of the ones with good enough docs, but by default all PR should improve the docs.

I've thought about writing docs before since their absence is the biggest pain point for me using Piston right now. Two things have given me pause:

I am not an expert in any part of Piston - otherwise I wouldn't hate not having docs so much! Incorrect docs are worse than no docs at all, and I don't want to expect someone who is an expert to review everything I write since that may end up being more work than if you just wrote the docs yourself. Admittedly, that would become less and less of a concern as I (or whomever) get to know the code better.
It seems like every 4 months there's a sea change in either Piston or one of its dependencies (glium, gfx-rs) which would make many of the docs obsolete. I'm not saying that this is a bad thing, the fast pace of development in the Rust gamedev community is quite exciting. It just seems silly to me to write documentation for something that won't exist in a year, and anyone making big changes shouldn't feel obligated to update loads of documentation at the same time.

Closing.

authors: Gankro aij bvssvni mattico mitchmindtree

repo: PistonDevelopers/piston


text:
Add sound effects

The game needs sound effects:

Selected menu item changed
Selected menu item confirmed
Ball hits paddle
Ball hits block
Block gets destroyed
All blocks are destroyed
New ball is spawned
Ball is lost

The sound effects need to be free / using a license that allows redistribution and commercial use. The sound effects used and their sources should be mentioned in the credits.

Added several sound effects from freesound in commit 3253c9274ef4f8ee4290cbc86dfe0fecb3250d2f

source: gharchive/issue

repo: Pixelgamix/BreakoutParty

license: mit

license_type: permissive

license_source: bigquery


text:
Support key based authenticated git actions

write the decrypted pem to a temporary file before a git action on an authenticated repository
set path to key via --config when running command
delete the key file

Github/Gitlab prefer personal access tokens.
To properly support this method of authentication, we should extend libgit2.cr to support in-memory key based authentication.

repo: PlaceOS/compiler

license: MIT

license_source: github-api


text:
adding enums to nsip-project

Can someone run the npm commands and create a new tag? Thanks.
@JamesP-KC @beejjacobs @DavidJWhiteDev

Checks are failing and I don't have access to Azure DevOps to check the error.

source: gharchive/pull-request

repo: Planning-Inspectorate/data-model


text:
[BUG] Crash on launch.

Running your most recent v1.0.1, I'm getting a client crash on launch. From the crash log, I'm seeing repeated instances of this:
Caused by: org.spongepowered.asm.mixin.injection.throwables.InjectionError: Critical injection failure: Variable modifier method changeLimbDistance(FLnet/minecraft/class_1309;FFLnet/minecraft/class_4587;Lnet/minecraft/class_4597;I)F in alaskanativecraft.mixins.json:client.LivingEntityRendererMixin failed injection check, (0/1) succeeded. Scanned 1 target(s). Using refmap alaskanativecraft-refmap.json
Which suggests the problem is in /src/main/java/com/github/platymemo/alaskanativecraft/mixin/client/LivingEntityRendererMixin.java. I took a look at the code, and can't find anything that looks terribly incorrect or out of place, so it might be a mod incompatibility issue. Full list of mods included below:
I'm running MultiMC, with Minecraft Version v1.16.5, LWJGL v3.2.2, Intermediary Mappings v1.16.5 and Fabric Loader v0.11.1. For Fabric API and other mods & their versions, see below:
	adorn: Adorn 1.12.2+1.16.4
	advancements-enlarger: Advancements Enlarger 0.2.3
	alaskanativecraft: Alaska Native Craft 1.0.1
	anvil_fix: AnvilFix 1.1.3+build.7-1.16
	appleskin: AppleSkin 1.0.11
	architectury: Architectury 1.4.89
	bebooks: Better Enchanted Books 1.2.1
	bedspreads: Bedspreads 1.3.1-1.16.4
	beenfo: Beenfo 1.16.4-fabric0.25.1-1.3
	beholdersvariations: Beholder's Variations 0.2.1
	better_mod_button: Better Mod Button 1.1.4
	betterdroppeditems: Better Dropped Items 1.2.4-1.16.2
	betterend: Better End 0.8.8-beta
	betternether: Better Nether 5.0.5
	biomemakeover: Biome Makeover 1.16.4-1.2.8
	blur: Blur (Fabric) 2.0.0
	bookworm: Bookworm Library 3.1.0
	breakprogress: Break Progress 1.0.1
	byg: BYG 1.1.3
	camp_fires_cook_mobs: Camp Fires Cook Mobs 1.1.6+MC1.16.2-1.16.5
	carpet: Carpet Mod in Fabric 1.4.24
	carpet-extra: Carpet Extra 1.4.8
	chainmail: Chainmail 0.5.0
	chat_heads: Chat Heads 0.2.1+1.16.2
	chunkpregen: Fabric Chunk Pregenerator 0.3.3
	cinderscapes: Cinderscapes 1.3.2
	clear-skies: Clear Skies 1.5.55
	climbable: Climbable 0.2.0
	cloth-basic-math: Cloth Basic Math 0.5.1
	cloth-config2: Cloth Config v4 4.8.3
	coloredslime: Colored Slime Blocks 1.0
	cotton: Cotton 1.1.0
	cotton-cauldron: Cotton Cauldron 1.1.0
	cotton-commons: Cotton Commons 1.0.4
	cotton-config: Cotton Config 1.0.0-rc.7
	cotton-datapack: Cotton Datapack 1.0.7
	cotton-logging: Cotton Logging 1.0.0-rc.4
	cotton-player-events: Cotton Player Events 1.0.2
	croptopia: Croptopia 1.1.0
	crowdin-translate: CrowdinTranslate 1.2
	dankstorage: Dank Storage 1.9a-1.16.3
	dark-loading-screen: Dark Loading Screen 1.6.2
	discerning_furnace: Discerning Furnace 1.0.1+MC1.16.1-1.16.5
	ducts: Ducts 1.0.2
	earthtojavamobs: Earth2Java 1.6.1+1.16.4
	easierenchanting: Easier Enchanting 1.4.0
	enchant_giver: Enchant Giver 1.0.2
	expandedconcrete: Expanded Concrete 0.0.2
	expandedstorage: ExpandedStorage 5.6.32
	fabric: Fabric API 0.29.2+1.16
	fabric-api-base: Fabric API Base 0.2.0+ab87788d3a
	fallflyinglib: FallFlyingLib 1.1.0
	falling_tree: FallingTree 2.10.0
	fallingleaves: Falling Leaves 1.4
	fettlol_item: Fettlol ItemMod 1.0.9+1.16.4
	fettlol_util: Fettlol UtilMod 1.0.7+1.16.4
	fiber: fiber 0.23.0-2
	flamingo_ooo: Flamingo, oh, oh, oh... 1.0.4-MC1.16.3-fabric
	flonters: Flonters 1.1.1+1.16.2
	flora-doubling: Flora Doubling 1.2.0
	gbfabrictools: GBfabrictools 1.3.2+1.16.4
	gentlefawn: GentleFawn 1.1.2-MC1.16.3-fabric
	gildednetherite: Gilded Netherite 1.6.0
	goldensteak: Goldensteak 1.0.2
	grindenchantments: Grind Enchantments 1.1.3+1.16.3
	hotfurnace: Hot Furnace 1.1.1
	illuminations: Illuminations 1.4.3
	infinitywaterbucket: Infinity Water Bucket 1.0.3.2-compat-mc1.16.4-fabric
	inventoryprofiles: Inventory Profiles 0.4.2
	jankson: Jankson 3.0.1+j1.2.0
	java: OpenJDK 64-Bit Server VM 8
	kirin: Kirin UI 1.7-1.16.2
	kyrptconfig: Kytpt Config 1.1.4-1.16
	lambdynlights: LambDynamicLights 1.3.2+1.16.4
	libcd: LibCapableData 3.0.3+1.16.3
	libgui: LibGui 3.1.0+1.16.3
	lightoverlay: Light Overlay 5.6.1
	lithium: Lithium 0.6.1
	lonsdaleite: Lonsdaleite Tools 1.0.14
	mcda: MC Dungeons Armors 0.9.3
	mcdw: MC Dungeons Weapons 2.6.0
	midashunger: Midas Hunger 1.3.0
	minecraft: Minecraft 1.16.5
	miniextras: Mini Extras Mod 1.1.3
	mixintrace: MixinTrace 1.0.0
	modmenu: Mod Menu 1.14.15
	moreberries: More Berries 1.3.4
	morepaths: More Paths 0.0.3
	mostructures: Mo' Structures 1.0.1+mc.1.16.4
	multi_item_lin: Multi Item Lin 1.0.0
	nha: Netherite Horse Armor 1.0.0
	notenoughanimations: NotEnoughAnimations 1.0.3
	okzoomer: Ok Zoomer 4.0.1+1.16.2
	parakeetmod: The Parakeet Mod 1.16.3-1.0.6
	patchouli: Patchouli 1.16.4-48-FABRIC
	phosphor: Phosphor 0.7.0+build.10
	piglib: Piglib 1.0.1
	playerabilitylib: Pal 1.2.1
	polymorph: Polymorph 0.0.8-1.16.4
	presencefootsteps: Presence Footsteps r28+1.16.2
	quickshulker: Quick Shulker 1.1.10-1.16
	reach-entity-attributes: Reach Entity Attribute 1.0.1
	repurposed_structures: Repurposed Structures 1.16.4-1.7.4
	rotmgfood: Rotmg Food 1.1.1
	satin: Satin 1.5.1
	sheepconsistency: Sheep Consistency 1.0.2
	shulkerboxtooltip: Shulker Box Tooltip 2.3.2+1.16.3
	sodium: Sodium 0.1.0
	spruceui: SpruceUI 1.6.4
	static-content: Static Content 1.0.1-1.16.2
	staticdata: Static Data 1.1.2
	terraform-biome-builder-api-v1: Terraform Biome Builder API (v1) 1.0.0+build.4
	terraform-config-api-v1: Terraform Config API (v1) 1.0.0+build.4
	terraform-dirt-api-v1: Terraform Dirt API (v1) 1.1.0+build.4
	terraform-overworld-biome-extensions-api-v1: Terraform Overworld Biome Extensions API (v1) 1.0.0+build.4
	terraform-shapes-api-v1: Terraform Shapes API (v1) 1.0.1
	terraform-surfaces-api-v1: Terraform Surfaces API (v1) 1.0.0+build.4
	terraform-tree-api-v1: Terraform Tree API (v1) 1.0.1+build.4
	terraform-wood-api-v1: Terraform Wood API (v1) 1.0.1
	terrestria: Terrestria 2.1.6
	textweaks: TexTweaks 1.16.4-1.3.0
	tinytweaks: TinyTweaks 1.1.2
	tk_valoeghese_zoesteriaconfig: ZoesteriaConfig 1.3.2
	toms_storage: Tom's Simple Storage Mod 1.1.3
	traverse: Traverse 3.3.1
	vanguard: Vanguard 1.0.4
	villagerhats: Villager Hats fabric-1.16-rc1-1.0.0
	villagernames: Villager Names 1.6.0
	vistas: Vistas 1.2.3
	voyager: Voyager 1.0.0
	vt_downloader: VTDownloader 1.0.3
	waila: Hwyla 1.9.22
	wildworld: Wild World 1.3.0+1.16.2
	winged: Winged Mod 1.16.2-1.4.1
	wolveswitharmor: Wolves With Armor 1.5.2-1.16.2
	woods_and_mires: Woods and Mires 1.0.4+1.16.3
	worldedit: WorldEdit 7.2.0+a51fa43
	xaerominimap: Xaero's Minimap 21.1.0
	xaeroworldmap: Xaero's World Map 1.11.9

It wasn't an incompatibility (thankfully, cause testing each mod would take a while lol), I just used name-based searching for variables in the mixin, which does not seem to work in production, so I switched to the safer ordinal based (which I should've used in the first place...).

It wasn't an incompatibility (thankfully, cause testing each mod would take a while lol), I just used name-based searching for variables in the mixin, which does not seem to work in production, so I switched to the safer ordinal based (which I should've used in the first place...).

authors: BrekiTomasson Platymemo

repo: Platymemo/alaskanativecraft


text:
init scale test framework

This PR is a starting point of scalability test.
It creates necessary functions to perform a simple test. It tests scaling up to 16 active gameservers from 1, 4, 16 standby servers respectively.
Uses openarena as testing game server to test scalability

add functions scale_up and scale_clear to allocate new standing by servers. These method can also be used without scale-test.sh .
add test cases regarding number of standby max servers

After running scale-test.sh, here is the result:
test 1: scale up to 16 servers from 1 standby server
Scale up time: 13s

test 2: scale up to 16 servers from 4 standby server
Scale up time: 34s

test 1: scale up to 16 servers from 16 standby server
Scale up time: 13s

Signed-off-by: Allen Leigh allenlsy@gmail.com

LGTM! YAML files reference the same GameServerBuild, right? Any way we can use one of them and then do kubectl scale gameserverbuild <name> --replicas X to do scaling?

LGTM! Wanna take and slightly modify your PR description and put it in a README? After this we can merge

Can you help update the PR description? I will add instructions to the readme, or a separate readme in this folder.

apologies, I wasn't clear. You don't have to modify the PR description itself, just whatever you copy and paste into the README. Hope it makes sense now!

authors: allenlsy dgkanatsios

repo: PlayFab/thundernetes


text:
handle RadialGradient fill style

This was done by messing around with XFL files and having Animate
generate the corresponding SVGs. The radius and matrix element functions
were found just by guessing and checking. They seem to work as expected
on several scenes that previously were rendered incorrectly.

Hold off on this one. I see an issue with how I'm calculating the gradient radius.

This one will require a refactor. It looks like the radialGradient radius comes from the width and height of the shape, and that information isn't in the FillStyle. I think the only way to get that information is by tracking the bounds of the shape corresponding to the fillStyle. This leads to the circular dependency the way the code is currently structured:

The function for getting the shape (xfl_edge_to_svg_path) returns the SVG path elements, and so it requires all attributes for the shape it's given.
One of those attributes specifies the radialGradient information, which requires shape information to get the correct radius.

Really? If so, the code will have to produce SVG paths using style IDs only, and add on the style attributes later. Also, does finding the bounds of the shape require finding the axis-aligned bounding box (AABB) of each Bezier (like so), and then finding the AABB of every sub-AABB?
I wonder why Animate chose to make radial gradients more complicated than linear gradients. Is it convenient in some way?

That sounds correct. I just checked it in Animate. I drew a quadratic bezier curve with the control point very far from the endpoints. I then drew two axis-aligned lines to measure the width and height of the bezier curve, then calculated the radius of the curve as sqrt( width^2 + height^2 ) / 2. The radius matched almost exactly what I get when I export to SVG. I tried this with three different curves, and it worked every time.
The edge format contains only lines and quadratic bezier curves. For lines, it's easy: just check the startpoint and endpoint, and take the two extremal x and y values. For quadratic bezier curves, there are only 4 points to check for extremal values: the startpoint, the endpoint, and the x-critical point, and the y-critical point. The critical point happens where the derivative of the bezier curve is equal to 0.
The quadratic bezier curve is given by (1-t)[(1-t)a + tb] + t[(1-t)b + tc] = (1-t^2

Sorry, I accidentally re-opened the merge request.
Your comment sounds correct. I just checked it in Animate. I drew a quadratic bezier curve with the control point very far from the endpoints. I then drew two axis-aligned lines to measure the width and height of the bezier curve, then calculated the radius of the curve as sqrt( width^2 + height^2 ) / 2. The radius matched almost exactly what I get when I export to SVG. I tried this with three different curves, and it worked every time.
The edge format contains only lines and quadratic bezier curves. For lines, it's easy: just check the startpoint and endpoint, and take the two extremal x and y values. For quadratic bezier curves, there are 4 points to check for extremal values: the startpoint, the endpoint, and the x-critical point, and the y-critical point. The critical point happens where the derivative of the bezier curve is equal to 0.
The quadratic bezier curve is given by (1-t)[(1-t)a + tb] + t[(1-t)b + tc] = a(1-t)^2 + 2b(t - t^2) + ct^2.
The derivative is: 2a(t-1) + 2b(1-2t) + 2ct.
You get one equation when you plug in the x values of the points a, b, and c. You can solve that equation for t. If the resulting t falls between 0 and 1, you can plug that t into the quadratic bezier curve function above to get the x-critical point.
Repeat by plugging in y values instead of x values to get the y-critical point.
Once you get the critical points, you can check those two points plus the two endpoints for extremal values to get the bounding box.
I think that would work, though I haven't tested it with an actual bezier curve.

The actual points to check for the quadratic bezier curves should be:

start point
end point
t = (x1 - x2) / (x1 - 2*x2 + x3), assuming this number is between 0 and 1. If it is, then check the point (1-t)[(1-t)a + tb] + t[(1-t)b + tc].
t = (y1 - y2) / (y1 - 2*y2 + y3), assuming this number is between 0 and 1. If it is, then check the point (1-t)[(1-t)a + tb] + t[(1-t)b + tc].

authors: PluieElectrique synthbot-anon


text:
fix(alb): fixing up mistake in alb logs

Goal
Turns out we need to exclude the / in access logs and we need to use the alb account id when defining access policies.

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:

authors: bassrock pocket-ci

repo: Pocket/terraform-modules


text:
use to target-seq or WEX

Hi,
This tool is really very helpful.
I wonder if it need to do gene length correction when I use oncoplot for my target sequencing data or exom sequencing data.
Thanks
Shirley

Hi,
I'm glad you found this tool useful. For oncoplots, no need for any length correction. You can plot them as it is. It doesn't matter which sequence source (can be WXS, WGS, Amplicon, etc) was used to detect variant.

authors: PoisonAlien shirleydaidai

repo: PoisonAlien/maftools


text:
[feature request] set item qty targets

Would be great to be able set target quantities for items to keep a target number; collect below and recycle above.
eg. want have 20 pokeballs available want to have available slots for great balls, etc. Set item 1 (pokeballs) to 20 and, say, potions to zero (something like "item_filter": "1:20,101:0" or whatever)
So if I drop below 20 pokeballs, they will be collected from spins until the target of 20 is reached. If there are 20 or more in the item inventory then recycle any new ones.
It's a nice-to-have.

@slatspie i thought it already did that
this is what i have in mine.
      "1": { "keep" : 50 },       "2": { "keep" : 60 },       "3": { "keep" : 70 },               "4": { "keep" : 100 },                 "101": { "keep" : 0 },       "102": { "keep" : 0 },       "103": { "keep" : 0 },       "201": { "keep" : 0 },       "701": { "keep" : 30 }

Indeed, already works on dev.

Excellent, thanks! I read through a bunch of the issues and pulls before posting this. I should have dug a little deeper.

You should close this issue

This issue has been resolved, closing this.
/closed

authors: Calcyfer Evanito TheGoldenXY aTadTasty slatspie

repo: PokemonGoF/PokemonGo-Bot


text:
[REQUEST] Update to new OpenPoGoWeb

Would be nice if someone can update to the new version of OpenPoGoWeb.

git pull origin master ?

Was not working...
But I got it now
cd web
git reset --hard origin/master

Anyway will be nice if a dev can add the new version of OpenPoGoWeb to the main pull.
I can confirm that the new OpenPoGoWeb version is working, looks much better and provide more Pokemon information.

@DimaVIII Did you update location and format of your config file after git pull? It was changed some time ago.

@MariuszT I just renamed config/userdata.js.example to config/userdata.js and add my information.

I also changed https://github.com/OpenPoGo/OpenPoGoWeb/blob/master/js/main.js#L233
Removed:
      styles: [
        { "featureType": "road", "elementType": "geometry.fill", "stylers": [ { "color": "#4f9f92" }, { "visibility": "on" } ] },
        { "featureType": "water", "elementType": "geometry.stroke", "stylers": [ { "color": "#feff95" }, { "visibility": "on" }, { "weight": 1.2 } ] },
        { "featureType": "landscape", "elementType": "geometry", "stylers": [ { "color": "#adff9d" }, { "visibility": "on" } ] },
        { "featureType": "water", "stylers": [ { "visibility": "on" }, { "color": "#147dd9" } ] },
        { "featureType": "poi", "elementType": "geometry.fill", "stylers": [ { "color": "#d3ffcc" } ] },{ "elementType": "labels", "stylers": [ { "visibility": "off" } ] }
]

As the map was ugly as **** and wasn't showing the street names.
(This happens if a dev thinks he is a designer xD)

yeah much better without those styles :D :D

Could you help me in getting the map working? Right now I can't see my character at all...

@BartKoppelmans you have to run the web script from the bot's /web folder.
change the example config file to userdata.js , add your map api key and email, then run a web server from the folder with for example
python -m SimpleHTTPServer 8001
so your map will run on http://localhost:8001
still the old version of the map is packed with the dev bot, if you want the new one, just override the contents of /web folder with the new map files

If you get "origin master", how do you come around the socket.io?
[01/Aug/2016 19:40:02] code 404, message File not found
"[01/Aug/2016 19:40:02] "GET /socket.io/?EIO=3&transport=polling&t=LP7E8F8 HTTP/1.1" 404 -"

same problem here
"GET /socket.io/?EIO=3&transport=polling&t=LPCLZ-b HTTP/1.1" 404

authors: BartKoppelmans DimaVIII KeePon79 MZorzy MariuszT MartinTerp jayhostan


text:
[dev] Bot seems to ignore min_ball in MovetoMapPokemon task

Expected Behavior
The bot will only start sniping after it has a minimum number of balls, as defined by min_ball.
Actual Behavior
Bot will start sniping as soon as it has even one pokeball, and is forced to flee because it runs out of balls.
Config:
{
	"documentation": "https://github.com/PokemonGoF/PokemonGo-Bot/tree/master/docs",

	"auth_service": "google",
	"username": "",
	"password": "",

	"enable_social": true,

	"": "",

	"websocket_server": true,

	"heartbeat_threshold": 10,

	"gmapkey": "",

	"tasks": [{
		"type": "HandleSoftBan"
	}, {
		"type": "SleepSchedule",
		"config": {
			"enabled": true,
			"time": "03:00",
			"duration": "6:00",
			"time_random_offset": "00:31",
			"duration_random_offset": "00:27",
			"wake_up_at_location": ""
		}
	}, {
		"type": "RandomPause",
		"config": {
			"enabled": true,
			"min_duration": "00:00:10",
			"max_duration": "00:01:00",
			"min_interval": "00:05:00",
			"max_interval": "00:15:00"
		}
	}, {
		"type": "RandomPause",
		"config": {
			"enabled": true,
			"min_duration": "00:10:00",
			"max_duration": "00:30:00",
			"min_interval": "00:45:00",
			"max_interval": "02:00:00"
		}
	}, {
		"type": "CompleteTutorial",
		"config": {
			"enabled": true,
			"// set a name": "",
			"// nickname": ""
		}
	}, {
		"type": "CollectLevelUpReward"
	}, {
		"type": "UpdateLiveStats",
		"config": {
			"enabled": true,
			"min_interval": 10,
			"stats": ["uptime", "level", "level_completion", "pokemon_stats", "stardust_earned", "xp_earned", "xp_per_hour", "stops_visited"],
			"terminal_log": true,
			"terminal_title": true
		}
	}, {
		"type": "UpdateLiveInventory",
		"config": {
			"enabled": true,
			"min_interval": 120,
			"show_all_multiple_lines": false,
			"items": ["space_info", "pokeballs", "greatballs", "ultraballs", "razzberries", "luckyegg"]
		}
	}, {
		"type": "IncubateEggs",
		"config": {
			"longer_eggs_first": true,
			"min_interval": 120,
			"infinite": [2, 5, 10],
			"breakable": [2, 10]
		}
	}, {
		"type": "EvolvePokemon",
		"config": {
			"enabled": true,
			"evolve_all": "Pidgey, Weedle, Caterpie, Rattata, Drowzee, Meowth, Spearow, Ekans, Zubat, Doduo, Goldeen, Krabby, Horsea, Koffing, Cubone, Psyduck",
			"first_evolve_by": "iv",
			"evolve_above_cp": 400,
			"evolve_above_iv": 0.9,
			"logic": "or",
			"min_evolve_speed": 20,
			"max_evolve_speed": 35,
			"use_lucky_egg": false
		}
	}, {
		"type": "TransferPokemon",
		"config": {
			"enabled": true,
			"min_free_slot": 10,
			"transfer_wait_min": 3,
			"transfer_wait_max": 5
		}
	}, {
		"type": "NicknamePokemon",
		"config": {
			"enabled": true,
			"locale": "en",
			"dont_nickname_favorite": true,
			"nickname_template": "{ivcp_pct1}{attack_pct1} {name}"
		}
	}, {
		"type": "RecycleItems",
		"config": {
			"min_empty_space": 15,
			"max_balls_keep": 275,
			"max_potions_keep": 0,
			"max_berries_keep": 50,
			"max_revives_keep": 0,
			"item_filter": {
				"Pokeball": {
					"keep": 100
				},
				"Greatball": {
					"keep": 75
				},
				"Ultraball": {
					"keep": 100
				},
				"Potion": {
					"keep": 0
				},
				"Super Potion": {
					"keep": 0
				},
				"Hyper Potion": {
					"keep": 0
				},
				"Revive": {
					"keep": 0
				},
				"Razz Berry": {
					"keep": 50
				}
			},
			"recycle_wait_min": 3,
			"recycle_wait_max": 10
		}
	}, {
		"type": "CatchPokemon",
		"config": {
			"catch_visible_pokemon": true,
			"catch_lured_pokemon": true,
			"min_ultraball_to_keep": 50,
			"berry_threshold": 0.35,
			"vip_berry_threshold": 0.9,
			"treat_unseen_as_vip": true,
			"catch_throw_parameters": {
				"excellent_rate": 0.1,
				"great_rate": 0.5,
				"nice_rate": 0.3,
				"normal_rate": 0.1,
				"spin_success_rate": 0.6,
				"hit_rate": 0.75
			},
			"catch_simulation": {
				"flee_count": 3,
				"flee_duration": 2,
				"catch_wait_min": 2,
				"catch_wait_max": 6,
				"berry_wait_min": 2,
				"berry_wait_max": 3,
				"changeball_wait_min": 2,
				"changeball_wait_max": 3
			}
		}
	}, {
		"type": "MoveToMapPokemon",
		"config": {
			"address": "http://localhost:5000",
			"max_distance": 1500,
			"min_ball": 50,
			"prioritize_vips": true,
			"snipe": true,
			"snipe_high_prio_only": true,
			"snipe_high_prio_threshold": 399,
			"update_map": true,
			"mode": "priority",
			"map_path": "raw_data",
			"walker": "StepWalker",
			"max_extra_dist_fort": 10,
			"catch": {
				"Mewtwo": 1000,
				"Mew": 1000,

				"Articuno": 1000,
				"Zapdos": 1000,
				"Moltres": 1000,

				"Dratini": 1000,
				"Dragonair": 1000,
				"Dragonite": 1000,

				"Snorlax": 1000,
				"Lapras": 1000,

				"Charmander": 950,
				"Charmeleon": 949,
				"Charizard": 948,

				"Bulbasaur": 930,
				"Ivysaur": 929,
				"Venusaur": 928,

				"Squirtle": 910,
				"Wartortle": 909,
				"Blastoise": 908,

				"Pikachu": 940,
				"Raichu": 939,

				"Eevee": 900,
				"Vaporeon": 500,
				"Jolteon": 500,
				"Flareon": 500,

				"Chansey": 800,

				"Electabuzz": 300,
				"Magmar": 300,
				"Ditto": 300,

				"Porygon": 200,
				"Scyther": 200,
				"Jynx": 200,

				"Seel": 500,
				"Dewgong": 300,

				"Growlithe": 750,
				"Arcanine": 650,

				"Magikarp": 700,
				"Gyarados": 600,

				"Vulpix": 650,
				"Ninetales": 600,

				"Grimer": 650,
				"Muk": 600,

				"Exeggcute": 625,
				"Exeggcutor": 425,

				"Omanyte": 600,
				"Omastar": 500,

				"Kabuto": 600,
				"Kabutops": 500,

				"Slowpoke": 600,
				"Slowbro": 400,

				"Rhyhorn": 550,
				"Rhydon": 450,

				"Nidoran M": 600,
				"Nidorino": 500,
				"Nidoking": 400,

				"Nidoran F": 500,
				"Nidorina": 400,
				"Nidoqueen": 300,

				"Staryu": 500,
				"Starmie": 400,

				"Gastly": 500,
				"Haunter": 400,
				"Gengar": 300,

				"Geodude": 500,
				"Graveler": 400,
				"Golem": 300,

				"Machop": 550,
				"Machoke": 450,
				"Machamp": 350,

				"Abra": 500,
				"Kadabra": 400,
				"Alakazam": 300,

				"Poliwag": 400,
				"Poliwhirl": 300,
				"Poliwrath": 200,

				"Bellsprout": 400,
				"Weepinbell": 300,
				"Victreebel": 200,

				"Oddish": 300,
				"Gloom": 200,
				"Vileplume": 100,

				"Sandshrew": 200,
				"Sandslash": 100,

				"Farfetch'd": 300,
				"Kangaskhan": 300,
				"Mr. Mime": 300,
				"Tauros": 300,

				"Electabuzz": 300,
				"Magmar": 300,
				"Ditto": 300,

				"Porygon": 200,
				"Scyther": 300,
				"Jynx": 200,

				"Seel": 350,
				"Dewgong": 200,

				"Shellder": 200,
				"Cloyster": 100,

				"Drowzee": 10,
				"Hypno": 50,

				"Paras": 100,
				"Parasect": 50,

				"Tentacool": 200,
				"Tentacruel": 100,

				"Mankey": 150,
				"Primeape": 50,

				"Clefairy": 100,
				"Clefable": 50,

				"Jigglypuff": 100,
				"Wigglytuff": 50,

				"Venonat": 100,
				"Venomoth": 50,

				"Diglett": 200,
				"Dugtrio": 150,

				"Meowth": 150,
				"Persian": 100,

				"Psyduck": 150,
				"Golduck": 100,

				"Pinsir": 150,

				"Ponyta": 200,
				"Rapidash": 100,

				"Magnemite": 150,
				"Magneton": 100,

				"Krabby": 150,
				"Kingler": 100,

				"Voltorb": 200,
				"Electrode": 100,

				"Cubone": 250,
				"Marowak": 200,

				"Hitmonlee": 200,
				"Hitmonchan": 200,
				"Lickitung": 200,

				"Koffing": 200,
				"Weezing": 100,

				"Tangela": 100,

				"Horsea": 250,
				"Seadra": 100,

				"Goldeen": 250,
				"Seaking": 100,

				"Caterpie": 10,
				"Metapod": 10,
				"Butterfree": 10,

				"Weedle": 10,
				"Kakuna": 10,
				"Beedrill": 10,

				"Pidgey": 10,
				"Pidgeotto": 10,
				"Pidgeot": 10,

				"Oddish": 100,
				"Gloom": 200,
				"Vileplume": 600,

				"Onix": 10,

				"Rattata": 10,
				"Raticate": 10,

				"Spearow": 10,
				"Fearow": 10,

				"Ekans": 10,
				"Arbok": 10,

				"Sandshrew": 10,
				"Sandslash": 10,

				"Zubat": 10,
				"Golbat": 10,

				"Doduo": 10,
				"Dodrio": 10
			}
		}
	}, {
		"type": "SpinFort",
		"config": {
			"spin_wait_min": 1,
			"spin_wait_max": 3
		}
	}, {
		"type": "FollowPath",
		"config": {
			"enabled": true,
			"walker": "PolylineWalker",
			"path_mode": "loop",
			"path_start_mode": "closest",
			"path_file": "configs/path1.json",
			"number_lap": 10,
			"timer_restart_min": "00:10:00",
			"timer_restart_max": "00:20:00"
		}
	}],
	"map_object_cache_time": 5,
	"forts": {
		"avoid_circles": true,
		"max_circle_size": 50,
		"cache_recent_forts": true
	},
	"logging_color": true,

	"pokemon_bag": {
		"show_at_start": false,
		"show_count": true,
		"pokemon_info": ["cp", "iv_pct", "moveset", "dps"]
	},

	"location_cache": true,
	"distance_unit": "km",

	"walk_max": 11,
	"walk_min": 6,
	"walk_random": true,
	"walk_offset_percent_max": 0.4,

	"alt_min": 70,
	"alt_max": 150,

	"gps_default_altitude": 76.0,
	"replicate_gps_xy_noise": true,
	"replicate_gps_z_noise": true,
	"gps_xy_noise_range": 0.000125,
	"gps_z_noise_range": 12.5,

	"action_wait_min": 2,
	"action_wait_max": 8,

	"debug": false,
	"test": false,
	"health_record": false,

	"daily_catch_limit": 800,

	"reconnecting_timeout": 15,
	"catch": {
		"any": {
			"always_catch": true
		}
	},

	"release": {
		"any": {
			"keep_best_custom": "iv, moveset.attack.perfection, iv_atack, hp_max",
			"amount": 2
		},

		"Snorlax": {
			"keep_best_iv": 9
		},
		"Lapras": {
			"keep_best_iv": 9
		},
		"Gyarados": {
			"keep_best_iv": 9
		},

		"Dratini": {
			"keep_best_custom": "iv, moveset.attack.perfection",
			"amount": 2
		},
		"Dragonair": {
			"keep_best_custom": "iv, moveset.attack.perfection",
			"amount": 2
		},
		"Dragonite": {
			"keep_best_custom": "iv, moveset.attack.perfection",
			"amount": 3
		},

		"Vaporeon": {
			"keep_best_custom": "iv, moveset.attack.perfection",
			"amount": 3
		},
		"Flareon": {
			"keep_best_custom": "iv, moveset.attack.perfection",
			"amount": 3
		},
		"Jolteon": {
			"keep_best_custom": "iv, moveset.attack.perfection",
			"amount": 3
		}

	},
	"vips": {
		"any": {
			"catch_above_cp": 1200,
			"catch_above_iv": 0.9,
			"catch_above_ncp": 0.9,
			"logic": "or"
		},

		"Mew": {},
		"Mewtwo": {},

		"Moltres": {},
		"Zapdos": {},
		"Articuno": {},

		"Dragonite": {},
		"Dragonair": {},
		"Dratini": {},

		"Snorlax": {},
		"Lapras": {},

		"Growlithe": {},
		"Arcanine": {},

		"Gyarados": {},

		"Exeggutor": {},
		"Muk": {},

		"Eevee": {},
		"Vaporeon": {},

		"Bulbasaur": {},
		"Ivysaur": {},
		"Venusaur": {},

		"Charmander": {},
		"Charmeleon": {},
		"Charizard": {},

		"Squirtle": {},
		"Wartortle": {},
		"Blastoise": {},

		"Pikachu": {},
		"Raichu": {}

	}
}

Log
# No balls here, so just deferred to FollowPath for a bit

2016-08-24 11:02:42,579 [UpdateLiveStats] [INFO] [log_stats] Uptime : 0:15:35 | Level 22 | 130,515 / 175,000 XP (74%) | Encountered 18 pokemon, 15 caught, 0 released, 0 evolved, 0 never seen before | Earned 1,500 Stardust | +2,925 XP | 11,259 XP/h | Visited 13 stops
2016-08-24 11:02:42,579 [UpdateLiveInventory] [INFO] [show_inventory] Items: 38/350 | Pokeballs: 0 | GreatBalls: 0 | UltraBalls: 0 | RazzBerries: 1 | LuckyEgg: 4
...

# Got 3 pokeballs from a pokestop, and switched back on, despite 3 < 50

2016-08-24 11:04:02,118 [  SpinFort] [INFO] [spun_pokestop] Spun pokestop Toronto Coach Terminal. Experience awarded: 50. Items awarded: {u'Pokeball': 3}
2016-08-24 11:04:04,267 [FollowPath] [INFO] [position_update] Walking from (43.655997233663975, -79.383849318655, 112.34542691743124) to (43.65603, -79.38385, 76.0), distance left: (3.64423389715 m) ..
2016-08-24 11:04:06,208 [UpdateLiveStats] [INFO] [log_stats] Uptime : 0:17:00 | Level 22 | 130,735 / 175,000 XP (74%) | Encountered 19 pokemon, 16 caught, 0 released, 0 evolved, 0 never seen before | Earned 1,600 Stardust | +3,145 XP | 11,102 XP/h | Visited 15 stops
2016-08-24 11:04:07,481 [MoveToMapPokemon] [INFO] [move_to_map_pokemon_teleport_to] Teleporting to Growlithe. (6037.04km)
2016-08-24 11:04:07,481 [MoveToMapPokemon] [INFO] [move_to_map_pokemon_encounter] Encountered Pokemon: Growlithe
2016-08-24 11:04:09,626 [MoveToMapPokemon] [INFO] [move_to_map_pokemon_teleport_back] Teleporting back to previous location (43.656, -79.38384)
2016-08-24 11:04:11,692 [PokemonCatchWorker] [INFO] [pokemon_appeared] A wild Growlithe appeared! [CP 379] [NCP 0.28] [Potential 0.49] [A/D/S 13/1/8]
2016-08-24 11:04:14,695 [PokemonCatchWorker] [INFO] [vip_pokemon] This is a VIP pokemon. Catch!!!
2016-08-24 11:04:17,344 [PokemonCatchWorker] [INFO] [threw_berry] Threw a Razz Berry! Catch rate with Pokeball is now: 40.62
2016-08-24 11:04:22,596 [PokemonCatchWorker] [INFO] [threw_pokeball] Great throw! Used Pokeball, with chance 40.62 (2 left)
2016-08-24 11:04:22,770 [PokemonCatchWorker] [INFO] [pokemon_caught] Captured Growlithe! [CP 379] [NCP 0.28] [Potential 0.49] [13/1/8] [+150 exp]
2016-08-24 11:04:22,775 [PokemonCatchWorker] [INFO] [gained_candy] You now have 12 Growlithe candy!
2016-08-24 11:04:28,242 [FollowPath] [INFO] [position_update] Walking from (43.65592416029464, -79.38381279395433, 144.68777536823313) to (43.65608, -79.38387, 76.0), distance left: (17.9292754186 m) ..
2016-08-24 11:04:30,660 [UpdateLiveStats] [INFO] [log_stats] Uptime : 0:17:23 | Level 22 | 130,885 / 175,000 XP (74%) | Encountered 20 pokemon, 17 caught, 0 released, 0 evolved, 0 never seen before | Earned 1,700 Stardust | +3,295 XP | 11,373 XP/h | Visited 15 stops
2016-08-24 11:04:32,920 [NicknamePokemon] [INFO] [rename_pokemon] Pokemon Growlithe renamed to 57 Growlithe
2016-08-24 11:04:33,384 [MoveToMapPokemon] [INFO] [move_to_map_pokemon_teleport_to] Teleporting to Magikarp. (6637.52km)
2016-08-24 11:04:33,385 [MoveToMapPokemon] [INFO] [move_to_map_pokemon_encounter] Encountered Pokemon: Magikarp
2016-08-24 11:04:35,866 [MoveToMapPokemon] [INFO] [move_to_map_pokemon_teleport_back] Teleporting back to previous location (43.656, -79.38384)
2016-08-24 11:04:37,869 [PokemonCatchWorker] [INFO] [pokemon_appeared] A wild Magikarp appeared! [CP 96] [NCP 0.37] [Potential 0.6] [A/D/S 14/7/6]
2016-08-24 11:04:44,252 [PokemonCatchWorker] [INFO] [threw_pokeball] Nice Curveball throw! Used Pokeball, with chance 54.12 (1 left)
2016-08-24 11:04:44,449 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Pokeball thrown to Magikarp missed.. trying again!
2016-08-24 11:04:54,088 [PokemonCatchWorker] [INFO] [threw_pokeball] Great Curveball throw! Used Pokeball, with chance 54.12 (0 left)
2016-08-24 11:04:54,255 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Pokeball thrown to Magikarp missed.. trying again!
2016-08-24 11:04:57,858 [PokemonCatchWorker] [INFO] [no_pokeballs] No pokeballs left! Fleeing...
016-08-24 11:04:33,385 [MoveToMapPokemon] [INFO] [move_to_map_pokemon_encounter] Encountered Pokemon: Magikarp
2016-08-24 11:04:35,866 [MoveToMapPokemon] [INFO] [move_to_map_pokemon_teleport_back] Teleporting back to previous location (43.656, -79.38384)
2016-08-24 11:04:37,869 [PokemonCatchWorker] [INFO] [pokemon_appeared] A wild Magikarp appeared! [CP 96] [NCP 0.37] [Potential 0.6] [A/D/S 14/7/6]
2016-08-24 11:04:44,252 [PokemonCatchWorker] [INFO] [threw_pokeball] Nice Curveball throw! Used Pokeball, with chance 54.12 (1 left)
2016-08-24 11:04:44,449 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Pokeball thrown to Magikarp missed.. trying again!
2016-08-24 11:04:54,088 [PokemonCatchWorker] [INFO] [threw_pokeball] Great Curveball throw! Used Pokeball, with chance 54.12 (0 left)
2016-08-24 11:04:54,255 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Pokeball thrown to Magikarp missed.. trying again!

# Ran out of balls and fled

2016-08-24 11:04:57,858 [PokemonCatchWorker] [INFO] [no_pokeballs] No pokeballs left! Fleeing...

Steps to Reproduce
In the MoveToMapPokemon task, you can set "min_ball" to whatever and it just seems to ignore it.
OS: OSX 10.10.5
Branch: dev
Git Commit: bda706aa1c4932265af19bc08363ac780d691864
Python Version: Python 2.7.12

Not sure why we check pokeballs three times in the work function. I'm looking into the fix, but I want to make sure I know what's going on in this file first.

If you could give #4675 a try. Should fix the issue.

Thanks a lot, I pulled your PR (git pull origin pull/4684/head for posterity) and everything seems good so far.
I will update once I hit min_ball and see if it switches.

Yep, switched over perfectly. Nicely done.
Thanks a lot bud.
Updated Log
2016-08-24 13:26:58,849 [UpdateLiveInventory] [INFO] [show_inventory] Items: 150/350 | Pokeballs: 35 | GreatBalls: 7 | UltraBalls: 1 | RazzBerries: 0 | LuckyEgg: 4
2016-08-24 13:26:59,020 [IncubateEggs] [INFO] [next_egg_incubates] Eggs incubating: [1.27/5.0 km] (Eggs left: 8, Incubating: 1)
2016-08-24 13:27:00,469 [NicknamePokemon] [INFO] [rename_pokemon] Pokemon Pidgey renamed to 52 Pidgey
2016-08-24 13:27:00,632 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Northrop Frye - 0.04km
2016-08-24 13:27:03,056 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Northrop Frye - 0.04km
{u'pokemon_id': 19, u'expiration_timestamp_ms': 1472060481900L, u'longitude': -79.3925286357343, u'latitude': 43.667292581512186, u'spawn_point_id': u'882b34ba8e3', u'encounter_id': 15945150266695644525L}
2016-08-24 13:27:05,264 [PokemonCatchWorker] [INFO] [pokemon_appeared] A wild Rattata appeared! [CP 231] [NCP 0.4] [Potential 0.36] [A/D/S 7/1/8]
2016-08-24 13:27:11,206 [PokemonCatchWorker] [INFO] [threw_pokeball] Great Curveball throw! Used Pokeball, with chance 36.31 (34 left)
2016-08-24 13:27:11,342 [PokemonCatchWorker] [INFO] [pokemon_caught] Captured Rattata! [CP 231] [NCP 0.4] [Potential 0.36] [7/1/8] [+160 exp]
2016-08-24 13:27:11,346 [PokemonCatchWorker] [INFO] [gained_candy] You now have 87 Rattata candy!
2016-08-24 13:27:18,520 [UpdateLiveStats] [INFO] [log_stats] Uptime : 0:06:44 | Level 22 | 145,235 / 175,000 XP (82%) | Encountered 4 pokemon, 3 caught, 0 released, 0 evolved, 0 never seen before | Earned 300 Stardust | +1,225 XP | 10,904 XP/h | Visited 14 stops
2016-08-24 13:27:21,053 [NicknamePokemon] [INFO] [rename_pokemon] Pokemon Rattata renamed to 30 Rattata
2016-08-24 13:27:21,366 [  SpinFort] [INFO] [spun_pokestop] Spun pokestop Northrop Frye. Experience awarded: 50. Items awarded: {u'Pokeball': 2, u'Greatball': 1}
2016-08-24 13:27:23,025 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Katie Anne MacTavish Sundial - 0.06km
2016-08-24 13:27:26,526 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Katie Anne MacTavish Sundial - 0.06km
2016-08-24 13:27:27,607 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Katie Anne MacTavish Sundial - 0.06km
2016-08-24 13:27:30,500 [UpdateLiveStats] [INFO] [log_stats] Uptime : 0:06:56 | Level 22 | 145,285 / 175,000 XP (83%) | Encountered 4 pokemon, 3 caught, 0 released, 0 evolved, 0 never seen before | Earned 300 Stardust | +1,275 XP | 11,022 XP/h | Visited 15 stops
2016-08-24 13:27:31,639 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Katie Anne MacTavish Sundial - 0.06km
2016-08-24 13:27:34,431 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Katie Anne MacTavish Sundial - 0.06km
2016-08-24 13:27:36,054 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Katie Anne MacTavish Sundial - 0.05km
2016-08-24 13:27:37,677 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Katie Anne MacTavish Sundial - 0.04km
2016-08-24 13:27:40,391 [  SpinFort] [INFO] [spun_pokestop] Spun pokestop Katie Anne MacTavish Sundial. Experience awarded: 50. Items awarded: {u'Potion': 1, u'Pokeball': 2, u'Greatball': 1}
2016-08-24 13:27:41,886 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Globe Sphere Art - 0.07km
2016-08-24 13:27:45,232 [UpdateLiveStats] [INFO] [log_stats] Uptime : 0:07:11 | Level 22 | 145,335 / 175,000 XP (83%) | Encountered 4 pokemon, 3 caught, 0 released, 0 evolved, 0 never seen before | Earned 300 Stardust | +1,325 XP | 11,071 XP/h | Visited 16 stops
2016-08-24 13:27:45,398 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Globe Sphere Art - 0.06km
2016-08-24 13:27:49,001 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Globe Sphere Art - 0.06km
2016-08-24 13:27:50,426 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Globe Sphere Art - 0.05km
2016-08-24 13:27:51,768 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Globe Sphere Art - 0.04km
2016-08-24 13:27:54,674 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Globe Sphere Art - 0.04km
2016-08-24 13:27:57,546 [UpdateLiveStats] [INFO] [log_stats] Uptime : 0:07:23 | Level 22 | 145,335 / 175,000 XP (83%) | Encountered 4 pokemon, 3 caught, 0 released, 0 evolved, 0 never seen before | Earned 300 Stardust | +1,325 XP | 10,760 XP/h | Visited 16 stops
2016-08-24 13:27:58,781 [  SpinFort] [INFO] [spun_pokestop] Spun pokestop Globe Sphere Art. Experience awarded: 50. Items awarded: {u'Pokeball': 2, u'Greatball': 1}
2016-08-24 13:28:01,010 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Burwash Hall - 0.05km
2016-08-24 13:28:04,055 [MoveToMapPokemon] [INFO] [move_to_map_pokemon_teleport_to] Teleporting to Snorlax. (549.76km)
2016-08-24 13:28:04,056 [MoveToMapPokemon] [INFO] [move_to_map_pokemon_encounter] Encountered Pokemon: Snorlax
2016-08-24 13:28:07,372 [MoveToMapPokemon] [INFO] [move_to_map_pokemon_teleport_back] Teleporting back to previous location (43.66716, -79.39188)
2016-08-24 13:28:09,376 [PokemonCatchWorker] [INFO] [pokemon_appeared] A wild Snorlax appeared! [CP 1088] [NCP 0.35] [Potential 0.62] [A/D/S 9/4/15]
2016-08-24 13:28:12,376 [PokemonCatchWorker] [INFO] [vip_pokemon] This is a VIP pokemon. Catch!!!
2016-08-24 13:28:19,686 [PokemonCatchWorker] [INFO] [threw_pokeball] Great throw! Used Ultraball, with chance 30.46 (0 left)
2016-08-24 13:28:19,831 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Snorlax capture failed.. trying again!
2016-08-24 13:28:32,523 [PokemonCatchWorker] [INFO] [threw_pokeball] Nice Curveball throw! Used Greatball, with chance 23.85 (9 left)
2016-08-24 13:28:32,654 [PokemonCatchWorker] [INFO] [pokemon_caught] Captured Snorlax! [CP 1088] [NCP 0.35] [Potential 0.62] [9/4/15] [+120 exp]

``

Perfect. Glad to help @Vvkmnn

Hey, the issue is still resolved, but I've noticed the bot will stop sniping once it hits min_ball, look around to spin a pokestop, hits the limit, then snipes again, then searches again.
Here's a log example with "min_ball": 75:

# Got 75 balls, start sniping:

2016-08-24 15:33:41,881 [UpdateLiveInventory] [INFO] Pokemon Bag: 242/250
2016-08-24 15:33:41,881 [UpdateLiveInventory] [INFO] PokeBalls: 81 | GreatBalls: 0 | UltraBalls: 0 | MasterBalls: 0
2016-08-24 15:33:44,486 [MoveToMapPokemon] [INFO] [move_to_map_pokemon_teleport_to] Teleporting to Dragonite. (8188.32km)
2016-08-24 15:33:44,486 [MoveToMapPokemon] [INFO] [move_to_map_pokemon_encounter] Encountered Pokemon: Dragonite
2016-08-24 15:33:46,661 [MoveToMapPokemon] [INFO] [move_to_map_pokemon_teleport_back] Teleporting back to previous location (43.6746801154, -79.3909708169)
2016-08-24 15:33:48,664 [PokemonCatchWorker] [INFO] [pokemon_appeared] A wild Dragonite appeared! [CP 1770] [NCP 0.51] [Potential 0.84] [A/D/S 15/11/12]
2016-08-24 15:33:51,667 [PokemonCatchWorker] [INFO] [vip_pokemon] This is a VIP pokemon. Catch!!!
2016-08-24 15:33:55,780 [PokemonCatchWorker] [INFO] [threw_pokeball] Nice Curveball throw! Used Pokeball, with chance 3.53 (80 left)
2016-08-24 15:33:55,917 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Dragonite capture failed.. trying again!
2016-08-24 15:34:02,248 [PokemonCatchWorker] [INFO] [threw_pokeball] Great throw! Used Pokeball, with chance 3.53 (79 left)
2016-08-24 15:34:02,405 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Dragonite capture failed.. trying again!
2016-08-24 15:34:10,247 [PokemonCatchWorker] [INFO] [threw_pokeball] Great Curveball throw! Used Pokeball, with chance 3.53 (78 left)
2016-08-24 15:34:10,576 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Dragonite capture failed.. trying again!
2016-08-24 15:34:18,131 [PokemonCatchWorker] [INFO] [threw_pokeball] Great throw! Used Pokeball, with chance 3.53 (77 left)
2016-08-24 15:34:18,302 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Dragonite capture failed.. trying again!
2016-08-24 15:34:26,030 [PokemonCatchWorker] [INFO] [threw_pokeball] Nice Curveball throw! Used Pokeball, with chance 3.53 (76 left)
2016-08-24 15:34:26,187 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Dragonite capture failed.. trying again!
2016-08-24 15:34:32,685 [PokemonCatchWorker] [INFO] [threw_pokeball] OK Curveball throw! Used Pokeball, with chance 3.53 (75 left)
2016-08-24 15:34:32,838 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Dragonite capture failed.. trying again!
2016-08-24 15:34:37,944 [PokemonCatchWorker] [INFO] [threw_pokeball] Great Curveball throw! Used Pokeball, with chance 3.53 (74 left)
2016-08-24 15:34:38,084 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Dragonite capture failed.. trying again!
2016-08-24 15:34:46,829 [PokemonCatchWorker] [INFO] [threw_pokeball] Nice throw! Used Pokeball, with chance 3.53 (73 left)
2016-08-24 15:34:47,625 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Dragonite capture failed.. trying again!
2016-08-24 15:34:52,720 [PokemonCatchWorker] [INFO] [threw_pokeball] Great Curveball throw! Used Pokeball, with chance 3.53 (72 left)
2016-08-24 15:34:52,859 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Dragonite capture failed.. trying again!
2016-08-24 15:35:05,624 [PokemonCatchWorker] [INFO] [threw_pokeball] Great throw! Used Pokeball, with chance 3.53 (71 left)
2016-08-24 15:35:05,981 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Dragonite capture failed.. trying again!
2016-08-24 15:35:15,976 [PokemonCatchWorker] [INFO] [threw_pokeball] Great throw! Used Pokeball, with chance 3.53 (70 left)
2016-08-24 15:35:16,110 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Dragonite capture failed.. trying again!
2016-08-24 15:35:24,693 [PokemonCatchWorker] [INFO] [threw_pokeball] Nice throw! Used Pokeball, with chance 3.53 (69 left)
2016-08-24 15:35:24,829 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Dragonite capture failed.. trying again!
2016-08-24 15:35:32,717 [PokemonCatchWorker] [INFO] [threw_pokeball] Great Curveball throw! Used Pokeball, with chance 3.53 (68 left)
2016-08-24 15:35:32,862 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Dragonite capture failed.. trying again!
2016-08-24 15:35:39,027 [PokemonCatchWorker] [INFO] [threw_pokeball] Great throw! Used Pokeball, with chance 3.53 (67 left)
2016-08-24 15:35:39,173 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Dragonite capture failed.. trying again!
2016-08-24 15:35:44,977 [PokemonCatchWorker] [INFO] [threw_pokeball] Nice Curveball throw! Used Pokeball, with chance 3.53 (66 left)
2016-08-24 15:35:45,118 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Dragonite capture failed.. trying again!
2016-08-24 15:35:53,340 [PokemonCatchWorker] [INFO] [threw_pokeball] Nice Curveball throw! Used Pokeball, with chance 3.53 (65 left)
2016-08-24 15:35:53,888 [PokemonCatchWorker] [INFO] [pokemon_capture_failed] Dragonite capture failed.. trying again!
2016-08-24 15:36:01,247 [PokemonCatchWorker] [INFO] [threw_pokeball] Nice Curveball throw! Used Pokeball, with chance 3.53 (64 left)
2016-08-24 15:36:01,393 [PokemonCatchWorker] [INFO] [pokemon_caught] Captured Dragonite! [CP 1770] [NCP 0.51] [Potential 0.84] [15/11/12] [+120 exp]
2016-08-24 15:36:01,398 [PokemonCatchWorker] [INFO] [gained_candy] You now have 99 Dratini candy!
2016-08-24 15:36:06,549 [  SpinFort] [INFO] [spun_pokestop] Spun pokestop Belmont House. Experience awarded: 50. Items awarded: {u'Potion': 1, u'Pokeball': 2}
2016-08-24 15:36:08,334 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Ramsden Park Artificial Ice Rink - 0.19km
2016-08-24 15:36:14,000 [UpdateLiveStats] [INFO] [log_stats] Uptime : 0:09:35 | Level 22 | 165,595 / 175,000 XP (94%) | Encountered 14 pokemon, 13 caught, 0 released, 0 evolved, 1 never seen before | Earned 2,300 Stardust | +3,085 XP | 19,302 XP/h | Visited 2 stops
2016-08-24 15:36:14,001 [UpdateLiveInventory] [INFO] Pokemon Bag: 243/250
2016-08-24 15:36:14,001 [UpdateLiveInventory] [INFO] Items: 97/350
2016-08-24 15:36:14,001 [UpdateLiveInventory] [INFO] PokeBalls: 66 | GreatBalls: 0 | UltraBalls: 0 | MasterBalls: 0
2016-08-24 15:36:14,001 [UpdateLiveInventory] [INFO] RazzBerries: 0 | BlukBerries: 0 | NanabBerries: 0
2016-08-24 15:36:14,001 [UpdateLiveInventory] [INFO] LuckyEgg: 4 | Incubator: 0 | TroyDisk: 5
2016-08-24 15:36:14,002 [UpdateLiveInventory] [INFO] Potion: 7 | SuperPotion: 3 | HyperPotion: 1 | MaxPotion: 0
2016-08-24 15:36:14,002 [UpdateLiveInventory] [INFO] Incense: 8 | IncenseSpicy: 0 | IncenseCool: 0
2016-08-24 15:36:14,002 [UpdateLiveInventory] [INFO] Revive: 1 | MaxRevive: 0

# No more balls, start spinning:
...
2016-08-24 15:37:29,070 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Ramsden Park Artificial Ice Rink - 0.04km
2016-08-24 15:37:32,772 [  SpinFort] [INFO] [spun_pokestop] Spun pokestop Ramsden Park Artificial Ice Rink. Experience awarded: 50. Items awarded: {u'Pokeball': 1, u'Revive': 2}
2016-08-24 15:37:34,598 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Louro Jewellers Clock - 0.16km
...

# Hit 75 again, start sniping!

2016-08-24 15:40:50,590 [UpdateLiveInventory] [INFO] Items: 112/350
2016-08-24 15:40:50,590 [UpdateLiveInventory] [INFO] PokeBalls: 72 | GreatBalls: 1 | UltraBalls: 0 | MasterBalls: 0
2016-08-24 15:40:50,880 [  SpinFort] [INFO] [spun_pokestop] Spun pokestop The Avenue Diner Mural . Experience awarded: 50. Items awarded: {u'Ultraball': 1, u'Pokeball': 1, u'Greatball': 1}
2016-08-24 15:40:53,722 [MoveToFort] [INFO] [moving_to_fort] Moving towards pokestop Lakshmi Statue At Elements Cosmetic Centre  - 0.11km
2016-08-24 15:41:00,236 [MoveToMapPokemon] [INFO] [move_to_map_pokemon_teleport_to] Teleporting to Dratini. (3641.85km)
2016-08-24 15:41:00,237 [MoveToMapPokemon] [INFO] [move_to_map_pokemon_encounter] Encountered Pokemon: Dratini
2016-08-24 15:41:02,382 [MoveToMapPokemon] [INFO] [move_to_map_pokemon_teleport_back] Teleporting back to previous location (43.67474, -79.39659)
2016-08-24 15:41:04,385 [PokemonCatchWorker] [INFO] [pokemon_appeared] A wild Dratini appeared! [CP 457] [NCP 0.47] [Potential 0.64] [A/D/S 4/10/15]
...

# Run out of balls, back to spinning until 75:

2016-08-24 15:42:10,932 [UpdateLiveInventory] [INFO] PokeBalls: 70 | GreatBalls: 1 | UltraBalls: 0 | MasterBalls: 0
2016-08-24 15:42:31,160 [  SpinFort] [INFO] [spun_pokestop] Spun pokestop Lakshmi Statue At Elements Cosmetic Centre . Experience awarded: 50. Items awarded: {u'Ultraball': 1, u'Pokeball': 2}
...

Basically it seems to be treating the 1 you fixed in https://github.com/PokemonGoF/PokemonGo-Bot/pull/4684/commits/f52b693ac717f3c8204f78dbb3d9b9e1311e0a67 with min_ball.
I was wondering if maybe adding a new parameter calling max_ball and something like:
if self.min_ball <= (pokeballs_quantity + superballs_quantity + ultraballs_quantity) < self.max_ball:
              return WorkerResult.SUCCESS`

With a start check that compares with max_ball instead:
         if pokeballs_quantity + superballs_quantity + ultraballs_quantity > self.max_ball:
              return WorkerResult.SUCCESS

So it cycles through the quantities until its hits the min, then only restarts after  hits max_ball. I'm not sure if that'll work, I'm still trying to get the hang of Python, and I'm still unfamiliar with the internals of this bot.
What do you think?

I'd say set min_ball to some sort of medium value. Enough you won't not catch pokemon but low enough you'll not avoid catching them for extended periods.

Fair enough, I'll try that.

@mjmadsen & @Vvkmnn Close this?

@Vvkmnn If you feel you would like some additional features added to accomplish what you're looking for, could you open a new issue?
I'm going to close for now, if you want to let me know how my recommendation worked, you can reply without reopening.
Thanks!

Yep, my bad. Thought I closed this.
I'll reopen a new one sometime. Cheers guys.

authors: Vvkmnn k4n30 mjmadsen


text:
Can I use sub-subdomains here?

I need a subdomain for my guilded bot but the main website and the dashboard are on different servers.
I would be helpful if all servers come under the same subdomain
like project.foo.ng and dashboard.project.foo.ng
is it possible?

Yes, it's possible. You can just write "dashboard.project" for that one.

Yes, it's possible. You can just write "dashboard.project" for that one.

Thanks


text:
Optimize Sampling/Estimation time of code

Right now, a bottleneck of all the simulations is the required time. A profiling of the code should be executed to see what is consuming all the execution time. A quick scan revealed that the problem doesn't seem to be coming from the sampling or mean estimation per se, so there must be some other operation in the code that is time-consuming and probably can be replaced.
More exploration is needed.

@facusapienza21 is this running already in parallel? I can take that in the short/mid term otherwise

@LenGallo this is currently running in parallel. The problem with the total running time cames from the time required to sample Fisher and TK03. Here a short demo:

tk03 sampling: 180 +- 20 ms clock time.

%%timeit
_ = ipmag.tk03(n=100, dec=0, lat=20, rev='no', G1=-18e3, G2=0, G3=0, B_threshold=0);

Fisher sampling: 32 +- 9 ms clock time.

%%timeit
_ = ipmag.fishrot(k=40, n=100, dec=0, inc=0, di_block=False);

I do think we can do this more efficiently, since the current numpy samplers are much faster, by three orders of magnitude.

Multivariate Gaussian:  18 +- 3 microseconds

%%timeit
_ = np.random.normal(size=(3,100));

I think the samplers for the fisher and tk03 can be improved to run this fast. For the Fisher, there are ways of sampling Fisher directly from gaussian, which will make the fisher sampler run at the same order of magnitude than the gaussian sampler.
Another solution is to generate a large sample from tk03 and Fisher (~10000) with given paleolatitude and dispersion, saved it in memory and then subsample from this to generate high resolution plots as we move n and N in the simulations. This is not going to change the final result, but it's not the most elegant solution.
Maybe we can take a look to the implementation of the Fisher / TK03 sampler? @Swanson-Hysell @LenGallo ?

Ok, I follow a rabbit hole here but I think I discovered a way of doing the Fisher sampling faster.
The sampling of the Fisher distribution is done collectively by pmag.fshdev() and ipymag.fishrot(). Both functions had being desing to make more than one sample, but right now that feature is not exploted and the sampling of the Fisher samples is done one by one using np.random instead of one single call to np.random with a generation of all the samples at once. Here a demostrations.
These are the original funcions:
import numpy as np
from numpy import random
import pmagpy.pmag as pmag

def fshdev(k):
    """
    Generate a random draw from a Fisher distribution with mean declination
    of 0 and inclination of 90 with a specified kappa.
    Parameters
    ----------
    k : single number or an array of values
        kappa (precision parameter) of the distribution
    Returns
    -------
    dec, inc : declination and inclination of random Fisher distribution draw
               if k is an array, dec, inc are returned as arrays, otherwise, single values

    Examples
    --------
    >>> pmag.fshdev(8)
    (334.3434290469283, 61.06963783415771)
    """
    k = np.array(k)
    if len(k.shape) != 0:
        n = k.shape[0]
    else:
        n = 1
    R1 = random.random(size=n)
    R2 = random.random(size=n)
    L = np.exp(-2 * k)
    a = R1 * (1 - L) + L
    fac = np.sqrt(-np.log(a)/(2 * k))
    inc = 90. - np.degrees(2 * np.arcsin(fac))
    dec = np.degrees(2 * np.pi * R2)
    if n == 1:
        return dec[0], inc[0]  # preserve backward compatibility
    else:
        return dec, inc

def fishrot(k=20, n=100, dec=0, inc=90, di_block=True):
    """
    Generates Fisher distributed unit vectors from a specified distribution
    using the pmag.py function pmag.fshdev() and pmag.dodirot() functions.
    Parameters:
        k : kappa precision parameter (default is 20)
        n : number of vectors to determine (default is 100)
        dec : mean declination of distribution (default is 0)
        inc : mean inclination of distribution (default is 90)
        di_block : this function returns a nested list of [dec,inc,1.0] as the default
        if di_block = False it will return a list of dec and a list of inc
    Returns:
        - di_block, a nested list of [dec,inc,1.0] (default)
        - dec, inc, a list of dec and a list of inc (if di_block = False)
    Examples:
        >>> ipmag.fishrot(k=20, n=5, dec=40, inc=60)
        [[44.766285502555775, 37.440866867657235, 1.0],
        [33.866315796883725, 64.732532250463436, 1.0],
        [47.002912770597163, 54.317853800896977, 1.0],
        [36.762165614432547, 56.857240672884252, 1.0],
        [71.43950604474395, 59.825830945715431, 1.0]]
    """
    directions = []
    declinations = []
    inclinations = []
    if di_block == True:
        for data in range(n):
            d, i = fshdev(k)
            drot, irot = pmag.dodirot(d, i, dec, inc)
            directions.append([drot, irot, 1.])
        return directions
    else:
        for data in range(n):
            d, i = fshdev(k)
            drot, irot = pmag.dodirot(d, i, dec, inc)
            declinations.append(drot)
            inclinations.append(irot)
        return declinations, inclinations

We can see there are two for loops nested in fishrot(). I rewrite this funciton to make one single call to the random generator funcion and make the rotation of all the directions at once:
def fishrot_fast(k=20, n=100, dec=0, inc=90, di_block=True):
    """
    Generates Fisher distributed unit vectors from a specified distribution
    using the pmag.py function pmag.fshdev() and pmag.dodirot() functions.
    Parameters:
        k : kappa precision parameter (default is 20)
        n : number of vectors to determine (default is 100)
        dec : mean declination of distribution (default is 0)
        inc : mean inclination of distribution (default is 90)
        di_block : this function returns a nested list of [dec,inc,1.0] as the default
        if di_block = False it will return a list of dec and a list of inc
    Returns:
        - di_block, a nested list of [dec,inc,1.0] (default)
        - dec, inc, a list of dec and a list of inc (if di_block = False)
    Examples:
        >>> ipmag.fishrot(k=20, n=5, dec=40, inc=60)
        [[44.766285502555775, 37.440866867657235, 1.0],
        [33.866315796883725, 64.732532250463436, 1.0],
        [47.002912770597163, 54.317853800896977, 1.0],
        [36.762165614432547, 56.857240672884252, 1.0],
        [71.43950604474395, 59.825830945715431, 1.0]]
    """
    directions = []
    declinations = []
    inclinations = []
    if di_block == True:
        declinations, inclinations = fshdev(np.repeat(k, n))
        Block = np.array([declinations, inclinations, np.repeat(1, n)]).T
        res = pmag.dodirot_V(Block, np.repeat(dec, n), np.repeat(inc, n))
        # for data in range(n):
        #     d, i = fshdev(k)
        #     drot, irot = pmag.dodirot(d, i, dec, inc)
        #     directions.append([drot, irot, 1.])
        # return directions
        return res[:,0], res[:,1]
    else:
        for data in range(n):
            d, i = fshdev(k)
            drot, irot = pmag.dodirot(d, i, dec, inc)
            declinations.append(drot)
            inclinations.append(irot)
        return declinations, inclinations

With this new implementation, we observe a significant improvement of the sampling:

Original Fisher sampling implementation: 34.7 +- 7.27 ms

%%timeit
res_slow = fishrot(n=100, k=20);

New implementation: 350 +- 77 microsec

%%timeit
res_fast = fishrot_fast(n=100, k=20);

I will probably use this sampling for the simulations, but I wonder if it makes sense to make a PR to Pmagpy with this in the future. @Swanson-Hysell ?

Nice to get a two order of magnitude speed up! This should help matters.
Yes. Putting in a pull request to PmagPy makes sense.
It looks like it would be good to pull the generation of the samples out of the if di_block == True: if/else statement. The samples can be pulled in this more efficient way and then they can either be returned as the nested list or the declinations, inclinations list.
Can we change the name of the internal Block array to be something more informative. Say resampled_di and we could have res be resampled_di_rotated?

authors: LenGallo Swanson-Hysell facusapienza21

repo: PolarWandering/PaleoSampling


text:
Prevent stopLeScan from being called before startLeScan.

It is a proposed solution to fix https://github.com/Polidea/RxAndroidBle/issues/17

Ok I've added monitors and used AtomicBoolean because synchronized should be used with final fields. Scan is not a thing that will be called really frequently (like in a loop) so I think that performance is not such a big deal here.

repo: Polidea/RxAndroidBle


text:
npm install takes about 5 minutes to run

I have a RN project with bunch of native library but this library exclusively takes about ~3-5 minutes when running npm install the first time.
It looks like the native compilation is the reason of this (RxSwift complication, etc)
Is there a way libraries can be precompiled? like some sort of node-gyp prebuild equivalent? 🤔
Thanks

There is one thing which can be improved:

By updating binary releases used by Carthage we end up only compiling BLE framework. All dependencies are cached.

Additionaly we can:

Try to use static Swift framework to move compiling step to building process. That's how ObjC is working in most libraries.

Wait for Swift ABI to stabilize and use prebuild frameworks. Unfortunately it will take a while.

Another possibility is to reimplement API using just one Swift static library without any dependencies such as RxBluetoothKit.

Use yarn add, it is faster than npm install.

@pulkonet i think yarn add is as slow as npm install regarding this problem. the same postinstall will run which is taking long time to compile. I actually was using yarn when i created this issue ;)

authors: Cierpliwy gre pulkonet

repo: Polidea/react-native-ble-plx


text:
using javascript core functions

Why I can't use javascript core functions like String.fromCharCode directly inside double-mustache?

Polymer currently only supports using inline functions defined on the element prototype, for simplicity.
Marking this as an enhancement request for now.  In the meantime, you can do
{{fromCharCode(foo)}}

and
fromCharCode: function(val) {
   return String.fromCharCode(val);
}

If you'd like to use that in a lot of elements, you can define fromCharCode in a behavior that is shared among multiple elements.

Thanks... It would be great if this enhancement is implemented in future release.

authors: kevinpschaaf zishanj

repo: Polymer/polymer


text:
Suspicious request

Sorry, your request could not be completed because it looked suspicious. If you meant to perform an action on Stack Overflow, please return to the previous page and try again.

HelpDesk(((18009190992)))QuickBooks enterprise support phone number// quickbooks pro help desk phone number//quickbooks payroll tech support phone number##quickbooks technical support phone number##~~
#Quickbooks Tech Support Phone +1 800 919 0992 Number Quickbooks customer service number
#Quickbooks Tech Support Phone +1 800 919 0992 Number Quickbooks customer support number
QuickBooks Toll Free, Intuit@(1-800-919-0992)@-: QuickBooks Tech Support Phone Number provides online solution for all USA/CANADA clients. For any help of query call 1 800 919 0992 to get all QuickBooks account solution.
@@Call, 1-800-919-0992 for all type help by QuickBooks tech support phone number, Intuit QuickBooks Tech Support Phone Number, QuickBooks Help Desk Phone Number, QuickBooks tech support number, QuickBooks technical support phone number,@@@ QuickBooks phone number, QuickBooks technical support number, QuickBooks support phone number, QuickBooks technical support, QuickBooks Customer Service Phone Number, QuickBooks Customer Service Number, QuickBooks Customer Support Phone Number, QuickBooks Customer Support Number,@@@@ QuickBooks Customer Service Helpline Number, QuickBooks Customer Care Number, QuickBooks support team phone number, @@@@@
QuickBooks help number-QuickBooks Helpline Number; QuickBooks help phone number-QuickBooks Helpline Number, QuickBooks Tech Support Toll free Number, QuickBooks Support Telephone Number, QuickBooks Tech Support Telephone number, QuickBooks Tech Support contact number, QuickBooks support contact number, QuickBooks technical support contact number.
Call, QuickBooks tech support phone number, Intuit QuickBooks Tech Support Phone Number, QuickBooks Help Desk Phone Number, QuickBooks tech support number, QuickBooks technical support phone number, QuickBooks phone number, QuickBooks technical support number, QuickBooks support phone number.
It is very popular toll free number which provide by QuickBooks technical support, QuickBooks Customer Service Phone Number, QuickBooks Customer Service Number, QuickBooks Customer Support Phone Number, QuickBooks Customer Support Number, QuickBooks Customer Service Helpline Number, QuickBooks Customer Care Number, QuickBooks support team phone number.
Call, QuickBooks tech support phone number, Intuit QuickBooks Tech Support Phone Number, QuickBooks Help Desk Phone Number, QuickBooks tech support number, QuickBooks technical support phone number, QuickBooks phone number, QuickBooks technical support number, QuickBooks support phone number, QuickBooks technical support, QuickBooks Customer Service Phone Number, QuickBooks Customer Service Number, QuickBooks Customer Support Phone Number, QuickBooks Customer Support Number, QuickBooks Customer Service Helpline Number, QuickBooks Customer Care Number, QuickBooks support team phone number,
QuickBooks help number-QuickBooks Helpline Number; QuickBooks help phone number, QuickBooks Helpline Number, QuickBooks Tech Support Toll free Number, QuickBooks Support Telephone Number, QuickBooks Tech Support Telephone number, QuickBooks Tech Support contact number, QuickBooks support contact number, QuickBooks technical support contact number, quickbooks pro support phone number, quickbooks payroll support phone number. quickbooks payroll customer support phone number
QuickBooks Support Helpline Number, QuickBooks contact number
QuickBooks tech support phone number
Intuit QuickBooks Tech Support Phone Number
QuickBooks Help Desk Phone Number
QuickBooks tech support number
QuickBooks technical support phone number
QuickBooks phone number
QuickBooks technical support number
QuickBooks support phone number
QuickBooks technical support
QuickBooks Customer Service Phone Number
QuickBooks Customer Service Number
QuickBooks Customer Support Phone Number
QuickBooks Customer Support Number
QuickBooks Customer Service Helpline Number
QuickBooks Customer Care Number
QuickBooks support team phone number
QuickBooks help number
QuickBooks Helpline Number
QuickBooks help phone number
QuickBooks Helpline Number
QuickBooks Tech Support Toll free Number
QuickBooks Support Telephone Number
QuickBooks Tech Support Telephone number
QuickBooks Tech Support contact number
QuickBooks support contact number
QuickBooks technical support contact number.
QuickBooks Support Helpline Number
QuickBooks contact number
1800-919-0992 quickbooks technical help telephone number, quickbooks technical help contact number, quickbooks technical support contact number, quickbooks contact number, quickbooks contact phone number, quickbooks contact telephone number, quickbooks 24 hour contact number, quickbooks customer support contact number, quickbooks customer service contact number, quickbooks official number, quickbooks official contact number, quickbooks 800 contact number, quickbooks toll free number, 800 number for quickbooks support, quickbooks 24/7 support phone number
QuickBooks PRO support phone number,QuickBooks PRO support phone number,QuickBooks PRO help phone number, QuickBooks PRO technical support number.QuickBooks PRO support number, QuickBooks PRO phone number, QuickBooks PRO tech support number, QuickBooks PRO customer support number, QuickBooks PRO customer support phone number, QuickBooks PRO customer service phone number, QuickBooks PRO payroll customer service phone number, QuickBooks PRO support phone number.
Help@Call 1-800-919-0992/.quickbooks 24/7 support phone number,quickbooks telephone number for support?
call 1800-919-0992@./quickbooks contact number, quickbooks contact phone number, quickbooks contact telephone number,,telephone number for quickbooks online support,quickbooks official support number,quickbooks official number,quickbooks payroll official phone number,,,phone number for quickbooks payroll support,,quickbooks 24/7 support phone number,,quickbooks support number,quickbooks telephone number for support
@@Call, 1-800-919-0992 for all type help by QuickBooks PRO support telephone number,QuickBooks PRO support phone number,QuickBooks PRO support phone number,QuickBooks PRO help phone number, QuickBooks PRO technical support number.QuickBooks PRO support number, QuickBooks PRO phone number, QuickBooks PRO tech support number, QuickBooks PRO customer support number, QuickBooks PRO customer support phone number, QuickBooks PRO customer service phone number, QuickBooks PRO payroll customer service phone number, QuickBooks PRO support phone number
QuickBooks PRO help number-QuickBooks PRO Helpline Number; QuickBooks PRO help phone number-QuickBooks PRO Helpline Number, QuickBooks PRO Tech Support Toll free Number, QuickBooks PRO Support Telephone Number,
1.800.919.0992 quickbooks phone number, quickbooks support phone number, quickbooks support number, quickbooks tech support number, quickbooks technical support number, quickbooks customer support number, quickbooks phone number usa.


text:
how importHref force re-request.

Description

Page returned from the offline to the online state, the original request error page(404) can not be requested again.
Live Demo

https://jsbin.com/xukike/edit?html,output
Steps to Reproduce

Expected Results

Actual Results

Browsers Affected

[x] Chrome
[ ] Safari 8
[ ] Firefox
[ ] Edge
[ ] Safari 9
[ ] IE 11

Versions

Polymer: v1.6.1
webcomponents: vX.X.X

Please post a jsbin that repos the issue and reopen when you do.

@ebidel https://jsbin.com/foduvubici/edit?html,console,output

Thanks for that. Looks like this is because imporHref maintains an internal cache (https://github.com/Polymer/polymer/blob/06bc9dbe34042268b94e60374910b6d6ce1ae3d7/src/standard/utils.html#L395).

authors: Gaubee TimvdLippe ebidel


text:
gift shopping demo is broken

to reproduce:

accept 'Show products from your browsing context (Minecraft Book plus 2 other items) and choose from products recommended based on products from your browsing context and Claire's wishlist (Book: How to Draw plus 2 other items).' suggestion
click Add button on any of the recommended products
results in exception:

firebase.4.2.0.js:321 Uncaught (in promise) Error: Reference.child failed: First argument was an invalid path = "arcs/-LG2bLR_NCDhLflqWMqy/shim_handles/shortlist/data/manifest:./../../artifacts/Products/Products.recipes::3". Paths must be non-empty strings and can't contain ".", "#", "$", "[", or "]"
    at G (firebase.4.2.0.js:321)
    at e.child (firebase.4.2.0.js:321)
    at change.add.forEach.record (cloud-handles.js:144)
    at Array.forEach (<anonymous>)
    at HTMLElement._localSetChange (cloud-handles.js:142)
    at handle.on.change (cloud-handles.js:120)
    at InMemoryCollection._fire (storage-provider-base.js:66)
    at InMemoryCollection.store (in-memory-storage.js:141)
    at PECOuterPort.ParticleExecutionHost._apiPort.onHandleStore (particle-execution-host.js:60)
    at PECOuterPort._handle (api-channel.js:178)

What are the shim_handles in the id? Is this a new shell thing?

Note that the _localSetChange code has been around for 2 months: https://github.com/PolymerLabs/arcs/blame/master/shell/app-shell/elements/cloud-data/cloud-handles.js#L144 - why is this only surfacing now?

2 months is a long time, i'm inclined to think that i tried it since (but yeah, we need a selenium test for it too).
@sjmiles Scott, any ideas of anything else that might have changed and affected it?

shim_handles [sic, these are stores] has been around forever (with different names). This is the property of an Arc record that the shell uses to persist store data in Firebase.
I can't see why Myk's mods wouldn't work, but I'll take a look.
I also can't think of any recent change that would have caused this.

The problem has in fact been there since Scott's big merge. Going back to the merge commit (4d492123) still shows the error, testing at the commit prior to that (f56c61ec) doesn't.

Thanks Myk. I believe the reason it's not affecting more Arcs is because the Gifts demo is using static data embedded inside of a Manifest, which is statistically unusual.

@mykmartin can you provide me with the custom function that maps .#$[]% to the usual %<hex> notation?

So, any kind of blanket encoding will be a problem for the existing corpus of Arc data, unless we also encode some kind of sentinel bytes, but this seems like more trouble than it's worth.
My top priority remains turning off shim-handles anyway in favor of runtime storage, so I'm leaning towards a simple patch.
Forcing all '.' and '/' to '%' seems to work, I may just push that.

That doesn't work for me; I get the following error whether I use the "full" encoding or just the simple ./ replacement:
Uncaught (in promise) TypeError: Cannot read property 'set' of undefined
    at models.forEach (xen-template.js:304)
    at Array.forEach (<anonymous>)
    at _renderSubtemplates (xen-template.js:291)
    at _setSubTemplate (xen-template.js:284)
    at _set (xen-template.js:250)
    at set (xen-template.js:224)
    at Object.set (xen-template.js:343)
    at DomContext.updateModel (dom-context.js:81)
    at DomSlot._doRender (dom-slot.js:109)
    at DomSlot.setContent (dom-slot.js:99)

My change is:
  _localSetChange(handle, path, change, remoteValue) {
    log('localSetChange', change);
    let xfn = s => {
      if (s) {
        let o = s;
        //s = s.replace(/[./]/g, '%')  // for ./ -> %
        s = s.replace(/%/g, '%25');
        s = s.replace(/#/g, '%23');
        s = s.replace(/\$/g, '%24');
        s = s.replace(/\./g, '%2E');
        s = s.replace(/\[/g, '%5B');
        s = s.replace(/\]/g, '%5D');
        s = s.replace(/\//g, '%2F');
        console.log(o, '->', s);
      }
      return s;
    };
    if (change.add) {
      change.add.forEach(record => {
        log('trigger: local add', record);
        Firebase.db.child(`${path}/data/${xfn(record.id)}`).set(ArcsUtils.removeUndefined(record));
      });
    } else if (change.remove) {
      change.remove.forEach(record => {
        log('trigger: local remove', record);
        Firebase.db.child(`${path}/data/${xfn(record.id)}`).remove();
      });
    } else {
      warn('Unsupported "handle.change" event', change);
    }
  }

I'm running webpack, returning to the launcher (using index.debug.html), reloading and creating a new arc between every change.

This is actually working, in the sense that the you have achieved the next exception (which is due to a ill-formed subtemplate in ShowCollection.js). Fwiw, there is another PR en route to tolerate and warn on the bad subtemplate condition.

I'm running webpack, returning to the launcher (using index.debug.html), reloading and creating a new arc between every change.

Fwiw, reloading with a clean cache is all you have to do when you modify shell-side code.

This is actually working, ...

:D

Fwiw, reloading with a clean cache is all you have to do when you modify shell-side code.

I did think that was the case, but just wanted to rule out any possible side effects. Also, I wasn't sure if my changes to the firebase path encoding would persist (in firebase) between reloads of the same arc, hence the new arc each time.

The primary issue is resolved, although the method used for cleaning Firebase keys is somewhat dubious. Closing for now.

authors: mmandlis mykmartin shans sjmiles

repo: PolymerLabs/arcs


text:
Replace files property with config property

Previously, you could only get/set the state of a playground with the files property. However, this means there's no way to directly set or access the importMap config, or other settings we may add in the future. Now there's a config property instead, which has exactly the same type as the JSON config.

LGTM. Change seems ok. Why did it not affect tests?

Because there wasn't a test that covered setting the files property. Added a new one that covers the new config property.

repo: PolymerLabs/playground-elements


text:
Requests and new ideas for updates! 🚀

Hay Developer I like and Salute your work, please add Memefi, Yescoin, Ocean coin, Pixelversexyz, and Vertus, W coin and Blum Bot thanks

@Pawansingh333 Hello. Thank you. We will definitely try to add all the games.

Thanks for replying. Please, developer, make your code multi-account capable. Write the code in such a way that it can fetch accounts one by one from phone.txt or phone.csv, and save the session in the sessions folder so that we don't have to log in repeatedly

Hey dew .Add multiple acc support option .Can you please connect with me on telegram?  https://t.me/byefriends ..
If we can see Bots logs by telegram .I think it is user friendly .
Make a telegram support  group to discuss and help others .
Many Repos have Heroku build up plugins .Add them to this repo .Heroku is a userfriendly Platform. This is a vary valuable Repo At this time .Very much thanks .
please add
Yescoin ,Tapswap,Hamster Kombat ,CEX io Tap @ loot , Click ARBUZ, Memefi ,Botcoin ,w Coin ,Blum ,Aqua Protocol ,Catizen AI Bots

Blum ++

Wigwam Drum Game @drumtap_bot is similar to Cexio in terms of design and backend API calls. I think this is the easiest addition since we already have Cexio.

Are you ready for multi-account capability? With the lowest possible memory consumption! And also managing clickers via Telegram! 🔥😉

Are you ready for multi-account capability? With the lowest possible memory consumption! And also managing clickers via Telegram! 🔥😉

What a surprise Brother ..There are some bots that follow the tapping action like TapSwapBot..How about adding capability with this repo .... Tapping bots ...http://t.me/wmclick_bot    ,    https://t.me/memefi_coin_bot https://t.me/dotcoin_bot   , https://t.me/wcoin_tapbot
please increase the range and capability in all in one repo by adding these tapping bots

The multi-account feature has been added to the script.
Memory consumption also decreased.

@prohacker1024 Sure! From now on, I will put more focus on adding new robots for sure!

And also managing clickers via Telegram! 🔥😉

How can we do this?

are u on old repo or new repo ?

is there any way we can reduce mining timer

@dunno10-a Please read the read.me section for multi-account. And after running the script for multi-account, send the command /start or /help to the bot you created.

@dunno10-a Please read the read.me section for multi-account. And after running the script for multi-account, send the command /start or /help to the bot you created.

We are waiting  "blum_clicker": "on"   -> config.json

We are waiting "blum_clicker": "on" -> config.json

same

how to fix?

 how to fix?

Use python3.10

@august1508 @prohacker1024
Use python 3.10

@THMaST3R First, the Blum 🤖

Add /upgrade feature where we can upgrade the code to the latest version without losing all added clients (i tried copy pastiong cache and sessions folder to the new code and its not working) [something like: subprocess.check_output(["git", "pull"]).decode("UTF-8")] and a restart

Add /upgrade feature where we can upgrade the code to the latest version without losing all added clients (i tried copy pastiong cache and sessions folder to the new code and its not working) [something like: subprocess.check_output(["git", "pull"]).decode("UTF-8")] and a restart

@Poryaei  this is a good idea . if you can add /upgrade and , /restart or /reboot with this ,it will become userfrinedly

and its not working
There should be no problem or you are not transferring the "cache " folder correctly!

And thank you, I will add the idea. 🙏

and its not working

There should be no problem or you are not transferring the "cache " folder correctly!

i am transferred the whole cache file, and it's showing "mainapp Starting" only for all clients

@hybridvamp So the code is working.

@Poryaei
Amazing repo!
Some new features that can leverage the code 10X:

Adding new accounts within the telegram bot  (something like : /add_account  phone_number)
Support more clickers (Blum,Yescoin,Duckcoin,Catizen....)
Probably a step-by-step guide for developers that'll help them contribute and expand the code

@Poryaei
Is it possible to send Logs through the bot - so, I can actually see what is happening with my accounts instead of simple "Start Tapping"

@Poryaei Is it possible to send Logs through the bot - so, I can actually see what is happening with my accounts instead of simple "Start Tapping"

Connect with @Poryaei  and develop the repo more ..Increase the repo range by adding more coin bots .work with together

@k-pypin you can add a few extra line of code to do that but be aware that it would make a the server runtime heavier and your bot would be super recursive, which again you can adjust how you want to get the logs

Hi @Poryaei,
Thank you so much for all your hard work! I initially used Android Emulators for this, but I no longer need them.
I have a new idea for an update: In Blum, there is a "Tasks" tab where tasks need to be claimed manually. It would be great if we could automate the task claiming process. What do you think?
I also have another idea for implementation, though it might seem quite complex. As you know, in the Hamster game, there are temporary cards that temporarily increase the hourly profit. My strategy is that when such cards appear, I do not want to invest in any other permanent cards because once the temporary card's time runs out, I will never be able to activate it again, thus losing the opportunity to increase the hourly profit.
Therefore, it might be possible to add a toggle in the config file, something like hamster_timecard_priority=16 (or 0 if the user is not interested in focusing on temporary cards), where 16 is the maximum level to which the cards should be upgraded before moving on to the standard most profitable card calculation (for which I say bravo, I used to do this in an Excel spreadsheet!).
And forgive me for being persistent, but I have a third idea for implementation: To upgrade temporary cards, a minimum accumulated amount is required, say 100 million. I would like this to be the minimum balance below which the permanent card calculator does not go. Currently, this threshold is 0, meaning the calculator does not consider options if the balance would be negative after a purchase.
So, I always keep 100 million on hand for when a temporary card appears, and as soon as it is active, all available funds go towards upgrading it to the set limit, for example, level 16. After that, if my balance is less than 100 million, the bot does not buy anything and waits to accumulate the "rainy day" fund.
P.S. The appearance of temporary cards is a relatively new phenomenon. Previously, I didn't notice them. If their duration is 24 hours, the current bot configuration will only upgrade it to level 5-6, and then it will calculate the most profitable card along with the permanent ones.
Sorry for the lengthy message; I hope my suggestions seem interesting to you.

In addition to the above, I would like to inquire about your thoughts on the use of proxies. I did not find these settings in the script. Games might detect multiple accounts playing from the same IP address, which could lead to bans. What do you think about this?

BTW, You can add proxy by yourself (I use iproyal ) by 2+- line of code

In addition to the above, I would like to inquire about your thoughts on the use of proxies. I did not find these settings in the script. Games might detect multiple accounts playing from the same IP address, which could lead to bans. What do you think about this?

@Poryaei Is it possible to send Logs through the bot - so, I can actually see what is happening with my accounts instead of simple "Start Tapping"

I use docker for build my python code, and it's give me opportunity to see my logs like this:

@Poryaei Is it possible to send Logs through the bot - so, I can actually see what is happening with my accounts instead of simple "Start Tapping"

I use docker for build my python code, and it's give me opportunity to see my logs like this:

Can you please share the Docker(DockerFile) script?  Thanks!

@Poryaei Is it possible to send Logs through the bot - so, I can actually see what is happening with my accounts instead of simple "Start Tapping"

I use docker for build my python code, and it's give me opportunity to see my logs like this:

Can you please share the Docker(DockerFile) script? Thanks!

Yea
Dockerfile
FROM python:3.10-slim

WORKDIR /app

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python", "main.py"]

docker-compose.yml
version: '3.8'

services:
  app:
    build: .
    container_name: telegram_auto_bot
    volumes:
      - ./cache:/app/cache
      - ./sessions:/app/sessions
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - PYTHONUNBUFFERED=1
      - CONTAINER_NAME=telegram_auto_bot
    command: python main.py

@Poryaei can you fix tapswap ? i found this working code https://github.com/MyJellyfin/TapSwapBot

@Poryaei  Useful Sleeping strategy to reduce resource usage in this implementation, please take a look and maybe useful for integration: https://github.com/Alexell/XEmpireBot

authors: AbbyTheGod ElyasMoshirpanahi Pawansingh333 Poryaei august1508 glushko hybridvamp k-pypin khosrowkhazraei nickyharpor prohacker1024 sonaxpro xDaijobu

repo: Poryaei/All-In-One


text:
Help Return

Correct the help return to display data better and to make sure all the appropriate data is displayed

This is complete.
Also created a hidden group to remove events you want hidden from the -help command

repo: Poseidon-Dev/wadsworth


text:
Fix capture when no properties are set

If no properties are set on the outgoing event, the code fails with Cannot convert undefined or null to object.
Fix this by substituting an empty object if undefined.

Works fine

repo: PostHog/posthog-zapier