psshfs in DragonFlyBSD

How I got mount_psshfs(8) to work.

mount_psshfs basically offers the same functionality as sshfs(1). Putting it to work is quite easy but it is not enabled by default, so some work is required.

0) Set up ssh keys

1) Build, install and boot a new kernel which includes the following parameters. Here is how.
 pseudo-device putter # PUFFS(4)
options PUFFS #Pass-to-Userspace Framework File System

Alternatively, just load the module
kldload puffs

2) Add device rules in /etc/devfs.conf
 perm putter root:wheel 0666

3) Enable vfs.usermount
In /etc/sysctl.conf add
 vfs.usermount=1

4) Mount it!
 mount_psshfs -O IdentityFile=/home/earthling/.ssh/mercury_rsa mercurius@192.168.0.11:/Users/mercurius/export /home/earthling/mnt/remote_to_mercury

________________________________

Links:

http://leaf.dragonflybsd.org/cgi/web-man?command=mount_psshfs&section=8
http://static.usenix.org/event/usenix09/tech/full_papers/kantee/kantee_html
http://fuse.sourceforge.net/sshfs.html
http://www.dragonflybsd.org/docs/newhandbook/ConfigureKernel

mount_psshfs: handshake failed, server does not support sftp?
mount_psshfs: puffs_mount: cannot open /dev/putter
mount_psshfs: puffs_daemon: Permission denied
mount_psshfs: puffs_mount: Permission denied
mount_psshfs: puffs_mount: Operation not permitted

Advertisements

Why Software Testing?

Doing testing* is not my favorite part in the process of software development but, it is a very important one. Therefore, every well rounded developer should know at least the basics of QA/QC and testing.

Understanding the testing process also gives insights to develop better software.

 

For these reasons I got interested in software testing and wrote this little memo based on a few resources listed in the references section.

*Testing here refers to user level testing. It should be noted that I am fan of BDD and I love writing unit tests, integration tests and automatizing tests.    

 

 

 

 

There is often confusion in the IT industry regarding the difference between quality control
and quality assurance. Many “quality assurance” groups, in fact, practice quality control.
Quality methods can be segmented into two categories: preventive methods and detective
methods. This distinction serves as the mechanism to distinguish quality assurance activities
from quality control activities.
Quality Assurance is preventive and inspects the process
Quality Control is detective and inspects the product
Quality perspectives
Quality has two working definitions:
• Producer’s Viewpoint – The quality of the product meets the requirements.
• Customer’s Viewpoint – The quality of the product is “fit for use” or meets the
customer’s needs.
Software Quality Factors
•Correctness – Extent to which a program satisfies its specifications and fulfills the
user’s mission objectives.
• Reliability – Extent to which a program can be expected to perform its intended
function with required precision.
• Usability – Effort required learning, operating, preparing input, and interpreting
output of a program.
• Maintainability – Effort required locating and fixing an error in an operational
program.
• Interoperability – Effort required to couple one system to another.
Your organization must define quality before it can be achieved…this applies everywhere
Testing
Testing is a measurement process. It attempts to measure the implemented software against
either or both specifications and user needs.
Software testing does not add a lot of value to the business if all they
are doing is validating that incorrect requirements are implemented correctly.
Adequacy of users to use the technology
There are two components to any professional process. The components are the process itself,
and the competency of the process user to use that process effectively. The two components
must be properly coordinated for the new technology governed by that process to be used
effectively
Figure 1-10 The Five Levels of Process Maturity
Relationship of the competency of the user technology to the process
controlling the use of that technology. The figure shows the five levels of technology process maturity, and the competency of the user to use the technology from high to low.
Limited resources
When resources are very limited, we should focus on finding critical bugs, verifying that specs are meet, and verifying basic functionality.
Lacking or Poorly Written Requirements
If requirements are lacking or poorly written, then the test team must have a defined method
for uncovering and defining test objectives.
Computer System Verification Example
table1-7.png
About the execution of the test plan
The test plan should be executed as designed. If the plan cannot be executed as
designed it should be changed, or notations made as to what aspects of the plan were
not performed.
The Differences Between Programmers and Testers
Testers, have learned that their job is testing for compliance to a specification.
Programmers have been trained that a problem is to be analyzed in depth and a perfect solution designed before any coding begins.
Testers are to make the software better not to find programmers’ mistakes.
Learn to Start Without a Specification,specifications by example,
Succeeding with Agile Software Development Using Scrum Chapter, Chapter 13
Kind of same concept used in RSpec.
Agile Software Development Using Scrum
On a Scrum project, testers and programmers need to unlearn these behaviors.
Testers learn that testing is also about conformance with user needs. Programmers
learn that a fully considered design is not always necessary (and sometimes not
even desirable) before coding begins.
Succeeding with Agile Software Development Using Scrum Chapter 1, 8
Glossary
Assessment: is the thoughtful analysis of testing results, and then taking
corrective action on the identified weaknesses.
Process: A process can be defined as a set of activities that represent the way work is performed. The outcome from a process is usually a product or service. Both software development and software testing are processes.
Quality Assurance: is preventive and inspects the process.
Quality Control: is detective and inspects the product.
Regression testing: Regression testing is retesting unchanged segments of the application system. It normally involves re-running tests that have been previously executed to ensure that the same results can be achieved currently as were achieved when the segment was last tested.

Why I use Spring MVC to create RESTful Web Services

I’m a pretty standard Java guy, so basically I have two options: JAX-RS and Spring MVC.

Header mapping

http://docs.spring.io/spring/docs/3.1.x/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html#headers()

___________________________________________

Injection even for a simple use case Injection, JAX-RS doesn’t work out of the box in Jersey 2.0 (the reference implementation).

Well, it is doable using a Binder.

http://stackoverflow.com/questions/16216759/dependency-injection-with-jersey-2-0

https://hk2.java.net/hk2-api/apidocs/org/glassfish/hk2/utilities/binding/AbstractBinder.html

___________________________________________

Async support

http://docs.spring.io/spring/docs/3.2.0.BUILD-SNAPSHOT/api/org/springframework/web/context/request/async/DeferredResult.html

http://notpurelytechnical.com/spring-3-2-rundown-async-support/

JAX-RS 2.0 (part of Java EE 7), is supposed to support it but my tests result on all sort of errors………is no final yet

___________________________________________

Dionea

This post had been on drafts for a long time but finally got a chance to publish it =)

During 2011, through an agreement between Mexico and Japan1, I had the opportunity to work on Dionea with the insightful guidance of Dr. Norio Sato.
During that time I learned a lot, tried new things, made good friends…. all this while enjoying the beautiful city of Kanazawa.

Thanks everyone!
Here is some material of my work on Dionea:

Dionea Presentation Sep 2011 (Intermediate presentation)

Automatic Recognition and Tracing of Forked Processes by Low-intrusive Type Debugger for Ruby and Python (Report)

Me presenting Dionea

Me presenting Dionea

1.Programa para la Formación de Recursos Humanos en la Asociación Estratégica Global México Japón.

____________________________________

Update: after continuing this work for years, I presented the results in San Francisco at PMAM ’15. Here is the DOI, and here is the PDF of Debugging parallel programs using fork handlers.

About sales costs in the software industry

I just took a look at “Estudio de salarios SG 2012“, which reviews the IT salaries in Mexico. In 2012, section “Tipo de actividad” shows that sales positions, i.e. “Preventa / Tech sales”  and “Venta y desarrollo de negocios” have higher salaries than [real] technical positions*.

In a post titled “Why everybody should do Sales!” Felix Wehmeyer from Oracle quotes  Zig Ziglar  Nothing happens until someone sells something. It is true but, if nobody does anything [else than sales], well, there is nothing to sell.

On the other hand, the  database guru Michael Stonebraker, notes that software products are expensive because their associated  sales costs. In his interesting talk “NewSQL vs. NoSQL for New OLTP” at LISA XXV he even says I hate the sales model. I’m with Michael.

So the questions are:

  1. Is necessary to assign budget to [spend money in]  sales?
  2. What would happen if instead of  investing in sales, that money would be invested in making better products, e.g. more extensive testing, level up the level of the programmers, R&D, contribute to the advancement of the field?
  3. If the sales guys are needed, is fair that they get as much or even more than the tech guys?
  4. If so much money is spent in sales [and marketing], is the software industry money (business) oriented rather technology driven ?
  5. ??

_____________________________

*Preventa / Tech sales: 47,341.18 MXN/month
Venta y desarrollo de negocios: 37,140.32 MXN/month
Arquitectura de soluciones 28,183.30 MXN/month

Object Oriented Concepts

Object Oriented Concepts
-Inheritance
-Encapsulation
-Polymorphism
-Open recursion
-Messages
-Aggregation (has), composition (is part of)
-Low coupling, high cohesion
-Component: Class, module…

Object Oriented Design Principles
-Single Responsibility
-Open-Closed
-Liskov substitution
-Inversion of Control

API Design

Exception handling

_