How to teach Sonar to find new bug?

Verfasst 19. April 2017 von janmaterne
Kategorien: en, Uncategorized

How to teach Sonar to find new bug?

Background

A few days ago my Jenkins instance gave me
the regurlar hint for updates. So I checked the changelog for changes which are
interesting to me. One of them hit my eye: Jenkins 2.53 – „GC Performance:
Avoid using FileInputStream and FileOutputStream in the core codebase.
“ I
read the two tickets (for Jenkins and the JDK itself) and was
surprised. I hadn’t knew that.

Some days later I regognized a longer
blog
about that by CloudBees on DZone.
Also interesting.

During thinking about changing the „new FIS/FOS“
to something better in the open source projects I am working on (Apache Ant, Apache Commons) – Stefan
was faster
. 😉

Using „search and (manually) replace“ on my
office-codebase I thought about how to ensure that nobody intoduced these
instantiations again?

The tool

At work we use a Sonar instance for detecting propable
issues. Sonar uses static code analysis for detecting errors – unclosed
streams, possible NullPointers, etc. But this (new) „bug pattern“ was not
implemented. Sonar itself could scan Java files, but also other languages.

The documentation of Sonar contains a
chapter of writing
custom Java rules
.

I don’t want to copy that tutorial with my
own word, but here are some highlights:

·       
Finally you end a with a plain JAR you‘ll have
to copy to the Sonar
extensions/plugins
directory, restart Sonar and activate your new rule.

·       
The Tutorial gives you a pointer to Github
repository
containing the sample sources, so you start with them. I decided
to start from scratch and copied the parts I could need instead of cloning the
whole repo and extend that.

·       
The entry class is an implementation of org.sonar.api.Plugin
and its declaration in the manifest file (key=Plugin-Class).

·       
This PlugIn registers two classes: one defining
your „repository“ with all the help files and metadata. And another which
registers the rules for production code or test code. They have to implement
the interfaces
org.sonar.api.server.rule.RulesDefinition respective org.sonar.plugins.java.api.CheckRegistrar.

·       
The rule itself could extend several entry
points, here the easiest is extending
org.sonar.plugins.java.api.IssuableSubscriptionVisitor, so you could benefit from the Java knowledge and the access to the
Java AST.

The rule

Implementing the IssuableSubscriptionVisitor itself is fairly easy:

1. 
Register which types of AST nodes you are
interested in – here instantiation of objects:
@Override

public
List nodesToVisit() {

    return
ImmutableList.of(Tree.Kind.
NEW_CLASS);

}

 

2.      Implement the logic for handling this. Here we are interested in
instantiation of
java.io.FileInputStream
or
java.io.FileOutputStream:

private
List
forbiddenClasses = ImmutableList.of(

        „java.io.FileInputStream“,

        „java.io.FileOutputStream“

    );

 

@Override

public void
visitNode(Tree
tree) {

    NewClassTree nct =
(NewClassTree)
tree;

    for(String forbiddenClass : forbiddenClasses) {

        if (nct.symbolType().is(forbiddenClass)) {

           
reportIssue(
tree, „Avoid using „ + forbiddenClass);

        }

    }

}

3.      The typecast in the visitNode
method could be done safely because we registered only (that) one type in the
nodesToVisit method. First I intended to use a list.contains(nct.symbolType()) but the is() method also checks
for subclasses.

When reporting
the issue the method registers the exact location via the give node.

4.      Provide metadata via a @org.sonar.check.Rule annotation:

@Rule(

   
key=
„AvoidClassRule“,

   
name=
„Avoid usage of FileInputStream or FileOutputStream“,

   
description=
„FileInputStream and FileOutputStream can cause memory
leaks

       
and should be replaced by NIO-functionality“
,

   
priority=Priority.
INFO,

   
tags={
„bug“}

)

public class AvoidClassRule
extends IssuableSubscriptionVisitor {

 

Sadly we have
to duplicate the key. Also the other information we have duplicated in metadata
files. I haven’t dived that deep to check if we could get rid of some
duplicatations here.

In addition to these Java files we supply
two resources: a JSON file with metadata and a HTML file with documentation.

The most interesting part of the JSON file
is (in my opinion) the remediation key: here you specify the amount of work to
fix the problem.

{

  „title“: „Avoid
usage of special Classes“,

  „status“:
„ready“,

  „remediation„: {

    „func„: „Constant\/Issue“,

    „constantCost“:
„5min“

  },

  „tags“: [

    „example“

  ],

  „defaultSeverity“:
„Minor“

}

The HTML file provides that part of the
which is shown as explanation of the rule.

blog1.jpg

Tests

Of course we have to test our code. The
example shows how to do that: provide classes which contains the error and use
org.sonar.java.checks.verifier.JavaCheckVerifier to verify that an issue was reported or not reported.

public class InValidFISInstance {

 

   
public void x() {

       
try (InputStream is = new
FileInputStream(
„test“)) {

           
is.available();

       
}
catch (IOException e) {

       
}

   
}

}

 

public class CompliantClass {

 

   
public void x() {

       
try (InputStream in = Files.newInputStream(Paths.get(„file.txt“))) {

           
in.available();

       
}
catch (IOException e) {

       
}

       
try (OutputStream out = Files.newOutputStream(Paths.get(„file.txt“))) {

           
out.flush();

       
}
catch (IOException e) {

       
}

   
}

   

}

 

public class AvoidClassRuleTest {

   

   
@Rule

   
public TestName testname = new
TestName();

 

 

   

   
@Test

    public void compliantClass() {

        verify( (file,rule) ->
JavaCheckVerifier.verifyNoIssue(
file, rule) );

   
}

   

   
@Test(expected=AssertionError.class)

   
public void invalidFISInstance()
{

       
verify( (
file,rule) ->
JavaCheckVerifier.verify(
file, rule) );

   
}

   

    private void
verify(BiConsumer
consumer) {

       
String
filename = String.format(„src/test/files/%s.java“,
StringUtils.capitalize(
testname.getMethodName()));

       
consumer.accept(filename, new
AvoidClassRule());

   
}

 

}

 

Some notes

The JSON and HTML resource have to be in /org/sonar/l10n/java/rules/squid/. Of course your RulesDefinition class could load them from wherever
you want, but the used JavaCheckVerifier expect them to be there.

The file names of the resources have to be ${ruleKey}.html and ${ruleKey}_${language}.json.

In constrast to the example I tend to also
have a positive test. I am not only interested in that the rule reports the
issue when required, it should do nothing if the code is compliant.

Rules could be parameterized via the web
ui. For that you annotate the field with
@RuleProperty. You could access the values via:

@Before

public void init() {

    JavaCustomRulesDefinition
rulesDefinition = new
JavaCustomRulesDefinition();

   
RulesDefinition.Context
context = new
RulesDefinition.Context();

    rulesDefinition.define(context);

    repository = context.repository((„RepositoryKey“);

}

 

@Test

public void
assertParameterProperties() {

    Param
param =
repository.rule(„RuleKey“).param(„paramName“);

    // Not
available:

    assertThat(param).isNull();

    // If
available:

    // assertThat(param).isNotNull();

    // assertThat(param.defaultValue()).isEqualTo(„Inject“);

    // assertThat(param.description()).isEqualTo(„…“);

    // assertThat(param.type()).isEqualTo(RuleParamType.STRING);

}

Werbung

Managing „My favorite plugins“ in Finale

Verfasst 24. August 2015 von janmaterne
Kategorien: en, Finale

Finale is a great notation program. After doing lot of work only by hand I start using plugins. Finale ships a lot of them (and you could purchase more or develop your own …). Now you have many of them, but use only a selection of them on a regular basis.

For easier overview Finale provides a favorite folder. How to get your favorites into that?

All plugins are stored on disk in your FINALE_HOME\Plug-Ins directory. There is also a favorite folder (in German „Bevorzugte Plug-Ins“). All you have to do is copy your required plugin into that folder.

Stop! – copy?

Maybe a copy would break your license (multiple installations), but basically a copy has to drawbacks: increased amount of disk space and hard to update (always update ALL copies).

So use LINKS for that 🙂

On windows navigate to your favorite-plugin-directory and create a link using „mklink TARGETNAME SOURCENAME“. For example on my german computer I’ll do

mklink CHKRNG32.FXT "..\Partitur und Arrangement\CHKRNG32.FXT"

for placing the „check range“-plugin.

My first Camel path was accepted

Verfasst 8. Januar 2014 von janmaterne
Kategorien: en

Hooray! My patch to CAMEL-6993 was accepted and will be in the next Camel version. 🙂

https://issues.apache.org/jira/browse/CAMEL-6993

Digital Music Sheet – An Evaluation

Verfasst 26. Dezember 2013 von janmaterne
Kategorien: en

Tags: , , ,

Background

A colluege of mine has a nice use case for his old iPad2 – he uses that for displaying the music. So he doesn’t have to carry all the paper when rehearsing or performing.

I am not only a trumpet player, I am also interested in technical gimmicks. So I also want to have such a thing. 😉

So I started an evaluation. Because I don’t own a tablet I am not fit to a special device. There are mainly three different platforms you could use: t dAndroid, Windows 8 RT and iPad. For the first two you can choose between several devices and sizes while the iPad is (still) available at 10.1″.

Because I am more familiar with Android because of my mobile, I decided to start here. I ordered a Samsung Galaxy Tab 10.1 2014. I like the hand writing there and its performance. But for playing music this device was too small for me. I don’t want to say, that 10.1″ is not enough in general, this format is too small for ME with my 10dpt bad eyes …

So I send that device back and did an evaluation of 13″ devices. If you want to have a device in that size, you won’t find as many as for 10″ … But on the other hand this limits the possibilities and the work for searching. 😉
With 13″ you could use only Android or WinRT at the moment. Apple had announced bigger devices and Samsung did that also, but I am curious NOW :O.

To be honest I am not sure about using Windows on a tablet … maybe I am prestressed from my old mobile running Windows Mobile.

Hardware

So now I had to search for candidates available in Germany (where I live). A little bit googling gave me: Odys Aeon, Archos Family Pad2, Archos Arnova Family Pad, Point of View Graphics Mobii 1325 Tab-P 1325  and the Hannspree SN14T71B.
Next step is collecting the requirements: should not be too big and too heavy. Nice display, actual OS, enough storage. Bluetooth is also a benefit for connecting to page-turners. And a low price would also be fine 🙂

13-tablets
From that table I choosed the Hannspree due its good hardware data. After that I did some searches again for a better price than the 245,30 € at Amazon and found  226,85 € at Atelco. After only a few days I got the tablet.

First impression of that tablet is: big. Reminds me on my 15″ notebook. But directly comparing with that the Hannspree is not all big as the notebook. And it’s much thinner.
What I dont like is the power adapter. It is not an USB one (the tablet has two micro USB ports) – it’s a propriety one.

Software

A real evaluation would have to evaluate multiple music readers. But I found Mobile Sheets it impressed me: you could to much of what you are doing with paper, behind that tool there is programmer who is very responsible in the tools forum and there is a free ‚test‘ version (full features but limited songs).

Mobile Sheets Free

Installation is done via Google Play Store very quickly. And there are some points I had written in the forum – u.a. as error feedback to the programmer. Very nice: only two days later I had a good feedback from the programmer.

There is also an open bugtracker where you could place your wishes. And here are my first few:

  • #60: MS supports image rotation. This is done via double-tipping. Maybe an alternative would be more intuitive: place two fingers on the tablet a let them rotate. Answer:v5 is adding rotation support where you can rotate any amount you want. This will be done with a slider on the song editor screen (with the ability to enter a value manually if desired).
  • #61: You could configure how to activate the overlap. Default is a single tap. Because chances increase that a simple „next page“ results in activating the overlap, I suggest having a „double-tap“ or „long-tap“ as default. (There was a forum entry here which shows how to configure that behaviour.) Answer: There are already three overlay modes available in MobileSheets. If you look under the options for these overlay settings, you have the option for single tap, long tap, or swipe.
  • #62: Just in idea: improve the AutoScroll and the Metronome by supplying more information. The user could mark the area which build a „line“ in the music and save how many measures this line would include. Additional information is the tempo (which defaults to the tempo of the previous line and finally in the tempo of the song).
    • A Metronome could change its tempo while playing according to the music.
    • AutoScroll could use this information for calculating the time which is needed for playing one line. Also AutoScroll could ignore not marked lines (because they dont contain music).Anwer: These are good ideas. I am introducing more advanced auto-scrolling options, but I didn’t really think about adjusting the metronome mid-song. In a future update, I will look into adding these capabilities.
  • Preload of the Setlist. Having all songs loaded into memory would speed up page-turning. If it is not possible to load the entire setlist (maybe to less memory) preloading the next page and holding the last page would also tune the speed. Answer: I already load up to 10 pages in each direction from the current page. Even this can cause problems on some devices with limited resources.
  • Multi display support. As the price for tablets decrease you could choose the trend using more „commodity hardware“ instead of „high end hardware“. You could combine multible tablets for building one „big“ display.
    You have to store where each of the tablets is (like dual monitor support in desktop operating systems). Then input and output could be done via all displays. One of the tablets will be the „master“ which holds the configuration and the songs. The „slaves“ only require a thin layer for transport the input and output data. Communication could be done via bluetooth or wifi.
    This feauture could be interesting for conductors who have to see much more music at once.
    Answer: I am adding two pages up at a time, but the other features you’ve mentioned are pretty extensive. I’m not sure when I will try to tackle them yet.
  • Support for „native keyboards“. When entering text you only have the virtual keyboard. Supplying other input formats would be nice:speech input and pen writing. Answer: Speech input is naturally built into the Android OS, is it not? There is usually a microphone button on the keyboard for this (I don’t have my tablet to verify this). I also support voice-based searching for songs already as well. As for native keyboards and pen writing, these are also OS things. If I plug the keyboard into my ASUS Transformer, it works automatically. I don’t know if you can plug in any usb keyboard, but in theory, my app shouldn’t have to change at all to support this if the OS supports it. After that explanation I found the way of „entering text by speaking“. Nice.
  • #63:   Export the metadata (title, artist, notes, …) as plain text (CSV, XML) for further processing. I think there was such a feature request already … Answer: This will be tackled along with the other sharing features.
  • #64: Table overview of all notes. So you could create a „todo list“ from all saved notes. Answer: Are you saying you want a list on the library screen of notes taken for every song? I can consider adding this if it would be useful to people.
  • #65: Custom stamps. E.g. a danger sign, glasses – so the musician knows to have a deeper look. Answer: User provided custom bitmaps are still on my list of things to finish adding, along with converting the existing implementation to use fonts instead of bitmaps for the core symbols.

Mobile Sheets Companion

Another good tool is Mobile Sheets Companion. This is a program for your PC for managing the data on your tablet. It is much easier to import files or enter text with a ‚real‘ computer than with a tablet.

MS-C is available without additional charge and requires a connection to a running MS instance. Connection could be established via USB or Wifi (I choose Wifi because that’s much easier).

External Tools

When playing from tablet you have to get your music into that tablet. One way is using PDF (Mobile Sheets supports graphics too). When handling with PDF is use these external tools:

  • scan2pdf: Scans one or multiple pages into a PDF file.
  • pdfsam: split, joins, rotate PDFs

It is also possible to attach audio files to songs. So these tools may be worthful:

  • Audiograbber: grabbing audio files from CD into your computer
  • mp3tag: add MP3 ID3-tags to your file

Mobile Sheet

After the first iteration I decided to stay at this combination (Mobile Sheets on Hannspree), so I purchased the full version.

Here I did more experiments – adding audio files. Are you familiar with ‚Play Alongs‘? You get the orchestra music on CD and the solo part as music. So you could play ‚with your own orchestra‘ (or band). If you now attach the audio file to the song, you could directly play the background music from your tablet. Switching to another song would directly start the next audio file. No more searching for the right CD. 😉 And if you have Bluetooth you maybe connect BT speakers to get the music louder …

Stand

For 10.1″ tablets there are lot of stands like the K&M 19742.

tablet-holderFor a 13″ tablet I haven’t found a good stand yet. So I place that on my usual music stand.

Custom Eclipse Window Title

Verfasst 6. November 2012 von janmaterne
Kategorien: Uncategorized

I used Eclipse for a long time. Now I have to manage multiple running instances – mostly for the development branch and the production branch of our project. The problem is distinguishing the running instances by their task icon/window title. I search a little bit and found how to customize the branding or the -showlocation startup parameter. But after looking at the Eclipse preferences I found a very nice way: General | Workspace | Workspace name

Bild

This results in a nice and short solution to this problem – in the task bar

Bild

and in the Eclipse title bar

Bild

Custom Eclipse Window Title

Verfasst 6. November 2012 von janmaterne
Kategorien: Uncategorized

Tags: , ,

I used Eclipse for a long time. Now I have to manage multiple running instances – mostly for the development branch and the production branch of our project. The problem is distinguishing the running instances by their task icon/window title. I search a little bit and found how to customize the branding or the -showlocation startup parameter. But after looking at the Eclipse preferences I found a very nice way: General | Workspace | Workspace name

Bild

This results in a nice and short solution to this problem – in the task bar

Bild

and in the Eclipse title bar

Bild

Java-Cron-Jobs with Spring and Quartz

Verfasst 3. Februar 2012 von janmaterne
Kategorien: en, Spring, Uncategorized

Tags: , , , , ,

We have several Jobs running the business. At the moment they are implemented as Spring-driven TimerTasks. But the next job should be run only nightly and a cron-like configuration syntax would be fine.

So I found Quartz and had to integrate that. For getting familiar with Quartz+Spring I wrote a small proof of concept.

The job implementation is just a POJO with a public void method. It should not throw any exception. The bean can be configured via usual Spring DI:

public class MyBean {

private String message;

public void doIt() {
System.out.println("Hello World: " + message);
}

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

}

So fine. But how to test? For this PoC a very simple test is ok – just wait for some Quartz run and check the output manually:

import static org.junit.Assert.assertNotNull;

import org.junit.AfterClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class QuartzTest {

@Test
public void context() {
System.out.println("Starting Spring and within that: Quartz");
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-config.xml");
assertNotNull(ctx);
}

@AfterClass public static void sleep() throws InterruptedException {
System.out.println("Wait for job output");
Thread.sleep(8000);
System.out.println("ready");
}
}

When using Spring, we have to provide the configuration.
First I define my Job-bean

<bean id="myBean">
<property name="message" value="TEST" />
</bean>

After that I configure Quartz:

<bean id="scheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
scope="singleton">
<property name="triggers">
<list>
<!-- trigger list -->
<ref bean="job1" />
</list>
</property>
</bean>

The binding between job and Quartz is done via a configured CronTriggerBean.

<bean id="job1">
<property name="cronExpression" value="0/2 * * * * ?" />
<property name="jobDetail">
<bean>
<property name="name" value="job1" />
<property name="group" value="nightlyJobs" />
<!-- Delegieren auf unsere Bean und unsere Methode -->
<property name="targetObject" ref="myBean" />
<property name="targetMethod" value="doIt" />
<property name="concurrent" value="false" />
</bean>
</property>
</bean>

This CronTriggerBean defines two values:
1. cronExpression specifies when to run the job. An explanation about that syntax can be found at http://www.quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger.
2. jobDetail specifies a JavaBean with information about the job. But we dont have to write this Bean, we just can configure the generic one from Spring:
– name and group for controlling the execution via control interfaces
– targetObject and targetMethod for the delegation to our JobBean
– specify if this job should run in concurrent mode (where concurrent means in one VM!)

Building this sample with Maven is easy. You’ll need just following dependencies:

  • org.springframework::spring-core::3.0.5.RELEASE
  • org.springframework::spring-context::3.0.5.RELEASE
  • org.springframework::spring-context-support::3.0.5.RELEASE
  • org.springframework::spring-tx::3.0.5.RELEASE
  • org.quartz-scheduler::quartz::1.8.5
  • junit::junit::4.9::{scope=test}

As far as I read you can’t use Quartz 2.x because Spring 3 doesnt support that. But I havent tried it.

When running you’ll get this output:

Starting Spring and within that: Quartz
... logs from Spring
... infos from SLF4J
INFO: Starting Quartz Scheduler now
Wait for job output
Hello World: TEST
Hello World: TEST
Hello World: TEST
Hello World: TEST
Hello World: TEST
ready

Die Photovoltaikanlage im Steuerrecht

Verfasst 20. August 2011 von janmaterne
Kategorien: Allgemein, Uncategorized

Tags: , , ,

Tja, nun bin ich auch betroffen. Ich habe eine Photovoltaikanlage geordert. Und der Vertreter sprach davon, dass man diese über 20 Jahre lang abschreiben kann und sogar die Mehrwertsteuer wiederbekommt! Toll …. Aber als ehemaliger Steuerrechtler wollte ich das genauer wissen. Ja, das EEG, das Erneuerbare-Energien-Gesetz, könnte ja so einiges bieten.

Aber fündig geworden bin ich ganz normal im Einkommensteuergesetz (EStG) wegen der Abschreibung und dem Umsatzsteuergesetz (UStG) wegen der Märchensteuer… Also mal von vorne 😉

Das UStG betrifft „Unternehmer“. Und jeder der „nachhaltig“ Einnahmen erzielt, ist erst einmal Unternehmer. Da ich nun mit der Photovoltaikanlage ein paar Jahre Strom einspeise und vergütet bekomme, ist dieses zu bejahen. Auf einen eventuellen Gewinn ist nach UStG übrigens nicht abzustellen. Ich bin also Unternehmer im Sinne der Umsatzsteuer. Damit habe ich entsprechende Rechte und Pflichten. Mein primäres Recht: der Vorsteuerabzug. Hierüber bekomme ich die USt des Kaufpreises wieder. Die Pflichten: regelmäßige Umsatzsteuererklärungen (idR jährlich) und die Versteuerung meiner Einnahmen. Ups – muss ich da 19% von meinem eingenommen Geld wieder abführen? Ne – der Energieversorger muss wissen, dass ich Unternehmer bin, dann zahlt er die oben drauf – meine „Rendite“ ist also nicht davon betroffen. 🙂

Einnahmen = Unternehmer = USt-Erklärung? Aber nicht immer! Das UStG führt im §19 die „Kleinunternehmerregel“. Wer wenig einnimmt, kann sich den ganzen steuerlichen Kram sparen. Es entfallen somit die lästigen Pflichten – aber eben auch die Rechte! Ich will aber meine Vorsteuer …. Ok, bleibe ich halt Unternehmer. Einen Strich könnte noch eine weitere Regel durch die Rechnung machen. Wenn meine Einnahmen komplett steuerfrei wären, könnte ich auch keine Vorsteuer abziehen. Sind sie aber nicht und daher bleibts beim Regelfall „Vorsteuer+Erklärungen“.

Aber wer vorher schon Kleinunternehmer war, muss etwas anderes berücksichtigen: das UStG kennt pro Person nur ein Unternehmen! Wenn die Photovoltaikanlage also regelbesteuert werden soll, dann werden auch die regelmäßigen eBay-Verkäufe oder Programmierarbeiten grundsätzlich steuerpflichtig … (eventuelle Steuerbefreiungen müssten dann geprüft werden). Also Vorsicht!

Nachdem ich also meine 19% Märchensteuer für den Kauf der Anlage wiederbekomme, die abzuführende Märchensteuer für die Einspeisung vom Versorger oben drauf kriege und also nur regelmäßig meine Steuerklärung machen muss, wäre noch zu klären, wie das mit der Abschreibung kommt.

Die Antwort liegt im EStG. Dieses gilt für alle „unbeschränkt Einkommersteuerpflichtigen“. Jemand mit Hauptwohnsitz in Deutschland ist das. Und damit dürfte dann die meisten sein, die sich eine PV-Anlagen aufs eigene Dach schrauben lassen… Per EStG greift der Staat nun für jeden verdienten Euro etwas ab. Auch hier gibt es Befreiungsvorschriften, die aber nicht zum Zuge kommen. Die Frage stellt sich nun nach dem Verdienst.

Mit dem Einspeisen von Strom in das Stromnetz gegen Geld nehme ich am gewerblichen Leben teil. Damit sind die Einspeisevergütungen Einnahmen aus Gewerbebetrieb (§15 EStG). (@myself: Vielleicht noch mal genauer subsummieren 😉 Der zu versteuernde „Verdienst“ ermittelt sich somit nach §4 und im einfachen Fall nach §4(3) EStG – der „Einnahme-Überschuss-Rechnung“. Also: alle Einnahmen abzüglich aller Ausgaben ergibt den Gewinn oder halt den Verlust, der dann mit allen anderen Einnahmen (z.B. Arbeitslohn, Künstlerhonorar, Mieteinnahmen, …) zusammen zur Einkommensteuer veranlagt wird.

Also alle Einnahmen: mmh, da wäre nur die brutto-Einspeisevergütung.

Und die Ausgaben? Der direkte Geldabfluss: die USt auf die Einspeisevergütung, die ich ja ans Finanzamt abführen muss. Eventuelle Ausgaben für eine PV-Versicherung, …. falls mal eine Wartung fällig wird … Finanzierungskosten (Zinsen, falls ich die Anlage fremdfinanziere) … Und dann noch die „umgelegten Ausgaben“ – die „Abschreibung für Abnutzung“ oder kurz AfA. Die kann ich gem. §7 EStG ansetzten und zwar so, dass die Anschaffungs- oder Herstellungskosten auf die Nutzungsdauer umgelegt werden. Die Anschaffungskosten sind hier der Netto-Preis, da ich als (USt)-Unternehmer die Märchensteuer ja nicht selber tragen muss. Die Nutzungsdauer wurde mal mit 20 Jahren festgelegt. Die Abschreibung kann mittlerweile nur noch linear erfolgen, so dass ich 5% jährlich abschreiben kann. Wobei allerdings monatsgenau zu rechnen ist.

Spitze, habe ich also auch die Abschreibung gefunden. Aber halt – da gibt es noch eine: Zur Förderung kleiner Betriebe (so wie mein PV-Betrieb) hat der Gesetzgeber die Förderung nach §7g EStG „Investitionsabzugsbeträge und Sonderabschreibungen zur Förderung kleiner und mittlerer Betriebe“ eingeführt. Mal genauer ansehen: „Steuerpflichte können für zukünftige Anschaffungen von beweglichen abnutzbaren Wirtschaftsgütern bis zu 40% der AK abziehen, wenn [der Betrieb klein ist, also bei einer 4(3)-Rechnung nicht mehr als 100.000 Euro jährlich rausspringen.“ Klingt gut, wenn es da nicht heißen würde „zukünftig“. Also im folgenden Jahr…. Also für alle, die die PV noch planen: wenn der Auftrag dieses Jahr rausgeht, aber erst im nächsten Jahr realisiert wird, wird das für Euch interessant! Aber dieser Abzug verschiebt nur die Kosten – der im Vorjahr abgezogene Betrag ist im Investitionsjahr wieder drauf zu rechnen. Schade …

Aber noch einen im 7g: nach Absatz 5 können zusätzlich zur regulären (monatsgenauen) AfA weitere 20% in den ersten fünf Jahren abgesetzt werden! (Was dann natürlich nicht das Abschreibungsvolumen erhöht. Die Anlage ist dann schneller abgeschrieben.) Mal genauer ansehen:

  1. abnutzbar
  2. beweglich
  3. Wirtschaftsgut (WG) des Anlagevermögens
  4. Voraussetzungen des Absatzes 6:
    1. Kleinbetrieb wie vor (4(3)-Überschuss 100.000 €; 4(1)-Bilanz-Betriebsvermögen bis 235.000 €)
    2. WG im Anschaffungs- und Folgejahr im Inland
    3. fast ausschließlich betrieblich genutzt

Also:

  • „abnutzbar“: jepp, sonst könnte ich das ja gar nicht linear abschreiben (bND=20Jahre)
  • „WG des AV“: jepp, will die Anlage ja betreiben
  • „Kleinbetrieb“: so groß ist meine PV auch wieder nicht, also ja.
  • „Inland“: da steht mein Haus, also auch ok
  • „betriebliche Nutzung“: sowohl das Einspeisen von Strom bringt Geld als auch der Eigenverbrauch (!). Damit 100% „betriebliche“ Nutzung.
  • „beweglich“????? Die ist doch fest am Dach! Aber halt nicht fest genug 🙂 Man könnte sie abmontieren ohne dass die PV oder das Haus Schaden nehmen würde. Damit liegt ein „Scheinbestandteil“ des Hauses vor und die PV bleibt „beweglich“ – puh …. Also auch ok.

Damit habe ich eine zusätzliche Abschreibungsmöglichkeit gefunden.

Dem Gewerbesteuerrecht widme ich mich jetzt hier nicht. Ein paar Links müsste ich noch einpflegen … Aber noch kurz eine Anregung wegen der Finanzierungskosten: Wenn zusätzlich zur PV beispielsweise noch ein Auto oder eine neue Heizung fällig wird und nicht beides direkt bezahlt werden kann, dann bitte die PV finanzieren, da diese Zinsen bei der ESt abgesetzt werden können. Bei Auto und Heizung ist das eher unwahrscheinlich … Ein nachträgliches Ändern müsste gehen (ich meine, da gab es mal einige BFH-Urteile), werden aber bestimmt nicht so einfach geschluckt …

10 vor Weihnachten

Verfasst 24. November 2010 von janmaterne
Kategorien: Allgemein, de

Tags: , , ,

Die 10 Blechbläser von NiederrheinBrass mit dem Schlagwerker Rolf Hildebrandt werden die Kirchenmauern wieder ordentlich zum Wackeln bringen. Das Programm ist wie immer abwechslungsreich: Zwischen Bach und Big-Band-Sound sollen die Konzertbesucher auch selbst mitsingen bei alten wohl bekannten Advents- und Weihnachtsliedern.

So 05.12.2010 (2.Advent) 17:00: Ev.Stadtkirche Moers
So 12.12.2010 (3.Advent) 17:00: Ev.Dorfkirche Vluyn

Eintritt frei.

Weitere Infos unter www.NiederrheinBrass.de

Update to the Hudson book

Verfasst 22. November 2010 von janmaterne
Kategorien: en, Hudson

Tags: , ,

News from the Hudson by Simon Wiest book I reviewed: it is now in the press and if you order it (e.g. at Amazon), you should be able to read it by Xmas 😉 (if you can read German :-O )