Null pointer check via “myPtr > 0”

In some legacy code I came across the following null pointer check.

if( myPtr > 0 ) {

}

Answer 1:

Are there any technical risks of checking for a null pointer via this if-check?

Ordered comparison between a pointer and an integer is ill-formed in C++ (even when the integer is a null pointer constant such as it is in this case). The risk is that compilers are allowed to, and do, refuse to compile such code.

You can rewrite it as either of these:

if(myPtr != nullptr)
if(myPtr)

Running a fine-tune model for my CNN : Value Error

So I am trying to use a pre-trained model on my data set to then compare it to my own cnn model. However, I see an error as soon as I try to do model. fit so much that ((None, 4, 4, 1) vs (None,)). Where is this error coming from? Am I supposed to edit the pre-tune cnn.

The model that I am using is ResNET50 with no modification except the input layer changed to 128 and there are 2 outputs.

Any help is welcome,

CODE:
history = modelB.fit_generator(train_data,
validation_data = test_data,
epochs=5,
steps_per_epoch = 1714,)

ERROR

---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
in ()
2 validation_data = test_data,
3 epochs=5,
----> 4 steps_per_epoch = 1714,)

2 frames
/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/func_graph.py in autograph_handler(*args, **kwargs)
1145 except Exception as e: # pylint:disable=broad-except
1146 if hasattr(e, "ag_error_metadata"):
-> 1147 raise e.ag_error_metadata.to_exception(e)
1148 else:
1149 raise

ValueError: in user code:

File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1021, in train_function *
return step_function(self, iterator)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1010, in step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1000, in run_step **
outputs = model.train_step(data)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 860, in train_step
loss = self.compute_loss(x, y, y_pred, sample_weight)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 919, in compute_loss
y, y_pred, sample_weight, regularization_losses=self.losses)
File "/usr/local/lib/python3.7/dist-packages/keras/engine/compile_utils.py", line 201, in __call__
loss_value = loss_obj(y_t, y_p, sample_weight=sw)
File "/usr/local/lib/python3.7/dist-packages/keras/losses.py", line 141, in __call__
losses = call_fn(y_true, y_pred)
File "/usr/local/lib/python3.7/dist-packages/keras/losses.py", line 245, in call **
return ag_fn(y_true, y_pred, **self._fn_kwargs)
File "/usr/local/lib/python3.7/dist-packages/keras/losses.py", line 1932, in binary_crossentropy
backend.binary_crossentropy(y_true, y_pred, from_logits=from_logits),
File "/usr/local/lib/python3.7/dist-packages/keras/backend.py", line 5247, in binary_crossentropy
return tf.nn.sigmoid_cross_entropy_with_logits(labels=target, logits=output)

ValueError: `logits` and `labels` must have the same shape, received ((None, 4, 4, 1) vs (None,)).

Answer 1:

The Issue is with the loss function used when you compile the model.

Replace the compile with below code:

model.compile(optimizer='adam',loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy'])

Answer 2:

Use tf.keras.utils.plot_model to print out a graphic representation of the model. you have a mismatch between the number of input and output nodes.

Bitbucket Cloud recently stopped supporting account passwords for Git authentication

The Problem

I have pushed the code in the morning it was working fine but now I’m trying to push the code but getting this error: Bitbucket Cloud recently stopped supporting account passwords for Git authentication

Answer 1:

I’ve also faced this issue.

  1. Then I opened my Bitbucket account. 2)Then at the bottom left corner you will find an icon with your username’s initials. 3)Click on that and go to settings and click on Personal Settings 4)In personal Settings, in the left panel you will find “access management”
  2. Under that, you will find “app passwords”
  3. Click on that –> Then you will be routed to create an app password page
  4. There you can give the required permissions and create a password (Note: You have to store that password somewhere as it will be displayed only once) 8)When you push the code to any repo…use your app password instead of your account password (No need to change any settings in the git_config file)

Happy programming :)!

Action requested: Declare your Ad ID permission

The Problem:

Today I have got this email:

Last July, we announced Advertising policy changes to help bolster security and privacy. We added new restrictions on identifiers used by apps that target children. When users choose to delete their advertising ID in order to opt out of personalization advertising, developers will receive a string of zeros instead of the identifier if they attempt to access the identifier. This behavior will extend to phones, tablets, and Android TV starting April 1, 2022. We also announced that you need to declare an AD_ID permission when you update your app targeting API level to 31 (Android 12). Today, we are sharing that we will give developers more time to ease the transition. We will require this permission declaration when your apps are able to target Android 13 instead of starting with Android 12.

Action Items If you use an advertising ID, you must declare the AD_ID Permission when your app targets Android 13 or above. Apps that don’t declare the permission will get a string of zeros. Note: You’ll be able to target Android 13 later this year. If your app uses an SDK that has declared the Ad ID permission, it will acquire the permission declaration through manifest merge. If your app’s target audience includes children, you must not transmit Android Advertising ID (AAID) from children or users of unknown age.

My app is not using the Advertising ID. Should I declare the AD_ID Permission in Manifest or not?

Answer 1:

If your app uses the Google Mobile Ads SDK(Admob) version 20.4.0 or higher, you can skip setting up the permission manually since the SDK automatically declares it

More information here:

https://developers.google.com/admob/android/quick-start

ImportError: cannot import name ‘safe_str_cmp’ from ‘werkzeug.security’

The problem

any ideas why this error?

my project was working fine, i copied it to an external drive and onto my laptop to work on the road, it worked fine. i copied back to my desktop and had a load of issues with invalid interpreters etc, so i made a new project and copied just the scripts in, made a new requirements.txt and installed all the packages, but when i run i get this error

Traceback (most recent call last):
File "E:\Dev\spot_new\flask_blog\run.py", line 1, in
from flaskblog import app
File "E:\Dev\spot_new\flask_blog\flaskblog\__init__.py", line 3, in
from flask_bcrypt import Bcrypt
File "E:\Dev\spot_new\venv\lib\site-packages\flask_bcrypt.py", line 21, in
from werkzeug.security import safe_str_cmp
ImportError: cannot import name 'safe_str_cmp' from 'werkzeug.security' (E:\Dev\spot_new\venv\lib\site-packages\werkzeug\security.py)

i’ve tried uninstalling python, anaconda, pycharm, deleting every reg key and environment variable i can find that looks pythonic, reinstalling all from scratch but still no dice.

any input greatly appreciated!

thanks

Answer 1:

Werkzeug released v2.1.0 today, removing werkzeug.security.safe_str_cmp.

You can probably resolve this issue by pinning Werkzeug~=2.0.0 in your requirements.txt file (or similar).

Share

Deprecation notice: ReactDOM.render is no longer supported in React 18

I get this error every time I create a new React App and I don’t know how to fix it:

Warning: ReactDOM.render is no longer supported in React 18. Use createRoot instead. Until you switch to the new API, your app will behave as if it’s running React 17. Learn more: https://reactjs.org/link/switch-to-createroot

I created my react app using: npx create-react-app my-app

Answer:

React 18 shipped yesterday (March 29th). ReactDOM.render has been deprecated in React18 and currently issues a warning and runs in a compatible mode.

Deprecations

Deprecations

  • react-dom: ReactDOM.render has been deprecated. Using it will warn and run your app in React 17 mode.
  • react-dom: ReactDOM.hydrate has been deprecated. Using it will warn and run your app in React 17 mode.
  • react-dom: ReactDOM.unmountComponentAtNode has been deprecated.
  • react-dom: ReactDOM.renderSubtreeIntoContainer has been deprecated.
  • react-dom/server: ReactDOMServer.renderToNodeStream has been deprecated

To resolve you can either revert to a previous version of React or update your index.js file to align with the React 18 syntax.
Example:

import { StrictMode } from "react";
import { createRoot } from "react-dom/client";

import App from "./App";

const rootElement = document.getElementById("root");
const root = createRoot(rootElement);

root.render(

);

ImportError: cannot import name ‘Markup’ from ‘jinja2’

When I recently deployed my project that includes Flask==1.0.2 and Jinja2>=2.10.1, I got the following error. It was running fine when I deployed it the previous day. I tried updating Jinja2 but that didn’t fix the issue.

 

requirements.txt:

attrs>=19.1.0
boto3==1.17.23
click==7.0
itsdangerous==2.0.1
flasgger==0.9.5
Flask==1.0.2
Flask-RESTful>=0.3.6
flask-cors==3.0.8
gunicorn==20.1.0
Jinja2>=2.10.1
jsonschema>=3.0.1,<4.0
marshmallow>=3.0,<=3.6
marshmallow3-annotations>=1.0.0
pytz==2021.1
requests>=2.25.0
requests-aws4auth==1.1.0
statsd==3.2.1
typing==3.6.4
werkzeug>=2.0.0
wheel==0.36.2
itsdangerous==2.0.1 Answer 1:

Version 3.0.1

Regarding the documentation

Fixed calling deprecated jinja2.Markup without an argument. Use markupsafe.Markup instead. #1438

So to import Markup use the following code :

>>> from jinja2.utils import markupsafe 
>>> markupsafe.Markup()
Markup('')

Answer 2:

As the import error comes from flask File "/usr/local/lib/python3.7/site-packages/flask/__init__.py

I tried to create a new Flask application using Flask==1.0.2 and found that the error comes from this version of Flask when it is used with Jinja2>=2.10.1.

But when you remove Flask==1.0.2 and install Flask==2.0.3, everything works fine.

pip uninstall  Flask Jinja2
pip install Flask Jinja2

Dependencies

pip freeze
click==8.0.4
Flask==2.0.3
itsdangerous==2.1.2
Jinja2==3.1.1
MarkupSafe==2.1.1
Werkzeug==2.0.3

How to solve Invalid credentials problem in Bitbucket?

Answer 1:

When prompted to login, use your username but instead of your usual account password, use the app password

to get app password

  1. Go to bitbucket.org website and login
  2. From your avatar in the bottom left, click Personal settings
  3. Click App passwords under Access management
  4. Click Create app password
  5. Give the app password sufficient rights, and a label related to the application that will use the password
  6. Don’t forget to save that password

 

Answer 2:

Who are getting here after 1 March 2022.

Beginning March 1, 2022, you will no longer be able to use your Atlassian account password when using Basic authentication with the Bitbucket Cloud REST API or Git over HTTPS.

  1. Go to: https://bitbucket.org/account/settings/app-passwords/
  2. Create app password
  3. Tick necessary permissions for your needs. Account Read and Repositories Read and Write are needed for basic git actions.
  4. Save the password, you can not view it again!
  5. Use the generated password to log in. You might need to use your Bitbucket username that you can find here: https://bitbucket.org/account/settings under “Bitbucket profile settings” (saw a post that told specifically to use the username don’t know if it is true).

More info about app passwords: https://support.atlassian.com/bitbucket-cloud/docs/app-passwords/

 

Answer 3:

If any Linux user facing same issue. Please follow the step given below.

  1. Go to bitbucket.org
  2. Click on login link
  3. At the bottom left, click on your avatar Icon(your profile picture).
  4. Then click personal setting or you can use this url(https://bitbucket.org/account/settings/) directly
  5. In Access Management section, click on App password link or you can go directly to this link(https://bitbucket.org/account/settings/app-passwords/)
  6. Click on Create App password button.
  7. Give the access rights as per your requirement.
  8. Click on create.
  9. You get the pop up with a password. Copy that password somewhere in your laptop/pc.(Given password will be difficult to remember).
  10. Now whenever your are performing a git operation like pull or push and if they asked for password. Instead on using your login password, you need to use above password(one which is generated by app password).

What does yield do in python

Shortcut to understanding yield

When you see a function with yield statements, apply this easy trick to understand what will happen:

  1. Insert a line result = [] at the start of the function.
  2. Replace each yield expr with result.append(expr).
  3. Insert a line return result at the bottom of the function.
  4. Yay – no more yield statements! Read and figure out code.
  5. Compare function to the original definition.

This trick may give you an idea of the logic behind the function, but what actually happens with yield is significantly different than what happens in the list-based approach. In many cases, the yield approach will be a lot more memory efficient and faster too. In other cases, this trick will get you stuck in an infinite loop, even though the original function works just fine. Read on to learn more…

Don’t confuse your Iterables, Iterators, and Generators

First, the iterator protocol – when you write


for x in mylist:
...loop body...

Python performs the following two steps:

 

  1. Gets an iterator for mylist:
  2. Call iter(mylist) -> this returns an object with a next() method (or __next__() in Python 3).
  3. [This is the step most people forget to tell you about]

 

  1. Uses the iterator to loop over items:
  2. Keep calling the next() method on the iterator returned from step 1. The return value from next() is assigned to x and the loop body is executed. If an exception StopIteration is raised from within next(), it means there are no more values in the iterator and the loop is exited.

The truth is Python performs the above two steps anytime it wants to loop over the contents of an object – so it could be a for loop, but it could also be code like otherlist.extend(mylist) (where otherlist is a Python list).

Here mylist is iterable because it implements the iterator protocol. In a user-defined class, you can implement the __iter__() method to make instances of your class iterable. This method should return an iterator. An iterator is an object with a next() method. It is possible to implement both __iter__() and next() on the same class, and have __iter__() return self. This will work for simple cases, but not when you want two iterators looping over the same object at the same time.

So that’s the iterator protocol, many objects implement this protocol:

  1. Built-in lists, dictionaries, tuples, sets, files.
  2. User-defined classes that implement __iter__().
  3. Generators.

Note that a for loop doesn’t know what kind of object it’s dealing with – it just follows the iterator protocol, and is happy to get item after item as it calls next(). Built-in lists return their items one by one, dictionaries return the keys one by one, files return the lines one by one, etc. And generators return… well that’s where yield comes in:


def f123():
yield 1
yield 2
yield 3

for item in f123():
print item

Instead of yield statements, if you had three return statements in f123() only the first would get executed, and the function would exit. But f123() is no ordinary function. When f123() is called, it does not return any of the values in the yield statements! It returns a generator object. Also, the function does not really exit – it goes into a suspended state. When the for loop tries to loop over the generator object, the function resumes from its suspended state at the very next line after the yield it previously returned from, executes the next line of code, in this case, a yield statement, and returns that as the next item. This happens until the function exits, at which point the generator raises StopIteration and the loop exits.

So the generator object is sort of like an adapter – at one end it exhibits the iterator protocol, by exposing __iter__() and next() methods to keep the for loop happy. At the other end, however, it runs the function just enough to get the next value out of it, and puts it back in suspended mode.

Why Use Generators?

Usually, you can write code that doesn’t use generators but implements the same logic. One option is to use the temporary list ‘trick’ I mentioned before. That will not work in all cases, for e.g. if you have infinite loops, or it may make inefficient use of memory when you have a really long list. The other approach is to implement a new iterable class SomethingIter that keeps the state in instance members and performs the next logical step in its next() (or __next__() in Python 3) method. Depending on the logic, the code inside the next() method may end up looking very complex and be prone to bugs. Here generators provide a clean and easy solution.

Could not GET ‘play-services-location/maven-metadata.xml’. Received status code 502 from server: Bad Gateway

It looks like a temporary issue, the server with these libraries is down. I have the same problem now with Room:

Could not GET 'https://google.bintray.com/exoplayer/androidx/room/room-common/maven-metadata.xml'. Received status code 502 from server: Bad Gateway

You can try using offline mode if you’re using Android Studio, then it will use the cached version of this library if you have it until it is fixed.

UPD. I switched to an alpha version of a flutter lib which caused this (workmanager) and it works well now. As far as I understand it was depending on an old version of Android Room library which is not available anymore since Bintray is not available. The new version of Room is available as it’s being downloaded thorough another link. So for you the solution could be updating to a newer version of Flutter location package or forking it and changing the version of play-services-location to the most recent one.