What is the state of the art setup for encrypted home directories which allow remote SSH login in 2022/2024?

Question: Question
What is the state of the art replacement for ecryptfs, while allowing user logins through SSH without a "master" full disk encryption (= FDE) password?
Context
A long time ago Ubuntu offered ecryptfs backed encrypted home directories in the installer. This was fine and allowed me to setup servers which I could power on through the power button or Wake on LAN and connect to the machine through SSH.
I have been told a few years ago that ecryptfs is not considered safe or state of the art any more. Although I can see that ecryptfs-utils is still available. So in theory I could continue setting up servers as before, until I encounter a serious problem.
I heard about Systemd-homed, but so far I have not heard a confirmation that this is a solution that Ubuntu developers and maintainers recommend or embrace.
I have also been using Dm-crypt/Mounting_at_login before switching to use the typical encrypted partitions layouts offered by the respective Linux distribution.
If you  are confused about my question and how this has worked in the past:
ls -1a /home/
.ecryptfs
my_user

ls -1a /home/.ecryptfs/
my_user

ls -1a /home/.ecryptfs/my_user/
.ecryptfs
.Private
.ssh

Some additional configuration was put in place to store the encrypted files of a user under /home/.ecryptfs/my_user/.Private. /home/.ecryptfs/my_user/.ecryptfs contained some scripts and metadata. /home/.ecryptfs/my_user/.ssh/authorized_keys contained unencrypted content, and eventually I create a symlink from /home/.ecryptfs/my_user/.ssh/authorized_keys to /home/my_user/.ssh/authorized_keys. Voila, remote SSH login without providing an FDE password. The rest was handled by ecryptfs. So if I could get a similar setup with state of the art technology and without any references to ecryptfs while it is not being used, that would be fantastic.
I can wait until 24.04 LTS is released if something is currently in the works that makes this easier.
With regards to security concerns: servers of this kind have a fixed location and will not be moved around like laptops. The door to the room is protected with an electronic lock (and api logging).
Requirements

At least the user data (home directory) on a server should be encrypted with state of the art and strong encryption.
Login on a machine with SSH should be possible
There should be no interruption in the boot up process of the server by a password prompt to unlock file systems

Technically I could use an iKVM, but I prefer to not do it for this use case
Pressing the power button or sending a Wake on LAN packet should be all that is required as far as hands on with the server is required between power on self test (POST) and completion of the boot process by starting SSHd.

I tried looking for different solutions, as you can see, but this seems to be a very specific use case that was once somewhat common knowledge but seems to have become buried under SEO, LLM and groupthink.

Edit 2023-10-19
Method 1

"TPM-backed full disk encryption"

Oh this is indeed brand new in Ubuntu and I didn't catch up with the news. https://ubuntu.com/blog/tpm-backed-full-disk-encryption-is-coming-to-ubuntu

Biggest drawback: remote access is a nightmare to set up.

Please tell me more about the nightmare.
The mainboard in this machine has a TPM header and the module is inexpensive. I would still consider pursuing this solution, even though I have been a strong opponent of TPM in the past.
No valuable data is supposed to be stored on the root and home volume in my setup.
Method 2 and Method 3
Okay, so I have my home directory encrypted, what do I need to do to be able to login remotely with SSH? I found some articles and discussions that suggested extending the configuration of SSHd to look in a different place for authorized_keys. With recent versions of SSH the following configuration fragment should be possible:
cat /etc/ssh/ssh_config.d/authorized_keys
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile /home/.ssh/%u/authorized_keys

I have not tested yet if this works.
/home/.ssh/%u/authorized_keys should translate to /home/.ssh/my_user/authorized_keys if we want to be consistent with my example above. It's similar to the convention used by ecryptfs and I wonder why I didn't think of it earlier.
Or did you intend to do something different? How to continue? Logging in with the SSH key doesn't automatically mount the volume, does it? Is there some consensus of what script to use, or perhaps a systemd functionality, or does everyone implement a script on their own (please don't :-( )?
Comment: "Is there some consensus of what script to use, or perhaps a systemd functionality, or does everyone implement a script on their own" In the long run, I'd bet on systemd-homed. I think it already supports mounting encrypted home directories on demand, and while Canonical may dither around and do a bit of NIH nonsense, they do tend to go with the mainstream in the end for desktop anyway (Unity v GNOME Shell, Mir v Wayland)
Comment: Some links I found while checking how people outside the Ubuntu community approach TPM FDE: https://blastrock.github.io/fde-tpm-sb.html https://docs.fedoraproject.org/en-US/quick-docs/encrypting-drives-using-LUKS/ https://fedoramagazine.org/automatically-decrypt-your-disk-using-tpm2/ Don't rely on my comments. I will clean up and remove my comments when I found a solution to my question.
Comment: One workaround may be not to encrypt the whole home, but to encrypt a "Private" folder/container for the sensitive files.
Comment: @muru I agree with your criticism.
Answer: There are 3 main methods. The 3rd one seems the easiest and most appropriate but just to be thorough all 3 ...
Method 1
"TPM-backed full disk encryption" is the method the installer supports. You need to do that from the installer. Biggest drawback: remote access is a nightmare to set up. During installation:

Erase disk and install Ubuntu option
check "Encrypt the new Ubuntu installation for security"
insert key

Loosing the key is fatal for the whole system.
Method 2
Encrypting only a partition then the current method would be using LUKS. You can no longer do this from the installer but it is rather easy to do after install. Biggest drawback: altering the size of the partition is annoying.
sudo cryptsetup luksFormat /dev/{device}

and setting an encryption key is all it takes. This allows you to boot but needs the encryption key if you do this using /home. I would keep /home as a directory inside / and use your encrypted partition only for personal data. Passphrase needed to open the partition but it does not stop booting and using then system.
Method 3
And then there is a virtual encrypted partition using LUKS. With this one you can boot and use your system. Passphrase only needed if you want to open the container. Setup:
dd if=/dev/zero of={dir/filename} bs=1M count=1024
sudo cryptsetup luksFormat {/dir/filename}

This is the most flexible method: extending the size is easy so it solves the partition encryption. Easy backup and easy transfer to another system if you need it for a new system.
Something I do: use a container, have a script inside the container. When container is opened execute script. Script puts files in the correct place (like ssh files, also works for gnome keyring if you don't want passwords on the system but I use a password safe myself). And those files get removed during boot, during shutdown, and when closing the container.

I found some articles and discussions that suggested extending the configuration of SSHd to look in a different place for authorized_keys

I circumvented this by not encrypting /home but this would indeed be a solution. SSH accepts this:
/etc/ssh/authorized_keys_{username}

where {username} can then use the private key to connect. Requires a restart of sshd ofcourse.
Comment: Thanks, I updated my question. Can you please take a look and extend your answer?
Comment: If I LUKS encrypt my `/home/$USERNAME/` partition will it as for the passphrase when I login locally and by ssh?
Comment: Can you use "dropbear"? Never used is but a co-worker does ( here is a how to: https://www.cyberciti.biz/security/how-to-unlock-luks-using-dropbear-ssh-keys-remotely-in-linux/ )


SoundCloud authenticating using the Javascript SDK and phonegap

Question: I am having difficulty authenticating (or finding any detailed documentation) with SoundClouds JavaScript SDK.  In the documentation https://developers.soundcloud.com/docs#authentication it mentions a callback url but it states that if you are developing for mobile you can use a redirect_uri with a custom protocol scheme and set your app as a handler for that protocol scheme. For example, your redirect_uri could be something like my-app://soundcloud/callback.
It also says that you should use the options display=popup so that the right log in screen is presented.  This is what I have tried to implement but it is not working.  Does anybody know what is wrong with this?
SC.initialize({
    client_id: 'MY_CLIENT_ID',
    redirect_uri: 'icipici://soundcloud/callback'

});

$('.connect').on("click", function(){
    SC.connect(function() {
        SC.get('/me','display=popup', function(me) {
            alert('Hello, ' + me.username);
        });
    });
});

Answer: I have not tested it completely, but think it is the right direction.
You have to:

Register a custom URL schema like explained here (for iOS, I haven't used Android for the moment).
Modify the redirect_url in your SoundCloud App config: http://soundcloud.com/you/apps/ (in your case icipici://soundcloud/callback)
Modify SC.initialize with the same redirect_uri
Implement the handler to return the callback html page. Or maybe something else (invoke callback directly?), not sure. Here is where I reached. It probably have to be written in Objective-C as explained in the link indicated in point 1, so not sure how to manage it in Phonegap.


Helm tries to deploy HPA, despite it being explicitly disabled

Question: I'm currently making some changes in our Bitbucket pipelines for our microservices.
In particular, the changes regard the use of a custom image we built as a build image for Helm step.
In this step, what happens is:

the Helm repo containing the Charts related to our microservices is added
an instruction of Helm upgrade is executed, in order to upgrade the microservice to their newly built versions. Along with this instruction are also some values defined with --set.

The code for the step is the following.
- step:
        name: Deploy to Kubernetes
        size: 2x
        image:
          name: <TEST_REGISTRY>/<CUSTOM_IMAGE>:<TAG>
          username: <USER>
          password: <PASSWORD>
        script:
          - export REGISTRY=<TEST_REGISTRY>
          - export IMAGE_NAME=<MS_NAME>
          - export TAG=<TAG>
          - echo <TEST_KUBECONFIG> | base64 -d > <KUBE_CONFIG>
          - export KUBECONFIG=<KUBE_CONFIG>
          - chmod 700 <KUBE_CONFIG>
          - kubectl get pods -n <NAMESPACE>
          - helm version
          - helm repo add <REPO_NAME> <REPO_URL>
          - helm repo update
          - helm search repo <REPO_NAME>
          - helm -n <NAMESPACE> upgrade <MS_NAME> <REPO_NAME>/<MS_NAME> --set env=STAG --set image.registry=$REGISTRY --set image.repository=$IMAGE_NAME --set image.tag=$TAG --set **autoscaling.enabled=false** --set autoscaling.min=1 --set autoscaling.max=6 --set replicaCount=1 --wait --debug

You may notice in bold in helm upgrade the flag autoscaling.enabled set to false. This because we don't want to deploy its HPA yet, so we wrapped the HPA template with the guard {{- if .Values.autoscaling.enabled }}. So, if autoscaling.enabled is set to false, no attempt to deploy the HPA will occur.
This trick worked perfectly fine for all the microservices (we don't want to deploy their HPA yet for these microservices too), except for the last one, which pipeline failed with the following error:
Error: UPGRADE FAILED: unable to build kubernetes objects from current release manifest: resource mapping not found for name: "<MS_NAME>" namespace: "" from "": no matches for kind "HorizontalPodAutoscaler" in version "autoscaling/v2beta2"
It's well spot, as the HPA is currently defined in its manifest with apiVersion: autoscaling/v2beta2 and the current version of the Kubernetes cluster does not serve such API.
However, also the other microservices - who faced the same changes on the pipeline - have an HPA with that API, yet the pipeline worked fine, since it didn't try to deploy that resource into the cluster - by using --set autoscaling.enabled=false.
I fail to understand why the changes worked fine for every microservice, except for this one. No other changes were made (same goes for the other microservices), I've checked the names of the values --set in the pipeline and the ones shown in values.yaml and they match, I've also check all the other names (image name of the service to be upgraded, the image registry, tags, ...) and everything is correct.
Again, no other changes were made in this ot the other services (no changes in their Charts, their Dockerfile, their application code, only changes are in the Helm step in the pipelines).
I've also added the --debug flag to gather more info and see how the user-specified values are actually set - mainly to see if --set autoscaling.enabled=false works - but since the helm upgrade fails it doesn't print these values and no other notable info is shown apart from the previously mentioned error.
We cannot change the Kubernetes cluster version, because it is provided from a 3rd party.
I suppose the error can be fixed by declaring a correct apiVersion for the HPA, but that would not solve the problem, which is helm upgrade trying to deploy that resource despite the fact it has been disabled.
At this point, I got no clue on what could have led to this error, so any suggestion will be appreciated if you encountered a similar issue in the past!
Comment: You'll need to provide you Helm chart in order to troubleshoot, but most likely the problem lies there.
Comment: Hi @akortex, actually the problem lay on the Release state Secret. I posted an answer in which I explained what I did with a colleague of mine and the solution for our problem. Thank you
Answer: So, with a colleague of mine, we found out what was going on. tl;dr in the end.
Long answer
What we attempted first was to update the apiVersion of the HPA. The error mentions that it is not possible to deploy HPAs in autoscaling/v2beta2, so we updated the version to autoscaling/v2. Unfortunately, it did not work, again making the pipeline fail with the same error.
After that, I performed a helm list and noticed that the Chart for the microservice that was giving us some issues was not updated with the pipelines performed these last days - the UPDATED field was set to a date which was before the update of the Kubernetes cluster.
I found it weird. I had pipelines that failed in helm upgrade in the past, yet the deployed Chart in our namespace was updated - could tell with a quick check using helm list.
While looking for a solution, I found this question in StackOverflow, in which the author was facing our same issue. As explained in the linked question, Helm keeps track of its Release state with a Secret, inside of which are memorised information regarding the resource types to be deployed inside the cluster.
What happened is that the Kubernetes cluster was upgraded before we updated the Charts, that contained a no longer served apiVersion. This led to the Release state Secret to not be updated as needed (so, to have HPAs in autoscaling/v2 instead of autoscaling/v2beta2) and that caused the helm upgrade to fail.
Inside the same question, there is also a link to an official guide provided by Helm, that explains what to do in order to update deprecated Kubernetes APIs. The guide provides a step-by-step procedure on how to update the Release state Secret as needed and was exactly what we needed. In fact, it worked for us - updating the Release state Secret and then performing one last helm upgrade made it possible to deploy our microservice via the defined pipeline.
tl;dr
Because the Kubernetes cluster was upgraded before we updated the Charts (which contained no longer served apiVersion in the new Kubernetes version), the Release state Secret corresponding to the failing microservice still had in its manifest that HPAs to be deployed will be in autoscaling/v2beta.
This caused the failure of helm upgrade in our pipeline.
We found this guide from Helm to manually update said Release state Secret, which worked for us. It updated the Release Secret and now helm upgrade no longer fails.


How to keep textarea text static when adding new text

Question: I have a <textarea> that has text added to it based on some javascript. It all works great. The only problem is, when the text is added, it replaces what was already there. Not sure how to stop this from happening, and make it just add to what is in there already.
js:
function addNote0(text, element_id) {
document.getElementById(element_id).value += text;

var tabTextRows = ['','','','','',''];

$('.note').click(function(){
  var fret = $(this).index() - 1;
  var line = $(this).parent().index() -1;
  updateNote(fret, line);
});

function updateNote(fret, line){
  var i;
  for(i=0;i<tabTextRows.length;i++){
    if(i == line) tabTextRows[i]+='-'+fret+'-';
    else tabTextRows[i]+='---';
    $('#tabText').val(tabTextRows.join('\n'));
  }
}}

window.onload = function() {
  addNote0('','tabText');
};

textarea that is being added to:
<textarea rows="6" cols="24" id="tabText" name="text">--
--
--
--
--
--</textarea>

So every time I click on a  it replaces the current "--" that is in there. I want it to just add to that. Any thoughts?
here is a jsFiddle of it. You will see what I mean when you click on the Xs
Comment: Added working fiddle in an edit
Comment: Could you demonstrate with a [jsFiddle](http://jsfiddle.net) please?
Answer: Instead of just putting in new content, grab the old content and concatenate it with your new content, then put that inside your textarea.
Comment: Could you possible elaborate a bit?
Answer: The easiest way to do this would be to just initialize your tabTextRows array in the beginning to:
var tabTextRows = ['--', '--', '--', '--', '--', '--'];
jsFiddle
Comment: Thank you! I feel rather retarded for not thinking of this. So thanks again! :D
Comment: No problem. Everybody has those moments. ;) I'm just glad I could help.
Comment: Do not feel obligated to help on this, as you totally answered the question. But do you know how I could make it add an additional dash if the value sent is a double digit number, rather than single digit?
Comment: Here you go. Not too bad. http://jsfiddle.net/jsLaX/2/ Notice the changes `var strlen = fret.toString().length;` and `else tabTextRows[i] += strlen == 1 ? '---' : '----';`


@Enterprise Library Unity, How to inject to the List Property

Question: The follows is my code snippet, and I want to deliver the List parameter to my construct.
public class  MyClass

{

    public MyClass(List<string> parmList)
    {
         this.MyList=parmList;
    }

    public List<string> MyList
    {
        get;set;
    }

}

The config:

  <alias alias="List" type="System.Collections.Generic.List[[System.String,

   mscorlib],mscorlib]"/>

  <register>

     <constructor>
        <param name="paraList" type="List" />
     </constructor>

  </register>

But when I resolve request to the container it throw out the exception:

The type List`1 has multiple constructors of length 1. Unable to disambiguate.

Is there any configuration error?
Comment: Not sure if this is just an issue with how you pasted your code into SO, but in your code the parameter name is parmList and in your config its: paraList...
Answer: In order to resolve an instance of MyClass, Unity must Resolve an instance of List<string> to pass to your constructor - but it is unable to choose among the available constructors for List<string>. Here is some information on telling Unity which constructors to use when initializing a class.


Can't connect to SQL Server 2008 through Excel VB7

Question: Recently a bit of code which has worked solidly for a few months now has stopped working. There have been no upgrades (Windows or otherwise) done to any product that we have pushed out.
The code below pushes data into a SQL Server 2008 database:
<code>Dim db As New ADODB.Connection
''#Other data manipulation not shown
With db
    ''#On Error Resume Next  ''# With or without this line I still get no indication of the error
    .ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security       Info=True;Data Source=myDB;" & _
            "Use Procedure for Prepare=1;Auto Translate=True; Packet Size=4096; Use Encryption for Data=True;" & _
            "Tag with column collation when possible=false;Initial Catalog=SFM_market"
    .Open
    .Execute query
    .Close
End With
</code>
The db State field reads 0. It is my understanding that it should read 1 when it has connected successfully.
I have also recently re factored to use ADODB.Command along with an ADODB.Connection, but the end result is the same. The state field remains at 0. I get no errors, the data simply does not go into the database since the connection is not made.
Any ideas on why this may be?
Comment: You won't get an error message with On Error Resume Next lurking there -- try removing that first so you can see what's going wrong.
Comment: Thanks for pointing that out, unfortunately it has not provided any further insight into the issue at hand.
Comment: Did you receive any kind of error message after that point?
Comment: It turns out it was as simple as a server restart. while our SQL server gave no errors or had any recent changes made to it, a restart solved everything.
Answer: The best suggestion I can come up with is to check your connection string. You have a lot of options in there, and if any of them is wrong the connection will fail. Try to pare it down to the minimum required information to complete the connection and build up from there.
Answer: Just for completeness, the answer to this was a simple restart. There was nothing wrong with the way I connected.


How do I use filenames that start with a dash "-" as command arguments?

Question: This may be a simple question, but how do I use files starting with "-" with command line programs?
For example,  I am trying to use pdfgrep on a file named -2013-01-01.pdf but it complains that there are no options defined for 2, 0, 1, 3 and so on.
Changing the filename to something that does not start with "-" solves it, but this is not an option since the files aren't created by me. I simply want to check for a specific change I know is coming.
Comment: @AliNa: Quotation marks won't work, as they are interpreted by the shell, not the program.
Comment: As an example, `grep -i dfv -- -myfile1 -myfile2`.
Comment: this dos not work, gives me the same errors as before
Comment: that works! thanks! make it n answer and i can mark it as accepted for future generations :)
Comment: @AliNa, did using quotes work for you with pdfgrep specifically? It didn't work for me. I'm using Lubuntu.
Comment: @AliNa [Quotation marks don't make it work with `cp`, `cd`, or `rm` either.](http://paste.ubuntu.com/8594167/) When the shell sees `"-2013-01-01.pdf"`, the argument it passes to a command is still simply `-2013-01-01.pdf`. See [3.1.2 Quoting](https://gnu.org/software/bash/manual/bash.html#Quoting) and [3.5.9 Quote Removal](https://gnu.org/software/bash/manual/bash.html#Quote-Removal) for details.
Comment: Yeah, I was wrong. So I'll delete my comments to prevent misinforming others.
Answer: Very frequently -- is used on the command-line to signal to a program that no more available command switches are going to be used. This is particularly useful if a file contains a dash, which the program would try to interpret as an option.

Without the --, there is an error generated:
$ pdfgrep -i posix -find.pdf -xorg.pdf

pdfgrep: invalid option -- 'f'
pdfgrep: invalid option -- 'd'
pdfgrep: invalid option -- '.'
pdfgrep: invalid option -- 'p'
pdfgrep: invalid option -- 'd'
pdfgrep: invalid option -- 'f'

With the -- used we have a successful command:
$ pdfgrep -i posix -- -find.pdf -xorg.pdf

-find.pdf: on the command line. Currently-implemented types are emacs (this is the default), posix-awk,
-find.pdf: posix-basic, posix-egrep and posix-extended.
-find.pdf: posix-basic, posix-egrep and posix-extended.
-find.pdf: posix-basic, posix-egrep and posix-extended.

pdfgrep is programmed to understand -- to mean that the following command-line arguments are not options. Most programs do the same, but not all programs understand --. For programs that don't, the solution is to prepend the filename with ./, like this:
 pdfgrep -i posix ./-find.pdf ./-xorg.pdf

This should work with any command, unless for some reason the command cannot accept a path, only a pure filename.

For a general introduction to the command-line, see this useful PDF.
Comment: Unfortunately, `--` does **not** work with *all* command-line programs. I had assumed from [that comment by the OP](http://askubuntu.com/questions/278000/how-to-use-commands-with-input-filename-starting-with-character/278003?noredirect=1#comment348923_278000) that `pdfgrep` is one of them that doesn't recognize `--`. But the accept here suggests otherwise. In any case, a program must be coded to recognize `--`. Many programs use libraries to parse their arguments, which do recognize `--`. But some don't, and of those, some are not coded to recognize `--`.
Comment: For those programs that do not recognise `--` the usual workaround is putting `./` in front of the file: `pdfgrep ./-2013-01-01.pdf`
Comment: Yes, putting `./` in front is the most portable and robust solution. Works on any program, on any unix version.
Answer: You prepend the file name with ./ (or another relative or absolute path that works).
This way it's portable.
Example:
for zefile in ./*.tmp
do
   rm -f "$zefile"
done

The use of -- to indicate the end of options is not always available. Some commands will know it, some won't. And this will change across different systems. So in the end, it's less portable.


ControllerContext is null and BaseController.OnActionExecuting() not called when using Html.Action

Question: We use a BaseController to cache basic authentication information before every action executes:
public abstract class BaseController : Controller
{
    protected bool IsLoggedIn { get; set; }
    protected string Username { get; set; }
    ...

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var identity = base.User.Identity;
        this.IsLoggedIn = identity.IsAuthenticated;
        this.Username = identity.Name;

        ...
    }
}

And our child controller has a actions for the main page (Index) and a partial view (GetNavigation):
[Authorize]
public partial class CollaborationController : BaseController
{
    [HttpGet]
    public virtual ViewResult Index()
    {
        var viewModel = this.MakeViewModel<FullPageViewModel>();
        return this.View(MVC.Collaboration.Views.Index, viewModel);
    }

    [HttpGet]
    public virtual PartialViewResult GetNavigation()
    {
        var viewModel = NavigationViewModel.Make(this.User);
        return this.PartialView(MVC.Collaboration.Views.Navigation, viewModel);
    }
}

And the partial view is rendered directly with Html.Action():
@Html.Action(MVC.Collaboration.GetNavigation())

Seems like it should work, but BaseController.OnActionExecuting does not get called.  And I can't even call it directly because this.ControllerContext and base.User are both null.  I also tried subclassing ActionFilterAttribute, but its OnActionExecuting method doesn't get called, either.
Comment: Should probably also be noted that we're using MVCContrib
Comment: Did you update the T4MVC templates?
Comment: Yes, those are up to date.  It turns out that the MVCContrib html helper is the culprit.  It does call the action but with null controller context.  I switched to `@Html.Action("GetNavigation", "Collaboration")` and everything works.
Answer: At least sort-of answered my own question:
Substituting
@Html.Action("GetNavigation", "Collaboration")

for
@Html.Action(MVC.Collaboration.GetNavigation())

fixes it.  MVCContrib's syntax seems to be the culprit, anyone know why?  Even better, anyone know a work-around that lets me avoid those nasty, non-refactoring-safe, magic strings?
Answer: I know this is an old question but here is how I handle this. In my child controller I create the OnActionExecuting method and call the base controller from there.
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
     base.OnActionExecuting(filterContext);
}


Set up login and password inputs in HTML

Question: What is the correct way to set up login and password input boxes in HTML?
The reason I ask is because the program I use to manage all of my passwords (1Password) is not picking up that I have just entered credentials that it should attempt to save. This makes me think that I have set up the form wrong.
The credentials are being sent via Ajax over an SSL connection after the click() event on the submit button. They are stored in the post body as a JSON object. Not sure of they need to be in the headers or something?
This is what I have on the page so far:
Username: <input id='username_input' type='text'>

Password: <input id='password_input' type='password'>

<input id='login-button' type='submit' value='login'>

Thanks!
Answer: Your inputs don't have any names, so no data will be sent to the server when the form is submitted. Try:
Username: <input id='username_input' name='username' type='text'>

Password: <input id='password_input' name='password' type='password'>

<input id='login-button' type='submit' value='login'>

Answer: Make sure you use double quotation marks for the attributes:
Username: <input id="username_input" type="text" />

Password: <input id="password_input" type="password" />

<input id="login-button" type="submit" value="login" />

Additionally, wrapping the fields in a form element may work.
Comment: There's absolutely nothing functional in HTML which is changed by using double rather single quotes, except the way you need to encode any single and double quotes inside them


how to moq a func parameter when unit testing c#

Question: I'm trying to write some tests but I'm not sure how to handle the arguments for setting up my moq mock.  Can anyone suggest how I can complete this line of code correctly?
Many thanks,
My moq code line

The parameter is of type shown below for the Returns(...) which I'm not sure how to handle.
Parameter intellisense

The method is shown below that I'm trying to moq out.
The method definition
public static async Task<CommandResult> SendSupportAsync(this IBus bus, Command command, bool withLogging = true)

UPDATE
I've tried the suggestion, I've added the mocked object and set up the return but the compiler gives the following error:
An expression tree may not contain a call or invocation that uses optional arguments

Comment: I did not know MOQ mocked out static methods. I thought you would have to get a testing tool such as TypedMock or the one from Telerik.
Answer: If you want to mock the return value, then you can create a mock for it
var resultMock = new Mock<Task<CommandResult>>();

then setup your mock object, and you return it like
bus.Setup(x=>c.SendSupportAsync(new TagCommand(ID, MID))).Returns(resultMock.object);

If you do not want to mock the result, then you can create an instance and return it like
bus.Setup(x=>c.SendSupportAsync(new TagCommand(ID, MID))).Returns(objCommandResult);

Comment: For your case since you are returning async Task, Moq 4.2 added a ReturnsAsync() extension method. But I have no experience using it.
Comment: Here is a related thread that discusses on returning async task http://stackoverflow.com/questions/21253523/setup-async-task-callback-in-moq-framework
Comment: thanks Suresh, I've updated the question, I get a compiler error


Android Volley can't get value in separate class

Question: public class VolleyStringRequest {
    String url;
    String body;
    String value;
    public VolleyStringRequest(String url, String body){
        this.url = url;
        this.body = body;
        value= "";
    }
    public StringRequest createStringRequest(){
        StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        // Do something with the response
                        Log.e("Response", response);
                        try{
                            JSONObject o = new JSONObject(response);
                            JSONArray values=o.getJSONArray("response");
                            value += values.toString();
                        }  catch (JSONException ex){}

                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        // Handle error
                    }
                }) {
            @Override
            public byte[] getBody() throws AuthFailureError {
                return body.getBytes();
            };
            @Override
            public String getBodyContentType() {
                return "application/json";
            }
        };
        return stringRequest;
    }

    public String getValue() {
        return value;
    }
}

I wrote this code in a seperate class to prevent code repetition but when I run this inside a fragment like this:
RequestQueue rq = Volley.newRequestQueue(getActivity().getApplicationContext());
        String url= "http://grwn.ddns.net:1337/results";
        final String body = "{\"id\":1}";
        VolleyStringRequest volleyStringRequest = new VolleyStringRequest(url, body);
        rq.add(volleyStringRequest.createStringRequest());
        volleyStringRequest.getValue();

And call the getValue() method. This method is always empty like: "". Does anyone know how I can enhance my class so this code will work? This issue is not because of a bad link or bad request. I can log the response and that does work (ofcourse inside VolleyStringRequest)
Answer: You run:
VolleyStringRequest volleyStringRequest = new VolleyStringRequest(url, body);
rq.add(volleyStringRequest.createStringRequest());
volleyStringRequest.getValue();

But remember createStringRequest is async method and value is populated after some delay a.e. inside public void onResponse(String response)
So when you call volleyStringRequest.getValue(); you get empty string
To make it work you can write some interface as:
  public interface RequestHandlerInterface(){
    void onResponse(String resp);
  }

And pass it to VolleyStringRequest constructor:
    RequestHandlerInterface rh = this;  //Your main class should implement this method
    RequestQueue rq = Volley.newRequestQueue(getActivity().getApplicationContext());
    String url= "http://grwn.ddns.net:1337/results";
    final String body = "{\"id\":1}";
    VolleyStringRequest volleyStringRequest = new VolleyStringRequest(url, body, rh);
    rq.add(volleyStringRequest.createStringRequest());

Next, change your VolleyStringRequest:
public class VolleyStringRequest {
    String url;
    String body;
    String value;
    public VolleyStringRequest(String url, String body, RequestHandlerInterface rh){
        this.url = url;
        this.body = body;
        this.rh = rh;
        value= "";
    }
  //...
}

And once you got response from POST, call the callback as:
  @Override
 public void onResponse(String response) {
     // Do something with the response
       Log.e("Response", response);
         try{
          JSONObject o = new JSONObject(response);
          JSONArray values=o.getJSONArray("response");
          value += values.toString();
           if(this.rh != null){
             this.rh.onResponse(value);
           }
          }  catch (JSONException ex){}
}

So in bottom line instead to call volleyStringRequest.getValue();
you have:
@Override
void onResponse(String resp){
     // here you go
 }

that will be called when you get POST response
Comment: Thanks one more question. How can I assign the resp from onResponse to a varaible? I can't seem to get it working
Comment: @SanderBakker what are you doing with `volleyStringRequest.getValue();`?
Comment: Assigning the variable? Will this work in onCreateView?
Comment: For async tasks you can use Android Handler to update main thread but its other question.


Form submission via AJAX / Detect validation erros

Question: I work with Symfony 3 + FOSUserBundle + Bootstrap modal
The working part :
I load the FOSUserBundle login form in a modal
I submit the form via AJAX
If the form has validation error, errors are displayed in the modal
My problem :
When the form is valid, it shows my homepage inside the modal
Question :
How to detect in the Ajax called if my form has erros or if form is valid ?
Because both return success for Ajax
Hope I'm clear... thanks for your help !!
Here is the code
Launch the modal :

Connexion

                {{ render(url('fos_user_security_login')) }}

Modal content (extract only)

...

  <form action="{{ path("fos_user_security_check") }}" method="post" id="formLogin">
     <input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />

         <input type="text" id="username" name="_username"  placeholder="Email ou Nom d'utilisateur" value="{{ last_username }}" />

         <input type="password" id="password" name="_password" placeholder="{{ 'security.login.password'|trans }}" />

     <button type="submit" class="btn" id="_submit" name="_submit"> {{ 'security.login.submit'|trans }}</button>
  </form>

...

AJAX

$("#formLogin").submit(function (e){
    e.preventDefault();
    $form = $(e.target);
    $.ajax($form.attr('action'), {
        data: $form.serialize(),
        type: "POST",
        success: function(data) {
         // HERE IS THE ISSUE
         // My Modal is refresh to show validation errors => OK
         // But if no validation errors : user is logged inside the modal and homepage appear inside the modal
          $('#myModalLoginBody').html(data);
        },
        error: function() {
          $('#myModalLoginBody').html("Une erreur est survenue, veuillez réessayer plus tard");
        }
    });
});
Answer: I found a solution, but not sure it's really clean...
So If you have better suggestion please do not hesitate !
Solution :
In my form I have a specific class for error messages :

{% if error %}

     {{ error.messageKey|trans(error.messageData, 'security') }}

{% endif %}

So in AJAX I test if this class is loaded :

// PopIn login via AJAX
$("#formLogin").submit(function (e){
    e.preventDefault();
    $form = $(e.target);
    $.ajax($form.attr('action'), {
        data: $form.serialize(),
        type: "POST",
        success: function(data) {
          if(data.search('help-block') > 0 )
          {
            // Recharge la modal pour afficher les erreurs
            $('#myModalLoginBody').html(data);
          }else{
            window.location.reload();
          }
        },
        error: function() {
          $('#myModalLoginBody').html("Une erreur est survenue, veuillez réessayer plus tard");
        }
    });
});

So know I can reload the modal to show errors or reload the page to close the modal and connect the user !


When i installed Ubuntu 22.04 alongside Windows for Dual Boot all of this happened and i didn't find any solution online to my problem

Question: Hello everyone this will be a long story.
First I installed Windows 10 Enterprise LTSC, then I wanted to dual boot it with Ubuntu 22.04. I allocated free space for it then I made a bootable GPT/FAT32 USB stick with this version of Ubuntu for installation. I made /home (ext4) , / (ext4) and a swap area (2GB).
During the installation of Ubuntu 22.04 I didn't find the option saying "Install alongside Windows" I chose the Something Else option and I performed my installation. after the installation it required a restart.
When I restarted it automatically booted windows 10 without even showing the grub menu to choose between both systems. i read online that I should make Ubuntu first in the list of boot menu .. I didn't find the two names of both systems I just found my hard drive to boot with..
I followed another lead online that says I should select a UEFI file as trusted for executing. Mine is Acer E5-575G-532G I couldn't make that option unless (as another lead online says) I set a supervisor password .. but then I didn't find what everyone found; the HDD0 option didn't appear. simply the list was empty .. no disk found at all .. all of this trying to fix the "No Bootable Device Found" issue when booting with UEFI secure boot mode.
Windows 10 is now only booting on Legacy not secured boot mode. I deleted all other partitions from windows 10 but still booting in Legacy mode. I don't know why all this complications when dual booting Ubuntu alongside windows and vise versa. I just want this to happen easily with success and no issues.
I hated windows for permanent lagging and hated Linux for gaming issues and incompatibility. If anyone understood me and have an easy safe solution to this give me instructions with screenshots or even a tutorial video because frankly I'm so tired of trying finding solutions to everything.
If necessary i can leave my Facebook  or anything for direct contacting. I'm desperate to solve this big problem that occurred to me.
Comment: If booting in Legacy mode, I do not think you correctly installed Windows. Microsoft has required vendors to install in UEFI boot mode to gpt partitioned drives. Older instructions, but still they same: https://askubuntu.com/questions/652966/unable-to-access-bios-menu-after-installing-windows-8/653006 & https://askubuntu.com/questions/1312112/first-ubuntu-booting-takes-way-too-long/1312725#1312725
Comment: If the machine is UEFI, there's a small boot partition in addition to the OS partition(s). Windows 10 also creates a small recovery partition and another little one that doesn't seem to have anything on it (not sure exactly what it does). The point is: When you "deleted every other partition" I hope you left all four required Windows partitions. IF it's UEFI (as opposed to old-school BIOS). If it's BIOS, then never mind, this comment doesn't apply.
Answer: You messed up when you created partitions for Ubuntu before installation.
In order to get the "Install alongside Windows" option, you must have enough unallocated free space for Ubuntu. That means there must not be a partition created in advance. The Ubuntu installer will create a partition for you.
The second requirement to get the guided installation is that the USB installation media has to be booted in the same mode where Windows is already installed. This is typically UEFI so you must boot the USB as UEFI.
Along the same lines, you do not need to create a separate home partition nor do you need a swap partition.  Ubuntu will use a swap file in absence of a swap partition. And a home partition is not useful for most people.  This is why the default installation options do not create all of these extra partitions.
I suggest that you delete the Ubuntu partitions you created so that there is unallocated space and start over with the above information in mind.
Comment: i deleted every other partion than windows10 and i tried reinstalling again ubuntu but still no "Install alongside windows" i'll try boot the USB in legacy mode because windows too is booting in legacy mode now .. everytime i switch to uefi secured boot mode it shows "no bootable device"
Comment: besides, i just deleted the partition but it's not unallocated it's just free space how can i make it unallocated ?
Comment: Unallocated= not in a partition
Comment: still waiting for full guided solution ! ... :'(
Comment: Have you followed the [official tutorial](https://ubuntu.com/tutorials/install-ubuntu-desktop)? It walks you through every step of the entire installation from start to finish. As long as your system has enough unpartitioned space and you boot the USB correctly, then nothing is different for a dual boot configuration except to choose "Install alongside Windows" instead of "Erase disk and install Ubuntu".  However the tutorial also has a tooltip with a link to more advanced operations setting up dual boot configuration with Windows. Again your biggest mistake was making partitions.
Comment: now i only have green free space and i can't make it black unallocated space.. how can i do that ?
Comment: I have no idea what you mean by green vs black. You need to either delete partitions or shrink existing ones. If you need help shrinking your Windows partition, you can search/ask on Super User (We can't help with Windows issues). If you are able to delete partitions, you can use the "Disks" application in a live session (Try Ubuntu booting installation media).
Answer: JUST AN OPINION FROM A COMMON USER:
Windows will only boot in two configurations: strictly bios or strictly GPT.
A problem that many are running into is that Ubuntu automatically creates a "hybrid mbr GPT" table when installing or editing partitions. This creates endless boot issues on either windows boot manager or grub. You can make a "Super grub2Disk" usb and use that to boot directly into ubuntu and then reinstall grub from there. Also make sure when installing any OS for EFI boot that you are booting your USB install media in UEFI mode.
My suggestion is that you do a fresh install but you don't have to.
You can use gdisk to change your current setup without having to do a clean install. Additionally you will need to edit /etc/default/grub to allow OS PROBING and then update grub. You can google how to do this for ubuntu 22.04. You might also need to disable hibernation and fast boot in windows power settings.
Here's what I recommend:

have secure boot disabled in uefi bios settings
install ubuntu first (I know crazy, right)
install windows
boot into ubuntu with Super Grub2Disk
re-install grub2 to EFI

Here's why:
Ubuntu will create a 500MB EFI - this will future proof you if you need space for other boot configurations. Windows only makes a 100MB EFI. You can leave room on the disk for windows during linux install and then later windows will use the same EFI that ubuntu created. It might be useful to learn how to use your windows usb and diskpart in case you have to start again. Make necessary settings in ubuntu, then install windows and make necessary settings, then restore grub.
After you get ubuntu installed you need to convert to a true GPT. You can do this with gdisk which comes pre-installed on ubuntu 22.04.
sudo gdisk

then enter the disk name you want to edit
/dev/sda

this should give you a readout that says something about a hybrid mbr
If it says mbr protected then your good to install windows if not...
MAKE SURE SDA IS THE CORRECT DISK!! If you need to know which name is given to the disk you want to install on an easy way is to open gparted and check the name there.
then enter expert mode
x

then to change disk to GPT
n

and finally to save your changes
w

Now windows installer will allow use of disk for uefi install
hope you get something out of this. good luck


Increasing or decreasing offset using jquery

Question: I have a popup window. I want to have two buttons plus and minus over the popup. the two buttons on click should be capable to change the offset of the popup window. my question may be immature but i am newbie in jquery so i cant handle the scenario. how to enable the buttons to work.

    <button type="button">Show popup</button>

    <button type="button" id="plus">Increase</button>
    <button type="button" id="minus">Decrease</button>

x

It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English.

Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).

Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).

Here is my JSFIDDLE:
Answer: $("#plus").click(function(){
        var x=$("#pop-up").offset();
        $("#pop-up").offset({top : x.top + 5, left : x.left + 5});
});

Set offset for the popup element. Check fiddle


Adding a Taskbar button ITaskbarList and detecting it being clicked

Question: I'm looking to adding a "fake" button to the Windows taskbar that, when clicked, actually performs logic and activates a different window.
I want the behaviour to be familiar I.e.

First button click brings the window to front

Second click minimises

Third click restores

I've tried creating an offscreen window and following its own events. But that has its own issues in that, due to other window activation, I won't always be able to get the right behaviour or reliable sequence of events.
I'm looking to see if adding a custom button with ITaskbarList will work for me.
My question is, can I get some form of notification that the taskbar button has been clicked so I can perform my logic? I can't see anything obvious in the docs.
Comment: You can add buttons to the toolbar control and receive WM_COMMAND in the owning window: https://learn.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-itaskbarlist3-thumbbaraddbuttons#remarks
Comment: reading the docs, this is more like adding buttons to the popup preview of a taskbar button.  For example play controls on a media player app.
I want to add the taskbar button itself and get notification of that button being clicked
Comment: `WM_COMMAND` applies to thumbnail buttons/previews. For the taskbar button itself, try `WM_ACTIVATE` instead.
Answer: It doesn't look like there is an exact match to what I need but I've managed to come up with a close match by having my window attached to my placeholder button permanently minimized and using WM_QUERYOPEN messages as a trigger.  Its not perfect in all situations but looks like its as close as I'm going to get.


What is the best way to fill a hole in a concrete basement floor?

Question: My basement floor has a hole cut where the water line enters the house. This hole is around 2ft square, and digging down a little I hit dirt and small roots. I'd like to seal this hole as I believe it provides an entry point for insects.

In the picture above, you can see the water line coming in and leading to the meter. The tubing along the wall on the left is electric conduit, grounding the service panel. Note that the horizontal part of the water pipe is actually below the level of the nearby concrete floor, so a new floor in this area would have to be lower than the rest of the basement floor because I don't want to encase the pipe and valve in concrete.
What's the best way to fill in that hole? A few specific concerns:

Do I need to lay down a layer of gravel or something above the dirt?
Would the new concrete need to be tied into the existing floor somehow?
Is there a minimum clearance around the pipe that I should preserve?
Are there any structural concerns digging or pouring concrete here? The foundation is fieldstone parged with mortar.

The house was built in 1892 and I suspect this hole was cut when the water line was changed from lead to copper.
Comment: The ground wire looks corroded and not properly grounding. Earth ground is very important, which is the purpose of that wire.. I would take off the saddles on the pipe, lightly sand where new saddle is to be placed and install at least a 12gauge wire.
Comment: @Russell what looks corroded? There's corrosion on the pipe around the saddle, does that mean the contact between wire and pipe is poor?
Answer: Let's not over complicate this little project.  I have seen these open sump holes hundreds of times. I am absolutely sure there are no structural issues here, how long has the house stood without concrete in the hole? There was probably not a concrete floor when it was built and for many years after.  If you want to simply keep stuff out and hide the dirt then let's do it simple.  Dig out to about a total of 4 inches below your water pipe and valve. Mix up a small bag of  Sacrete concrete mix and fill the hole to about 1 inch under the pipe. Float it smooth, you're done.  There is no need to get carried away with a special base etc. The size and weight of the concrete patch is negligible as far as settling or shrinking is concerned. Get the stuff and be done with it in an hour!
Comment: I did this. It has been fine for about 3 years now. Thanks!
Answer: Below is based on what I would do in the UK.

Q. Do I need to lay down a layer of gravel or something above the dirt?

Excavate 13inches (325mm) below the finish level of the concrete patch you're putting in.
Compact 6inches (125mm) of sub-base (crushed rock) into the bottom of the excavation.
Spread a 1inch (25mm) thick layer of soft building sand on top of the sub-base. Compact and level.
Cut a piece of "Visqueen" Damp Proof Membrane (1200 gauge / 300mu) 6inches (150mm) bigger all around than the size of the hole.
Lay the Damp Proof Membrane on top of the building sand and turn up the edges (3inches / 75mm), against the sides of the existing concrete.
On top of the Damp Proof Membrane pour a 6inch (150mm) thick concrete slab. If I had a little bit of ¼inch or ⅜inch (6mm or 8mm) re-bar fabric (mesh) handy I would place it in the middle of the concrete. Though in your particular situation it really isn't needed.

Q. Would the new concrete need to be tied into the existing floor somehow?

No, see my above points. Plus, the slab isn't really a structural slab. Yes, it's a ground bearing slab, but in a domestic situation, therefore load really is too much of a concern, especially in your particular situation. Therefore there really is no need to tie-in the new concrete patch with the existing.

Q. Is there a minimum clearance around the pipe that I should preserve?

Apart from a practical point of view, I have nothing else to base the following on: I would leave a minimum clearance of 2inches (50mm), a little more if it proves practical.

Q. Are there any structural concerns digging or pouring concrete here? The foundation is fieldstone parged with mortar.

No, see my above points. Plus, you really aren't putting any load on the existing foundation in your particular case.
Comment: Thank you for the thorough answer. At first glance, though, this seems like overkill. The rest of the basement floor has no membrane between earth and concrete, and apparently no gravel (at least in this section where the concrete layer has been cut away. I'd like to do it right but I don't know if it's worth the effort to have 2 or 3 sqft of perfectly installed concrete in a single non-structural spot in a basement. I'm no expert, though, so I'm curious what other people suggest.
Comment: @Shimon Rura, if there definitely is no membrane under the existing slab (& rising moisture hasn't been a problem) then you could leave that out, along with the 1inch (25mm) thick building sand layer (which is only there to prevent the membrane from being punctured by the sub-base). I personally would still go with the sub-base material...
Answer: Personaly, I would just make a wood cap over the hole so it can be removed and replaced at will. Paint it the same color as the concrete.


Debugging running python app using gdb in python mode does not work

Question: I have a multithreaded python application running using virtualenv and I can not properly attach to it using gdb. I want to debug the deadlock and I think this is the only way I can do this with because the app is too huge and I can not reproduce the issue in develop environment.
I have installed python2.7-dbg and then trying to run debugging with gdb /home/PATHTOVENV/venv/bin/python 30183. Here is the output:
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /home/PATHTOVENV/venv/bin/python...(no debugging symbols found)...done.
Attaching to program: /home/PATHTOVENV/venv/bin/python, process 30183
Reading symbols from /lib/x86_64-linux-gnu/libpthread.so.0...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/libpthread-2.19.so...done.
done.
[New LWP 30326]
[New LWP 30325]
[New LWP 30324]
[New LWP 30323]
[New LWP 30322]
[New LWP 30321]
[New LWP 30320]
[New LWP 30319]
[New LWP 30318]
[New LWP 30317]
[New LWP 30316]
[New LWP 30315]
[New LWP 30314]
[New LWP 30313]
[New LWP 30312]
[New LWP 30311]
[New LWP 30310]
[New LWP 30309]
[New LWP 30308]
[New LWP 30307]
[New LWP 30306]
[New LWP 30305]
[New LWP 30304]
[New LWP 30302]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Loaded symbols for /lib/x86_64-linux-gnu/libpthread.so.0
Reading symbols from /lib/x86_64-linux-gnu/libc.so.6...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/libc-2.19.so...done.
done.
Loaded symbols for /lib/x86_64-linux-gnu/libc.so.6
Reading symbols from /lib/x86_64-linux-gnu/libdl.so.2...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/libdl-2.19.so...done.
done.
Loaded symbols for /lib/x86_64-linux-gnu/libdl.so.2
Reading symbols from /lib/x86_64-linux-gnu/libutil.so.1...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/libutil-2.19.so...done.
done.
Loaded symbols for /lib/x86_64-linux-gnu/libutil.so.1
Reading symbols from /lib/x86_64-linux-gnu/libz.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libz.so.1
Reading symbols from /lib/x86_64-linux-gnu/libm.so.6...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/libm-2.19.so...done.
done.
Loaded symbols for /lib/x86_64-linux-gnu/libm.so.6
Reading symbols from /lib64/ld-linux-x86-64.so.2...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/ld-2.19.so...done.
done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/lxml/etree.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/lxml/etree.so
Reading symbols from /usr/lib/x86_64-linux-gnu/libxslt.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/x86_64-linux-gnu/libxslt.so.1
Reading symbols from /usr/lib/x86_64-linux-gnu/libexslt.so.0...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/x86_64-linux-gnu/libexslt.so.0
Reading symbols from /usr/lib/x86_64-linux-gnu/libxml2.so.2...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/x86_64-linux-gnu/libxml2.so.2
Reading symbols from /lib/x86_64-linux-gnu/libgcrypt.so.11...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libgcrypt.so.11
Reading symbols from /lib/x86_64-linux-gnu/liblzma.so.5...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/liblzma.so.5
Reading symbols from /lib/x86_64-linux-gnu/libgpg-error.so.0...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libgpg-error.so.0
Reading symbols from /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/_hashlib.x86_64-linux-gnu.so...Reading symbols from /usr/lib/debug/usr/lib/python2.7/lib-dynload/_hashlib.x86_64-linux-gnu.so...done.
done.
Loaded symbols for /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/_hashlib.x86_64-linux-gnu.so
Reading symbols from /lib/x86_64-linux-gnu/libcrypto.so.1.0.0...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
Reading symbols from /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/datetime.x86_64-linux-gnu.so...Reading symbols from /usr/lib/debug/usr/lib/python2.7/lib-dynload/datetime.x86_64-linux-gnu.so...done.
done.
Loaded symbols for /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/datetime.x86_64-linux-gnu.so
Reading symbols from /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/_ctypes.x86_64-linux-gnu.so...Reading symbols from /usr/lib/debug/usr/lib/python2.7/lib-dynload/_ctypes.x86_64-linux-gnu.so...done.
done.
Loaded symbols for /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/_ctypes.x86_64-linux-gnu.so
Reading symbols from /usr/lib/x86_64-linux-gnu/libffi.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/x86_64-linux-gnu/libffi.so.6
Reading symbols from /lib/x86_64-linux-gnu/libuuid.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libuuid.so.1
Reading symbols from /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/_ssl.x86_64-linux-gnu.so...Reading symbols from /usr/lib/debug/usr/lib/python2.7/lib-dynload/_ssl.x86_64-linux-gnu.so...done.
done.
Loaded symbols for /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/_ssl.x86_64-linux-gnu.so
Reading symbols from /lib/x86_64-linux-gnu/libssl.so.1.0.0...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libssl.so.1.0.0
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/bson/_cbson.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/bson/_cbson.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/pymongo/_cmessage.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/pymongo/_cmessage.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/greenlet.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/greenlet.so
Reading symbols from /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/_csv.x86_64-linux-gnu.so...Reading symbols from /usr/lib/debug/usr/lib/python2.7/lib-dynload/_csv.x86_64-linux-gnu.so...done.
done.
Loaded symbols for /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/_csv.x86_64-linux-gnu.so
Reading symbols from /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/_json.x86_64-linux-gnu.so...Reading symbols from /usr/lib/debug/usr/lib/python2.7/lib-dynload/_json.x86_64-linux-gnu.so...done.
done.
Loaded symbols for /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/_json.x86_64-linux-gnu.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/cchardet/_cchardet.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/cchardet/_cchardet.so
Reading symbols from /usr/lib/x86_64-linux-gnu/libstdc++.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/x86_64-linux-gnu/libstdc++.so.6
Reading symbols from /lib/x86_64-linux-gnu/libgcc_s.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libgcc_s.so.1
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/_yaml.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/_yaml.so
Reading symbols from /usr/lib/x86_64-linux-gnu/libyaml-0.so.2...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/x86_64-linux-gnu/libyaml-0.so.2
Reading symbols from /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/_elementtree.x86_64-linux-gnu.so...Reading symbols from /usr/lib/debug/usr/lib/python2.7/lib-dynload/_elementtree.x86_64-linux-gnu.so...done.
done.
Loaded symbols for /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/_elementtree.x86_64-linux-gnu.so
Reading symbols from /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/pyexpat.x86_64-linux-gnu.so...Reading symbols from /usr/lib/debug/usr/lib/python2.7/lib-dynload/pyexpat.x86_64-linux-gnu.so...done.
done.
Loaded symbols for /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/pyexpat.x86_64-linux-gnu.so
Reading symbols from /lib/x86_64-linux-gnu/libexpat.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libexpat.so.1
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/datrie.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/datrie.so
Reading symbols from /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/parser.x86_64-linux-gnu.so...Reading symbols from /usr/lib/debug/usr/lib/python2.7/lib-dynload/parser.x86_64-linux-gnu.so...done.
done.
Loaded symbols for /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/parser.x86_64-linux-gnu.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/simplejson/_speedups.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/simplejson/_speedups.so
Reading symbols from /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/_multiprocessing.x86_64-linux-gnu.so...Reading symbols from /usr/lib/debug/usr/lib/python2.7/lib-dynload/_multiprocessing.x86_64-linux-gnu.so...done.
done.
Loaded symbols for /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/_multiprocessing.x86_64-linux-gnu.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/thrift/protocol/fastbinary.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/thrift/protocol/fastbinary.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/hiredis/hiredis.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/hiredis/hiredis.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/tornado/speedups.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/tornado/speedups.so
Reading symbols from /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/_curses.x86_64-linux-gnu.so...Reading symbols from /usr/lib/debug/usr/lib/python2.7/lib-dynload/_curses.x86_64-linux-gnu.so...done.
done.
Loaded symbols for /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/_curses.x86_64-linux-gnu.so
Reading symbols from /lib/x86_64-linux-gnu/libncursesw.so.5...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libncursesw.so.5
Reading symbols from /lib/x86_64-linux-gnu/libtinfo.so.5...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libtinfo.so.5
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/zope/interface/_zope_interface_coptimizations.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/zope/interface/_zope_interface_coptimizations.so
Reading symbols from /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/termios.x86_64-linux-gnu.so...Reading symbols from /usr/lib/debug/usr/lib/python2.7/lib-dynload/termios.x86_64-linux-gnu.so...done.
done.
Loaded symbols for /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/termios.x86_64-linux-gnu.so
Reading symbols from /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/resource.x86_64-linux-gnu.so...Reading symbols from /usr/lib/debug/usr/lib/python2.7/lib-dynload/resource.x86_64-linux-gnu.so...done.
done.
Loaded symbols for /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/resource.x86_64-linux-gnu.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/_psutil_linux.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/_psutil_linux.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/_psutil_posix.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/_psutil_posix.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/_pydevd_bundle/pydevd_cython.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/_pydevd_bundle/pydevd_cython.so
Reading symbols from /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/_sqlite3.x86_64-linux-gnu.so...Reading symbols from /usr/lib/debug/usr/lib/python2.7/lib-dynload/_sqlite3.x86_64-linux-gnu.so...done.
done.
Loaded symbols for /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/_sqlite3.x86_64-linux-gnu.so
Reading symbols from /usr/lib/x86_64-linux-gnu/libsqlite3.so.0...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/x86_64-linux-gnu/libsqlite3.so.0
Reading symbols from /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/_lsprof.x86_64-linux-gnu.so...Reading symbols from /usr/lib/debug/usr/lib/python2.7/lib-dynload/_lsprof.x86_64-linux-gnu.so...done.
done.
Loaded symbols for /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/_lsprof.x86_64-linux-gnu.so
Reading symbols from /lib/x86_64-linux-gnu/libnss_files.so.2...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/libnss_files-2.19.so...done.
done.
Loaded symbols for /lib/x86_64-linux-gnu/libnss_files.so.2
Reading symbols from /lib/x86_64-linux-gnu/libnss_dns.so.2...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/libnss_dns-2.19.so...done.
done.
Loaded symbols for /lib/x86_64-linux-gnu/libnss_dns.so.2
Reading symbols from /lib/x86_64-linux-gnu/libresolv.so.2...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/libresolv-2.19.so...done.
done.
Loaded symbols for /lib/x86_64-linux-gnu/libresolv.so.2
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/dawg.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/dawg.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/PIL/_imaging.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/PIL/_imaging.so
Reading symbols from /usr/lib/x86_64-linux-gnu/libjpeg.so.8...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/x86_64-linux-gnu/libjpeg.so.8
Reading symbols from /usr/lib/x86_64-linux-gnu/libtiff.so.5...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/x86_64-linux-gnu/libtiff.so.5
Reading symbols from /usr/lib/x86_64-linux-gnu/libjbig.so.0...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/x86_64-linux-gnu/libjbig.so.0
Reading symbols from /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/mmap.x86_64-linux-gnu.so...Reading symbols from /usr/lib/debug/usr/lib/python2.7/lib-dynload/mmap.x86_64-linux-gnu.so...done.
done.
Loaded symbols for /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/mmap.x86_64-linux-gnu.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/maxminddb/extension.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/maxminddb/extension.so
Reading symbols from /usr/lib/x86_64-linux-gnu/libmaxminddb.so.0...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/x86_64-linux-gnu/libmaxminddb.so.0
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/numpy/core/multiarray.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/numpy/core/multiarray.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/numpy/core/umath.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/numpy/core/umath.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/numpy/core/_dotblas.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/numpy/core/_dotblas.so
Reading symbols from /usr/lib/libcblas.so.3...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libcblas.so.3
Reading symbols from /usr/lib/libatlas.so.3...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libatlas.so.3
Reading symbols from /usr/lib/x86_64-linux-gnu/libgfortran.so.3...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/x86_64-linux-gnu/libgfortran.so.3
Reading symbols from /usr/lib/x86_64-linux-gnu/libquadmath.so.0...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/x86_64-linux-gnu/libquadmath.so.0
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/numpy/core/scalarmath.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/numpy/core/scalarmath.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/numpy/lib/_compiled_base.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/numpy/lib/_compiled_base.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/numpy/linalg/lapack_lite.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/numpy/linalg/lapack_lite.so
Reading symbols from /usr/lib/liblapack.so.3...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/liblapack.so.3
Reading symbols from /usr/lib/libf77blas.so.3...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libf77blas.so.3
Reading symbols from /usr/lib/libblas.so.3...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libblas.so.3
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/numpy/linalg/_umath_linalg.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/numpy/linalg/_umath_linalg.so
Reading symbols from /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/future_builtins.x86_64-linux-gnu.so...Reading symbols from /usr/lib/debug/usr/lib/python2.7/lib-dynload/future_builtins.x86_64-linux-gnu.so...done.
done.
Loaded symbols for /home/PATHTOVENV/venv/lib/python2.7/lib-dynload/future_builtins.x86_64-linux-gnu.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/numpy/fft/fftpack_lite.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/numpy/fft/fftpack_lite.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/numpy/random/mtrand.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/numpy/random/mtrand.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/matplotlib/_path.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/matplotlib/_path.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/matplotlib/ft2font.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/matplotlib/ft2font.so
Reading symbols from /usr/lib/x86_64-linux-gnu/libfreetype.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/x86_64-linux-gnu/libfreetype.so.6
Reading symbols from /lib/x86_64-linux-gnu/libpng12.so.0...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libpng12.so.0
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/matplotlib/_png.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/matplotlib/_png.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/matplotlib/_cntr.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/matplotlib/_cntr.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/matplotlib/_image.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/matplotlib/_image.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/matplotlib/_tri.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/matplotlib/_tri.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/matplotlib/_qhull.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/matplotlib/_qhull.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/matplotlib/backends/_backend_agg.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/matplotlib/backends/_backend_agg.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/PIL/_imagingft.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/PIL/_imagingft.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/Crypto/Util/_counter.so...(no debugging symbols found)...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/Crypto/Util/_counter.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/Crypto/Cipher/_AES.so...(no debugging symbols found)...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/Crypto/Cipher/_AES.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/Crypto/Util/strxor.so...(no debugging symbols found)...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/Crypto/Util/strxor.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/_geohash.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/_geohash.so
Reading symbols from /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/bx/intervals/intersection.so...done.
Loaded symbols for /home/PATHTOVENV/venv/local/lib/python2.7/site-packages/bx/intervals/intersection.so
Reading symbols from /usr/lib/x86_64-linux-gnu/gconv/CP1251.so...Reading symbols from /usr/lib/debug//usr/lib/x86_64-linux-gnu/gconv/CP1251.so...done.
done.
Loaded symbols for /usr/lib/x86_64-linux-gnu/gconv/CP1251.so
sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
85  ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S: No such file or directory.
(gdb) info thread
  Id   Target Id         Frame
  25   Thread 0x7f08551db700 (LWP 30302) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  24   Thread 0x7f08541d9700 (LWP 30304) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  23   Thread 0x7f08539d8700 (LWP 30305) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  22   Thread 0x7f08531d7700 (LWP 30306) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  21   Thread 0x7f08529d6700 (LWP 30307) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  20   Thread 0x7f08521d5700 (LWP 30308) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  19   Thread 0x7f08519d4700 (LWP 30309) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  18   Thread 0x7f08511d3700 (LWP 30310) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  17   Thread 0x7f08509d2700 (LWP 30311) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  16   Thread 0x7f08501d1700 (LWP 30312) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  15   Thread 0x7f084f9d0700 (LWP 30313) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  14   Thread 0x7f084f1cf700 (LWP 30314) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  13   Thread 0x7f084e9ce700 (LWP 30315) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  12   Thread 0x7f084e1cd700 (LWP 30316) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  11   Thread 0x7f084d9cc700 (LWP 30317) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  10   Thread 0x7f084d1cb700 (LWP 30318) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  9    Thread 0x7f084c9ca700 (LWP 30319) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  8    Thread 0x7f084c1c9700 (LWP 30320) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  7    Thread 0x7f084b9c8700 (LWP 30321) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  6    Thread 0x7f084b1c7700 (LWP 30322) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  5    Thread 0x7f084a9c6700 (LWP 30323) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  4    Thread 0x7f084a1c5700 (LWP 30324) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  3    Thread 0x7f08499c4700 (LWP 30325) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
  2    Thread 0x7f08491c3700 (LWP 30326) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85
* 1    Thread 0x7f0903832740 (LWP 30183) "python" sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:85

The gdb sees all the threads and their sem_wait state but I can not use python helpers for GDB:
(gdb) py-list
Undefined command: "py-list".  Try "help".

OS Ubuntu 14.04, python 2.7.
I have tried different hacks I had googled (like linking python-dbg.py into virtualenv bin directory) but with no profit, may be I have do it wrong way...
Comment: Have you added the directory containing `python-gdb.py` to GDB's "`auto-load-safe-path`"?
Answer: In this link: https://docs.python.org/devguide/gdb.html#gdb-7-and-later states that if you have gdb 7 and later and you want to use the Python extension you need to:

To activate support, you must add the directory containing python-gdb.py to GDB's "auto-load-safe-path". Put this in your ~/.gdbinit file:
add-auto-load-safe-path /path/to/checkout
  You can also add multiple paths, separated by :.

Also in this link states that:

You can extend GDB using the Python programming language. This feature is available only if GDB was configured using --with-python.
  Python scripts used by GDB should be installed in data-directory/python, where data-directory is the data directory as determined at GDB startup (see Data Files).
  This directory, known as the python directory, is automatically added to the Python Search Path in order to allow the Python interpreter to locate all scripts installed at this location.

Have you done all the above mentioned configurations correctly?
Comment: can you please make clear where is the `python-gdb.py` file located?
Comment: looks like the python extension works now but there is another error now: "0x00007f67f10f04a3 in ?? ()
(gdb) py-list
Unable to locate python frame" I have added the add-auto-load-safe-path to `~/.gdbinit`, gdb is configured with `--with-python` option and the `data-directory/python` contains scripts
Comment: You are probably missing the debug symbols, try this: http://askubuntu.com/questions/175412/how-can-i-get-python-stack-trace-information-using-gdb?answertab=votes#tab-top
Comment: I have tried run gdb as `sudo gdb /usr/bin/python-dbg -p 31557` and it is not work still. Is it important to use **the same** interpreter to debug as the debugging process runned with? My process running with venv and its python and I am trying to debug it with `/usr/bin/python-dbg` interpreter now
Comment: I have linked some files into env as mentioned here http://stackoverflow.com/a/31724414/2703236 and now when I run `sudo gdb venv/bin/python -p 31557` and type `py-list` I get **Unable to read information on python frame** error
Comment: Also there is a warning while running gdb: `Reading symbols from venv/bin/python...
warning: the debug information found in "/home/pskov/projects/pskov-server/venv/bin/.debug/python2.7" does not match "/home/pskov/projects/pskov-server/venv/bin/python" (CRC mismatch).`
Comment: In your place I would try to create a fresh virtual environment and try my settings from there on...
Comment: But will there problems with absent python modules in this fresh venv? Should I install all the modules used in debugging process there?
Comment: That is what I would do in your case
Comment: Hey @skavans did you find my answer helpful?
Comment: Unfortunately not :(